Salome HOME
Update of CheckDone master
authoryoann.audouin <yoann.audouin@edf.fr>
Thu, 21 Mar 2024 14:25:31 +0000 (15:25 +0100)
committeryoann.audouin <yoann.audouin@edf.fr>
Thu, 21 Mar 2024 14:25:31 +0000 (15:25 +0100)
Removed the isDone argument using cxx isComputedOK instead (now in the
idl)
Corrected a bug when doing multiple compute checkCompute was not
properly removed.

3365 files changed:
CMakeLists.txt
CTestTestfileInstall.cmake.in [new file with mode: 0644]
README
SMESH_version.h.in
SalomeSMESHConfig.cmake.in
adm_local/CMakeLists.txt
adm_local/unix/CMakeLists.txt
adm_local/unix/config_files/CMakeLists.txt
adm_local/unix/config_files/check_Platform.m4
adm_local/unix/config_files/check_SMESH.m4
adm_local/unix/config_files/check_cgal.m4
adm_local/unix/config_files/check_cgns.m4
adm_local/unix/config_files/check_f77.m4
adm_local/unix/config_files/check_padder.m4
adm_local/unix/config_files/check_qwt.m4
bin/CMakeLists.txt
bin/VERSION.in
bin/smesh_setenv.py
bin/smesh_test.py
bin/smesh_wget.py [new file with mode: 0644]
doc/CMakeLists.txt
doc/examples/0README [new file with mode: 0644]
doc/examples/CMakeLists.txt [new file with mode: 0644]
doc/examples/CTestTestfileInstall.cmake [new file with mode: 0644]
doc/examples/MGAdaptTests_without_session.py [new file with mode: 0644]
doc/examples/a3DmeshOnModified2Dmesh.py [new file with mode: 0644]
doc/examples/cartesian_algo.py [new file with mode: 0644]
doc/examples/create_dual_mesh.py [new file with mode: 0644]
doc/examples/creating_meshes_ex01.py [new file with mode: 0644]
doc/examples/creating_meshes_ex02.py [new file with mode: 0644]
doc/examples/creating_meshes_ex03.py [new file with mode: 0644]
doc/examples/creating_meshes_ex04.py [new file with mode: 0644]
doc/examples/creating_meshes_ex05.py [new file with mode: 0644]
doc/examples/creating_meshes_ex06.py [new file with mode: 0644]
doc/examples/creating_meshes_ex07.py [new file with mode: 0644]
doc/examples/creating_meshes_ex08.py [new file with mode: 0644]
doc/examples/creating_parallel_2D_mesh.py [new file with mode: 0644]
doc/examples/creating_parallel_gmsh_mesh.py [new file with mode: 0644]
doc/examples/creating_parallel_mesh.py [new file with mode: 0644]
doc/examples/data/test_01.med [new file with mode: 0644]
doc/examples/data/test_02.med [new file with mode: 0644]
doc/examples/data/test_02_bg.med [new file with mode: 0644]
doc/examples/data/test_04.med [new file with mode: 0644]
doc/examples/data/test_06.med [new file with mode: 0644]
doc/examples/data/test_07.med [new file with mode: 0644]
doc/examples/data/test_08.med [new file with mode: 0644]
doc/examples/data/test_08_bg.med [new file with mode: 0644]
doc/examples/data/test_10.med [new file with mode: 0644]
doc/examples/data/test_11.med [new file with mode: 0644]
doc/examples/data/test_13.med [new file with mode: 0644]
doc/examples/data/test_homard_adapt.med [new file with mode: 0644]
doc/examples/data/tutorial_4.00.med [new file with mode: 0644]
doc/examples/data/tutorial_4.xao [new file with mode: 0644]
doc/examples/data/tutorial_5.00.med [new file with mode: 0644]
doc/examples/data/tutorial_5.fr.med [new file with mode: 0644]
doc/examples/defining_hypotheses_adaptive1d.py [new file with mode: 0644]
doc/examples/defining_hypotheses_ex01.py [new file with mode: 0644]
doc/examples/defining_hypotheses_ex02.py [new file with mode: 0644]
doc/examples/defining_hypotheses_ex03.py [new file with mode: 0644]
doc/examples/defining_hypotheses_ex04.py [new file with mode: 0644]
doc/examples/defining_hypotheses_ex05.py [new file with mode: 0644]
doc/examples/defining_hypotheses_ex06.py [new file with mode: 0644]
doc/examples/defining_hypotheses_ex07.py [new file with mode: 0644]
doc/examples/defining_hypotheses_ex08.py [new file with mode: 0644]
doc/examples/defining_hypotheses_ex09.py [new file with mode: 0644]
doc/examples/defining_hypotheses_ex10.py [new file with mode: 0644]
doc/examples/defining_hypotheses_ex11.py [new file with mode: 0644]
doc/examples/defining_hypotheses_ex12.py [new file with mode: 0644]
doc/examples/defining_hypotheses_ex13.py [new file with mode: 0644]
doc/examples/defining_hypotheses_ex14.py [new file with mode: 0644]
doc/examples/defining_hypotheses_ex15.py [new file with mode: 0644]
doc/examples/defining_hypotheses_ex16.py [new file with mode: 0644]
doc/examples/defining_hypotheses_ex17.py [new file with mode: 0644]
doc/examples/defining_hypotheses_len_near_vertex.py [new file with mode: 0644]
doc/examples/defining_hypotheses_vlapi_ex17.py [new file with mode: 0644]
doc/examples/filters_belong2group.py [new file with mode: 0644]
doc/examples/filters_ex01.py [new file with mode: 0644]
doc/examples/filters_ex02.py [new file with mode: 0644]
doc/examples/filters_ex03.py [new file with mode: 0644]
doc/examples/filters_ex04.py [new file with mode: 0644]
doc/examples/filters_ex05.py [new file with mode: 0644]
doc/examples/filters_ex06.py [new file with mode: 0644]
doc/examples/filters_ex07.py [new file with mode: 0644]
doc/examples/filters_ex08.py [new file with mode: 0644]
doc/examples/filters_ex09.py [new file with mode: 0644]
doc/examples/filters_ex10.py [new file with mode: 0644]
doc/examples/filters_ex11.py [new file with mode: 0644]
doc/examples/filters_ex12.py [new file with mode: 0644]
doc/examples/filters_ex13.py [new file with mode: 0644]
doc/examples/filters_ex14.py [new file with mode: 0644]
doc/examples/filters_ex15.py [new file with mode: 0644]
doc/examples/filters_ex16.py [new file with mode: 0644]
doc/examples/filters_ex17.py [new file with mode: 0644]
doc/examples/filters_ex18.py [new file with mode: 0644]
doc/examples/filters_ex19.py [new file with mode: 0644]
doc/examples/filters_ex20.py [new file with mode: 0644]
doc/examples/filters_ex21.py [new file with mode: 0644]
doc/examples/filters_ex22.py [new file with mode: 0644]
doc/examples/filters_ex23.py [new file with mode: 0644]
doc/examples/filters_ex24.py [new file with mode: 0644]
doc/examples/filters_ex25.py [new file with mode: 0644]
doc/examples/filters_ex26.py [new file with mode: 0644]
doc/examples/filters_ex27.py [new file with mode: 0644]
doc/examples/filters_ex28.py [new file with mode: 0644]
doc/examples/filters_ex29.py [new file with mode: 0644]
doc/examples/filters_ex30.py [new file with mode: 0644]
doc/examples/filters_ex31.py [new file with mode: 0644]
doc/examples/filters_ex32.py [new file with mode: 0644]
doc/examples/filters_ex33.py [new file with mode: 0644]
doc/examples/filters_ex34.py [new file with mode: 0644]
doc/examples/filters_ex35.py [new file with mode: 0644]
doc/examples/filters_ex36.py [new file with mode: 0644]
doc/examples/filters_ex37.py [new file with mode: 0644]
doc/examples/filters_ex38.py [new file with mode: 0644]
doc/examples/filters_ex39.py [new file with mode: 0644]
doc/examples/filters_ex40.py [new file with mode: 0644]
doc/examples/filters_ex41.py [new file with mode: 0644]
doc/examples/filters_node_nb_conn.py [new file with mode: 0644]
doc/examples/generate_flat_elements.py [new file with mode: 0644]
doc/examples/grouping_elements_ex01.py [new file with mode: 0644]
doc/examples/grouping_elements_ex02.py [new file with mode: 0644]
doc/examples/grouping_elements_ex03.py [new file with mode: 0644]
doc/examples/grouping_elements_ex04.py [new file with mode: 0644]
doc/examples/grouping_elements_ex05.py [new file with mode: 0644]
doc/examples/grouping_elements_ex06.py [new file with mode: 0644]
doc/examples/grouping_elements_ex07.py [new file with mode: 0644]
doc/examples/grouping_elements_ex08.py [new file with mode: 0644]
doc/examples/grouping_elements_ex09.py [new file with mode: 0644]
doc/examples/measurements_ex01.py [new file with mode: 0644]
doc/examples/measurements_ex02.py [new file with mode: 0644]
doc/examples/measurements_ex03.py [new file with mode: 0644]
doc/examples/measurements_ex04.py [new file with mode: 0644]
doc/examples/mechanic.py [new file with mode: 0644]
doc/examples/mesh_3d.py [new file with mode: 0644]
doc/examples/modifying_meshes_cut_triangles.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex01.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex02.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex03.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex04.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex05.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex06.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex07.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex08.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex09.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex10.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex11.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex12.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex13.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex15.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex16.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex17.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex18.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex19.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex20.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex21.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex22.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex23.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex24.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex25.py [new file with mode: 0644]
doc/examples/modifying_meshes_ex26.py [new file with mode: 0644]
doc/examples/modifying_meshes_split_vol.py [new file with mode: 0644]
doc/examples/notebook_smesh.py [new file with mode: 0644]
doc/examples/prism_3d_algo.py [new file with mode: 0644]
doc/examples/quad_medial_axis_algo.py [new file with mode: 0644]
doc/examples/quality_controls_defl.py [new file with mode: 0644]
doc/examples/quality_controls_ex01.py [new file with mode: 0644]
doc/examples/quality_controls_ex02.py [new file with mode: 0644]
doc/examples/quality_controls_ex03.py [new file with mode: 0644]
doc/examples/quality_controls_ex04.py [new file with mode: 0644]
doc/examples/quality_controls_ex05.py [new file with mode: 0644]
doc/examples/quality_controls_ex06.py [new file with mode: 0644]
doc/examples/quality_controls_ex07.py [new file with mode: 0644]
doc/examples/quality_controls_ex08.py [new file with mode: 0644]
doc/examples/quality_controls_ex09.py [new file with mode: 0644]
doc/examples/quality_controls_ex10.py [new file with mode: 0644]
doc/examples/quality_controls_ex11.py [new file with mode: 0644]
doc/examples/quality_controls_ex12.py [new file with mode: 0644]
doc/examples/quality_controls_ex13.py [new file with mode: 0644]
doc/examples/quality_controls_ex14.py [new file with mode: 0644]
doc/examples/quality_controls_ex15.py [new file with mode: 0644]
doc/examples/quality_controls_ex16.py [new file with mode: 0644]
doc/examples/quality_controls_ex17.py [new file with mode: 0644]
doc/examples/quality_controls_ex18.py [new file with mode: 0644]
doc/examples/quality_controls_ex19.py [new file with mode: 0644]
doc/examples/quality_controls_ex20.py [new file with mode: 0644]
doc/examples/quality_controls_ex21.py [new file with mode: 0644]
doc/examples/quality_controls_ex22.py [new file with mode: 0644]
doc/examples/quality_controls_ex23.py [new file with mode: 0644]
doc/examples/quality_controls_ex24.py [new file with mode: 0644]
doc/examples/radial_prism_3d_algo.py [new file with mode: 0644]
doc/examples/split_biquad.py [new file with mode: 0644]
doc/examples/test_homard_adapt.py [new file with mode: 0644]
doc/examples/test_uniform_refinement.py [new file with mode: 0644]
doc/examples/tests.set [new file with mode: 0644]
doc/examples/transforming_meshes_ex01.py [new file with mode: 0644]
doc/examples/transforming_meshes_ex02.py [new file with mode: 0644]
doc/examples/transforming_meshes_ex03.py [new file with mode: 0644]
doc/examples/transforming_meshes_ex04.py [new file with mode: 0644]
doc/examples/transforming_meshes_ex05.py [new file with mode: 0644]
doc/examples/transforming_meshes_ex06.py [new file with mode: 0644]
doc/examples/transforming_meshes_ex07.py [new file with mode: 0644]
doc/examples/transforming_meshes_ex08.py [new file with mode: 0644]
doc/examples/transforming_meshes_ex09.py [new file with mode: 0644]
doc/examples/transforming_meshes_ex10.py [new file with mode: 0644]
doc/examples/transforming_meshes_ex11.py [new file with mode: 0644]
doc/examples/transforming_meshes_ex12.py [new file with mode: 0644]
doc/examples/transforming_meshes_ex13.py [new file with mode: 0644]
doc/examples/transforming_meshes_ex14.py [new file with mode: 0644]
doc/examples/transforming_meshes_ex15.py [new file with mode: 0644]
doc/examples/use_existing_faces.py [new file with mode: 0644]
doc/examples/viewing_meshes_ex01.py [new file with mode: 0644]
doc/examples/viewing_meshes_ex02.py [new file with mode: 0644]
doc/examples/viewing_meshes_ex03.py [new file with mode: 0644]
doc/gui/CMakeLists.txt [new file with mode: 0644]
doc/gui/collect_mesh_methods.py [new file with mode: 0755]
doc/gui/conf.py.in [new file with mode: 0644]
doc/gui/images/2d_from_3d_dlg.png [new file with mode: 0644]
doc/gui/images/2d_from_3d_example.png [new file with mode: 0644]
doc/gui/images/2d_from_3d_ico.png [new file with mode: 0644]
doc/gui/images/2d_from_3d_menu.png [new file with mode: 0644]
doc/gui/images/2d_mesh_from_3d_elements.jpg [new file with mode: 0644]
doc/gui/images/2d_mesh_from_3d_elements_dlg.png [new file with mode: 0644]
doc/gui/images/2d_mesh_from_3d_elements_icon.png [new file with mode: 0644]
doc/gui/images/Clipping_Absolute.png [new file with mode: 0644]
doc/gui/images/Clipping_Relative.png [new file with mode: 0644]
doc/gui/images/Nut_sharp_edges.png [new file with mode: 0644]
doc/gui/images/a-arithmetic1d.png [new file with mode: 0644]
doc/gui/images/a-averagelength.png [new file with mode: 0644]
doc/gui/images/a-clipping2.png [new file with mode: 0644]
doc/gui/images/a-creategroup.png [new file with mode: 0644]
doc/gui/images/a-createpolyhedralvolume.png [new file with mode: 0644]
doc/gui/images/a-cuttingofquadrangles.png [new file with mode: 0644]
doc/gui/images/a-deflection1d.png [new file with mode: 0644]
doc/gui/images/a-filteronfaces.png [new file with mode: 0644]
doc/gui/images/a-geometric1d.png [new file with mode: 0644]
doc/gui/images/a-maxelarea.png [new file with mode: 0644]
doc/gui/images/a-maxelvolume.png [new file with mode: 0644]
doc/gui/images/a-maxsize1d.png [new file with mode: 0644]
doc/gui/images/a-nbsegments1.png [new file with mode: 0644]
doc/gui/images/a-nbsegments2.png [new file with mode: 0644]
doc/gui/images/a-patterntype.png [new file with mode: 0644]
doc/gui/images/a-patterntype1.png [new file with mode: 0644]
doc/gui/images/a-standmeshinfo.png [new file with mode: 0644]
doc/gui/images/a-startendlength.png [new file with mode: 0644]
doc/gui/images/a-transparency.png [new file with mode: 0644]
doc/gui/images/a-unionoftriangles.png [new file with mode: 0644]
doc/gui/images/a-viewgeneral.png [new file with mode: 0644]
doc/gui/images/adaptation_01.png [new file with mode: 0644]
doc/gui/images/adaptation_02.png [new file with mode: 0644]
doc/gui/images/adaptation_with_homard_advanced.png [new file with mode: 0644]
doc/gui/images/adaptation_with_homard_arguments.png [new file with mode: 0644]
doc/gui/images/adaptation_with_homard_boundary_analytical.png [new file with mode: 0644]
doc/gui/images/adaptation_with_homard_boundary_cao.png [new file with mode: 0644]
doc/gui/images/adaptation_with_homard_boundary_discrete.png [new file with mode: 0644]
doc/gui/images/adaptation_with_homard_boundary_groups.png [new file with mode: 0644]
doc/gui/images/adaptive1d.png [new file with mode: 0644]
doc/gui/images/adaptive1d_sample_mesh.png [new file with mode: 0644]
doc/gui/images/add.gif [new file with mode: 0644]
doc/gui/images/add.png [new file with mode: 0644]
doc/gui/images/add0delement.png [new file with mode: 0644]
doc/gui/images/add_0delement.png [new file with mode: 0644]
doc/gui/images/add_ball.png [new file with mode: 0644]
doc/gui/images/add_edge.png [new file with mode: 0644]
doc/gui/images/add_node.png [new file with mode: 0644]
doc/gui/images/add_node_on_face-dlg.png [new file with mode: 0644]
doc/gui/images/add_node_on_face.png [new file with mode: 0644]
doc/gui/images/add_node_on_segment-dlg.png [new file with mode: 0644]
doc/gui/images/add_node_on_segment.png [new file with mode: 0644]
doc/gui/images/add_polygone.png [new file with mode: 0644]
doc/gui/images/add_polyhedron.png [new file with mode: 0644]
doc/gui/images/add_quadrangle.png [new file with mode: 0644]
doc/gui/images/add_triangle.png [new file with mode: 0644]
doc/gui/images/addball.png [new file with mode: 0644]
doc/gui/images/addedge.png [new file with mode: 0644]
doc/gui/images/addhexahedron.png [new file with mode: 0644]
doc/gui/images/addinfo_group.png [new file with mode: 0644]
doc/gui/images/addinfo_mesh.png [new file with mode: 0644]
doc/gui/images/addinfo_submesh.png [new file with mode: 0644]
doc/gui/images/addnode.png [new file with mode: 0644]
doc/gui/images/addnode_notebook.png [new file with mode: 0644]
doc/gui/images/addpolygon.png [new file with mode: 0644]
doc/gui/images/addquadrangle.png [new file with mode: 0644]
doc/gui/images/addtetrahedron.png [new file with mode: 0644]
doc/gui/images/addtriangle.png [new file with mode: 0644]
doc/gui/images/advanced_mesh_infos.png [new file with mode: 0644]
doc/gui/images/analyticdensity.png [new file with mode: 0644]
doc/gui/images/angle_measure.png [new file with mode: 0644]
doc/gui/images/aqt.png [new file with mode: 0644]
doc/gui/images/automaticlength.png [new file with mode: 0644]
doc/gui/images/b-art_end_length.png [new file with mode: 0644]
doc/gui/images/b-erage_length.png [new file with mode: 0644]
doc/gui/images/b-flection1d.png [new file with mode: 0644]
doc/gui/images/b-ithmetic1d.png [new file with mode: 0644]
doc/gui/images/b-mberofsegments.png [new file with mode: 0644]
doc/gui/images/b-mesh_infos.png [new file with mode: 0644]
doc/gui/images/bare_border_faces_smpl.png [new file with mode: 0644]
doc/gui/images/bare_border_volumes_smpl.png [new file with mode: 0644]
doc/gui/images/basic_props.png [new file with mode: 0644]
doc/gui/images/before_clipping.png [new file with mode: 0644]
doc/gui/images/before_clipping_preview.png [new file with mode: 0644]
doc/gui/images/block_renumber_hyp.png [new file with mode: 0644]
doc/gui/images/bnd_box.png [new file with mode: 0644]
doc/gui/images/bnd_box_preview.png [new file with mode: 0644]
doc/gui/images/buildcompound.png [new file with mode: 0644]
doc/gui/images/buildcompound_groups.png [new file with mode: 0644]
doc/gui/images/cartesian3D_hyp.png [new file with mode: 0644]
doc/gui/images/cartesian3D_sphere.png [new file with mode: 0644]
doc/gui/images/cartesian_implement_edge.png [new file with mode: 0644]
doc/gui/images/choose_geom_selection_way.png [new file with mode: 0644]
doc/gui/images/circle_angles_after.png [new file with mode: 0644]
doc/gui/images/circle_simple_after.png [new file with mode: 0644]
doc/gui/images/circle_simple_before.png [new file with mode: 0644]
doc/gui/images/colors_size.png [new file with mode: 0644]
doc/gui/images/connectivity_edge.png [new file with mode: 0644]
doc/gui/images/connectivity_hex_prism.png [new file with mode: 0644]
doc/gui/images/connectivity_hexa.png [new file with mode: 0644]
doc/gui/images/connectivity_penta.png [new file with mode: 0644]
doc/gui/images/connectivity_polygon.png [new file with mode: 0644]
doc/gui/images/connectivity_polyhedron.png [new file with mode: 0644]
doc/gui/images/connectivity_pyramid.png [new file with mode: 0644]
doc/gui/images/connectivity_quad.png [new file with mode: 0644]
doc/gui/images/connectivity_tetra.png [new file with mode: 0644]
doc/gui/images/connectivity_tria.png [new file with mode: 0644]
doc/gui/images/controls_popup.png [new file with mode: 0644]
doc/gui/images/convert.png [new file with mode: 0644]
doc/gui/images/copy_mesh_dlg.png [new file with mode: 0644]
doc/gui/images/copy_mesh_icon.png [new file with mode: 0644]
doc/gui/images/crack_emulation_double_nodes.png [new file with mode: 0644]
doc/gui/images/crack_emulation_double_nodes_with_elems.png [new file with mode: 0644]
doc/gui/images/create_boundary_1.png [new file with mode: 0644]
doc/gui/images/create_boundary_an_1.png [new file with mode: 0644]
doc/gui/images/create_boundary_an_2.png [new file with mode: 0644]
doc/gui/images/create_boundary_an_3.png [new file with mode: 0644]
doc/gui/images/create_boundary_an_4.png [new file with mode: 0644]
doc/gui/images/create_boundary_an_co_1.png [new file with mode: 0644]
doc/gui/images/create_boundary_an_co_2.png [new file with mode: 0644]
doc/gui/images/create_boundary_an_cy.png [new file with mode: 0644]
doc/gui/images/create_boundary_an_sp.png [new file with mode: 0644]
doc/gui/images/create_boundary_an_to.png [new file with mode: 0644]
doc/gui/images/create_boundary_cao_1.png [new file with mode: 0644]
doc/gui/images/create_boundary_cao_2.png [new file with mode: 0644]
doc/gui/images/create_boundary_di_1.png [new file with mode: 0644]
doc/gui/images/create_boundary_di_2.png [new file with mode: 0644]
doc/gui/images/create_boundary_di_3.png [new file with mode: 0644]
doc/gui/images/create_dual_mesh_dlg.png [new file with mode: 0644]
doc/gui/images/create_dual_mesh_icon.png [new file with mode: 0644]
doc/gui/images/create_group.png [new file with mode: 0644]
doc/gui/images/create_groups_from_geometry.png [new file with mode: 0644]
doc/gui/images/creategroup.png [new file with mode: 0644]
doc/gui/images/creategroup_on_filter.png [new file with mode: 0644]
doc/gui/images/createmesh-inv.png [new file with mode: 0644]
doc/gui/images/createmesh-inv2.png [new file with mode: 0644]
doc/gui/images/createmesh-inv3.png [new file with mode: 0644]
doc/gui/images/ctrlinfo.png [new file with mode: 0644]
doc/gui/images/curvi_angles_after.png [new file with mode: 0644]
doc/gui/images/curvi_simple_after.png [new file with mode: 0644]
doc/gui/images/curvi_simple_before.png [new file with mode: 0644]
doc/gui/images/custom_point_marker.png [new file with mode: 0644]
doc/gui/images/cut_groups1.png [new file with mode: 0644]
doc/gui/images/cutgroups.png [new file with mode: 0644]
doc/gui/images/dataset_clipping.png [new file with mode: 0644]
doc/gui/images/deflection_2d.png [new file with mode: 0644]
doc/gui/images/deletegroups.png [new file with mode: 0644]
doc/gui/images/diagonalinversion.png [new file with mode: 0644]
doc/gui/images/diagram_parallel_mesh.png [new file with mode: 0644]
doc/gui/images/dialog.png [new file with mode: 0644]
doc/gui/images/dimgroup_0d.png [new file with mode: 0644]
doc/gui/images/dimgroup_1d.png [new file with mode: 0644]
doc/gui/images/dimgroup_2d.png [new file with mode: 0644]
doc/gui/images/dimgroup_dlg.png [new file with mode: 0644]
doc/gui/images/dimgroup_src.png [new file with mode: 0644]
doc/gui/images/dimgroup_tui1.png [new file with mode: 0644]
doc/gui/images/display_entity_choose_item.png [new file with mode: 0644]
doc/gui/images/display_entity_dlg.png [new file with mode: 0644]
doc/gui/images/distribution_of_layers.png [new file with mode: 0644]
doc/gui/images/distributionwithanalyticdensity.png [new file with mode: 0644]
doc/gui/images/distributionwithtabledensity.png [new file with mode: 0644]
doc/gui/images/dlg_0D_on_all_nodes.png [new file with mode: 0644]
doc/gui/images/double_faces.png [new file with mode: 0644]
doc/gui/images/double_nodes.png [new file with mode: 0644]
doc/gui/images/duplicate01.png [new file with mode: 0644]
doc/gui/images/duplicate02.png [new file with mode: 0644]
doc/gui/images/duplicate03.png [new file with mode: 0644]
doc/gui/images/duplicate04.png [new file with mode: 0644]
doc/gui/images/duplicate_nodes.png [new file with mode: 0644]
doc/gui/images/edge_wire_3d_after.png [new file with mode: 0644]
doc/gui/images/edge_wire_3d_before.png [new file with mode: 0644]
doc/gui/images/edge_wire_after.png [new file with mode: 0644]
doc/gui/images/edge_wire_before.png [new file with mode: 0644]
doc/gui/images/edit_mesh1.png [new file with mode: 0644]
doc/gui/images/edit_mesh_change_value_hyp.png [new file with mode: 0644]
doc/gui/images/edit_mesh_remove_hyp.png [new file with mode: 0644]
doc/gui/images/editgroup.png [new file with mode: 0644]
doc/gui/images/editing_groups1.png [new file with mode: 0644]
doc/gui/images/elem_info.png [new file with mode: 0644]
doc/gui/images/eleminfo1.png [new file with mode: 0644]
doc/gui/images/eleminfo2.png [new file with mode: 0644]
doc/gui/images/extr_along_wire_after.png [new file with mode: 0644]
doc/gui/images/extr_along_wire_before.png [new file with mode: 0644]
doc/gui/images/extru_rib_segs.png [new file with mode: 0644]
doc/gui/images/extrusion_along_path_dlg.png [new file with mode: 0644]
doc/gui/images/extrusion_box.png [new file with mode: 0644]
doc/gui/images/extrusion_groups.png [new file with mode: 0644]
doc/gui/images/extrusion_groups_res.png [new file with mode: 0644]
doc/gui/images/extrusionalongaline1.png [new file with mode: 0644]
doc/gui/images/extrusionalongaline2.png [new file with mode: 0644]
doc/gui/images/extrusionalongaline3.png [new file with mode: 0644]
doc/gui/images/extrusionbynormal_alongavgnorm.png [new file with mode: 0644]
doc/gui/images/extrusionbynormal_useonly.png [new file with mode: 0644]
doc/gui/images/failed_computation.png [new file with mode: 0644]
doc/gui/images/find_geom_by_mesh_elem.png [new file with mode: 0644]
doc/gui/images/findelement1.png [new file with mode: 0644]
doc/gui/images/findelement2.png [new file with mode: 0644]
doc/gui/images/findelement3.png [new file with mode: 0644]
doc/gui/images/formula1.png [new file with mode: 0644]
doc/gui/images/formula2.png [new file with mode: 0644]
doc/gui/images/formula4.png [new file with mode: 0644]
doc/gui/images/formula5.png [new file with mode: 0644]
doc/gui/images/free_borders1.png [new file with mode: 0644]
doc/gui/images/free_edges.png [new file with mode: 0644]
doc/gui/images/free_faces.png [new file with mode: 0644]
doc/gui/images/free_nodes.png [new file with mode: 0644]
doc/gui/images/ghs3dprl_parameters_basic.png [new file with mode: 0644]
doc/gui/images/groups_by_sharp_edges_dlg.png [new file with mode: 0644]
doc/gui/images/groups_in_OB.png [new file with mode: 0644]
doc/gui/images/hexa_ijk_mesh.png [new file with mode: 0644]
doc/gui/images/hyp_source_edges.png [new file with mode: 0644]
doc/gui/images/hyp_source_faces.png [new file with mode: 0644]
doc/gui/images/hypo_fixedpnt_dlg.png [new file with mode: 0644]
doc/gui/images/hypo_quad_params_1.png [new file with mode: 0644]
doc/gui/images/hypo_quad_params_2.png [new file with mode: 0644]
doc/gui/images/hypo_quad_params_dialog.png [new file with mode: 0644]
doc/gui/images/hypo_quad_params_dialog_corners.png [new file with mode: 0644]
doc/gui/images/hypo_quad_params_dialog_enf.png [new file with mode: 0644]
doc/gui/images/hypo_quad_params_dialog_vert.png [new file with mode: 0644]
doc/gui/images/hypo_quad_params_enfnodes_algo1.png [new file with mode: 0644]
doc/gui/images/hypo_quad_params_enfnodes_algo2.png [new file with mode: 0644]
doc/gui/images/hypo_quad_params_enfnodes_algo3.png [new file with mode: 0644]
doc/gui/images/hypo_quad_params_res.png [new file with mode: 0644]
doc/gui/images/hypo_quad_params_res_2.png [new file with mode: 0644]
doc/gui/images/hypo_radquad_dlg.png [new file with mode: 0644]
doc/gui/images/hypo_sets.png [new file with mode: 0644]
doc/gui/images/image10.jpg [new file with mode: 0644]
doc/gui/images/image101.png [new file with mode: 0644]
doc/gui/images/image105.gif [new file with mode: 0644]
doc/gui/images/image106.gif [new file with mode: 0644]
doc/gui/images/image120.png [new file with mode: 0644]
doc/gui/images/image121.png [new file with mode: 0644]
doc/gui/images/image122.png [new file with mode: 0644]
doc/gui/images/image123.gif [new file with mode: 0644]
doc/gui/images/image124.gif [new file with mode: 0644]
doc/gui/images/image125.gif [new file with mode: 0644]
doc/gui/images/image126.gif [new file with mode: 0644]
doc/gui/images/image127.gif [new file with mode: 0644]
doc/gui/images/image130.gif [new file with mode: 0644]
doc/gui/images/image131.gif [new file with mode: 0644]
doc/gui/images/image132.gif [new file with mode: 0644]
doc/gui/images/image133.gif [new file with mode: 0644]
doc/gui/images/image134.gif [new file with mode: 0644]
doc/gui/images/image135.gif [new file with mode: 0644]
doc/gui/images/image136.gif [new file with mode: 0644]
doc/gui/images/image137.gif [new file with mode: 0644]
doc/gui/images/image138.gif [new file with mode: 0644]
doc/gui/images/image143.gif [new file with mode: 0644]
doc/gui/images/image144.png [new file with mode: 0644]
doc/gui/images/image145.png [new file with mode: 0644]
doc/gui/images/image146.png [new file with mode: 0644]
doc/gui/images/image147.gif [new file with mode: 0644]
doc/gui/images/image148.gif [new file with mode: 0644]
doc/gui/images/image15.jpg [new file with mode: 0644]
doc/gui/images/image151.gif [new file with mode: 0644]
doc/gui/images/image152.png [new file with mode: 0644]
doc/gui/images/image154.png [new file with mode: 0644]
doc/gui/images/image155.gif [new file with mode: 0644]
doc/gui/images/image156.gif [new file with mode: 0644]
doc/gui/images/image157.gif [new file with mode: 0644]
doc/gui/images/image160.gif [new file with mode: 0644]
doc/gui/images/image161.png [new file with mode: 0644]
doc/gui/images/image22.jpg [new file with mode: 0644]
doc/gui/images/image23.jpg [new file with mode: 0644]
doc/gui/images/image24.gif [new file with mode: 0644]
doc/gui/images/image25.jpg [new file with mode: 0644]
doc/gui/images/image25.png [new file with mode: 0644]
doc/gui/images/image27.jpg [new file with mode: 0644]
doc/gui/images/image28.png [new file with mode: 0644]
doc/gui/images/image30.jpg [new file with mode: 0644]
doc/gui/images/image31.jpg [new file with mode: 0644]
doc/gui/images/image32.jpg [new file with mode: 0644]
doc/gui/images/image32.png [new file with mode: 0644]
doc/gui/images/image33.gif [new file with mode: 0644]
doc/gui/images/image34.png [new file with mode: 0644]
doc/gui/images/image35.png [new file with mode: 0644]
doc/gui/images/image36.jpg [new file with mode: 0644]
doc/gui/images/image36.png [new file with mode: 0644]
doc/gui/images/image37.jpg [new file with mode: 0644]
doc/gui/images/image37.png [new file with mode: 0644]
doc/gui/images/image38.jpg [new file with mode: 0644]
doc/gui/images/image38.png [new file with mode: 0644]
doc/gui/images/image39.png [new file with mode: 0644]
doc/gui/images/image40.png [new file with mode: 0644]
doc/gui/images/image41.gif [new file with mode: 0644]
doc/gui/images/image42.png [new file with mode: 0644]
doc/gui/images/image43.png [new file with mode: 0644]
doc/gui/images/image46.gif [new file with mode: 0644]
doc/gui/images/image49.png [new file with mode: 0644]
doc/gui/images/image5.jpg [new file with mode: 0644]
doc/gui/images/image50.gif [new file with mode: 0644]
doc/gui/images/image51.jpg [new file with mode: 0644]
doc/gui/images/image52.jpg [new file with mode: 0644]
doc/gui/images/image53.gif [new file with mode: 0644]
doc/gui/images/image55.gif [new file with mode: 0644]
doc/gui/images/image56.gif [new file with mode: 0644]
doc/gui/images/image56.jpg [new file with mode: 0644]
doc/gui/images/image58.png [new file with mode: 0644]
doc/gui/images/image59.png [new file with mode: 0644]
doc/gui/images/image63.png [new file with mode: 0644]
doc/gui/images/image64.png [new file with mode: 0644]
doc/gui/images/image67.png [new file with mode: 0644]
doc/gui/images/image7.jpg [new file with mode: 0644]
doc/gui/images/image70.jpg [new file with mode: 0644]
doc/gui/images/image70.png [new file with mode: 0644]
doc/gui/images/image71.jpg [new file with mode: 0644]
doc/gui/images/image71.png [new file with mode: 0644]
doc/gui/images/image74.gif [new file with mode: 0644]
doc/gui/images/image75.jpg [new file with mode: 0644]
doc/gui/images/image76.jpg [new file with mode: 0644]
doc/gui/images/image77.jpg [new file with mode: 0644]
doc/gui/images/image78.jpg [new file with mode: 0644]
doc/gui/images/image79.jpg [new file with mode: 0644]
doc/gui/images/image79.png [new file with mode: 0644]
doc/gui/images/image80.png [new file with mode: 0644]
doc/gui/images/image81.png [new file with mode: 0644]
doc/gui/images/image82.png [new file with mode: 0644]
doc/gui/images/image83.gif [new file with mode: 0644]
doc/gui/images/image84.png [new file with mode: 0644]
doc/gui/images/image86.jpg [new file with mode: 0644]
doc/gui/images/image88.gif [new file with mode: 0644]
doc/gui/images/image88.jpg [new file with mode: 0644]
doc/gui/images/image90.jpg [new file with mode: 0644]
doc/gui/images/image91.png [new file with mode: 0644]
doc/gui/images/image92.jpg [new file with mode: 0644]
doc/gui/images/image92.png [new file with mode: 0644]
doc/gui/images/image93.jpg [new file with mode: 0644]
doc/gui/images/image94.gif [new file with mode: 0644]
doc/gui/images/image94.jpg [new file with mode: 0644]
doc/gui/images/image95.gif [new file with mode: 0644]
doc/gui/images/image95.jpg [new file with mode: 0644]
doc/gui/images/image96.gif [new file with mode: 0644]
doc/gui/images/image96.jpg [new file with mode: 0644]
doc/gui/images/image97.gif [new file with mode: 0644]
doc/gui/images/image97.jpg [new file with mode: 0644]
doc/gui/images/image98.png [new file with mode: 0644]
doc/gui/images/image99.gif [new file with mode: 0644]
doc/gui/images/image_octa12.png [new file with mode: 0644]
doc/gui/images/image_warping3D.jpg [new file with mode: 0644]
doc/gui/images/intersect_groups1.png [new file with mode: 0644]
doc/gui/images/intersectgroups.png [new file with mode: 0644]
doc/gui/images/length-crit.png [new file with mode: 0644]
doc/gui/images/length2d.png [new file with mode: 0644]
doc/gui/images/lengthnearvertex.png [new file with mode: 0644]
doc/gui/images/max_el_area.png [new file with mode: 0644]
doc/gui/images/max_element_length_2d.png [new file with mode: 0644]
doc/gui/images/max_element_length_3d.png [new file with mode: 0644]
doc/gui/images/mergeelems.png [new file with mode: 0644]
doc/gui/images/mergeelems_auto.png [new file with mode: 0644]
doc/gui/images/mergeelems_ico.png [new file with mode: 0644]
doc/gui/images/mergenodes.png [new file with mode: 0644]
doc/gui/images/mergenodes_auto.png [new file with mode: 0644]
doc/gui/images/mergenodes_ico.png [new file with mode: 0644]
doc/gui/images/merging_nodes1.png [new file with mode: 0644]
doc/gui/images/merging_nodes2.png [new file with mode: 0644]
doc/gui/images/mesh_clear.png [new file with mode: 0644]
doc/gui/images/mesh_cylinder_hexa.png [new file with mode: 0644]
doc/gui/images/mesh_deflection.png [new file with mode: 0644]
doc/gui/images/mesh_evaluation_succeed.png [new file with mode: 0644]
doc/gui/images/mesh_fixedpnt.png [new file with mode: 0644]
doc/gui/images/mesh_for_extr_along_path.png [new file with mode: 0644]
doc/gui/images/mesh_node_to_point.png [new file with mode: 0644]
doc/gui/images/mesh_order_123.png [new file with mode: 0644]
doc/gui/images/mesh_order_123_res.png [new file with mode: 0644]
doc/gui/images/mesh_order_213.png [new file with mode: 0644]
doc/gui/images/mesh_order_213_res.png [new file with mode: 0644]
doc/gui/images/mesh_order_321.png [new file with mode: 0644]
doc/gui/images/mesh_order_321_res.png [new file with mode: 0644]
doc/gui/images/mesh_order_no_concurrent.png [new file with mode: 0644]
doc/gui/images/mesh_order_preview.png [new file with mode: 0644]
doc/gui/images/mesh_precompute.png [new file with mode: 0644]
doc/gui/images/mesh_radquad_01.png [new file with mode: 0644]
doc/gui/images/mesh_radquad_02.png [new file with mode: 0644]
doc/gui/images/mesh_split_diag_interactive.png [new file with mode: 0644]
doc/gui/images/mesh_split_face_interactive.png [new file with mode: 0644]
doc/gui/images/meshcomputationfail.png [new file with mode: 0644]
doc/gui/images/meshcomputationsucceed.png [new file with mode: 0644]
doc/gui/images/meshcut_plugin.png [new file with mode: 0644]
doc/gui/images/meshexportgroupwarning.png [new file with mode: 0644]
doc/gui/images/meshexportmesh.png [new file with mode: 0644]
doc/gui/images/meshimportmesh.png [new file with mode: 0644]
doc/gui/images/meshtopass1.png [new file with mode: 0644]
doc/gui/images/meshtopass2.png [new file with mode: 0644]
doc/gui/images/meshtopass3.png [new file with mode: 0644]
doc/gui/images/meshtrianglemergeelem1.png [new file with mode: 0644]
doc/gui/images/min_distance.png [new file with mode: 0644]
doc/gui/images/min_distance_preview.png [new file with mode: 0644]
doc/gui/images/movenodes.png [new file with mode: 0644]
doc/gui/images/moving_nodes1.png [new file with mode: 0644]
doc/gui/images/moving_nodes2.png [new file with mode: 0644]
doc/gui/images/number_of_layers.png [new file with mode: 0644]
doc/gui/images/offset_filter_for_faces_gui.png [new file with mode: 0644]
doc/gui/images/offset_mesh.png [new file with mode: 0644]
doc/gui/images/offset_mesh_from_filter.png [new file with mode: 0644]
doc/gui/images/opengl_clipping.png [new file with mode: 0644]
doc/gui/images/orientaation1.png [new file with mode: 0644]
doc/gui/images/over_constrained_faces.png [new file with mode: 0644]
doc/gui/images/over_constrained_volumes.png [new file with mode: 0644]
doc/gui/images/pattern2d.png [new file with mode: 0644]
doc/gui/images/patternmapping1.png [new file with mode: 0644]
doc/gui/images/patternmapping2.png [new file with mode: 0644]
doc/gui/images/point_marker_widget1.png [new file with mode: 0644]
doc/gui/images/point_marker_widget2.png [new file with mode: 0644]
doc/gui/images/pref21.png [new file with mode: 0644]
doc/gui/images/pref22.png [new file with mode: 0644]
doc/gui/images/pref23.png [new file with mode: 0644]
doc/gui/images/pref24.png [new file with mode: 0644]
doc/gui/images/preview_mesh_1D.png [new file with mode: 0644]
doc/gui/images/preview_mesh_2D.png [new file with mode: 0644]
doc/gui/images/preview_tmp_data.png [new file with mode: 0644]
doc/gui/images/prism_mesh.png [new file with mode: 0644]
doc/gui/images/prism_needs_hyps.png [new file with mode: 0644]
doc/gui/images/prism_ok_ko.png [new file with mode: 0644]
doc/gui/images/prism_stack.png [new file with mode: 0644]
doc/gui/images/prism_tui_sample.png [new file with mode: 0644]
doc/gui/images/projection_1d.png [new file with mode: 0644]
doc/gui/images/projection_2d.png [new file with mode: 0644]
doc/gui/images/projection_3d.png [new file with mode: 0644]
doc/gui/images/propagation_chain.png [new file with mode: 0644]
doc/gui/images/quad_from_ma_medial_axis.png [new file with mode: 0644]
doc/gui/images/quad_from_ma_mesh.png [new file with mode: 0644]
doc/gui/images/quad_from_ma_ring_mesh.png [new file with mode: 0644]
doc/gui/images/quad_mesh_invalid.png [new file with mode: 0644]
doc/gui/images/quad_meshes.png [new file with mode: 0644]
doc/gui/images/radial_prism_mesh.png [new file with mode: 0644]
doc/gui/images/reduce_three_to_one.png [new file with mode: 0644]
doc/gui/images/remove.gif [new file with mode: 0644]
doc/gui/images/remove.png [new file with mode: 0644]
doc/gui/images/remove_elements1.png [new file with mode: 0644]
doc/gui/images/remove_elements2.png [new file with mode: 0644]
doc/gui/images/remove_elements_icon.png [new file with mode: 0644]
doc/gui/images/remove_node_reconnection.png [new file with mode: 0644]
doc/gui/images/remove_node_reconnection_dlg.png [new file with mode: 0644]
doc/gui/images/remove_node_reconnection_icon.png [new file with mode: 0644]
doc/gui/images/remove_nodes1.png [new file with mode: 0644]
doc/gui/images/remove_nodes2.png [new file with mode: 0644]
doc/gui/images/remove_nodes_icon.png [new file with mode: 0644]
doc/gui/images/remove_orphan_nodes_icon.png [new file with mode: 0644]
doc/gui/images/removeelements.png [new file with mode: 0644]
doc/gui/images/removenodes.png [new file with mode: 0644]
doc/gui/images/removeorphannodes.png [new file with mode: 0644]
doc/gui/images/renumberelements.png [new file with mode: 0644]
doc/gui/images/renumbernodes.png [new file with mode: 0644]
doc/gui/images/reorient_2d_face.png [new file with mode: 0644]
doc/gui/images/reorient_2d_point.png [new file with mode: 0644]
doc/gui/images/reorient_2d_refgroup.png [new file with mode: 0644]
doc/gui/images/reorient_2d_volume.png [new file with mode: 0644]
doc/gui/images/reorient_faces_face.png [new file with mode: 0644]
doc/gui/images/reorient_faces_point.png [new file with mode: 0644]
doc/gui/images/reorient_faces_ref_groups.png [new file with mode: 0644]
doc/gui/images/reorient_faces_volume.png [new file with mode: 0644]
doc/gui/images/rev_edges_helper_dlg.png [new file with mode: 0644]
doc/gui/images/revolution1.png [new file with mode: 0644]
doc/gui/images/revolutionsn1.png [new file with mode: 0644]
doc/gui/images/revolutionsn2.png [new file with mode: 0644]
doc/gui/images/rotation.png [new file with mode: 0644]
doc/gui/images/rotation1.png [new file with mode: 0644]
doc/gui/images/rotation2.png [new file with mode: 0644]
doc/gui/images/rotation_ico.png [new file with mode: 0644]
doc/gui/images/scalar_bar_dlg.png [new file with mode: 0644]
doc/gui/images/scale01.png [new file with mode: 0644]
doc/gui/images/scale02.png [new file with mode: 0644]
doc/gui/images/scale03.png [new file with mode: 0644]
doc/gui/images/scale04.png [new file with mode: 0644]
doc/gui/images/scale06.png [new file with mode: 0644]
doc/gui/images/scale07.png [new file with mode: 0644]
doc/gui/images/scale09.png [new file with mode: 0644]
doc/gui/images/scaled_jacobian.png [new file with mode: 0644]
doc/gui/images/scaled_jacobian_hexa.png [new file with mode: 0644]
doc/gui/images/scaled_jacobian_mesh_hexa.png [new file with mode: 0644]
doc/gui/images/scaled_jacobian_tetra.png [new file with mode: 0644]
doc/gui/images/scaleinit01.png [new file with mode: 0644]
doc/gui/images/scaleinit02.png [new file with mode: 0644]
doc/gui/images/scaleres03.png [new file with mode: 0644]
doc/gui/images/scaleres04.png [new file with mode: 0644]
doc/gui/images/scaleres06.png [new file with mode: 0644]
doc/gui/images/scaleres07.png [new file with mode: 0644]
doc/gui/images/scaleres09.png [new file with mode: 0644]
doc/gui/images/selectionfilterlibrary.png [new file with mode: 0644]
doc/gui/images/sew_after_merge.png [new file with mode: 0644]
doc/gui/images/sew_using_merge.png [new file with mode: 0644]
doc/gui/images/sewing.png [new file with mode: 0644]
doc/gui/images/sewing1.png [new file with mode: 0644]
doc/gui/images/sewing2.png [new file with mode: 0644]
doc/gui/images/sewing3.png [new file with mode: 0644]
doc/gui/images/sewing4.png [new file with mode: 0644]
doc/gui/images/sewing_auto.png [new file with mode: 0644]
doc/gui/images/sewing_manual.png [new file with mode: 0644]
doc/gui/images/show_bad_mesh.png [new file with mode: 0644]
doc/gui/images/smesh_sort.png [new file with mode: 0644]
doc/gui/images/smesh_sort_groups.png [new file with mode: 0644]
doc/gui/images/smoothing.png [new file with mode: 0644]
doc/gui/images/smoothing1.png [new file with mode: 0644]
doc/gui/images/smoothing2.png [new file with mode: 0644]
doc/gui/images/sort.gif [new file with mode: 0644]
doc/gui/images/sort.png [new file with mode: 0644]
doc/gui/images/split_biquad_to_linear_dlg.png [new file with mode: 0644]
doc/gui/images/split_biquad_to_linear_icon.png [new file with mode: 0644]
doc/gui/images/split_biquad_to_linear_mesh.png [new file with mode: 0644]
doc/gui/images/split_into_prisms.png [new file with mode: 0644]
doc/gui/images/split_into_tetra.png [new file with mode: 0644]
doc/gui/images/split_into_tetra_icon.png [new file with mode: 0644]
doc/gui/images/std_point_marker.png [new file with mode: 0644]
doc/gui/images/straight_after.png [new file with mode: 0644]
doc/gui/images/straight_before.png [new file with mode: 0644]
doc/gui/images/swap.png [new file with mode: 0644]
doc/gui/images/symmetry.png [new file with mode: 0644]
doc/gui/images/symmetry1.png [new file with mode: 0644]
doc/gui/images/symmetry2.png [new file with mode: 0644]
doc/gui/images/symmetry3.png [new file with mode: 0644]
doc/gui/images/topo_equality.png [new file with mode: 0644]
doc/gui/images/translation.png [new file with mode: 0644]
doc/gui/images/translation1.png [new file with mode: 0644]
doc/gui/images/translation2.png [new file with mode: 0644]
doc/gui/images/union_groups1.png [new file with mode: 0644]
doc/gui/images/uniongroups.png [new file with mode: 0644]
doc/gui/images/unionoftwotriangles.png [new file with mode: 0644]
doc/gui/images/uniting_a_set_of_triangles1.png [new file with mode: 0644]
doc/gui/images/uniting_a_set_of_triangles2.png [new file with mode: 0644]
doc/gui/images/uniting_two_triangles1.png [new file with mode: 0644]
doc/gui/images/uniting_two_triangles2.png [new file with mode: 0644]
doc/gui/images/use_existing_face_sample_mesh.png [new file with mode: 0644]
doc/gui/images/using_notebook_smesh.png [new file with mode: 0644]
doc/gui/images/viscous_layers_2d_hyp.png [new file with mode: 0644]
doc/gui/images/viscous_layers_extrusion_method.png [new file with mode: 0644]
doc/gui/images/viscous_layers_hyp.png [new file with mode: 0644]
doc/gui/images/viscous_layers_mesh.png [new file with mode: 0644]
doc/gui/images/viscous_layers_on_submesh.png [new file with mode: 0644]
doc/gui/input/1d_meshing_hypo.rst [new file with mode: 0644]
doc/gui/input/2d_meshing_hypo.rst [new file with mode: 0644]
doc/gui/input/3d_meshing_hypo.rst [new file with mode: 0644]
doc/gui/input/StdMeshersBuilder.rst [new file with mode: 0644]
doc/gui/input/about_filters.rst [new file with mode: 0644]
doc/gui/input/about_hypo.rst [new file with mode: 0644]
doc/gui/input/about_meshes.rst [new file with mode: 0644]
doc/gui/input/about_quality_controls.rst [new file with mode: 0644]
doc/gui/input/adaptation.rst [new file with mode: 0644]
doc/gui/input/add_node_on_face.rst [new file with mode: 0644]
doc/gui/input/add_node_on_segment.rst [new file with mode: 0644]
doc/gui/input/adding_nodes_and_elements.rst [new file with mode: 0644]
doc/gui/input/adding_quadratic_elements.rst [new file with mode: 0644]
doc/gui/input/additional_hypo.rst [new file with mode: 0644]
doc/gui/input/area.rst [new file with mode: 0644]
doc/gui/input/aspect_ratio.rst [new file with mode: 0644]
doc/gui/input/aspect_ratio_3d.rst [new file with mode: 0644]
doc/gui/input/bare_border_face.rst [new file with mode: 0644]
doc/gui/input/bare_border_volumes.rst [new file with mode: 0644]
doc/gui/input/basic_meshing_algos.rst [new file with mode: 0644]
doc/gui/input/borders_at_multi_connection.rst [new file with mode: 0644]
doc/gui/input/borders_at_multi_connection_2d.rst [new file with mode: 0644]
doc/gui/input/building_compounds.rst [new file with mode: 0644]
doc/gui/input/cartesian_algo.rst [new file with mode: 0644]
doc/gui/input/changing_orientation_of_elements.rst [new file with mode: 0644]
doc/gui/input/clipping.rst [new file with mode: 0644]
doc/gui/input/colors_size.rst [new file with mode: 0644]
doc/gui/input/connectivity.rst [new file with mode: 0644]
doc/gui/input/constructing_meshes.rst [new file with mode: 0644]
doc/gui/input/constructing_submeshes.rst [new file with mode: 0644]
doc/gui/input/convert_to_from_quadratic_mesh.rst [new file with mode: 0644]
doc/gui/input/copy_mesh.rst [new file with mode: 0644]
doc/gui/input/create_dual_mesh.rst [new file with mode: 0644]
doc/gui/input/create_groups_from_geometry.rst [new file with mode: 0644]
doc/gui/input/creating_groups.rst [new file with mode: 0644]
doc/gui/input/cut_mesh_by_plane.rst [new file with mode: 0644]
doc/gui/input/cutting_quadrangles.rst [new file with mode: 0644]
doc/gui/input/define_mesh_by_script.rst [new file with mode: 0644]
doc/gui/input/deflection_2d.rst [new file with mode: 0644]
doc/gui/input/deleting_groups.rst [new file with mode: 0644]
doc/gui/input/diagonal_inversion_of_elements.rst [new file with mode: 0644]
doc/gui/input/display_entity.rst [new file with mode: 0644]
doc/gui/input/display_mode.rst [new file with mode: 0644]
doc/gui/input/double_elements_control.rst [new file with mode: 0644]
doc/gui/input/double_nodes_control.rst [new file with mode: 0644]
doc/gui/input/double_nodes_page.rst [new file with mode: 0644]
doc/gui/input/editing_groups.rst [new file with mode: 0644]
doc/gui/input/editing_meshes.rst [new file with mode: 0644]
doc/gui/input/extrusion.rst [new file with mode: 0644]
doc/gui/input/extrusion_along_path.rst [new file with mode: 0644]
doc/gui/input/face_groups_by_sharp_edges.rst [new file with mode: 0644]
doc/gui/input/find_element_by_point.rst [new file with mode: 0644]
doc/gui/input/free_borders.rst [new file with mode: 0644]
doc/gui/input/free_edges.rst [new file with mode: 0644]
doc/gui/input/free_faces.rst [new file with mode: 0644]
doc/gui/input/free_nodes.rst [new file with mode: 0644]
doc/gui/input/generate_flat_elements.rst [new file with mode: 0644]
doc/gui/input/group_of_underlying_elements.rst [new file with mode: 0644]
doc/gui/input/grouping_elements.rst [new file with mode: 0644]
doc/gui/input/homard_create_boundary.rst [new file with mode: 0644]
doc/gui/input/importing_exporting_meshes.rst [new file with mode: 0644]
doc/gui/input/index.rst [new file with mode: 0644]
doc/gui/input/length.rst [new file with mode: 0644]
doc/gui/input/length_2d.rst [new file with mode: 0644]
doc/gui/input/make_2dmesh_from_3d.rst [new file with mode: 0644]
doc/gui/input/make_2dmesh_from_3d_elements.rst [new file with mode: 0644]
doc/gui/input/max_element_length_2d.rst [new file with mode: 0644]
doc/gui/input/max_element_length_3d.rst [new file with mode: 0644]
doc/gui/input/measurements.rst [new file with mode: 0644]
doc/gui/input/merging_elements.rst [new file with mode: 0644]
doc/gui/input/merging_nodes.rst [new file with mode: 0644]
doc/gui/input/mesh_infos.rst [new file with mode: 0644]
doc/gui/input/mesh_preferences.rst [new file with mode: 0644]
doc/gui/input/mesh_through_point.rst [new file with mode: 0644]
doc/gui/input/minimum_angle.rst [new file with mode: 0644]
doc/gui/input/modifying_meshes.rst [new file with mode: 0644]
doc/gui/input/modules.rst [new file with mode: 0644]
doc/gui/input/numbering.rst [new file with mode: 0644]
doc/gui/input/offset_elements.rst [new file with mode: 0644]
doc/gui/input/over_constrained_faces.rst [new file with mode: 0644]
doc/gui/input/over_constrained_volumes.rst [new file with mode: 0644]
doc/gui/input/parallel_compute.rst [new file with mode: 0644]
doc/gui/input/pattern_mapping.rst [new file with mode: 0644]
doc/gui/input/point_marker.rst [new file with mode: 0644]
doc/gui/input/prism_3d_algo.rst [new file with mode: 0644]
doc/gui/input/projection_algos.rst [new file with mode: 0644]
doc/gui/input/quad_from_ma_algo.rst [new file with mode: 0644]
doc/gui/input/quad_ijk_algo.rst [new file with mode: 0644]
doc/gui/input/radial_prism_algo.rst [new file with mode: 0644]
doc/gui/input/radial_quadrangle_1D2D_algo.rst [new file with mode: 0644]
doc/gui/input/removing_nodes_and_elements.rst [new file with mode: 0644]
doc/gui/input/reorient_faces.rst [new file with mode: 0644]
doc/gui/input/revolution.rst [new file with mode: 0644]
doc/gui/input/rotation.rst [new file with mode: 0644]
doc/gui/input/scalar_bar.rst [new file with mode: 0644]
doc/gui/input/scale.rst [new file with mode: 0644]
doc/gui/input/scaled_jacobian.rst [new file with mode: 0644]
doc/gui/input/segments_around_vertex_algo.rst [new file with mode: 0644]
doc/gui/input/selection_filter_library.rst [new file with mode: 0644]
doc/gui/input/sewing_meshes.rst [new file with mode: 0644]
doc/gui/input/skew.rst [new file with mode: 0644]
doc/gui/input/smeshBuilder.rst [new file with mode: 0644]
doc/gui/input/smesh_migration.rst [new file with mode: 0644]
doc/gui/input/smesh_module.rst [new file with mode: 0644]
doc/gui/input/smeshpy_interface.rst [new file with mode: 0644]
doc/gui/input/smeshstudytools.rst [new file with mode: 0644]
doc/gui/input/smoothing.rst [new file with mode: 0644]
doc/gui/input/split_biquad_to_linear.rst [new file with mode: 0644]
doc/gui/input/split_to_tetra.rst [new file with mode: 0644]
doc/gui/input/symmetry.rst [new file with mode: 0644]
doc/gui/input/taper.rst [new file with mode: 0644]
doc/gui/input/tools.rst [new file with mode: 0644]
doc/gui/input/translation.rst [new file with mode: 0644]
doc/gui/input/transparency.rst [new file with mode: 0644]
doc/gui/input/tui_adaptation.rst [new file with mode: 0644]
doc/gui/input/tui_creating_meshes.rst [new file with mode: 0644]
doc/gui/input/tui_defining_hypotheses.rst [new file with mode: 0644]
doc/gui/input/tui_filters.rst [new file with mode: 0644]
doc/gui/input/tui_grouping_elements.rst [new file with mode: 0644]
doc/gui/input/tui_measurements.rst [new file with mode: 0644]
doc/gui/input/tui_modifying_meshes.rst [new file with mode: 0644]
doc/gui/input/tui_notebook_smesh.rst [new file with mode: 0644]
doc/gui/input/tui_quality_controls.rst [new file with mode: 0644]
doc/gui/input/tui_transforming_meshes.rst [new file with mode: 0644]
doc/gui/input/tui_viewing_meshes.rst [new file with mode: 0644]
doc/gui/input/tui_work_on_objects_from_gui.rst [new file with mode: 0644]
doc/gui/input/uniting_set_of_triangles.rst [new file with mode: 0644]
doc/gui/input/uniting_two_triangles.rst [new file with mode: 0644]
doc/gui/input/use_existing_algos.rst [new file with mode: 0644]
doc/gui/input/using_notebook_smesh_page.rst [new file with mode: 0644]
doc/gui/input/using_operations_on_groups.rst [new file with mode: 0644]
doc/gui/input/viewing_meshes_overview.rst [new file with mode: 0644]
doc/gui/input/volume.rst [new file with mode: 0644]
doc/gui/input/warping.rst [new file with mode: 0644]
doc/gui/input/warping_3d.rst [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/1d_meshing_hypo.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/2d_meshing_hypo.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/about_filters.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/about_hypo.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/about_meshes.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/about_quality_controls.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/adding_nodes_and_elements.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/adding_quadratic_elements.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/additional_hypo.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/area.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/aspect_ratio.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/aspect_ratio_3d.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/bare_border_face.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/bare_border_volumes.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/basic_meshing_algos.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/borders_at_multi_connection.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/borders_at_multi_connection_2d.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/building_compounds.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/cartesian_algo.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/changing_orientation_of_elements.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/clipping.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/colors_size.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/connectivity.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/constructing_meshes.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/constructing_submeshes.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/convert_to_from_quadratic_mesh.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/copy_mesh.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/create_groups_from_geometry.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/creating_groups.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/cut_mesh_by_plane.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/cutting_quadrangles.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/define_mesh_by_script.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/deleting_groups.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/diagonal_inversion_of_elements.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/display_entity.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/display_mode.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/double_elements_control.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/double_nodes_control.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/double_nodes_page.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/editing_groups.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/editing_meshes.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/extrusion.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/extrusion_along_path.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/find_element_by_point.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/free_borders.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/free_edges.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/free_faces.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/free_nodes.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/generate_flat_elements.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/group_of_underlying_elements.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/grouping_elements.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/importing_exporting_meshes.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/index.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/introduction.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/length.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/length_2d.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/make_2dmesh_from_3d.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/max_element_length_2d.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/max_element_length_3d.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/max_element_volume_hypo.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/measurements.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/merging_elements.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/merging_nodes.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/mesh_infos.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/mesh_preferences.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/mesh_through_point.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/minimum_angle.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/modifying_meshes.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/modules.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/numbering.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/over_constrained_faces.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/over_constrained_volumes.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/pattern_mapping.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/point_marker.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/prism_3d_algo.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/projection_algos.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/python_api.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/quad_from_ma_algo.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/quad_ijk_algo.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/radial_prism_algo.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/radial_quadrangle_1D2D_algo.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/removing_nodes_and_elements.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/reorient_faces.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/revolution.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/rotation.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/scalar_bar.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/scale.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/segments_around_vertex_algo.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/selection_filter_library.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/sewing_meshes.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/skew.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/smesh_migration.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/smeshpy_interface.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/smoothing.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/split_biquad_to_linear.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/split_to_tetra.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/symmetry.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/taper.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/tools.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/translation.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/transparency.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/tui_cartesian_algo.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/tui_creating_meshes.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/tui_defining_hypotheses.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/tui_filters.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/tui_generate_flat_elements.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/tui_grouping_elements.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/tui_measurements.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/tui_modifying_meshes.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/tui_notebook_smesh.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/tui_prism_3d_algo.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/tui_quality_controls.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/tui_transforming_meshes.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/tui_use_existing_faces.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/tui_viewing_meshes.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/tui_work_on_objects_from_gui.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/uniting_set_of_triangles.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/uniting_two_triangles.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/use_existing_algos.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/using_notebook_smesh_page.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/using_operations_on_groups.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/viewing_meshes_overview.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/volume.po [new file with mode: 0644]
doc/gui/locale/fr/LC_MESSAGES/warping.po [new file with mode: 0644]
doc/gui/merge_mesh_class.py [new file with mode: 0755]
doc/gui/static/switchers.js.in [new file with mode: 0644]
doc/gui/templates/layout.html [new file with mode: 0644]
doc/salome/CMakeLists.txt [deleted file]
doc/salome/examples/3dmesh.py [deleted file]
doc/salome/examples/CMakeLists.txt [deleted file]
doc/salome/examples/CTestTestfileInstall.cmake [deleted file]
doc/salome/examples/a3DmeshOnModified2Dmesh.py [deleted file]
doc/salome/examples/cartesian_algo.py [deleted file]
doc/salome/examples/create_penta_biquad.py [deleted file]
doc/salome/examples/creating_meshes_ex01.py [deleted file]
doc/salome/examples/creating_meshes_ex02.py [deleted file]
doc/salome/examples/creating_meshes_ex03.py [deleted file]
doc/salome/examples/creating_meshes_ex04.py [deleted file]
doc/salome/examples/creating_meshes_ex05.py [deleted file]
doc/salome/examples/creating_meshes_ex06.py [deleted file]
doc/salome/examples/creating_meshes_ex07.py [deleted file]
doc/salome/examples/creating_meshes_ex08.py [deleted file]
doc/salome/examples/defining_hypotheses_adaptive1d.py [deleted file]
doc/salome/examples/defining_hypotheses_ex01.py [deleted file]
doc/salome/examples/defining_hypotheses_ex02.py [deleted file]
doc/salome/examples/defining_hypotheses_ex03.py [deleted file]
doc/salome/examples/defining_hypotheses_ex04.py [deleted file]
doc/salome/examples/defining_hypotheses_ex05.py [deleted file]
doc/salome/examples/defining_hypotheses_ex06.py [deleted file]
doc/salome/examples/defining_hypotheses_ex07.py [deleted file]
doc/salome/examples/defining_hypotheses_ex08.py [deleted file]
doc/salome/examples/defining_hypotheses_ex09.py [deleted file]
doc/salome/examples/defining_hypotheses_ex10.py [deleted file]
doc/salome/examples/defining_hypotheses_ex11.py [deleted file]
doc/salome/examples/defining_hypotheses_ex12.py [deleted file]
doc/salome/examples/defining_hypotheses_ex13.py [deleted file]
doc/salome/examples/defining_hypotheses_ex14.py [deleted file]
doc/salome/examples/defining_hypotheses_ex15.py [deleted file]
doc/salome/examples/defining_hypotheses_ex16.py [deleted file]
doc/salome/examples/defining_hypotheses_ex17.py [deleted file]
doc/salome/examples/defining_hypotheses_len_near_vertex.py [deleted file]
doc/salome/examples/ex_MakePolyLine.py [deleted file]
doc/salome/examples/extrusion_penta_biquad.py [deleted file]
doc/salome/examples/filters_belong2group.py [deleted file]
doc/salome/examples/filters_ex01.py [deleted file]
doc/salome/examples/filters_ex02.py [deleted file]
doc/salome/examples/filters_ex03.py [deleted file]
doc/salome/examples/filters_ex04.py [deleted file]
doc/salome/examples/filters_ex05.py [deleted file]
doc/salome/examples/filters_ex06.py [deleted file]
doc/salome/examples/filters_ex07.py [deleted file]
doc/salome/examples/filters_ex08.py [deleted file]
doc/salome/examples/filters_ex09.py [deleted file]
doc/salome/examples/filters_ex10.py [deleted file]
doc/salome/examples/filters_ex11.py [deleted file]
doc/salome/examples/filters_ex12.py [deleted file]
doc/salome/examples/filters_ex13.py [deleted file]
doc/salome/examples/filters_ex14.py [deleted file]
doc/salome/examples/filters_ex15.py [deleted file]
doc/salome/examples/filters_ex16.py [deleted file]
doc/salome/examples/filters_ex17.py [deleted file]
doc/salome/examples/filters_ex18.py [deleted file]
doc/salome/examples/filters_ex19.py [deleted file]
doc/salome/examples/filters_ex20.py [deleted file]
doc/salome/examples/filters_ex21.py [deleted file]
doc/salome/examples/filters_ex22.py [deleted file]
doc/salome/examples/filters_ex23.py [deleted file]
doc/salome/examples/filters_ex24.py [deleted file]
doc/salome/examples/filters_ex25.py [deleted file]
doc/salome/examples/filters_ex26.py [deleted file]
doc/salome/examples/filters_ex27.py [deleted file]
doc/salome/examples/filters_ex28.py [deleted file]
doc/salome/examples/filters_ex29.py [deleted file]
doc/salome/examples/filters_ex30.py [deleted file]
doc/salome/examples/filters_ex31.py [deleted file]
doc/salome/examples/filters_ex32.py [deleted file]
doc/salome/examples/filters_ex33.py [deleted file]
doc/salome/examples/filters_ex34.py [deleted file]
doc/salome/examples/filters_ex35.py [deleted file]
doc/salome/examples/filters_ex36.py [deleted file]
doc/salome/examples/filters_ex37.py [deleted file]
doc/salome/examples/filters_ex38.py [deleted file]
doc/salome/examples/filters_ex39.py [deleted file]
doc/salome/examples/filters_node_nb_conn.py [deleted file]
doc/salome/examples/generate_flat_elements.py [deleted file]
doc/salome/examples/grouping_elements_ex01.py [deleted file]
doc/salome/examples/grouping_elements_ex02.py [deleted file]
doc/salome/examples/grouping_elements_ex03.py [deleted file]
doc/salome/examples/grouping_elements_ex04.py [deleted file]
doc/salome/examples/grouping_elements_ex05.py [deleted file]
doc/salome/examples/grouping_elements_ex06.py [deleted file]
doc/salome/examples/grouping_elements_ex07.py [deleted file]
doc/salome/examples/grouping_elements_ex08.py [deleted file]
doc/salome/examples/grouping_elements_ex09.py [deleted file]
doc/salome/examples/measurements_ex01.py [deleted file]
doc/salome/examples/measurements_ex02.py [deleted file]
doc/salome/examples/measurements_ex03.py [deleted file]
doc/salome/examples/measurements_ex04.py [deleted file]
doc/salome/examples/modifying_meshes_ex01.py [deleted file]
doc/salome/examples/modifying_meshes_ex02.py [deleted file]
doc/salome/examples/modifying_meshes_ex03.py [deleted file]
doc/salome/examples/modifying_meshes_ex04.py [deleted file]
doc/salome/examples/modifying_meshes_ex05.py [deleted file]
doc/salome/examples/modifying_meshes_ex06.py [deleted file]
doc/salome/examples/modifying_meshes_ex07.py [deleted file]
doc/salome/examples/modifying_meshes_ex08.py [deleted file]
doc/salome/examples/modifying_meshes_ex09.py [deleted file]
doc/salome/examples/modifying_meshes_ex10.py [deleted file]
doc/salome/examples/modifying_meshes_ex11.py [deleted file]
doc/salome/examples/modifying_meshes_ex12.py [deleted file]
doc/salome/examples/modifying_meshes_ex13.py [deleted file]
doc/salome/examples/modifying_meshes_ex14.py [deleted file]
doc/salome/examples/modifying_meshes_ex15.py [deleted file]
doc/salome/examples/modifying_meshes_ex16.py [deleted file]
doc/salome/examples/modifying_meshes_ex17.py [deleted file]
doc/salome/examples/modifying_meshes_ex18.py [deleted file]
doc/salome/examples/modifying_meshes_ex19.py [deleted file]
doc/salome/examples/modifying_meshes_ex20.py [deleted file]
doc/salome/examples/modifying_meshes_ex21.py [deleted file]
doc/salome/examples/modifying_meshes_ex22.py [deleted file]
doc/salome/examples/modifying_meshes_ex23.py [deleted file]
doc/salome/examples/modifying_meshes_ex24.py [deleted file]
doc/salome/examples/modifying_meshes_ex25.py [deleted file]
doc/salome/examples/modifying_meshes_ex26.py [deleted file]
doc/salome/examples/modifying_meshes_split_vol.py [deleted file]
doc/salome/examples/notebook_smesh.py [deleted file]
doc/salome/examples/prism_3d_algo.py [deleted file]
doc/salome/examples/quad_medial_axis_algo.py [deleted file]
doc/salome/examples/quality_controls_defl.py [deleted file]
doc/salome/examples/quality_controls_ex01.py [deleted file]
doc/salome/examples/quality_controls_ex02.py [deleted file]
doc/salome/examples/quality_controls_ex03.py [deleted file]
doc/salome/examples/quality_controls_ex04.py [deleted file]
doc/salome/examples/quality_controls_ex05.py [deleted file]
doc/salome/examples/quality_controls_ex06.py [deleted file]
doc/salome/examples/quality_controls_ex07.py [deleted file]
doc/salome/examples/quality_controls_ex08.py [deleted file]
doc/salome/examples/quality_controls_ex09.py [deleted file]
doc/salome/examples/quality_controls_ex10.py [deleted file]
doc/salome/examples/quality_controls_ex11.py [deleted file]
doc/salome/examples/quality_controls_ex12.py [deleted file]
doc/salome/examples/quality_controls_ex13.py [deleted file]
doc/salome/examples/quality_controls_ex14.py [deleted file]
doc/salome/examples/quality_controls_ex15.py [deleted file]
doc/salome/examples/quality_controls_ex16.py [deleted file]
doc/salome/examples/quality_controls_ex17.py [deleted file]
doc/salome/examples/quality_controls_ex18.py [deleted file]
doc/salome/examples/quality_controls_ex19.py [deleted file]
doc/salome/examples/quality_controls_ex20.py [deleted file]
doc/salome/examples/quality_controls_ex21.py [deleted file]
doc/salome/examples/quality_controls_ex22.py [deleted file]
doc/salome/examples/radial_prism_3d_algo.py [deleted file]
doc/salome/examples/split_biquad.py [deleted file]
doc/salome/examples/test_smeshplugin_mg_tetra_parallele.py [deleted file]
doc/salome/examples/test_smeshplugins.py [deleted file]
doc/salome/examples/testme.py [deleted file]
doc/salome/examples/tests.py.in [deleted file]
doc/salome/examples/tests.set [deleted file]
doc/salome/examples/transforming_meshes_ex01.py [deleted file]
doc/salome/examples/transforming_meshes_ex02.py [deleted file]
doc/salome/examples/transforming_meshes_ex03.py [deleted file]
doc/salome/examples/transforming_meshes_ex04.py [deleted file]
doc/salome/examples/transforming_meshes_ex05.py [deleted file]
doc/salome/examples/transforming_meshes_ex06.py [deleted file]
doc/salome/examples/transforming_meshes_ex07.py [deleted file]
doc/salome/examples/transforming_meshes_ex08.py [deleted file]
doc/salome/examples/transforming_meshes_ex09.py [deleted file]
doc/salome/examples/transforming_meshes_ex10.py [deleted file]
doc/salome/examples/transforming_meshes_ex11.py [deleted file]
doc/salome/examples/transforming_meshes_ex12.py [deleted file]
doc/salome/examples/transforming_meshes_ex13.py [deleted file]
doc/salome/examples/use_existing_faces.py [deleted file]
doc/salome/examples/viewing_meshes_ex01.py [deleted file]
doc/salome/examples/viewing_meshes_ex02.py [deleted file]
doc/salome/gui/CMakeLists.txt [deleted file]
doc/salome/gui/SMESH/CMakeLists.txt [deleted file]
doc/salome/gui/SMESH/collect_mesh_methods.py [deleted file]
doc/salome/gui/SMESH/conf.py.in [deleted file]
doc/salome/gui/SMESH/images/2d_from_3d_dlg.png [deleted file]
doc/salome/gui/SMESH/images/2d_from_3d_example.png [deleted file]
doc/salome/gui/SMESH/images/2d_from_3d_ico.png [deleted file]
doc/salome/gui/SMESH/images/2d_from_3d_menu.png [deleted file]
doc/salome/gui/SMESH/images/Clipping_Absolute.png [deleted file]
doc/salome/gui/SMESH/images/Clipping_Relative.png [deleted file]
doc/salome/gui/SMESH/images/Nut_sharp_edges.png [deleted file]
doc/salome/gui/SMESH/images/a-arithmetic1d.png [deleted file]
doc/salome/gui/SMESH/images/a-averagelength.png [deleted file]
doc/salome/gui/SMESH/images/a-clipping2.png [deleted file]
doc/salome/gui/SMESH/images/a-creategroup.png [deleted file]
doc/salome/gui/SMESH/images/a-createpolyhedralvolume.png [deleted file]
doc/salome/gui/SMESH/images/a-cuttingofquadrangles.png [deleted file]
doc/salome/gui/SMESH/images/a-deflection1d.png [deleted file]
doc/salome/gui/SMESH/images/a-filteronfaces.png [deleted file]
doc/salome/gui/SMESH/images/a-geometric1d.png [deleted file]
doc/salome/gui/SMESH/images/a-maxelarea.png [deleted file]
doc/salome/gui/SMESH/images/a-maxelvolume.png [deleted file]
doc/salome/gui/SMESH/images/a-maxsize1d.png [deleted file]
doc/salome/gui/SMESH/images/a-nbsegments1.png [deleted file]
doc/salome/gui/SMESH/images/a-nbsegments2.png [deleted file]
doc/salome/gui/SMESH/images/a-patterntype.png [deleted file]
doc/salome/gui/SMESH/images/a-patterntype1.png [deleted file]
doc/salome/gui/SMESH/images/a-standmeshinfo.png [deleted file]
doc/salome/gui/SMESH/images/a-startendlength.png [deleted file]
doc/salome/gui/SMESH/images/a-transparency.png [deleted file]
doc/salome/gui/SMESH/images/a-unionoftriangles.png [deleted file]
doc/salome/gui/SMESH/images/a-viewgeneral.png [deleted file]
doc/salome/gui/SMESH/images/adaptive1d.png [deleted file]
doc/salome/gui/SMESH/images/adaptive1d_sample_mesh.png [deleted file]
doc/salome/gui/SMESH/images/add.gif [deleted file]
doc/salome/gui/SMESH/images/add.png [deleted file]
doc/salome/gui/SMESH/images/add0delement.png [deleted file]
doc/salome/gui/SMESH/images/add_0delement.png [deleted file]
doc/salome/gui/SMESH/images/add_ball.png [deleted file]
doc/salome/gui/SMESH/images/add_edge.png [deleted file]
doc/salome/gui/SMESH/images/add_node.png [deleted file]
doc/salome/gui/SMESH/images/add_polygone.png [deleted file]
doc/salome/gui/SMESH/images/add_polyhedron.png [deleted file]
doc/salome/gui/SMESH/images/add_quadrangle.png [deleted file]
doc/salome/gui/SMESH/images/add_triangle.png [deleted file]
doc/salome/gui/SMESH/images/addball.png [deleted file]
doc/salome/gui/SMESH/images/addedge.png [deleted file]
doc/salome/gui/SMESH/images/addhexahedron.png [deleted file]
doc/salome/gui/SMESH/images/addinfo_group.png [deleted file]
doc/salome/gui/SMESH/images/addinfo_mesh.png [deleted file]
doc/salome/gui/SMESH/images/addinfo_submesh.png [deleted file]
doc/salome/gui/SMESH/images/addnode.png [deleted file]
doc/salome/gui/SMESH/images/addnode_notebook.png [deleted file]
doc/salome/gui/SMESH/images/addpolygon.png [deleted file]
doc/salome/gui/SMESH/images/addquadrangle.png [deleted file]
doc/salome/gui/SMESH/images/addtetrahedron.png [deleted file]
doc/salome/gui/SMESH/images/addtriangle.png [deleted file]
doc/salome/gui/SMESH/images/advanced_mesh_infos.png [deleted file]
doc/salome/gui/SMESH/images/analyticdensity.png [deleted file]
doc/salome/gui/SMESH/images/angle_measure.png [deleted file]
doc/salome/gui/SMESH/images/aqt.png [deleted file]
doc/salome/gui/SMESH/images/automaticlength.png [deleted file]
doc/salome/gui/SMESH/images/b-art_end_length.png [deleted file]
doc/salome/gui/SMESH/images/b-erage_length.png [deleted file]
doc/salome/gui/SMESH/images/b-flection1d.png [deleted file]
doc/salome/gui/SMESH/images/b-ithmetic1d.png [deleted file]
doc/salome/gui/SMESH/images/b-mberofsegments.png [deleted file]
doc/salome/gui/SMESH/images/b-mesh_infos.png [deleted file]
doc/salome/gui/SMESH/images/bare_border_faces_smpl.png [deleted file]
doc/salome/gui/SMESH/images/bare_border_volumes_smpl.png [deleted file]
doc/salome/gui/SMESH/images/basic_props.png [deleted file]
doc/salome/gui/SMESH/images/before_clipping.png [deleted file]
doc/salome/gui/SMESH/images/before_clipping_preview.png [deleted file]
doc/salome/gui/SMESH/images/block_renumber_hyp.png [deleted file]
doc/salome/gui/SMESH/images/bnd_box.png [deleted file]
doc/salome/gui/SMESH/images/bnd_box_preview.png [deleted file]
doc/salome/gui/SMESH/images/buildcompound.png [deleted file]
doc/salome/gui/SMESH/images/buildcompound_groups.png [deleted file]
doc/salome/gui/SMESH/images/cartesian3D_hyp.png [deleted file]
doc/salome/gui/SMESH/images/cartesian3D_sphere.png [deleted file]
doc/salome/gui/SMESH/images/cartesian_implement_edge.png [deleted file]
doc/salome/gui/SMESH/images/choose_geom_selection_way.png [deleted file]
doc/salome/gui/SMESH/images/circle_angles_after.png [deleted file]
doc/salome/gui/SMESH/images/circle_simple_after.png [deleted file]
doc/salome/gui/SMESH/images/circle_simple_before.png [deleted file]
doc/salome/gui/SMESH/images/colors_size.png [deleted file]
doc/salome/gui/SMESH/images/connectivity_edge.png [deleted file]
doc/salome/gui/SMESH/images/connectivity_hex_prism.png [deleted file]
doc/salome/gui/SMESH/images/connectivity_hexa.png [deleted file]
doc/salome/gui/SMESH/images/connectivity_penta.png [deleted file]
doc/salome/gui/SMESH/images/connectivity_polygon.png [deleted file]
doc/salome/gui/SMESH/images/connectivity_polyhedron.png [deleted file]
doc/salome/gui/SMESH/images/connectivity_pyramid.png [deleted file]
doc/salome/gui/SMESH/images/connectivity_quad.png [deleted file]
doc/salome/gui/SMESH/images/connectivity_tetra.png [deleted file]
doc/salome/gui/SMESH/images/connectivity_tria.png [deleted file]
doc/salome/gui/SMESH/images/controls_popup.png [deleted file]
doc/salome/gui/SMESH/images/convert.png [deleted file]
doc/salome/gui/SMESH/images/copy_mesh_dlg.png [deleted file]
doc/salome/gui/SMESH/images/copy_mesh_icon.png [deleted file]
doc/salome/gui/SMESH/images/crack_emulation_double_nodes.png [deleted file]
doc/salome/gui/SMESH/images/crack_emulation_double_nodes_with_elems.png [deleted file]
doc/salome/gui/SMESH/images/create_group.png [deleted file]
doc/salome/gui/SMESH/images/create_groups_from_geometry.png [deleted file]
doc/salome/gui/SMESH/images/creategroup.png [deleted file]
doc/salome/gui/SMESH/images/creategroup_on_filter.png [deleted file]
doc/salome/gui/SMESH/images/createmesh-inv.png [deleted file]
doc/salome/gui/SMESH/images/createmesh-inv2.png [deleted file]
doc/salome/gui/SMESH/images/createmesh-inv3.png [deleted file]
doc/salome/gui/SMESH/images/ctrlinfo.png [deleted file]
doc/salome/gui/SMESH/images/curvi_angles_after.png [deleted file]
doc/salome/gui/SMESH/images/curvi_simple_after.png [deleted file]
doc/salome/gui/SMESH/images/curvi_simple_before.png [deleted file]
doc/salome/gui/SMESH/images/custom_point_marker.png [deleted file]
doc/salome/gui/SMESH/images/cut_groups1.png [deleted file]
doc/salome/gui/SMESH/images/cutgroups.png [deleted file]
doc/salome/gui/SMESH/images/dataset_clipping.png [deleted file]
doc/salome/gui/SMESH/images/deflection_2d.png [deleted file]
doc/salome/gui/SMESH/images/deletegroups.png [deleted file]
doc/salome/gui/SMESH/images/diagonalinversion.png [deleted file]
doc/salome/gui/SMESH/images/dialog.png [deleted file]
doc/salome/gui/SMESH/images/dimgroup_0d.png [deleted file]
doc/salome/gui/SMESH/images/dimgroup_1d.png [deleted file]
doc/salome/gui/SMESH/images/dimgroup_2d.png [deleted file]
doc/salome/gui/SMESH/images/dimgroup_dlg.png [deleted file]
doc/salome/gui/SMESH/images/dimgroup_src.png [deleted file]
doc/salome/gui/SMESH/images/dimgroup_tui1.png [deleted file]
doc/salome/gui/SMESH/images/display_entity_choose_item.png [deleted file]
doc/salome/gui/SMESH/images/display_entity_dlg.png [deleted file]
doc/salome/gui/SMESH/images/distribution_of_layers.png [deleted file]
doc/salome/gui/SMESH/images/distributionwithanalyticdensity.png [deleted file]
doc/salome/gui/SMESH/images/distributionwithtabledensity.png [deleted file]
doc/salome/gui/SMESH/images/dlg_0D_on_all_nodes.png [deleted file]
doc/salome/gui/SMESH/images/double_faces.png [deleted file]
doc/salome/gui/SMESH/images/double_nodes.png [deleted file]
doc/salome/gui/SMESH/images/duplicate01.png [deleted file]
doc/salome/gui/SMESH/images/duplicate02.png [deleted file]
doc/salome/gui/SMESH/images/duplicate03.png [deleted file]
doc/salome/gui/SMESH/images/duplicate04.png [deleted file]
doc/salome/gui/SMESH/images/duplicate_nodes.png [deleted file]
doc/salome/gui/SMESH/images/edge_wire_3d_after.png [deleted file]
doc/salome/gui/SMESH/images/edge_wire_3d_before.png [deleted file]
doc/salome/gui/SMESH/images/edge_wire_after.png [deleted file]
doc/salome/gui/SMESH/images/edge_wire_before.png [deleted file]
doc/salome/gui/SMESH/images/edit_mesh1.png [deleted file]
doc/salome/gui/SMESH/images/edit_mesh_change_value_hyp.png [deleted file]
doc/salome/gui/SMESH/images/edit_mesh_remove_hyp.png [deleted file]
doc/salome/gui/SMESH/images/editgroup.png [deleted file]
doc/salome/gui/SMESH/images/editing_groups1.png [deleted file]
doc/salome/gui/SMESH/images/elem_info.png [deleted file]
doc/salome/gui/SMESH/images/eleminfo1.png [deleted file]
doc/salome/gui/SMESH/images/eleminfo2.png [deleted file]
doc/salome/gui/SMESH/images/extr_along_wire_after.png [deleted file]
doc/salome/gui/SMESH/images/extr_along_wire_before.png [deleted file]
doc/salome/gui/SMESH/images/extru_rib_segs.png [deleted file]
doc/salome/gui/SMESH/images/extrusion_along_path_dlg.png [deleted file]
doc/salome/gui/SMESH/images/extrusion_box.png [deleted file]
doc/salome/gui/SMESH/images/extrusion_groups.png [deleted file]
doc/salome/gui/SMESH/images/extrusion_groups_res.png [deleted file]
doc/salome/gui/SMESH/images/extrusionalongaline1.png [deleted file]
doc/salome/gui/SMESH/images/extrusionalongaline2.png [deleted file]
doc/salome/gui/SMESH/images/extrusionalongaline3.png [deleted file]
doc/salome/gui/SMESH/images/extrusionbynormal_alongavgnorm.png [deleted file]
doc/salome/gui/SMESH/images/extrusionbynormal_useonly.png [deleted file]
doc/salome/gui/SMESH/images/failed_computation.png [deleted file]
doc/salome/gui/SMESH/images/find_geom_by_mesh_elem.png [deleted file]
doc/salome/gui/SMESH/images/findelement1.png [deleted file]
doc/salome/gui/SMESH/images/findelement2.png [deleted file]
doc/salome/gui/SMESH/images/findelement3.png [deleted file]
doc/salome/gui/SMESH/images/formula1.png [deleted file]
doc/salome/gui/SMESH/images/formula2.png [deleted file]
doc/salome/gui/SMESH/images/formula4.png [deleted file]
doc/salome/gui/SMESH/images/formula5.png [deleted file]
doc/salome/gui/SMESH/images/free_borders1.png [deleted file]
doc/salome/gui/SMESH/images/free_edges.png [deleted file]
doc/salome/gui/SMESH/images/free_faces.png [deleted file]
doc/salome/gui/SMESH/images/free_nodes.png [deleted file]
doc/salome/gui/SMESH/images/ghs3dprl_parameters_basic.png [deleted file]
doc/salome/gui/SMESH/images/groups_by_sharp_edges_dlg.png [deleted file]
doc/salome/gui/SMESH/images/groups_in_OB.png [deleted file]
doc/salome/gui/SMESH/images/head.png [deleted file]
doc/salome/gui/SMESH/images/hexa_ijk_mesh.png [deleted file]
doc/salome/gui/SMESH/images/hyp_source_edges.png [deleted file]
doc/salome/gui/SMESH/images/hyp_source_faces.png [deleted file]
doc/salome/gui/SMESH/images/hypo_fixedpnt_dlg.png [deleted file]
doc/salome/gui/SMESH/images/hypo_quad_params_1.png [deleted file]
doc/salome/gui/SMESH/images/hypo_quad_params_2.png [deleted file]
doc/salome/gui/SMESH/images/hypo_quad_params_dialog.png [deleted file]
doc/salome/gui/SMESH/images/hypo_quad_params_dialog_corners.png [deleted file]
doc/salome/gui/SMESH/images/hypo_quad_params_dialog_enf.png [deleted file]
doc/salome/gui/SMESH/images/hypo_quad_params_dialog_vert.png [deleted file]
doc/salome/gui/SMESH/images/hypo_quad_params_enfnodes_algo1.png [deleted file]
doc/salome/gui/SMESH/images/hypo_quad_params_enfnodes_algo2.png [deleted file]
doc/salome/gui/SMESH/images/hypo_quad_params_enfnodes_algo3.png [deleted file]
doc/salome/gui/SMESH/images/hypo_quad_params_res.png [deleted file]
doc/salome/gui/SMESH/images/hypo_quad_params_res_2.png [deleted file]
doc/salome/gui/SMESH/images/hypo_radquad_dlg.png [deleted file]
doc/salome/gui/SMESH/images/hypo_sets.png [deleted file]
doc/salome/gui/SMESH/images/image10.jpg [deleted file]
doc/salome/gui/SMESH/images/image101.png [deleted file]
doc/salome/gui/SMESH/images/image105.gif [deleted file]
doc/salome/gui/SMESH/images/image106.gif [deleted file]
doc/salome/gui/SMESH/images/image120.png [deleted file]
doc/salome/gui/SMESH/images/image121.png [deleted file]
doc/salome/gui/SMESH/images/image122.png [deleted file]
doc/salome/gui/SMESH/images/image123.gif [deleted file]
doc/salome/gui/SMESH/images/image124.gif [deleted file]
doc/salome/gui/SMESH/images/image125.gif [deleted file]
doc/salome/gui/SMESH/images/image126.gif [deleted file]
doc/salome/gui/SMESH/images/image127.gif [deleted file]
doc/salome/gui/SMESH/images/image130.gif [deleted file]
doc/salome/gui/SMESH/images/image131.gif [deleted file]
doc/salome/gui/SMESH/images/image132.gif [deleted file]
doc/salome/gui/SMESH/images/image133.gif [deleted file]
doc/salome/gui/SMESH/images/image134.gif [deleted file]
doc/salome/gui/SMESH/images/image135.gif [deleted file]
doc/salome/gui/SMESH/images/image136.gif [deleted file]
doc/salome/gui/SMESH/images/image137.gif [deleted file]
doc/salome/gui/SMESH/images/image138.gif [deleted file]
doc/salome/gui/SMESH/images/image143.gif [deleted file]
doc/salome/gui/SMESH/images/image144.png [deleted file]
doc/salome/gui/SMESH/images/image145.png [deleted file]
doc/salome/gui/SMESH/images/image146.png [deleted file]
doc/salome/gui/SMESH/images/image147.gif [deleted file]
doc/salome/gui/SMESH/images/image148.gif [deleted file]
doc/salome/gui/SMESH/images/image15.jpg [deleted file]
doc/salome/gui/SMESH/images/image151.gif [deleted file]
doc/salome/gui/SMESH/images/image152.png [deleted file]
doc/salome/gui/SMESH/images/image154.png [deleted file]
doc/salome/gui/SMESH/images/image155.gif [deleted file]
doc/salome/gui/SMESH/images/image156.gif [deleted file]
doc/salome/gui/SMESH/images/image157.gif [deleted file]
doc/salome/gui/SMESH/images/image160.gif [deleted file]
doc/salome/gui/SMESH/images/image161.png [deleted file]
doc/salome/gui/SMESH/images/image22.jpg [deleted file]
doc/salome/gui/SMESH/images/image23.jpg [deleted file]
doc/salome/gui/SMESH/images/image24.gif [deleted file]
doc/salome/gui/SMESH/images/image25.jpg [deleted file]
doc/salome/gui/SMESH/images/image25.png [deleted file]
doc/salome/gui/SMESH/images/image27.jpg [deleted file]
doc/salome/gui/SMESH/images/image28.png [deleted file]
doc/salome/gui/SMESH/images/image30.jpg [deleted file]
doc/salome/gui/SMESH/images/image31.jpg [deleted file]
doc/salome/gui/SMESH/images/image32.jpg [deleted file]
doc/salome/gui/SMESH/images/image32.png [deleted file]
doc/salome/gui/SMESH/images/image33.gif [deleted file]
doc/salome/gui/SMESH/images/image34.png [deleted file]
doc/salome/gui/SMESH/images/image35.png [deleted file]
doc/salome/gui/SMESH/images/image36.jpg [deleted file]
doc/salome/gui/SMESH/images/image36.png [deleted file]
doc/salome/gui/SMESH/images/image37.jpg [deleted file]
doc/salome/gui/SMESH/images/image37.png [deleted file]
doc/salome/gui/SMESH/images/image38.jpg [deleted file]
doc/salome/gui/SMESH/images/image38.png [deleted file]
doc/salome/gui/SMESH/images/image39.png [deleted file]
doc/salome/gui/SMESH/images/image40.png [deleted file]
doc/salome/gui/SMESH/images/image41.gif [deleted file]
doc/salome/gui/SMESH/images/image42.png [deleted file]
doc/salome/gui/SMESH/images/image43.png [deleted file]
doc/salome/gui/SMESH/images/image46.gif [deleted file]
doc/salome/gui/SMESH/images/image49.png [deleted file]
doc/salome/gui/SMESH/images/image5.jpg [deleted file]
doc/salome/gui/SMESH/images/image50.gif [deleted file]
doc/salome/gui/SMESH/images/image51.jpg [deleted file]
doc/salome/gui/SMESH/images/image52.jpg [deleted file]
doc/salome/gui/SMESH/images/image53.gif [deleted file]
doc/salome/gui/SMESH/images/image55.gif [deleted file]
doc/salome/gui/SMESH/images/image56.gif [deleted file]
doc/salome/gui/SMESH/images/image56.jpg [deleted file]
doc/salome/gui/SMESH/images/image58.png [deleted file]
doc/salome/gui/SMESH/images/image59.png [deleted file]
doc/salome/gui/SMESH/images/image63.png [deleted file]
doc/salome/gui/SMESH/images/image64.png [deleted file]
doc/salome/gui/SMESH/images/image67.png [deleted file]
doc/salome/gui/SMESH/images/image7.jpg [deleted file]
doc/salome/gui/SMESH/images/image70.jpg [deleted file]
doc/salome/gui/SMESH/images/image70.png [deleted file]
doc/salome/gui/SMESH/images/image71.jpg [deleted file]
doc/salome/gui/SMESH/images/image71.png [deleted file]
doc/salome/gui/SMESH/images/image74.gif [deleted file]
doc/salome/gui/SMESH/images/image75.jpg [deleted file]
doc/salome/gui/SMESH/images/image76.jpg [deleted file]
doc/salome/gui/SMESH/images/image77.jpg [deleted file]
doc/salome/gui/SMESH/images/image78.jpg [deleted file]
doc/salome/gui/SMESH/images/image79.jpg [deleted file]
doc/salome/gui/SMESH/images/image79.png [deleted file]
doc/salome/gui/SMESH/images/image80.png [deleted file]
doc/salome/gui/SMESH/images/image82.png [deleted file]
doc/salome/gui/SMESH/images/image83.gif [deleted file]
doc/salome/gui/SMESH/images/image84.png [deleted file]
doc/salome/gui/SMESH/images/image86.jpg [deleted file]
doc/salome/gui/SMESH/images/image88.gif [deleted file]
doc/salome/gui/SMESH/images/image88.jpg [deleted file]
doc/salome/gui/SMESH/images/image90.jpg [deleted file]
doc/salome/gui/SMESH/images/image91.png [deleted file]
doc/salome/gui/SMESH/images/image92.jpg [deleted file]
doc/salome/gui/SMESH/images/image92.png [deleted file]
doc/salome/gui/SMESH/images/image93.jpg [deleted file]
doc/salome/gui/SMESH/images/image94.gif [deleted file]
doc/salome/gui/SMESH/images/image94.jpg [deleted file]
doc/salome/gui/SMESH/images/image95.gif [deleted file]
doc/salome/gui/SMESH/images/image95.jpg [deleted file]
doc/salome/gui/SMESH/images/image96.gif [deleted file]
doc/salome/gui/SMESH/images/image96.jpg [deleted file]
doc/salome/gui/SMESH/images/image97.gif [deleted file]
doc/salome/gui/SMESH/images/image97.jpg [deleted file]
doc/salome/gui/SMESH/images/image98.png [deleted file]
doc/salome/gui/SMESH/images/image99.gif [deleted file]
doc/salome/gui/SMESH/images/image_octa12.png [deleted file]
doc/salome/gui/SMESH/images/intersect_groups1.png [deleted file]
doc/salome/gui/SMESH/images/intersectgroups.png [deleted file]
doc/salome/gui/SMESH/images/length-crit.png [deleted file]
doc/salome/gui/SMESH/images/length2d.png [deleted file]
doc/salome/gui/SMESH/images/lengthnearvertex.png [deleted file]
doc/salome/gui/SMESH/images/max_el_area.png [deleted file]
doc/salome/gui/SMESH/images/max_element_length_2d.png [deleted file]
doc/salome/gui/SMESH/images/max_element_length_3d.png [deleted file]
doc/salome/gui/SMESH/images/mergeelems.png [deleted file]
doc/salome/gui/SMESH/images/mergeelems_auto.png [deleted file]
doc/salome/gui/SMESH/images/mergeelems_ico.png [deleted file]
doc/salome/gui/SMESH/images/mergenodes.png [deleted file]
doc/salome/gui/SMESH/images/mergenodes_auto.png [deleted file]
doc/salome/gui/SMESH/images/mergenodes_ico.png [deleted file]
doc/salome/gui/SMESH/images/merging_nodes1.png [deleted file]
doc/salome/gui/SMESH/images/merging_nodes2.png [deleted file]
doc/salome/gui/SMESH/images/mesh_clear.png [deleted file]
doc/salome/gui/SMESH/images/mesh_cylinder_hexa.png [deleted file]
doc/salome/gui/SMESH/images/mesh_evaluation_succeed.png [deleted file]
doc/salome/gui/SMESH/images/mesh_fixedpnt.png [deleted file]
doc/salome/gui/SMESH/images/mesh_for_extr_along_path.png [deleted file]
doc/salome/gui/SMESH/images/mesh_node_to_point.png [deleted file]
doc/salome/gui/SMESH/images/mesh_order_123.png [deleted file]
doc/salome/gui/SMESH/images/mesh_order_123_res.png [deleted file]
doc/salome/gui/SMESH/images/mesh_order_213.png [deleted file]
doc/salome/gui/SMESH/images/mesh_order_213_res.png [deleted file]
doc/salome/gui/SMESH/images/mesh_order_321.png [deleted file]
doc/salome/gui/SMESH/images/mesh_order_321_res.png [deleted file]
doc/salome/gui/SMESH/images/mesh_order_no_concurrent.png [deleted file]
doc/salome/gui/SMESH/images/mesh_order_preview.png [deleted file]
doc/salome/gui/SMESH/images/mesh_precompute.png [deleted file]
doc/salome/gui/SMESH/images/mesh_radquad_01.png [deleted file]
doc/salome/gui/SMESH/images/mesh_radquad_02.png [deleted file]
doc/salome/gui/SMESH/images/meshcomputationfail.png [deleted file]
doc/salome/gui/SMESH/images/meshcomputationsucceed.png [deleted file]
doc/salome/gui/SMESH/images/meshcut_plugin.png [deleted file]
doc/salome/gui/SMESH/images/meshexportgroupwarning.png [deleted file]
doc/salome/gui/SMESH/images/meshexportmesh.png [deleted file]
doc/salome/gui/SMESH/images/meshimportmesh.png [deleted file]
doc/salome/gui/SMESH/images/meshtopass1.png [deleted file]
doc/salome/gui/SMESH/images/meshtopass2.png [deleted file]
doc/salome/gui/SMESH/images/meshtrianglemergeelem1.png [deleted file]
doc/salome/gui/SMESH/images/min_distance.png [deleted file]
doc/salome/gui/SMESH/images/min_distance_preview.png [deleted file]
doc/salome/gui/SMESH/images/movenodes.png [deleted file]
doc/salome/gui/SMESH/images/moving_nodes1.png [deleted file]
doc/salome/gui/SMESH/images/moving_nodes2.png [deleted file]
doc/salome/gui/SMESH/images/number_of_layers.png [deleted file]
doc/salome/gui/SMESH/images/opengl_clipping.png [deleted file]
doc/salome/gui/SMESH/images/orientaation1.png [deleted file]
doc/salome/gui/SMESH/images/over_constrained_faces.png [deleted file]
doc/salome/gui/SMESH/images/over_constrained_volumes.png [deleted file]
doc/salome/gui/SMESH/images/pattern2d.png [deleted file]
doc/salome/gui/SMESH/images/patternmapping1.png [deleted file]
doc/salome/gui/SMESH/images/patternmapping2.png [deleted file]
doc/salome/gui/SMESH/images/point_marker_widget1.png [deleted file]
doc/salome/gui/SMESH/images/point_marker_widget2.png [deleted file]
doc/salome/gui/SMESH/images/pref21.png [deleted file]
doc/salome/gui/SMESH/images/pref22.png [deleted file]
doc/salome/gui/SMESH/images/pref23.png [deleted file]
doc/salome/gui/SMESH/images/pref24.png [deleted file]
doc/salome/gui/SMESH/images/preview_mesh_1D.png [deleted file]
doc/salome/gui/SMESH/images/preview_mesh_2D.png [deleted file]
doc/salome/gui/SMESH/images/preview_tmp_data.png [deleted file]
doc/salome/gui/SMESH/images/prism_mesh.png [deleted file]
doc/salome/gui/SMESH/images/prism_needs_hyps.png [deleted file]
doc/salome/gui/SMESH/images/prism_ok_ko.png [deleted file]
doc/salome/gui/SMESH/images/prism_stack.png [deleted file]
doc/salome/gui/SMESH/images/prism_tui_sample.png [deleted file]
doc/salome/gui/SMESH/images/projection_1d.png [deleted file]
doc/salome/gui/SMESH/images/projection_2d.png [deleted file]
doc/salome/gui/SMESH/images/projection_3d.png [deleted file]
doc/salome/gui/SMESH/images/propagation_chain.png [deleted file]
doc/salome/gui/SMESH/images/quad_from_ma_medial_axis.png [deleted file]
doc/salome/gui/SMESH/images/quad_from_ma_mesh.png [deleted file]
doc/salome/gui/SMESH/images/quad_from_ma_ring_mesh.png [deleted file]
doc/salome/gui/SMESH/images/quad_mesh_invalid.png [deleted file]
doc/salome/gui/SMESH/images/quad_meshes.png [deleted file]
doc/salome/gui/SMESH/images/radial_prism_mesh.png [deleted file]
doc/salome/gui/SMESH/images/reduce_three_to_one.png [deleted file]
doc/salome/gui/SMESH/images/remove.gif [deleted file]
doc/salome/gui/SMESH/images/remove.png [deleted file]
doc/salome/gui/SMESH/images/remove_elements1.png [deleted file]
doc/salome/gui/SMESH/images/remove_elements2.png [deleted file]
doc/salome/gui/SMESH/images/remove_elements_icon.png [deleted file]
doc/salome/gui/SMESH/images/remove_nodes1.png [deleted file]
doc/salome/gui/SMESH/images/remove_nodes2.png [deleted file]
doc/salome/gui/SMESH/images/remove_nodes_icon.png [deleted file]
doc/salome/gui/SMESH/images/remove_orphan_nodes_icon.png [deleted file]
doc/salome/gui/SMESH/images/removeelements.png [deleted file]
doc/salome/gui/SMESH/images/removenodes.png [deleted file]
doc/salome/gui/SMESH/images/removeorphannodes.png [deleted file]
doc/salome/gui/SMESH/images/renumberelements.png [deleted file]
doc/salome/gui/SMESH/images/renumbernodes.png [deleted file]
doc/salome/gui/SMESH/images/reorient_2d_face.png [deleted file]
doc/salome/gui/SMESH/images/reorient_2d_point.png [deleted file]
doc/salome/gui/SMESH/images/reorient_2d_volume.png [deleted file]
doc/salome/gui/SMESH/images/reorient_faces_face.png [deleted file]
doc/salome/gui/SMESH/images/rev_edges_helper_dlg.png [deleted file]
doc/salome/gui/SMESH/images/revolution1.png [deleted file]
doc/salome/gui/SMESH/images/revolutionsn1.png [deleted file]
doc/salome/gui/SMESH/images/revolutionsn2.png [deleted file]
doc/salome/gui/SMESH/images/rotation.png [deleted file]
doc/salome/gui/SMESH/images/rotation1.png [deleted file]
doc/salome/gui/SMESH/images/rotation2.png [deleted file]
doc/salome/gui/SMESH/images/rotation_ico.png [deleted file]
doc/salome/gui/SMESH/images/scalar_bar_dlg.png [deleted file]
doc/salome/gui/SMESH/images/scale01.png [deleted file]
doc/salome/gui/SMESH/images/scale02.png [deleted file]
doc/salome/gui/SMESH/images/scale03.png [deleted file]
doc/salome/gui/SMESH/images/scale04.png [deleted file]
doc/salome/gui/SMESH/images/scale06.png [deleted file]
doc/salome/gui/SMESH/images/scale07.png [deleted file]
doc/salome/gui/SMESH/images/scale09.png [deleted file]
doc/salome/gui/SMESH/images/scaleinit01.png [deleted file]
doc/salome/gui/SMESH/images/scaleinit02.png [deleted file]
doc/salome/gui/SMESH/images/scaleres03.png [deleted file]
doc/salome/gui/SMESH/images/scaleres04.png [deleted file]
doc/salome/gui/SMESH/images/scaleres06.png [deleted file]
doc/salome/gui/SMESH/images/scaleres07.png [deleted file]
doc/salome/gui/SMESH/images/scaleres09.png [deleted file]
doc/salome/gui/SMESH/images/selectionfilterlibrary.png [deleted file]
doc/salome/gui/SMESH/images/sew_after_merge.png [deleted file]
doc/salome/gui/SMESH/images/sew_using_merge.png [deleted file]
doc/salome/gui/SMESH/images/sewing.png [deleted file]
doc/salome/gui/SMESH/images/sewing1.png [deleted file]
doc/salome/gui/SMESH/images/sewing2.png [deleted file]
doc/salome/gui/SMESH/images/sewing3.png [deleted file]
doc/salome/gui/SMESH/images/sewing4.png [deleted file]
doc/salome/gui/SMESH/images/sewing_auto.png [deleted file]
doc/salome/gui/SMESH/images/sewing_manual.png [deleted file]
doc/salome/gui/SMESH/images/show_bad_mesh.png [deleted file]
doc/salome/gui/SMESH/images/smesh_sort.png [deleted file]
doc/salome/gui/SMESH/images/smesh_sort_groups.png [deleted file]
doc/salome/gui/SMESH/images/smoothing.png [deleted file]
doc/salome/gui/SMESH/images/smoothing1.png [deleted file]
doc/salome/gui/SMESH/images/smoothing2.png [deleted file]
doc/salome/gui/SMESH/images/sort.gif [deleted file]
doc/salome/gui/SMESH/images/sort.png [deleted file]
doc/salome/gui/SMESH/images/split_biquad_to_linear_dlg.png [deleted file]
doc/salome/gui/SMESH/images/split_biquad_to_linear_icon.png [deleted file]
doc/salome/gui/SMESH/images/split_biquad_to_linear_mesh.png [deleted file]
doc/salome/gui/SMESH/images/split_into_prisms.png [deleted file]
doc/salome/gui/SMESH/images/split_into_tetra.png [deleted file]
doc/salome/gui/SMESH/images/split_into_tetra_icon.png [deleted file]
doc/salome/gui/SMESH/images/std_point_marker.png [deleted file]
doc/salome/gui/SMESH/images/straight_after.png [deleted file]
doc/salome/gui/SMESH/images/straight_before.png [deleted file]
doc/salome/gui/SMESH/images/swap.png [deleted file]
doc/salome/gui/SMESH/images/symmetry.png [deleted file]
doc/salome/gui/SMESH/images/symmetry1.png [deleted file]
doc/salome/gui/SMESH/images/symmetry2.png [deleted file]
doc/salome/gui/SMESH/images/symmetry3.png [deleted file]
doc/salome/gui/SMESH/images/topo_equality.png [deleted file]
doc/salome/gui/SMESH/images/translation.png [deleted file]
doc/salome/gui/SMESH/images/translation1.png [deleted file]
doc/salome/gui/SMESH/images/translation2.png [deleted file]
doc/salome/gui/SMESH/images/union_groups1.png [deleted file]
doc/salome/gui/SMESH/images/uniongroups.png [deleted file]
doc/salome/gui/SMESH/images/unionoftwotriangles.png [deleted file]
doc/salome/gui/SMESH/images/uniting_a_set_of_triangles1.png [deleted file]
doc/salome/gui/SMESH/images/uniting_a_set_of_triangles2.png [deleted file]
doc/salome/gui/SMESH/images/uniting_two_triangles1.png [deleted file]
doc/salome/gui/SMESH/images/uniting_two_triangles2.png [deleted file]
doc/salome/gui/SMESH/images/use_existing_face_sample_mesh.png [deleted file]
doc/salome/gui/SMESH/images/using_notebook_smesh.png [deleted file]
doc/salome/gui/SMESH/images/viscous_layers_2d_hyp.png [deleted file]
doc/salome/gui/SMESH/images/viscous_layers_extrusion_method.png [deleted file]
doc/salome/gui/SMESH/images/viscous_layers_hyp.png [deleted file]
doc/salome/gui/SMESH/images/viscous_layers_mesh.png [deleted file]
doc/salome/gui/SMESH/images/viscous_layers_on_submesh.png [deleted file]
doc/salome/gui/SMESH/input/1d_meshing_hypo.rst [deleted file]
doc/salome/gui/SMESH/input/2d_meshing_hypo.rst [deleted file]
doc/salome/gui/SMESH/input/3d_meshing_hypo.rst [deleted file]
doc/salome/gui/SMESH/input/StdMeshersBuilder.rst [deleted file]
doc/salome/gui/SMESH/input/about_filters.rst [deleted file]
doc/salome/gui/SMESH/input/about_hypo.rst [deleted file]
doc/salome/gui/SMESH/input/about_meshes.rst [deleted file]
doc/salome/gui/SMESH/input/about_quality_controls.rst [deleted file]
doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst [deleted file]
doc/salome/gui/SMESH/input/adding_quadratic_elements.rst [deleted file]
doc/salome/gui/SMESH/input/additional_hypo.rst [deleted file]
doc/salome/gui/SMESH/input/area.rst [deleted file]
doc/salome/gui/SMESH/input/aspect_ratio.rst [deleted file]
doc/salome/gui/SMESH/input/aspect_ratio_3d.rst [deleted file]
doc/salome/gui/SMESH/input/bare_border_face.rst [deleted file]
doc/salome/gui/SMESH/input/bare_border_volumes.rst [deleted file]
doc/salome/gui/SMESH/input/basic_meshing_algos.rst [deleted file]
doc/salome/gui/SMESH/input/borders_at_multi_connection.rst [deleted file]
doc/salome/gui/SMESH/input/borders_at_multi_connection_2d.rst [deleted file]
doc/salome/gui/SMESH/input/building_compounds.rst [deleted file]
doc/salome/gui/SMESH/input/cartesian_algo.rst [deleted file]
doc/salome/gui/SMESH/input/changing_orientation_of_elements.rst [deleted file]
doc/salome/gui/SMESH/input/clipping.rst [deleted file]
doc/salome/gui/SMESH/input/colors_size.rst [deleted file]
doc/salome/gui/SMESH/input/connectivity.rst [deleted file]
doc/salome/gui/SMESH/input/constructing_meshes.rst [deleted file]
doc/salome/gui/SMESH/input/constructing_submeshes.rst [deleted file]
doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.rst [deleted file]
doc/salome/gui/SMESH/input/copy_mesh.rst [deleted file]
doc/salome/gui/SMESH/input/create_groups_from_geometry.rst [deleted file]
doc/salome/gui/SMESH/input/creating_groups.rst [deleted file]
doc/salome/gui/SMESH/input/cut_mesh_by_plane.rst [deleted file]
doc/salome/gui/SMESH/input/cutting_quadrangles.rst [deleted file]
doc/salome/gui/SMESH/input/define_mesh_by_script.rst [deleted file]
doc/salome/gui/SMESH/input/deleting_groups.rst [deleted file]
doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.rst [deleted file]
doc/salome/gui/SMESH/input/display_entity.rst [deleted file]
doc/salome/gui/SMESH/input/display_mode.rst [deleted file]
doc/salome/gui/SMESH/input/double_elements_control.rst [deleted file]
doc/salome/gui/SMESH/input/double_nodes_control.rst [deleted file]
doc/salome/gui/SMESH/input/double_nodes_page.rst [deleted file]
doc/salome/gui/SMESH/input/editing_groups.rst [deleted file]
doc/salome/gui/SMESH/input/editing_meshes.rst [deleted file]
doc/salome/gui/SMESH/input/extrusion.rst [deleted file]
doc/salome/gui/SMESH/input/extrusion_along_path.rst [deleted file]
doc/salome/gui/SMESH/input/face_groups_by_sharp_edges.rst [deleted file]
doc/salome/gui/SMESH/input/find_element_by_point.rst [deleted file]
doc/salome/gui/SMESH/input/free_borders.rst [deleted file]
doc/salome/gui/SMESH/input/free_edges.rst [deleted file]
doc/salome/gui/SMESH/input/free_faces.rst [deleted file]
doc/salome/gui/SMESH/input/free_nodes.rst [deleted file]
doc/salome/gui/SMESH/input/generate_flat_elements.rst [deleted file]
doc/salome/gui/SMESH/input/group_of_underlying_elements.rst [deleted file]
doc/salome/gui/SMESH/input/grouping_elements.rst [deleted file]
doc/salome/gui/SMESH/input/importing_exporting_meshes.rst [deleted file]
doc/salome/gui/SMESH/input/index.rst [deleted file]
doc/salome/gui/SMESH/input/length.rst [deleted file]
doc/salome/gui/SMESH/input/length_2d.rst [deleted file]
doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst [deleted file]
doc/salome/gui/SMESH/input/max_element_length_2d.rst [deleted file]
doc/salome/gui/SMESH/input/max_element_length_3d.rst [deleted file]
doc/salome/gui/SMESH/input/measurements.rst [deleted file]
doc/salome/gui/SMESH/input/merging_elements.rst [deleted file]
doc/salome/gui/SMESH/input/merging_nodes.rst [deleted file]
doc/salome/gui/SMESH/input/mesh_infos.rst [deleted file]
doc/salome/gui/SMESH/input/mesh_preferences.rst [deleted file]
doc/salome/gui/SMESH/input/mesh_through_point.rst [deleted file]
doc/salome/gui/SMESH/input/minimum_angle.rst [deleted file]
doc/salome/gui/SMESH/input/modifying_meshes.rst [deleted file]
doc/salome/gui/SMESH/input/modules.rst [deleted file]
doc/salome/gui/SMESH/input/numbering.rst [deleted file]
doc/salome/gui/SMESH/input/over_constrained_faces.rst [deleted file]
doc/salome/gui/SMESH/input/over_constrained_volumes.rst [deleted file]
doc/salome/gui/SMESH/input/pattern_mapping.rst [deleted file]
doc/salome/gui/SMESH/input/point_marker.rst [deleted file]
doc/salome/gui/SMESH/input/prism_3d_algo.rst [deleted file]
doc/salome/gui/SMESH/input/projection_algos.rst [deleted file]
doc/salome/gui/SMESH/input/quad_from_ma_algo.rst [deleted file]
doc/salome/gui/SMESH/input/quad_ijk_algo.rst [deleted file]
doc/salome/gui/SMESH/input/radial_prism_algo.rst [deleted file]
doc/salome/gui/SMESH/input/radial_quadrangle_1D2D_algo.rst [deleted file]
doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst [deleted file]
doc/salome/gui/SMESH/input/reorient_faces.rst [deleted file]
doc/salome/gui/SMESH/input/revolution.rst [deleted file]
doc/salome/gui/SMESH/input/rotation.rst [deleted file]
doc/salome/gui/SMESH/input/scalar_bar.rst [deleted file]
doc/salome/gui/SMESH/input/scale.rst [deleted file]
doc/salome/gui/SMESH/input/segments_around_vertex_algo.rst [deleted file]
doc/salome/gui/SMESH/input/selection_filter_library.rst [deleted file]
doc/salome/gui/SMESH/input/sewing_meshes.rst [deleted file]
doc/salome/gui/SMESH/input/skew.rst [deleted file]
doc/salome/gui/SMESH/input/smeshBuilder.rst [deleted file]
doc/salome/gui/SMESH/input/smesh_migration.rst [deleted file]
doc/salome/gui/SMESH/input/smesh_module.rst [deleted file]
doc/salome/gui/SMESH/input/smeshpy_interface.rst [deleted file]
doc/salome/gui/SMESH/input/smeshstudytools.rst [deleted file]
doc/salome/gui/SMESH/input/smoothing.rst [deleted file]
doc/salome/gui/SMESH/input/split_biquad_to_linear.rst [deleted file]
doc/salome/gui/SMESH/input/split_to_tetra.rst [deleted file]
doc/salome/gui/SMESH/input/symmetry.rst [deleted file]
doc/salome/gui/SMESH/input/taper.rst [deleted file]
doc/salome/gui/SMESH/input/tools.rst [deleted file]
doc/salome/gui/SMESH/input/translation.rst [deleted file]
doc/salome/gui/SMESH/input/transparency.rst [deleted file]
doc/salome/gui/SMESH/input/tui_creating_meshes.rst [deleted file]
doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst [deleted file]
doc/salome/gui/SMESH/input/tui_filters.rst [deleted file]
doc/salome/gui/SMESH/input/tui_grouping_elements.rst [deleted file]
doc/salome/gui/SMESH/input/tui_measurements.rst [deleted file]
doc/salome/gui/SMESH/input/tui_modifying_meshes.rst [deleted file]
doc/salome/gui/SMESH/input/tui_notebook_smesh.rst [deleted file]
doc/salome/gui/SMESH/input/tui_quality_controls.rst [deleted file]
doc/salome/gui/SMESH/input/tui_transforming_meshes.rst [deleted file]
doc/salome/gui/SMESH/input/tui_viewing_meshes.rst [deleted file]
doc/salome/gui/SMESH/input/tui_work_on_objects_from_gui.rst [deleted file]
doc/salome/gui/SMESH/input/uniting_set_of_triangles.rst [deleted file]
doc/salome/gui/SMESH/input/uniting_two_triangles.rst [deleted file]
doc/salome/gui/SMESH/input/use_existing_algos.rst [deleted file]
doc/salome/gui/SMESH/input/using_notebook_smesh_page.rst [deleted file]
doc/salome/gui/SMESH/input/using_operations_on_groups.rst [deleted file]
doc/salome/gui/SMESH/input/viewing_meshes_overview.rst [deleted file]
doc/salome/gui/SMESH/input/volume.rst [deleted file]
doc/salome/gui/SMESH/input/warping.rst [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/1d_meshing_hypo.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/2d_meshing_hypo.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/about_filters.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/about_hypo.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/about_meshes.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/about_quality_controls.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/adding_nodes_and_elements.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/adding_quadratic_elements.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/additional_hypo.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/area.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/aspect_ratio.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/aspect_ratio_3d.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/bare_border_face.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/bare_border_volumes.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/basic_meshing_algos.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/borders_at_multi_connection.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/borders_at_multi_connection_2d.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/building_compounds.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/cartesian_algo.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/changing_orientation_of_elements.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/clipping.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/colors_size.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/connectivity.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/constructing_meshes.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/constructing_submeshes.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/convert_to_from_quadratic_mesh.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/copy_mesh.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/create_groups_from_geometry.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/creating_groups.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/cut_mesh_by_plane.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/cutting_quadrangles.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/define_mesh_by_script.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/deleting_groups.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/diagonal_inversion_of_elements.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/display_entity.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/display_mode.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/double_elements_control.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/double_nodes_control.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/double_nodes_page.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/editing_groups.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/editing_meshes.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/extrusion.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/extrusion_along_path.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/find_element_by_point.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/free_borders.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/free_edges.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/free_faces.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/free_nodes.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/generate_flat_elements.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/group_of_underlying_elements.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/grouping_elements.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/importing_exporting_meshes.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/index.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/introduction.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/length.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/length_2d.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/make_2dmesh_from_3d.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/max_element_length_2d.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/max_element_length_3d.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/max_element_volume_hypo.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/measurements.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/merging_elements.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/merging_nodes.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/mesh_infos.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/mesh_preferences.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/mesh_through_point.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/minimum_angle.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/modifying_meshes.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/modules.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/numbering.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/over_constrained_faces.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/over_constrained_volumes.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/pattern_mapping.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/point_marker.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/prism_3d_algo.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/projection_algos.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/python_api.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/quad_from_ma_algo.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/quad_ijk_algo.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/radial_prism_algo.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/radial_quadrangle_1D2D_algo.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/removing_nodes_and_elements.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/reorient_faces.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/revolution.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/rotation.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/scalar_bar.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/scale.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/segments_around_vertex_algo.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/selection_filter_library.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/sewing_meshes.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/skew.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/smesh_migration.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/smeshpy_interface.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/smoothing.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/split_biquad_to_linear.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/split_to_tetra.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/symmetry.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/taper.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tools.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/translation.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/transparency.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_cartesian_algo.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_creating_meshes.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_defining_hypotheses.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_filters.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_generate_flat_elements.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_grouping_elements.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_measurements.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_modifying_meshes.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_notebook_smesh.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_prism_3d_algo.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_quality_controls.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_transforming_meshes.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_use_existing_faces.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_viewing_meshes.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/tui_work_on_objects_from_gui.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/uniting_set_of_triangles.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/uniting_two_triangles.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/use_existing_algos.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/using_notebook_smesh_page.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/using_operations_on_groups.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/viewing_meshes_overview.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/volume.po [deleted file]
doc/salome/gui/SMESH/locale/fr/LC_MESSAGES/warping.po [deleted file]
doc/salome/gui/SMESH/merge_mesh_class.py [deleted file]
doc/salome/gui/SMESH/static/switchers.js.in [deleted file]
doc/salome/gui/SMESH/templates/layout.html [deleted file]
doc/salome/tui/CMakeLists.txt [deleted file]
doc/salome/tui/doxyfile.in [deleted file]
doc/salome/tui/images/application.gif [deleted file]
doc/salome/tui/images/head.png [deleted file]
doc/salome/tui/images/logocorp.gif [deleted file]
doc/salome/tui/images/smeshscreen.png [deleted file]
doc/salome/tui/input/index.doc [deleted file]
doc/salome/tui/static/footer.html [deleted file]
doc/salome/tui/static/header.html.in [deleted file]
doc/salome/tui/static/salome_extra.css [deleted file]
doc/tui/CMakeLists.txt [new file with mode: 0644]
doc/tui/doxyfile.in [new file with mode: 0644]
doc/tui/images/application.gif [new file with mode: 0644]
doc/tui/images/head.png [new file with mode: 0755]
doc/tui/images/logocorp.gif [new file with mode: 0755]
doc/tui/images/smeshscreen.png [new file with mode: 0755]
doc/tui/input/index.doc [new file with mode: 0644]
doc/tui/static/footer.html [new file with mode: 0644]
doc/tui/static/header.html.in [new file with mode: 0644]
doc/tui/static/salome_extra.css [new file with mode: 0644]
idl/CMakeLists.txt
idl/MG_ADAPT.idl [new file with mode: 0644]
idl/SMESH_BasicHypothesis.idl
idl/SMESH_Filter.idl
idl/SMESH_Gen.idl
idl/SMESH_Group.idl
idl/SMESH_Homard.idl [new file with mode: 0644]
idl/SMESH_Hypothesis.idl
idl/SMESH_Measurements.idl
idl/SMESH_Mesh.idl
idl/SMESH_MeshEditor.idl
idl/SMESH_Pattern.idl
idl/SMESH_smIdType.idl.in [new file with mode: 0644]
resources/CMakeLists.txt
resources/SalomeApp.xml.in
resources/StdMeshers.xml.in
resources/adapt_homard.png [new file with mode: 0644]
resources/adapt_mg_adapt.png [new file with mode: 0755]
resources/bare_border_face.png
resources/bare_border_volume.png
resources/mesh_2d_from_3d_elements.png [new file with mode: 0644]
resources/mesh_algo_mefisto.png [deleted file]
resources/mesh_algo_tri.png [new file with mode: 0644]
resources/mesh_bounding_box.png [changed mode: 0755->0644]
resources/mesh_create_dual_mesh.png [new file with mode: 0644]
resources/mesh_min_dist.png [changed mode: 0755->0644]
resources/mesh_move_node_interactive.png [new file with mode: 0644]
resources/mesh_rem_node_recon.png [new file with mode: 0644]
resources/mesh_scaled_jacobian.png [new file with mode: 0644]
resources/mesh_show.png
resources/mesh_split_diag_interactive.png [new file with mode: 0644]
resources/mesh_split_face_interactive.png [new file with mode: 0644]
resources/mesh_tree_algo_mefisto.png [deleted file]
resources/mesh_tree_algo_tri.png [new file with mode: 0644]
resources/mesh_tree_mesh_geom_modif.png
resources/over_constrained_face.png
resources/over_constrained_volume.png
resources/reorient_faces_ref_groups.png [new file with mode: 0644]
src/CMakeLists.txt
src/Controls/CMakeLists.txt
src/Controls/SMESH_Controls.cxx
src/Controls/SMESH_ControlsDef.hxx
src/Driver/CMakeLists.txt
src/Driver/Driver_Mesh.cxx
src/Driver/Driver_Mesh.h
src/Driver/Driver_SMDS_Mesh.cxx
src/Driver/Driver_SMDS_Mesh.h
src/Driver/Driver_SMESHDS_Mesh.cxx
src/Driver/Driver_SMESHDS_Mesh.h
src/DriverCGNS/CMakeLists.txt
src/DriverCGNS/DriverCGNS_Read.cxx
src/DriverCGNS/DriverCGNS_Read.hxx
src/DriverCGNS/DriverCGNS_Write.cxx
src/DriverCGNS/DriverCGNS_Write.hxx
src/DriverCGNS/SMESH_DriverCGNS.hxx
src/DriverDAT/CMakeLists.txt
src/DriverDAT/DriverDAT_R_SMDS_Mesh.cxx
src/DriverDAT/DriverDAT_R_SMDS_Mesh.h
src/DriverDAT/DriverDAT_W_SMDS_Mesh.cxx
src/DriverDAT/DriverDAT_W_SMDS_Mesh.h
src/DriverDAT/SMESH_DriverDAT.hxx
src/DriverGMF/CMakeLists.txt
src/DriverGMF/DriverGMF.cxx
src/DriverGMF/DriverGMF.hxx
src/DriverGMF/DriverGMF_Read.cxx
src/DriverGMF/DriverGMF_Read.hxx
src/DriverGMF/DriverGMF_Write.cxx
src/DriverGMF/DriverGMF_Write.hxx
src/DriverGMF/SMESH_DriverGMF.hxx
src/DriverMED/CMakeLists.txt
src/DriverMED/DriverMED.hxx
src/DriverMED/DriverMED_Family.cxx
src/DriverMED/DriverMED_Family.h
src/DriverMED/DriverMED_R_SMESHDS_Mesh.cxx
src/DriverMED/DriverMED_R_SMESHDS_Mesh.h
src/DriverMED/DriverMED_W_Field.cxx
src/DriverMED/DriverMED_W_Field.h
src/DriverMED/DriverMED_W_SMESHDS_Mesh.cxx
src/DriverMED/DriverMED_W_SMESHDS_Mesh.h
src/DriverMED/SMESH_DriverMED.hxx
src/DriverSTL/CMakeLists.txt
src/DriverSTL/DriverSTL_R_SMDS_Mesh.cxx
src/DriverSTL/DriverSTL_R_SMDS_Mesh.h
src/DriverSTL/DriverSTL_W_SMDS_Mesh.cxx
src/DriverSTL/DriverSTL_W_SMDS_Mesh.h
src/DriverSTL/SMESH_DriverSTL.hxx
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/DriverUNV_W_SMDS_Mesh.h
src/DriverUNV/SMESH_DriverUNV.hxx
src/DriverUNV/UNV164_Structure.cxx
src/DriverUNV/UNV164_Structure.hxx
src/DriverUNV/UNV2411_Structure.cxx
src/DriverUNV/UNV2411_Structure.hxx
src/DriverUNV/UNV2412_Structure.cxx
src/DriverUNV/UNV2412_Structure.hxx
src/DriverUNV/UNV2417_Structure.cxx
src/DriverUNV/UNV2417_Structure.hxx
src/DriverUNV/UNV2420_Structure.cxx
src/DriverUNV/UNV2420_Structure.hxx
src/DriverUNV/UNV_Utilities.cxx
src/DriverUNV/UNV_Utilities.hxx
src/MEDWrapper/CMakeLists.txt
src/MEDWrapper/MED_Algorithm.cxx
src/MEDWrapper/MED_Algorithm.hxx
src/MEDWrapper/MED_Common.cxx
src/MEDWrapper/MED_Common.hxx
src/MEDWrapper/MED_CoordUtils.cxx
src/MEDWrapper/MED_CoordUtils.hxx
src/MEDWrapper/MED_Factory.cxx
src/MEDWrapper/MED_Factory.hxx
src/MEDWrapper/MED_GaussDef.cxx
src/MEDWrapper/MED_GaussDef.hxx
src/MEDWrapper/MED_GaussUtils.cxx
src/MEDWrapper/MED_GaussUtils.hxx
src/MEDWrapper/MED_SharedPtr.hxx
src/MEDWrapper/MED_SliceArray.hxx
src/MEDWrapper/MED_Structures.cxx
src/MEDWrapper/MED_Structures.hxx
src/MEDWrapper/MED_TFile.hxx [new file with mode: 0644]
src/MEDWrapper/MED_TStructures.hxx
src/MEDWrapper/MED_Utilities.cxx
src/MEDWrapper/MED_Utilities.hxx
src/MEDWrapper/MED_Vector.hxx
src/MEDWrapper/MED_Wrapper.cxx
src/MEDWrapper/MED_Wrapper.hxx
src/MEDWrapper/MED_WrapperDef.hxx
src/MEDWrapper/mprint_version.cxx
src/MEFISTO2/CMakeLists.txt [deleted file]
src/MEFISTO2/Rn.h [deleted file]
src/MEFISTO2/aptrte.cxx [deleted file]
src/MEFISTO2/aptrte.h [deleted file]
src/MEFISTO2/areteideale.f [deleted file]
src/MEFISTO2/trte.f [deleted file]
src/OBJECT/CMakeLists.txt
src/OBJECT/SMESH_Actor.cxx
src/OBJECT/SMESH_Actor.h
src/OBJECT/SMESH_ActorDef.h
src/OBJECT/SMESH_ActorProps.cxx
src/OBJECT/SMESH_ActorProps.h
src/OBJECT/SMESH_ActorUtils.cxx
src/OBJECT/SMESH_ActorUtils.h
src/OBJECT/SMESH_CellLabelActor.cxx
src/OBJECT/SMESH_CellLabelActor.h
src/OBJECT/SMESH_DeviceActor.cxx
src/OBJECT/SMESH_DeviceActor.h
src/OBJECT/SMESH_ExtractGeometry.cxx
src/OBJECT/SMESH_ExtractGeometry.h
src/OBJECT/SMESH_FaceOrientationFilter.cxx
src/OBJECT/SMESH_FaceOrientationFilter.h
src/OBJECT/SMESH_NodeLabelActor.cxx
src/OBJECT/SMESH_NodeLabelActor.h
src/OBJECT/SMESH_Object.cxx
src/OBJECT/SMESH_Object.h
src/OBJECT/SMESH_ObjectDef.h
src/OBJECT/SMESH_PreviewActorsCollection.cxx
src/OBJECT/SMESH_PreviewActorsCollection.h
src/OBJECT/SMESH_SVTKActor.cxx
src/OBJECT/SMESH_SVTKActor.h
src/OBJECT/SMESH_ScalarBarActor.cxx
src/OBJECT/SMESH_ScalarBarActor.h
src/PluginUtils/CMakeLists.txt
src/PluginUtils/GeomSelectionTools.cxx
src/PluginUtils/GeomSelectionTools.h
src/PluginUtils/SMESH_AdvOptionsWdg.cxx
src/PluginUtils/SMESH_AdvOptionsWdg.h
src/PluginUtils/SMESH_PluginUtils.h
src/SMDS/CMakeLists.txt
src/SMDS/ObjectPool.hxx
src/SMDS/SMDSAbs_ElementType.hxx
src/SMDS/SMDS_BallElement.cxx
src/SMDS/SMDS_BallElement.hxx
src/SMDS/SMDS_CellOfNodes.cxx
src/SMDS/SMDS_CellOfNodes.hxx
src/SMDS/SMDS_Downward.cxx
src/SMDS/SMDS_Downward.hxx
src/SMDS/SMDS_EdgePosition.hxx
src/SMDS/SMDS_ElemIterator.hxx
src/SMDS/SMDS_ElementFactory.cxx
src/SMDS/SMDS_ElementFactory.hxx
src/SMDS/SMDS_ElementHolder.cxx
src/SMDS/SMDS_ElementHolder.hxx
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_IteratorOnIterators.hxx
src/SMDS/SMDS_LinearEdge.cxx
src/SMDS/SMDS_LinearEdge.hxx
src/SMDS/SMDS_MemoryLimit.cxx
src/SMDS/SMDS_Mesh.cxx
src/SMDS/SMDS_Mesh.hxx
src/SMDS/SMDS_Mesh0DElement.hxx
src/SMDS/SMDS_MeshCell.cxx
src/SMDS/SMDS_MeshCell.hxx
src/SMDS/SMDS_MeshEdge.hxx
src/SMDS/SMDS_MeshElement.cxx
src/SMDS/SMDS_MeshElement.hxx
src/SMDS/SMDS_MeshFace.hxx
src/SMDS/SMDS_MeshGroup.cxx
src/SMDS/SMDS_MeshGroup.hxx
src/SMDS/SMDS_MeshInfo.hxx
src/SMDS/SMDS_MeshNode.cxx
src/SMDS/SMDS_MeshNode.hxx
src/SMDS/SMDS_MeshObject.cxx
src/SMDS/SMDS_MeshObject.hxx
src/SMDS/SMDS_MeshVolume.cxx
src/SMDS/SMDS_MeshVolume.hxx
src/SMDS/SMDS_PolygonalFaceOfNodes.cxx
src/SMDS/SMDS_PolygonalFaceOfNodes.hxx
src/SMDS/SMDS_Position.hxx
src/SMDS/SMDS_SetIterator.hxx
src/SMDS/SMDS_SpacePosition.cxx
src/SMDS/SMDS_SpacePosition.hxx
src/SMDS/SMDS_StdIterator.hxx
src/SMDS/SMDS_TypeOfPosition.hxx
src/SMDS/SMDS_UnstructuredGrid.cxx
src/SMDS/SMDS_UnstructuredGrid.hxx
src/SMDS/SMDS_VertexPosition.hxx
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/SMESH_SMDS.hxx
src/SMDS/chrono.cxx
src/SMDS/chrono.hxx
src/SMESH/CMakeLists.txt
src/SMESH/MG_ADAPT.cxx [new file with mode: 0644]
src/SMESH/MG_ADAPT.hxx [new file with mode: 0644]
src/SMESH/SMESH_Algo.cxx
src/SMESH/SMESH_Algo.hxx
src/SMESH/SMESH_DriverMesh.cxx [new file with mode: 0644]
src/SMESH/SMESH_DriverMesh.hxx [new file with mode: 0644]
src/SMESH/SMESH_DriverShape.cxx [new file with mode: 0644]
src/SMESH/SMESH_DriverShape.hxx [new file with mode: 0644]
src/SMESH/SMESH_Gen.cxx
src/SMESH/SMESH_Gen.hxx
src/SMESH/SMESH_Group.cxx
src/SMESH/SMESH_Group.hxx
src/SMESH/SMESH_Homard.cxx [new file with mode: 0644]
src/SMESH/SMESH_Homard.hxx [new file with mode: 0644]
src/SMESH/SMESH_HypoFilter.cxx
src/SMESH/SMESH_HypoFilter.hxx
src/SMESH/SMESH_Hypothesis.cxx
src/SMESH/SMESH_Hypothesis.hxx
src/SMESH/SMESH_Mesh.cxx
src/SMESH/SMESH_Mesh.hxx
src/SMESH/SMESH_MeshEditor.cxx
src/SMESH/SMESH_MeshEditor.hxx
src/SMESH/SMESH_MeshLocker.cxx [new file with mode: 0644]
src/SMESH/SMESH_MeshLocker.hxx [new file with mode: 0644]
src/SMESH/SMESH_MesherHelper.cxx
src/SMESH/SMESH_MesherHelper.hxx
src/SMESH/SMESH_ParallelMesh.cxx [new file with mode: 0644]
src/SMESH/SMESH_ParallelMesh.hxx [new file with mode: 0644]
src/SMESH/SMESH_Pattern.cxx
src/SMESH/SMESH_Pattern.hxx
src/SMESH/SMESH_ProxyMesh.cxx
src/SMESH/SMESH_ProxyMesh.hxx
src/SMESH/SMESH_SMESH.hxx
src/SMESH/SMESH_SequentialMesh.cxx [new file with mode: 0644]
src/SMESH/SMESH_SequentialMesh.hxx [new file with mode: 0644]
src/SMESH/SMESH_subMesh.cxx
src/SMESH/SMESH_subMesh.hxx
src/SMESH/SMESH_subMeshEventListener.hxx
src/SMESH/memoire.h
src/SMESHClient/CMakeLists.txt
src/SMESHClient/SMESHClientBin.cxx
src/SMESHClient/SMESH_Client.cxx
src/SMESHClient/SMESH_Client.hxx
src/SMESHDS/CMakeLists.txt
src/SMESHDS/SMESHDS_Command.cxx
src/SMESHDS/SMESHDS_Command.hxx
src/SMESHDS/SMESHDS_CommandType.hxx
src/SMESHDS/SMESHDS_DataMapOfShape.hxx
src/SMESHDS/SMESHDS_Document.cxx
src/SMESHDS/SMESHDS_Document.hxx
src/SMESHDS/SMESHDS_Group.cxx
src/SMESHDS/SMESHDS_Group.hxx
src/SMESHDS/SMESHDS_GroupBase.cxx
src/SMESHDS/SMESHDS_GroupBase.hxx
src/SMESHDS/SMESHDS_GroupOnFilter.cxx
src/SMESHDS/SMESHDS_GroupOnFilter.hxx
src/SMESHDS/SMESHDS_GroupOnGeom.cxx
src/SMESHDS/SMESHDS_GroupOnGeom.hxx
src/SMESHDS/SMESHDS_Hypothesis.cxx
src/SMESHDS/SMESHDS_Hypothesis.hxx
src/SMESHDS/SMESHDS_Mesh.cxx
src/SMESHDS/SMESHDS_Mesh.hxx
src/SMESHDS/SMESHDS_Script.cxx
src/SMESHDS/SMESHDS_Script.hxx
src/SMESHDS/SMESHDS_SubMesh.cxx
src/SMESHDS/SMESHDS_SubMesh.hxx
src/SMESHDS/SMESHDS_TSubMeshHolder.hxx
src/SMESHDS/SMESH_Controls.hxx
src/SMESHDS/SMESH_SMESHDS.hxx
src/SMESHFiltersSelection/CMakeLists.txt
src/SMESHFiltersSelection/SMESH_LogicalFilter.cxx
src/SMESHFiltersSelection/SMESH_LogicalFilter.hxx
src/SMESHFiltersSelection/SMESH_NumberFilter.cxx
src/SMESHFiltersSelection/SMESH_NumberFilter.hxx
src/SMESHFiltersSelection/SMESH_Type.h
src/SMESHFiltersSelection/SMESH_TypeFilter.cxx
src/SMESHFiltersSelection/SMESH_TypeFilter.hxx
src/SMESHGUI/CMakeLists.txt
src/SMESHGUI/SMESHGUI.cxx
src/SMESHGUI/SMESHGUI.h
src/SMESHGUI/SMESHGUI_Add0DElemsOnAllNodesDlg.cxx
src/SMESHGUI/SMESHGUI_Add0DElemsOnAllNodesDlg.h
src/SMESHGUI/SMESHGUI_AddMeshElementDlg.cxx
src/SMESHGUI/SMESHGUI_AddMeshElementDlg.h
src/SMESHGUI/SMESHGUI_AddNodeOnFaceDlg.cxx [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_AddNodeOnFaceDlg.h [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_AddNodeOnSegmentDlg.cxx [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_AddNodeOnSegmentDlg.h [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.cxx
src/SMESHGUI/SMESHGUI_AddQuadraticElementDlg.h
src/SMESHGUI/SMESHGUI_BuildCompoundDlg.cxx
src/SMESHGUI/SMESHGUI_BuildCompoundDlg.h
src/SMESHGUI/SMESHGUI_ClippingDlg.cxx
src/SMESHGUI/SMESHGUI_ClippingDlg.h
src/SMESHGUI/SMESHGUI_ComputeDlg.cxx
src/SMESHGUI/SMESHGUI_ComputeDlg.h
src/SMESHGUI/SMESHGUI_ConvToQuadDlg.cxx
src/SMESHGUI/SMESHGUI_ConvToQuadDlg.h
src/SMESHGUI/SMESHGUI_ConvToQuadOp.cxx
src/SMESHGUI/SMESHGUI_ConvToQuadOp.h
src/SMESHGUI/SMESHGUI_CopyMeshDlg.cxx
src/SMESHGUI/SMESHGUI_CopyMeshDlg.h
src/SMESHGUI/SMESHGUI_CreateDualMeshDlg.cxx [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_CreateDualMeshDlg.h [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_CreateDualMeshOp.cxx [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_CreateDualMeshOp.h [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_CreatePatternDlg.cxx
src/SMESHGUI/SMESHGUI_CreatePatternDlg.h
src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.cxx
src/SMESHGUI/SMESHGUI_CreatePolyhedralVolumeDlg.h
src/SMESHGUI/SMESHGUI_DeleteGroupDlg.cxx
src/SMESHGUI/SMESHGUI_DeleteGroupDlg.h
src/SMESHGUI/SMESHGUI_Dialog.cxx
src/SMESHGUI/SMESHGUI_Dialog.h
src/SMESHGUI/SMESHGUI_DisplayEntitiesDlg.cxx
src/SMESHGUI/SMESHGUI_DisplayEntitiesDlg.h
src/SMESHGUI/SMESHGUI_Displayer.cxx
src/SMESHGUI/SMESHGUI_Displayer.h
src/SMESHGUI/SMESHGUI_DuplicateNodesDlg.cxx
src/SMESHGUI/SMESHGUI_DuplicateNodesDlg.h
src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.cxx
src/SMESHGUI/SMESHGUI_ExtrusionAlongPathDlg.h
src/SMESHGUI/SMESHGUI_ExtrusionDlg.cxx
src/SMESHGUI/SMESHGUI_ExtrusionDlg.h
src/SMESHGUI/SMESHGUI_FaceGroupsSeparatedByEdgesDlg.cxx
src/SMESHGUI/SMESHGUI_FaceGroupsSeparatedByEdgesDlg.h
src/SMESHGUI/SMESHGUI_FieldSelectorWdg.cxx
src/SMESHGUI/SMESHGUI_FieldSelectorWdg.h
src/SMESHGUI/SMESHGUI_FileInfoDlg.cxx
src/SMESHGUI/SMESHGUI_FileInfoDlg.h
src/SMESHGUI/SMESHGUI_FileValidator.cxx
src/SMESHGUI/SMESHGUI_FileValidator.h
src/SMESHGUI/SMESHGUI_Filter.cxx
src/SMESHGUI/SMESHGUI_Filter.h
src/SMESHGUI/SMESHGUI_FilterDlg.cxx
src/SMESHGUI/SMESHGUI_FilterDlg.h
src/SMESHGUI/SMESHGUI_FilterLibraryDlg.cxx
src/SMESHGUI/SMESHGUI_FilterLibraryDlg.h
src/SMESHGUI/SMESHGUI_FilterUtils.cxx
src/SMESHGUI/SMESHGUI_FilterUtils.h
src/SMESHGUI/SMESHGUI_FindElemByPointDlg.cxx
src/SMESHGUI/SMESHGUI_FindElemByPointDlg.h
src/SMESHGUI/SMESHGUI_GEOMGenUtils.cxx
src/SMESHGUI/SMESHGUI_GEOMGenUtils.h
src/SMESHGUI/SMESHGUI_GroupDlg.cxx
src/SMESHGUI/SMESHGUI_GroupDlg.h
src/SMESHGUI/SMESHGUI_GroupOnShapeDlg.cxx
src/SMESHGUI/SMESHGUI_GroupOnShapeDlg.h
src/SMESHGUI/SMESHGUI_GroupOpDlg.cxx
src/SMESHGUI/SMESHGUI_GroupOpDlg.h
src/SMESHGUI/SMESHGUI_GroupUtils.cxx
src/SMESHGUI/SMESHGUI_GroupUtils.h
src/SMESHGUI/SMESHGUI_HomardAdaptDlg.cxx [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_HomardAdaptDlg.h [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.cxx [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.h [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_HomardListGroup.cxx [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_HomardListGroup.h [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_HomardUtils.cxx [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_HomardUtils.h [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_Homard_msg_en.ts [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_Homard_msg_fr.ts [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_Homard_msg_ja.ts [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_Hypotheses.cxx
src/SMESHGUI/SMESHGUI_Hypotheses.h
src/SMESHGUI/SMESHGUI_HypothesesUtils.cxx
src/SMESHGUI/SMESHGUI_HypothesesUtils.h
src/SMESHGUI/SMESHGUI_IdPreview.cxx
src/SMESHGUI/SMESHGUI_IdPreview.h
src/SMESHGUI/SMESHGUI_IdValidator.h
src/SMESHGUI/SMESHGUI_InteractiveOp.cxx [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_InteractiveOp.h [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_MG_ADAPTDRIVER.cxx [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_MG_ADAPTDRIVER.h [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.cxx
src/SMESHGUI/SMESHGUI_Make2DFrom3DOp.h
src/SMESHGUI/SMESHGUI_MakeFull2DFrom3DOp.cxx [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_MakeFull2DFrom3DOp.h [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.cxx
src/SMESHGUI/SMESHGUI_MakeNodeAtPointDlg.h
src/SMESHGUI/SMESHGUI_Measurements.cxx
src/SMESHGUI/SMESHGUI_Measurements.h
src/SMESHGUI/SMESHGUI_MergeDlg.cxx
src/SMESHGUI/SMESHGUI_MergeDlg.h
src/SMESHGUI/SMESHGUI_MeshDlg.cxx
src/SMESHGUI/SMESHGUI_MeshDlg.h
src/SMESHGUI/SMESHGUI_MeshEditPreview.cxx
src/SMESHGUI/SMESHGUI_MeshEditPreview.h
src/SMESHGUI/SMESHGUI_MeshInfo.cxx
src/SMESHGUI/SMESHGUI_MeshInfo.h
src/SMESHGUI/SMESHGUI_MeshInfosBox.cxx
src/SMESHGUI/SMESHGUI_MeshInfosBox.h
src/SMESHGUI/SMESHGUI_MeshOp.cxx
src/SMESHGUI/SMESHGUI_MeshOp.h
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_MeshPatternDlg.h
src/SMESHGUI/SMESHGUI_MeshUtils.cxx
src/SMESHGUI/SMESHGUI_MeshUtils.h
src/SMESHGUI/SMESHGUI_MgAdaptDlg.cxx [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_MgAdaptDlg.h [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_MultiEditDlg.cxx
src/SMESHGUI/SMESHGUI_MultiEditDlg.h
src/SMESHGUI/SMESHGUI_NodesDlg.cxx
src/SMESHGUI/SMESHGUI_NodesDlg.h
src/SMESHGUI/SMESHGUI_OffsetDlg.cxx
src/SMESHGUI/SMESHGUI_OffsetDlg.h
src/SMESHGUI/SMESHGUI_Operation.cxx
src/SMESHGUI/SMESHGUI_Operation.h
src/SMESHGUI/SMESHGUI_Operations.h
src/SMESHGUI/SMESHGUI_PatternUtils.cxx
src/SMESHGUI/SMESHGUI_PatternUtils.h
src/SMESHGUI/SMESHGUI_PatternWidget.cxx
src/SMESHGUI/SMESHGUI_PatternWidget.h
src/SMESHGUI/SMESHGUI_PreVisualObj.cxx
src/SMESHGUI/SMESHGUI_PreVisualObj.h
src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.cxx
src/SMESHGUI/SMESHGUI_Preferences_ScalarBarDlg.h
src/SMESHGUI/SMESHGUI_PreviewDlg.cxx
src/SMESHGUI/SMESHGUI_PreviewDlg.h
src/SMESHGUI/SMESHGUI_PropertiesDlg.cxx
src/SMESHGUI/SMESHGUI_PropertiesDlg.h
src/SMESHGUI/SMESHGUI_RemoveElementsDlg.cxx
src/SMESHGUI/SMESHGUI_RemoveElementsDlg.h
src/SMESHGUI/SMESHGUI_RemoveNodeReconnectionDlg.cxx [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_RemoveNodeReconnectionDlg.h [new file with mode: 0644]
src/SMESHGUI/SMESHGUI_RemoveNodesDlg.cxx
src/SMESHGUI/SMESHGUI_RemoveNodesDlg.h
src/SMESHGUI/SMESHGUI_RenumberingDlg.cxx
src/SMESHGUI/SMESHGUI_RenumberingDlg.h
src/SMESHGUI/SMESHGUI_ReorientFacesDlg.cxx
src/SMESHGUI/SMESHGUI_ReorientFacesDlg.h
src/SMESHGUI/SMESHGUI_RevolutionDlg.cxx
src/SMESHGUI/SMESHGUI_RevolutionDlg.h
src/SMESHGUI/SMESHGUI_RotationDlg.cxx
src/SMESHGUI/SMESHGUI_RotationDlg.h
src/SMESHGUI/SMESHGUI_ScaleDlg.cxx
src/SMESHGUI/SMESHGUI_ScaleDlg.h
src/SMESHGUI/SMESHGUI_Selection.cxx
src/SMESHGUI/SMESHGUI_Selection.h
src/SMESHGUI/SMESHGUI_SelectionOp.cxx
src/SMESHGUI/SMESHGUI_SelectionOp.h
src/SMESHGUI/SMESHGUI_SelectionProxy.cxx
src/SMESHGUI/SMESHGUI_SelectionProxy.h
src/SMESHGUI/SMESHGUI_SewingDlg.cxx
src/SMESHGUI/SMESHGUI_SewingDlg.h
src/SMESHGUI/SMESHGUI_ShapeByMeshDlg.cxx
src/SMESHGUI/SMESHGUI_ShapeByMeshDlg.h
src/SMESHGUI/SMESHGUI_SingleEditDlg.cxx
src/SMESHGUI/SMESHGUI_SingleEditDlg.h
src/SMESHGUI/SMESHGUI_SmoothingDlg.cxx
src/SMESHGUI/SMESHGUI_SmoothingDlg.h
src/SMESHGUI/SMESHGUI_SpinBox.cxx
src/SMESHGUI/SMESHGUI_SpinBox.h
src/SMESHGUI/SMESHGUI_SplitBiQuad.cxx
src/SMESHGUI/SMESHGUI_SplitBiQuad.h
src/SMESHGUI/SMESHGUI_SymmetryDlg.cxx
src/SMESHGUI/SMESHGUI_SymmetryDlg.h
src/SMESHGUI/SMESHGUI_TranslationDlg.cxx
src/SMESHGUI/SMESHGUI_TranslationDlg.h
src/SMESHGUI/SMESHGUI_TransparencyDlg.cxx
src/SMESHGUI/SMESHGUI_TransparencyDlg.h
src/SMESHGUI/SMESHGUI_Utils.cxx
src/SMESHGUI/SMESHGUI_Utils.h
src/SMESHGUI/SMESHGUI_VTKUtils.cxx
src/SMESHGUI/SMESHGUI_VTKUtils.h
src/SMESHGUI/SMESHGUI_XmlHandler.cxx
src/SMESHGUI/SMESHGUI_XmlHandler.h
src/SMESHGUI/SMESH_SMESHGUI.hxx
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_Block.cxx
src/SMESHUtils/SMESH_Block.hxx
src/SMESHUtils/SMESH_BoostTxtArchive.cxx [new file with mode: 0644]
src/SMESHUtils/SMESH_BoostTxtArchive.hxx [new file with mode: 0644]
src/SMESHUtils/SMESH_Comment.hxx
src/SMESHUtils/SMESH_ComputeError.hxx
src/SMESHUtils/SMESH_ControlPnt.cxx
src/SMESHUtils/SMESH_ControlPnt.hxx
src/SMESHUtils/SMESH_DeMerge.cxx
src/SMESHUtils/SMESH_Delaunay.cxx
src/SMESHUtils/SMESH_Delaunay.hxx
src/SMESHUtils/SMESH_File.cxx
src/SMESHUtils/SMESH_File.hxx
src/SMESHUtils/SMESH_FillHole.cxx
src/SMESHUtils/SMESH_FreeBorders.cxx
src/SMESHUtils/SMESH_Indexer.hxx
src/SMESHUtils/SMESH_MAT2d.cxx
src/SMESHUtils/SMESH_MAT2d.hxx
src/SMESHUtils/SMESH_MGLicenseKeyGen.cxx [new file with mode: 0644]
src/SMESHUtils/SMESH_MGLicenseKeyGen.hxx [new file with mode: 0644]
src/SMESHUtils/SMESH_MeshAlgos.cxx
src/SMESHUtils/SMESH_MeshAlgos.hxx
src/SMESHUtils/SMESH_Octree.cxx
src/SMESHUtils/SMESH_Octree.hxx
src/SMESHUtils/SMESH_OctreeNode.cxx
src/SMESHUtils/SMESH_OctreeNode.hxx
src/SMESHUtils/SMESH_Offset.cxx
src/SMESHUtils/SMESH_PolyLine.cxx
src/SMESHUtils/SMESH_Quadtree.cxx
src/SMESHUtils/SMESH_Quadtree.hxx
src/SMESHUtils/SMESH_Slot.cxx
src/SMESHUtils/SMESH_Tree.hxx
src/SMESHUtils/SMESH_Triangulate.cxx
src/SMESHUtils/SMESH_TryCatch.cxx
src/SMESHUtils/SMESH_TryCatch.hxx
src/SMESHUtils/SMESH_TypeDefs.hxx
src/SMESHUtils/SMESH_Utils.hxx
src/SMESH_I/CMakeLists.txt
src/SMESH_I/MG_ADAPT_i.cxx [new file with mode: 0644]
src/SMESH_I/MG_ADAPT_i.hxx [new file with mode: 0644]
src/SMESH_I/SMESH.hxx
src/SMESH_I/SMESH_0D_Algo_i.cxx
src/SMESH_I/SMESH_0D_Algo_i.hxx
src/SMESH_I/SMESH_1D_Algo_i.cxx
src/SMESH_I/SMESH_1D_Algo_i.hxx
src/SMESH_I/SMESH_2D_Algo_i.cxx
src/SMESH_I/SMESH_2D_Algo_i.hxx
src/SMESH_I/SMESH_2smeshpy.cxx
src/SMESH_I/SMESH_2smeshpy.hxx
src/SMESH_I/SMESH_3D_Algo_i.cxx
src/SMESH_I/SMESH_3D_Algo_i.hxx
src/SMESH_I/SMESH_Algo_i.cxx
src/SMESH_I/SMESH_Algo_i.hxx
src/SMESH_I/SMESH_Filter_i.cxx
src/SMESH_I/SMESH_Filter_i.hxx
src/SMESH_I/SMESH_Gen_No_Session_i.cxx [new file with mode: 0644]
src/SMESH_I/SMESH_Gen_No_Session_i.hxx [new file with mode: 0644]
src/SMESH_I/SMESH_Gen_Session_i.cxx [new file with mode: 0644]
src/SMESH_I/SMESH_Gen_Session_i.hxx [new file with mode: 0644]
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_Group_i.cxx
src/SMESH_I/SMESH_Group_i.hxx
src/SMESH_I/SMESH_Homard_i.cxx [new file with mode: 0644]
src/SMESH_I/SMESH_Homard_i.hxx [new file with mode: 0644]
src/SMESH_I/SMESH_Hypothesis_i.cxx
src/SMESH_I/SMESH_Hypothesis_i.hxx
src/SMESH_I/SMESH_Measurements_i.cxx
src/SMESH_I/SMESH_Measurements_i.hxx
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_Mesh_i.hxx
src/SMESH_I/SMESH_NoteBook.cxx
src/SMESH_I/SMESH_NoteBook.hxx
src/SMESH_I/SMESH_ParallelMesh_i.cxx [new file with mode: 0644]
src/SMESH_I/SMESH_ParallelMesh_i.hxx [new file with mode: 0644]
src/SMESH_I/SMESH_Pattern_i.cxx
src/SMESH_I/SMESH_Pattern_i.hxx
src/SMESH_I/SMESH_PreMeshInfo.cxx
src/SMESH_I/SMESH_PreMeshInfo.hxx
src/SMESH_I/SMESH_PythonDump.cxx
src/SMESH_I/SMESH_PythonDump.hxx
src/SMESH_I/SMESH_SequentialMesh_i.hxx [new file with mode: 0644]
src/SMESH_I/SMESH_subMesh_i.cxx
src/SMESH_I/SMESH_subMesh_i.hxx
src/SMESH_PY/CMakeLists.txt
src/SMESH_PY/__init__.py
src/SMESH_PY/smeshstudytools.py
src/SMESH_SWIG/CMakeLists.txt
src/SMESH_SWIG/PAL_MESH_041_mesh.py [deleted file]
src/SMESH_SWIG/PAL_MESH_043_2D.py [deleted file]
src/SMESH_SWIG/PAL_MESH_043_3D.py [deleted file]
src/SMESH_SWIG/SMESH_AdvancedEditor.py [deleted file]
src/SMESH_SWIG/SMESH_BelongToGeom.py [deleted file]
src/SMESH_SWIG/SMESH_BuildCompound.py [deleted file]
src/SMESH_SWIG/SMESH_GroupFromGeom.py [deleted file]
src/SMESH_SWIG/SMESH_GroupFromGeom2.py [deleted file]
src/SMESH_SWIG/SMESH_GroupLyingOnGeom.py [deleted file]
src/SMESH_SWIG/SMESH_Nut.py [deleted file]
src/SMESH_SWIG/SMESH_Partition1_tetra.py [deleted file]
src/SMESH_SWIG/SMESH_Sphere.py [deleted file]
src/SMESH_SWIG/SMESH_blocks.py [deleted file]
src/SMESH_SWIG/SMESH_box.py [deleted file]
src/SMESH_SWIG/SMESH_box2_tetra.py [deleted file]
src/SMESH_SWIG/SMESH_box3_tetra.py [deleted file]
src/SMESH_SWIG/SMESH_box_tetra.py [deleted file]
src/SMESH_SWIG/SMESH_controls.py [deleted file]
src/SMESH_SWIG/SMESH_demo_hexa2_upd.py [deleted file]
src/SMESH_SWIG/SMESH_fixation.py [deleted file]
src/SMESH_SWIG/SMESH_fixation_hexa.py [deleted file]
src/SMESH_SWIG/SMESH_fixation_netgen.py [deleted file]
src/SMESH_SWIG/SMESH_fixation_tetra.py [deleted file]
src/SMESH_SWIG/SMESH_flight_skin.py [deleted file]
src/SMESH_SWIG/SMESH_freebord.py [deleted file]
src/SMESH_SWIG/SMESH_hexaedre.py [deleted file]
src/SMESH_SWIG/SMESH_mechanic.py [deleted file]
src/SMESH_SWIG/SMESH_mechanic_editor.py [deleted file]
src/SMESH_SWIG/SMESH_mechanic_netgen.py [deleted file]
src/SMESH_SWIG/SMESH_mechanic_tetra.py [deleted file]
src/SMESH_SWIG/SMESH_reg.py [deleted file]
src/SMESH_SWIG/SMESH_shared_modules.py [deleted file]
src/SMESH_SWIG/SMESH_test.py [deleted file]
src/SMESH_SWIG/SMESH_test0.py [deleted file]
src/SMESH_SWIG/SMESH_test1.py [deleted file]
src/SMESH_SWIG/SMESH_test1_AndDisplay.py [deleted file]
src/SMESH_SWIG/SMESH_test2.py [deleted file]
src/SMESH_SWIG/SMESH_test3.py [deleted file]
src/SMESH_SWIG/SMESH_test4.py [deleted file]
src/SMESH_SWIG/SMESH_test5.py [deleted file]
src/SMESH_SWIG/SMeshHelper.cxx [new file with mode: 0644]
src/SMESH_SWIG/SMeshHelper.h [new file with mode: 0644]
src/SMESH_SWIG/SMeshHelper.i [new file with mode: 0644]
src/SMESH_SWIG/StdMeshersBuilder.py
src/SMESH_SWIG/YACS_geomesh0.py [deleted file]
src/SMESH_SWIG/__init__.py
src/SMESH_SWIG/ex00_all.py [deleted file]
src/SMESH_SWIG/ex01_cube2build.py [deleted file]
src/SMESH_SWIG/ex02_cube2primitive.py [deleted file]
src/SMESH_SWIG/ex03_cube2partition.py [deleted file]
src/SMESH_SWIG/ex04_cube5tetraHexa.py [deleted file]
src/SMESH_SWIG/ex05_hole1build.py [deleted file]
src/SMESH_SWIG/ex06_hole1boolean.py [deleted file]
src/SMESH_SWIG/ex07_hole1partition.py [deleted file]
src/SMESH_SWIG/ex08_hole2build.py [deleted file]
src/SMESH_SWIG/ex09_grid4build.py [deleted file]
src/SMESH_SWIG/ex10_grid4geometry.py [deleted file]
src/SMESH_SWIG/ex11_grid3partition.py [deleted file]
src/SMESH_SWIG/ex12_grid17partition.py [deleted file]
src/SMESH_SWIG/ex13_hole1partial.py [deleted file]
src/SMESH_SWIG/ex14_cyl1holed.py [deleted file]
src/SMESH_SWIG/ex15_cyl2geometry.py [deleted file]
src/SMESH_SWIG/ex16_cyl2complementary.py [deleted file]
src/SMESH_SWIG/ex17_dome1.py [deleted file]
src/SMESH_SWIG/ex18_dome2.py [deleted file]
src/SMESH_SWIG/ex19_sphereINcube.py [deleted file]
src/SMESH_SWIG/ex21_lamp.py [deleted file]
src/SMESH_SWIG/ex24_cylinder.py [deleted file]
src/SMESH_SWIG/ex29_refine.py [deleted file]
src/SMESH_SWIG/ex30_groupsOp.py [deleted file]
src/SMESH_SWIG/ex30_tepal.py [deleted file]
src/SMESH_SWIG/ex31_dimGroup.py [deleted file]
src/SMESH_SWIG/mesher_launcher.py [new file with mode: 0644]
src/SMESH_SWIG/send_files.py [new file with mode: 0644]
src/SMESH_SWIG/smeshBuilder.py
src/SMESH_SWIG/smesh_algorithm.py
src/SMESH_SWIG/smesh_selection.py
src/SMESH_SWIG/smesh_tools.py [new file with mode: 0644]
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/SMESH_StdMeshers.hxx
src/StdMeshers/StdMeshers_Adaptive1D.cxx
src/StdMeshers/StdMeshers_Adaptive1D.hxx
src/StdMeshers/StdMeshers_Arithmetic1D.cxx
src/StdMeshers/StdMeshers_Arithmetic1D.hxx
src/StdMeshers/StdMeshers_AutomaticLength.cxx
src/StdMeshers/StdMeshers_AutomaticLength.hxx
src/StdMeshers/StdMeshers_BlockRenumber.cxx
src/StdMeshers/StdMeshers_BlockRenumber.hxx
src/StdMeshers/StdMeshers_CartesianParameters3D.cxx
src/StdMeshers/StdMeshers_CartesianParameters3D.hxx
src/StdMeshers/StdMeshers_Cartesian_3D.cxx
src/StdMeshers/StdMeshers_Cartesian_3D.hxx
src/StdMeshers/StdMeshers_Cartesian_VL.cxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_Cartesian_VL.hxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_CompositeHexa_3D.cxx
src/StdMeshers/StdMeshers_CompositeHexa_3D.hxx
src/StdMeshers/StdMeshers_CompositeSegment_1D.cxx
src/StdMeshers/StdMeshers_CompositeSegment_1D.hxx
src/StdMeshers/StdMeshers_Deflection1D.cxx
src/StdMeshers/StdMeshers_Deflection1D.hxx
src/StdMeshers/StdMeshers_Distribution.cxx
src/StdMeshers/StdMeshers_Distribution.hxx
src/StdMeshers/StdMeshers_FaceSide.cxx
src/StdMeshers/StdMeshers_FaceSide.hxx
src/StdMeshers/StdMeshers_FixedPoints1D.cxx
src/StdMeshers/StdMeshers_FixedPoints1D.hxx
src/StdMeshers/StdMeshers_Geometric1D.cxx
src/StdMeshers/StdMeshers_Geometric1D.hxx
src/StdMeshers/StdMeshers_HexaFromSkin_3D.cxx
src/StdMeshers/StdMeshers_HexaFromSkin_3D.hxx
src/StdMeshers/StdMeshers_Hexa_3D.cxx
src/StdMeshers/StdMeshers_Hexa_3D.hxx
src/StdMeshers/StdMeshers_ImportSource.cxx
src/StdMeshers/StdMeshers_ImportSource.hxx
src/StdMeshers/StdMeshers_Import_1D.cxx
src/StdMeshers/StdMeshers_Import_1D.hxx
src/StdMeshers/StdMeshers_Import_1D2D.cxx
src/StdMeshers/StdMeshers_Import_1D2D.hxx
src/StdMeshers/StdMeshers_LayerDistribution.cxx
src/StdMeshers/StdMeshers_LayerDistribution.hxx
src/StdMeshers/StdMeshers_LayerDistribution2D.cxx
src/StdMeshers/StdMeshers_LayerDistribution2D.hxx
src/StdMeshers/StdMeshers_LengthFromEdges.cxx
src/StdMeshers/StdMeshers_LengthFromEdges.hxx
src/StdMeshers/StdMeshers_LocalLength.cxx
src/StdMeshers/StdMeshers_LocalLength.hxx
src/StdMeshers/StdMeshers_MEFISTO_2D.cxx [deleted file]
src/StdMeshers/StdMeshers_MEFISTO_2D.hxx [deleted file]
src/StdMeshers/StdMeshers_MaxElementArea.cxx
src/StdMeshers/StdMeshers_MaxElementArea.hxx
src/StdMeshers/StdMeshers_MaxElementVolume.cxx
src/StdMeshers/StdMeshers_MaxElementVolume.hxx
src/StdMeshers/StdMeshers_MaxLength.cxx
src/StdMeshers/StdMeshers_MaxLength.hxx
src/StdMeshers/StdMeshers_NotConformAllowed.cxx
src/StdMeshers/StdMeshers_NotConformAllowed.hxx
src/StdMeshers/StdMeshers_NumberOfLayers.cxx
src/StdMeshers/StdMeshers_NumberOfLayers.hxx
src/StdMeshers/StdMeshers_NumberOfLayers2D.cxx
src/StdMeshers/StdMeshers_NumberOfLayers2D.hxx
src/StdMeshers/StdMeshers_NumberOfSegments.cxx
src/StdMeshers/StdMeshers_NumberOfSegments.hxx
src/StdMeshers/StdMeshers_Penta_3D.cxx
src/StdMeshers/StdMeshers_Penta_3D.hxx
src/StdMeshers/StdMeshers_PolygonPerFace_2D.cxx
src/StdMeshers/StdMeshers_PolygonPerFace_2D.hxx
src/StdMeshers/StdMeshers_PolyhedronPerSolid_3D.cxx
src/StdMeshers/StdMeshers_PolyhedronPerSolid_3D.hxx
src/StdMeshers/StdMeshers_Prism_3D.cxx
src/StdMeshers/StdMeshers_Prism_3D.hxx
src/StdMeshers/StdMeshers_ProjectionSource1D.cxx
src/StdMeshers/StdMeshers_ProjectionSource1D.hxx
src/StdMeshers/StdMeshers_ProjectionSource2D.cxx
src/StdMeshers/StdMeshers_ProjectionSource2D.hxx
src/StdMeshers/StdMeshers_ProjectionSource3D.cxx
src/StdMeshers/StdMeshers_ProjectionSource3D.hxx
src/StdMeshers/StdMeshers_ProjectionUtils.cxx
src/StdMeshers/StdMeshers_ProjectionUtils.hxx
src/StdMeshers/StdMeshers_Projection_1D.cxx
src/StdMeshers/StdMeshers_Projection_1D.hxx
src/StdMeshers/StdMeshers_Projection_1D2D.cxx
src/StdMeshers/StdMeshers_Projection_1D2D.hxx
src/StdMeshers/StdMeshers_Projection_2D.cxx
src/StdMeshers/StdMeshers_Projection_2D.hxx
src/StdMeshers/StdMeshers_Projection_3D.cxx
src/StdMeshers/StdMeshers_Projection_3D.hxx
src/StdMeshers/StdMeshers_Propagation.cxx
src/StdMeshers/StdMeshers_Propagation.hxx
src/StdMeshers/StdMeshers_QuadFromMedialAxis_1D2D.cxx
src/StdMeshers/StdMeshers_QuadFromMedialAxis_1D2D.hxx
src/StdMeshers/StdMeshers_QuadToTriaAdaptor.cxx
src/StdMeshers/StdMeshers_QuadToTriaAdaptor.hxx
src/StdMeshers/StdMeshers_QuadrangleParams.cxx
src/StdMeshers/StdMeshers_QuadrangleParams.hxx
src/StdMeshers/StdMeshers_QuadranglePreference.cxx
src/StdMeshers/StdMeshers_QuadranglePreference.hxx
src/StdMeshers/StdMeshers_Quadrangle_2D.cxx
src/StdMeshers/StdMeshers_Quadrangle_2D.hxx
src/StdMeshers/StdMeshers_QuadraticMesh.cxx
src/StdMeshers/StdMeshers_QuadraticMesh.hxx
src/StdMeshers/StdMeshers_RadialPrism_3D.cxx
src/StdMeshers/StdMeshers_RadialPrism_3D.hxx
src/StdMeshers/StdMeshers_RadialQuadrangle_1D2D.cxx
src/StdMeshers/StdMeshers_RadialQuadrangle_1D2D.hxx
src/StdMeshers/StdMeshers_Regular_1D.cxx
src/StdMeshers/StdMeshers_Regular_1D.hxx
src/StdMeshers/StdMeshers_Reversible1D.cxx
src/StdMeshers/StdMeshers_Reversible1D.hxx
src/StdMeshers/StdMeshers_SegmentAroundVertex_0D.cxx
src/StdMeshers/StdMeshers_SegmentAroundVertex_0D.hxx
src/StdMeshers/StdMeshers_SegmentLengthAroundVertex.cxx
src/StdMeshers/StdMeshers_SegmentLengthAroundVertex.hxx
src/StdMeshers/StdMeshers_StartEndLength.cxx
src/StdMeshers/StdMeshers_StartEndLength.hxx
src/StdMeshers/StdMeshers_UseExisting_1D2D.cxx
src/StdMeshers/StdMeshers_UseExisting_1D2D.hxx
src/StdMeshers/StdMeshers_ViscousLayerBuilder.cxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_ViscousLayerBuilder.hxx [new file with mode: 0644]
src/StdMeshers/StdMeshers_ViscousLayers.cxx
src/StdMeshers/StdMeshers_ViscousLayers.hxx
src/StdMeshers/StdMeshers_ViscousLayers2D.cxx
src/StdMeshers/StdMeshers_ViscousLayers2D.hxx
src/StdMeshersGUI/CMakeLists.txt
src/StdMeshersGUI/SMESH_StdMeshersGUI.hxx
src/StdMeshersGUI/StdMeshersGUI.cxx
src/StdMeshersGUI/StdMeshersGUI_BlockRenumberCreator.cxx
src/StdMeshersGUI/StdMeshersGUI_BlockRenumberCreator.h
src/StdMeshersGUI/StdMeshersGUI_CartesianParamCreator.cxx
src/StdMeshersGUI/StdMeshersGUI_CartesianParamCreator.h
src/StdMeshersGUI/StdMeshersGUI_DistrPreview.cxx
src/StdMeshersGUI/StdMeshersGUI_DistrPreview.h
src/StdMeshersGUI/StdMeshersGUI_DistrTable.cxx
src/StdMeshersGUI/StdMeshersGUI_DistrTable.h
src/StdMeshersGUI/StdMeshersGUI_FixedPointsParamWdg.cxx
src/StdMeshersGUI/StdMeshersGUI_FixedPointsParamWdg.h
src/StdMeshersGUI/StdMeshersGUI_LayerDistributionParamWdg.cxx
src/StdMeshersGUI/StdMeshersGUI_LayerDistributionParamWdg.h
src/StdMeshersGUI/StdMeshersGUI_NameCheckableGrpWdg.cxx
src/StdMeshersGUI/StdMeshersGUI_NameCheckableGrpWdg.h
src/StdMeshersGUI/StdMeshersGUI_NbSegmentsCreator.cxx
src/StdMeshersGUI/StdMeshersGUI_NbSegmentsCreator.h
src/StdMeshersGUI/StdMeshersGUI_ObjectReferenceParamWdg.cxx
src/StdMeshersGUI/StdMeshersGUI_ObjectReferenceParamWdg.h
src/StdMeshersGUI/StdMeshersGUI_PropagationHelperWdg.cxx
src/StdMeshersGUI/StdMeshersGUI_PropagationHelperWdg.h
src/StdMeshersGUI/StdMeshersGUI_QuadrangleParamWdg.cxx
src/StdMeshersGUI/StdMeshersGUI_QuadrangleParamWdg.h
src/StdMeshersGUI/StdMeshersGUI_RadioButtonsGrpWdg.cxx
src/StdMeshersGUI/StdMeshersGUI_RadioButtonsGrpWdg.h
src/StdMeshersGUI/StdMeshersGUI_StdHypothesisCreator.cxx
src/StdMeshersGUI/StdMeshersGUI_StdHypothesisCreator.h
src/StdMeshersGUI/StdMeshersGUI_SubShapeSelectorWdg.cxx
src/StdMeshersGUI/StdMeshersGUI_SubShapeSelectorWdg.h
src/StdMeshersGUI/StdMeshers_images.ts
src/StdMeshersGUI/StdMeshers_msg_en.ts
src/StdMeshersGUI/StdMeshers_msg_fr.ts
src/StdMeshers_I/CMakeLists.txt
src/StdMeshers_I/SMESH_StdMeshers_I.hxx
src/StdMeshers_I/StdMeshers_Adaptive1D_i.cxx
src/StdMeshers_I/StdMeshers_Adaptive1D_i.hxx
src/StdMeshers_I/StdMeshers_Arithmetic1D_i.cxx
src/StdMeshers_I/StdMeshers_Arithmetic1D_i.hxx
src/StdMeshers_I/StdMeshers_AutomaticLength_i.cxx
src/StdMeshers_I/StdMeshers_AutomaticLength_i.hxx
src/StdMeshers_I/StdMeshers_BlockRenumber_i.cxx
src/StdMeshers_I/StdMeshers_BlockRenumber_i.hxx
src/StdMeshers_I/StdMeshers_CartesianParameters3D_i.cxx
src/StdMeshers_I/StdMeshers_CartesianParameters3D_i.hxx
src/StdMeshers_I/StdMeshers_Cartesian_3D_i.cxx
src/StdMeshers_I/StdMeshers_Cartesian_3D_i.hxx
src/StdMeshers_I/StdMeshers_CompositeSegment_1D_i.cxx
src/StdMeshers_I/StdMeshers_CompositeSegment_1D_i.hxx
src/StdMeshers_I/StdMeshers_Deflection1D_i.cxx
src/StdMeshers_I/StdMeshers_Deflection1D_i.hxx
src/StdMeshers_I/StdMeshers_FixedPoints1D_i.cxx
src/StdMeshers_I/StdMeshers_FixedPoints1D_i.hxx
src/StdMeshers_I/StdMeshers_Geometric1D_i.cxx
src/StdMeshers_I/StdMeshers_Geometric1D_i.hxx
src/StdMeshers_I/StdMeshers_Hexa_3D_i.cxx
src/StdMeshers_I/StdMeshers_Hexa_3D_i.hxx
src/StdMeshers_I/StdMeshers_ImportSource1D_i.cxx
src/StdMeshers_I/StdMeshers_ImportSource1D_i.hxx
src/StdMeshers_I/StdMeshers_ImportSource2D_i.cxx
src/StdMeshers_I/StdMeshers_ImportSource2D_i.hxx
src/StdMeshers_I/StdMeshers_Import_1D2D_i.cxx
src/StdMeshers_I/StdMeshers_Import_1D2D_i.hxx
src/StdMeshers_I/StdMeshers_Import_1D_i.cxx
src/StdMeshers_I/StdMeshers_Import_1D_i.hxx
src/StdMeshers_I/StdMeshers_LayerDistribution2D_i.cxx
src/StdMeshers_I/StdMeshers_LayerDistribution2D_i.hxx
src/StdMeshers_I/StdMeshers_LayerDistribution_i.cxx
src/StdMeshers_I/StdMeshers_LayerDistribution_i.hxx
src/StdMeshers_I/StdMeshers_LengthFromEdges_i.cxx
src/StdMeshers_I/StdMeshers_LengthFromEdges_i.hxx
src/StdMeshers_I/StdMeshers_LocalLength_i.cxx
src/StdMeshers_I/StdMeshers_LocalLength_i.hxx
src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.cxx [deleted file]
src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.hxx [deleted file]
src/StdMeshers_I/StdMeshers_MaxElementArea_i.cxx
src/StdMeshers_I/StdMeshers_MaxElementArea_i.hxx
src/StdMeshers_I/StdMeshers_MaxElementVolume_i.cxx
src/StdMeshers_I/StdMeshers_MaxElementVolume_i.hxx
src/StdMeshers_I/StdMeshers_MaxLength_i.cxx
src/StdMeshers_I/StdMeshers_MaxLength_i.hxx
src/StdMeshers_I/StdMeshers_NotConformAllowed_i.cxx
src/StdMeshers_I/StdMeshers_NotConformAllowed_i.hxx
src/StdMeshers_I/StdMeshers_NumberOfLayers2D_i.cxx
src/StdMeshers_I/StdMeshers_NumberOfLayers2D_i.hxx
src/StdMeshers_I/StdMeshers_NumberOfLayers_i.cxx
src/StdMeshers_I/StdMeshers_NumberOfLayers_i.hxx
src/StdMeshers_I/StdMeshers_NumberOfSegments_i.cxx
src/StdMeshers_I/StdMeshers_NumberOfSegments_i.hxx
src/StdMeshers_I/StdMeshers_ObjRefUlils.cxx
src/StdMeshers_I/StdMeshers_ObjRefUlils.hxx
src/StdMeshers_I/StdMeshers_PolygonPerFace_2D_i.cxx
src/StdMeshers_I/StdMeshers_PolygonPerFace_2D_i.hxx
src/StdMeshers_I/StdMeshers_PolyhedronPerSolid_3D_i.cxx
src/StdMeshers_I/StdMeshers_PolyhedronPerSolid_3D_i.hxx
src/StdMeshers_I/StdMeshers_Prism_3D_i.cxx
src/StdMeshers_I/StdMeshers_Prism_3D_i.hxx
src/StdMeshers_I/StdMeshers_ProjectionSource1D_i.cxx
src/StdMeshers_I/StdMeshers_ProjectionSource1D_i.hxx
src/StdMeshers_I/StdMeshers_ProjectionSource2D_i.cxx
src/StdMeshers_I/StdMeshers_ProjectionSource2D_i.hxx
src/StdMeshers_I/StdMeshers_ProjectionSource3D_i.cxx
src/StdMeshers_I/StdMeshers_ProjectionSource3D_i.hxx
src/StdMeshers_I/StdMeshers_Projection_1D_2D_3D_i.cxx
src/StdMeshers_I/StdMeshers_Projection_1D_2D_3D_i.hxx
src/StdMeshers_I/StdMeshers_Propagation_i.cxx
src/StdMeshers_I/StdMeshers_Propagation_i.hxx
src/StdMeshers_I/StdMeshers_QuadrangleParams_i.cxx
src/StdMeshers_I/StdMeshers_QuadrangleParams_i.hxx
src/StdMeshers_I/StdMeshers_QuadranglePreference_i.cxx
src/StdMeshers_I/StdMeshers_QuadranglePreference_i.hxx
src/StdMeshers_I/StdMeshers_Quadrangle_2D_i.cxx
src/StdMeshers_I/StdMeshers_Quadrangle_2D_i.hxx
src/StdMeshers_I/StdMeshers_QuadraticMesh_i.cxx
src/StdMeshers_I/StdMeshers_QuadraticMesh_i.hxx
src/StdMeshers_I/StdMeshers_RadialQuadrangle_1D2D_i.cxx
src/StdMeshers_I/StdMeshers_RadialQuadrangle_1D2D_i.hxx
src/StdMeshers_I/StdMeshers_Regular_1D_i.cxx
src/StdMeshers_I/StdMeshers_Regular_1D_i.hxx
src/StdMeshers_I/StdMeshers_Reversible1D_i.cxx
src/StdMeshers_I/StdMeshers_Reversible1D_i.hxx
src/StdMeshers_I/StdMeshers_SegmentAroundVertex_0D_i.cxx
src/StdMeshers_I/StdMeshers_SegmentAroundVertex_0D_i.hxx
src/StdMeshers_I/StdMeshers_SegmentLengthAroundVertex_i.cxx
src/StdMeshers_I/StdMeshers_SegmentLengthAroundVertex_i.hxx
src/StdMeshers_I/StdMeshers_StartEndLength_i.cxx
src/StdMeshers_I/StdMeshers_StartEndLength_i.hxx
src/StdMeshers_I/StdMeshers_UseExisting_1D2D_i.cxx
src/StdMeshers_I/StdMeshers_UseExisting_1D2D_i.hxx
src/StdMeshers_I/StdMeshers_ViscousLayerBuilder_i.cxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_ViscousLayerBuilder_i.hxx [new file with mode: 0644]
src/StdMeshers_I/StdMeshers_ViscousLayers2D_i.cxx
src/StdMeshers_I/StdMeshers_ViscousLayers2D_i.hxx
src/StdMeshers_I/StdMeshers_ViscousLayers_i.cxx
src/StdMeshers_I/StdMeshers_ViscousLayers_i.hxx
src/StdMeshers_I/StdMeshers_i.cxx
src/Tools/CMakeLists.txt
src/Tools/MGCleanerPlug/CMakeLists.txt
src/Tools/MGCleanerPlug/MGCleanerMonPlugDialog.py
src/Tools/MGCleanerPlug/MGCleanerMonViewText.py
src/Tools/MGCleanerPlug/MGCleanerplug_plugin.py
src/Tools/MGCleanerPlug/doc/CMakeLists.txt
src/Tools/MGCleanerPlug/doc/conf.py.in
src/Tools/MacMesh/CMakeLists.txt
src/Tools/MacMesh/Example/PressureValve.py.in
src/Tools/MacMesh/MacMesh/Alarms.py
src/Tools/MacMesh/MacMesh/CentralUnrefine.py
src/Tools/MacMesh/MacMesh/CompositeBox.py
src/Tools/MacMesh/MacMesh/CompositeBoxF.py
src/Tools/MacMesh/MacMesh/Config.py
src/Tools/MacMesh/MacMesh/CutnGroup.py
src/Tools/MacMesh/MacMesh/Cylinder.py
src/Tools/MacMesh/MacMesh/GenFunctions.py
src/Tools/MacMesh/MacMesh/MacObject.py
src/Tools/MacMesh/MacMesh/PublishGroups.py
src/Tools/MacMesh/MacMesh/SharpAngle.py
src/Tools/MeshCut/AUTHORS
src/Tools/MeshCut/CMakeLists.txt
src/Tools/MeshCut/MeshCut_Carre.cxx
src/Tools/MeshCut/MeshCut_Carre.hxx
src/Tools/MeshCut/MeshCut_Cas.cxx
src/Tools/MeshCut/MeshCut_Cas.hxx
src/Tools/MeshCut/MeshCut_Cube.cxx
src/Tools/MeshCut/MeshCut_Cube.hxx
src/Tools/MeshCut/MeshCut_DC.cxx
src/Tools/MeshCut/MeshCut_Fonctions.cxx
src/Tools/MeshCut/MeshCut_Fonctions.hxx
src/Tools/MeshCut/MeshCut_Globals.hxx
src/Tools/MeshCut/MeshCut_Maillage.cxx
src/Tools/MeshCut/MeshCut_Maillage.hxx
src/Tools/MeshCut/MeshCut_Utils.cxx
src/Tools/MeshCut/MeshCut_Utils.hxx
src/Tools/MeshCut/meshcut_plugin.py
src/Tools/TopIIVolMeshPlug/CMakeLists.txt [new file with mode: 0644]
src/Tools/TopIIVolMeshPlug/README [new file with mode: 0644]
src/Tools/TopIIVolMeshPlug/TopIIVolMeshMonitor.py [new file with mode: 0644]
src/Tools/TopIIVolMeshPlug/TopIIVolMeshMonitor.ui [new file with mode: 0644]
src/Tools/TopIIVolMeshPlug/TopIIVolMeshPlugin.py [new file with mode: 0644]
src/Tools/TopIIVolMeshPlug/TopIIVolMeshPluginDialog.py [new file with mode: 0644]
src/Tools/TopIIVolMeshPlug/TopIIVolMeshPluginDialog.ui [new file with mode: 0644]
src/Tools/TopIIVolMeshPlug/TopIIVolMeshPlugin_plugin.py [new file with mode: 0644]
src/Tools/TopIIVolMeshPlug/doc/CMakeLists.txt [new file with mode: 0644]
src/Tools/TopIIVolMeshPlug/doc/TopIIVolMesh.rst [new file with mode: 0644]
src/Tools/TopIIVolMeshPlug/doc/conf.py.in [new file with mode: 0644]
src/Tools/TopIIVolMeshPlug/doc/images/callTopIIVolMesh.png [new file with mode: 0644]
src/Tools/TopIIVolMeshPlug/doc/index.rst [new file with mode: 0644]
src/Tools/Verima/Base/CMakeLists.txt
src/Tools/Verima/Base/__init__.py
src/Tools/Verima/Base/dataBase.py
src/Tools/Verima/Base/exportToCSV.py
src/Tools/Verima/Base/importFromCSV.py
src/Tools/Verima/Base/tableDeBase.py
src/Tools/Verima/Base/tableGroupeRatios.py
src/Tools/Verima/Base/tableGroupeTailles.py
src/Tools/Verima/Base/tableGroupes.py
src/Tools/Verima/Base/tableGroupesRef.py
src/Tools/Verima/Base/tableMachines.py
src/Tools/Verima/Base/tableMaillages.py
src/Tools/Verima/Base/tableMailles.py
src/Tools/Verima/Base/tableMailleurs.py
src/Tools/Verima/Base/tablePerfs.py
src/Tools/Verima/Base/tableRatios.py
src/Tools/Verima/Base/tableTailles.py
src/Tools/Verima/Base/tableVersions.py
src/Tools/Verima/Base/versions.py
src/Tools/Verima/CMakeLists.txt
src/Tools/Verima/CreeDocuments/CMakeLists.txt
src/Tools/Verima/CreeDocuments/__init__.py
src/Tools/Verima/CreeDocuments/jobHtml.py
src/Tools/Verima/CreeDocuments/templatesHtml/CMakeLists.txt
src/Tools/Verima/Doc/CMakeLists.txt
src/Tools/Verima/Doc/conf.py.in
src/Tools/Verima/Doc/makefile
src/Tools/Verima/Gui/CMakeLists.txt
src/Tools/Verima/Gui/__init__.py
src/Tools/Verima/Gui/desFenetreChoix.py
src/Tools/Verima/Gui/maFenetreChoix.py
src/Tools/Verima/Gui/makefile
src/Tools/Verima/Gui/monEditor.py
src/Tools/Verima/Gui/monNomBase.py
src/Tools/Verima/Gui/myMain.py
src/Tools/Verima/Gui/nomBase.py
src/Tools/Verima/Gui/visualiseDatabase.py
src/Tools/Verima/Stats/CMakeLists.txt
src/Tools/Verima/Stats/Type_Maille.py
src/Tools/Verima/Stats/__init__.py
src/Tools/Verima/Stats/getCritere.py
src/Tools/Verima/Stats/getStats.py
src/Tools/Verima/Stats/job.py
src/Tools/Verima/Stats/ref.py
src/Tools/Verima/Stats/utiles.py
src/Tools/Verima/__init__.py
src/Tools/Verima/ajoutEnreg.py
src/Tools/Verima/compareVersions.py
src/Tools/Verima/createDatabase.py
src/Tools/Verima/lance.py
src/Tools/Verima/makefile
src/Tools/Verima/passeJobs.py
src/Tools/YamsPlug/CMakeLists.txt
src/Tools/YamsPlug/doc/CMakeLists.txt
src/Tools/YamsPlug/doc/conf.py.in
src/Tools/YamsPlug/monViewText.py
src/Tools/YamsPlug/monYamsPlugDialog.py
src/Tools/YamsPlug/yamsplug_plugin.py
src/Tools/ZCracksPlug/CMakeLists.txt
src/Tools/ZCracksPlug/Zset.py
src/Tools/ZCracksPlug/__init__.py
src/Tools/ZCracksPlug/casTests/CMakeLists.txt
src/Tools/ZCracksPlug/casTests/__init__.py
src/Tools/ZCracksPlug/casTests/genereCube.py
src/Tools/ZCracksPlug/casTests/launchCas.py
src/Tools/ZCracksPlug/casTests/launchManuel.py
src/Tools/ZCracksPlug/doc/CMakeLists.txt
src/Tools/ZCracksPlug/doc/conf.py.in
src/Tools/ZCracksPlug/ellipse.py
src/Tools/ZCracksPlug/genereCrack.py
src/Tools/ZCracksPlug/main.py
src/Tools/ZCracksPlug/output.py
src/Tools/ZCracksPlug/readme.sh
src/Tools/ZCracksPlug/rectangle.py
src/Tools/ZCracksPlug/sphere.py
src/Tools/ZCracksPlug/utilityFunctions.py
src/Tools/ZCracksPlug/zcracksLaunch.py
src/Tools/ZCracksPlug/zcracks_plugin.py
src/Tools/blocFissure/AREextradosLauncher.py
src/Tools/blocFissure/AREintradosLauncher.py
src/Tools/blocFissure/CMakeLists.txt
src/Tools/blocFissure/CasTests/CMakeLists.txt
src/Tools/blocFissure/CasTests/__init__.py
src/Tools/blocFissure/CasTests/blocFissureTest.py [new file with mode: 0755]
src/Tools/blocFissure/CasTests/cubeAngle.py
src/Tools/blocFissure/CasTests/cubeAngle2.py [deleted file]
src/Tools/blocFissure/CasTests/cubeAngle_2.py [new file with mode: 0644]
src/Tools/blocFissure/CasTests/cubeCoin.py
src/Tools/blocFissure/CasTests/cubeMilieu.py
src/Tools/blocFissure/CasTests/cubeTransverse.py
src/Tools/blocFissure/CasTests/cylindre.py
src/Tools/blocFissure/CasTests/cylindre_2.py
src/Tools/blocFissure/CasTests/disquePerce.py
src/Tools/blocFissure/CasTests/ellipse_1.py
src/Tools/blocFissure/CasTests/ellipse_2.py
src/Tools/blocFissure/CasTests/eprouvetteCourbe.py
src/Tools/blocFissure/CasTests/eprouvetteDroite.py
src/Tools/blocFissure/CasTests/eprouvetteDroite_2.py
src/Tools/blocFissure/CasTests/execution_Cas.py [deleted file]
src/Tools/blocFissure/CasTests/faceGauche.py
src/Tools/blocFissure/CasTests/faceGauche_2.py
src/Tools/blocFissure/CasTests/fissureCoude_1.py
src/Tools/blocFissure/CasTests/fissureCoude_10.py
src/Tools/blocFissure/CasTests/fissureCoude_2.py
src/Tools/blocFissure/CasTests/fissureCoude_3.py
src/Tools/blocFissure/CasTests/fissureCoude_4.py
src/Tools/blocFissure/CasTests/fissureCoude_5.py
src/Tools/blocFissure/CasTests/fissureCoude_6.py
src/Tools/blocFissure/CasTests/fissureCoude_7.py
src/Tools/blocFissure/CasTests/fissureCoude_8.py
src/Tools/blocFissure/CasTests/fissureCoude_9.py
src/Tools/blocFissure/CasTests/fissure_Coude.py
src/Tools/blocFissure/CasTests/fissure_Coude_4.py
src/Tools/blocFissure/CasTests/tube.py [new file with mode: 0644]
src/Tools/blocFissure/CasTests/vis_1.py
src/Tools/blocFissure/README
src/Tools/blocFissure/__init__.py
src/Tools/blocFissure/doc/CMakeLists.txt
src/Tools/blocFissure/doc/conf.py.in
src/Tools/blocFissure/doc/faq.rst
src/Tools/blocFissure/doc/gui.rst
src/Tools/blocFissure/doc/images/01_CubeAngle_2.png [deleted file]
src/Tools/blocFissure/doc/images/01_CubeAngle_a.png [new file with mode: 0644]
src/Tools/blocFissure/doc/images/02_CubeAngle2.png [deleted file]
src/Tools/blocFissure/doc/images/02_CubeAngle2_2.png [deleted file]
src/Tools/blocFissure/doc/images/02_CubeAngle_2.png [new file with mode: 0644]
src/Tools/blocFissure/doc/images/02_CubeAngle_2_a.png [new file with mode: 0644]
src/Tools/blocFissure/doc/images/03_cylindre_2.png [deleted file]
src/Tools/blocFissure/doc/images/03_cylindre_a.png [new file with mode: 0644]
src/Tools/blocFissure/doc/images/04_cylindre2.png [deleted file]
src/Tools/blocFissure/doc/images/04_cylindre2_2.png [deleted file]
src/Tools/blocFissure/doc/images/04_cylindre_2.png [new file with mode: 0644]
src/Tools/blocFissure/doc/images/04_cylindre_2_a.png [new file with mode: 0644]
src/Tools/blocFissure/doc/images/05_disque_2.png [deleted file]
src/Tools/blocFissure/doc/images/05_disque_a.png [new file with mode: 0644]
src/Tools/blocFissure/doc/images/06_ellipse1.png [deleted file]
src/Tools/blocFissure/doc/images/06_ellipse1_2.png [deleted file]
src/Tools/blocFissure/doc/images/06_ellipse_1.png [new file with mode: 0644]
src/Tools/blocFissure/doc/images/06_ellipse_1_a.png [new file with mode: 0644]
src/Tools/blocFissure/doc/images/07_ellipse2.png [deleted file]
src/Tools/blocFissure/doc/images/07_ellipse2_2.png [deleted file]
src/Tools/blocFissure/doc/images/07_ellipse_2.png [new file with mode: 0644]
src/Tools/blocFissure/doc/images/07_ellipse_2_a.png [new file with mode: 0644]
src/Tools/blocFissure/doc/images/08_eprouvetteCourbe_2.png [deleted file]
src/Tools/blocFissure/doc/images/08_eprouvetteCourbe_a.png [new file with mode: 0644]
src/Tools/blocFissure/doc/images/09_eprouvetteDroite_2.png [deleted file]
src/Tools/blocFissure/doc/images/09_eprouvetteDroite_a.png [new file with mode: 0644]
src/Tools/blocFissure/doc/images/10_eprouvetteDroite2.png [deleted file]
src/Tools/blocFissure/doc/images/10_eprouvetteDroite2_2.png [deleted file]
src/Tools/blocFissure/doc/images/10_eprouvetteDroite_2.png [new file with mode: 0644]
src/Tools/blocFissure/doc/images/10_eprouvetteDroite_2_a.png [new file with mode: 0644]
src/Tools/blocFissure/doc/images/12_faceGauche2.png [deleted file]
src/Tools/blocFissure/doc/images/12_faceGauche2_2.png [deleted file]
src/Tools/blocFissure/doc/images/12_faceGauche_2.png [new file with mode: 0644]
src/Tools/blocFissure/doc/images/12_faceGauche_2_a.png [new file with mode: 0644]
src/Tools/blocFissure/doc/images/BF_GUI_capture.png
src/Tools/blocFissure/doc/introduction.rst
src/Tools/blocFissure/doc/pipes.rst
src/Tools/blocFissure/doc/principles.rst
src/Tools/blocFissure/doc/scripts.rst
src/Tools/blocFissure/doc/testcases.rst
src/Tools/blocFissure/exemple.py
src/Tools/blocFissure/exemple2.py
src/Tools/blocFissure/fissureLauncher.py
src/Tools/blocFissure/gmu/CMakeLists.txt
src/Tools/blocFissure/gmu/__init__.py
src/Tools/blocFissure/gmu/ajustePointsEdgePipeFissure.py
src/Tools/blocFissure/gmu/blocDefaut.py
src/Tools/blocFissure/gmu/calculePointsAxiauxPipe.py
src/Tools/blocFissure/gmu/calculePointsAxiauxPipe_a.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/calculePointsAxiauxPipe_b.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/calculePointsAxiauxPipe_c.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/casStandard.py
src/Tools/blocFissure/gmu/checkDecoupePartition.py
src/Tools/blocFissure/gmu/commonSubShapes.py
src/Tools/blocFissure/gmu/compoundFromList.py
src/Tools/blocFissure/gmu/construitEdgesRadialesDebouchantes.py
src/Tools/blocFissure/gmu/construitEdgesRadialesDebouchantes_a.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/construitEdgesRadialesDebouchantes_b.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/construitEdgesRadialesDebouchantes_c.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/construitFissureGenerale.py
src/Tools/blocFissure/gmu/construitFissureGenerale_a.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/construitFissureGenerale_b.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/construitFissureGenerale_c.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/construitMaillagePipe.py
src/Tools/blocFissure/gmu/construitMaillagePipe_a.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/construitMaillagePipe_b.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/construitMaillagePipe_c.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/construitMaillagePipe_d.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/construitPartitionsPeauFissure.py
src/Tools/blocFissure/gmu/creePointsPipePeau.py
src/Tools/blocFissure/gmu/creeZoneDefautDansObjetSain.py
src/Tools/blocFissure/gmu/creeZoneDefautFilling.py
src/Tools/blocFissure/gmu/creeZoneDefautGeom.py
src/Tools/blocFissure/gmu/creeZoneDefautMaillage.py
src/Tools/blocFissure/gmu/distance2.py
src/Tools/blocFissure/gmu/eliminateDoubles.py
src/Tools/blocFissure/gmu/elimineExtremitesPipe.py
src/Tools/blocFissure/gmu/ellipsoideDefaut.py
src/Tools/blocFissure/gmu/enleveDefaut.py
src/Tools/blocFissure/gmu/extractionOrientee.py
src/Tools/blocFissure/gmu/extractionOrienteeMulti.py
src/Tools/blocFissure/gmu/extractionOrientee_a.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/facesCirculaires.py
src/Tools/blocFissure/gmu/facesFissure.py
src/Tools/blocFissure/gmu/facesToreInBloc.py
src/Tools/blocFissure/gmu/facesVolumesToriques.py
src/Tools/blocFissure/gmu/findWireEndVertices.py
src/Tools/blocFissure/gmu/findWireIntermediateVertices.py
src/Tools/blocFissure/gmu/findWireVertices.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/fissError.py
src/Tools/blocFissure/gmu/fissureCoude.py
src/Tools/blocFissure/gmu/fissureGenerique.py
src/Tools/blocFissure/gmu/fusionMaillageAttributionDefaut.py
src/Tools/blocFissure/gmu/genereElemsFissureElliptique.py
src/Tools/blocFissure/gmu/genereMeshCalculZoneDefaut.py
src/Tools/blocFissure/gmu/geomsmesh.py
src/Tools/blocFissure/gmu/getCentreFondFiss.py
src/Tools/blocFissure/gmu/getStatsMaillageFissure.py [changed mode: 0644->0755]
src/Tools/blocFissure/gmu/getSubshapeIds.py
src/Tools/blocFissure/gmu/identifieEdgesPeau.py
src/Tools/blocFissure/gmu/identifieEdgesPeau_a.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/identifieEdgesPeau_b.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/identifieEdgesPeau_c.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/identifieElementsDebouchants.py
src/Tools/blocFissure/gmu/identifieElementsDebouchants_a.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/identifieElementsDebouchants_b.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/identifieElementsDebouchants_c.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/identifieElementsDebouchants_d.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/identifieElementsFissure.py
src/Tools/blocFissure/gmu/identifieElementsGeometriquesPeau.py
src/Tools/blocFissure/gmu/identifieFacesEdgesFissureExterne.py
src/Tools/blocFissure/gmu/identifieFacesPeau.py
src/Tools/blocFissure/gmu/initEtude.py
src/Tools/blocFissure/gmu/initLog.py
src/Tools/blocFissure/gmu/insereFissureElliptique.py
src/Tools/blocFissure/gmu/insereFissureGenerale.py [deleted file]
src/Tools/blocFissure/gmu/insereFissureLongue.py
src/Tools/blocFissure/gmu/insereFissureLongue_a.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/insereFissureLongue_b.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/insereFissureLongue_c.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/insereFissureLongue_d.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/insereFissureLongue_e.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/insereFissureLongue_f.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/insereFissureLongue_g.py [new file with mode: 0644]
src/Tools/blocFissure/gmu/listOfExtraFunctions.py
src/Tools/blocFissure/gmu/mailleAretesEtJonction.py
src/Tools/blocFissure/gmu/mailleFacesFissure.py
src/Tools/blocFissure/gmu/mailleFacesPeau.py
src/Tools/blocFissure/gmu/meshBlocPart.py
src/Tools/blocFissure/gmu/orderEdgesFromWire.py
src/Tools/blocFissure/gmu/partitionBlocDefaut.py
src/Tools/blocFissure/gmu/partitionVolumeSain.py
src/Tools/blocFissure/gmu/partitionneFissureParPipe.py
src/Tools/blocFissure/gmu/peauInterne.py
src/Tools/blocFissure/gmu/produitMixte.py
src/Tools/blocFissure/gmu/projettePointSurCourbe.py
src/Tools/blocFissure/gmu/prolongeVertices.py
src/Tools/blocFissure/gmu/prolongeWire.py
src/Tools/blocFissure/gmu/propagateTore.py
src/Tools/blocFissure/gmu/putName.py
src/Tools/blocFissure/gmu/quadranglesToShape.py
src/Tools/blocFissure/gmu/quadranglesToShapeNoCorner.py
src/Tools/blocFissure/gmu/quadranglesToShapeWithCorner.py
src/Tools/blocFissure/gmu/regroupeSainEtDefaut.py
src/Tools/blocFissure/gmu/restreintFaceFissure.py
src/Tools/blocFissure/gmu/rotTrans.py
src/Tools/blocFissure/gmu/shapeSurFissure.py
src/Tools/blocFissure/gmu/shapesSurFissure.py
src/Tools/blocFissure/gmu/sortEdges.py
src/Tools/blocFissure/gmu/sortFaces.py
src/Tools/blocFissure/gmu/sortGeneratrices.py
src/Tools/blocFissure/gmu/sortSolids.py
src/Tools/blocFissure/gmu/substractSubShapes.py
src/Tools/blocFissure/gmu/testgmu.py [deleted file]
src/Tools/blocFissure/gmu/toreFissure.py
src/Tools/blocFissure/gmu/triedreBase.py
src/Tools/blocFissure/gmu/trouveEdgesFissPeau.py
src/Tools/blocFissure/gmu/whichSide.py
src/Tools/blocFissure/gmu/whichSideMulti.py
src/Tools/blocFissure/gmu/whichSideVertex.py
src/Tools/blocFissure/ihm/CMakeLists.txt
src/Tools/blocFissure/ihm/__init__.py
src/Tools/blocFissure/ihm/fissureCoude.ui
src/Tools/blocFissure/ihm/fissureCoude_ihm.py
src/Tools/blocFissure/ihm/fissureCoude_plugin.py
src/Tools/blocFissure/ihm/fissureGenerale.ui
src/Tools/blocFissure/ihm/fissureGenerale_plugin.py
src/Tools/blocFissure/lanceurSoudureArrondieTest.py
src/Tools/blocFissure/lanceurSoudureViveTest.py
src/Tools/blocFissure/lanceurTestAubry.py
src/Tools/blocFissure/materielCasTests/CMakeLists.txt
src/Tools/blocFissure/materielCasTests/__init__.py
src/Tools/blocFissure/materielCasTests/cubeAngle.py
src/Tools/blocFissure/materielCasTests/cubeFin.py
src/Tools/blocFissure/materielCasTests/decoupeCylindre.py
src/Tools/blocFissure/materielCasTests/disquePerce.py [new file with mode: 0644]
src/Tools/blocFissure/materielCasTests/disque_perce.py [deleted file]
src/Tools/blocFissure/materielCasTests/ellipse.py
src/Tools/blocFissure/materielCasTests/ellipse_disque.py
src/Tools/blocFissure/materielCasTests/ellipse_probleme.py
src/Tools/blocFissure/materielCasTests/eprouvetteCourbe.py
src/Tools/blocFissure/materielCasTests/eprouvetteDroite.py
src/Tools/blocFissure/materielCasTests/fissureGauche.py
src/Tools/blocFissure/materielCasTests/fissureGauche2.py [deleted file]
src/Tools/blocFissure/materielCasTests/fissureGauche_2.py [new file with mode: 0644]
src/Tools/blocFissure/materielCasTests/genereMateriel.py
src/Tools/blocFissure/materielCasTests/tube.py [new file with mode: 0755]
src/Tools/blocFissure/materielCasTests/vis.py
src/Tools/padder/CMakeLists.txt
src/Tools/padder/doc/CMakeLists.txt
src/Tools/padder/doc/doxyfile.in
src/Tools/padder/doc/images/head.png [new file with mode: 0644]
src/Tools/padder/doc/static/footer.html
src/Tools/padder/meshjob/CMakeLists.txt
src/Tools/padder/meshjob/idl/CMakeLists.txt
src/Tools/padder/meshjob/idl/MESHJOB.idl
src/Tools/padder/meshjob/idl/SPADDERPluginTest.idl
src/Tools/padder/meshjob/impl/CMakeLists.txt
src/Tools/padder/meshjob/impl/MeshJobManager_i.cxx
src/Tools/padder/meshjob/impl/MeshJobManager_i.hxx
src/Tools/padder/meshjob/impl/SMeshPadderHelper.cxx [new file with mode: 0644]
src/Tools/padder/meshjob/impl/SMeshPadderHelper.h [new file with mode: 0644]
src/Tools/padder/meshjob/impl/SMeshPadderHelper.i [new file with mode: 0644]
src/Tools/padder/meshjob/impl/SPADDERPluginTester_i.cxx
src/Tools/padder/meshjob/impl/SPADDERPluginTester_i.hxx
src/Tools/padder/meshjob/impl/testhelper.hxx
src/Tools/padder/resources/CMakeLists.txt
src/Tools/padder/resources/testdata/buildparticules.py
src/Tools/padder/spadderpy/CMakeLists.txt
src/Tools/padder/spadderpy/__init__.py
src/Tools/padder/spadderpy/configreader.py
src/Tools/padder/spadderpy/gui/CMakeLists.txt
src/Tools/padder/spadderpy/gui/__init__.py
src/Tools/padder/spadderpy/gui/inputdata.py
src/Tools/padder/spadderpy/gui/inputdialog.py
src/Tools/padder/spadderpy/gui/plugindialog.py
src/Tools/padder/spadderpy/plugin/CMakeLists.txt
src/Tools/padder/spadderpy/plugin/envPlugins.sh.in
src/Tools/padder/spadderpy/plugin/spadderPlugin.py
src/Tools/padder/unittests/CMakeLists.txt
src/Tools/padder/unittests/__init__.py
src/Tools/padder/unittests/autotest.sh.in
src/Tools/padder/unittests/usecase_meshJobManager.py
src/Tools/padder/unittests/usecase_spadderPluginTester.py
src/Tools/smesh_plugins.py
test/0README [new file with mode: 0644]
test/CMakeLists.txt
test/CTestTestfileInstall.cmake [new file with mode: 0644]
test/PAL_MESH_041_mesh.py [new file with mode: 0644]
test/PAL_MESH_043_2D.py [new file with mode: 0644]
test/PAL_MESH_043_3D.py [new file with mode: 0644]
test/SMESH_AdvancedEditor.py [new file with mode: 0644]
test/SMESH_BelongToGeom.py [new file with mode: 0644]
test/SMESH_BuildCompound.py [new file with mode: 0644]
test/SMESH_GroupFromGeom.py [new file with mode: 0644]
test/SMESH_GroupFromGeom2.py [new file with mode: 0644]
test/SMESH_GroupLyingOnGeom.py [new file with mode: 0644]
test/SMESH_Nut.py [new file with mode: 0644]
test/SMESH_Partition1_tetra.py [new file with mode: 0644]
test/SMESH_Sphere.py [new file with mode: 0644]
test/SMESH_blocks.py [new file with mode: 0644]
test/SMESH_box.py [new file with mode: 0644]
test/SMESH_box2_tetra.py [new file with mode: 0644]
test/SMESH_box3_tetra.py [new file with mode: 0644]
test/SMESH_box_tetra.py [new file with mode: 0644]
test/SMESH_controls.py [new file with mode: 0644]
test/SMESH_controls_3D_warping.py [new file with mode: 0644]
test/SMESH_controls_scaled_jacobian.py [new file with mode: 0644]
test/SMESH_create_dual_mesh_adapt.py [new file with mode: 0644]
test/SMESH_create_dual_mesh_tpipe.py [new file with mode: 0644]
test/SMESH_demo_hexa2_upd.py [new file with mode: 0644]
test/SMESH_fixation.py [new file with mode: 0644]
test/SMESH_fixation_hexa.py [new file with mode: 0644]
test/SMESH_fixation_netgen.py [new file with mode: 0644]
test/SMESH_fixation_tetra.py [new file with mode: 0644]
test/SMESH_flight_skin.py [new file with mode: 0644]
test/SMESH_freebord.py [new file with mode: 0644]
test/SMESH_hexaedre.py [new file with mode: 0644]
test/SMESH_mechanic.py [new file with mode: 0644]
test/SMESH_mechanic_editor.py [new file with mode: 0644]
test/SMESH_mechanic_netgen.py [new file with mode: 0644]
test/SMESH_mechanic_tetra.py [new file with mode: 0644]
test/SMESH_reg.py [new file with mode: 0644]
test/SMESH_test.py [new file with mode: 0644]
test/SMESH_test0.py [new file with mode: 0644]
test/SMESH_test1.py [new file with mode: 0644]
test/SMESH_test1_AndDisplay.py [new file with mode: 0644]
test/SMESH_test2.py [new file with mode: 0644]
test/SMESH_test3.py [new file with mode: 0644]
test/SMESH_test4.py [new file with mode: 0644]
test/SMESH_test5.py [new file with mode: 0644]
test/basic_geom_smesh_without_session.py [new file with mode: 0644]
test/basic_shaper_smesh_without_session.py [new file with mode: 0644]
test/basic_smesh_output_with_mc_field.py [new file with mode: 0644]
test/blocFissure_01_without_session.py [new file with mode: 0644]
test/blocFissure_02_without_session.py [new file with mode: 0644]
test/blocFissure_03_without_session.py [new file with mode: 0644]
test/blocFissure_04_without_session.py [new file with mode: 0644]
test/blocFissure_05_without_session.py [new file with mode: 0644]
test/blocFissure_06_without_session.py [new file with mode: 0644]
test/blocFissure_07_without_session.py [new file with mode: 0644]
test/body_fitting_quanta_sphere.py [new file with mode: 0644]
test/body_fitting_viscous_layer_cylinder.py [new file with mode: 0644]
test/body_fitting_viscous_layer_tpipe.py [new file with mode: 0644]
test/create_penta_biquad.py [new file with mode: 0644]
test/data/Mesh_tri.med [new file with mode: 0644]
test/doublenodes_polyhedra.py [new file with mode: 0644]
test/ex00_all.py [new file with mode: 0644]
test/ex01_cube2build.py [new file with mode: 0644]
test/ex02_cube2primitive.py [new file with mode: 0644]
test/ex03_cube2partition.py [new file with mode: 0644]
test/ex04_cube5tetraHexa.py [new file with mode: 0644]
test/ex05_hole1build.py [new file with mode: 0644]
test/ex06_hole1boolean.py [new file with mode: 0644]
test/ex07_hole1partition.py [new file with mode: 0644]
test/ex08_hole2build.py [new file with mode: 0644]
test/ex09_grid4build.py [new file with mode: 0644]
test/ex10_grid4geometry.py [new file with mode: 0644]
test/ex11_grid3partition.py [new file with mode: 0644]
test/ex12_grid17partition.py [new file with mode: 0644]
test/ex13_hole1partial.py [new file with mode: 0644]
test/ex14_cyl1holed.py [new file with mode: 0644]
test/ex15_cyl2geometry.py [new file with mode: 0644]
test/ex16_cyl2complementary.py [new file with mode: 0644]
test/ex17_dome1.py [new file with mode: 0644]
test/ex18_dome2.py [new file with mode: 0644]
test/ex19_sphereINcube.py [new file with mode: 0644]
test/ex21_lamp.py [new file with mode: 0644]
test/ex24_cylinder.py [new file with mode: 0644]
test/ex29_refine.py [new file with mode: 0644]
test/ex30_groupsOp.py [new file with mode: 0644]
test/ex31_dimGroup.py [new file with mode: 0644]
test/ex_MakePolyLine.py [new file with mode: 0644]
test/extrusion_penta_biquad.py [new file with mode: 0644]
test/gmsh_runner.py [new file with mode: 0644]
test/netgen_runner.py [new file with mode: 0644]
test/netgen_runner_1D2D3D.py [new file with mode: 0644]
test/netgen_runner_2D.py [new file with mode: 0644]
test/shaper_smesh_groups_without_session.py [new file with mode: 0644]
test/ssl_hdf5_symbols_conflicts.py [new file with mode: 0644]
test/test_helper.py [new file with mode: 0755]
test/test_import_1D2D_with_tetras_and_pyras.py [new file with mode: 0644]
test/test_polyhedron_per_solid.py [new file with mode: 0644]
test/test_smeshplugins.py [new file with mode: 0644]
test/test_vlapi_growthlayer.py [new file with mode: 0644]
test/test_vlapi_shrinkgeometry.py [new file with mode: 0644]
test/tests.set [new file with mode: 0644]

index 6796fcfe9254599b1154d524b9f4ad4187fcf3e0..2a6a4f30c494ed0358ec644e89a21a0fd4071538 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # 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
 #
 CMAKE_MINIMUM_REQUIRED(VERSION 2.8.8 FATAL_ERROR)
-PROJECT(SalomeSMESH C CXX)
-
 INCLUDE(CMakeDependentOption)
 
-# Versioning
-# ===========
-# Project name, upper case
+# Project name
+# ============
+# original
+PROJECT(SalomeSMESH C CXX)
+# upper case
 STRING(TOUPPER ${PROJECT_NAME} PROJECT_NAME_UC)
 
-SET(${PROJECT_NAME_UC}_MAJOR_VERSION 9)
-SET(${PROJECT_NAME_UC}_MINOR_VERSION 6)
-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})
-SET(${PROJECT_NAME_UC}_VERSION_DEV 1)
-
 # Common CMake macros
 # ===================
 SET(CONFIGURATION_ROOT_DIR $ENV{CONFIGURATION_ROOT_DIR} CACHE PATH "Path to the Salome CMake configuration files")
@@ -43,6 +36,11 @@ ELSE()
   MESSAGE(FATAL_ERROR "We absolutely need the Salome CMake configuration files, please define CONFIGURATION_ROOT_DIR !")
 ENDIF()
 
+# Versioning
+# ===========
+SALOME_SETUP_VERSION(9.12.0)
+MESSAGE(STATUS "Building ${PROJECT_NAME_UC} ${${PROJECT_NAME_UC}_VERSION} from \"${${PROJECT_NAME_UC}_GIT_SHA1}\"")
+
 # Find KERNEL
 # ===========
 SET(KERNEL_ROOT_DIR $ENV{KERNEL_ROOT_DIR} CACHE PATH "Path to the Salome KERNEL")
@@ -65,7 +63,7 @@ SET(BUILD_SHARED_LIBS TRUE)
 # ============
 OPTION(SALOME_BUILD_TESTS "Build SALOME tests" ON)
 OPTION(SALOME_BUILD_DOC "Generate SALOME SMESH documentation" ON)
-  
+
 # Advanced options:
 OPTION(SALOME_BUILD_GUI           "Enable GUI" ON)
 OPTION(SALOME_SMESH_USE_CGNS      "Enable import/export to CGNS format" OFF)
@@ -79,19 +77,18 @@ IF(SALOME_SMESH_DYNLOAD_LOCAL)
   ADD_DEFINITIONS(-DDYNLOAD_LOCAL)
 ENDIF(SALOME_SMESH_DYNLOAD_LOCAL)
 
+IF(SALOME_USE_64BIT_IDS)
+   SET(SMESH_ID_TYPE "long long")
+ELSE()
+   SET(SMESH_ID_TYPE "long")
+ENDIF()
+
 IF(SMESH_USE_MESHGEMS_HYPOSET)
   SET(SMESH_USE_MESHGEMS_HYPOSET_VAR "true")
 ELSE(SMESH_USE_MESHGEMS_HYPOSET)
   SET(SMESH_USE_MESHGEMS_HYPOSET_VAR "false")
 ENDIF(SMESH_USE_MESHGEMS_HYPOSET)
 
-#On Linux use Fortran to compile MEFISTO2D
-IF(NOT WIN32)
-  ENABLE_LANGUAGE(Fortran)
-  SET(SALOME_SMESH_ENABLE_MEFISTO ON)
-  ADD_DEFINITIONS(-DENABLE_MEFISTO)
-ENDIF(NOT WIN32)
-
 MARK_AS_ADVANCED(SALOME_BUILD_GUI SALOME_SMESH_USE_CGNS SALOME_SMESH_USE_TBB SALOME_SMESH_DYNLOAD_LOCAL SMESH_USE_MESHGEMS_HYPOSET)
 
 # Prerequisites
@@ -130,8 +127,12 @@ IF(SALOME_BUILD_TESTS)
 ENDIF()
 IF(SALOME_BUILD_DOC)
   FIND_PACKAGE(SalomeDoxygen)
-  SET(Sphinx_EXTENSIONS sphinxcontrib.napoleon)
   FIND_PACKAGE(SalomeSphinx)
+  INCLUDE(UseSphinx)
+  SPHINX_CHECK_EXTENSIONS(sphinx_rtd_theme)
+  IF(SPHINX_VERSION VERSION_LESS "1.3")
+    SPHINX_CHECK_EXTENSIONS(sphinxcontrib.napoleon)
+  ENDIF()
   SALOME_LOG_OPTIONAL_PACKAGE(Doxygen SALOME_BUILD_DOC)
   SALOME_LOG_OPTIONAL_PACKAGE(Sphinx SALOME_BUILD_DOC)
 ENDIF()
@@ -142,7 +143,7 @@ IF(SALOME_BUILD_GUI)
   IF(EXISTS ${GUI_ROOT_DIR})
     FIND_PACKAGE(SalomeGUI)
     SALOME_GUI_WITH_CORBA() #check whether GUI built with CORBA
-    SALOME_GUI_MODE(SALOME_USE_VTKVIEWER SALOME_USE_SALOMEOBJECT 
+    SALOME_GUI_MODE(SALOME_USE_VTKVIEWER SALOME_USE_SALOMEOBJECT
                     OPTIONAL SALOME_USE_PLOT2DVIEWER SALOME_USE_PYCONSOLE)
     ##
     ## Prerequisites From GUI:
@@ -191,6 +192,15 @@ IF(NOT WITH_SHAPER_STUDY AND SALOME_BUILD_TESTS)
   MESSAGE(WARNING "SHAPERSTUDY is not found; the corresponding tests will be omitted")
 ENDIF()
 
+# Find MEDCoupling
+# ================
+SET(MEDCOUPLING_ROOT_DIR $ENV{MEDCOUPLING_ROOT_DIR} CACHE PATH "Path to the MEDCoupling tool")
+IF(EXISTS ${MEDCOUPLING_ROOT_DIR})
+  FIND_PACKAGE(SalomeMEDCoupling REQUIRED)   # will reload HDF5, MEDFile, XDR, etc ...
+ELSE(EXISTS ${MEDCOUPLING_ROOT_DIR})
+  MESSAGE(FATAL_ERROR "We absolutely need the MEDCoupling tool, please define MEDCOUPLING_ROOT_DIR !")
+ENDIF(EXISTS ${MEDCOUPLING_ROOT_DIR})
+
 ##
 ## SMESH specifics
 ##
@@ -198,7 +208,7 @@ ENDIF()
 # VTK is obligatiry for the SMESH
 FIND_PACKAGE(SalomeVTK REQUIRED)
 
-FIND_PACKAGE(SalomeOpenCASCADE REQUIRED) 
+FIND_PACKAGE(SalomeOpenCASCADE REQUIRED)
 
 IF(SALOME_SMESH_USE_CGNS)
   FIND_PACKAGE(SalomeCGNS)
@@ -214,24 +224,22 @@ ENDIF(SALOME_SMESH_USE_TBB)
 
 FIND_PACKAGE(SalomeMEDFile REQUIRED)
 
-#On Windows use f2c to generate C MEFISTO2D code
+
+SET (SALOME_SMESH_DISABLE_MG_ADAPT OFF)
+SET (SALOME_SMESH_DISABLE_HOMARD_ADAPT OFF)
 IF(WIN32)
-  SET(SALOME_SMESH_ENABLE_MEFISTO OFF)
-  FIND_PACKAGE(Salomef2c QUIET)
-  IF(${F2C_FOUND})
-    ADD_DEFINITIONS(-DENABLE_MEFISTO)
-    SET(SALOME_SMESH_ENABLE_MEFISTO ON)
-    MESSAGE(STATUS "Build MEFISTO2D mesher using Fortran to C generator")
-  ELSE(${F2C_FOUND})
-    MESSAGE(FATAL "Fortran to C generator is not found: MEFISTO2D mesher cannot be compiled! Please define F2C_ROOT_DIR !")
-  ENDIF(${F2C_FOUND})  
-ENDIF(WIN32)
-
-IF(SALOME_SMESH_ENABLE_MEFISTO)
- SET(MEFISTO2D_NAME "MEFISTO_2D")
-ELSE(SALOME_SMESH_ENABLE_MEFISTO)
- SET(MEFISTO2D_NAME "NOT_FOUND")
-ENDIF(SALOME_SMESH_ENABLE_MEFISTO)
+  # On Windows temporarily disable MG_ADAPT
+  SET (SALOME_SMESH_DISABLE_MG_ADAPT ON)
+  SET (SALOME_SMESH_DISABLE_HOMARD_ADAPT ON)
+ENDIF()
+IF(SALOME_SMESH_DISABLE_MG_ADAPT)
+  ADD_DEFINITIONS(-DDISABLE_MG_ADAPT)
+ENDIF()
+
+IF(SALOME_SMESH_DISABLE_HOMARD_ADAPT)
+  ADD_DEFINITIONS(-DDISABLE_HOMARD_ADAPT)
+ENDIF()
+
 
 # Detection summary:
 SALOME_PACKAGE_REPORT_AND_CHECK()
@@ -243,32 +251,32 @@ SET(SALOME_INSTALL_BINS "${SALOME_INSTALL_BINS}" CACHE PATH "Install path: SALOM
 SET(SALOME_INSTALL_LIBS "${SALOME_INSTALL_LIBS}" CACHE PATH "Install path: SALOME libs")
 SET(SALOME_INSTALL_IDLS "${SALOME_INSTALL_IDLS}" CACHE PATH "Install path: SALOME IDL files")
 SET(SALOME_INSTALL_HEADERS "${SALOME_INSTALL_HEADERS}" CACHE PATH "Install path: SALOME headers")
-SET(SALOME_INSTALL_SCRIPT_SCRIPTS "${SALOME_INSTALL_SCRIPT_SCRIPTS}" CACHE PATH 
+SET(SALOME_INSTALL_SCRIPT_SCRIPTS "${SALOME_INSTALL_SCRIPT_SCRIPTS}" CACHE PATH
    "Install path: SALOME scripts")
-SET(SALOME_INSTALL_SCRIPT_DATA "${SALOME_INSTALL_SCRIPT_DATA}" CACHE PATH 
+SET(SALOME_INSTALL_SCRIPT_DATA "${SALOME_INSTALL_SCRIPT_DATA}" CACHE PATH
    "Install path: SALOME script data")
-SET(SALOME_INSTALL_SCRIPT_PYTHON "${SALOME_INSTALL_SCRIPT_PYTHON}" CACHE PATH 
+SET(SALOME_INSTALL_SCRIPT_PYTHON "${SALOME_INSTALL_SCRIPT_PYTHON}" CACHE PATH
    "Install path: SALOME Python scripts")
-SET(SALOME_INSTALL_APPLISKEL_SCRIPTS "${SALOME_INSTALL_APPLISKEL_SCRIPTS}" CACHE PATH 
+SET(SALOME_INSTALL_APPLISKEL_SCRIPTS "${SALOME_INSTALL_APPLISKEL_SCRIPTS}" CACHE PATH
    "Install path: SALOME application skeleton - scripts")
-SET(SALOME_INSTALL_APPLISKEL_PYTHON "${SALOME_INSTALL_APPLISKEL_PYTHON}" CACHE PATH 
+SET(SALOME_INSTALL_APPLISKEL_PYTHON "${SALOME_INSTALL_APPLISKEL_PYTHON}" CACHE PATH
    "Install path: SALOME application skeleton - Python")
 SET(SALOME_INSTALL_PYTHON "${SALOME_INSTALL_PYTHON}" CACHE PATH "Install path: SALOME Python stuff")
-SET(SALOME_INSTALL_PYTHON_SHARED "${SALOME_INSTALL_PYTHON_SHARED}" CACHE PATH 
+SET(SALOME_INSTALL_PYTHON_SHARED "${SALOME_INSTALL_PYTHON_SHARED}" CACHE PATH
    "Install path: SALOME Python shared modules")
-SET(SALOME_INSTALL_CMAKE_LOCAL "${SALOME_INSTALL_CMAKE_LOCAL}" CACHE PATH 
-    "Install path: local SALOME CMake files") 
+SET(SALOME_INSTALL_CMAKE_LOCAL "${SALOME_INSTALL_CMAKE_LOCAL}" CACHE PATH
+    "Install path: local SALOME CMake files")
 SET(SALOME_INSTALL_AMCONFIG_LOCAL "${SALOME_INSTALL_AMCONFIG_LOCAL}" CACHE PATH
   "Install path: local SALOME config files (obsolete, to be removed)")
 SET(SALOME_INSTALL_RES "${SALOME_INSTALL_RES}" CACHE PATH "Install path: SALOME resources")
 SET(SALOME_INSTALL_DOC "${SALOME_INSTALL_DOC}" CACHE PATH "Install path: SALOME documentation")
 
 # Specific to SMESH:
-SET(SALOME_SMESH_INSTALL_RES_DATA "${SALOME_INSTALL_RES}/smesh" CACHE PATH 
+SET(SALOME_SMESH_INSTALL_RES_DATA "${SALOME_INSTALL_RES}/smesh" CACHE PATH
     "Install path: SALOME SMESH specific data")
-SET(SALOME_SMESH_INSTALL_PLUGINS share/salome/plugins/smesh CACHE PATH 
+SET(SALOME_SMESH_INSTALL_PLUGINS share/salome/plugins/smesh CACHE PATH
     "Install path: SALOME SMESH plugins")
-    
+
 MARK_AS_ADVANCED(SALOME_INSTALL_BINS SALOME_INSTALL_LIBS SALOME_INSTALL_IDLS SALOME_INSTALL_HEADERS)
 MARK_AS_ADVANCED(SALOME_INSTALL_SCRIPT_SCRIPTS SALOME_INSTALL_SCRIPT_DATA SALOME_INSTALL_SCRIPT_PYTHON)
 MARK_AS_ADVANCED(SALOME_INSTALL_APPLISKEL_SCRIPTS  SALOME_INSTALL_APPLISKEL_PYTHON SALOME_INSTALL_CMAKE_LOCAL SALOME_INSTALL_RES)
@@ -280,9 +288,20 @@ MARK_AS_ADVANCED(SALOME_SMESH_INSTALL_RES_DATA SALOME_SMESH_INSTALL_PLUGINS)
 SALOME_ACCUMULATE_ENVIRONMENT(PYTHONPATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_BINS}
                                                  ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_PYTHON}
                                                  ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_PYTHON_SHARED})
-SALOME_ACCUMULATE_ENVIRONMENT(LD_LIBRARY_PATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_LIBS}) 
+SALOME_ACCUMULATE_ENVIRONMENT(LD_LIBRARY_PATH NOCHECK ${CMAKE_INSTALL_PREFIX}/${SALOME_INSTALL_LIBS})
 
-# Sources 
+# For salome test
+# ===============
+
+SET(SMESH_TEST_DIR ${SALOME_INSTALL_SCRIPT_SCRIPTS}/test)
+IF(SALOME_BUILD_TESTS)
+  CONFIGURE_FILE(CTestTestfileInstall.cmake.in CTestTestfileInstall.cmake @ONLY)
+  INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/CTestTestfileInstall.cmake
+          DESTINATION ${SMESH_TEST_DIR}
+          RENAME CTestTestfile.cmake)
+ENDIF()
+
+# Sources
 # ========
 
 ADD_SUBDIRECTORY(idl)
@@ -290,16 +309,13 @@ ADD_SUBDIRECTORY(adm_local)
 ADD_SUBDIRECTORY(resources)
 ADD_SUBDIRECTORY(bin)
 ADD_SUBDIRECTORY(src)
-IF(SALOME_BUILD_DOC)
-  ADD_SUBDIRECTORY(doc)
-ENDIF()
+ADD_SUBDIRECTORY(doc)
 IF(SALOME_BUILD_TESTS)
   ADD_SUBDIRECTORY(test)
 ENDIF()
 
 # Header configuration
 # ====================
-SALOME_XVERSION(${PROJECT_NAME})
 SALOME_CONFIGURE_FILE(SMESH_version.h.in SMESH_version.h INSTALL ${SALOME_INSTALL_HEADERS})
 
 # Configuration export
@@ -309,7 +325,7 @@ INCLUDE(CMakePackageConfigHelpers)
 
 # List of targets in this project we want to make visible to the rest of the world.
 # They all have to be INSTALL'd with the option "EXPORT ${PROJECT_NAME}TargetGroup"
-SET(_${PROJECT_NAME}_exposed_targets 
+SET(_${PROJECT_NAME}_exposed_targets
   SMESHControls MeshDriver MeshDriverDAT MeshDriverGMF MeshDriverMED
   MeshDriverSTL MeshDriverUNV MEDWrapper
   SMDS SMESHimpl SMESHEngine SMESHClient SMESHDS
@@ -317,11 +333,6 @@ SET(_${PROJECT_NAME}_exposed_targets
   SPADDERPluginTesterEngine SalomeIDLSMESH SalomeIDLSPADDER
 )
 
-IF(SALOME_SMESH_ENABLE_MEFISTO)
-  LIST(APPEND _${PROJECT_NAME}_exposed_targets
-       MEFISTO2D) 
-ENDIF(SALOME_SMESH_ENABLE_MEFISTO)
-
 IF(SALOME_BUILD_GUI)
   LIST(APPEND _${PROJECT_NAME}_exposed_targets
       SMESHObject SMESHFiltersSelection SMESH PluginUtils StdMeshersGUI
@@ -329,7 +340,7 @@ IF(SALOME_BUILD_GUI)
 ENDIF(SALOME_BUILD_GUI)
 
 IF(SALOME_SMESH_USE_CGNS)
-  LIST(APPEND _${PROJECT_NAME}_exposed_targets 
+  LIST(APPEND _${PROJECT_NAME}_exposed_targets
     MeshDriverCGNS
   )
 ENDIF(SALOME_SMESH_USE_CGNS)
@@ -343,20 +354,21 @@ EXPORT(TARGETS ${_${PROJECT_NAME}_exposed_targets}
 
 # Ensure the variables are always defined for the configure:
 SET(GEOM_ROOT_DIR "${GEOM_ROOT_DIR}")
+SET(MEDCOUPLING_ROOT_DIR "${MEDCOUPLING_ROOT_DIR}")
 SET(MEDFILE_ROOT_DIR "${MEDFILE_ROOT_DIR}")
 SET(CGNS_ROOT_DIR "${CGNS_ROOT_DIR}")
 SET(TBB_ROOT_DIR  "${TBB_ROOT_DIR}")
+
 SET(CONF_INCLUDE_DIRS "${PROJECT_SOURCE_DIR}/include" "${PROJECT_BINARY_DIR}/include")
 
 # Build variables that will be expanded when configuring Salome<MODULE>Config.cmake:
-SALOME_CONFIGURE_PREPARE(CGNS TBB MEDFile)
+SALOME_CONFIGURE_PREPARE(MEDCoupling CGNS TBB MEDFile)
 
 CONFIGURE_PACKAGE_CONFIG_FILE(${PROJECT_NAME}Config.cmake.in
     ${PROJECT_BINARY_DIR}/${PROJECT_NAME}Config.cmake
     INSTALL_DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}"
     PATH_VARS CONF_INCLUDE_DIRS SALOME_INSTALL_CMAKE_LOCAL CMAKE_INSTALL_PREFIX
-    GEOM_ROOT_DIR MEDFILE_ROOT_DIR CGNS_ROOT_DIR TBB_ROOT_DIR)
+    GEOM_ROOT_DIR MEDCOUPLING_ROOT_DIR MEDFILE_ROOT_DIR CGNS_ROOT_DIR TBB_ROOT_DIR)
 
 WRITE_BASIC_PACKAGE_VERSION_FILE(${PROJECT_BINARY_DIR}/${PROJECT_NAME}ConfigVersion.cmake
     VERSION ${${PROJECT_NAME_UC}_VERSION}
@@ -369,5 +381,5 @@ INSTALL(FILES
   DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}")
 
 # Install the export set for use with the install-tree
-INSTALL(EXPORT ${PROJECT_NAME}TargetGroup DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}" 
+INSTALL(EXPORT ${PROJECT_NAME}TargetGroup DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}"
   FILE ${PROJECT_NAME}Targets.cmake)
diff --git a/CTestTestfileInstall.cmake.in b/CTestTestfileInstall.cmake.in
new file mode 100644 (file)
index 0000000..2b2e1a3
--- /dev/null
@@ -0,0 +1,29 @@
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+SET(MED_INT_IS_LONG @MED_INT_IS_LONG@)
+SET(PYTHON_TEST_DRIVER "$ENV{KERNEL_ROOT_DIR}/bin/salome/appliskel/python_test_driver.py")
+SET(COMPONENT_NAME SMESH)
+SET(TIMEOUT        300)
+
+# Add all test subdirs
+SUBDIRS(examples other)
diff --git a/README b/README
index 74932ecbadce56251a3fb5536ca5225cc8a9fab9..8fbee1e84e91e99bed5520e380f6d36079f32308 100644 (file)
--- a/README
+++ b/README
@@ -20,7 +20,7 @@ SALOME Mesh module implements the functionalities for:
 
 For more information please visit the SALOME platform web site:
 
-  <http://www.salome-platform.org/>
+  <https://www.salome-platform.org/>
 
 =======
 License
@@ -29,10 +29,6 @@ License
 SALOME platform is distributed under the GNU Lesser General Public License.
 See COPYING file for more details.
 
-Also, additional information can be found at SALOME platform web site:
-
-  <http://www.salome-platform.org/downloads/license/>
-
 ============
 Installation
 ============
@@ -49,11 +45,7 @@ site:
 
 * Check Release Notes and Software Requirements of the latest SALOME release at
 
-  <http://www.salome-platform.org/downloads/current-version/>
-
-* Pre-requisites page at SALOME web site:
-
-  <http://www.salome-platform.org/downloads/license/>
+  <https://www.salome-platform.org/?page_id=15/>
 
 Note: SALOME Mesh module needs SALOME KERNEL, SALOME GUI and SALOME Geometry as
 pre-requisites.
index e1799e16de06d1351f3a4d282a816a47208b0d50..d58522b4d17a4489e60c92349022f0819d142e67 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index fba20e0cba0b86dcfbe5257c408232309dcba113..a1239a29acc4f48a1fe195ad7febd1e84edbcdb5 100644 (file)
@@ -5,7 +5,7 @@
 #
 
 ###############################################################
-# Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 #
 # Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -58,10 +58,11 @@ SET(SALOME_SMESH_BUILD_TESTS @SALOME_BUILD_TESTS@)
 SET(SALOME_SMESH_BUILD_GUI @SALOME_BUILD_GUI@)
 SET(SALOME_SMESH_USE_CGNS  @SALOME_SMESH_USE_CGNS@)
 SET(SALOME_SMESH_USE_TBB   @SALOME_SMESH_USE_TBB@)
-SET(SALOME_SMESH_ENABLE_MEFISTO   @SALOME_SMESH_ENABLE_MEFISTO@)
-IF(NOT WIN32)
-  LIST(APPEND SMESH_DEFINITIONS "-DENABLE_MEFISTO")
-ENDIF(NOT WIN32)
+SET(SALOME_SMESH_DISABLE_MG_ADAPT @SALOME_SMESH_DISABLE_MG_ADAPT@)
+SET(SALOME_SMESH_DISABLE_HOMARD_ADAPT @SALOME_SMESH_DISABLE_HOMARD_ADAPT@)
+IF(SALOME_SMESH_DISABLE_MG_ADAPT)
+  LIST(APPEND SMESH_DEFINITIONS "-DDISABLE_MG_ADAPT")
+ENDIF()
 
 # Level 1 prerequisites:
 SET_AND_CHECK(GEOM_ROOT_DIR_EXP "@PACKAGE_GEOM_ROOT_DIR@")
@@ -123,6 +124,7 @@ SET(SALOME_INSTALL_PYTHON_SHARED "@SALOME_INSTALL_PYTHON_SHARED@")
 SET(SALOME_INSTALL_RES "@SALOME_INSTALL_RES@")
 SET(SALOME_INSTALL_DOC "@SALOME_INSTALL_DOC@")
 SET(SALOME_INSTALL_AMCONFIG_LOCAL "@SALOME_INSTALL_AMCONFIG_LOCAL@")
+SET(SALOME_USE_64BIT_IDS  @SALOME_USE_64BIT_IDS@)
 
 # Include GEOM targets if they were not already loaded:
 IF(NOT (TARGET GEOMbasic))
@@ -139,9 +141,6 @@ SET(SMESH_MeshDriverMED MeshDriverMED)
 SET(SMESH_MeshDriverSTL MeshDriverSTL)
 SET(SMESH_MeshDriverUNV MeshDriverUNV)
 SET(SMESH_MEDWrapper MEDWrapper)
-IF(SALOME_SMESH_ENABLE_MEFISTO)
-  SET(SMESH_MEFISTO2D MEFISTO2D)
-ENDIF(SALOME_SMESH_ENABLE_MEFISTO)
 SET(SMESH_SMESHObject SMESHObject)
 SET(SMESH_PluginUtils PluginUtils)
 SET(SMESH_SMDS SMDS)
index 308a7458e10af6d3521fe4f16f3a9df0073df49d..9b4dcbe0d927a8e3d44d832a4bf43dd202b434ae 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 #
 # Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 87f60fdafd22f1fc4fcaa0e144b7a82b7f26620f..91fdf33384da0136599b49483c7f4b911478655b 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index d2bbe3fb81ebfa5f5a5870b5a9968c3bcfd1d8f1..6c57206f978a10769eaccf602f419168bfac83b4 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 #
 # Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index cfd77a6f3d4153127cce5728e0514704d81a719a..7382ea2aee80f7be58119a1fd92df25e8f5811ab 100644 (file)
@@ -1,4 +1,4 @@
-dnl Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+dnl Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 dnl
 dnl Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 dnl CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 0d8147f688ca5a7f0ff33acdfe77a7ac6cd44b0e..b78babe07b67364bfce93ee241fdccaf50b28225 100644 (file)
@@ -1,4 +1,4 @@
-dnl Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+dnl Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 dnl
 dnl Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 dnl CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 76f020408b6b51f25c77b25ac84f8768e46c191d..8c65e1d9f8a67f0e4f871fe163c2fadf7668f2af 100644 (file)
@@ -1,4 +1,4 @@
-dnl Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+dnl Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 dnl
 dnl Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 dnl CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index ffe1e784b1daeb0bf419b4245a9b3390727aed5e..4d7126967c65ce5c634d1d5646ea741c8281d4fd 100644 (file)
@@ -1,4 +1,4 @@
-dnl Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+dnl Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 dnl
 dnl Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 dnl CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index b55c738442517ff2d9b8332d2d1fec748cd69e69..d1a0bd2cdcb26f9c4c86646eedae99697ddf5e51 100644 (file)
@@ -1,4 +1,4 @@
-dnl Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+dnl Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 dnl
 dnl Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 dnl CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 515cde74fb3004af23d5e9531e576497185931c6..27727aaf3d190ddeea9b589a742fc2ac5e3f1337 100644 (file)
@@ -1,4 +1,4 @@
-dnl Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+dnl Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 dnl
 dnl Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 dnl CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index f96f285aaa1143b7528dc2959ed94a32e319088a..d6632181e398bbabe71d677a6ea7ec01a9a60076 100644 (file)
@@ -1,4 +1,4 @@
-dnl Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+dnl Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 dnl
 dnl Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 dnl CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 38ec5714651105578c55ad48703992a72873640e..ac68cc044ea96bd69092e98db64520d7e93c2d85 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -25,6 +25,7 @@ SALOME_CONFIGURE_FILE(VERSION.in VERSION INSTALL ${SALOME_INSTALL_BINS})
 SET(_bin_SCRIPTS
   smesh_setenv.py
   smesh_test.py
+  smesh_wget.py
 )
 
 # --- rules ---
index 587f19c1f473bdb5efb4c4f5fb2672e754315e13..73c7690172359d14031a99600436c67cec5c2f8f 100644 (file)
@@ -1,3 +1,4 @@
 [SALOME SMESH] : @SALOMESMESH_VERSION@
 [DEVELOPMENT]  : @SALOMESMESH_VERSION_DEV@
 [DESCRIPTION]  : SALOME Mesh module
+[SHA1]         : @SALOMESMESH_GIT_SHA1@
index d4e90f20a64a438936d859b3a876ad6cc70ceeda..06ef92f575e61fd14c3739851b45393e4ebafff3 100644 (file)
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-# Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index ce0a67d9a0a1e3aa7a9a59ba1d59a8e04c96905f..a0123d3d9fec8fdf622763cd1e5ee11162973c85 100644 (file)
@@ -1,5 +1,5 @@
 #  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2018-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2018-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -55,7 +55,6 @@ class TestMesh(unittest.TestCase):
         import SMESH
         from salome.smesh import smeshBuilder
         smesh = smeshBuilder.New()
-        lib = 'StdMeshersEngine'
         self.processGuiEvents()
 
         # ---- create hypotheses 
@@ -63,7 +62,7 @@ class TestMesh(unittest.TestCase):
 
         # **** create local length 
         print('...... Local Length')
-        local_length = smesh.CreateHypothesis('LocalLength', lib)
+        local_length = smesh.CreateHypothesis('LocalLength')
         self.assertIsNotNone(local_length)
         local_length.SetLength(100)
         self.assertEqual(local_length.GetName(), 'LocalLength')
@@ -72,7 +71,7 @@ class TestMesh(unittest.TestCase):
 
         # **** create number of segments
         print('...... Number Of Segments')
-        nb_segments= smesh.CreateHypothesis('NumberOfSegments', lib)
+        nb_segments = smesh.CreateHypothesis('NumberOfSegments')
         self.assertIsNotNone(nb_segments)
         nb_segments.SetNumberOfSegments(7)
         self.assertEqual(nb_segments.GetName(), 'NumberOfSegments')
@@ -81,7 +80,7 @@ class TestMesh(unittest.TestCase):
 
         # **** create max element area
         print('...... Max Element Area')
-        max_area = smesh.CreateHypothesis('MaxElementArea', lib)
+        max_area = smesh.CreateHypothesis('MaxElementArea')
         max_area.SetMaxElementArea(2500)
         self.assertEqual(max_area.GetName(), 'MaxElementArea')
         self.assertEqual(max_area.GetMaxElementArea(), 2500)
@@ -92,23 +91,23 @@ class TestMesh(unittest.TestCase):
 
         # **** create regular 1d
         print('...... Regular 1D')
-        regular = smesh.CreateHypothesis('Regular_1D', lib)
-        listHyp = regular.GetCompatibleHypothesis()
+        regular = smesh.CreateHypothesis('Regular_1D')
+        self.assertTrue(len(regular.GetCompatibleHypothesis()) > 0)
         self.assertEqual(regular.GetName(), 'Regular_1D')
         self.processGuiEvents()
 
-        # **** create mefisto 2d
-        print('...... Mefisto 2D')
-        mefisto = smesh.CreateHypothesis( 'MEFISTO_2D', lib )
-        listHyp = mefisto.GetCompatibleHypothesis()
-        self.assertEqual(mefisto.GetName(), 'MEFISTO_2D')
+        # **** create quadrangle mapping
+        print('...... Quadrangle_2D')
+        quad = smesh.CreateHypothesis('Quadrangle_2D')
+        self.assertTrue(len(quad.GetCompatibleHypothesis()) > 0)
+        self.assertEqual(quad.GetName(), 'Quadrangle_2D')
         self.processGuiEvents()
 
         # ---- create mesh on box
         print('... Create mesh on box')
         mesh = smesh.CreateMesh(box)
         self.assertEqual(mesh.AddHypothesis(box, regular)[0], SMESH.HYP_OK)
-        self.assertEqual(mesh.AddHypothesis(box, mefisto)[0], SMESH.HYP_OK)
+        self.assertEqual(mesh.AddHypothesis(box, quad)[0], SMESH.HYP_OK)
         self.assertEqual(mesh.AddHypothesis(box, nb_segments)[0], SMESH.HYP_OK)
         self.assertEqual(mesh.AddHypothesis(box, max_area)[0], SMESH.HYP_OK)
         self.processGuiEvents()
diff --git a/bin/smesh_wget.py b/bin/smesh_wget.py
new file mode 100644 (file)
index 0000000..b51b908
--- /dev/null
@@ -0,0 +1,31 @@
+#!/usr/bin/env python3
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+import os
+import os.path as osp
+import sys
+import subprocess as sp
+
+p = sp.Popen(["wget"]+sys.argv[1:-1],stdout=sp.PIPE,stderr=sp.PIPE)
+stdout, stderr = p.communicate()
+ret = p.returncode
+with open(sys.argv[-1],"wb") as f:
+    f.write( stdout + stderr )
+sys.exit( ret )
index 11b9d86d9c66ecc2a8c1d20a27c640f72ee135fa..d61526a9ebf3ffdcab67aefc9083af53c30098fe 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 #
 # Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -20,4 +20,8 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-ADD_SUBDIRECTORY(salome)
+ADD_SUBDIRECTORY(examples)
+IF(SALOME_BUILD_DOC)
+  ADD_SUBDIRECTORY(tui)
+  ADD_SUBDIRECTORY(gui)
+ENDIF()
diff --git a/doc/examples/0README b/doc/examples/0README
new file mode 100644 (file)
index 0000000..39e339f
--- /dev/null
@@ -0,0 +1,7 @@
+This folder contains example Python scripts which are used in the documentation of Mesh module,
+i.e. those mentioned in *.rst files in {root_src}/doc/gui folder.
+
+These tests are exported into the ${SMESH_ROOT_DIR}/share/doc/salome/examples folder and can be
+executed with the `salome test` command, as a part of whole testing procedure.
+
+Other Python scripts aimed for testing purposes must be put into the ${root_src}/test folder!
diff --git a/doc/examples/CMakeLists.txt b/doc/examples/CMakeLists.txt
new file mode 100644 (file)
index 0000000..1c69d3a
--- /dev/null
@@ -0,0 +1,57 @@
+# Copyright (C) 2012-2024  CEA, EDF, 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(tests.set)
+
+SET(TEST_INSTALL_DIRECTORY ${SMESH_TEST_DIR}/examples)
+SET(EXAMPLES_INSTALL_DIRECTORY ${SALOME_INSTALL_DOC}/examples/SMESH)
+
+IF(SALOME_BUILD_TESTS)
+
+  # Install 'salome test' staff
+  # ---------------------------
+  
+  SALOME_CONFIGURE_FILE(CTestTestfileInstall.cmake
+                        ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CTestTestfile.cmake
+                        INSTALL ${TEST_INSTALL_DIRECTORY})
+  INSTALL(FILES tests.set DESTINATION ${TEST_INSTALL_DIRECTORY})
+
+  # Add tests for 'make test'
+  # -------------------------
+  
+  SALOME_GENERATE_TESTS_ENVIRONMENT(tests_env)
+
+  FOREACH(test ${GOOD_TESTS})
+    GET_FILENAME_COMPONENT(testname ${test} NAME_WE)
+    SET(testname "EXAMPLES_${testname}")
+    ADD_TEST(NAME ${testname}
+             COMMAND ${PYTHON_EXECUTABLE} -B ${CMAKE_SOURCE_DIR}/test/test_helper.py ${CMAKE_CURRENT_SOURCE_DIR}/${test})
+    SET_TESTS_PROPERTIES(${testname} PROPERTIES ENVIRONMENT "${tests_env}" LABELS "examples")
+  ENDFOREACH()
+
+ENDIF()
+
+# Install example scripts and data
+# --------------------------------
+
+IF(SALOME_BUILD_TESTS OR SALOME_BUILD_DOC)
+  INSTALL(FILES ${GOOD_TESTS} ${BAD_TESTS} DESTINATION ${EXAMPLES_INSTALL_DIRECTORY})
+  INSTALL(FILES mechanic.py DESTINATION ${SALOME_INSTALL_BINS})
+  INSTALL(DIRECTORY data DESTINATION ${EXAMPLES_INSTALL_DIRECTORY})
+ENDIF()
diff --git a/doc/examples/CTestTestfileInstall.cmake b/doc/examples/CTestTestfileInstall.cmake
new file mode 100644 (file)
index 0000000..0414df3
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+SET(SCRIPTS_DIR "../../../../share/doc/salome/examples/SMESH")
+
+INCLUDE(tests.set)
+
+SET(_all_tests ${GOOD_TESTS} ${BAD_TESTS})
+LIST(SORT _all_tests)
+FOREACH(tfile ${_all_tests})
+  GET_FILENAME_COMPONENT(BASE_NAME ${tfile} NAME_WE)
+  SET(TEST_NAME SMESH_${BASE_NAME})
+  ADD_TEST(${TEST_NAME} python ${PYTHON_TEST_DRIVER} ${TIMEOUT} ${SCRIPTS_DIR}/${tfile})
+  SET_TESTS_PROPERTIES(${TEST_NAME} PROPERTIES LABELS "${COMPONENT_NAME};${COMPONENT_NAME}_examples")
+ENDFOREACH()
diff --git a/doc/examples/MGAdaptTests_without_session.py b/doc/examples/MGAdaptTests_without_session.py
new file mode 100644 (file)
index 0000000..dac79ea
--- /dev/null
@@ -0,0 +1,482 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""Tests des adaptations par MGAdapt en standalone
+
+Copyright 2021 EDF
+Gérald NICOLAS
++33.1.78.19.43.52
+"""
+
+__revision__ = "V04.04"
+
+#========================= Les imports - Début ===================================
+
+import inspect
+import sys
+import os
+import tempfile
+import shutil
+import salome
+
+salome.standalone()
+salome.salome_init_without_session()
+
+import SMESH
+from salome.smesh import smeshBuilder
+smesh = smeshBuilder.New()
+
+#========================== Les imports - Fin ====================================
+
+#========================= Paramétrage - Début ===================================
+# 1. REPDATA = répertoire du cas
+REPDATA = os.path.abspath(os.path.join(os.path.dirname(inspect.getfile(lambda: None)), 'data'))
+#
+# 2. Repérage des données
+D_DATA = dict()
+D_DATA["01"] = "01" # 2D plan ; carte locale
+D_DATA["02"] = "02" # 2D plan ; carte en arrière-plan
+D_DATA["03"] = "01" # 2D plan ; taille constante
+D_DATA["04"] = "04" # 3D ; carte locale et dernier pas de temps
+D_DATA["05"] = "04" # 3D ; carte locale et pas de temps n°1
+D_DATA["06"] = "06" # 2D non plan; carte locale
+D_DATA["07"] = "07" # 2D plan ; carte locale anisotrope
+D_DATA["08"] = "08" # 3D ; carte en arrière-plan anisotrope
+D_DATA["10"] = "10" # 2D plan ; carte locale et maillage initial quadratique
+D_DATA["11"] = "11" # 2D plan ; carte locale et maillage initial en quadrangles
+D_DATA["13"] = "13" # 3D ; carte locale en simple précision et dernier pas de temps
+#========================== Paramétrage - Fin ====================================
+
+class MGAdaptTest (object):
+
+  """Test de l'adaptation par MGAdapt
+
+Options facultatives
+********************
+Le(s) nom du/des tests à passer. Si aucun n'est donné, tous les cas sont passés.
+  """
+
+# A. La base
+
+  message_info = ""
+  _verbose = 0
+  _verbose_max = 0
+  affiche_aide_globale = 0
+
+# B. Les variables
+
+  l_cas = None
+  rep_test = None
+  nro_cas = None
+  cas = None
+
+#=========================== Début de la méthode =================================
+
+  def __init__ ( self, liste_option ):
+
+    """Le constructeur de la classe MGAdaptTest"""
+
+    self.l_cas = list()
+    self.repout = None
+
+    for option in liste_option :
+
+      #print (option)
+      saux = option.upper()
+      #print (saux)
+      if saux in ( "-H", "-HELP" ):
+        self.affiche_aide_globale = 1
+      elif saux == "-V" :
+        self._verbose = 1
+      elif saux == "-VMAX" :
+        self._verbose = 1
+        self._verbose_max = 1
+      else :
+        self.l_cas.append(option)
+
+    if not self.l_cas:
+      for cle in D_DATA:
+        self.l_cas.append(cle)
+    self.l_cas.sort()
+
+    if self._verbose_max:
+      print ("Liste des cas : {}".format(self.l_cas))
+
+#===========================  Fin de la méthode ==================================
+
+#=========================== Début de la méthode =================================
+
+  def __del__(self):
+    """A la suppression de l'instance de classe"""
+    if self._verbose_max:
+      print ("Suppression de l'instance de la classe.")
+
+#===========================  Fin de la méthode ==================================
+
+#=========================== Début de la méthode =================================
+
+  def _add_file_in (self, objet_adapt):
+    """Ajout du fichier med d'entrée
+
+Entrées/Sorties :
+  :objet_adapt: l'objet du module
+    """
+    if self._verbose_max:
+      print ("_add_file_in pour {}".format(self.nro_cas))
+
+    ficmed = os.path.join (REPDATA, "test_{}.med".format(D_DATA[self.nro_cas]))
+    if self._verbose_max:
+      print ("Fichier {}".format(ficmed))
+    if not os.path.isfile(ficmed):
+      erreur = 1
+      message = "Le fichier {} est inconnu.".format(ficmed)
+    else:
+      objet_adapt.setMEDFileIn(ficmed)
+      erreur = 0
+      message = ""
+
+    return erreur, message
+
+#===========================  Fin de la méthode ==================================
+
+#=========================== Début de la méthode =================================
+
+  def _add_file_out (self, objet_adapt):
+    """Ajout du fichier de sortie
+
+Entrées/Sorties :
+  :objet_adapt: l'objet du module
+    """
+    if self._verbose_max:
+      print ("_add_file_out pour {}".format(self.nro_cas))
+
+    if not self.repout:
+      self.repout = tempfile.mkdtemp()
+
+    ficmed = os.path.join (self.repout, "test_{}.adapt.tui.med".format(self.nro_cas))
+    if os.path.isfile(ficmed):
+      os.remove(ficmed)
+
+    objet_adapt.setMEDFileOut(ficmed)
+
+    if self._verbose:
+      print (". Maillage adapté dans le fichier {}".format(ficmed))
+
+    return
+
+#===========================  Fin de la méthode ==================================
+
+#=========================== Début de la méthode =================================
+
+  def  _add_file_bkg (self, objet_adapt):
+    """Ajout du fichier med de fond
+
+Entrées/Sorties :
+  :objet_adapt: l'objet du module
+    """
+    if self._verbose_max:
+      print ("_add_file_bkg pour {}".format(self.nro_cas))
+
+    ficmed = os.path.join (REPDATA, "test_{}_bg.med".format(D_DATA[self.nro_cas]))
+    if self._verbose_max:
+      print ("Fichier {}".format(ficmed))
+    if not os.path.isfile(ficmed):
+      erreur = 1
+      message = "Le fichier {} est inconnu.".format(ficmed)
+    else:
+      objet_adapt.setMEDFileBackground(ficmed)
+      erreur = 0
+      message = ""
+
+    return erreur, message
+
+#===========================  Fin de la méthode ==================================
+
+#=========================== Début de la méthode =================================
+
+  def _hypo_creation (self, maptype, option, niveau=3):
+    """Création d'une hypothèse
+
+Entrées :
+  :maptype: type de carte : "Local", "Background", "Constant"
+  :option: nom du champ si "Local" ou "Background", valeur si "Constant"
+  :niveau: niveau de verbosité
+
+Sortie :
+  :hypo: l'objet hypothèse
+    """
+    if self._verbose_max:
+      print ("_hypo_creation pour {} avec {}".format(maptype,option))
+
+    erreur = 0
+    message = ""
+
+    while not erreur :
+
+      #--- Création de l'hypothèse ---
+      hypo = smesh.CreateAdaptationHypothesis()
+
+      # Type de données
+      if ( maptype in ("Local", "Background", "Constant") ):
+        hypo.setSizeMapType(maptype)
+      else:
+        message = "Le type de carte {} est inconnu.".format(maptype)
+        erreur = 2
+        break
+
+      # Valeur
+      if ( maptype in ("Local", "Background") ):
+        hypo.setSizeMapFieldName(option)
+      else:
+        hypo.setConstantSize(option)
+
+      # Verbosité
+      self._hypo_verbose (hypo, niveau)
+
+      break
+
+    return erreur, message, hypo
+#===========================  Fin de la méthode ==================================
+
+#=========================== Début de la méthode =================================
+
+  def _hypo_verbose (self, hypo, niveau=10):
+    """Débogage des hypothèses
+
+Entrées :
+  :niveau: niveau de verbosité
+
+Entrées/Sorties :
+  :hypo: l'objet hypothèse
+    """
+
+    hypo.setVerbosityLevel(niveau)
+
+    if self._verbose_max:
+
+      hypo.setPrintLogInFile(True)
+      hypo.setKeepWorkingFiles(True)
+      hypo.setRemoveOnSuccess(False)
+
+    return
+#===========================  Fin de la méthode ==================================
+
+#=========================== Début de la méthode =================================
+
+  def _calcul (self, objet_adapt, hypo):
+    """Calcul
+
+Entrées :
+  :objet_adapt: l'objet du module
+  :hypo: l'objet hypothèse
+    """
+
+    #--- association de l'hypothese à l'objet de l'adaptation
+    objet_adapt.AddHypothesis(hypo)
+
+    #-- Calcul
+    if self._verbose_max:
+      print (hypo.getCommandToRun())
+    erreur = objet_adapt.Compute(False)
+    if erreur:
+      message = "Echec dans l'adaptation."
+    else:
+      message = ""
+
+    return erreur, message
+
+#===========================  Fin de la méthode ==================================
+
+#=========================== Début de la méthode =================================
+
+  def _test_00 (self, objet_adapt):
+    """Test générique
+
+Entrées/Sorties :
+  :objet_adapt: l'objet du module
+    """
+
+    erreur = 0
+    message = ""
+
+    while not erreur :
+
+      #--- les fichiers MED ---#
+      erreur, message = self._add_file_in (objet_adapt)
+      if erreur:
+        break
+      self._add_file_out (objet_adapt)
+      if self.nro_cas in ("02", "08"):
+        erreur, message = self._add_file_bkg (objet_adapt)
+        if erreur:
+          break
+
+      #--- Création de l'hypothèse ---
+      if self.nro_cas in ("01", "04", "05", "06", "07", "10", "11", "13"):
+        maptype = "Local"
+        if self.nro_cas in ("01", "04", "05", "06", "07", "10"):
+          option = "TAILLE"
+        elif self.nro_cas in ("11",):
+          option = "Taille de maille"
+        elif self.nro_cas in ("13",):
+          option = "Elevation"
+      elif self.nro_cas in ("02", "08"):
+        maptype = "Background"
+        option = "TAILLE"
+      elif self.nro_cas in ("03",):
+        maptype = "Constant"
+        option = 0.5
+
+      if self._verbose:
+        niveau = 3
+      elif self._verbose_max:
+        niveau = 10
+      else:
+        niveau = 0
+      erreur, message, hypo = self._hypo_creation(maptype, option, niveau)
+      if erreur:
+        break
+
+      #-- Ajout des options
+      if self.nro_cas in ("04", "06", "07", "08", "10", "11"):
+        hypo.setTimeStepRankLast()
+      elif self.nro_cas in ("05",):
+        hypo.setTimeStepRank(1,1)
+      elif self.nro_cas in ("13",):
+        hypo.setTimeStepRank(0,0)
+
+      # options facultatives
+      if self.nro_cas in ("03",):
+        hypo.setOptionValue("adaptation", "surface")
+
+      #-- Calcul
+      try :
+        erreur, message = self._calcul (objet_adapt, hypo)
+      except :
+        erreur = 1871
+        message = "Erreur dans le calcul par SMESH"
+
+      break
+
+    return erreur, message
+
+#===========================  Fin de la méthode ==================================
+
+#=========================== Début de la méthode =================================
+
+  def _traitement_cas (self ):
+    """Traitement d'un cas
+
+
+Sorties :
+  :erreur: code d'erreur
+  :message: message d'erreur
+    """
+
+    nom_fonction = __name__ + "/_traitement_cas"
+    blabla = "\nDans {} :".format(nom_fonction)
+
+    if self._verbose_max:
+      print (blabla)
+
+# 1. Préalables
+
+    erreur = 0
+    message = ""
+    if self._verbose:
+      print ("Passage du cas '{}'".format(self.nro_cas))
+
+    if ( self.nro_cas in ("01", "02", "03", "04", "05", "06", "07", "08", "10" ,"11" ,"13") ):
+      objet_adapt = smesh.Adaptation('MG_Adapt')
+      erreur, message = self._test_00 (objet_adapt)
+      del objet_adapt
+
+    else:
+      erreur = 1
+      message = "Le cas '{}' est inconnu.".format(self.nro_cas)
+
+    return erreur, message
+
+#===========================  Fin de la méthode ==================================
+
+#=========================== Début de la méthode =================================
+
+  def lancement (self):
+
+    """Lancement
+
+Sorties :
+  :erreur: code d'erreur
+  :message: message d'erreur
+    """
+
+    nom_fonction = __name__ + "/lancement"
+    blabla = "\nDans {} :".format(nom_fonction)
+
+    erreur = 0
+    message = ""
+
+    if self._verbose_max:
+      print (blabla)
+
+    for nom_cas in self.l_cas:
+      self.nro_cas = nom_cas
+      erreur_t, message_t = self._traitement_cas ()
+      if erreur_t:
+        erreur += 1
+        message += "\nErreur n° {} pour le cas {} :\n".format(erreur_t,nom_cas)
+        message += message_t
+
+    if ( erreur and self._verbose_max ):
+      print (blabla, message)
+
+    if self.repout:
+      shutil.rmtree(self.repout)
+
+    return erreur, message
+
+#===========================  Fin de la méthode ==================================
+
+#==========================  Fin de la classe ====================================
+
+#==================================================================================
+# Lancement
+#==================================================================================
+
+if __name__ == "__main__" :
+
+# 1. Options
+
+  L_OPTIONS = list()
+  #L_OPTIONS.append("-h")
+  #L_OPTIONS.append("-v")
+  #L_OPTIONS.append("-vmax")
+  L_OPTIONS.append("01")
+  L_OPTIONS.append("02")
+  L_OPTIONS.append("03")
+  L_OPTIONS.append("07")
+  L_OPTIONS.append("10")
+  L_OPTIONS.append("11")
+  L_OPTIONS.append("04")
+  L_OPTIONS.append("05")
+  L_OPTIONS.append("06")
+  L_OPTIONS.append("08")
+  L_OPTIONS.append("13")
+
+# 2. Lancement de la classe
+
+  #print ("L_OPTIONS :", L_OPTIONS)
+  MGADAPT_TEST = MGAdaptTest(L_OPTIONS)
+  if MGADAPT_TEST.affiche_aide_globale:
+    sys.stdout.write(MGADAPT_TEST.__doc__+"\n")
+  else:
+    ERREUR, MESSAGE_ERREUR = MGADAPT_TEST.lancement()
+    if ERREUR:
+      sys.stdout.write(MGADAPT_TEST.__doc__+"\n")
+      MESSAGE_ERREUR += "\n {} erreur(s)\n".format(ERREUR)
+      sys.stderr.write(MESSAGE_ERREUR)
+      #raise Exception(MESSAGE_ERREUR)
+      assert(False)
+
+  del MGADAPT_TEST
+
+  #sys.exit(0)
diff --git a/doc/examples/a3DmeshOnModified2Dmesh.py b/doc/examples/a3DmeshOnModified2Dmesh.py
new file mode 100644 (file)
index 0000000..4e830b7
--- /dev/null
@@ -0,0 +1,66 @@
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+# This script demonstrates generation of 3D mesh basing on a modified 2D mesh
+#
+# Purpose is to get a tetrahedral mesh in a sphere cut by a cube.
+# The requirement is to have a surface mesh on the cube comprised of
+# triangles of exactly the same size arranged in a grid pattern.
+#
+# To fulfill this requirement we mesh the box using Quadrangle: Mapping
+# meshing algorithm, split quadrangles into triangles and then generate
+# tetrahedrons.
+
+
+# Make the geometry
+
+Box_1    = geompy.MakeBox(-100,-100,-100, 100, 100, 100)
+Sphere_1 = geompy.MakeSphereR( 300 )
+Cut_1    = geompy.MakeCut(Sphere_1, Box_1, theName="Cut_1")
+# get a spherical face
+Sph_Face = geompy.ExtractShapes( Sphere_1, geompy.ShapeType["FACE"] )[0]
+
+# get the shape Sph_Face turned into during MakeCut()
+Sph_Face = geompy.GetInPlace(Cut_1, Sph_Face, isNewImplementation=True, theName="Sphere_1")
+
+
+# 1) Define a mesh with 1D and 2D meshers
+
+import  SMESH
+from salome.smesh import smeshBuilder
+smesh = smeshBuilder.New()
+
+Mesh_1 = smesh.Mesh(Cut_1)
+
+# "global" meshers (assigned to Cut_1) that will be used for the box
+Regular_1D = Mesh_1.Segment()
+Local_Length_1 = Regular_1D.LocalLength(20)
+Quadrangle_2D = Mesh_1.Quadrangle()
+
+# a "local" mesher (assigned to a sub-mesh on Sphere_1) to mesh the sphere
+algo_2D = Mesh_1.Triangle( smeshBuilder.NETGEN_1D2D, Sph_Face )
+algo_2D.SetMaxSize( 70. )
+algo_2D.SetFineness( smeshBuilder.Moderate )
+algo_2D.SetMinSize( 7. )
+
+# 2) Compute 2D mesh
+isDone = Mesh_1.Compute()
+if not isDone:
+  raise Exception("Error when computing Mesh")
+
+# 3) Split quadrangles into triangles
+Mesh_1.SplitQuadObject( Mesh_1, Diag13=True )
+
+# 4) Define a 3D mesher
+Mesh_1.Tetrahedron()
+
+# 5) Compute 3D mesh
+isDone = Mesh_1.Compute()
+if not isDone:
+  raise Exception("Error when computing Mesh")
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser()
diff --git a/doc/examples/cartesian_algo.py b/doc/examples/cartesian_algo.py
new file mode 100644 (file)
index 0000000..690aaff
--- /dev/null
@@ -0,0 +1,108 @@
+# Usage of Body Fitting algorithm
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a sphere
+sphere = geom_builder.MakeSphereR( 50 )
+
+# cut the sphere by a box
+box = geom_builder.MakeBoxDXDYDZ( 100, 100, 100 )
+partition = geom_builder.MakePartition([ sphere ], [ box ], theName="partition")
+
+# create a mesh and assign a "Body Fitting" algo
+mesh = smesh_builder.Mesh( partition )
+cartAlgo = mesh.BodyFitted()
+
+# define a cartesian grid using Coordinates
+coords = list(range(-100,100,10))
+cartHyp = cartAlgo.SetGrid( coords,coords,coords, 1000000)
+
+# compute the mesh
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+print("nb hexahedra",mesh.NbHexas())
+print("nb tetrahedra",mesh.NbTetras())
+print("nb polyhedra",mesh.NbPolyhedrons())
+print()
+
+# define the grid by setting constant spacing
+cartHyp = cartAlgo.SetGrid( "10","10","10", 1000000)
+
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+print("nb hexahedra",mesh.NbHexas())
+print("nb tetrahedra",mesh.NbTetras())
+print("nb polyhedra",mesh.NbPolyhedrons())
+print("nb faces",mesh.NbFaces())
+print()
+
+# activate creation of faces
+cartHyp.SetToCreateFaces( True )
+
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+print("nb hexahedra",mesh.NbHexas())
+print("nb tetrahedra",mesh.NbTetras())
+print("nb polyhedra",mesh.NbPolyhedrons())
+print("nb faces",mesh.NbFaces())
+print()
+
+# enable consideration of shared faces
+cartHyp.SetToConsiderInternalFaces( True )
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+print("nb hexahedra",mesh.NbHexas())
+print("nb tetrahedra",mesh.NbTetras())
+print("nb polyhedra",mesh.NbPolyhedrons())
+print("nb faces",mesh.NbFaces())
+print()
+
+# define the grid by setting different spacing in 2 sub-ranges of geometry
+spaceFuns = ["5","10+10*t"]
+cartAlgo.SetGrid( [spaceFuns, [0.5]], [spaceFuns, [0.5]], [spaceFuns, [0.25]], 10 )
+
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+print("nb hexahedra",mesh.NbHexas())
+print("nb tetrahedra",mesh.NbTetras())
+print("nb polyhedra",mesh.NbPolyhedrons())
+print()
+
+# Example of customization of dirtections of the grid axes
+
+# make a box with non-orthogonal edges
+xDir = geom_builder.MakeVectorDXDYDZ( 1.0, 0.1, 0.0, "xDir" )
+yDir = geom_builder.MakeVectorDXDYDZ(-0.1, 1.0, 0.0, "yDir"  )
+zDir = geom_builder.MakeVectorDXDYDZ( 0.2, 0.3, 1.0, "zDir"  )
+face = geom_builder.MakePrismVecH( xDir, yDir, 1.0 )
+box  = geom_builder.MakePrismVecH( face, zDir, 1.0, theName="box" )
+
+spc = "0.1" # spacing
+
+# default axes
+mesh = smesh_builder.Mesh( box, "custom axes")
+algo = mesh.BodyFitted()
+algo.SetGrid( spc, spc, spc, 10000 )
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+print("Default axes")
+print("   nb hex:",mesh.NbHexas())
+
+# set axes using edges of the box
+algo.SetAxesDirs( xDir, [-0.1,1,0], zDir )
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+print("Manual axes")
+print("   nb hex:",mesh.NbHexas())
+
+# set optimal orthogonal axes
+algo.SetOptimalAxesDirs( isOrthogonal=True )
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+print("Optimal orthogonal axes")
+print("   nb hex:",mesh.NbHexas())
+
+# set optimal non-orthogonal axes
+algo.SetOptimalAxesDirs( isOrthogonal=False )
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+print("Optimal non-orthogonal axes")
+print("   nb hex:",mesh.NbHexas())
diff --git a/doc/examples/create_dual_mesh.py b/doc/examples/create_dual_mesh.py
new file mode 100644 (file)
index 0000000..97d827a
--- /dev/null
@@ -0,0 +1,64 @@
+# Creating dual Mesh
+
+
+import sys
+import salome
+
+salome.salome_init()
+import salome_notebook
+notebook = salome_notebook.NoteBook()
+sys.path.insert(0, r'/home/B61570/work_in_progress/dual_mesh')
+
+###
+### GEOM component
+###
+
+import GEOM
+from salome.geom import geomBuilder
+import math
+import SALOMEDS
+
+
+# Creating a sphere
+geompy = geomBuilder.New()
+
+O = geompy.MakeVertex(0, 0, 0)
+OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
+OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
+OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
+Sphere_1 = geompy.MakeSphereR(100)
+[geomObj_1] = geompy.ExtractShapes(Sphere_1, geompy.ShapeType["FACE"], True)
+geompy.addToStudy( O, 'O' )
+geompy.addToStudy( OX, 'OX' )
+geompy.addToStudy( OY, 'OY' )
+geompy.addToStudy( OZ, 'OZ' )
+geompy.addToStudy( Sphere_1, 'Sphere_1' )
+
+import  SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+
+smesh = smeshBuilder.New()
+
+# Meshing sphere in Tetrahedron
+NETGEN_3D_Parameters_1 = smesh.CreateHypothesisByAverageLength( 'NETGEN_Parameters', 'NETGENEngine', 34.641, 0 )
+Mesh_1 = smesh.Mesh(Sphere_1,'Mesh_1')
+status = Mesh_1.AddHypothesis( Sphere_1, NETGEN_3D_Parameters_1 )
+NETGEN_1D_2D_3D = Mesh_1.Tetrahedron(algo=smeshBuilder.NETGEN_1D2D3D)
+isDone = Mesh_1.Compute()
+if not isDone:
+  raise Exception("Error when computing Mesh")
+
+# Creating Dual mesh with projection on shape
+dual_Mesh_1 = smesh.CreateDualMesh( Mesh_1, 'dual_Mesh_1', True)
+
+assert(dual_Mesh_1.NbPolyhedrons() > 0)
+assert(dual_Mesh_1.NbTetras() == 0)
+
+# Creating Dual mesh withour projection on shape
+dual_Mesh_2 = smesh.CreateDualMesh( Mesh_1, 'dual_Mesh_2', False)
+
+assert(dual_Mesh_2.NbPolyhedrons() > 0)
+assert(dual_Mesh_2.NbTetras() == 0)
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser()
diff --git a/doc/examples/creating_meshes_ex01.py b/doc/examples/creating_meshes_ex01.py
new file mode 100644 (file)
index 0000000..0a174d8
--- /dev/null
@@ -0,0 +1,33 @@
+# Construction of a Mesh
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a box
+box = geom_builder.MakeBox(0., 0., 0., 100., 200., 300.)
+idbox = geom_builder.addToStudy(box, "box")
+
+# create a mesh
+tetra = smesh_builder.Mesh(box, "MeshBox")
+
+algo1D = tetra.Segment()
+algo1D.NumberOfSegments(7)
+
+algo2D = tetra.Triangle()
+algo2D.MaxElementArea(800.)
+
+algo3D = tetra.Tetrahedron()
+algo3D.MaxElementVolume(900.)
+
+# compute the mesh
+ret = tetra.Compute()
+if not ret:
+    raise Exception("problem when computing the mesh")
+
+print("mesh computed")
diff --git a/doc/examples/creating_meshes_ex02.py b/doc/examples/creating_meshes_ex02.py
new file mode 100644 (file)
index 0000000..bb03588
--- /dev/null
@@ -0,0 +1,62 @@
+# Construction of a Sub-mesh
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a box
+box = geom_builder.MakeBoxDXDYDZ(10., 10., 10.)
+geom_builder.addToStudy(box, "Box")
+
+# select one edge of the box for definition of a local hypothesis
+p5 = geom_builder.MakeVertex(5., 0., 0.)
+EdgeX = geom_builder.GetEdgeNearPoint(box, p5)
+geom_builder.addToStudyInFather(box, EdgeX, "Edge [0,0,0 - 10,0,0]")
+
+# create a hexahedral mesh on the box
+mesh = smesh_builder.Mesh(box, "Box : hexahedral 3D mesh")
+
+# create a Regular_1D algorithm for discretization of edges
+algo1D = mesh.Segment()
+
+# define "NumberOfSegments" hypothesis to cut
+# all the edges in a fixed number of segments
+algo1D.NumberOfSegments(4)
+
+# create a quadrangle 2D algorithm for the faces
+mesh.Quadrangle()
+
+# construct a sub-mesh on the edge with a local Regular_1D algorithm
+algo_local = mesh.Segment(EdgeX)
+
+# define "Arithmetic1D" hypothesis to cut EdgeX in several segments with length arithmetically
+# increasing from 1.0 to 4.0
+algo_local.Arithmetic1D(1, 4)
+
+# define "Propagation" hypothesis that propagates algo_local and "Arithmetic1D" hypothesis
+# from EdgeX to all parallel edges
+algo_local.Propagation()
+
+# assign a hexahedral algorithm
+mesh.Hexahedron()
+
+# any sub-shape can be meshed individually --
+# compute mesh on two surfaces using different methods
+
+# get surfaces
+surfaces = geom_builder.SubShapeAll(box, geom_builder.ShapeType["FACE"])
+
+# method 1: no sub-mesh is created
+if not mesh.Compute( surfaces[0] ): raise Exception("Error when computing Mesh")
+
+# method 2: a sub-mesh is created
+submesh = mesh.GetSubMesh( surfaces[2], "submesh 2" )
+if not submesh.Compute(): raise Exception("Error when computing Mesh")
+
+# compute the whole mesh
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/creating_meshes_ex03.py b/doc/examples/creating_meshes_ex03.py
new file mode 100644 (file)
index 0000000..88b3d0b
--- /dev/null
@@ -0,0 +1,51 @@
+# Change priority of sub-meshes in Mesh
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+box = geom_builder.MakeBoxDXDYDZ(200, 200, 200)
+[Face_1, Face_2, Face_3, Face_4, Face_5, Face_6] = geom_builder.SubShapeAllSorted(box, geom_builder.ShapeType["FACE"])
+
+# create Mesh object on Box shape
+mesh = smesh_builder.Mesh(box)
+
+# assign mesh algorithms and hypotheses
+mesh.Segment().NumberOfSegments(20)
+mesh.Triangle().MaxElementArea(1200)
+mesh.Tetrahedron().MaxElementVolume(40000)
+
+# create sub-mesh and assign algorithms on Face_1
+mesh.Segment(geom=Face_1).NumberOfSegments(4)
+mesh.Triangle(geom=Face_1)
+
+# create sub-mesh and assign algorithms on Face_2
+mesh.Segment(geom=Face_2).NumberOfSegments(8)
+mesh.Triangle(geom=Face_2)
+
+# create sub-mesh and assign algorithms on Face_3
+mesh.Segment(geom=Face_3).NumberOfSegments(12)
+mesh.Triangle(geom=Face_3)
+
+# get existing sub-mesh priority order: F1 -> F2 -> F3
+[[SubMesh_F1, SubMesh_F3, SubMesh_F2]] = mesh.GetMeshOrder()
+isDone = mesh.Compute()
+if not isDone: raise Exception("Error when computing Mesh")
+print("Nb elements at initial order of sub-meshes:", mesh.NbElements())
+
+# set new sub-mesh order: F2 -> F1 -> F3
+isDone = mesh.SetMeshOrder([[SubMesh_F2, SubMesh_F1, SubMesh_F3]])
+isDone = mesh.Compute()
+if not isDone: raise Exception("Error when computing Mesh")
+print("Nb elements at new order of sub-meshes:", mesh.NbElements())
+
+# compute with other sub-mesh order: F3 -> F2 -> F1
+isDone = mesh.SetMeshOrder([[SubMesh_F3, SubMesh_F2, SubMesh_F1]])
+isDone = mesh.Compute()
+if not isDone: raise Exception("Error when computing Mesh")
+print("Nb elements at another order of sub-meshes:", mesh.NbElements())
diff --git a/doc/examples/creating_meshes_ex04.py b/doc/examples/creating_meshes_ex04.py
new file mode 100644 (file)
index 0000000..405fcd9
--- /dev/null
@@ -0,0 +1,59 @@
+# Editing of a mesh
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+def PrintMeshInfo(theMesh):
+    aMesh = theMesh.GetMesh()
+    print("Information about mesh:")
+    print("Number of nodes       : ", aMesh.NbNodes())
+    print("Number of edges       : ", aMesh.NbEdges())
+    print("Number of faces       : ", aMesh.NbFaces())
+    print("Number of volumes     : ", aMesh.NbVolumes())
+    pass
+
+# create a box
+box = geom_builder.MakeBox(0., 0., 0., 20., 20., 20.)
+geom_builder.addToStudy(box, "box")
+
+# select one edge of the box for definition of a local hypothesis
+subShapeList = geom_builder.SubShapeAll(box, geom_builder.ShapeType["EDGE"])
+edge = subShapeList[0]
+name = geom_builder.SubShapeName(edge, box)
+geom_builder.addToStudyInFather(box, edge, name)
+
+# create a mesh
+tria = smesh_builder.Mesh(box, "Mesh 2D")
+algo1D = tria.Segment()
+hyp1 = algo1D.NumberOfSegments(3)
+algo2D = tria.Triangle()
+hyp2 = algo2D.MaxElementArea(10.)
+
+# create a sub-mesh
+algo_local = tria.Segment(edge)
+hyp3 = algo_local.Arithmetic1D(1, 6)
+hyp4 = algo_local.Propagation()
+
+# compute the mesh
+if not tria.Compute(): raise Exception("Error when computing Mesh")
+PrintMeshInfo(tria)
+
+# remove a local hypothesis
+tria.RemoveHypothesis(hyp4, edge)
+
+# compute the mesh
+if not tria.Compute(): raise Exception("Error when computing Mesh")
+PrintMeshInfo(tria)
+
+# change the value of the 2D hypothesis
+hyp2.SetMaxElementArea(2.)
+
+# compute the mesh
+if not tria.Compute(): raise Exception("Error when computing Mesh")
+PrintMeshInfo(tria)
diff --git a/doc/examples/creating_meshes_ex05.py b/doc/examples/creating_meshes_ex05.py
new file mode 100644 (file)
index 0000000..4f4f6d1
--- /dev/null
@@ -0,0 +1,58 @@
+# Export of a Mesh
+
+import os
+import tempfile
+import MEDLoader
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a box
+box = geom_builder.MakeBox(0., 0., 0., 100., 200., 300.)
+idbox = geom_builder.addToStudy(box, "box")
+
+# create a mesh
+tetra = smesh_builder.Mesh(box, "MeshBox")
+tetra.Segment().NumberOfSegments(7)
+tetra.Triangle()
+tetra.Tetrahedron()
+
+# compute the mesh
+if not tetra.Compute(): raise Exception("Error when computing Mesh")
+
+# export the mesh in a MED file
+medFile = tempfile.NamedTemporaryFile(suffix=".med").name
+tetra.ExportMED( medFile, 0 )
+
+# export a group in a MED file
+face = geom_builder.SubShapeAll( box, geom_builder.ShapeType["FACE"])[0] # a box side
+group = tetra.GroupOnGeom( face, "face group" ) # group of 2D elements on the <face>
+tetra.ExportMED( medFile, meshPart=group )
+
+# ========================
+# autoDimension parameter
+# ========================
+
+face = geom_builder.MakeFaceHW( 10, 10, 1, "rectangle" )
+mesh2D = smesh_builder.Mesh( face, "mesh2D" )
+mesh2D.AutomaticHexahedralization(0)
+
+# exported mesh is in 2D space because it is a planar mesh lying
+# on XOY plane, and autoDimension=True by default
+mesh2D.ExportMED( medFile )
+medMesh = MEDLoader.ReadUMeshFromFile(medFile,mesh2D.GetName(),0)
+print("autoDimension==True, exported mesh is in %sD"%medMesh.getSpaceDimension())
+
+# exported mesh is in 3D space, same as in Mesh module,
+# thanks to autoDimension=False
+mesh2D.ExportMED( medFile, autoDimension=False )
+medMesh = MEDLoader.ReadUMeshFromFile(medFile,mesh2D.GetName(),0)
+print("autoDimension==False, exported mesh is in %sD"%medMesh.getSpaceDimension())
+
+os.remove( medFile )
diff --git a/doc/examples/creating_meshes_ex06.py b/doc/examples/creating_meshes_ex06.py
new file mode 100644 (file)
index 0000000..0d70685
--- /dev/null
@@ -0,0 +1,120 @@
+# Creating a hexahedral mesh on a cylinder.
+#
+# This example uses Partition to divide the cylinder into blocks, which is
+# a general approach. But for the case of cylinder there is a dedicated
+# command creating a blocked cylinder: geom_builder.MakeDividedCylinder()
+
+import math
+
+import salome
+salome.salome_init_without_session()
+
+import GEOM
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# Parameters
+# ----------
+
+radius =  50
+height = 200
+
+# Build a cylinder
+# ----------------
+
+base      = geom_builder.MakeVertex(0, 0, 0)
+direction = geom_builder.MakeVectorDXDYDZ(0, 0, 1)
+
+cylinder = geom_builder.MakeCylinder(base, direction, radius, height)
+
+geom_builder.addToStudy(cylinder, "cylinder")
+
+# Build blocks
+# ------------
+
+size = radius/2.0
+
+box_rot  = geom_builder.MakeBox(-size, -size, 0,  +size, +size, height)
+box_axis = geom_builder.MakeLine(base, direction)
+box      = geom_builder.MakeRotation(box_rot, box_axis, math.pi/4)
+
+hole = geom_builder.MakeCut(cylinder, box)
+
+plane_trim = 2000
+
+plane_a = geom_builder.MakePlane(base, geom_builder.MakeVectorDXDYDZ(1, 0, 0), plane_trim)
+plane_b = geom_builder.MakePlane(base, geom_builder.MakeVectorDXDYDZ(0, 1, 0), plane_trim)
+
+blocks_part = geom_builder.MakePartition([hole], [plane_a, plane_b], [], [], geom_builder.ShapeType["SOLID"])
+blocks_list = [box] + geom_builder.SubShapeAll(blocks_part, geom_builder.ShapeType["SOLID"])
+blocks_all  = geom_builder.MakeCompound(blocks_list)
+blocks      = geom_builder.MakeGlueFaces(blocks_all, 0.0001)
+
+geom_builder.addToStudy(blocks, "cylinder:blocks")
+
+# Build geometric groups
+# ----------------------
+
+group_a = geom_builder.CreateGroup(blocks, geom_builder.ShapeType["FACE"])
+geom_builder.addToStudyInFather(blocks, group_a, "baseA")
+items = geom_builder.GetShapesOnPlaneWithLocationIDs(blocks, geom_builder.ShapeType["FACE"], direction, base, GEOM.ST_ON)
+geom_builder.UnionIDs(group_a, items)
+
+base_b = geom_builder.MakeVertex(0, 0, height)
+group_b = geom_builder.CreateGroup(blocks, geom_builder.ShapeType["FACE"])
+geom_builder.addToStudyInFather(blocks, group_b, "baseB")
+items = geom_builder.GetShapesOnPlaneWithLocationIDs(blocks, geom_builder.ShapeType["FACE"], direction, base_b, GEOM.ST_ON)
+geom_builder.UnionIDs(group_b, items)
+
+group_1 = geom_builder.CreateGroup(blocks, geom_builder.ShapeType["SOLID"])
+geom_builder.addToStudyInFather(blocks, group_1, "limit")
+group_1_all = geom_builder.SubShapeAllIDs(blocks, geom_builder.ShapeType["SOLID"])
+geom_builder.UnionIDs(group_1, group_1_all)
+group_1_box = geom_builder.GetBlockNearPoint(blocks, base)
+geom_builder.DifferenceList(group_1, [group_1_box])
+
+# Mesh the blocks with hexahedral
+# -------------------------------
+
+smesh_builder.UpdateStudy()
+
+hexa = smesh_builder.Mesh(blocks)
+
+hexa_1d = hexa.Segment()
+hexa_1d.NumberOfSegments(1)
+
+vertex = geom_builder.MakeVertex(+radius, +radius, 0)
+edge = geom_builder.GetEdgeNearPoint(blocks, vertex)
+algo = hexa.Segment(edge)
+algo.NumberOfSegments(5)
+algo.Propagation()
+
+vertex = geom_builder.MakeVertex(-radius, +radius, 0)
+edge = geom_builder.GetEdgeNearPoint(blocks, vertex)
+algo = hexa.Segment(edge)
+algo.NumberOfSegments(8)
+algo.Propagation()
+
+vertex = geom_builder.MakeVertex((radius+size)/2, 0, 0)
+edge = geom_builder.GetEdgeNearPoint(blocks, vertex)
+algo = hexa.Segment(edge)
+algo.NumberOfSegments(10)
+algo.Propagation()
+
+vertex = geom_builder.MakeVertex(+radius, 0, height/2)
+edge = geom_builder.GetEdgeNearPoint(blocks, vertex)
+algo = hexa.Segment(edge)
+algo.NumberOfSegments(20)
+algo.Propagation()
+
+hexa.Quadrangle()
+hexa.Hexahedron()
+
+if not hexa.Compute(): raise Exception("Error when computing Mesh")
+
+hexa.Group(group_a)
+hexa.Group(group_b)
+hexa.Group(group_1)
diff --git a/doc/examples/creating_meshes_ex07.py b/doc/examples/creating_meshes_ex07.py
new file mode 100644 (file)
index 0000000..d0d4c8e
--- /dev/null
@@ -0,0 +1,86 @@
+# Building a compound of meshes
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+## create a bottom box
+Box_inf = geom_builder.MakeBox(0., 0., 0., 200., 200., 50.)
+
+# get a top face
+Psup1=geom_builder.MakeVertex(100., 100., 50.)
+Fsup1=geom_builder.GetFaceNearPoint(Box_inf, Psup1)
+# get a bottom face
+Pinf1=geom_builder.MakeVertex(100., 100., 0.)
+Finf1=geom_builder.GetFaceNearPoint(Box_inf, Pinf1)
+
+## create a top box
+Box_sup = geom_builder.MakeBox(100., 100., 50., 200., 200., 100.)
+
+# get a top face
+Psup2=geom_builder.MakeVertex(150., 150., 100.)
+Fsup2=geom_builder.GetFaceNearPoint(Box_sup, Psup2)
+# get a bottom face
+Pinf2=geom_builder.MakeVertex(150., 150., 50.)
+Finf2=geom_builder.GetFaceNearPoint(Box_sup, Pinf2)
+
+## Publish in the study
+geom_builder.addToStudy(Box_inf, "Box_inf")
+geom_builder.addToStudyInFather(Box_inf, Fsup1, "Fsup")
+geom_builder.addToStudyInFather(Box_inf, Finf1, "Finf")
+
+geom_builder.addToStudy(Box_sup, "Box_sup")
+geom_builder.addToStudyInFather(Box_sup, Fsup2, "Fsup")
+geom_builder.addToStudyInFather(Box_sup, Finf2, "Finf")
+
+smesh_builder.UpdateStudy()
+
+## create a bottom mesh
+Mesh_inf = smesh_builder.Mesh(Box_inf, "Mesh_inf")
+algo1D_1=Mesh_inf.Segment()
+algo1D_1.NumberOfSegments(10)
+algo2D_1=Mesh_inf.Quadrangle()
+algo3D_1=Mesh_inf.Hexahedron()
+if not Mesh_inf.Compute(): raise Exception("Error when computing Mesh")
+
+# create a group on the top face
+Gsup1=Mesh_inf.Group(Fsup1, "Sup")
+# create a group on the bottom face
+Ginf1=Mesh_inf.Group(Finf1, "Inf")
+
+## create a top mesh
+Mesh_sup = smesh_builder.Mesh(Box_sup, "Mesh_sup")
+algo1D_2=Mesh_sup.Segment()
+algo1D_2.NumberOfSegments(5)
+algo2D_2=Mesh_sup.Quadrangle()
+algo3D_2=Mesh_sup.Hexahedron()
+if not Mesh_sup.Compute(): raise Exception("Error when computing Mesh")
+
+# create a group on the top face
+Gsup2=Mesh_sup.Group(Fsup2, "Sup")
+# create a group on the bottom face
+Ginf2=Mesh_sup.Group(Finf2, "Inf")
+
+## create compounds
+# create a compound of two meshes with renaming namesake groups and
+# merging elements with the given tolerance
+Compound1 = smesh_builder.Concatenate([Mesh_inf, Mesh_sup], 0, 1, 1e-05,
+                                      name='Compound with RenamedGrps and MergeElems')
+# create a compound of two meshes with uniting namesake groups and
+# creating groups of all elements
+Compound2 = smesh_builder.Concatenate([Mesh_inf, Mesh_sup], 1, 0, 1e-05, True,
+                                      name='Compound with UniteGrps and GrpsOfAllElems')
+
+# copy Gsup1 into a separate mesh and translate it
+groupMesh = Mesh_inf.TranslateObjectMakeMesh( Gsup1, [300,0,0] )
+
+# add Ginf2 to groupMesh
+smesh_builder.Concatenate([Ginf2], False, meshToAppendTo = groupMesh )
+
+if salome.sg.hasDesktop():
+    salome.sg.updateObjBrowser()
diff --git a/doc/examples/creating_meshes_ex08.py b/doc/examples/creating_meshes_ex08.py
new file mode 100644 (file)
index 0000000..aa67143
--- /dev/null
@@ -0,0 +1,59 @@
+# Mesh Copying
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# make geometry of a box
+box = geom_builder.MakeBoxDXDYDZ(100,100,100)
+face = geom_builder.SubShapeAllSorted(box, geom_builder.ShapeType["FACE"])[0]
+
+# generate a prismatic 3D mesh
+mesh = smesh_builder.Mesh(box, "box")
+localAlgo = mesh.Triangle(face)
+mesh.Segment().NumberOfSegments( 3 )
+mesh.Quadrangle()
+mesh.Prism()
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# objects to copy
+fGroup = mesh.GroupOnGeom( face, "2D on face")
+nGroup = mesh.GroupOnGeom( face, "nodes on face", SMESH.NODE)
+subMesh = localAlgo.GetSubMesh()
+
+# make a new mesh by copying different parts of the mesh
+
+# 1. copy the whole mesh
+newMesh = smesh_builder.CopyMesh( mesh, "whole mesh copy")
+
+# 2. copy a group of 2D elements along with groups
+newMesh = smesh_builder.CopyMesh( fGroup,  "face group copy with groups",toCopyGroups=True)
+
+# 3. copy a group of nodes
+newMesh = smesh_builder.CopyMesh( nGroup, "node group copy")
+
+# 4. copy some faces
+faceIds = fGroup.GetIDs()[-10:]
+newMesh = smesh_builder.CopyMesh( mesh.GetIDSource( faceIds, SMESH.FACE ), "some faces copy")
+
+# 5. copy some nodes
+nodeIds = nGroup.GetIDs()[-10:]
+newMesh = smesh_builder.CopyMesh( mesh.GetIDSource( nodeIds, SMESH.NODE), "some nodes copy")
+
+# 6. copy a sub-mesh
+newMesh = smesh_builder.CopyMesh( subMesh, "sub-mesh copy" )
+
+
+# make a new mesh with same hypotheses on a modified geometry
+
+smallBox = geom_builder.MakeScaleAlongAxes( box, None, 1, 0.5, 0.5 )
+cutBox = geom_builder.MakeCut( box, smallBox, theName="box - smallBox" )
+
+ok, newMesh, groups, submehses, hyps, invIDs = smesh_builder.CopyMeshWithGeom( mesh, cutBox, "cutBox" )
+if not newMesh.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/creating_parallel_2D_mesh.py b/doc/examples/creating_parallel_2D_mesh.py
new file mode 100644 (file)
index 0000000..2515543
--- /dev/null
@@ -0,0 +1,112 @@
+# contains function to compute a mesh in parallel
+import salome
+
+salome.salome_init()
+import salome_notebook
+notebook = salome_notebook.NoteBook()
+
+###
+### GEOM component
+###
+
+import GEOM
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+import SALOMEDS
+
+import numpy as np
+
+geompy = geomBuilder.New()
+
+
+nbox = 2
+boxsize = 100
+offset = 0
+# Create 3D faces
+boxes = []
+# First creating all the boxes
+# for i in range(nbox):
+#     for j in range(nbox):
+#         for k in range(nbox):
+
+#             x_orig = i*(boxsize+offset)
+#             y_orig = j*(boxsize+offset)
+#             z_orig = k*(boxsize+offset)
+
+#             tmp_box = geompy.MakeBoxDXDYDZ(boxsize, boxsize, boxsize)
+
+#             if not i == j == k == 0:
+#                 box = geompy.MakeTranslation(tmp_box, x_orig,
+#                                              y_orig, z_orig)
+#             else:
+#                 box = tmp_box
+
+#             geompy.addToStudy(box, 'box_{}:{}:{}'.format(i, j, k))
+
+#             boxes.append(box)
+
+#With 6 boxes works
+#But simplify for 2 boxes to also Test possibility of rewritting the
+# input mesh from other parallel tests. In that case this test will break
+# because the input mesh will not match the exported/imported box geometry.
+for i in range(nbox):
+    for j in range(1):
+        for k in range(1):
+
+            x_orig = i*(boxsize+offset)
+            y_orig = j*(boxsize+offset)
+            z_orig = k*(boxsize+offset)
+
+            tmp_box = geompy.MakeBoxDXDYDZ(boxsize, boxsize, boxsize)
+
+            if not i == j == k == 0:
+                box = geompy.MakeTranslation(tmp_box, x_orig,
+                                             y_orig, z_orig)
+            else:
+                box = tmp_box
+
+            geompy.addToStudy(box, 'box_{}:{}:{}'.format(i, j, k))
+
+            boxes.append(box)
+
+# Create fuse of all boxes
+all_boxes = geompy.MakeCompound(boxes)
+geompy.addToStudy(all_boxes, 'Compound_1')
+
+# Removing duplicates faces and edges
+all_boxes = geompy.MakeGlueFaces(all_boxes, 1e-07)
+geompy.addToStudy(all_boxes, 'Glued_Faces_1')
+
+rubik_cube = geompy.MakeGlueEdges(all_boxes, 1e-07)
+geompy.addToStudy(rubik_cube, 'rubik_cube')
+
+
+smesh = smeshBuilder.New()
+print("Creating Parallel Mesh")
+par_mesh = smesh.ParallelMesh(rubik_cube, name="par_mesh")
+
+print("Creating hypoehtesis for netgen")
+NETGEN_2D_Parameters_1 = smesh.CreateHypothesisByAverageLength( 'NETGEN_Parameters_2D',
+                                         'NETGENEngine', 34.641, 0 )
+
+print("Adding hypothesis")
+par_mesh.Add2DGlobalHypothesis(NETGEN_2D_Parameters_1)
+
+print("Setting parallelism method")
+par_mesh.SetParallelismMethod(smeshBuilder.MULTITHREAD)
+
+print("Setting parallelism options")
+param = par_mesh.GetParallelismSettings()
+param.SetNbThreads(6)
+
+print("Starting parallel compute")
+is_done = par_mesh.Compute()
+if not is_done:
+    raise Exception("Error when computing Mesh")
+
+print("  Triangle: ", par_mesh.NbTriangles())
+print("  edge: ", par_mesh.NbEdges())
+
+assert  par_mesh.NbTetras() == 0
+assert  par_mesh.NbTriangles() > 0
+assert  par_mesh.NbEdges() > 0
diff --git a/doc/examples/creating_parallel_gmsh_mesh.py b/doc/examples/creating_parallel_gmsh_mesh.py
new file mode 100644 (file)
index 0000000..5146521
--- /dev/null
@@ -0,0 +1,89 @@
+# contains function to compute a mesh in parallel
+import salome
+
+salome.salome_init()
+import salome_notebook
+notebook = salome_notebook.NoteBook()
+
+###
+### GEOM component
+###
+
+import GEOM
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+import SALOMEDS
+
+import numpy as np
+
+geompy = geomBuilder.New()
+
+
+nbox = 2
+boxsize = 100
+offset = 0
+# Create 3D faces
+boxes = []
+# First creating all the boxes
+for i in range(nbox):
+    for j in range(nbox):
+        for k in range(nbox):
+
+            x_orig = i*(boxsize+offset)
+            y_orig = j*(boxsize+offset)
+            z_orig = k*(boxsize+offset)
+
+            tmp_box = geompy.MakeBoxDXDYDZ(boxsize, boxsize, boxsize)
+
+            if not i == j == k == 0:
+                box = geompy.MakeTranslation(tmp_box, x_orig,
+                                             y_orig, z_orig)
+            else:
+                box = tmp_box
+
+            geompy.addToStudy(box, 'box_{}:{}:{}'.format(i, j, k))
+
+            boxes.append(box)
+
+# Create fuse of all boxes
+all_boxes = geompy.MakeCompound(boxes)
+geompy.addToStudy(all_boxes, 'Compound_1')
+
+# Removing duplicates faces and edges
+all_boxes = geompy.MakeGlueFaces(all_boxes, 1e-07)
+geompy.addToStudy(all_boxes, 'Glued_Faces_1')
+
+rubik_cube = geompy.MakeGlueEdges(all_boxes, 1e-07)
+geompy.addToStudy(rubik_cube, 'rubik_cube')
+
+smesh = smeshBuilder.New()
+print("Creating Parallel Mesh")
+par_mesh = smesh.ParallelMesh(rubik_cube, name="par_mesh")
+
+print("Creating hypoehtesis for gmsh")
+GMSH_3D_Parameters_1 = smesh.CreateHypothesis( 'GMSH_Parameters',
+                                         'libGMSHEngine.so' )
+GMSH_3D_Parameters_1.SetMaxSize(10)
+GMSH_3D_Parameters_1.SetMinSize(0.141421)
+print("Adding hypothesis")
+par_mesh.AddGlobalHypothesis(GMSH_3D_Parameters_1)
+
+print("Setting parallelism method")
+par_mesh.SetParallelismMethod(smeshBuilder.MULTITHREAD)
+
+print("Setting parallelism options")
+param = par_mesh.GetParallelismSettings()
+param.SetNbThreads(6)
+
+print("Starting parallel compute")
+is_done = par_mesh.Compute()
+if not is_done:
+    raise Exception("Error when computing Mesh")
+
+print("  Tetrahedron: ",  par_mesh.NbTetras())
+print("  Triangle: ", par_mesh.NbTriangles())
+print("  edge: ", par_mesh.NbEdges())
+
+assert  par_mesh.NbTetras() > 0
+assert  par_mesh.NbTriangles() > 0
+assert  par_mesh.NbEdges() > 0
diff --git a/doc/examples/creating_parallel_mesh.py b/doc/examples/creating_parallel_mesh.py
new file mode 100644 (file)
index 0000000..1a69fbd
--- /dev/null
@@ -0,0 +1,88 @@
+# contains function to compute a mesh in parallel
+import salome
+
+salome.salome_init()
+import salome_notebook
+notebook = salome_notebook.NoteBook()
+
+###
+### GEOM component
+###
+
+import GEOM
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+import SALOMEDS
+
+import numpy as np
+
+geompy = geomBuilder.New()
+
+
+nbox = 2
+boxsize = 100
+offset = 0
+# Create 3D faces
+boxes = []
+# First creating all the boxes
+for i in range(nbox):
+    for j in range(nbox):
+        for k in range(nbox):
+
+            x_orig = i*(boxsize+offset)
+            y_orig = j*(boxsize+offset)
+            z_orig = k*(boxsize+offset)
+
+            tmp_box = geompy.MakeBoxDXDYDZ(boxsize, boxsize, boxsize)
+
+            if not i == j == k == 0:
+                box = geompy.MakeTranslation(tmp_box, x_orig,
+                                             y_orig, z_orig)
+            else:
+                box = tmp_box
+
+            geompy.addToStudy(box, 'box_{}:{}:{}'.format(i, j, k))
+
+            boxes.append(box)
+
+# Create fuse of all boxes
+all_boxes = geompy.MakeCompound(boxes)
+geompy.addToStudy(all_boxes, 'Compound_1')
+
+# Removing duplicates faces and edges
+all_boxes = geompy.MakeGlueFaces(all_boxes, 1e-07)
+geompy.addToStudy(all_boxes, 'Glued_Faces_1')
+
+rubik_cube = geompy.MakeGlueEdges(all_boxes, 1e-07)
+geompy.addToStudy(rubik_cube, 'rubik_cube')
+
+
+smesh = smeshBuilder.New()
+print("Creating Parallel Mesh")
+par_mesh = smesh.ParallelMesh(rubik_cube, name="par_mesh")
+
+print("Creating hypoehtesis for netgen")
+NETGEN_3D_Parameters_1 = smesh.CreateHypothesisByAverageLength( 'NETGEN_Parameters',
+                                         'NETGENEngine', 34.641, 0 )
+print("Adding hypothesis")
+par_mesh.AddGlobalHypothesis(NETGEN_3D_Parameters_1)
+
+print("Setting parallelism method")
+par_mesh.SetParallelismMethod(smeshBuilder.MULTITHREAD)
+
+print("Setting parallelism options")
+param = par_mesh.GetParallelismSettings()
+param.SetNbThreads(6)
+
+print("Starting parallel compute")
+is_done = par_mesh.Compute()
+if not is_done:
+    raise Exception("Error when computing Mesh")
+
+print("  Tetrahedron: ",  par_mesh.NbTetras())
+print("  Triangle: ", par_mesh.NbTriangles())
+print("  edge: ", par_mesh.NbEdges())
+
+assert  par_mesh.NbTetras() > 0
+assert  par_mesh.NbTriangles() > 0
+assert  par_mesh.NbEdges() > 0
diff --git a/doc/examples/data/test_01.med b/doc/examples/data/test_01.med
new file mode 100644 (file)
index 0000000..71664bb
Binary files /dev/null and b/doc/examples/data/test_01.med differ
diff --git a/doc/examples/data/test_02.med b/doc/examples/data/test_02.med
new file mode 100644 (file)
index 0000000..1b22c43
Binary files /dev/null and b/doc/examples/data/test_02.med differ
diff --git a/doc/examples/data/test_02_bg.med b/doc/examples/data/test_02_bg.med
new file mode 100644 (file)
index 0000000..15f1b86
Binary files /dev/null and b/doc/examples/data/test_02_bg.med differ
diff --git a/doc/examples/data/test_04.med b/doc/examples/data/test_04.med
new file mode 100644 (file)
index 0000000..81c116f
Binary files /dev/null and b/doc/examples/data/test_04.med differ
diff --git a/doc/examples/data/test_06.med b/doc/examples/data/test_06.med
new file mode 100644 (file)
index 0000000..4c5f24d
Binary files /dev/null and b/doc/examples/data/test_06.med differ
diff --git a/doc/examples/data/test_07.med b/doc/examples/data/test_07.med
new file mode 100644 (file)
index 0000000..e100452
Binary files /dev/null and b/doc/examples/data/test_07.med differ
diff --git a/doc/examples/data/test_08.med b/doc/examples/data/test_08.med
new file mode 100644 (file)
index 0000000..e23077e
Binary files /dev/null and b/doc/examples/data/test_08.med differ
diff --git a/doc/examples/data/test_08_bg.med b/doc/examples/data/test_08_bg.med
new file mode 100644 (file)
index 0000000..c28c32d
Binary files /dev/null and b/doc/examples/data/test_08_bg.med differ
diff --git a/doc/examples/data/test_10.med b/doc/examples/data/test_10.med
new file mode 100644 (file)
index 0000000..221291f
Binary files /dev/null and b/doc/examples/data/test_10.med differ
diff --git a/doc/examples/data/test_11.med b/doc/examples/data/test_11.med
new file mode 100644 (file)
index 0000000..7d8b6cf
Binary files /dev/null and b/doc/examples/data/test_11.med differ
diff --git a/doc/examples/data/test_13.med b/doc/examples/data/test_13.med
new file mode 100644 (file)
index 0000000..32a8af1
Binary files /dev/null and b/doc/examples/data/test_13.med differ
diff --git a/doc/examples/data/test_homard_adapt.med b/doc/examples/data/test_homard_adapt.med
new file mode 100644 (file)
index 0000000..1dae05c
Binary files /dev/null and b/doc/examples/data/test_homard_adapt.med differ
diff --git a/doc/examples/data/tutorial_4.00.med b/doc/examples/data/tutorial_4.00.med
new file mode 100644 (file)
index 0000000..9a70e0c
Binary files /dev/null and b/doc/examples/data/tutorial_4.00.med differ
diff --git a/doc/examples/data/tutorial_4.xao b/doc/examples/data/tutorial_4.xao
new file mode 100644 (file)
index 0000000..415904a
--- /dev/null
@@ -0,0 +1,652 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<XAO version="1.0" author="">
+  <geometry name="PIQUAGE">
+    <shape format="BREP"><![CDATA[
+CASCADE Topology V1, (c) Matra-Datavision
+Locations 7
+1
+              1               0               0 -534.522483824849 
+              0               1               0 -1069.0449676497 
+              0               0               1 -1603.56745147455 
+1
+0.807692307692308 0.40061078589092 -0.432601588441991 -1.04060827541297 
+0.0609276756475414 0.673076923076923 0.737058528179065 7.32968958609865 
+0.586447742288145 -0.62167391279445 0.519230769230769 -17.826635656644 
+2  1 -1 0
+1
+0.807692307692308 0.40061078589092 -0.432601588441991 -1.04060827541297 
+0.0609276756475414 0.673076923076923 0.737058528179065 7.32968958609865 
+0.586447742288145 -0.62167391279445 0.519230769230769 -17.826635656644 
+2  2 -1 0
+1
+              1               0               0            -430 
+              0               1               0            -300 
+              0               0               1            -150 
+2  4 -1 0
+Curve2ds 28
+1 0 0 1 0 
+2 0 0 1 0 -0 1 100
+2 1.8130356967816779e-13 -7.2683125793014326e-14 1 -1.3877787807814454e-17 1.3877787807814454e-17 1 75
+1 0 2000.0000000000005 1 0 
+1 6.2831853071795862 -0 0 1 
+1 0 -0 0 1 
+7 0 0  10 29 4  -8.8817841970012523e-16 173.95702523587832  0.15707963267948788 185.8650793221527  0.31415926537619221 199.6698320244096  0.47123889799979857 214.96320078073768  0.6283185309860766 231.25353286676108  0.78539816341501734 247.98958079097793  0.94247779586141966 264.59134380389003  1.09955742884115 280.48484713386279  1.2566370613944304 295.13640897581155  1.4137166941154078 308.08203903909123  1.8064157758141324 335.25024546226928  2.0420352253465595 346.87488770345226  2.2776546731372278 352.56634160876274  2.5132741239983503 351.53130944818258  2.7488935673506845 343.6061642318964  2.9845130231594581 329.33749985694885  3.2201324690147217 309.93021438643336  3.4557519195411501 287.05796310072765  3.6913713679680082 262.61206938958122  4.1626102660064763 214.29828441075293  4.3982297148074636 190.43039388000034  4.6338491648682307 168.71414977032691  4.8694686100250024 150.98356996849179  5.105088069791897 138.79772076755762  5.3407075095353562 133.20016832277179  5.5763269613860089 134.55077791586518  5.8119464090311581 142.50043463776819  6.0475658581603415 156.09494410646596  6.2831853071795756 173.95702523587741 
+ 3.9726563532452057 11 5.543452680040108 9 7.8996471702324484 9 10.255841660424792 11
+3 -30.523442721219304 18.279086410430914 -0.26385650108450426 -0.96456194556671326 0.96456194556671326 -0.26385650108450426 143.29456840136453 100
+7 0 0  8 219 32  2.9508920214831567 229.98284082035067  2.9390204700117688 230.53256857863784  2.926890709437874 231.04265225778227  2.9145189005250791 231.51455000382717  2.9019182831440897 231.94951794883494  2.8890993490113557 232.34860622944851  2.8760700144277247 232.71265500545277  2.8628357930170942 233.04229047833675  2.8347913758786278 233.65935592960167  2.8199442951164415 233.94059389898013  2.8048650532611217 234.18210798347167  2.7895581662204769 234.38407649754188  2.7740264510854207 234.54639038628372  2.7582713560983678 234.66865464875607  2.7422935082321303 234.75018370301808  2.7092662583164957 234.83133882518615  2.6926617667255313 234.82653648625248  2.6763151685905915 234.77877754235919  2.6602566709227431 234.69119723201209  2.6445094560967202 234.56685111293982  2.6290900531585133 234.40869177590196  2.61400786387714 234.21948653231235  2.5702167411533758 233.57254443714584  2.5421884826288745 233.02811132692233  2.5151735700878173 232.38227788036011  2.4891463419809616 231.64602752730084  2.4640684837634819 230.82807336686585  2.439894255824453 229.93518269253431  2.4165732028871969 228.97231363558325  2.3707731434476087 226.87843211451616  2.3483948099731053 225.74492668532039  2.3269028029582199 224.54853991219824  2.3062795658158763 223.29481680424814  2.286506402608385 221.98870481953111  2.267564036467788 220.63466000082826  2.2494328958027912 219.23671171164244  2.2087817006379806 215.86497308454901  2.1869126433451487 213.85967247641469  2.1664357635954183 211.79160755818597  2.1473032640530452 209.66876262197653  2.1294690934866094 207.49834668490237  2.1128884390251801 205.28697565598898  2.0975173577105473 203.04078324314517  2.0662733280425254 198.03612310805218  2.0509136336147464 195.26509435085532  2.0371448525932836 192.46006778243759  2.0248875476985284 189.62773045468791  2.0140690921070714 186.77400923321304  2.0046226264217846 183.90424029812235  1.9964866893660191 181.02327383923239  1.9805306116672494 174.32778188716003  1.9736371424292738 170.5083713651737  1.9687856415012497 166.68348337089429  1.9658653282941594 162.85800711938333  1.9647904528896527 159.03595046757209  1.9654995971505358 155.22098246035731  1.967956306980581 151.41711845019267  1.976194630327003 143.97676683253741  1.9818383868917719 140.35400568085433  1.9890651844579168 136.75110424602966  1.9979169288179677 133.16020063062496  2.0084859709861225 129.57843588891251  2.020906381449211 126.01064980655073  2.0353458088095486 122.47234457602271  2.0560523494592844 118.14651259534823  2.0602413310460723 117.30228437545412  2.0645730689186057 116.46028299432211  2.0690544086622427 115.62044395191796  2.0736924885549515 114.78285306128343  2.0784946947039726 113.9477542077596  2.0834686161824756 113.11555710820984  2.0937286464780396 111.46564888428071  2.099008241265063 110.64840097587155  2.1044747000638484 109.83457370943871  2.1101423437553963 109.02399019846644  2.1160257944653695 108.21683762808884  2.1221398714643116 107.41368057767829  2.1284994870678675 106.61547434343423  2.1459642121997349 104.52633060775325  2.1572673871876336 103.27477337557613  2.1692804394888019 102.04485217755152  2.1822676442050217 100.82400388988933  2.196484009848751 99.613034972083611  2.2121672873409612 98.426965232577288  2.2295396517760162 97.29496228767573  2.2530661394230047 96.032075893913515  2.2574343571227247 95.807339527643308  2.26192478908612 95.586512319173451  2.2665504860173615 95.369794081968465  2.2713241822900692 95.157583084013481  2.2762581386810434 94.950487967218137  2.2813641344798206 94.749331168087792  2.2933135493663666 94.310643930709517  2.3005159082309463 94.067958071205155  2.3081859834045519 93.835601366127449  2.31624589499783 93.621282327024332  2.3246195063625366 93.431221667418797  2.3332290527688944 93.270074667502286  2.3419970684619327 93.140797480754287  2.3570256267286958 92.977505578006415  2.3633507671414216 92.925391334337377  2.3697486932372449 92.890225164140077  2.3761497191995087 92.872844146631394  2.38248290874294 92.873032662573337  2.3886731681462434 92.88951699014136  2.3946372459174352 92.919959896020472  2.4037610149351485 92.986260758886914  2.40717328254562 93.015969946670012  2.4105189318400324 93.049734785444315  2.4138012680465337 93.087245898044998  2.4170238130983432 93.12823471529012  2.4201902930730714 93.172472453704344  2.4233045937395459 93.21976837167287  2.4335698651268536 93.387834405131372  2.4405153301484739 93.52190354890547  2.447222064852808 93.669688974637779  2.4537073498321162 93.829181328623065  2.45999079448407 93.998842166770402  2.4660941907547196 94.177589783796506  2.4720411868354897 94.364776369003096  2.4888093396229483 94.928117570207661  2.499293686211713 95.325067026561612  2.5093391414016679 95.744709721588066  2.518980738666095 96.182273516994826  2.5282596956496595 96.634500379349845  2.5372233816811764 97.099615183366851  2.54592478127983 97.577272211435243  2.5791628128431028 99.498819569624374  2.6022578412064719 101.0492284590804  2.6238145296209017 102.67137897150143  2.6439829638254624 104.33289594458506  2.6629547017153627 106.01650680242003  2.6809651614670678 107.71968874264442  2.6982903224505335 109.4540596321296  2.7376157922063369 113.60908478811466  2.7589358723033071 116.0296704907208  2.7792613596283093 118.48568256623662  2.798675215015106 120.96430838554126  2.8172710630102391 123.45932696174947  2.8351512834727295 125.97060583506642  2.8524234134406607 128.50352494771172  2.8860303701597818 133.64292733269724  2.9022869507126838 136.23827580047555  2.917990918820669 138.85045915196133  2.9331671869984528 141.47729378691133  2.947838086334003 144.11804840412296  2.9620216074433712 146.77311943950724  2.97572905842449 149.44365980323758  3.0013845125460814 154.65401553908197  3.0133656680733685 157.18710718332659  3.0249159517130764 159.73283232401388  3.0360348147647507 162.29342861929689  3.0467088524442736 164.8704922156206  3.0569100334303552 167.46459472455868  3.0665942487125766 170.0749926269259  3.0848303366042651 175.33075954256603  3.0933327082100099 177.96281315383499  3.1012205058196471 180.61161421475171  3.1084554318887614 183.28833288021605  3.1149465688606197 185.99845644020471  3.1205501113954832 188.74163849487115  3.1250702588935528 191.51220011301126  3.1306440803643518 196.38189766747371  3.1322713212950739 198.46056898576074  3.1330845601214334 200.55617845547167  3.1329587528806431 202.68149959155991  3.1317024858855769 204.84180016954784  3.1290559627809569 207.0354030496996  3.1246894031782286 209.25475461617097  3.1165796038356448 212.04267929175862  3.114829505464026 212.59982634783935  3.1129378334334867 213.1585859517792  3.1108963943038126 213.71895089554229  3.108696392093302 214.28086054287715  3.1063284125880894 214.84420133612983  3.1037824076514648 215.40880730305784  3.099797493492944 216.23305000267624  3.0985078018178349 216.49187167026176  3.0971775334343863 216.75091339902721  3.095805583274807 217.01016026365642  3.0943908121169916 217.26959451092645  3.0929320464245196 217.52919548974256  3.0914280781866559 217.78893958117411  3.0890833709642891 218.18192953531943  3.0882768820889464 218.31509032658147  3.0874580288305005 218.4482792713624  3.0866266388878882 218.58149297736051  3.0857825369608061 218.71472789088574  3.0849255447497073 218.84798029685967  3.084055480955803 218.98124631881541  3.0827168168241257 219.18322445941232  3.0822579498476097 219.25192954219406  3.0817955350989976 219.32063661273708  3.0813295471083197 219.38934510347607  3.0808599601881448 219.45805443378575  3.080386748433579 219.52676400998075  3.0799098857222691 219.59547322531569  3.0791859065765235 219.69898870420906  3.0789415237031053 219.73379569662498  3.0786961936695572 219.76860235658759  3.0784499130368803 219.80340860252352  3.078202678351682 219.83821435193138  3.077954486146167 219.87301952138171  3.0777053329381405 219.90782402651692  3.0721766532605015 220.67713707570317  3.0664246432960391 221.41741686207985  3.0601757214040206 222.15960732453661  3.0534110224697306 222.89962710765337  3.0461166151186361 223.63347434018965  3.0382838944100987 224.35734624693984  3.0299099741688584 225.06766828661091  3.0129562542391719 226.38686838759443  3.004681658434563 226.98290724458815  2.9961882721753987 227.55016421379625  2.9874895992499693 228.08950176181196  2.9785985983643011 228.60172154815808  2.9695276442851664 229.08756679343568  2.9602884602270616 229.54772639931221  2.9508920214831567 229.98284082035067 
+ 0 9 0.018319831392875258 7 0.038238739386516812 7 0.058928815347170885 7 0.099676523702549119 7 0.14180018139943834 7 0.19843083503506309 7 0.26636149385935876 7 0.35593390730355601 7 0.44231953468895702 7 0.46334162919646005 7 0.48417306766917673 7 0.51829816977584031 7 0.5258415232310033 7 0.53533930688121534 7 0.54197727483116187 7 0.54607409935094864 7 0.55569344397157039 7 0.57380963950471575 7 0.62656197371599442 7 0.69628114357816095 7 0.7662666329709622 7 0.83196454640748263 7 0.89783540057505784 7 0.94701610830345462 7 0.95925610590166366 7 0.96485164354498199 7 0.96771829881469151 7 0.9691960374231734 7 0.96994465232925553 7 0.98574365440354217 7 1 9
+7 0 0  8 219 32  0 62.872621651498271  0.025608676180104782 63.141000511257971  0.051217110358952232 63.442447223943084  0.07683970623683925 63.774349954739534  0.10249228660274312 64.134414281868246  0.12819219586968281 64.520644825076815  0.15395840261008029 64.931326874131045  0.17981160209112165 65.365008017306522  0.23400323394040751 66.315708123168648  0.26236193321882451 66.836702161505713  0.29087531175934861 67.381837897313275  0.31956868349749668 67.949772282304011  0.34846831369002174 68.539417626329595  0.3776015413780176 69.149914708159841  0.40699649181342662 69.780604578192779  0.46751552737981511 71.106573793158461  0.49781511292401059 71.784842006946107  0.52756066074738617 72.462751899213657  0.55673425080491701 73.137761781708974  0.58532419939477753 73.807867472228878  0.61332515627907869 74.471534722696958  0.64073981559596926 75.127686515938294  0.72046499060847879 77.052498075971585  0.77166195497981727 78.310746105210825  0.82131147885135802 79.547595411198117  0.86954316617425131 80.762895375414487  0.91648518020586234 81.958012218326772  0.96226573496194812 83.135232681736127  1.0070144125010465 84.297561359213091  1.0961917224211739 86.638354549456068  1.1404696288009097 87.813706113113355  1.1837554707782116 88.976128787012811  1.2261020704164545 90.127415939261653  1.2675578245574461 91.269417877152193  1.3081674819680609 92.403940241418866  1.3479727014627856 93.532699856790742  1.4394987812955691 96.169224051410723  1.4905750635401167 97.672855302929463  1.5403393284654281 99.172100248125915  1.5888750208558173 100.67027874564032  1.6362550382516365 102.17007338736698  1.6825442587090145 103.67351555520644  1.7278012631756516 105.18201758386451  1.8251924127932098 108.51307250793549  1.8768925817318429 110.33807943430891  1.9273139261918153 112.17439722983991  1.9765723680666252 114.02379989134928  2.0247717060430843 115.88712997046545  2.0720067183585735 117.76446565543208  2.1183650830153753 119.65526197487479  2.2240111486966172 124.06806705223131  2.2827107568580782 126.59917927028677  2.3402815313484071 129.15206702769797  2.3969530681518347 131.72558639396652  2.4529444120416359 134.31769163127984  2.5084697852693982 136.92549295073704  2.5637427009159266 139.54495698305735  2.6722593962590495 144.70226723060568  2.7252885688357615 147.22939683835287  2.7784829674560392 149.75659028782485  2.83223672318071 152.28677086828293  2.8869246894750669 154.81883861767093  2.9429019449403842 157.34521992397924  3.0005076856101698 159.84889923872731  3.0745729370990609 162.89623855139601  3.0892037167571469 163.49029830303041  3.1039855199952879 164.08199583993169  3.1189340914855106 164.67122638790696  3.1340644736820464 165.25776128593878  3.1493910308386783 165.84123939731253  3.1649274730260708 166.42115852074323  3.1963033602164557 167.56735380148243  3.212128770140724 168.13334051848253  3.2281960485888055 168.69495712580104  3.2445359970896543 169.25205061811494  3.2611773694067083 169.80416848472859  3.278146960910294 170.35054238282143  3.2954696979500393 170.89007181069601  3.3421624610045035 172.29155405585678  3.3715232832497897 173.12025302420179  3.4019164637503554 173.92202493478626  3.433934466046149 174.70228344951235  3.4680652045738789 175.45565255020227  3.5046905465617089 176.16504726331081  3.5441161183054364 176.80116924519334  3.5959840550934365 177.4368822991562  3.6055595046893809 177.54677097493766  3.6153464823265016 177.65119014923943  3.6253700167710909 177.74971456844  3.6356536746058663 177.84175396579565  3.6462192821641239 177.92654431705461  3.6570869887148727 178.00314343115247  3.682363262491561 178.15515202782183  3.6974917915862036 178.22831115267701  3.7134785350320136 178.28398714718165  3.7301407212768272 178.31696428279278  3.747308073347952 178.32322718243029  3.7648154090723742 178.3001138352069  3.7825057291453996 178.24641751212997  3.812604795438574 178.10374515329434  3.8252093256503872 178.0292684913365  3.8378940283454339 177.93865723151407  3.8505214293291696 177.83246505166636  3.8629554160449588 177.71218833552868  3.8750550173973051 177.58033423112374  3.8866661132459175 177.44050755739389  3.9043674823472232 177.2092474329645  3.9109725286394079 177.11843517414144  3.917434573266076 177.02531372063675  3.9237613154374049 176.93008910086857  3.9299607062583037 176.83292806040319  3.9360409388791866 176.73395901372805  3.9420103763344132 176.63327427265659  3.961653229640052 176.29063752158314  3.9748876196630381 176.04080914069232  3.9876193343980546 175.7833312759611  3.999889441040271 175.51963469441534  4.0117417077527264 175.25069756206835  4.0232225962414558 174.97705719263934  4.0343808658723397 174.698834045761  4.0657683438211745 173.88266717677018  4.0852999134646293 173.33249427963696  4.1039396917212114 172.77023954338557  4.1217705719326005 172.19946718833864  4.1388823318809065 171.62229686254179  4.1553726332596783 171.03941990365178  4.1713468360559922 170.45015039520101  4.2322541192875685 168.11225202376852  4.2743267615649252 166.2947244113619  4.3134831209453495 164.44104062210263  4.3500826799525552 162.57764650491779  4.3845240014704219 160.71671386315353  4.417266190346238 158.85632993135374  4.4488352752158997 156.98117562183509  4.5207405301638239 152.53109185417424  4.5599146509444584 149.96939461299755  4.5975171168862854 147.39632516294799  4.6337392661905765 144.82242686589859  4.6687835779040201 142.25211516954607  4.7028687911724072 139.68419999609713  4.7362327198354874 137.1125692908665  4.8021584794200809 131.93162171035686  4.8345708766002282 129.33366948266521  4.8664610438075888 126.73697729754508  4.8979213073472678 124.14389098117637  4.9290459541778953 121.55560479692036  4.9599317214291636 118.97253560133198  4.9906780511843394 116.39476829534921  5.0502148166702572 111.40795929112768  5.0789558809234441 109.00276321143002  5.1077094768122837 106.6059689710073  5.136570541514212 104.21714369538603  5.165629002096539 101.83695285980788  5.1949700063184325 99.467594271216029  5.2246747698073017 97.113135146411352  5.2850478905555756 92.44019703262704  5.3155647707966622 90.133733702124317  5.3466566085609566 87.849672935498035  5.3785732870992273 85.58357218547944  5.4115345118082026 83.338052439487498  5.4457388947328331 81.123059644411342  5.4813789472988796 78.955459772939165  5.5465002439769373 75.2917634253632  5.5750838327361087 73.774252052933988  5.6048047882255165 72.295694378899299  5.6360256656447216 70.855323509754371  5.6690850687114498 69.461538831266196  5.704319175365451 68.131481458246711  5.7420884529558789 66.890140288588725  5.7929608686667216 65.49006680841768  5.8032963409432732 65.218126166734862  5.8138412573966578 64.953655024142449  5.8246076680680714 64.697121339789064  5.8356078635768105 64.449057531717798  5.8468544583579964 64.210058663420114  5.858360473900313 63.980780630389944  5.8755241899847634 63.661894190080915  5.8809662764974133 63.564025795645804  5.886467163352223 63.468398493299155  5.8920283550332799 63.375080825281906  5.8976513798339569 63.284144514221794  5.9033377910126603 63.195664431205827  5.9090891679485713 63.109718563852766  5.9178877165217729 62.983696815103116  5.9208858070514374 62.941691797670373  5.9239016128241788 62.900383733049466  5.9269353613807336 62.859783629368373  5.9299872838647767 62.819902701920974  5.9330576150229257 62.78075237316714  5.9361465932047377 62.742344272732673  5.9408565418330177 62.685279873578502  5.9424636427064419 62.666069890103024  5.9440757961341326 62.647061908924421  5.9456930355269879 62.62825756709465  5.947315394555635 62.609658516776193  5.9489429071504478 62.591266425242004  5.9505756075015395 62.573082974875454  5.9530432933432236 62.546004775671243  5.9538743968456362 62.536953669187419  5.9547068450448792 62.527956764428019  5.9555406424368798 62.519014283110991  5.9563757935346091 62.510126447963053  5.9572123028680926 62.501293482719802  5.9580501749843986 62.492515612125608  5.9766009853940814 62.299709646741718  5.9950687575598636 62.138735537044397  6.0142798522312164 62.00447388422748  6.0342141573689156 61.900307054530842  6.0548482587363477 61.829163542890356  6.0761566080196596 61.793409472798118  6.0981112506587021 61.794811193176308  6.1410478087696125 61.870342941125656  6.1613955377991001 61.936443895039446  6.1817267060388801 62.030997045052715  6.2020430289650657 62.152261904014068  6.2223458896451742 62.298581970555283  6.2426364462071202 62.468387431722142  6.2629158118189876 62.660197395252105  6.2831853071795862 62.872621651498271 
+ 0 9 0.018319831392875258 7 0.038238739386516812 7 0.058928815347170885 7 0.099676523702549119 7 0.14180018139943834 7 0.19843083503506309 7 0.26636149385935876 7 0.35593390730355601 7 0.44231953468895702 7 0.46334162919646005 7 0.48417306766917673 7 0.51829816977584031 7 0.5258415232310033 7 0.53533930688121534 7 0.54197727483116187 7 0.54607409935094864 7 0.55569344397157039 7 0.57380963950471575 7 0.62656197371599442 7 0.69628114357816095 7 0.7662666329709622 7 0.83196454640748263 7 0.89783540057505784 7 0.94701610830345462 7 0.95925610590166366 7 0.96485164354498199 7 0.96771829881469151 7 0.9691960374231734 7 0.96994465232925553 7 0.98574365440354217 7 1 9
+7 0 0  9 34 5  0 2191.2528426246377  0.17453292519943275 2201.1762210298662  0.34906585038763893 2212.8777544163167  0.5235987755629381 2225.9202112443745  0.69813170099653377 2239.7618983387947  0.87266462583350091 2253.7926203012466  1.0471975511797851 2267.3825231604278  1.2217304763623602 2279.9364764746279  1.3962634015954656 2290.9409960962744  1.7016960206944729 2306.7891165097949  1.8325957145985594 2312.4851645977215  1.9634954084562128 2316.9168734110426  2.094395102383567 2319.9521273399391  2.2252947962926299 2321.5028111454512  2.3561944901685461 2321.5301002563597  2.4870941840949765 2320.0462938574979  2.6179938779914931 2317.1129928117252  2.9452431127404282 2306.4209952363253  3.1415926534943779 2296.9829264590517  3.3379421945762502 2284.8797251470387  3.534291734879595 2270.6938980966806  3.730641276361645 2255.195429854095  3.9269908168541647 2239.2696148566902  4.1233403578305357 2223.81886116229  4.3196898986859633 2209.6690171571336  4.7123889803846843 2185.3284854917574  4.9087385212395898 2175.1377964955459  5.1050880620569483 2167.6053621903993  5.3014376029494432 2163.2626182430736  5.4977871437976766 2162.4233348661414  5.69413668460286 2165.1354166022502  5.8904862254852777 2171.1757185130937  6.0868357663302142 2180.0890419187554  6.2831853071795756 2191.2528426246372 
+ 3.9726563532452048 10 5.5434526800401605 8 6.7215499251363182 8 8.488695792780554 8 10.255841660424791 10
+3 -30.523442721219361 18.279086410430939 -0.26385650108450426 -0.96456194556671326 0.96456194556671326 -0.26385650108450426 107.4709263010234 75
+1 6.2831853071795862 -0 0 1 
+1 0 -0 0 1 
+7 0 0  8 163 24  0 55.948476944696331  0.026835155340074329 56.063812121665613  0.05361590345828747 56.20285210498443  0.080350821430583308 56.364213163397686  0.107048239584543 56.546602345526388  0.13371635743674187 56.74881822147335  0.16036339261496971 56.969751060113396  0.18699776276531416 57.208382442068547  0.23980517493090478 57.714835288953999  0.26610646337594085 57.983318853192223  0.29249581371823469 58.268203640365925  0.31893027925202072 58.568280055365769  0.34536299525515102 58.882190758997758  0.37174274501572285 59.208438071385103  0.39801324866624155 59.545392454912225  0.48387191051147382 60.683300880901619  0.54013407300252481 61.487744571172897  0.5932185459183843 62.288610915231672  0.64350232331322887 63.078814680725259  0.69142457965386739 63.856848788336521  0.73748486956197756 64.625267599713752  0.78223300146445229 65.389688893067955  0.88349914284311049 67.157173010177203  0.93871311173197658 68.148984078050887  0.9920792870327626 69.130243796325558  1.0437859923152459 70.100152452005887  1.0940207470796552 71.05921569741318  1.1429717882997377 72.008810085271548  1.1908284979154296 72.951008488371002  1.2803587070748523 74.738421215054984  1.3220982111153925 75.582596557836624  1.3630671694570828 76.421274044128268  1.403321664215283 77.254806183987014  1.4429147189631137 78.08363152885785  1.4818975285022737 78.908246397777802  1.520319907241197 79.729181489365502  1.6624861640772663 82.79601566184229  1.762727088591322 85.018314280800467  1.8598092975149005 87.221826702600907  1.9544131496544903 89.412885412559518  2.0471603644894643 91.59526129548982  2.1386337471740346 93.77027794573138  2.2294251319250162 95.936573970336269  2.385620911104585 99.639920583606724  2.4507669570000155 101.1773994150352  2.5161449425325513 102.70543896155426  2.5822742460910151 104.22708240611058  2.6496530101393114 105.74214199452594  2.7187592788836263 107.24557861127408  2.790058856963141 108.72511828493634  2.88133725044537 110.49298100206708  2.8988190618257446 110.82616500279788  2.9164961305807413 111.15728773140609  2.9343902471501204 111.48626359316376  2.9525222764461709 111.8129160143814  2.9709121867460868 112.13697002259067  2.9895790785843519 112.4580448267271  3.0262695282983541 113.0725823994913  3.044244004019935 113.36628311641714  3.0625048027006403 113.65678351669685  3.0810895591406569 113.94394516564091  3.1000334748119083 114.22744458095033  3.1193694116203936 114.50676158840251  3.1391279856685155 114.78116767753772  3.1895496830449455 115.45117247409819  3.220232568671153 115.83239590690397  3.2519747053458867 116.19841945940155  3.2853029579338329 116.55038051447266  3.3206563084716891 116.88493386576953  3.3583878934006806 117.19388310780829  3.3987830520117117 117.46389392614327  3.4567093558156325 117.74786761505405  3.4717344679353825 117.81330962640286  3.4872345312610626 117.87196387897964  3.5032790666562299 117.92297467808396  3.5199296295075237 117.96514515704897  3.5372404989327579 117.99693391207373  3.5552593474762291 118.01645053335729  3.5862636353235531 118.02470934731109  3.598663198207245 118.02175759311808  3.6111900286809839 118.01223701517237  3.623809391805608 117.99588607152344  3.6364879727659214 117.97254055886806  3.6491934806724813 117.94213473836648  3.6618942523633948 117.90470246145831  3.695697024219355 117.78639795843807  3.7172958171789898 117.69125318277896  3.7390144749913965 117.57443520975067  3.7605364403893526 117.43704901627672  3.7815433084375556 117.28198464517408  3.8017039324003514 117.11398789824152  3.8206497441420213 116.93983121020472  3.853058299459041 116.61862222980979  3.8675897568755113 116.46413717149281  3.8815607937585757 116.30618027058335  3.8950177474848346 116.14549287909881  3.9080099602101876 115.98255610846513  3.9205901032205275 115.81759482886883  3.9328134109139952 115.65059677559806  3.966502567155767 115.17234712093854  3.98725712847807 114.85597386372726  4.007081927633906 114.53461953000368  4.0260635726694334 114.20995690987938  4.0442951883571094 113.88292954065996  4.0618774772443187 113.55376179148406  4.0789185138182571 113.22198853625392  4.1465518004579742 111.8562593744343  4.193799731995278 110.7858136820882  4.2377015363527324 109.69918401154806  4.2786855816744245 108.61146418297761  4.3172219309968556 107.52914471245549  4.3538506054690336 106.45028576223086  4.3891900862600011 105.36502013323553  4.5026851604515619 101.74330445073554  4.5763908700869154 99.172928088291258  4.6458997523076446 96.596177281175699  4.7120271523898953 94.039674138586747  4.7756342995696528 91.510286073042835  4.8376773829861204 88.999309075346147  4.8992126875899995 86.488370503250962  4.9951419331295694 82.588086741177349  5.028787494350901 81.222790409413008  5.0624601485405885 79.863712743424799  5.0962791557479372 78.510745961753685  5.1303592181311588 77.16434280645251  5.1648108759430444 75.825779930982534  5.1997415266961946 74.497371870201945  5.2732229168617479 71.777169165009056  5.3116003786163137 70.39683011180432  5.3508229287048241 69.033675803282605  5.3912781809741199 67.684355816844999  5.4333123047717518 66.350965989321935  5.4772433524822155 65.041413289393319  5.5233848156875895 63.769335805974436  5.6061718440778705 61.702540454998832  5.6411969171549412 60.887018159310998  5.6777834566111292 60.09890260769383  5.7165139189298468 59.337244025823502  5.7579199723131893 58.608808726318443  5.8025155567752433 57.927966017055304  5.8508364928966579 57.316240127943018  5.9166264236502899 56.673809662367312  5.9300346696986788 56.551538800473942  5.9437683080774804 56.43534993032813  5.9578520715002492 56.325689341349907  5.9723107140090441 56.223090854427511  5.9871691288929325 56.128175178224474  6.0024525699059055 56.041648406733593  6.0403621078841567 55.855288950429603  6.0641298260384566 55.761082313780157  6.0892183319301996 55.688072011872976  6.1153892752317018 55.641081383422787  6.1424169905081953 55.623293643404239  6.1700755459902812 55.636240720327741  6.1981286535336446 55.679832487268733  6.2334325658924588 55.77072503972078  6.2405463643704753 55.790864255241992  6.2476585968214842 55.81279869533271  6.2547689628042145 55.836502336174185  6.2618771491331824 55.861948825776913  6.2689828298786994 55.889111483980663  6.2760856663668685 55.91796330245441  6.2831853071795862 55.948476944696331 
+ 0 9 0.019018792544694442 7 0.03771359140072162 7 0.080513130083090079 7 0.13620373571084127 7 0.18669066289317413 7 0.32553447142552394 7 0.42569392882468893 7 0.44913196049583526 7 0.4710449359591512 7 0.50380327007174419 7 0.51487078242699613 7 0.52208600645225844 7 0.53412875327587039 7 0.54468267199311748 7 0.56395095467861356 7 0.62312231751858249 7 0.75733674355307057 7 0.83015966140350028 7 0.90800720301377802 7 0.96250659343954059 7 0.97606625983306905 7 0.99517644396296179 7 1 9
+7 0 0  8 163 24  2.9304339690808727 2223.2891945726697  2.9223214203894314 2223.5944486375092  2.91399287895109 2223.8733805583483  2.9054634548317826 2224.126701394352  2.8967473469576333 2224.3550612103631  2.8878578555030296 2224.5590491142761  2.8788073893467612 2224.7391934158632  2.8696074685962216 2224.8959619070442  2.8510890655103953 2225.161283270882  2.8417303458204382 2225.2712558667959  2.8322160203908959 2225.3594612934457  2.8225730010516576 2225.4258169477735  2.8128305455579614 2225.4704176956957  2.8030201179598127 2225.4935586471142  2.7931752729765282 2225.4957499456714  2.7607924452531267 2225.4364890337906  2.7392397841892353 2225.2911337700007  2.7187498601208482 2225.0661385634512  2.699287835139653 2224.7791219868609  2.6807486105044847 2224.4419483408724  2.6629799657500479 2224.0612802812916  2.6458011020998784 2223.6390200130836  2.6071970429049323 2222.5664148085834  2.5863523208451857 2221.8940430779148  2.5664733469434595 2221.1662453000322  2.5475217139922912 2220.3908353291285  2.5294474372089075 2219.5735251870624  2.5121951864109007 2218.7182533655473  2.4957082448915555 2217.8273633325794  2.4656271606657154 2216.0625041832545  2.4519382169774837 2215.1965834866978  2.4388480658891525 2214.306551248585  2.4263406762445872 2213.3946546954676  2.4143998908437734 2212.4628045193363  2.4030097254906289 2211.5126160177015  2.3921547425098901 2210.5454483661774  2.3534003542648865 2206.8590819255837  2.3289568785026118 2204.0395851977432  2.308215240361851 2201.1324890601381  2.2909538857398082 2198.1577892276637  2.2770002429115923 2195.131014362204  2.2662346510407803 2192.064938617661  2.2585950591984614 2188.9711065917918  2.2508445025031407 2183.6208657623661  2.2492430393431526 2181.3810207908368  2.2492523519017902 2179.1381502129902  2.2509002339961879 2176.8879304088459  2.2542752332621987 2174.6291132282295  2.2595223854371174 2172.3657067613094  2.2668382758957373 2170.109688734789  2.2787191821726429 2167.3640235774865  2.2811022141466357 2166.8442641971733  2.2836211345851747 2166.3252464128923  2.2862823961436392 2165.8069068586897  2.2890929997731249 2165.2892917682793  2.292060446161388 2164.772565105754  2.2951926871737971 2164.2570166962983  2.3015883936494594 2163.2625652665988  2.3048279834955983 2162.7837832128143  2.308227819504554 2162.3063679573247  2.3117996967119936 2161.8301799969017  2.3155561247756986 2161.355308569563  2.3195102202338673 2160.8820836608243  2.3236755987634181 2160.4110880099543  2.3346300036899046 2159.2436637713677  2.3415804879762292 2158.5634744920321  2.3490539965824668 2157.8921307356186  2.3572034060637019 2157.2240825251156  2.3661867836697188 2156.5595742627347  2.3761625565783278 2155.9050189339864  2.3872876366525952 2155.2731454134691  2.4039134621533207 2154.4838737160517  2.408279457098538 2154.2884492115777  2.4128393979079856 2154.0968667139618  2.4176188688071583 2153.9095276719595  2.4226425104161171 2153.7272824673964  2.4279339989600639 2153.5514282423769  2.4335159968864133 2153.3837084256375  2.4432525908794314 2153.1237040573233  2.4471791275298536 2153.0267806877046  2.4511791089027155 2152.9362415561213  2.4552419371619147 2152.8526611711563  2.4593569146305105 2152.7764928929278  2.4635131658490592 2152.7080709829688  2.4676995596339615 2152.6476126541115  2.47892320897824 2152.5077730754597  2.4861802160604825 2152.440473596138  2.4935656582182713 2152.3966496362214  2.5009694183721409 2152.3776163066482  2.5082736916901607 2152.3826949132158  2.5153506987771785 2152.4092207874396  2.5220553348959416 2152.4525418489807  2.5335987554260999 2152.5529776943304  2.5388080922992096 2152.6098336126433  2.5438452697177274 2152.6751608784562  2.5487220164351405 2152.7477518152  2.5534521829262657 2152.8266676103181  2.5580516991676703 2152.9112314070699  2.5625381643772132 2153.001013307538  2.5749483656629617 2153.2688725945222  2.5826480612190941 2153.4585690328422  2.5900465329800926 2153.6615467678307  2.5971659434541441 2153.8752303054584  2.6040334258264473 2154.0978118600387  2.610680922489641 2154.3282337257929  2.6171446763368231 2154.5661596515656  2.6428716659558549 2155.5666924276029  2.6610184956816911 2156.3992879884777  2.6779633450486915 2157.2795289103769  2.6938116357783333 2158.1871175401479  2.7087101916106699 2159.1110183808623  2.7228462170043644 2160.0491784600858  2.7364421216419323 2161.0081030764859  2.7798945760234259 2164.2556991985766  2.8077742485092365 2166.6337932862921  2.8335111938547288 2169.075482360945  2.8573107136679212 2171.5470589910428  2.8794184867374915 2174.0368044943543  2.900093730319905 2176.5514036641066  2.9195598671979277 2179.1109585117306  2.9478658319636173 2183.1676592076055  2.9574083425780922 2184.6030424881201  2.966545162478182 2186.0479640721196  2.9752753713021547 2187.5035203311263  2.9835874427410833 2188.9705588993002  2.9914578132204643 2190.4494329906411  2.9988496788656032 2191.9398008073799  3.0130479701868698 2195.0446755858939  3.019729203290316 2196.6498039159519  3.0257696919781334 2198.2676380632956  3.0311265929609839 2199.9066137314667  3.0356985649360286 2201.5708573490992  3.0393251218759336 2203.2598422027086  3.0417864240205672 2204.9684497126245  3.0435144276177217 2207.890504526697  3.0435112115081449 2209.0875426960802  3.0427319019555235 2210.2943607616071  3.0410405113407375 2211.5210696531799  3.0382278875434396 2212.7710216432233  3.0340095145491142 2214.0408418221386  3.0280236676937626 2215.3207782562204  3.0177841022489358 2216.9107907815319  3.0156022264149565 2217.2279011872183  3.0132685695653136 2217.5453826544663  3.0107722662211311 2217.8631956248601  3.0081015703248788 2218.1812121512703  3.0052438542029791 2218.4992128585486  3.0021855945891347 2218.8168847579768  2.9942992241905371 2219.5804894013763  2.9891141138153201 2220.0397322872723  2.9833617414400067 2220.5013226948722  2.9770558898742072 2220.9566797644015  2.9702252730416272 2221.3986226642119  2.9629165864087117 2221.8212651592271  2.9551962327636132 2222.2199802295791  2.9451218542014868 2222.685105633951  2.9430736971999827 2222.776974089365  2.9410081511027886 2222.866975965243  2.9389256207476468 2222.9551169159863  2.9368265171316859 2223.041402882197  2.9347112574114114 2223.1258400906795  2.9325802649027155 2223.208435054436  2.9304339690808727 2223.2891945726697 
+ 0 9 0.019018792544694442 7 0.03771359140072162 7 0.080513130083090079 7 0.13620373571084127 7 0.18669066289317413 7 0.32553447142552394 7 0.42569392882468893 7 0.44913196049583526 7 0.4710449359591512 7 0.50380327007174419 7 0.51487078242699613 7 0.52208600645225844 7 0.53412875327587039 7 0.54468267199311748 7 0.56395095467861356 7 0.62312231751858249 7 0.75733674355307057 7 0.83015966140350028 7 0.90800720301377802 7 0.96250659343954059 7 0.97606625983306905 7 0.99517644396296179 7 1 9
+1 6.2831853071795862 -0 0 1 
+1 0 -0 0 1 
+7 0 0  10 29 4  6.2831853071795853 325.96290154168219  6.1261056745000957 331.95063627806417  5.9690260418174557 337.65157569629838  5.8119464091446034 342.86051757580361  5.6548667764537344 347.38491875585174  5.4977871437630608 351.0568852769469  5.3407075110910229 353.74427240579382  5.1836278784228744 355.3591179629924  5.026548245739618 355.86231989451522  4.8694686130641802 355.26415654993508  4.4767695313654565 351.156104305805  4.2411500823528794 346.33989590221444  4.005530633304625 339.36235606358389  3.7699111843539868 330.64668363202361  3.5342917352463701 320.82392325811088  3.2986722861794986 310.66515732984988  3.063052837284522 300.9762063324917  2.8274333882236591 292.48553408953137  2.5918139392115793 285.75851587208206  2.1205750411731104 276.5424102831077  1.8849555921369756 274.0533224826213  1.6493361432731035 274.0385113582015  1.4137166934669949 276.64321025088429  1.1780972463020589 281.7556589320302  0.94247779542638455 288.99887574464083  0.70685834729374619 297.77475742809474  0.47123889802242047 307.35440622083843  0.23561944901923434 316.98129943710921  0 325.96290154168213 
+ 4.9802262541359505 11 6.5510225809308 9 8.9072170711231831 9 11.263411561315536 11
+3 75.625 -111.87499999999997 -0.31622776601683794 0.94868329805051388 -0.94868329805051388 -0.31622776601683794 63.737743919909803 50
+1 6.2831853071795862 -0 0 1 
+1 0 -0 0 1 
+3 75.625 -111.87499999999997 -0.31622776601683794 0.94868329805051388 -0.94868329805051388 -0.31622776601683794 31.868871959954902 25
+7 0 0  10 20 3  6.2831853071795845 320.73236697261785  5.9690260418206051 326.72010170899983  5.6548667765382561 332.13424483733252  5.3407075117575005 336.15400379151106  5.0265482451068237 338.0597138479352  4.7123889828799292 337.42558240145445  4.3982297139591537 334.27951177954674  4.0840704503061716 329.13450380414724  3.7699111843030551 322.8203583736904  3.4557519189487746 316.25903257087128  2.827433388230816 304.28356309810732  2.5132741229790554 298.86941998684779  2.1991148570887162 294.84966088831425  1.8849555931228679 292.9439510628581  1.5707963258901145 293.57808217406273  1.2566370627610013 296.72415326535702  0.94247779574652668 301.86916085518897  0.62831853080569999 308.18330644490197  0.31415926535897837 314.74463223623587  -8.8817841970012523e-16 320.73236697261785 
+ 4.9802262541359497 11 8.1218189077257428 9 11.263411561315536 11
+1 0 400 1 0 
+2 0 0 1 0 -0 1 100
+2 3.941381949525385e-14 -1.5800679520220506e-14 1 -1.3877787807814454e-17 1.3877787807814454e-17 1 75
+1 0 2400.0000000000005 1 0 
+Curves 14
+2 -66.815310478106099 -108.6306209562122 -225.44593143431831 0.2672612419124244 0.53452248382484879 0.80178372573727319 2.7755575615628907e-17 0.83205029433784372 -0.55470019622522926 -0.96362411165943151 0.14824986333222029 0.22237479499833029 100
+2 -66.815310478105971 -108.63062095621194 -225.44593143431825 0.2672612419124244 0.53452248382484879 0.80178372573727319 2.7755575615628907e-17 0.83205029433784372 -0.55470019622522926 -0.96362411165943151 0.14824986333222029 0.22237479499833029 75
+1 -66.815310478106056 -25.425591522427826 -280.91595105684121 0.2672612419124244 0.53452248382484879 0.80178372573727319 
+3 -1.8333333333333286 21.333333333333343 -30.5 0.69631062382279141 0.69631062382279141 0.17407765595569785 -0.30530408919874125 0.067845353155275859 0.94983494417386161 0.64956980246163099 -0.71452678270779402 0.25982792098465241 143.29456840136453 100
+7 0 0  8 219 32  -23.615004462056191 -64.586253346542151 17.630053216125148  -24.591316577007998 -63.932377173955153 18.205204115221107  -25.599713190110389 -63.279154835767564 18.742040882778308  -26.637808756877774 -62.625406829437154 19.240800629910925  -27.70352330071346 -61.970059134121421 19.701640689128208  -28.795062957890359 -61.312131507533536 20.124619361505815  -29.910900522531847 -60.650725782798631 20.509676663857164  -31.049755991592541 -59.985014165309813 20.856615075904752  -33.4727224077714 -58.584890179592371 21.500470392102187  -34.760848188260994 -57.849545728737503 21.790381393549694  -36.073418309765621 -57.107312140883117 22.034303361565787  -37.409094727138161 -56.357452416025446 22.23152134497483  -38.766716840715794 -55.599355138495028 22.381104851408118  -40.145264212711716 -54.832535065436559 22.481897586972316  -41.54380265090952 -54.056653755566948 22.532507455831819  -44.433908008400458 -52.45607153192897 22.530039313348343  -45.88651318027997 -51.653054814072163 22.472906989751024  -47.315217119853628 -50.86385286649795 22.363441136169023  -48.716680294645471 -50.089835045097971 22.20535180844513  -50.088392572222482 -49.332199380532273 22.002411932939395  -51.428608568554978 -48.591914062069762 21.758367702179964  -52.736347750610889 -47.869645518196336 21.476788001181475  -56.523555524544044 -45.778793222672967 20.53841050574534  -58.934428765347548 -44.448908357641635 19.776417619841908  -61.243605065255984 -43.177869708334129 18.89328812493396  -63.453735842307779 -41.967052505139236 17.904521391156905  -65.569285771021853 -40.817083771827626 16.822890803055117  -67.59571890260446 -39.727991616047973 15.658676747307293  -69.539095054441177 -38.699469620814227 14.419878761294646  -73.335340099717556 -36.73003643576169 11.760809232908359  -75.179153471797505 -35.795220095806897 10.338473142948146  -76.940703468051936 -34.92780985663471 8.8552265131790726  -78.623930736448287 -34.128496240213678 7.319759082447149  -80.23292669666364 -33.397537865885951 5.7397776344693217  -81.771789212923608 -32.734822943764527 4.122131259124032  -83.244541034911364 -32.139935562394996 2.4729090980373645  -86.551417396333619 -30.902726167152125 -1.45490195842887  -88.334338120600023 -30.314991806888184 -3.7534672348946345  -90.013501857208482 -29.847169837365989 -6.0849574282427366  -91.59787662436726 -29.496690309614159 -8.4381383365366087  -93.095663702908098 -29.260381130521189 -10.80339970419608  -94.5142624114347 -29.134590318388554 -13.172458257856116  -95.860284082216722 -29.115293608252234 -15.538142985561025  -98.674222428034312 -29.297621723867138 -20.72051931413322  -100.11274296999207 -29.54408909675573 -23.532780957671964  -101.46656474927376 -29.930199506148323 -26.322582884902623  -102.74508654711643 -30.448634523020857 -29.083330902455295  -103.95604548649624 -31.092245077272885 -31.809819915881118  -105.10576048608274 -31.854124612107746 -34.497892604215345  -106.19932639598356 -32.727668547298777 -37.144204488112834  -108.61405738321483 -34.997477092622447 -43.176834102338937  -109.89669425431714 -36.471568606616941 -46.530202666870544  -111.09941258662091 -38.115904520993034 -49.803546085667406  -112.22921239604227 -39.919598381491234 -52.995690733645134  -113.29022881146604 -41.873823879396653 -56.106143764525854  -114.28411225327771 -43.97163364542785 -59.134410514758713  -115.21003657003774 -46.207658115644811 -62.079338052989854  -116.88841913627125 -50.863404108607611 -67.695795399068601  -117.64252299515279 -53.264457834097456 -70.362101970352995  -118.32777468705343 -55.784462800114355 -72.947289018183781  -118.94118863140449 -58.430296519024068 -75.457572236717894  -119.4751913224291 -61.209928302854351 -77.893728984995249  -119.91662416563774 -64.13007234773174 -80.249633057173142  -120.24533897879971 -67.193492375986978 -82.510823401437591  -120.47793438196005 -71.175063410317193 -85.174171305641863  -120.51512781582896 -71.963552877435149 -85.689051434636923  -120.54357146063197 -72.761820174605731 -86.197552250717678  -120.56277115954255 -73.57037839484309 -86.699576856493479  -120.57215461403293 -74.389673041838691 -87.194911988011953  -120.57106830096988 -75.220072252791041 -87.683225883056053  -120.55877438971051 -76.061857021235227 -88.164066149440487  -120.51034155551059 -77.760826477130365 -89.105361221431451  -120.47443540504219 -78.617260466427865 -89.565661169830889  -120.4259204154024 -79.485786781092983 -90.017836224269573  -120.36382545279393 -80.367502577075598 -90.461699274959471  -120.28701207055921 -81.263308027700262 -90.896796227690274  -120.19416953772641 -82.173885578419089 -91.322404874958053  -120.08380986755583 -83.099679201564697 -91.737533767093893  -119.74204488806812 -85.582695006108622 -92.801731587441637  -119.4830411039308 -87.131666419601871 -93.416384694074551  -119.16920578441072 -88.719523081112811 -93.996406604816428  -118.78727786922497 -90.37221897137357 -94.544583987599765  -118.31910790530814 -92.106957548659921 -95.054491856192669  -117.74153590698012 -93.930825810857371 -95.510392548193209  -117.02588227722261 -95.84045694548918 -95.887712061903471  -115.94139513548659 -98.258829825035733 -96.21205525741  -115.73587509997697 -98.701802312475408 -96.265542439264081  -115.52023513187663 -99.150814614675156 -96.313500812421537  -115.29347022376339 -99.606623529584027 -96.35551163621551  -115.05450930869335 -100.0698351391742 -96.391031150863128  -114.80222006065306 -100.54088452800703 -96.419387632162184  -114.53540709147995 -101.02003080944375 -96.439781042050541  -113.89697939172746 -102.12096963187393 -96.465770174421237  -113.50268265681134 -102.77073194055824 -96.466709993231447  -113.071339165897 -103.44602596425462 -96.450094868374833  -112.60492451379925 -104.13646966858511 -96.412573421456074  -112.10592720655256 -104.83270287602984 -96.351797675884839  -111.57763612083242 -105.52622842663575 -96.266529958255489  -111.02407931896917 -106.20965958125801 -96.156665102706725  -110.04919182850028 -107.3425613835125 -95.93002051606571  -109.6314544562226 -107.80839618241892 -95.823707655813777  -109.20104449862075 -108.26794532917347 -95.704671464006452  -108.76243175880445 -108.71584223398216 -95.573955711589463  -108.32064827412111 -109.14733419479224 -95.433320445254566  -107.88149594227444 -109.55810196657838 -95.285299806009562  -107.45182865448493 -109.94400343453461 -95.133285615415929  -106.78563534217295 -110.52094656127485 -94.888029597261905  -106.53426602323316 -110.73338422853382 -94.793140391427926  -106.28571382240679 -110.93851656308443 -94.697124082531957  -106.03988727719808 -111.13677215533271 -94.60011129225316  -105.79666163174217 -111.32856788203877 -94.502200652661017  -105.55588010466315 -111.51430844744606 -94.403459964511939  -105.31735773016428 -111.69438428487445 -94.303928490782198  -104.52565627398808 -112.27955958403172 -93.968096938217442  -103.98080900725253 -112.66146263668837 -93.727897057977984  -103.44642318687484 -113.01754156301062 -93.484318903939453  -102.92220355660453 -113.35031293908038 -93.238289281842  -102.40748095860131 -113.66214354608523 -92.990372167073062  -101.90122808242749 -113.9552437216924 -92.740785561521562  -101.40209239364032 -114.23165584750747 -92.489426684159525  -99.978758143647767 -114.98587786789052 -91.758446831648001  -99.068723153986554 -115.42582168743675 -91.27341299332322  -98.179167898499387 -115.81931074239976 -90.784218978626498  -97.309830900912786 -116.17199397841486 -90.293137884722569  -96.459331790900208 -116.48893111105107 -89.801320172959848  -95.625188661371666 -116.77458421173019 -89.308832401633822  -94.803883575334865 -117.03279774412353 -88.814715426244987  -91.623880973755547 -117.94805949183558 -86.867951172695285  -89.31942087497292 -118.42625001667977 -85.38361123114305  -87.092402884654376 -118.74208143101264 -83.892219135938959  -84.947265783145212 -118.92906521345675 -82.410333229617763  -82.878534081829926 -119.01317209283536 -80.944007542914648  -80.871006235012359 -119.01276176276777 -79.489215949343148  -78.90051080153593 -118.93855121599893 -78.032380908332769  -74.33978883261706 -118.6016126902781 -74.595020392745269  -71.799503636435048 -118.28928510034358 -72.630999726603434  -69.31949313213687 -117.87632470959099 -70.669791580418348  -66.899966500153539 -117.37859451383137 -68.71673105296955  -64.537389301843987 -116.80797242526971 -66.772836616177585  -62.22497595800138 -116.17245002425169 -64.835207615938117  -59.953342988057585 -115.47629184341284 -62.897418890502344  -55.460738763157174 -113.96133054848849 -58.994966862957241  -53.249941453596449 -113.14542309959387 -57.038869343502355  -51.079220143957528 -112.27829126681668 -55.082565957668287  -48.948219835512589 -111.36445204193178 -53.125887138508176  -46.856189900866227 -110.40730390198951 -51.167729536636202  -44.802291578214415 -109.40928775932191 -49.206251021980414  -42.785964527148401 -108.37208593878391 -47.239078893151117  -38.949957629459334 -106.28750488622173 -43.409013218508193  -37.129265499645662 -105.2465262086139 -41.550576026165345  -35.344249738192445 -104.17459804398726 -39.685122963945702  -33.594853631234777 -103.07205963460247 -37.80965592492884  -31.882345395819051 -101.93922550327989 -35.921551743828815  -30.209611956956813 -100.77666744735943 -34.018753989183544  -28.58138587468774 -99.585439223740678 -32.099909967751785  -25.423263168000872 -97.145785079830674 -28.22396059823172  -23.901681802859208 -95.903432689062797 -26.276641701465117  -22.434370096507095 -94.63370748448375 -24.308593721399617  -21.022199589590613 -93.331502328851258 -22.30899927181715  -19.672589246809181 -91.993819557262299 -20.270539954709825  -18.399576914479599 -90.620149357297976 -18.189308399414919  -17.223594450031321 -89.212206118152778 -16.064433932323453  -15.38505388437548 -86.698050195826823 -12.279804793756284  -14.672706176275696 -85.612341679064883 -10.64850107670577  -14.03426776682177 -84.50466908702569 -8.9860780572092409  -13.478371889053747 -83.366617756463086 -7.279336394081966  -13.022065643955969 -82.192570254119389 -5.5197686056189497  -12.690809502857164 -80.979079179621237 -3.7032778955863392  -12.518428419712805 -79.723561544608188 -1.8297322857971494  -12.554590139840428 -78.097372122781081 0.57534832508789435  -12.574277190791889 -77.769972683066854 1.0585288482297728  -12.607162504200588 -77.439018111843168 1.5457499050542851  -12.654034033470761 -77.104288972116422 2.0371188653671495  -12.715750906714085 -76.765566283981784 2.5327004919089546  -12.793244213916793 -76.4226265956368 3.0325145488614904  -12.887517794106788 -76.075237054394933 3.5365334103540813  -13.050910021924343 -75.562193445003572 4.2769796752062268  -13.10590570945797 -75.40024642822415 4.5101542279908582  -13.16474140136204 -75.237280191778325 4.7442037669675683  -13.227526286767347 -75.073264959782549 4.9791262227846156  -13.294373432748506 -74.908170300942103 5.2149168547779068  -13.365399789377475 -74.741965013441302 5.4515680886541489  -13.440726194777046 -74.574617009833275 5.6890693541739967  -13.561334786639554 -74.319756607880933 6.0495098717784979  -13.603353788497149 -74.233110868901775 6.1718330658297482  -13.64655127833535 -74.146151315779406 6.2943749933862554  -13.690944459620768 -74.058873157230281 6.417133963804428  -13.736550846698318 -73.971271479900523 6.5401081073997869  -13.783388264791252 -73.883341248365909 6.6632953754469559  -13.831474850001149 -73.795077305131841 6.7866935401796757  -13.906270757132701 -73.660800243535959 6.9740184687368076  -13.932049311631317 -73.615036034853503 7.0377921412810274  -13.958167240445462 -73.569181020601278 7.1016208807245285  -13.984627093785193 -73.523234467369861 7.1655043403194103  -14.011431444428945 -73.477195632325277 7.229442158268788  -14.03858288772353 -73.431063763208911 7.2934339577267906  -14.066084041584114 -73.384838098337511 7.35747934679857  -14.108047991225591 -73.315052271449645 7.4540499308359784  -14.122248862783781 -73.291562406792821 7.4865355916789049  -14.136540504476633 -73.268048172356586 7.5190348480717635  -14.150923261109142 -73.244509467220624 7.5515476459293813  -14.165397478983484 -73.22094618982031 7.5840739300787083  -14.179963505899035 -73.197358237946858 7.6166136442588277  -14.194621691152349 -73.173745508747302 7.6491667311209497  -14.520675632760067 -72.651252416755241 8.3690246014052629  -14.87576875543564 -72.137169359893676 9.0679580480636233  -15.277856482701928 -71.608633511801074 9.7753042004634398  -15.729731449861717 -71.066466334266607 10.487451233806055  -16.233653286709874 -70.511377512940243 11.200634271358467  -16.791267428568165 -69.943919370539987 11.911027112658815  -17.403548765661803 -69.364509255883391 12.614774717509441  -18.672813916374317 -68.240150929413275 13.933622484259457  -19.304228020577511 -67.710974959049366 14.534700936103595  -19.963245076384201 -67.185214771355461 15.111360239262659  -20.648166589677871 -66.662196960033228 15.663660976316955  -21.357350209646366 -66.141310924481814 16.191648475011203  -22.089214271427409 -65.622008903229272 16.695357298369984  -22.842244726676356 -65.103802163446346 17.174816153077977  -23.615004462056191 -64.586253346542151 17.630053216125148 
+ 0 9 0.018319831392875258 7 0.038238739386516812 7 0.058928815347170885 7 0.099676523702549119 7 0.14180018139943834 7 0.19843083503506309 7 0.26636149385935876 7 0.35593390730355601 7 0.44231953468895702 7 0.46334162919646005 7 0.48417306766917673 7 0.51829816977584031 7 0.5258415232310033 7 0.53533930688121534 7 0.54197727483116187 7 0.54607409935094864 7 0.55569344397157039 7 0.57380963950471575 7 0.62656197371599442 7 0.69628114357816095 7 0.7662666329709622 7 0.83196454640748263 7 0.89783540057505784 7 0.94701610830345462 7 0.95925610590166366 7 0.96485164354498199 7 0.96771829881469151 7 0.9691960374231734 7 0.96994465232925553 7 0.98574365440354217 7 1 9
+3 -1.8333333333332575 21.333333333333485 -30.5 0.69631062382279141 0.69631062382279141 0.17407765595569785 -0.30530408919874125 0.067845353155275859 0.94983494417386161 0.64956980246163099 -0.71452678270779402 0.25982792098465241 107.4709263010234 75
+1 -66.815310478106085 -46.226848880873916 -267.0484461512105 0.2672612419124244 0.53452248382484879 0.80178372573727319 
+7 0 0  8 163 24  -22.286427363480353 -47.964820522610189 -2.2422046750504947  -22.778130683187499 -47.60735031742162 -1.9358983297576757  -23.290993013438861 -47.254362433647742 -1.6523802481845626  -23.823592900814472 -46.905446801202743 -1.3915107816026644  -24.374584741655344 -46.56023993540304 -1.1531700143822958  -24.942699130404112 -46.21842603018581 -0.93725687244852041  -25.526743367456586 -45.879736632384613 -0.74368897305905834  -26.125602126523958 -45.543948897062208 -0.57240321590416687  -27.34043790392678 -44.883489887975273 -0.27685008253728327  -27.95889676366825 -44.557124333412375 -0.1511142403882797  -28.591830793252804 -44.232218537348693 -0.046728599166720564  -29.23719108899801 -43.90930473133718 0.035875670125207648  -29.892740780182024 -43.588982520609761 0.09647099933477854  -30.556072008018482 -43.27192055518023 0.13506860227329298  -31.224622913210112 -42.958856278280805 0.15194241554494958  -33.432231272396038 -41.944745682091629 0.13782679491954042  -34.915118275699292 -41.294745052088473 0.017498843845388024  -36.333718589593019 -40.695379469128945 -0.18982976561115095  -37.687350399201719 -40.141654563374743 -0.46574166436087694  -38.981501197545256 -39.627995455734421 -0.79732689091234477  -40.225684146835803 -39.148596261721302 -1.1769751895794229  -41.431931794186454 -38.69784196197854 -1.6020465908341421  -44.150037262171004 -37.715674344117893 -2.6885635755833235  -45.623320487252613 -37.208516035260153 -3.3741695906996654  -47.03333539299885 -36.748095100884669 -4.1188352222638196  -48.382576280849321 -36.332920997072264 -4.9129771439932952  -49.674695033801861 -35.961413253702148 -5.7493075653720025  -50.913920178769366 -35.632040427683329 -6.622525777283462  -52.104746533563478 -35.343521706797276 -7.5290645638305893  -54.291661639390981 -34.869606375343999 -9.3172025070861242  -55.29325548008029 -34.677590492344514 -10.1913413390657  -56.258074286514862 -34.518461354580545 -11.08588639483107  -57.187676759809023 -34.391741105845092 -11.997833894206835  -58.083641282235284 -34.296929102844551 -12.924608420360277  -58.947529792396452 -34.233518886519697 -13.864012336512269  -59.780855383249545 -34.201018981839098 -14.814173738539862  -62.796674584111145 -34.193363330261633 -18.411711180238285  -64.785021162592699 -34.418110322729731 -21.115627912015142  -66.577538145108832 -34.862712317970605 -23.847506833404019  -68.196492182810616 -35.516705365967766 -26.581962656145109  -69.65852951997806 -36.370471994128991 -29.300490636030119  -70.974954085281084 -37.415969401192626 -31.988752495601091  -72.151700774250273 -38.64706712596174 -34.634458267096072  -73.9352629161328 -41.077404020082376 -39.09263566386781  -74.606284105389079 -42.185538037910305 -40.923783416548332  -75.205136474260968 -43.384835334047516 -42.721985517890843  -75.732022547496143 -44.679316832897058 -44.489886344927257  -76.182849099819435 -46.074337283178572 -46.226837190374617  -76.548649144941265 -47.575118128346112 -47.927347120628795  -76.814516994394154 -49.184662720320624 -49.579443614036308  -76.991451722305996 -51.302302599113155 -51.533151558014261  -77.018348047650022 -51.71031889347789 -51.90042909488664  -77.038293990515257 -52.125149131443564 -52.264555864095605  -77.050931069737331 -52.547135720375934 -52.625502119013532  -77.055834540056438 -52.976584964633574 -52.983147574915478  -77.05251137712736 -53.413758363546549 -53.337277741209924  -77.040398262529663 -53.858863909395183 -53.68758025366941  -76.998722345894933 -54.735743305300566 -54.357184807852647  -76.970359818606909 -55.166215655622622 -54.67680355279991  -76.933242077720692 -55.604183150149453 -54.992639242497312  -76.886724608961515 -56.05028150890746 -55.304656892781431  -76.830046273609568 -56.505047602802293 -55.612641003259334  -76.762327289136167 -56.968903598266529 -55.91619182623689  -76.682567209840428 -57.442141101907062 -56.214721635646953  -76.4507277086432 -58.646603328043071 -56.945060493890438  -76.284863191692494 -59.376756415727769 -57.361925021561163  -76.087571708942249 -60.127806657845227 -57.764301462815709  -75.851896882684741 -60.910204433673535 -58.154463728199929  -75.56863064003393 -61.731239950884316 -58.530316213779784  -75.226301718709934 -62.594455807350897 -58.885322543529746  -74.811064513112868 -63.499273854599281 -59.208607655748068  -74.136201278991848 -64.758455774860579 -59.578502212551243  -73.954831698384709 -65.082016364089043 -59.66698886017457  -73.760986888489569 -65.412401275057988 -59.750292545288481  -73.553024992577775 -65.75053520717087 -59.827843392630619  -73.3291906862394 -66.097015569927393 -59.898767624857562  -73.087613296010105 -66.452106924077299 -59.961894605513386  -72.82630614729527 -66.81573198735326 -60.015763643305732  -72.358580823468714 -67.429798681256358 -60.086576710412217  -72.167051244955559 -67.672515561981101 -60.109493330060886  -71.968919863770452 -67.914664411177981 -60.127026694484847  -71.764573622475837 -68.155372717928387 -60.13891295868072  -71.554449531819046 -68.393837249728179 -60.144976501324017  -71.339039254073001 -68.629320406042311 -60.145128271301317  -71.118893686376666 -68.86114657185928 -60.139364134242314  -70.520310632586501 -69.46849955627755 -60.108400426702119  -70.124573469738166 -69.846479841189804 -60.072263155686528  -69.712488925014071 -70.215334752081887 -60.018379477780506  -69.28988984152025 -70.569016048736017 -59.947197040571972  -68.863821580210313 -70.902405265488966 -59.860626181248826  -68.442688658325466 -71.211241951456245 -59.762029120153947  -68.036686522404196 -71.491817810430248 -59.656281736173121  -67.327663020663991 -71.957746733982674 -59.45673811350148  -67.003229738910065 -72.160365946166038 -59.358891277050475  -66.685501816939166 -72.349389293056078 -59.257307604219775  -66.374260757858735 -72.526134668807416 -59.152687568519468  -66.069063576183083 -72.69184774699913 -59.045519287704202  -65.769246533267818 -72.847701157841001 -58.936086443191037  -65.473953968320416 -72.994782919044582 -58.824485087009784  -64.649522995861972 -73.388377977954875 -58.502819478634954  -64.128849808835596 -73.616607106622197 -58.287631428637773  -63.620462924875433 -73.82174322229875 -58.067178599016671  -63.124082308198588 -74.006505260070512 -57.842953917062147  -62.638844104760132 -74.173346309254839 -57.615864646132856  -62.163313808214596 -74.324445539138921 -57.386255366367415  -61.695526113350944 -74.461695115375207 -57.153939114607773  -59.812828589095311 -74.970507212486638 -56.194413273894909  -58.435534269930223 -75.240629272602263 -55.435000896691719  -57.109771017044281 -75.419874707878307 -54.659571708282982  -55.837589263651687 -75.527156292796732 -53.880149335889456  -54.614928235724776 -75.577140208809141 -53.102073599420898  -53.431826216257356 -75.580144106771996 -52.324347143801489  -52.272997624304715 -75.54210268202138 -51.539995166181647  -48.502688155521867 -75.288274019569073 -48.915520090917454  -45.976239826445351 -74.912523625462228 -47.042165360098288  -43.557604060140612 -74.387416404190049 -45.153127442260825  -41.249207975245668 -73.749298069254749 -43.265407375510257  -39.042117998162695 -73.020950510990986 -41.381410855506957  -36.919831531096797 -72.212858734819278 -39.491311342544499  -34.863616244923065 -71.325054609242486 -37.57626008749962  -31.775982875868838 -69.822180630693836 -34.547792488000027  -30.71530628589764 -69.272628778064217 -33.47748176827929  -29.679485564457622 -68.70270575460178 -32.400570185044003  -28.668581815170683 -68.11266604140522 -31.315500300808488  -27.683437709861842 -67.502627893919495 -30.220855202470176  -26.725860442583627 -66.872730099832182 -29.115499431634206  -25.798770540308173 -66.223258500369923 -27.998695215195603  -23.952280143302247 -64.840068785081968 -25.663859274376851  -23.044275615004786 -64.108463468107701 -24.452317570831596  -22.178384509006406 -63.355025181869571 -23.225446434330042  -21.355591483009079 -62.575394021696148 -21.975303077925236  -20.582211202263764 -61.766432630873801 -20.696727623619047  -19.870050780827086 -60.926584484638532 -19.387478977038139  -19.236398994559067 -60.055748745679217 -18.048245428240936  -18.331169963235943 -58.523599866894145 -15.726978364661221  -18.011475062276624 -57.883665341244608 -14.767197445856851  -17.744994031475841 -57.225228389759501 -13.789815847255767  -17.538796339970148 -56.540508829027694 -12.785053323173614  -17.407011504117733 -55.823881382370352 -11.747769200559148  -17.370902084612844 -55.071530651684128 -10.677628810144014  -17.458903749236676 -54.280596161095076 -9.5792233779193836  -17.768507279476907 -53.2400742807325 -8.1866094179491373  -17.840234687809666 -53.029664633301408 -7.9074672161730097  -17.922698369264197 -52.815872980828175 -7.6265381316393963  -18.01667454383314 -52.598433677801609 -7.3437898593714594  -18.123022848514768 -52.377094031088966 -7.0592638938998009  -18.242686143705324 -52.151611572942031 -6.7730812024727367  -18.376690567810861 -51.921749523665866 -6.4854479575997814  -18.736779176425372 -51.356809630392192 -5.7896626987262447  -18.984720804065301 -51.006793515623812 -5.367583053913684  -19.272246309926167 -50.642149191511159 -4.9391330486151421  -19.600515527502402 -50.267007813705938 -4.5118741803510147  -19.969216334497478 -49.884977804910378 -4.0924609453465761  -20.376382435478696 -49.499350447201728 -3.6866960123466903  -20.818303595509995 -49.113285909878577 -3.2994802544848953  -21.40836692190852 -48.633290482798692 -2.8426761287236917  -21.528982898540381 -48.53686695432107 -2.7521730605603576  -21.651262081143603 -48.440755181348472 -2.6632357871075598  -21.775171311117326 -48.344953422962121 -2.5758694695655833  -21.900676910740138 -48.249460189834856 -2.4900789174929674  -22.027744683170038 -48.154274244231125 -2.4058685888065061  -22.15633991244448 -48.059394600006996 -2.3232425897812479  -22.286427363480353 -47.964820522610189 -2.2422046750504947 
+ 0 9 0.019018792544694442 7 0.03771359140072162 7 0.080513130083090079 7 0.13620373571084127 7 0.18669066289317413 7 0.32553447142552394 7 0.42569392882468893 7 0.44913196049583526 7 0.4710449359591512 7 0.50380327007174419 7 0.51487078242699613 7 0.52208600645225844 7 0.53412875327587039 7 0.54468267199311748 7 0.56395095467861356 7 0.62312231751858249 7 0.75733674355307057 7 0.83015966140350028 7 0.90800720301377802 7 0.96250659343954059 7 0.97606625983306905 7 0.99517644396296179 7 1 9
+1 47.5 -42.5 -12.500000000000011 -0.78446454055273618 -0.58834840541455213 -0.19611613513818404 
+3 -229.99999999999997 -188.12500000000003 -74.375 1 0 -0 0 -0.94868329805051388 -0.31622776601683794 -0 0.31622776601683794 -0.94868329805051388 63.737743919909803 50
+1 32.5 -22.5 -12.500000000000005 -0.78446454055273618 -0.58834840541455213 -0.19611613513818404 
+3 -229.99999999999997 -188.12500000000003 -74.375 1 0 -0 0 -0.94868329805051388 -0.31622776601683794 -0 0.31622776601683794 -0.94868329805051388 31.868871959954902 25
+2 40.089186286863665 105.17837257372733 95.267558860590952 0.2672612419124244 0.53452248382484879 0.80178372573727319 2.7755575615628907e-17 0.83205029433784372 -0.55470019622522926 -0.96362411165943151 0.14824986333222029 0.22237479499833029 100
+2 40.089186286863765 105.17837257372753 95.26755886059118 0.2672612419124244 0.53452248382484879 0.80178372573727319 2.7755575615628907e-17 0.83205029433784372 -0.55470019622522926 -0.96362411165943151 0.14824986333222029 0.22237479499833029 75
+Polygon3D 0
+PolygonOnTriangulations 34
+37 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 2 
+p 1.76798081482709 1 0 0.174532925199433 0.349065850398866 0.523598775598299 0.698131700797732 0.872664625997165 1.0471975511966 1.22173047639603 1.39626340159546 1.5707963267949 1.74532925199433 1.91986217719376 2.0943951023932 2.26892802759263 2.44346095279206 2.61799387799149 2.79252680319093 2.96705972839036 3.14159265358979 3.31612557878922 3.49065850398866 3.66519142918809 3.83972435438752 4.01425727958696 4.18879020478639 4.36332312998582 4.53785605518525 4.71238898038469 4.88692190558412 5.06145483078355 5.23598775598299 5.41052068118242 5.58505360638185 5.75958653158128 5.93411945678072 6.10865238198015 6.28318530717959 
+37 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 1 
+p 1.76798081482709 1 0 0.174532925199433 0.349065850398866 0.523598775598299 0.698131700797732 0.872664625997165 1.0471975511966 1.22173047639603 1.39626340159546 1.5707963267949 1.74532925199433 1.91986217719376 2.0943951023932 2.26892802759263 2.44346095279206 2.61799387799149 2.79252680319093 2.96705972839036 3.14159265358979 3.31612557878922 3.49065850398866 3.66519142918809 3.83972435438752 4.01425727958696 4.18879020478639 4.36332312998582 4.53785605518525 4.71238898038469 4.88692190558412 5.06145483078355 5.23598775598299 5.41052068118242 5.58505360638185 5.75958653158128 5.93411945678072 6.10865238198015 6.28318530717959 
+37 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 47 
+p 1.76798081482709 1 0 0.174532925199433 0.349065850398866 0.523598775598299 0.698131700797732 0.872664625997165 1.0471975511966 1.22173047639603 1.39626340159546 1.5707963267949 1.74532925199433 1.91986217719376 2.0943951023932 2.26892802759263 2.44346095279206 2.61799387799149 2.79252680319093 2.96705972839036 3.14159265358979 3.31612557878922 3.49065850398866 3.66519142918809 3.83972435438752 4.01425727958696 4.18879020478639 4.36332312998582 4.53785605518525 4.71238898038469 4.88692190558412 5.06145483078355 5.23598775598299 5.41052068118242 5.58505360638185 5.75958653158128 5.93411945678072 6.10865238198015 6.28318530717959 
+37 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 37 
+p 1.76798081482709 1 0 0.174532925199433 0.349065850398866 0.523598775598299 0.698131700797732 0.872664625997165 1.0471975511966 1.22173047639603 1.39626340159546 1.5707963267949 1.74532925199433 1.91986217719376 2.0943951023932 2.26892802759263 2.44346095279206 2.61799387799149 2.79252680319093 2.96705972839036 3.14159265358979 3.31612557878922 3.49065850398866 3.66519142918809 3.83972435438752 4.01425727958696 4.18879020478639 4.36332312998582 4.53785605518525 4.71238898038469 4.88692190558412 5.06145483078355 5.23598775598299 5.41052068118242 5.58505360638185 5.75958653158128 5.93411945678072 6.10865238198015 6.28318530717959 
+2 2 39 
+p 1.76798081482709 1 0 173.957025235878 
+2 1 38 
+p 1.76798081482709 1 0 173.957025235878 
+46 38 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 39 
+p 1.76798081482709 1 3.97265635324521 4.17423217547692 4.37580799770864 4.57738381994035 4.77895964217207 4.98053546440378 5.1821112866355 5.38368710886722 5.56510534887576 5.72838176488345 5.87533053929037 6.0075844362566 6.12661294352621 6.23373860006886 6.3408642566115 6.44798991315415 6.5551155696968 6.66224122623944 6.76936688278209 6.87649253932474 6.98361819586738 7.09074385241003 7.23357806113356 7.39426654594753 7.5549550307615 7.71564351557547 7.87633200038944 8.03702048520341 8.19770897001738 8.35839745483135 8.51908593964533 8.6797744244593 8.84046290927327 8.98508254560584 9.11524021830516 9.23238212373454 9.33780983862099 9.44323755350744 9.54866526839388 9.65409298328033 9.75952069816678 9.86494841305323 9.97037612793967 10.0758038428261 10.1658227516255 10.2558416604248 
+46 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 2 
+p 1.76798081482709 1 3.97265635324521 4.17423217547692 4.37580799770864 4.57738381994035 4.77895964217207 4.98053546440378 5.1821112866355 5.38368710886722 5.56510534887576 5.72838176488345 5.87533053929037 6.0075844362566 6.12661294352621 6.23373860006886 6.3408642566115 6.44798991315415 6.5551155696968 6.66224122623944 6.76936688278209 6.87649253932474 6.98361819586738 7.09074385241003 7.23357806113356 7.39426654594753 7.5549550307615 7.71564351557547 7.87633200038944 8.03702048520341 8.19770897001738 8.35839745483135 8.51908593964533 8.6797744244593 8.84046290927327 8.98508254560584 9.11524021830516 9.23238212373454 9.33780983862099 9.44323755350744 9.54866526839388 9.65409298328033 9.75952069816678 9.86494841305323 9.97037612793967 10.0758038428261 10.1658227516255 10.2558416604248 
+46 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 1 
+p 1.76798081482709 1 3.97265635324521 4.17423217547692 4.37580799770864 4.57738381994035 4.77895964217207 4.98053546440378 5.1821112866355 5.38368710886722 5.56510534887576 5.72838176488345 5.87533053929037 6.0075844362566 6.12661294352621 6.23373860006886 6.3408642566115 6.44798991315415 6.5551155696968 6.66224122623944 6.76936688278209 6.87649253932474 6.98361819586738 7.09074385241003 7.23357806113356 7.39426654594753 7.5549550307615 7.71564351557547 7.87633200038944 8.03702048520341 8.19770897001738 8.35839745483135 8.51908593964533 8.6797744244593 8.84046290927327 8.98508254560584 9.11524021830516 9.23238212373454 9.33780983862099 9.44323755350744 9.54866526839388 9.65409298328033 9.75952069816678 9.86494841305323 9.97037612793967 10.0758038428261 10.1658227516255 10.2558416604248 
+53 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 84 
+p 1.76798081482709 1 0 0.0118487787628229 0.0236975575256458 0.0355463362884688 0.0473951150512917 0.0592438938141146 0.0710926725769376 0.0829414513397605 0.0987398230235244 0.112322392475317 0.130095560619552 0.150090374781815 0.170085188944079 0.190080003106343 0.208956887651551 0.232718833606894 0.259451022806654 0.286183212006414 0.312915401206175 0.339647590405935 0.375290509338949 0.41538879313859 0.444184002267057 0.474257715116787 0.489294571541652 0.505737374042242 0.517112408077797 0.525404807889716 0.531647934464159 0.537428607218273 0.5427810819906 0.548133556762928 0.555270189792698 0.563298901951189 0.574003851495844 0.58604691973358 0.602104344050563 0.626190480526036 0.662319685239246 0.702965040541607 0.757158847611422 0.818126880564964 0.879094913518506 0.901051864907698 0.923914877265276 0.940308446508075 0.953587237594742 0.963232570933095 0.972725025738035 0.98151433574261 0.986780669767372 0.993390334883686 1 
+53 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 1 
+p 1.76798081482709 1 0 0.0118487787628229 0.0236975575256458 0.0355463362884688 0.0473951150512917 0.0592438938141146 0.0710926725769376 0.0829414513397605 0.0987398230235244 0.112322392475317 0.130095560619552 0.150090374781815 0.170085188944079 0.190080003106343 0.208956887651551 0.232718833606894 0.259451022806654 0.286183212006414 0.312915401206175 0.339647590405935 0.375290509338949 0.41538879313859 0.444184002267057 0.474257715116787 0.489294571541652 0.505737374042242 0.517112408077797 0.525404807889716 0.531647934464159 0.537428607218273 0.5427810819906 0.548133556762928 0.555270189792698 0.563298901951189 0.574003851495844 0.58604691973358 0.602104344050563 0.626190480526036 0.662319685239246 0.702965040541607 0.757158847611422 0.818126880564964 0.879094913518506 0.901051864907698 0.923914877265276 0.940308446508075 0.953587237594742 0.963232570933095 0.972725025738035 0.98151433574261 0.986780669767372 0.993390334883686 1 
+46 1 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 2 
+p 1.76798081482709 1 3.9726563532452 4.16119171871392 4.34972708418263 4.53826244965135 4.72679781512006 4.91533318058878 5.10386854605749 5.29240391152621 5.48093927699492 5.65062110591677 5.80333475194643 5.94077703337312 6.06447508665714 6.18817313994117 6.29950138789679 6.39969681105685 6.49989223421691 6.60008765737697 6.70028308053703 6.80047850369709 6.90067392685715 7.0008693500172 7.13446324756395 7.28475638230404 7.43504951704413 7.58534265178422 7.73563578652431 7.88592892126439 8.03622205600448 8.18651519074457 8.33680832548466 8.48710146022475 8.63739459496484 8.78768772970493 8.93798086444502 9.0732446857111 9.19498212485057 9.31671956399004 9.43845700312951 9.56019444226898 9.68193188140845 9.80366932054792 9.92540675968739 10.0471441988269 10.1514929296258 10.2558416604248 
+46 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 1 
+p 1.76798081482709 1 3.9726563532452 4.16119171871392 4.34972708418263 4.53826244965135 4.72679781512006 4.91533318058878 5.10386854605749 5.29240391152621 5.48093927699492 5.65062110591677 5.80333475194643 5.94077703337312 6.06447508665714 6.18817313994117 6.29950138789679 6.39969681105685 6.49989223421691 6.60008765737697 6.70028308053703 6.80047850369709 6.90067392685715 7.0008693500172 7.13446324756395 7.28475638230404 7.43504951704413 7.58534265178422 7.73563578652431 7.88592892126439 8.03622205600448 8.18651519074457 8.33680832548466 8.48710146022475 8.63739459496484 8.78768772970493 8.93798086444502 9.0732446857111 9.19498212485057 9.31671956399004 9.43845700312951 9.56019444226898 9.68193188140845 9.80366932054792 9.92540675968739 10.0471441988269 10.1514929296258 10.2558416604248 
+46 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 46 
+p 1.76798081482709 1 3.9726563532452 4.16119171871392 4.34972708418263 4.53826244965135 4.72679781512006 4.91533318058878 5.10386854605749 5.29240391152621 5.48093927699492 5.65062110591677 5.80333475194643 5.94077703337312 6.06447508665714 6.18817313994117 6.29950138789679 6.39969681105685 6.49989223421691 6.60008765737697 6.70028308053703 6.80047850369709 6.90067392685715 7.0008693500172 7.13446324756395 7.28475638230404 7.43504951704413 7.58534265178422 7.73563578652431 7.88592892126439 8.03622205600448 8.18651519074457 8.33680832548466 8.48710146022475 8.63739459496484 8.78768772970493 8.93798086444502 9.0732446857111 9.19498212485057 9.31671956399004 9.43845700312951 9.56019444226898 9.68193188140845 9.80366932054792 9.92540675968739 10.0471441988269 10.1514929296258 10.2558416604248 
+2 47 2 
+p 1.76798081482709 1 2000 2191.25284262464 
+2 48 1 
+p 1.76798081482709 1 2000 2191.25284262464 
+52 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 84 
+p 1.76798081482709 1 0 0.00954987821484543 0.0190997564296909 0.0286496346445363 0.0381995128593817 0.0477493910742272 0.0604825620273544 0.0748073793496225 0.0890738922437453 0.108018486610221 0.129331155272506 0.147894690481756 0.169453375908132 0.193706897012804 0.217960418117477 0.242213939222149 0.266467460326822 0.298805488466385 0.335185770123394 0.371566051780403 0.407946333437412 0.441332819237133 0.46615045341866 0.47593252430297 0.484763679054806 0.497327606359204 0.507155106592981 0.51500756115823 0.521551273295938 0.527440614219874 0.533329955143811 0.539219296067747 0.547071750632996 0.555905762018901 0.567684443866774 0.585352466638583 0.605228992256869 0.631731026414583 0.671484077651155 0.716206260292298 0.775835837147155 0.84291911110887 0.89182281782696 0.917771998363719 0.936639169165451 0.95298898629318 0.964908002979294 0.975352573935589 0.984056383065835 0.993010919208064 0.996505459604032 1 
+52 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 1 
+p 1.76798081482709 1 0 0.00954987821484543 0.0190997564296909 0.0286496346445363 0.0381995128593817 0.0477493910742272 0.0604825620273544 0.0748073793496225 0.0890738922437453 0.108018486610221 0.129331155272506 0.147894690481756 0.169453375908132 0.193706897012804 0.217960418117477 0.242213939222149 0.266467460326822 0.298805488466385 0.335185770123394 0.371566051780403 0.407946333437412 0.441332819237133 0.46615045341866 0.47593252430297 0.484763679054806 0.497327606359204 0.507155106592981 0.51500756115823 0.521551273295938 0.527440614219874 0.533329955143811 0.539219296067747 0.547071750632996 0.555905762018901 0.567684443866774 0.585352466638583 0.605228992256869 0.631731026414583 0.671484077651155 0.716206260292298 0.775835837147155 0.84291911110887 0.89182281782696 0.917771998363719 0.936639169165451 0.95298898629318 0.964908002979294 0.975352573935589 0.984056383065835 0.993010919208064 0.996505459604032 1 
+2 1 2 
+p 1.76798081482709 1 62.8726216514981 325.962901541682 
+2 3 55 
+p 1.76798081482709 1 62.8726216514981 325.962901541682 
+51 2 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 55 
+p 1.76798081482709 1 4.98022625413595 5.16698843883022 5.3537506235245 5.52183658974934 5.6731139593517 5.82439132895406 5.96054096159619 6.0830756309741 6.20561030035201 6.32814496972993 6.45067963910784 6.57321430848575 6.69574897786367 6.81828364724158 6.94081831661949 7.06335298599741 7.18588765537532 7.30842232475323 7.43095699413114 7.55349166350906 7.67602633288697 7.79856100226488 7.9210956716428 8.04363034102071 8.16616501039862 8.28869967977653 8.41123434915444 8.53376901853235 8.65630368791027 8.77883835728818 8.90137302666609 9.023907696044 9.14644236542191 9.26897703479982 9.39151170417773 9.51404637355564 9.63658104293355 9.75911571231147 9.88165038168938 10.0041850510673 10.1267197204452 10.2492543898231 10.371789059201 10.4943237285789 10.6168583979568 10.7393930673348 10.8619277367127 10.9844624060906 11.1069970754685 11.185204318392 11.2634115613155 
+51 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 1 
+p 1.76798081482709 1 4.98022625413595 5.16698843883022 5.3537506235245 5.52183658974934 5.6731139593517 5.82439132895406 5.96054096159619 6.0830756309741 6.20561030035201 6.32814496972993 6.45067963910784 6.57321430848575 6.69574897786367 6.81828364724158 6.94081831661949 7.06335298599741 7.18588765537532 7.30842232475323 7.43095699413114 7.55349166350906 7.67602633288697 7.79856100226488 7.9210956716428 8.04363034102071 8.16616501039862 8.28869967977653 8.41123434915444 8.53376901853235 8.65630368791027 8.77883835728818 8.90137302666609 9.023907696044 9.14644236542191 9.26897703479982 9.39151170417773 9.51404637355564 9.63658104293355 9.75911571231147 9.88165038168938 10.0041850510673 10.1267197204452 10.2492543898231 10.371789059201 10.4943237285789 10.6168583979568 10.7393930673348 10.8619277367127 10.9844624060906 11.1069970754685 11.185204318392 11.2634115613155 
+2 1 2 
+p 1.76798081482709 1 55.9484769446956 320.732366972618 
+2 3 54 
+p 1.76798081482709 1 55.9484769446956 320.732366972618 
+49 2 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 54 
+p 1.76798081482709 1 4.98022625413595 5.17277091113056 5.36531556812517 5.53860575942031 5.69456693158595 5.85052810375158 5.99089315870065 6.11722170815481 6.24355025760897 6.36987880706314 6.4962073565173 6.62253590597146 6.74886445542562 6.87519300487978 7.00152155433395 7.12785010378811 7.25417865324227 7.38050720269643 7.50683575215059 7.63316430160476 7.75949285105892 7.88582140051308 8.01214994996724 8.1384784994214 8.26480704887557 8.39113559832973 8.51746414778389 8.64379269723805 8.77012124669221 8.89644979614637 9.02277834560053 9.14910689505469 9.27543544450886 9.40176399396302 9.52809254341718 9.65442109287134 9.7807496423255 9.90707819177966 10.0334067412338 10.159735290688 10.2860638401421 10.4123923895963 10.5387209390505 10.6650494885046 10.7913780379588 10.917706587413 11.0440351368671 11.1537233490913 11.2634115613155 
+49 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 51 
+p 1.76798081482709 1 4.98022625413595 5.17277091113056 5.36531556812517 5.53860575942031 5.69456693158595 5.85052810375158 5.99089315870065 6.11722170815481 6.24355025760897 6.36987880706314 6.4962073565173 6.62253590597146 6.74886445542562 6.87519300487978 7.00152155433395 7.12785010378811 7.25417865324227 7.38050720269643 7.50683575215059 7.63316430160476 7.75949285105892 7.88582140051308 8.01214994996724 8.1384784994214 8.26480704887557 8.39113559832973 8.51746414778389 8.64379269723805 8.77012124669221 8.89644979614637 9.02277834560053 9.14910689505469 9.27543544450886 9.40176399396302 9.52809254341718 9.65442109287134 9.7807496423255 9.90707819177966 10.0334067412338 10.159735290688 10.2860638401421 10.4123923895963 10.5387209390505 10.6650494885046 10.7913780379588 10.917706587413 11.0440351368671 11.1537233490913 11.2634115613155 
+2 2 48 
+p 1.76798081482709 1 173.957025235878 400 
+2 1 47 
+p 1.76798081482709 1 173.957025235878 400 
+37 47 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 48 
+p 1.76798081482709 1 0 0.174532925199433 0.349065850398866 0.523598775598299 0.698131700797732 0.872664625997165 1.0471975511966 1.22173047639603 1.39626340159546 1.5707963267949 1.74532925199433 1.91986217719376 2.0943951023932 2.26892802759263 2.44346095279206 2.61799387799149 2.79252680319093 2.96705972839036 3.14159265358979 3.31612557878922 3.49065850398866 3.66519142918809 3.83972435438752 4.01425727958696 4.18879020478639 4.36332312998582 4.53785605518525 4.71238898038469 4.88692190558412 5.06145483078355 5.23598775598299 5.41052068118242 5.58505360638185 5.75958653158128 5.93411945678072 6.10865238198015 6.28318530717959 
+37 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 1 
+p 1.76798081482709 1 0 0.174532925199433 0.349065850398866 0.523598775598299 0.698131700797732 0.872664625997165 1.0471975511966 1.22173047639603 1.39626340159546 1.5707963267949 1.74532925199433 1.91986217719376 2.0943951023932 2.26892802759263 2.44346095279206 2.61799387799149 2.79252680319093 2.96705972839036 3.14159265358979 3.31612557878922 3.49065850398866 3.66519142918809 3.83972435438752 4.01425727958696 4.18879020478639 4.36332312998582 4.53785605518525 4.71238898038469 4.88692190558412 5.06145483078355 5.23598775598299 5.41052068118242 5.58505360638185 5.75958653158128 5.93411945678072 6.10865238198015 6.28318530717959 
+37 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 2 
+p 1.76798081482709 1 0 0.174532925199433 0.349065850398866 0.523598775598299 0.698131700797732 0.872664625997165 1.0471975511966 1.22173047639603 1.39626340159546 1.5707963267949 1.74532925199433 1.91986217719376 2.0943951023932 2.26892802759263 2.44346095279206 2.61799387799149 2.79252680319093 2.96705972839036 3.14159265358979 3.31612557878922 3.49065850398866 3.66519142918809 3.83972435438752 4.01425727958696 4.18879020478639 4.36332312998582 4.53785605518525 4.71238898038469 4.88692190558412 5.06145483078355 5.23598775598299 5.41052068118242 5.58505360638185 5.75958653158128 5.93411945678072 6.10865238198015 6.28318530717959 
+37 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 37 
+p 1.76798081482709 1 0 0.174532925199433 0.349065850398866 0.523598775598299 0.698131700797732 0.872664625997165 1.0471975511966 1.22173047639603 1.39626340159546 1.5707963267949 1.74532925199433 1.91986217719376 2.0943951023932 2.26892802759263 2.44346095279206 2.61799387799149 2.79252680319093 2.96705972839036 3.14159265358979 3.31612557878922 3.49065850398866 3.66519142918809 3.83972435438752 4.01425727958696 4.18879020478639 4.36332312998582 4.53785605518525 4.71238898038469 4.88692190558412 5.06145483078355 5.23598775598299 5.41052068118242 5.58505360638185 5.75958653158128 5.93411945678072 6.10865238198015 6.28318530717959 
+2 1 2 
+p 1.76798081482709 1 2191.25284262464 2400 
+2 3 48 
+p 1.76798081482709 1 2191.25284262464 2400 
+Surfaces 8
+1 -66.815310478106099 -108.6306209562122 -225.44593143431831 0.2672612419124244 0.53452248382484879 0.80178372573727319 1.3877787807814454e-17 0.83205029433784372 -0.55470019622522926 -0.96362411165943151 0.14824986333222026 0.22237479499833032 
+2 -66.815310478106099 -108.6306209562122 -225.44593143431831 0.2672612419124244 0.53452248382484879 0.80178372573727319 1.3877787807814454e-17 0.83205029433784372 -0.55470019622522926 -0.96362411165943151 0.14824986333222026 0.22237479499833032 100
+2 -66.815310478106099 -108.6306209562122 -225.44593143431831 0.2672612419124244 0.53452248382484879 0.80178372573727319 1.3877787807814454e-17 0.83205029433784372 -0.55470019622522926 -0.96362411165943151 0.14824986333222026 0.22237479499833032 75
+1 17.5 -2.5 -12.5 0.6963106238227913 0.6963106238227913 0.17407765595569782 0.70710678118654757 -0.70710678118654757 0 0.12309149097933274 0.12309149097933274 -0.9847319278346619 
+2 17.5 -2.5 -12.5 -0.78446454055273618 -0.58834840541455213 -0.19611613513818404 0.59999999999999998 -0.79999999999999993 0 -0.15689290811054724 -0.11766968108291043 0.98058067569092022 50
+2 17.5 -2.5 -12.5 -0.78446454055273618 -0.58834840541455213 -0.19611613513818404 0.59999999999999998 -0.79999999999999993 0 -0.15689290811054724 -0.11766968108291043 0.98058067569092022 25
+1 200 0 0 1 0 -0 0 0 1 0 -1 0 
+1 40.089186286863665 105.17837257372733 95.267558860590952 0.2672612419124244 0.53452248382484879 0.80178372573727319 1.3877787807814454e-17 0.83205029433784372 -0.55470019622522926 -0.96362411165943151 0.14824986333222026 0.22237479499833032 
+Triangulations 10
+72 72 1 1.65978342181461e-13
+-66.8153104781061 -25.4255915224278 -280.915951056841 -83.5484675726636 -24.1153310195112 -276.211739027267 -99.773196156289 -25.373024834521 -269.965033622718 -114.996516061078 -29.160458577312 -262.365637825928 -128.755874415094 -35.3625529901433 -253.644455432702 -140.633200077323 -43.7908605726923 -244.066475156926 -150.267606517734 -54.1892914639926 -233.922719082589 -157.366357171881 -66.2418946032721 -223.52140010502 -161.713760093277 -79.5824577430552 -213.178557038033 -163.177721644049 -93.8056346229902 -203.208451934485 -161.713760093277 -108.479261210855 -193.914021392833 -157.366357171881 -123.157486787991 -185.577671981874 -150.267606517734 -137.394320897777 -178.452699460066 -140.633200077323 -150.757184539973 -172.755592512072 -128.755874415094 -162.840053864746 -168.659454849633 -114.996516061078 -173.27579700189 -166.288745542876 -99.7731961562891 -181.747329176924 -165.715497394449 -83.5484675726637 -187.997247171511 -166.957128259267 -66.8153104781062 -191.835650389997 -169.975911811795 -50.0821533835488 -193.145910892913 -174.68012384137 -33.8574247999234 -191.888217077903 -180.926829245918 -18.6341048951347 -188.100783335113 -188.526225042709 -4.87474654111818 -181.898688922281 -197.247407435935 7.00257912111068 -173.470381339732 -206.825387711711 16.6369855615218 -163.071950448432 -216.969143786048 23.7357362156682 -151.019347309152 -227.370462763616 28.0831391370648 -137.678784169369 -237.713305830604 29.5471006878371 -123.455607289434 -247.683410934151 28.0831391370649 -108.78198070157 -256.977841475804 23.7357362156684 -94.1037551244337 -265.314190886762 16.6369855615221 -79.8669210146477 -272.439163408571 7.00257912111104 -66.5040573724516 -278.136270356564 -4.87474654111773 -54.4211880476783 -282.232408019004 -18.6341048951342 -43.9854449105342 -284.603117325761 -33.8574247999228 -35.5139127355006 -285.176365474187 -50.0821533835482 -29.2639947409137 -283.93473460937 -66.815310478106 -46.2268488808736 -267.048446151211 -79.3651782990241 -45.2441535036862 -263.520287129029 -91.5337247367431 -46.1874238649436 -258.835258075618 -102.951214665335 -49.0279991720368 -253.135711228025 -113.270733430847 -53.6795699816602 -246.594824433106 -122.178727677519 -60.000800668572 -239.411339226274 -129.404532507827 -67.7996238370472 -231.803522170521 -134.728595498437 -76.8390761915069 -224.002532937345 -137.989147689484 -86.8444985463442 -216.245400637104 -139.087118852563 -97.5118812062954 -208.767821809443 -137.989147689484 -108.517101147194 -201.796998903204 -134.728595498437 -119.525770330046 -195.544736844985 -129.404532507827 -130.203395912386 -190.201007453629 -122.178727677519 -140.225543644033 -185.928177242634 -113.270733430847 -149.287695637613 -182.856073995804 -102.951214665335 -157.114502990471 -181.078042015736 -91.5337247367432 -163.468152121746 -180.648105904417 -79.3651782990242 -168.155590617686 -181.57932905303 -66.8153104781061 -171.03439303155 -183.843416717426 -54.265442657188 -172.017088408738 -187.371575739607 -42.0968962194689 -171.07381804748 -192.056604793018 -30.6794062908774 -168.233242740387 -197.756151640611 -20.359887525365 -163.581671930764 -204.297038435531 -11.4518932786934 -157.260441243852 -211.480523642362 -4.22608844838504 -149.461618075377 -219.088340698115 1.09797454222478 -140.422165720917 -226.889329931292 4.35852673327223 -130.41674336608 -234.646462231532 5.45649789635139 -119.749360706129 -242.124041059193 4.3585267332723 -108.74414076523 -249.094863965432 1.0979745422249 -97.7354715823781 -255.347126023651 -4.22608844838484 -87.0578460000386 -260.690855415008 -11.4518932786931 -77.0356982683915 -264.963685626003 -20.3598875253647 -67.9735462748115 -268.035788872832 -30.679406290877 -60.1467389219535 -269.8138208529 -42.0968962194685 -53.7930897906782 -270.24375696422 -54.2654426571875 -49.105651294738 -269.312533815607 100 0 98.4807753012208 17.364817766693 93.9692620785908 34.2020143325669 86.6025403784439 50 76.6044443118978 64.2787609686539 64.278760968654 76.6044443118978 50 86.6025403784438 34.2020143325669 93.9692620785908 17.364817766693 98.4807753012208 0 100 -17.364817766693 98.4807753012208 -34.2020143325669 93.9692620785908 -50 86.6025403784439 -64.2787609686539 76.6044443118979 -76.6044443118978 64.278760968654 -86.6025403784438 50.0000000000001 -93.9692620785908 34.202014332567 -98.4807753012208 17.3648177666932 -100 1.4210854715202e-13 -98.4807753012208 -17.3648177666929 -93.9692620785909 -34.2020143325667 -86.602540378444 -49.9999999999998 -76.604444311898 -64.2787609686538 -64.2787609686541 -76.6044443118977 -50.0000000000002 -86.6025403784437 -34.2020143325671 -93.9692620785908 -17.3648177666933 -98.4807753012208 -2.8421709430404e-13 -100 17.3648177666927 -98.4807753012209 34.2020143325666 -93.969262078591 49.9999999999997 -86.602540378444 64.2787609686536 -76.604444311898 76.6044443118976 -64.2787609686542 86.6025403784437 -50.0000000000004 93.9692620785907 -34.2020143325673 98.4807753012207 -17.3648177666935 75.0000000000002 -8.5265128291212e-14 73.8605814759158 13.0236133250197 70.4769465589433 25.6515107494251 64.9519052838331 37.4999999999999 57.4533332339235 48.2090707264904 48.2090707264906 57.4533332339233 37.5000000000002 64.9519052838328 25.6515107494253 70.476946558943 13.02361332502 73.8605814759155 1.84741111297626e-13 74.9999999999999 -13.0236133250196 73.8605814759155 -25.651510749425 70.476946558943 -37.4999999999998 64.9519052838328 -48.2090707264902 57.4533332339233 -57.4533332339231 48.2090707264904 -64.9519052838327 37.5 -70.4769465589429 25.6515107494252 -73.8605814759154 13.0236133250198 -74.9999999999998 4.2632564145606e-14 -73.8605814759154 -13.0236133250197 -70.476946558943 -25.6515107494251 -64.9519052838328 -37.4999999999999 -57.4533332339233 -48.2090707264904 -48.2090707264904 -57.4533332339233 -37.5 -64.9519052838329 -25.6515107494251 -70.4769465589431 -13.0236133250198 -73.8605814759156 -2.8421709430404e-14 -75.0000000000001 13.0236133250197 -73.8605814759157 25.6515107494251 -70.4769465589433 37.4999999999999 -64.9519052838331 48.2090707264904 -57.4533332339236 57.4533332339234 -48.2090707264907 64.9519052838329 -37.5000000000003 70.4769465589432 -25.6515107494255 73.8605814759157 -13.0236133250202 3 40 39 51 15 52 3 39 2 7 8 44 7 44 43 4 40 3 4 41 40 33 68 32 33 69 68 5 41 4 5 42 41 14 15 51 14 51 50 6 7 43 6 42 5 6 43 42 60 24 25 34 69 33 34 70 69 13 50 49 59 23 24 13 14 50 59 24 60 61 25 26 71 70 34 61 60 25 58 22 23 58 23 59 35 71 34 12 49 48 12 13 49 62 26 27 62 61 26 57 21 22 57 22 58 63 62 27 63 27 28 56 20 21 56 21 57 36 71 35 36 72 71 36 37 72 11 12 48 64 28 29 11 48 47 64 63 28 55 20 56 55 19 20 65 64 29 54 18 19 54 19 55 10 47 46 10 11 47 30 65 29 1 38 37 1 37 36 66 65 30 53 18 54 53 17 18 31 66 30 67 66 31 9 46 45 9 10 46 52 17 53 52 16 17 2 39 38 2 38 1 32 67 31 15 16 52 8 9 45 68 67 32 8 45 44 
+135 135 1 0.617269495737421
+-66.8153104781061 -25.4255915224278 -280.915951056841 -66.8153104781061 -25.4255915224278 -280.915951056841 -83.5484675726636 -24.1153310195112 -276.211739027267 -99.773196156289 -25.373024834521 -269.965033622718 -114.996516061078 -29.160458577312 -262.365637825928 -128.755874415094 -35.3625529901433 -253.644455432702 -140.633200077323 -43.7908605726923 -244.066475156926 -150.267606517734 -54.1892914639926 -233.922719082589 -157.366357171881 -66.2418946032721 -223.52140010502 -161.713760093277 -79.5824577430552 -213.178557038033 -163.177721644049 -93.8056346229902 -203.208451934485 -161.713760093277 -108.479261210855 -193.914021392833 -157.366357171881 -123.157486787991 -185.577671981874 -150.267606517734 -137.394320897777 -178.452699460066 -140.633200077323 -150.757184539973 -172.755592512072 -128.755874415094 -162.840053864746 -168.659454849633 -114.996516061078 -173.27579700189 -166.288745542876 -99.7731961562891 -181.747329176924 -165.715497394449 -83.5484675726637 -187.997247171511 -166.957128259267 -66.8153104781062 -191.835650389997 -169.975911811795 -50.0821533835488 -193.145910892913 -174.68012384137 -33.8574247999234 -191.888217077903 -180.926829245918 -18.6341048951347 -188.100783335113 -188.526225042709 -4.87474654111818 -181.898688922281 -197.247407435935 7.00257912111068 -173.470381339732 -206.825387711711 16.6369855615218 -163.071950448432 -216.969143786048 23.7357362156682 -151.019347309152 -227.370462763616 28.0831391370648 -137.678784169369 -237.713305830604 29.5471006878371 -123.455607289434 -247.683410934151 28.0831391370649 -108.78198070157 -256.977841475804 23.7357362156684 -94.1037551244337 -265.314190886762 16.6369855615221 -79.8669210146477 -272.439163408571 7.00257912111104 -66.5040573724516 -278.136270356564 -4.87474654111773 -54.4211880476783 -282.232408019004 -18.6341048951342 -43.9854449105342 -284.603117325761 -33.8574247999228 -35.5139127355006 -285.176365474187 -50.0821533835482 -29.2639947409137 -283.93473460937 -20.3233398741743 67.5583496854358 -141.440039245046 -20.3233398741743 67.5583496854358 -141.440039245046 -35.1855262004392 77.7035384339573 -122.572048934072 -48.6971017063958 85.5659924533034 -99.9755629876303 -60.3109095633921 90.827318421781 -74.5656354335556 -69.556643827254 93.2744567720475 -47.3712517791741 -76.0598946716704 92.8083096262563 -19.4936598183435 -79.5573102686927 89.4477538055348 7.93822585263177 -79.9072613297378 83.3288764053193 33.8135396976741 -77.5167641728392 75.6661584208742 54.9024230078599 -73.2374600487666 67.2365406565743 71.5036775687694 -67.7578354967252 58.5988160312175 84.1360778620306 -61.6071971021387 50.1323916335827 93.399221874224 -55.17556563886 42.0781423884772 99.8896930015315 -48.7388800846726 34.5749815850854 104.155593998349 -41.7644254490259 26.9200061348011 106.877677256899 -34.3321634064522 19.2009798395967 108.024734267422 -26.5273043640062 11.5064008402688 107.583614094949 -18.4393305294195 3.92448699093632 105.559374153933 -10.1609700033356 -3.45783555299158 101.975222225309 -1.78713365759029 -10.5559289376054 96.8722503807827 6.58617301183938 -17.2884139780553 90.3089638648638 14.8629505816812 -23.5781031656799 82.3606103359952 25.5847810319654 -31.1517610854722 69.7679202140274 36.9688872129791 -38.3875287424818 53.1745661180107 47.3532434132246 -44.0845718143738 34.4253136045972 56.4702938133358 -48.0961044053576 14.0032423680875 64.0851350795899 -50.3187682649458 -7.56546725857611 70.0015687134911 -50.6952958419625 -29.7250914861143 74.0671561605332 -49.2159857988918 -51.9046814465653 76.1771464318613 -45.9189529695317 -73.5327738493182 76.2771750425701 -40.8891463197232 -94.0521148913876 74.3646647277448 -34.2561602136706 -112.934018056297 70.4888918464067 -26.1908953791826 -129.691985868896 65.4036338933146 -17.8786297904701 -142.600016411378 59.6230083497372 -9.69229948335874 -152.222835465514 53.528373648904 -1.87170173475039 -159.126687656614 47.39181209029 5.44193016641362 -163.834969026814 40.7086194880131 12.9320315167513 -167.062604019058 33.5530107685251 20.5154269008719 -168.773750677588 26.0044469030168 28.1079049000452 -168.949407212248 18.1467525162495 35.6251532357201 -167.587623007879 10.0671850382717 42.9836950330629 -164.703520285338 1.85546573582257 50.1018158075777 -160.329126173601 -6.39721661645979 56.9004708808912 -154.513017057726 -13.4071402034809 62.3956703166524 -148.454120452686 -23.615004462056 -64.586253346542 17.6300532161252 -29.009902385954 -61.1939812514149 20.1597173165064 -34.9880216893461 -57.7257904899999 21.7960139557403 -41.4383707111624 -54.1158301572543 22.5063167604849 -48.047997153028 -50.4592292690093 22.2379809934335 -54.1669555674689 -47.0798334510796 21.1220432090507 -59.7589921082537 -43.9982887249958 19.3520134823694 -64.8865235104902 -41.1981153358782 17.0566785916219 -71.0612883280843 -37.9100781558483 13.3518439767453 -75.8290514087411 -35.4955498492353 9.70207743510968 -81.3803608128641 -32.9311767839816 4.45839451219417 -86.8095492185451 -30.8540237583208 -1.86578023339614 -91.504364938426 -29.6119482005143 -8.44064584847071 -95.5887140334666 -29.1633807999117 -15.1100911550616 -98.9796456750289 -29.418761209448 -21.3866567995678 -102.724447257937 -30.5958582498838 -29.1535718421494 -106.377877012087 -32.9408426023242 -37.6158839341697 -109.553573630587 -36.2355933729998 -45.7121955785007 -112.331994542397 -40.368187691758 -53.4105544494629 -114.756424008461 -45.2558375522077 -60.7009318693995 -117.443168108153 -52.8399371290984 -69.7587551094942 -119.623963487137 -62.790420160154 -79.0215044479946 -120.462859312851 -70.9507526355449 -85.0213457209572 -120.335278752761 -80.5526321709034 -90.5370522289084 -119.668251389871 -85.9023486069992 -92.9070773357592 -118.187485076373 -92.2850797175821 -95.0288303012165 -116.378861706727 -97.2728988179204 -96.0758006310156 -114.382223865994 -101.282423794925 -96.4451327921304 -112.133720795134 -104.755808466805 -96.3368525767004 -109.401453386115 -108.039293558505 -95.7533114386424 -106.643883919347 -110.638203360024 -94.8333887760415 -104.143222818954 -112.536950919873 -93.7948816450386 -101.08251619837 -114.400347580557 -92.3250301583427 -97.8840965362817 -115.912305919513 -90.6066511098729 -93.9212828113656 -117.286755951375 -88.2743686229117 -89.70074191771 -118.252094756809 -85.5920891133436 -84.4073553376621 -118.863644023118 -81.9937787802057 -77.046745623355 -118.801498937649 -76.6351813713114 -66.7091584705236 -117.249618090693 -68.5235877941795 -56.0019755027259 -114.126133203767 -59.45601641046 -42.8851767117907 -108.398097845665 -47.3166375408164 -29.7220271593066 -100.385601686676 -33.4054792397095 -18.8151484287358 -90.9746030635084 -18.7333275909045 -15.7685988483331 -87.2089827221248 -13.049273809458 -13.4651352372019 -83.049598096038 -6.80589983557332 -12.614831921392 -79.81852689937 -1.97740214405515 -12.6856825931079 -77.0008060440776 2.18698737320632 -13.3460744639715 -74.7934810382628 5.37767943676456 -14.6865704867699 -72.4348160589257 8.6584385189762 -16.7515671724958 -70.0155003182394 11.8064617072594 -18.4254196405347 -68.4637193244915 13.6684561861196 -20.875812277194 -66.5124362699467 15.7956136581649 0 0 6.28318530717959 0 0.174532925199433 0 0.349065850398866 0 0.523598775598299 0 0.698131700797732 0 0.872664625997165 0 1.0471975511966 0 1.22173047639603 0 1.39626340159546 0 1.5707963267949 0 1.74532925199433 0 1.91986217719376 0 2.0943951023932 0 2.26892802759263 0 2.44346095279206 0 2.61799387799149 0 2.79252680319093 0 2.96705972839036 0 3.14159265358979 0 3.31612557878922 0 3.49065850398866 0 3.66519142918809 0 3.83972435438752 0 4.01425727958696 0 4.18879020478639 0 4.36332312998582 0 4.53785605518525 0 4.71238898038469 0 4.88692190558412 0 5.06145483078355 0 5.23598775598299 0 5.41052068118242 0 5.58505360638185 0 5.75958653158128 0 5.93411945678072 0 6.10865238198015 0 0 173.957025235878 6.28318530717958 173.957025235877 0.201575822238879 190.535817917975 0.403151644497022 209.244850609485 0.604727466740452 229.326493309338 0.806303288942124 249.967531601463 1.00787911114277 270.332098122658 1.20945493337517 289.595521339622 1.41103075561639 306.977720976516 1.5924489956323 320.429436598651 1.75572541169211 330.377924241926 1.90267418610797 337.353810447214 2.0349280830181 341.899181637182 2.15395659018577 344.516884275958 2.26108224660634 345.646882700112 2.36820790301701 345.601649666387 2.47533355944112 344.381703778192 2.58245921590188 342.001031646771 2.68958487241637 338.486927527655 2.79671052899083 333.879680391699 2.90383618561884 328.232112019353 3.01096184228298 321.608971410739 3.11808749895964 314.086192449228 3.26092170784184 302.806817695584 3.42161019276766 288.677386280077 3.58229867761381 273.374679083942 3.74298716239411 257.292974555001 3.90367564714655 240.846622314493 4.06436413194624 224.459367190358 4.22505261675518 208.553431330417 4.38574110160767 193.538635633286 4.54642958656816 179.801840449197 4.70711807166649 167.696978092757 4.86780655683732 157.5359337259 5.01242619344128 150.270485402991 5.14258386626291 145.385906151398 5.25972577167464 142.401935521473 5.36515348644875 140.896147764946 5.47058120115759 140.525751767202 5.57600891583603 141.294860677533 5.68143663051811 143.194933771424 5.78686434522856 146.2048712861 5.89229205997901 150.29124872518 5.99771977477058 155.408688034393 6.10314748960075 161.500361524681 6.19316639838097 167.422112982515 2.95089202148316 229.982840820351 2.88665220382334 232.382482914584 2.81736720919716 233.950545281245 2.74349756607112 234.725731183664 2.66789572780876 234.698622350319 2.59746562795577 233.974884217239 2.53241907840191 232.708323498609 2.47202502990956 230.994326562674 2.39820673250917 228.13110494863 2.34039336589454 225.221162918442 2.27237235442984 220.903928502628 2.20564928762713 215.492581471577 2.14868138862969 209.630136254911 2.10078771844928 203.430864697981 2.06330136255055 197.355645338105 2.02588908273361 189.498234102258 1.99557223857738 180.483422950835 1.97645095415472 171.382073048191 1.96741617387325 162.25812538722 1.96766333997584 153.15230464393 1.98164827611679 141.117955071217 2.01617878364523 127.789634409663 2.05490540363922 118.392973796197 2.11147366177377 108.872246922485 2.14847722974806 104.290726206438 2.19866443339788 99.5735773658124 2.24351469887844 96.5514070675913 2.28422087040572 94.6457252107153 2.32392950900475 93.4768780463363 2.36668418390818 92.919884408283 2.40567060725024 93.005279146097 2.43838412252273 93.4913437922432 2.47580243510979 94.4918276346539 2.51246482084195 95.9162338746336 2.55514952769549 98.1106520891657 2.59794006890928 100.873251852584 2.64850023740579 104.846148756343 2.71427420988265 111.143008590493 2.79982271985911 121.239103896191 2.88191115657184 133.040522980925 2.97495975911459 149.341055020994 3.05966807318566 168.295654398392 3.11827992565562 188.004923126202 3.12941659274989 195.389338306804 3.13156348421453 203.234085099687 3.12422908715649 209.05982929015 3.11010420209174 213.885968544504 3.09335935908897 217.447581208065 3.06960626056014 220.98053727968 3.03900270883492 224.245856120386 3.01628412343262 226.120878932693 2.98473373838955 228.214508861572 38 1 3 40 3 4 40 38 3 41 4 5 41 40 4 42 5 6 42 41 5 43 6 7 43 42 6 44 7 8 44 43 7 45 8 9 45 9 10 45 44 8 46 10 11 46 45 10 47 11 12 47 46 11 48 47 12 103 12 13 104 103 13 102 48 12 102 12 103 105 13 14 105 104 13 106 105 14 107 106 14 49 102 101 49 48 102 49 101 100 108 107 14 109 14 15 109 108 14 110 109 15 111 110 15 50 49 100 50 98 97 50 99 98 50 100 99 112 111 15 113 15 16 113 112 15 114 113 16 51 96 95 51 97 96 51 50 97 115 114 16 116 115 16 117 116 16 52 51 95 52 94 93 52 95 94 17 117 16 118 117 17 119 118 17 53 52 93 53 93 92 120 119 17 54 53 92 54 91 90 54 92 91 121 17 18 121 120 17 122 121 18 55 54 90 55 89 88 55 90 89 123 18 19 123 122 18 56 55 88 56 88 87 124 123 19 57 56 87 57 87 86 125 19 20 125 124 19 58 85 84 58 86 85 58 57 86 126 125 20 127 126 20 127 20 21 59 133 132 59 134 133 59 135 134 59 84 135 59 58 84 60 129 128 60 130 129 60 131 130 60 132 131 60 59 132 61 127 21 61 60 128 61 128 127 62 21 22 62 61 21 63 62 22 63 22 23 64 23 24 64 63 23 65 24 25 65 64 24 66 25 26 66 65 25 67 26 27 67 66 26 68 27 28 68 67 27 69 68 28 70 28 29 70 69 28 71 29 30 71 70 29 72 30 31 72 71 30 73 31 32 73 72 31 74 73 32 75 32 33 75 74 32 76 33 34 76 75 33 77 76 34 78 34 35 78 77 34 79 78 35 80 35 36 80 79 35 81 36 37 81 80 36 82 81 37 83 37 2 83 82 37 39 83 2 
+134 134 1 0.285397643119074
+-15.7008382389641 56.0020955974101 -113.705029433785 -15.7008382389641 56.0020955974101 -113.705029433785 -26.15234778884 63.1675721644597 -100.560897502478 -35.7419813011805 68.8504258208211 -84.9337780785615 -44.129878155887 72.8492538575074 -67.3775028064806 -51.0187677823276 75.0223361374071 -48.5142734203172 -56.1645050526181 75.2926577161826 -29.0126106542571 -59.3847228870057 73.6506382840889 -9.56366158833183 -60.5652954194041 70.1544716961558 9.14329489299404 -59.6643826657913 64.9280635576406 26.4452764326035 -57.0987666580374 58.8968618542912 40.3076192149857 -53.4294430847669 52.5406890590679 51.0550161027971 -49.0972085531216 46.1944893354701 59.1108768706067 -44.4333424766111 40.0783971151619 64.9197814457979 -39.1184755100888 33.6758483083243 69.2705088070589 -33.8454320444925 27.7494338100392 71.8839929378139 -28.758849752436 22.3456247739376 73.1528999139946 -23.4021849567436 16.9316617187845 73.3820929518374 -17.8291688994329 11.5618506297938 72.5692730785572 -12.0957029829553 6.29005461586162 70.7225934683758 -6.25929803849168 1.16915362342743 67.8605776602579 -0.378497450506579 -3.7494859878304 64.0119337533488 5.48771007595662 -8.41652668692407 59.2152664438707 13.1850118517501 -14.1673812905526 51.4294777552111 21.5179016408397 -19.8761997788089 40.9331925518778 29.3243252252944 -24.6559270855357 28.8264074409663 36.4282825691065 -28.3988016770436 15.3820764317496 42.6696111170697 -31.020438424118 0.903309228194225 47.9075967460911 -32.4617311103343 -14.2834625430266 52.0241462410971 -32.6901850136309 -29.835844909864 54.9264497703497 -31.7006495173688 -45.4032010119227 56.5490733332302 -29.5154342337651 -60.6345563978594 56.8554340051248 -26.1838060216367 -75.1865119339515 55.8386247192184 -21.7808782384584 -88.7309859230394 53.5215699900466 -16.4059172691496 -100.962610883587 49.9565090679337 -10.180104511812 -111.605618224486 45.7467859202098 -3.96505935554597 -119.626906258655 41.2123302056887 2.02704978893822 -125.457519978507 36.0407250447429 8.30492495168059 -129.882599985693 30.3085190393574 14.7756428424864 -132.836647527374 24.1005586428761 21.3434257689438 -134.275937647279 17.5087322873698 27.911059310092 -134.179166389846 10.6306102776736 34.3813312561279 -132.547766135205 3.56800058398993 40.6584705153853 -129.4058843975 -3.57455809020503 46.6495646902995 -124.800026400377 -9.68038132273777 51.4898632858793 -119.737927852565 -66.815310478106 -46.2268488808736 -267.048446151211 -66.815310478106 -46.2268488808736 -267.048446151211 -79.3651782990241 -45.2441535036862 -263.520287129029 -91.5337247367431 -46.1874238649436 -258.835258075618 -102.951214665335 -49.0279991720368 -253.135711228025 -113.270733430847 -53.6795699816602 -246.594824433106 -122.178727677519 -60.000800668572 -239.411339226274 -129.404532507827 -67.7996238370472 -231.803522170521 -134.728595498437 -76.8390761915069 -224.002532937345 -137.989147689484 -86.8444985463442 -216.245400637104 -139.087118852563 -97.5118812062954 -208.767821809443 -137.989147689484 -108.517101147194 -201.796998903204 -134.728595498437 -119.525770330046 -195.544736844985 -129.404532507827 -130.203395912386 -190.201007453629 -122.178727677519 -140.225543644033 -185.928177242634 -113.270733430847 -149.287695637613 -182.856073995804 -102.951214665335 -157.114502990471 -181.078042015736 -91.5337247367432 -163.468152121746 -180.648105904417 -79.3651782990242 -168.155590617686 -181.57932905303 -66.8153104781061 -171.03439303155 -183.843416717426 -54.265442657188 -172.017088408738 -187.371575739607 -42.0968962194689 -171.07381804748 -192.056604793018 -30.6794062908774 -168.233242740387 -197.756151640611 -20.359887525365 -163.581671930764 -204.297038435531 -11.4518932786934 -157.260441243852 -211.480523642362 -4.22608844838504 -149.461618075377 -219.088340698115 1.09797454222478 -140.422165720917 -226.889329931292 4.35852673327223 -130.41674336608 -234.646462231532 5.45649789635139 -119.749360706129 -242.124041059193 4.3585267332723 -108.74414076523 -249.094863965432 1.0979745422249 -97.7354715823781 -255.347126023651 -4.22608844838484 -87.0578460000386 -260.690855415008 -11.4518932786931 -77.0356982683915 -264.963685626003 -20.3598875253647 -67.9735462748115 -268.035788872832 -30.679406290877 -60.1467389219535 -269.8138208529 -42.0968962194685 -53.7930897906782 -270.24375696422 -54.2654426571875 -49.105651294738 -269.312533815607 -22.2864273634798 -47.9648205226098 -2.24220467505033 -24.4012506975562 -46.557797906447 -1.17173881126472 -26.7591109772225 -45.1995399293933 -0.418292057057864 -29.3260653053367 -43.8729869733416 0.0224904104707955 -32.0351144673397 -42.5866519711117 0.146361916534837 -34.6897352127164 -41.4087440370025 -0.0250214194525966 -37.9679871091143 -40.0451150014351 -0.60083769088918 -41.3392128391102 -38.7387862395033 -1.59395083483286 -44.4612057385451 -37.6196675565716 -2.87447840889123 -48.2609945155088 -36.39591905645 -4.91638206633261 -52.1002173490519 -35.3574885454383 -7.55462201153391 -55.1217491942948 -34.7272235169081 -10.0755905380922 -58.2901589522796 -34.3050056113102 -13.1869689750541 -61.4633690248443 -34.213103102464 -16.8444660330036 -64.2692959516993 -34.5093370691993 -20.5980527290128 -66.7495015010916 -35.1754034210909 -24.3919261552404 -68.9381654584316 -36.1940274613222 -28.1843455811586 -71.4459138248419 -38.0741764539622 -33.1830132480231 -73.7443262264718 -40.8674410502666 -38.6551045773484 -75.4940486033119 -44.3483597547277 -43.8897654746452 -76.6534823422074 -48.5621360553353 -48.8636323445793 -77.0482239734598 -53.1303440341735 -53.1000282921383 -76.7379777937274 -57.0754558821442 -55.9767291108246 -76.4061164945813 -58.7938425396278 -57.017880049682 -75.9682730815984 -60.4304487807114 -57.8886231931889 -75.0135518414438 -62.9936011576077 -59.0027125667279 -73.8631613071862 -65.2269642568203 -59.6981790068215 -72.515103840102 -67.2242148052284 -60.0628180084393 -71.0269460748299 -68.9531410939977 -60.1337420604279 -69.4720247510213 -70.3968013049681 -59.9651652629317 -67.8625873353056 -71.6044565684176 -59.6061891116245 -66.4238864197703 -72.4906533578111 -59.1649617670997 -64.6590113659328 -73.375413455398 -58.5015445205678 -62.8126560037815 -74.1022249912955 -57.6907151823445 -60.5210650121961 -74.7680674691023 -56.5491723572055 -57.2959718283776 -75.3364883334365 -54.7365854351627 -53.950648133433 -75.5460428374445 -52.6473959588335 -49.7873068077512 -75.3517766317091 -49.7968596147923 -43.9338950130003 -74.3464030233711 -45.3713274012454 -37.9344192621972 -72.5181438755294 -40.3335100180792 -30.7004823416434 -69.2391388731129 -33.4376561658325 -23.6892694064044 -64.6037284452599 -25.2821232244669 -19.7012757088791 -60.6164585842255 -18.9205808886417 -18.2178719308714 -58.2391407790846 -15.3050888503074 -17.5857420686368 -56.3657771413405 -12.546236284659 -17.4868157734707 -54.5764206605305 -10.00474204745 -17.8032583705486 -53.1508589585831 -8.06945954976648 -18.4644050596923 -51.7856449514469 -6.31816713625769 -19.4199997641545 -50.504854994627 -4.79482944173709 -20.8732719405704 -49.078213100337 -3.27314228350858 -21.5551378668998 -48.5174632673474 -2.73513548959891 0 2191.25284262464 6.28318530717959 2191.25284262464 0.188535365466375 2202.82841860735 0.377070730941541 2215.83266433576 0.565606096417356 2229.80470391073 0.754141461875146 2244.2493623891 0.9426768273232 2258.65471504074 1.1312121927849 2272.51023015794 1.31974755826542 2285.32486248635 1.50828292374811 2296.64445610695 1.67796475267081 2305.22093375783 1.83067839869405 2311.42117237675 1.96812068011583 2315.64588238386 2.09181873339922 2318.28064937068 2.21551678668491 2319.76714341421 2.3268450346428 2320.10407080595 2.42704045780544 2319.59244864553 2.52723588096854 2318.31395580075 2.62743130413111 2316.28141648357 2.7276267272918 2313.51521854804 2.82782215044748 2310.04310896911 2.92801757359851 2305.89991551908 3.02821299675011 2301.12719744964 3.16180689428471 2293.86790813911 3.31210002901051 2284.62772411998 3.46239316374259 2274.45218357779 3.61268629848579 2263.57069959366 3.76297943323685 2252.22860111976 3.91327256798843 2240.68160187766 4.06356570273708 2229.19003518372 4.21385883748551 2218.01298462731 4.36415197223525 2207.40244286197 4.51444510697952 2197.59763025523 4.66473824171966 2188.81960159644 4.8150313764585 2181.26626240252 4.96532451119757 2175.10790657125 5.10058833246398 2170.87355383284 5.22232577160434 2168.1896954466 5.34406321074441 2166.61523418097 5.46580064988361 2166.1734746831 5.58753808902201 2166.87095570686 5.70927552816037 2168.69735336982 5.83101296729955 2171.62563392478 5.95275040643995 2175.61245382851 6.07448784558093 2180.5988012772 6.17883657638065 2185.61290802981 6.28318530717959 2000 0 2000 0.174532925199433 2000 0.349065850398866 2000 0.523598775598299 2000 0.698131700797732 2000 0.872664625997165 2000 1.0471975511966 2000 1.22173047639603 2000 1.39626340159546 2000 1.5707963267949 2000 1.74532925199433 2000 1.91986217719376 2000 2.0943951023932 2000 2.26892802759263 2000 2.44346095279206 2000 2.61799387799149 2000 2.79252680319093 2000 2.96705972839036 2000 3.14159265358979 2000 3.31612557878922 2000 3.49065850398866 2000 3.66519142918809 2000 3.83972435438752 2000 4.01425727958696 2000 4.18879020478639 2000 4.36332312998582 2000 4.53785605518525 2000 4.71238898038469 2000 4.88692190558412 2000 5.06145483078355 2000 5.23598775598299 2000 5.41052068118242 2000 5.58505360638185 2000 5.75958653158128 2000 5.93411945678072 2000 6.10865238198015 2000 2.93043396908087 2223.28919457267 2.89642387523164 2224.33435159411 2.85995058442315 2225.03430770081 2.82130086991154 2225.4107448892 2.78128709830523 2225.47361418383 2.74260274940947 2225.25634285161 2.69533139606102 2224.64740344213 2.64714202438972 2223.64840560466 2.60282817657799 2222.38550583397 2.54930376997572 2220.38692553223 2.49581545704875 2217.80061667313 2.45434493881637 2215.30869761053 2.41177977276453 2212.19293685197 2.37061356671161 2208.46146312643 2.3360966740555 2204.54363916954 2.30781523673033 2200.48288294275 2.28542283861992 2196.31276026645 2.26428453868698 2190.62970402847 2.25201538088333 2184.13493097198 2.25188892092698 2177.60960276744 2.26477820891996 2171.05940738169 2.29021891494358 2165.11542504108 2.32052670998118 2160.78309893619 2.33616775626278 2159.118498416 2.35254484799285 2157.66256647553 2.38142021811138 2155.65440515621 2.41035798689933 2154.21046349454 2.43999365574336 2153.21081006615 2.46941460130909 2152.62752123378 2.49764173685159 2152.40658472886 2.52487764095403 2152.47902731639 2.54789459147794 2152.74361310498 2.57474838126565 2153.27428879038 2.60149769910654 2154.02936067778 2.63312095676921 2155.2011768165 2.67521185369625 2157.21258818941 2.71644533542759 2159.66973008284 2.76495178706568 2163.17178316114 2.82881644394051 2168.82188777167 2.88977044068275 2175.4418007235 2.95740005785278 2184.65683698096 3.01483919883019 2195.54736713989 3.03949663673255 2203.84506979348 3.04315517788353 2208.41109862436 3.03937497188613 2211.79340050999 3.02951695455883 2214.81401966352 3.01680611181455 2217.04311961515 3.00027403441843 2219.00031606813 2.98072483236336 2220.65092104189 2.95432116801802 2222.24515388318 2.94263952511239 2222.79401603412 1 48 49 3 1 49 3 49 50 4 3 50 4 50 51 5 51 52 5 4 51 6 52 53 6 5 52 7 53 54 7 6 53 8 54 55 8 7 54 9 55 56 9 8 55 10 56 57 10 9 56 11 57 58 11 10 57 12 58 59 12 11 58 13 59 60 13 12 59 14 13 60 103 60 61 103 14 60 104 103 61 102 14 103 105 104 61 106 105 61 107 106 61 108 107 61 108 61 62 109 108 62 15 102 101 15 14 102 15 101 100 110 109 62 111 110 62 112 111 62 113 112 62 16 15 100 16 98 97 16 99 98 16 100 99 114 113 62 114 62 63 115 114 63 116 115 63 117 116 63 17 16 97 17 95 94 17 96 95 17 97 96 118 117 63 119 118 63 18 17 94 18 93 92 18 94 93 120 119 63 120 63 64 121 120 64 19 18 92 19 91 90 19 92 91 122 121 64 20 19 90 20 89 88 20 90 89 123 64 65 123 122 64 124 123 65 21 20 88 21 87 86 21 88 87 125 65 66 125 124 65 22 133 132 22 134 133 22 84 134 22 85 84 22 86 85 22 21 86 126 125 66 127 126 66 23 129 128 23 130 129 23 131 130 23 132 131 23 22 132 24 127 66 24 128 127 24 23 128 25 24 66 25 66 67 26 25 67 26 67 68 27 26 68 27 68 69 28 27 69 28 69 70 29 28 70 29 70 71 30 29 71 30 71 72 31 30 72 31 72 73 32 31 73 33 32 73 33 73 74 34 33 74 34 74 75 35 34 75 35 75 76 36 35 76 36 76 77 37 36 77 37 77 78 38 37 78 39 38 78 39 78 79 40 39 79 40 79 80 41 40 80 42 80 81 42 41 80 43 81 82 43 42 81 44 43 82 45 82 83 45 44 82 46 83 47 46 45 83 2 46 47 
+83 81 1 0.507480342377606
+-20.3233398741743 67.5583496854358 -141.440039245046 -20.3233398741743 67.5583496854358 -141.440039245046 -35.1855262004392 77.7035384339573 -122.572048934072 -48.6971017063958 85.5659924533034 -99.9755629876303 -60.3109095633921 90.827318421781 -74.5656354335556 -69.556643827254 93.2744567720475 -47.3712517791741 -76.0598946716704 92.8083096262563 -19.4936598183435 -79.5573102686927 89.4477538055348 7.93822585263177 -79.9072613297378 83.3288764053193 33.8135396976741 -77.5167641728392 75.6661584208742 54.9024230078599 -73.2374600487666 67.2365406565743 71.5036775687694 -67.7578354967252 58.5988160312175 84.1360778620306 -61.6071971021387 50.1323916335827 93.399221874224 -55.17556563886 42.0781423884772 99.8896930015315 -48.7388800846726 34.5749815850854 104.155593998349 -41.7644254490259 26.9200061348011 106.877677256899 -34.3321634064522 19.2009798395967 108.024734267422 -26.5273043640062 11.5064008402688 107.583614094949 -18.4393305294195 3.92448699093632 105.559374153933 -10.1609700033356 -3.45783555299158 101.975222225309 -1.78713365759029 -10.5559289376054 96.8722503807827 6.58617301183938 -17.2884139780553 90.3089638648638 14.8629505816812 -23.5781031656799 82.3606103359952 25.5847810319654 -31.1517610854722 69.7679202140274 36.9688872129791 -38.3875287424818 53.1745661180107 47.3532434132246 -44.0845718143738 34.4253136045972 56.4702938133358 -48.0961044053576 14.0032423680875 64.0851350795899 -50.3187682649458 -7.56546725857611 70.0015687134911 -50.6952958419625 -29.7250914861143 74.0671561605332 -49.2159857988918 -51.9046814465653 76.1771464318613 -45.9189529695317 -73.5327738493182 76.2771750425701 -40.8891463197232 -94.0521148913876 74.3646647277448 -34.2561602136706 -112.934018056297 70.4888918464067 -26.1908953791826 -129.691985868896 65.4036338933146 -17.8786297904701 -142.600016411378 59.6230083497372 -9.69229948335874 -152.222835465514 53.528373648904 -1.87170173475039 -159.126687656614 47.39181209029 5.44193016641362 -163.834969026814 40.7086194880131 12.9320315167513 -167.062604019058 33.5530107685251 20.5154269008719 -168.773750677588 26.0044469030168 28.1079049000452 -168.949407212248 18.1467525162495 35.6251532357201 -167.587623007879 10.0671850382717 42.9836950330629 -164.703520285338 1.85546573582257 50.1018158075777 -160.329126173601 -6.39721661645979 56.9004708808912 -154.513017057726 -13.4071402034809 62.3956703166524 -148.454120452686 40.0891862868637 188.383402007512 39.797539238068 40.0891862868637 188.383402007512 39.797539238068 23.3560291923062 189.693662510428 44.5017512676428 7.13130060868077 188.435968695418 50.7484566721911 -8.09201929610791 184.648534952628 58.3478524689813 -21.8513776501244 178.446440539796 67.0690348622077 -33.7287033123532 170.018132957247 76.6470151379833 -43.3631097527643 159.619702065947 86.7907712123205 -50.4618604069107 147.567098926667 97.192090189889 -54.8092633283073 134.226535786884 107.534933256877 -56.2732248790795 120.003358906949 117.505038360424 -54.8092633283073 105.329732319084 126.799468902077 -50.4618604069107 90.6515067419486 135.135818313035 -43.3631097527644 76.4146726321626 142.260790834843 -33.7287033123533 63.0518089899665 147.957897782837 -21.8513776501245 50.9689396651932 152.054035445276 -8.09201929610798 40.5331965280492 154.424744752034 7.13130060868068 32.0616643530156 154.99799290046 23.3560291923061 25.8117463584287 153.756362035643 40.0891862868635 21.973343139943 150.737578483114 56.822343381421 20.6630826370263 146.033366453539 73.0470719650464 21.9207764520362 139.786661048991 88.2703918698351 25.708210194827 132.187265252201 102.029750223852 31.9103046076583 123.466082858974 113.90707588608 40.3386121902073 113.888102583199 123.541482326492 50.7370430815076 103.744346508861 130.640232980638 62.789646220787 93.343027531293 134.987635902035 76.1302093605701 83.0001844643055 136.451597452807 90.3533862405051 73.0300793607581 134.987635902035 105.02701282837 63.7356488191055 130.640232980638 119.705238405506 55.3992994081471 123.541482326492 133.942072515292 48.2743268863385 113.907075886081 147.304936157488 42.5772199383448 102.029750223852 159.387805482261 38.4810822759056 88.2703918698356 169.823548619405 36.1103729691483 73.0470719650469 178.295080794439 35.5371248207221 56.8223433814216 184.544998789026 36.7787556855393 -8.88178419700125e-16 173.957025235878 6.28318530717958 173.957025235877 0.201575822238879 190.535817917975 0.403151644497022 209.244850609485 0.604727466740452 229.326493309338 0.806303288942124 249.967531601463 1.00787911114277 270.332098122658 1.20945493337517 289.595521339622 1.41103075561639 306.977720976516 1.5924489956323 320.429436598651 1.75572541169211 330.377924241926 1.90267418610797 337.353810447214 2.0349280830181 341.899181637182 2.15395659018577 344.516884275958 2.26108224660634 345.646882700112 2.36820790301701 345.601649666387 2.47533355944112 344.381703778192 2.58245921590188 342.001031646771 2.68958487241637 338.486927527655 2.79671052899083 333.879680391699 2.90383618561884 328.232112019353 3.01096184228298 321.608971410739 3.11808749895964 314.086192449228 3.26092170784184 302.806817695584 3.42161019276766 288.677386280077 3.58229867761381 273.374679083942 3.74298716239411 257.292974555001 3.90367564714655 240.846622314493 4.06436413194624 224.459367190358 4.22505261675518 208.553431330417 4.38574110160767 193.538635633286 4.54642958656816 179.801840449197 4.70711807166649 167.696978092757 4.86780655683732 157.5359337259 5.01242619344128 150.270485402991 5.14258386626291 145.385906151398 5.25972577167464 142.401935521473 5.36515348644875 140.896147764946 5.47058120115759 140.525751767202 5.57600891583603 141.294860677533 5.68143663051811 143.194933771424 5.78686434522856 146.2048712861 5.89229205997901 150.29124872518 5.99771977477058 155.408688034393 6.10314748960075 161.500361524681 6.19316639838097 167.422112982515 0 400 6.28318530717959 400 0.174532925199433 400 0.349065850398866 400 0.523598775598299 400 0.698131700797732 400 0.872664625997165 400 1.0471975511966 400 1.22173047639603 400 1.39626340159546 400 1.5707963267949 400 1.74532925199433 400 1.91986217719376 400 2.0943951023932 400 2.26892802759263 400 2.44346095279206 400 2.61799387799149 400 2.79252680319093 400 2.96705972839036 400 3.14159265358979 400 3.31612557878922 400 3.49065850398866 400 3.66519142918809 400 3.83972435438752 400 4.01425727958696 400 4.18879020478639 400 4.36332312998582 400 4.53785605518525 400 4.71238898038469 400 4.88692190558412 400 5.06145483078355 400 5.23598775598299 400 5.41052068118242 400 5.58505360638185 400 5.75958653158128 400 5.93411945678072 400 6.10865238198015 400 72 29 30 72 71 29 47 1 3 49 47 3 73 30 31 50 3 4 73 72 30 50 49 3 51 4 5 63 17 18 51 50 4 74 31 32 63 18 19 63 62 17 74 73 31 52 51 5 52 5 6 53 6 7 53 52 6 75 32 33 64 19 20 54 53 7 64 63 19 75 74 32 8 54 7 55 54 8 76 75 33 76 33 34 21 64 20 76 34 35 9 55 8 56 55 9 77 76 35 77 35 36 57 9 10 57 56 9 65 21 22 65 64 21 78 77 36 78 36 37 58 57 10 78 37 38 58 10 11 12 58 11 79 78 38 79 38 39 59 58 12 66 22 23 66 23 24 66 65 22 80 79 39 80 39 40 80 40 41 13 59 12 67 24 25 81 80 41 67 66 24 81 41 42 81 42 43 60 13 14 82 81 43 60 59 13 82 43 44 68 25 26 68 67 25 83 82 44 83 44 45 83 45 46 61 14 15 69 26 27 61 60 14 48 46 2 69 68 26 48 83 46 16 61 15 70 27 28 70 69 27 71 28 29 71 70 28 62 16 17 62 61 16 
+90 90 1 1.19015908239817e-13
+-20.3233398741743 67.5583496854358 -141.440039245046 -35.1855262004392 77.7035384339573 -122.572048934072 -48.6971017063958 85.5659924533034 -99.9755629876303 -60.3109095633921 90.827318421781 -74.5656354335556 -69.556643827254 93.2744567720475 -47.3712517791741 -76.0598946716704 92.8083096262563 -19.4936598183435 -79.5573102686927 89.4477538055348 7.93822585263177 -79.9072613297378 83.3288764053193 33.8135396976741 -77.5167641728392 75.6661584208742 54.9024230078599 -73.2374600487666 67.2365406565743 71.5036775687694 -67.7578354967252 58.5988160312175 84.1360778620306 -61.6071971021387 50.1323916335827 93.399221874224 -55.17556563886 42.0781423884772 99.8896930015315 -48.7388800846726 34.5749815850854 104.155593998349 -41.7644254490259 26.9200061348011 106.877677256899 -34.3321634064522 19.2009798395967 108.024734267422 -26.5273043640062 11.5064008402688 107.583614094949 -18.4393305294195 3.92448699093632 105.559374153933 -10.1609700033356 -3.45783555299158 101.975222225309 -1.78713365759029 -10.5559289376054 96.8722503807827 6.58617301183938 -17.2884139780553 90.3089638648638 14.8629505816812 -23.5781031656799 82.3606103359952 25.5847810319654 -31.1517610854722 69.7679202140274 36.9688872129791 -38.3875287424818 53.1745661180107 47.3532434132246 -44.0845718143738 34.4253136045972 56.4702938133358 -48.0961044053576 14.0032423680875 64.0851350795899 -50.3187682649458 -7.56546725857611 70.0015687134911 -50.6952958419625 -29.7250914861143 74.0671561605332 -49.2159857988918 -51.9046814465653 76.1771464318613 -45.9189529695317 -73.5327738493182 76.2771750425701 -40.8891463197232 -94.0521148913876 74.3646647277448 -34.2561602136706 -112.934018056297 70.4888918464067 -26.1908953791826 -129.691985868896 65.4036338933146 -17.8786297904701 -142.600016411378 59.6230083497372 -9.69229948335874 -152.222835465514 53.528373648904 -1.87170173475039 -159.126687656614 47.39181209029 5.44193016641362 -163.834969026814 40.7086194880131 12.9320315167513 -167.062604019058 33.5530107685251 20.5154269008719 -168.773750677588 26.0044469030168 28.1079049000452 -168.949407212248 18.1467525162495 35.6251532357201 -167.587623007879 10.0671850382717 42.9836950330629 -164.703520285338 1.85546573582257 50.1018158075777 -160.329126173601 -6.39721661645979 56.9004708808912 -154.513017057726 -13.4071402034809 62.3956703166524 -148.454120452686 -15.7008382389641 56.0020955974101 -113.705029433785 -26.15234778884 63.1675721644597 -100.560897502478 -35.7419813011805 68.8504258208211 -84.9337780785615 -44.129878155887 72.8492538575074 -67.3775028064806 -51.0187677823276 75.0223361374071 -48.5142734203172 -56.1645050526181 75.2926577161826 -29.0126106542571 -59.3847228870057 73.6506382840889 -9.56366158833183 -60.5652954194041 70.1544716961558 9.14329489299404 -59.6643826657913 64.9280635576406 26.4452764326035 -57.0987666580374 58.8968618542912 40.3076192149857 -53.4294430847669 52.5406890590679 51.0550161027971 -49.0972085531216 46.1944893354701 59.1108768706067 -44.4333424766111 40.0783971151619 64.9197814457979 -39.1184755100888 33.6758483083243 69.2705088070589 -33.8454320444925 27.7494338100392 71.8839929378139 -28.758849752436 22.3456247739376 73.1528999139946 -23.4021849567436 16.9316617187845 73.3820929518374 -17.8291688994329 11.5618506297938 72.5692730785572 -12.0957029829553 6.29005461586162 70.7225934683758 -6.25929803849168 1.16915362342743 67.8605776602579 -0.378497450506579 -3.7494859878304 64.0119337533488 5.48771007595662 -8.41652668692407 59.2152664438707 13.1850118517501 -14.1673812905526 51.4294777552111 21.5179016408397 -19.8761997788089 40.9331925518778 29.3243252252944 -24.6559270855357 28.8264074409663 36.4282825691065 -28.3988016770436 15.3820764317496 42.6696111170697 -31.020438424118 0.903309228194225 47.9075967460911 -32.4617311103343 -14.2834625430266 52.0241462410971 -32.6901850136309 -29.835844909864 54.9264497703497 -31.7006495173688 -45.4032010119227 56.5490733332302 -29.5154342337651 -60.6345563978594 56.8554340051248 -26.1838060216367 -75.1865119339515 55.8386247192184 -21.7808782384584 -88.7309859230394 53.5215699900466 -16.4059172691496 -100.962610883587 49.9565090679337 -10.180104511812 -111.605618224486 45.7467859202098 -3.96505935554597 -119.626906258655 41.2123302056887 2.02704978893822 -125.457519978507 36.0407250447429 8.30492495168059 -129.882599985693 30.3085190393574 14.7756428424864 -132.836647527374 24.1005586428761 21.3434257689438 -134.275937647279 17.5087322873698 27.911059310092 -134.179166389846 10.6306102776736 34.3813312561279 -132.547766135205 3.56800058398993 40.6584705153853 -129.4058843975 -3.57455809020503 46.6495646902995 -124.800026400377 -9.68038132273777 51.4898632858793 -119.737927852565 -76.2838742534622 130.939228840253 -93.9667587485192 111.778694102172 -109.080479967142 88.8318541473326 -121.013001528565 63.0279507337926 -129.281111045566 35.4119235839675 -133.54998800959 7.10209511914772 -133.646762485484 -20.7551164686755 -129.567515550891 -47.0316218948171 -122.45881895172 -68.4474841351715 -113.472254102881 -85.3061378374174 -103.489780767165 -98.134400978066 -93.1539565457555 -107.541168190908 -82.9108920653977 -114.132272778711 -73.0539321772548 -118.464315719776 -62.7093629585985 -121.228604336411 -51.995784231243 -122.393446237135 -41.0360264873239 -121.945486584357 -29.9557426455931 -119.88986120673 -18.8819674487744 -116.250137717206 -7.94166101839571 -111.068045311867 2.73974673485171 -104.402996347373 13.0397941569846 -96.331405182104 25.9766580485853 -83.5434679110357 39.1428971042896 -66.6928371688154 50.5141635805865 -47.6528812341667 59.79747364096 -26.9141698557147 66.7536402254006 -5.01104168753265 71.2034357713845 17.49216309457 73.0322100617622 40.0156431742928 72.1928442194208 61.9790748366653 68.7069647382289 82.8165641696147 62.6643862704207 101.991227477657 54.2207975271558 119.009024239309 44.7473177796394 132.117191221226 34.8711885850842 141.889210165808 25.031633358297 148.900105208362 15.520910354617 153.681387542279 5.49887808897302 156.959066371421 -4.92317166062503 158.696744017654 -15.6295050373708 158.875124071854 -26.5012312967644 157.492225674964 -37.4176230540425 154.56340551486 -48.257456926969 150.121187294764 -58.9003596865348 144.214900566898 -67.7428169755161 138.062061978265 -64.8437663704014 102.774193232797 -77.3008567177488 89.4262641571052 -88.1001359603225 73.5568493628891 -96.8588731277185 55.7283675437958 -103.266654913614 36.5726675477146 -107.096386853094 16.7686353894982 -108.212341645413 -2.98186575317497 -106.57496938627 -21.9788698641931 -102.24229923294 -39.5491151772043 -96.1634311327942 -53.6263908199919 -89.0743346658711 -64.5404239532975 -81.5235413915339 -72.7211892358082 -73.9009597789453 -78.6201597180231 -65.6154956276203 -83.0383442393962 -57.6962829557461 -85.6923499204162 -50.2784561103049 -86.9809310462165 -42.6624721193354 -87.2136776764053 -34.9247248388335 -86.3882551930828 -27.1428294991065 -84.5129431838114 -19.3948441675904 -81.6065523913332 -11.7584867696872 -77.698236028146 -4.31035552147475 -72.8271973485883 5.19892704887167 -64.9206915589569 15.1279141912262 -54.2616635467204 24.0276668354178 -41.9671651470054 31.6975352512734 -28.3143824665661 37.9645981128155 -13.6111248648827 42.6875611029523 1.81111477409721 45.7599424701708 17.6046337280685 47.1124737171351 33.4133585820396 46.7146612963724 48.8808730957907 44.5754741037695 63.6584538005116 40.7431412699716 77.4129321577544 35.3040648085826 89.8342060240789 28.3808716361023 100.642231071364 21.0094472760524 108.787887576893 13.5660418816497 114.708903799728 5.47003670370785 119.202593789974 -3.15873353359234 122.202443249691 -12.1925482719411 123.664049275881 -21.4976916016179 123.5657775994 -30.9364314856656 121.909082809145 -40.3690584296163 118.718486821653 -49.6559534209715 114.041215914787 -57.3960303933239 108.900630538478 65 20 21 65 64 20 51 5 6 51 6 52 43 44 88 43 88 87 66 65 21 22 66 21 67 66 22 50 5 51 29 75 28 29 76 75 42 43 87 42 87 86 68 67 22 4 5 50 23 68 22 49 4 50 69 68 23 57 10 11 24 69 23 56 9 10 56 10 57 58 57 11 58 11 12 70 69 24 58 12 13 48 3 4 48 4 49 25 70 24 55 8 9 41 42 86 55 9 56 59 13 14 30 76 29 71 70 25 30 77 76 47 3 48 59 58 13 60 14 15 2 3 47 40 41 86 60 59 14 40 86 85 31 78 77 54 8 55 26 72 71 26 71 25 61 60 15 31 77 30 61 15 16 61 16 17 39 40 85 46 2 47 39 85 84 38 39 84 62 17 18 62 61 17 32 78 31 1 46 90 32 79 78 32 80 79 1 2 46 27 73 72 27 72 26 53 7 8 37 38 84 53 8 54 37 84 83 33 80 32 63 18 19 33 81 80 74 73 27 63 62 18 36 37 83 45 1 90 36 83 82 45 90 89 35 36 82 35 82 81 34 81 33 64 19 20 34 35 81 64 63 19 52 6 7 44 45 89 52 7 53 44 89 88 28 74 27 28 75 74 
+104 102 1 0.227238537066723
+-23.615004462056 -64.586253346542 17.6300532161252 -230 -219.375 -33.9661956683608 -23.615004462056 -64.586253346542 17.6300532161252 -29.009902385954 -61.1939812514149 20.1597173165064 -34.9880216893461 -57.7257904899999 21.7960139557403 -41.4383707111624 -54.1158301572543 22.5063167604849 -48.047997153028 -50.4592292690093 22.2379809934335 -54.1669555674689 -47.0798334510796 21.1220432090507 -59.7589921082537 -43.9982887249958 19.3520134823694 -64.8865235104902 -41.1981153358782 17.0566785916219 -71.0612883280843 -37.9100781558483 13.3518439767453 -75.8290514087411 -35.4955498492353 9.70207743510968 -81.3803608128641 -32.9311767839816 4.45839451219417 -86.8095492185451 -30.8540237583208 -1.86578023339614 -91.504364938426 -29.6119482005143 -8.44064584847071 -95.5887140334666 -29.1633807999117 -15.1100911550616 -98.9796456750289 -29.418761209448 -21.3866567995678 -102.724447257937 -30.5958582498838 -29.1535718421494 -106.377877012087 -32.9408426023242 -37.6158839341697 -109.553573630587 -36.2355933729998 -45.7121955785007 -112.331994542397 -40.368187691758 -53.4105544494629 -114.756424008461 -45.2558375522077 -60.7009318693995 -117.443168108153 -52.8399371290984 -69.7587551094942 -119.623963487137 -62.790420160154 -79.0215044479946 -120.462859312851 -70.9507526355449 -85.0213457209572 -120.335278752761 -80.5526321709034 -90.5370522289084 -119.668251389871 -85.9023486069992 -92.9070773357592 -118.187485076373 -92.2850797175821 -95.0288303012165 -116.378861706727 -97.2728988179204 -96.0758006310156 -114.382223865994 -101.282423794925 -96.4451327921304 -112.133720795134 -104.755808466805 -96.3368525767004 -109.401453386115 -108.039293558505 -95.7533114386424 -106.643883919347 -110.638203360024 -94.8333887760415 -104.143222818954 -112.536950919873 -93.7948816450386 -101.08251619837 -114.400347580557 -92.3250301583427 -97.8840965362817 -115.912305919513 -90.6066511098729 -93.9212828113656 -117.286755951375 -88.2743686229117 -89.70074191771 -118.252094756809 -85.5920891133436 -84.4073553376621 -118.863644023118 -81.9937787802057 -77.046745623355 -118.801498937649 -76.6351813713114 -66.7091584705236 -117.249618090693 -68.5235877941795 -56.0019755027259 -114.126133203767 -59.45601641046 -42.8851767117907 -108.398097845665 -47.3166375408164 -29.7220271593066 -100.385601686676 -33.4054792397095 -18.8151484287358 -90.9746030635084 -18.7333275909045 -15.7685988483331 -87.2089827221248 -13.049273809458 -13.4651352372019 -83.049598096038 -6.80589983557332 -12.614831921392 -79.81852689937 -1.97740214405515 -12.6856825931079 -77.0008060440776 2.18698737320632 -13.3460744639715 -74.7934810382628 5.37767943676456 -14.6865704867699 -72.4348160589257 8.6584385189762 -16.7515671724958 -70.0155003182394 11.8064617072594 -18.4254196405347 -68.4637193244915 13.6684561861196 -20.875812277194 -66.5124362699467 15.7956136581649 -230 -219.375 -33.9661956683608 -230 -228.881716692235 -40.6087857661369 -230 -236.9709618013 -48.4257258369284 -230 -242.805639017784 -56.2410404649089 -230 -246.742884773844 -63.7184466407158 -230 -249.341225775738 -71.4392616329755 -230 -250.485261015954 -78.4504041091191 -230 -250.528239799038 -84.6996216675505 -230 -249.635421612559 -90.7940115327487 -230 -247.820195129222 -96.6421824310307 -230 -245.109781426772 -102.156435380393 -230 -241.544825781595 -107.254078821615 -230 -237.178788153464 -111.85866865821 -230 -232.07714150171 -115.901154609633 -230 -226.316389954833 -119.320915687053 -230 -219.982921557065 -122.066669263747 -230 -213.171712796046 -124.097240107716 -230 -205.984904338481 -125.382177844134 -230 -198.530269331998 -125.902213588185 -230 -190.91959724251 -125.649548900638 -230 -183.267017462987 -124.627972732992 -230 -175.687287832766 -122.852804608479 -230 -168.294073732698 -120.350664890989 -230 -161.198243562765 -117.159075586953 -230 -154.50620616313 -113.325897666546 -230 -148.318315110612 -108.908613342121 -230 -142.727363819678 -103.973464066811 -230 -137.817194015405 -98.5944571798348 -230 -133.66143844567 -92.8522560948285 -230 -130.322416686844 -86.8329706738959 -230 -127.850200601432 -80.6268659268985 -230 -126.281863462046 -74.3270084002804 -230 -125.6409240018 -68.0278705541424 -230 -125.936993728148 -61.8239140562802 -230 -127.165632789033 -55.8081732380633 -230 -129.308416552759 -50.070859954605 -230 -132.333211903178 -44.6980107706956 -230 -136.194659106859 -39.7701967592538 -230 -140.834852026189 -35.3613152601185 -230 -146.184206477942 -31.5374817179256 -230 -152.162503715443 -28.3560382170353 -230 -158.680093386308 -25.8646935814853 -230 -165.639237926228 -24.1008079350064 -230 -172.935578228335 -23.0908324498123 -230 -180.459698608994 -22.8499126856756 -230 -188.098767601865 -23.381661467602 -230 -195.738229974932 -24.6781047080235 -230 -203.263524597061 -26.7198009859576 -230 -210.561802393025 -29.4761330899293 -230 -215.050703054116 -31.5903877357607 6.28318530717959 62.8726216514981 6.28318530717959 325.962901541682 0 62.8726216514983 0.132737504726219 64.6127819482327 0.267036985217637 66.9409958839595 0.404726180432513 69.7378497195384 0.542828258176546 72.8241369611988 0.670856540856283 75.8548341270287 0.789869357667035 78.775697966021 0.902035692388418 81.6007391908959 1.0427855138446 85.2366896507324 1.15716153372049 88.2720249545422 1.29852798772423 92.146456360616 1.44765135336057 96.4236451874471 1.58751064808875 100.665225703764 1.71923910641869 104.913324662241 1.83699686318778 108.954578747351 1.97736367277356 114.108003327405 2.12661319274435 120.013253167237 2.26854963385678 126.030753266729 2.40518296271031 132.151503617121 2.53852774450195 138.358784209235 2.71439412740659 146.704917864164 2.91628139542095 156.086599934625 3.07039244803821 162.722468244561 3.24801437676881 169.353355375613 3.3483345617515 172.442393360579 3.47230912090536 175.452164357201 3.57488878994859 177.173266645363 3.6631235220419 178.038404681693 3.74576687485895 178.296858589009 3.83177202749808 177.97088307654 3.90805654907023 177.156320372074 3.97079888632238 176.108097505153 4.04141991400306 174.51514655344 4.10967062228413 172.558656162814 4.18825069894009 169.801226571977 4.26638190238265 166.532279155036 4.35829800412067 162.033922403653 4.4780614092663 155.172314710398 4.63625058006733 144.558983150269 4.79421329362162 132.543583375398 4.98938550858636 116.503111302354 5.20453176358166 98.734745296597 5.4372658041091 81.7642939755317 5.53332316421375 76.0441524758817 5.64575909134693 70.5655732662525 5.73986225170353 67.0505985741603 5.8280622829947 64.6316728643484 5.90159359369311 63.2253045265863 5.98447643021971 62.2457495522009 6.07361311942742 61.8248875292731 6.13253041814664 61.8598104024992 6.20793860013348 62.2168523604884 0 325.962901541682 6.09642312248465 332.858882247092 5.90966093778883 339.151204729253 5.74157497156104 344.116737173829 5.59029760195602 347.899649436389 5.43902023235273 350.942555516707 5.30287059971174 352.990644968196 5.18033593033589 354.241503931948 5.05780126096015 354.911424018845 4.93526659158393 354.990359044612 4.81273192220718 354.477125392034 4.69019725282976 353.379419587804 4.5676625834522 351.713702688751 4.44512791407435 349.504953699047 4.32259324469625 346.786295022753 4.20005857531789 343.598495603417 4.07752390593886 339.98935953699 3.95498923655867 336.013009269371 3.83245456717713 331.729074017442 3.70991989779468 327.201795565619 3.58738522841226 322.499064868542 3.46485055903111 317.691403934629 3.34231588965224 312.850908274846 3.21978122027609 308.050165776082 3.09724655090223 303.361168199128 2.97471188152948 298.854231607291 2.85217721215629 294.596941903239 2.72964254278146 290.653141288699 2.60710787340474 287.081970864157 2.48457320402707 283.936983753717 2.36203853464944 281.265342073779 2.23950386527117 279.107109706117 2.11696919589272 277.494651435667 1.99443452651226 276.452147620465 1.87189985713181 275.995231610133 1.74936518775661 276.130755313594 1.62683051839035 276.856686428963 1.50429584903201 278.162138911734 1.3817611796761 280.027536227478 1.25922651031531 282.424904931438 1.13669184094402 285.318294162916 1.01415717156087 288.664314760073 0.891622502169082 292.412789913802 0.769087832774656 296.507507610639 0.646553163383151 300.887063587299 0.524018493996868 305.485782156311 0.401483824614131 310.23470108645 0.278949155231658 315.062605756177 0.156414485848844 319.897097066138 0.0782072429236074 322.9527740632 104 3 4 104 55 3 103 4 5 103 104 4 102 5 6 102 103 5 101 102 6 100 6 7 100 101 6 99 7 8 99 100 7 98 8 9 98 99 8 97 9 10 97 98 9 96 10 11 96 97 10 95 11 12 95 96 11 94 12 13 94 95 12 93 13 14 93 94 13 92 14 15 92 93 14 91 15 16 91 92 15 90 16 17 90 91 16 89 17 18 89 90 17 88 18 19 88 89 18 87 88 19 86 19 20 86 87 19 85 20 21 85 86 20 84 21 22 84 85 21 83 22 23 83 84 22 82 83 23 81 23 24 81 82 23 80 81 24 80 24 25 79 80 25 79 25 26 78 79 26 77 78 26 77 26 27 76 77 27 76 27 28 76 28 29 75 76 29 75 29 30 74 75 30 74 30 31 73 74 31 73 31 32 73 32 33 72 33 34 72 34 35 72 73 33 71 35 36 71 72 35 70 36 37 70 37 38 70 71 36 69 38 39 69 70 38 68 39 40 68 69 39 67 40 41 67 68 40 66 41 42 66 67 41 65 66 42 64 42 43 64 65 42 63 43 44 63 64 43 62 63 44 61 44 45 61 62 44 60 45 46 60 61 45 59 46 47 59 60 46 58 47 48 58 48 49 58 59 47 57 49 50 57 50 51 57 58 49 56 51 52 56 52 53 56 53 54 56 57 51 2 56 54 2 54 1 
+83 81 1 0.332993148283988
+-15.7008382389641 56.0020955974101 -113.705029433785 40.0891862868638 167.582144649066 53.6650441436989 -15.7008382389641 56.0020955974101 -113.705029433785 -26.15234778884 63.1675721644597 -100.560897502478 -35.7419813011805 68.8504258208211 -84.9337780785615 -44.129878155887 72.8492538575074 -67.3775028064806 -51.0187677823276 75.0223361374071 -48.5142734203172 -56.1645050526181 75.2926577161826 -29.0126106542571 -59.3847228870057 73.6506382840889 -9.56366158833183 -60.5652954194041 70.1544716961558 9.14329489299404 -59.6643826657913 64.9280635576406 26.4452764326035 -57.0987666580374 58.8968618542912 40.3076192149857 -53.4294430847669 52.5406890590679 51.0550161027971 -49.0972085531216 46.1944893354701 59.1108768706067 -44.4333424766111 40.0783971151619 64.9197814457979 -39.1184755100888 33.6758483083243 69.2705088070589 -33.8454320444925 27.7494338100392 71.8839929378139 -28.758849752436 22.3456247739376 73.1528999139946 -23.4021849567436 16.9316617187845 73.3820929518374 -17.8291688994329 11.5618506297938 72.5692730785572 -12.0957029829553 6.29005461586162 70.7225934683758 -6.25929803849168 1.16915362342743 67.8605776602579 -0.378497450506579 -3.7494859878304 64.0119337533488 5.48771007595662 -8.41652668692407 59.2152664438707 13.1850118517501 -14.1673812905526 51.4294777552111 21.5179016408397 -19.8761997788089 40.9331925518778 29.3243252252944 -24.6559270855357 28.8264074409663 36.4282825691065 -28.3988016770436 15.3820764317496 42.6696111170697 -31.020438424118 0.903309228194225 47.9075967460911 -32.4617311103343 -14.2834625430266 52.0241462410971 -32.6901850136309 -29.835844909864 54.9264497703497 -31.7006495173688 -45.4032010119227 56.5490733332302 -29.5154342337651 -60.6345563978594 56.8554340051248 -26.1838060216367 -75.1865119339515 55.8386247192184 -21.7808782384584 -88.7309859230394 53.5215699900466 -16.4059172691496 -100.962610883587 49.9565090679337 -10.180104511812 -111.605618224486 45.7467859202098 -3.96505935554597 -119.626906258655 41.2123302056887 2.02704978893822 -125.457519978507 36.0407250447429 8.30492495168059 -129.882599985693 30.3085190393574 14.7756428424864 -132.836647527374 24.1005586428761 21.3434257689438 -134.275937647279 17.5087322873698 27.911059310092 -134.179166389846 10.6306102776736 34.3813312561279 -132.547766135205 3.56800058398993 40.6584705153853 -129.4058843975 -3.57455809020503 46.6495646902995 -124.800026400377 -9.68038132273777 51.4898632858793 -119.737927852565 40.0891862868638 167.582144649066 53.6650441436989 27.5393184659456 168.564840026253 57.1932031658801 15.3707720282266 167.621569664996 61.8782322192913 3.95328209963509 164.780994357903 67.5777790668839 -6.3662366658773 160.129423548279 74.1186658618037 -15.2742309125489 153.808192861368 81.3021510686354 -22.5000357428572 146.009369692892 88.9099681243884 -27.824098733467 136.969917338433 96.7109573575647 -31.0846509245145 126.964494983595 104.468089657805 -32.1826220875936 116.297112323644 111.945668485466 -31.0846509245145 105.291892382745 118.916491391705 -27.824098733467 94.2832231998935 125.168753449924 -22.5000357428572 83.6055976175539 130.512482841281 -15.2742309125489 73.5834498859069 134.785313052276 -6.36623666587734 64.521297892327 137.857416299105 3.95328209963503 56.6944905394689 139.635448279173 15.3707720282265 50.3408414081937 140.065384390493 27.5393184659456 45.6534029122536 139.13416124188 40.0891862868637 42.7746004983893 136.870073577483 52.6390541077818 41.7919051212018 133.341914555302 64.8076005455008 42.7351754824591 128.656885501891 76.2250904740923 45.5757507895523 122.957338654298 86.5446092396047 50.2273215991758 116.416451859379 95.4526034862764 56.5485522860875 109.232966652547 102.678408316585 64.3473754545627 101.625149596794 108.002471307195 73.3868278090223 93.8241603636177 111.263023498242 83.3922501638596 86.0670280633771 112.360994661321 94.0596328238108 78.5894492357165 111.263023498242 105.064852764709 71.6186263294771 108.002471307195 116.073521947561 65.3663642712583 102.678408316585 126.751147529901 60.0226348799019 95.4526034862766 136.773295261548 55.7498046689066 86.544609239605 145.835447255128 52.6777014220771 76.2250904740927 153.662254607986 50.8996694420092 64.8076005455012 160.015903739261 50.4697333306895 52.6390541077822 164.703342235201 51.4009564793024 6.28318530717959 2191.25284262464 6.28318530717959 2400 0 2191.25284262464 0.188535365466375 2202.82841860735 0.377070730941541 2215.83266433576 0.565606096417356 2229.80470391073 0.754141461875146 2244.2493623891 0.9426768273232 2258.65471504074 1.1312121927849 2272.51023015794 1.31974755826542 2285.32486248635 1.50828292374811 2296.64445610695 1.67796475267081 2305.22093375783 1.83067839869405 2311.42117237675 1.96812068011583 2315.64588238386 2.09181873339922 2318.28064937068 2.21551678668491 2319.76714341421 2.3268450346428 2320.10407080595 2.42704045780544 2319.59244864553 2.52723588096854 2318.31395580075 2.62743130413111 2316.28141648357 2.7276267272918 2313.51521854804 2.82782215044748 2310.04310896911 2.92801757359851 2305.89991551908 3.02821299675011 2301.12719744964 3.16180689428471 2293.86790813911 3.31210002901051 2284.62772411998 3.46239316374259 2274.45218357779 3.61268629848579 2263.57069959366 3.76297943323685 2252.22860111976 3.91327256798843 2240.68160187766 4.06356570273708 2229.19003518372 4.21385883748551 2218.01298462731 4.36415197223525 2207.40244286197 4.51444510697952 2197.59763025523 4.66473824171966 2188.81960159644 4.8150313764585 2181.26626240252 4.96532451119757 2175.10790657125 5.10058833246398 2170.87355383284 5.22232577160434 2168.1896954466 5.34406321074441 2166.61523418097 5.46580064988361 2166.1734746831 5.58753808902201 2166.87095570686 5.70927552816037 2168.69735336982 5.83101296729955 2171.62563392478 5.95275040643995 2175.61245382851 6.07448784558093 2180.5988012772 6.17883657638065 2185.61290802981 0 2400 0.174532925199433 2400 0.349065850398866 2400 0.523598775598299 2400 0.698131700797732 2400 0.872664625997165 2400 1.0471975511966 2400 1.22173047639603 2400 1.39626340159546 2400 1.5707963267949 2400 1.74532925199433 2400 1.91986217719376 2400 2.0943951023932 2400 2.26892802759263 2400 2.44346095279206 2400 2.61799387799149 2400 2.79252680319093 2400 2.96705972839036 2400 3.14159265358979 2400 3.31612557878922 2400 3.49065850398866 2400 3.66519142918809 2400 3.83972435438752 2400 4.01425727958696 2400 4.18879020478639 2400 4.36332312998582 2400 4.53785605518525 2400 4.71238898038469 2400 4.88692190558412 2400 5.06145483078355 2400 5.23598775598299 2400 5.41052068118242 2400 5.58505360638185 2400 5.75958653158128 2400 5.93411945678072 2400 6.10865238198015 2400 70 29 30 70 69 29 62 17 18 48 3 4 62 18 19 62 61 17 71 30 31 71 70 30 49 48 4 50 4 5 72 31 32 50 49 4 72 71 31 51 5 6 51 50 5 52 51 6 52 6 7 73 32 33 63 19 20 63 20 21 63 62 19 53 7 8 53 52 7 73 72 32 54 8 9 54 53 8 74 33 34 74 34 35 74 73 33 55 9 10 55 54 9 75 74 35 75 35 36 56 10 11 56 55 10 64 21 22 64 63 21 76 75 36 57 11 12 57 56 11 76 36 37 65 22 23 65 23 24 65 64 22 77 76 37 58 12 13 77 37 38 58 57 12 78 77 38 78 38 39 78 39 40 59 13 14 59 58 13 79 78 40 79 40 41 66 24 25 66 65 24 80 79 41 60 14 15 80 41 42 80 42 43 60 59 14 16 60 15 67 25 26 67 26 27 67 66 25 81 80 43 81 43 44 82 81 44 82 44 45 82 45 46 68 27 28 68 67 27 83 46 47 83 82 46 61 16 17 61 60 16 2 83 47 2 47 1 69 28 29 69 68 28 
+101 99 1 0.136228772871728
+-22.2864273634798 -47.9648205226098 -2.24220467505033 -230 -203.75 -54.1705978341804 -22.2864273634798 -47.9648205226098 -2.24220467505033 -24.4012506975562 -46.557797906447 -1.17173881126472 -26.7591109772225 -45.1995399293933 -0.418292057057864 -29.3260653053367 -43.8729869733416 0.0224904104707955 -32.0351144673397 -42.5866519711117 0.146361916534837 -34.6897352127164 -41.4087440370025 -0.0250214194525966 -37.9679871091143 -40.0451150014351 -0.60083769088918 -41.3392128391102 -38.7387862395033 -1.59395083483286 -44.4612057385451 -37.6196675565716 -2.87447840889123 -48.2609945155088 -36.39591905645 -4.91638206633261 -52.1002173490519 -35.3574885454383 -7.55462201153391 -55.1217491942948 -34.7272235169081 -10.0755905380922 -58.2901589522796 -34.3050056113102 -13.1869689750541 -61.4633690248443 -34.213103102464 -16.8444660330036 -64.2692959516993 -34.5093370691993 -20.5980527290128 -66.7495015010916 -35.1754034210909 -24.3919261552404 -68.9381654584316 -36.1940274613222 -28.1843455811586 -71.4459138248419 -38.0741764539622 -33.1830132480231 -73.7443262264718 -40.8674410502666 -38.6551045773484 -75.4940486033119 -44.3483597547277 -43.8897654746452 -76.6534823422074 -48.5621360553353 -48.8636323445793 -77.0482239734598 -53.1303440341735 -53.1000282921383 -76.7379777937274 -57.0754558821442 -55.9767291108246 -76.4061164945813 -58.7938425396278 -57.017880049682 -75.9682730815984 -60.4304487807114 -57.8886231931889 -75.0135518414438 -62.9936011576077 -59.0027125667279 -73.8631613071862 -65.2269642568203 -59.6981790068215 -72.515103840102 -67.2242148052284 -60.0628180084393 -71.0269460748299 -68.9531410939977 -60.1337420604279 -69.4720247510213 -70.3968013049681 -59.9651652629317 -67.8625873353056 -71.6044565684176 -59.6061891116245 -66.4238864197703 -72.4906533578111 -59.1649617670997 -64.6590113659328 -73.375413455398 -58.5015445205678 -62.8126560037815 -74.1022249912955 -57.6907151823445 -60.5210650121961 -74.7680674691023 -56.5491723572055 -57.2959718283776 -75.3364883334365 -54.7365854351627 -53.950648133433 -75.5460428374445 -52.6473959588335 -49.7873068077512 -75.3517766317091 -49.7968596147923 -43.9338950130003 -74.3464030233711 -45.3713274012454 -37.9344192621972 -72.5181438755294 -40.3335100180792 -30.7004823416434 -69.2391388731129 -33.4376561658325 -23.6892694064044 -64.6037284452599 -25.2821232244669 -19.7012757088791 -60.6164585842255 -18.9205808886417 -18.2178719308714 -58.2391407790846 -15.3050888503074 -17.5857420686368 -56.3657771413405 -12.546236284659 -17.4868157734707 -54.5764206605305 -10.00474204745 -17.8032583705486 -53.1508589585831 -8.06945954976648 -18.4644050596923 -51.7856449514469 -6.31816713625769 -19.4199997641545 -50.504854994627 -4.79482944173709 -20.8732719405704 -49.078213100337 -3.27314228350858 -21.5551378668998 -48.5174632673474 -2.73513548959891 -230 -203.75 -54.1705978341804 -230 -208.640012066942 -57.6047506812288 -230 -212.771808783459 -61.658716006206 -230 -215.715265636146 -65.7137755634207 -230 -217.659772940617 -69.5887917353205 -230 -218.887334769788 -73.5799913079223 -230 -219.354150941483 -77.1913528455115 -230 -219.249089902313 -80.3962214888144 -230 -218.647982772543 -83.5051257717285 -230 -217.560409811152 -86.4685169421317 -230 -216.003704418649 -89.2391653907533 -230 -214.002676882711 -91.772913382036 -230 -211.589218959514 -94.0293788264285 -230 -208.801795592818 -95.9725988776025 -230 -205.68483187162 -97.5716030971423 -230 -202.288004996869 -98.800907051786 -230 -198.665452541647 -99.6409184764177 -230 -194.87490962332 -100.078249529511 -230 -190.976788739144 -100.105930164397 -230 -187.03321693063 -99.7235192157022 -230 -183.107045622019 -98.9371114305082 -230 -179.260848913784 -97.7592403321627 -230 -175.555926296025 -96.2086784648719 -230 -172.051325676205 -94.3101382027137 -230 -168.802902291927 -92.0938778914854 -230 -165.862428507472 -89.5952196005741 -230 -163.276768681922 -86.8539861707709 -230 -161.087132259541 -83.9138665301872 -230 -159.328416986434 -80.8217193936702 -230 -158.028652721095 -77.6268264431402 -230 -157.208554703216 -74.3801068914312 -230 -156.881193400621 -71.1333059476706 -230 -157.051786196211 -67.9381701181873 -230 -157.717614234922 -64.8456224867445 -230 -158.868065756007 -61.9049511182266 -230 -160.484805219974 -59.1630235207493 -230 -162.542065534739 -56.6635396858531 -230 -165.007058723538 -54.4463356115933 -230 -167.840498489534 -52.5467484087591 -230 -170.997226348633 -50.9950531089638 -230 -174.426931351387 -49.8159801505809 -230 -178.074951923311 -49.028321232689 -230 -181.883147044096 -48.6446298188005 -230 -185.790822881155 -48.6710210636543 -230 -189.735700109104 -49.1070743517759 -230 -193.654906498332 -49.9458400011172 -230 -197.485978953089 -51.1739500249323 -230 -200.693522814965 -52.5410579899282 6.28318530717959 55.9484769446956 6.28318530717959 320.732366972618 0 55.9484769446963 0.107473408927845 56.5697257192074 0.214535305123206 57.4724915197748 0.32212856914855 58.6192562970394 0.42952998629414 59.963302954831 0.531072681239146 61.3863495809173 0.653753954604568 63.268659841692 0.778861830606972 65.3394559525883 0.895341396998996 67.3812491042423 1.03981672756338 70.0425084363072 1.1910237661019 72.9606850988344 1.31544401863933 75.4545568692879 1.45290274304149 78.3018422568815 1.60009624187215 81.4543365312843 1.74088787456119 84.5659144064699 1.8765947945065 87.6474665828414 2.00842787464752 90.7074563189814 2.18011516316467 94.7611980344866 2.37056918340126 99.2807992368989 2.56186861075524 103.727988830426 2.76137226290383 108.092147600169 2.95894007676774 111.920331892669 3.12383740216267 114.562222477272 3.19579975919143 115.51708560375 3.26514164863477 116.307274424186 3.37667529330798 117.284846981091 3.47865857452881 117.832794207661 3.57588514607685 118.021881693193 3.66704523941172 117.88559507163 3.75066451164444 117.482128982839 3.82855764125936 116.859703433111 3.89267601784647 116.165954246811 3.96589989763668 115.171912714785 4.03750069327727 113.992114096031 4.12087095007483 112.362314614796 4.2304856669081 109.811295339494 4.33732615490095 106.900574816751 4.46376490155112 102.961248793302 4.63481244913248 96.9100265661038 4.80884838612677 90.1399999486567 5.0299092546923 81.1836473753891 5.28545301036348 71.3569315073072 5.49401185213562 64.634986902534 5.62198465252599 61.3635617743666 5.72744297917923 59.2244323007994 5.83345710689778 57.5956350706326 5.92236134229536 56.6256059891535 6.01159655246717 55.9975739391081 6.09910046822572 55.6949022699735 6.20083274933834 55.6971528721796 6.24199754532451 55.79662442962 0 320.732366972618 6.0906406502035 324.282890568926 5.89809599326136 327.508874550548 5.7248058020278 330.03591530866 5.56884462992331 331.939916311877 5.41288345782232 333.444889008789 5.27251840293127 334.427785804278 5.14618985352445 334.994499721679 5.0198613041074 335.250545558581 4.89353275467483 335.191842556177 4.76720420522307 334.819326310566 4.64087565575123 334.13893385807 4.51454710626162 333.161509059067 4.38821855675934 331.902629785006 4.26189000725107 330.382359656215 4.13556145774337 328.624928279882 4.00923290824107 326.65834507983 3.88290435874618 324.513952873874 3.75657580925792 322.225928322162 3.63024725977407 319.830737222483 3.50391871029326 317.366553347605 3.37759016081718 314.872650086777 3.2512616113504 312.388774550073 3.12493306189426 309.954514003017 2.99860451244402 307.608664864929 2.87227596299182 305.388614612252 2.74594741353787 303.329745692875 2.61961886408642 301.464871688995 2.49329031464053 299.82371438544 2.36696176520085 298.432430063087 2.24063321576628 297.313192604066 2.11430466633495 296.483840074371 1.98797611690498 295.957590423939 1.86164756747473 295.742830832884 1.73531901804274 295.842984053709 1.60899046860739 296.256453871549 1.48266191916681 296.976650546284 1.3563333697189 297.99209583024 1.23000482026178 299.286605891537 1.10367627079445 300.839549234611 0.977347721317443 302.626175514378 0.8510191718333 304.618010007494 0.724690622346399 306.78330745164 0.598362072862037 309.087558010267 0.472033523384775 311.49403728423 0.345704973916474 313.964391591688 0.219376424455116 316.459249192126 0.10968821222684 318.614514456842 101 3 4 101 4 5 101 54 3 100 5 6 100 101 5 99 6 7 99 100 6 98 7 8 98 99 7 97 8 9 97 98 8 96 9 10 96 97 9 95 10 11 95 96 10 94 11 12 94 95 11 93 12 13 93 94 12 92 13 14 92 93 13 91 14 15 91 92 14 90 15 16 90 91 15 89 16 17 89 90 16 88 89 17 87 17 18 87 88 17 86 18 19 86 87 18 85 19 20 85 86 19 84 20 21 84 85 20 83 84 21 82 21 22 82 83 21 81 22 23 81 82 22 80 81 23 79 23 24 79 80 23 78 24 25 78 79 24 77 25 26 77 78 25 76 77 26 76 26 27 75 27 28 75 28 29 75 76 27 74 75 29 74 29 30 73 74 30 73 30 31 72 73 31 72 31 32 72 32 33 71 72 33 71 33 34 71 34 35 70 35 36 70 71 35 69 36 37 69 37 38 69 70 36 68 38 39 68 69 38 67 39 40 67 68 39 66 40 41 66 67 40 65 66 41 64 41 42 64 65 41 63 42 43 63 64 42 62 63 43 61 43 44 61 62 43 60 61 44 59 44 45 59 60 44 58 45 46 58 59 45 57 46 47 57 47 48 57 58 46 56 48 49 56 49 50 56 57 48 55 50 51 55 51 52 55 56 50 2 52 53 2 53 1 2 55 52 
+98 98 1 3.44906109698464e-14
+-230 -219.375 -33.9661956683608 -230 -228.881716692235 -40.6087857661369 -230 -236.9709618013 -48.4257258369284 -230 -242.805639017784 -56.2410404649089 -230 -246.742884773844 -63.7184466407158 -230 -249.341225775738 -71.4392616329755 -230 -250.485261015954 -78.4504041091191 -230 -250.528239799038 -84.6996216675505 -230 -249.635421612559 -90.7940115327487 -230 -247.820195129222 -96.6421824310307 -230 -245.109781426772 -102.156435380393 -230 -241.544825781595 -107.254078821615 -230 -237.178788153464 -111.85866865821 -230 -232.07714150171 -115.901154609633 -230 -226.316389954833 -119.320915687053 -230 -219.982921557065 -122.066669263747 -230 -213.171712796046 -124.097240107716 -230 -205.984904338481 -125.382177844134 -230 -198.530269331998 -125.902213588185 -230 -190.91959724251 -125.649548900638 -230 -183.267017462987 -124.627972732992 -230 -175.687287832766 -122.852804608479 -230 -168.294073732698 -120.350664890989 -230 -161.198243562765 -117.159075586953 -230 -154.50620616313 -113.325897666546 -230 -148.318315110612 -108.908613342121 -230 -142.727363819678 -103.973464066811 -230 -137.817194015405 -98.5944571798348 -230 -133.66143844567 -92.8522560948285 -230 -130.322416686844 -86.8329706738959 -230 -127.850200601432 -80.6268659268985 -230 -126.281863462046 -74.3270084002804 -230 -125.6409240018 -68.0278705541424 -230 -125.936993728148 -61.8239140562802 -230 -127.165632789033 -55.8081732380633 -230 -129.308416552759 -50.070859954605 -230 -132.333211903178 -44.6980107706956 -230 -136.194659106859 -39.7701967592538 -230 -140.834852026189 -35.3613152601185 -230 -146.184206477942 -31.5374817179256 -230 -152.162503715443 -28.3560382170353 -230 -158.680093386308 -25.8646935814853 -230 -165.639237926228 -24.1008079350064 -230 -172.935578228335 -23.0908324498123 -230 -180.459698608994 -22.8499126856756 -230 -188.098767601865 -23.381661467602 -230 -195.738229974932 -24.6781047080235 -230 -203.263524597061 -26.7198009859576 -230 -210.561802393025 -29.4761330899293 -230 -215.050703054116 -31.5903877357607 -230 -203.75 -54.1705978341804 -230 -208.640012066942 -57.6047506812288 -230 -212.771808783459 -61.658716006206 -230 -215.715265636146 -65.7137755634207 -230 -217.659772940617 -69.5887917353205 -230 -218.887334769788 -73.5799913079223 -230 -219.354150941483 -77.1913528455115 -230 -219.249089902313 -80.3962214888144 -230 -218.647982772543 -83.5051257717285 -230 -217.560409811152 -86.4685169421317 -230 -216.003704418649 -89.2391653907533 -230 -214.002676882711 -91.772913382036 -230 -211.589218959514 -94.0293788264285 -230 -208.801795592818 -95.9725988776025 -230 -205.68483187162 -97.5716030971423 -230 -202.288004996869 -98.800907051786 -230 -198.665452541647 -99.6409184764177 -230 -194.87490962332 -100.078249529511 -230 -190.976788739144 -100.105930164397 -230 -187.03321693063 -99.7235192157022 -230 -183.107045622019 -98.9371114305082 -230 -179.260848913784 -97.7592403321627 -230 -175.555926296025 -96.2086784648719 -230 -172.051325676205 -94.3101382027137 -230 -168.802902291927 -92.0938778914854 -230 -165.862428507472 -89.5952196005741 -230 -163.276768681922 -86.8539861707709 -230 -161.087132259541 -83.9138665301872 -230 -159.328416986434 -80.8217193936702 -230 -158.028652721095 -77.6268264431402 -230 -157.208554703216 -74.3801068914312 -230 -156.881193400621 -71.1333059476706 -230 -157.051786196211 -67.9381701181873 -230 -157.717614234922 -64.8456224867445 -230 -158.868065756007 -61.9049511182266 -230 -160.484805219974 -59.1630235207493 -230 -162.542065534739 -56.6635396858531 -230 -165.007058723538 -54.4463356115933 -230 -167.840498489534 -52.5467484087591 -230 -170.997226348633 -50.9950531089638 -230 -174.426931351387 -49.8159801505809 -230 -178.074951923311 -49.028321232689 -230 -181.883147044096 -48.6446298188005 -230 -185.790822881155 -48.6710210636543 -230 -189.735700109104 -49.1070743517759 -230 -193.654906498332 -49.9458400011172 -230 -197.485978953089 -51.1739500249323 -230 -200.693522814965 -52.5410579899282 116.033804331639 -80.6249999999999 109.391214233863 -71.1182833077653 101.574274163072 -63.0290381987003 93.7589595350911 -57.1943609822165 86.2815533592842 -53.2571152261564 78.5607383670245 -50.6587742242621 71.5495958908809 -49.5147389840456 65.3003783324495 -49.4717602009622 59.2059884672513 -50.3645783874406 53.3578175689693 -52.179804870778 47.8435646196071 -54.8902185732281 42.7459211783854 -58.455174218405 38.1413313417896 -62.8212118465356 34.0988453903667 -67.92285849829 30.6790843129471 -73.6836100451671 27.933330736253 -80.0170784429349 25.9027598922838 -86.8282872039539 24.6178221558659 -94.0150956615192 24.0977864118151 -101.469730668002 24.3504510993617 -109.08040275749 25.3720272670075 -116.732982537013 27.1471953915206 -124.312712167234 29.6493351090105 -131.705926267302 32.8409244130465 -138.801756437235 36.6741023334541 -145.49379383687 41.0913866578794 -151.681684889388 46.0265359331894 -157.272636180322 51.4055428201652 -162.182805984595 57.1477439051715 -166.33856155433 63.1670293261041 -169.677583313156 69.3731340731015 -172.149799398568 75.6729915997196 -173.718136537954 81.9721294458576 -174.3590759982 88.1760859437198 -174.063006271852 94.1918267619367 -172.834367210967 99.9291400453949 -170.691583447241 105.301989229304 -167.666788096822 110.229803240746 -163.805340893141 114.638684739882 -159.165147973811 118.462518282074 -153.815793522058 121.643961782965 -147.837496284557 124.135306418515 -141.319906613692 125.899192064994 -134.360762073772 126.909167550188 -127.064421771665 127.150087314324 -119.540301391006 126.618338532398 -111.901232398135 125.321895291976 -104.261770025068 123.280199014042 -96.736475402939 120.523866910071 -89.4381976069749 118.409612264239 -84.9492969458841 95.8294021658196 -96.25 92.3952493187712 -91.3599879330581 88.341283993794 -87.2281912165414 84.2862244365793 -84.2847343638536 80.4112082646795 -82.3402270593827 76.4200086920777 -81.1126652302121 72.8086471544885 -80.6458490585166 69.6037785111856 -80.7509100976869 66.4948742282715 -81.352017227457 63.5314830578683 -82.439590188848 60.7608346092467 -83.9962955813511 58.227086617964 -85.9973231172893 55.9706211735715 -88.4107810404859 54.0274011223976 -91.1982044071823 52.4283969028577 -94.3151681283804 51.199092948214 -97.7119950031309 50.3590815235823 -101.334547458353 49.9217504704885 -105.12509037668 49.8940698356028 -109.023211260856 50.2764807842978 -112.96678306937 51.0628885694918 -116.892954377981 52.2407596678373 -120.739151086216 53.7913215351281 -124.444073703975 55.6898617972863 -127.948674323795 57.9061221085146 -131.197097708073 60.4047803994259 -134.137571492528 63.1460138292291 -136.723231318078 66.0861334698128 -138.912867740459 69.1782806063298 -140.671583013566 72.3731735568598 -141.971347278905 75.6198931085688 -142.791445296784 78.8666940523294 -143.118806599379 82.0618298818127 -142.948213803789 85.1543775132555 -142.282385765078 88.0950488817734 -141.131934243993 90.8369764792507 -139.515194780026 93.3364603141469 -137.457934465261 95.5536643884067 -134.992941276462 97.4532515912409 -132.159501510466 99.0049468910362 -129.002773651367 100.184019849419 -125.573068648613 100.971678767311 -121.925048076689 101.355370181199 -118.116852955904 101.328978936346 -114.209177118845 100.892925648224 -110.264299890896 100.054159998883 -106.345093501668 98.8260499750677 -102.514021046911 97.4589420100718 -99.3064771850346 45 93 92 42 90 89 73 24 74 73 23 24 66 17 18 80 29 30 9 10 59 66 18 67 46 93 45 12 13 61 39 86 38 80 79 29 46 94 93 46 95 94 8 59 58 8 9 59 72 22 23 47 95 46 87 86 39 72 23 73 81 80 30 81 30 31 47 96 95 65 16 17 65 17 66 7 58 57 7 8 58 71 22 72 48 96 47 71 21 22 48 97 96 6 7 57 82 31 32 82 32 33 6 57 56 43 90 42 64 15 16 43 91 90 82 81 31 64 16 65 49 97 48 40 88 87 40 87 39 49 98 97 5 56 55 5 6 56 70 21 71 11 61 60 11 12 61 50 98 49 50 51 98 1 52 51 83 33 34 1 51 50 83 82 33 4 5 55 63 14 15 4 55 54 63 15 64 2 53 52 2 52 1 3 4 54 3 54 53 3 53 2 69 20 21 69 21 70 84 83 34 84 34 35 62 14 63 84 35 36 76 25 26 41 88 40 41 89 88 77 76 26 77 26 27 68 19 20 68 20 69 75 25 76 44 91 43 85 36 37 44 92 91 13 14 62 85 84 36 61 13 62 78 27 28 78 77 27 74 24 25 74 25 75 67 18 19 10 11 60 67 19 68 79 28 29 86 85 37 86 37 38 10 60 59 79 78 28 45 92 44 42 89 41 
+72 72 1 2.18491891246231e-13
+40.0891862868637 188.383402007512 39.797539238068 23.3560291923062 189.693662510428 44.5017512676428 7.13130060868077 188.435968695418 50.7484566721911 -8.09201929610791 184.648534952628 58.3478524689813 -21.8513776501244 178.446440539796 67.0690348622077 -33.7287033123532 170.018132957247 76.6470151379833 -43.3631097527643 159.619702065947 86.7907712123205 -50.4618604069107 147.567098926667 97.192090189889 -54.8092633283073 134.226535786884 107.534933256877 -56.2732248790795 120.003358906949 117.505038360424 -54.8092633283073 105.329732319084 126.799468902077 -50.4618604069107 90.6515067419486 135.135818313035 -43.3631097527644 76.4146726321626 142.260790834843 -33.7287033123533 63.0518089899665 147.957897782837 -21.8513776501245 50.9689396651932 152.054035445276 -8.09201929610798 40.5331965280492 154.424744752034 7.13130060868068 32.0616643530156 154.99799290046 23.3560291923061 25.8117463584287 153.756362035643 40.0891862868635 21.973343139943 150.737578483114 56.822343381421 20.6630826370263 146.033366453539 73.0470719650464 21.9207764520362 139.786661048991 88.2703918698351 25.708210194827 132.187265252201 102.029750223852 31.9103046076583 123.466082858974 113.90707588608 40.3386121902073 113.888102583199 123.541482326492 50.7370430815076 103.744346508861 130.640232980638 62.789646220787 93.343027531293 134.987635902035 76.1302093605701 83.0001844643055 136.451597452807 90.3533862405051 73.0300793607581 134.987635902035 105.02701282837 63.7356488191055 130.640232980638 119.705238405506 55.3992994081471 123.541482326492 133.942072515292 48.2743268863385 113.907075886081 147.304936157488 42.5772199383448 102.029750223852 159.387805482261 38.4810822759056 88.2703918698356 169.823548619405 36.1103729691483 73.0470719650469 178.295080794439 35.5371248207221 56.8223433814216 184.544998789026 36.7787556855393 40.0891862868638 167.582144649066 53.6650441436989 27.5393184659456 168.564840026253 57.1932031658801 15.3707720282266 167.621569664996 61.8782322192913 3.95328209963509 164.780994357903 67.5777790668839 -6.3662366658773 160.129423548279 74.1186658618037 -15.2742309125489 153.808192861368 81.3021510686354 -22.5000357428572 146.009369692892 88.9099681243884 -27.824098733467 136.969917338433 96.7109573575647 -31.0846509245145 126.964494983595 104.468089657805 -32.1826220875936 116.297112323644 111.945668485466 -31.0846509245145 105.291892382745 118.916491391705 -27.824098733467 94.2832231998935 125.168753449924 -22.5000357428572 83.6055976175539 130.512482841281 -15.2742309125489 73.5834498859069 134.785313052276 -6.36623666587734 64.521297892327 137.857416299105 3.95328209963503 56.6944905394689 139.635448279173 15.3707720282265 50.3408414081937 140.065384390493 27.5393184659456 45.6534029122536 139.13416124188 40.0891862868637 42.7746004983893 136.870073577483 52.6390541077818 41.7919051212018 133.341914555302 64.8076005455008 42.7351754824591 128.656885501891 76.2250904740923 45.5757507895523 122.957338654298 86.5446092396047 50.2273215991758 116.416451859379 95.4526034862764 56.5485522860875 109.232966652547 102.678408316585 64.3473754545627 101.625149596794 108.002471307195 73.3868278090223 93.8241603636177 111.263023498242 83.3922501638596 86.0670280633771 112.360994661321 94.0596328238108 78.5894492357165 111.263023498242 105.064852764709 71.6186263294771 108.002471307195 116.073521947561 65.3663642712583 102.678408316585 126.751147529901 60.0226348799019 95.4526034862766 136.773295261548 55.7498046689066 86.544609239605 145.835447255128 52.6777014220771 76.2250904740927 153.662254607986 50.8996694420092 64.8076005455012 160.015903739261 50.4697333306895 52.6390541077822 164.703342235201 51.4009564793024 100 0 98.4807753012208 17.364817766693 93.9692620785908 34.2020143325669 86.6025403784439 50 76.6044443118978 64.2787609686539 64.278760968654 76.6044443118978 50 86.6025403784438 34.2020143325669 93.9692620785908 17.364817766693 98.4807753012208 0 100 -17.364817766693 98.4807753012208 -34.2020143325669 93.9692620785908 -50 86.6025403784439 -64.2787609686539 76.6044443118979 -76.6044443118978 64.278760968654 -86.6025403784438 50.0000000000001 -93.9692620785908 34.202014332567 -98.4807753012208 17.3648177666932 -100 1.4210854715202e-13 -98.4807753012208 -17.3648177666929 -93.9692620785909 -34.2020143325667 -86.602540378444 -49.9999999999998 -76.604444311898 -64.2787609686538 -64.2787609686541 -76.6044443118977 -50.0000000000002 -86.6025403784437 -34.2020143325671 -93.9692620785908 -17.3648177666933 -98.4807753012208 -2.8421709430404e-13 -100 17.3648177666927 -98.4807753012209 34.2020143325666 -93.969262078591 49.9999999999997 -86.602540378444 64.2787609686536 -76.604444311898 76.6044443118976 -64.2787609686542 86.6025403784437 -50.0000000000004 93.9692620785907 -34.2020143325673 98.4807753012207 -17.3648177666935 75.0000000000001 -2.8421709430404e-14 73.8605814759156 13.0236133250198 70.4769465589432 25.6515107494251 64.951905283833 37.5 57.4533332339234 48.2090707264904 48.2090707264905 57.4533332339233 37.5000000000001 64.9519052838329 25.6515107494252 70.4769465589431 13.0236133250198 73.8605814759156 4.2632564145606e-14 75 -13.0236133250197 73.8605814759156 -25.6515107494251 70.4769465589431 -37.4999999999999 64.9519052838329 -48.2090707264904 57.4533332339234 -57.4533332339233 48.2090707264905 -64.9519052838328 37.5000000000001 -70.4769465589431 25.6515107494252 -73.8605814759155 13.0236133250199 -75 9.9475983006414e-14 -73.8605814759156 -13.0236133250197 -70.4769465589431 -25.651510749425 -64.9519052838329 -37.4999999999999 -57.4533332339234 -48.2090707264903 -48.2090707264905 -57.4533332339233 -37.5000000000001 -64.9519052838328 -25.6515107494253 -70.4769465589431 -13.0236133250199 -73.8605814759156 -1.70530256582424e-13 -75 13.0236133250196 -73.8605814759157 25.651510749425 -70.4769465589432 37.4999999999998 -64.951905283833 48.2090707264903 -57.4533332339235 57.4533332339232 -48.2090707264907 64.9519052838328 -37.5000000000003 70.476946558943 -25.6515107494255 73.8605814759156 -13.0236133250201 7 8 44 51 15 52 7 44 43 4 40 3 5 41 40 5 42 41 5 40 4 6 42 5 6 7 43 6 43 42 33 68 32 33 69 68 14 15 51 14 51 50 34 69 33 60 24 25 34 70 69 13 50 49 13 14 50 59 23 24 59 24 60 61 25 26 61 60 25 58 22 23 58 23 59 35 70 34 35 71 70 12 49 48 12 13 49 62 26 27 62 61 26 57 21 22 57 22 58 63 62 27 63 27 28 36 71 35 56 20 21 36 72 71 36 37 72 56 21 57 11 12 48 11 48 47 64 28 29 64 63 28 55 20 56 55 18 19 55 19 20 65 64 29 10 47 46 10 11 47 54 18 55 1 37 36 30 65 29 66 65 30 53 18 54 53 17 18 31 66 30 9 46 45 9 10 46 2 38 37 2 39 38 67 66 31 52 17 53 2 37 1 52 16 17 8 9 45 32 67 31 8 45 44 15 16 52 3 39 2 3 40 39 68 67 32 
+
+TShapes 57
+Ve
+1e-07
+-66.8153104781061 -25.4255915224278 -280.915951056841
+0 0
+
+0101101
+*
+Ed
+ 1e-07 1 1 0
+1  1 0 0 6.28318530717959
+2  1 2 0 0 6.28318530717959
+2  2 1 0 0 6.28318530717959
+6  1 2 0
+6  2 1 0
+0
+
+0101000
++57 0 -57 0 *
+Wi
+
+0101100
++56 0 *
+Ve
+1.00000127897692e-07
+-66.815310478106 -46.2268488808736 -267.048446151211
+0 0
+
+0101101
+*
+Ed
+ 1e-07 1 1 0
+1  2 0 0 6.28318530717959
+2  3 1 0 0 6.28318530717959
+2  4 3 1 0 6.28318530717959
+6  3 3 0
+6  4 1 0
+0
+
+0101000
++54 0 -54 0 *
+Wi
+
+0101100
+-53 0 *
+Fa
+0  1e-07 1 0
+2  1
+0101000
++55 0 +52 0 *
+Ve
+1.21184741353775e-07
+-20.3233398741743 67.5583496854358 -141.440039245046
+0 0
+
+0101101
+*
+Ed
+ 1e-07 1 1 0
+1  3 0 0 173.957025235878
+3  5 6CN 2 0 0 173.957025235878
+7  5 6 2 0
+0
+
+0101000
++57 0 -50 0 *
+Ed
+ 1.2118468276092e-07 1 1 0
+1  4 0 3.97265635324521 10.2558416604248
+2  7 2 0 3.97265635324521 10.2558416604248
+2  8 4 0 3.97265635324521 10.2558416604248
+6  7 2 0
+6  8 4 0
+6  9 5 0
+0
+
+0101000
++50 0 -50 0 *
+Wi
+
+0101100
++56 0 -49 0 -48 0 +49 0 *
+Ve
+4.04294319991397e-07
+-23.615004462056 -64.586253346542 17.6300532161252
+0 0
+
+0101101
+*
+Ed
+ 4.04293319991397e-07 1 1 0
+1  5 0 0 1
+2  9 2 0 0 1
+2  10 5 2 0 1
+6  10 2 0
+6  11 6 0
+0
+
+0101000
++46 0 -46 0 *
+Wi
+
+0101100
+-45 0 *
+Fa
+0  1e-07 2 0
+2  2
+0101000
++47 0 +44 0 *
+Ve
+1.00000326405267e-07
+-15.7008382389641 56.0020955974101 -113.705029433785
+0 0
+
+0101101
+*
+Ed
+ 1e-07 1 1 0
+1  6 0 3.9726563532452 10.2558416604248
+2  11 3 1 3.9726563532452 10.2558416604248
+2  12 4 0 3.9726563532452 10.2558416604248
+6  12 3 0
+6  13 7 0
+6  14 5 0
+0
+
+0101000
++42 0 -42 0 *
+Ed
+ 1e-07 1 1 0
+1  7 0 2000 2191.25284262464
+3  13 14CN 3 0 2000 2191.25284262464
+7  15 16 3 3
+0
+
+0101000
++54 3 -42 3 *
+Wi
+
+0101100
+-41 0 +40 1 +53 0 -40 1 *
+Ve
+1.00000714166147e-07
+-22.2864273634798 -47.9648205226098 -2.24220467505033
+0 0
+
+0101101
+*
+Ed
+ 1e-07 1 1 0
+1  8 0 0 1
+2  15 6 4 0 1
+2  16 3 1 0 1
+6  17 3 0
+6  18 8 0
+0
+
+0101000
++38 0 -38 0 *
+Wi
+
+0101100
+-37 0 *
+Fa
+0  1e-07 3 1
+2  3
+0101000
++39 0 +36 0 *
+Wi
+
+0101100
++48 0 *
+Wi
+
+0101100
+-41 0 *
+Fa
+0  1e-07 4 0
+2  5
+0101000
++34 0 +33 0 *
+Ve
+1.000000536448e-07
+-230 -219.375 -33.9661956683608
+0 0
+
+0101101
+*
+Ed
+ 1e-07 1 1 0
+1  9 0 62.8726216514981 325.962901541682
+3  17 18CN 5 0 62.8726216514981 325.962901541682
+7  19 20 6 5
+0
+
+0101000
++46 5 -31 5 *
+Ed
+ 1e-07 1 1 0
+1  10 0 4.98022625413595 11.2634115613155
+2  19 5 2 4.98022625413595 11.2634115613155
+2  20 7 6 4.98022625413595 11.2634115613155
+6  21 6 0
+6  22 9 0
+0
+
+0101000
++31 0 -31 0 *
+Wi
+
+0101100
++30 2 +45 0 -30 2 +29 0 *
+Fa
+0  1e-07 5 2
+2  6
+0101000
++28 0 *
+Ve
+1.00000049227845e-07
+-230 -203.75 -54.1705978341804
+0 0
+
+0101101
+*
+Ed
+ 1e-07 1 1 0
+1  11 0 55.9484769446956 320.732366972618
+3  21 22CN 6 0 55.9484769446956 320.732366972618
+7  23 24 8 7
+0
+
+0101000
++38 7 -26 7 *
+Ed
+ 1e-07 1 1 0
+1  12 0 4.98022625413595 11.2634115613155
+2  23 7 6 4.98022625413595 11.2634115613155
+2  24 6 4 4.98022625413595 11.2634115613155
+6  25 8 0
+6  26 9 0
+0
+
+0101000
++26 0 -26 0 *
+Wi
+
+0101100
++25 4 +37 0 -25 4 +24 0 *
+Fa
+0  1e-07 6 4
+2  8
+0101000
++23 0 *
+Wi
+
+0101100
++29 0 *
+Wi
+
+0101100
+-24 0 *
+Fa
+0  1e-07 7 6
+2  9
+0101000
++21 0 +20 0 *
+Sh
+
+0101100
+-51 0 +43 0 -35 0 +32 0 +27 0 -22 0 -19 0 *
+So
+
+0100000
++18 0 *
+Ve
+1e-07
+40.0891862868637 188.383402007512 39.797539238068
+0 0
+
+0101101
+*
+Ed
+ 1e-07 1 1 0
+1  3 0 173.957025235878 400
+3  5 6CN 2 0 173.957025235878 400
+7  27 28 4 0
+0
+
+0101000
++50 0 -16 0 *
+Ed
+ 1e-07 1 1 0
+1  13 0 0 6.28318530717959
+2  25 2 0 0 6.28318530717959
+2  26 8 0 0 6.28318530717959
+6  29 4 0
+6  30 10 0
+0
+
+0101000
++16 0 -16 0 *
+Wi
+
+0101100
++48 0 -15 0 -14 0 +15 0 *
+Fa
+0  1e-07 2 0
+2  4
+0101000
++13 0 *
+Wi
+
+0101100
++14 0 *
+Ve
+1.00000120792265e-07
+40.0891862868638 167.582144649066 53.6650441436989
+0 0
+
+0101101
+*
+Ed
+ 1e-07 1 1 0
+1  14 0 0 6.28318530717959
+2  27 8 0 0 6.28318530717959
+2  28 3 1 0 6.28318530717959
+6  31 7 0
+6  32 10 0
+0
+
+0101000
++10 0 -10 0 *
+Wi
+
+0101100
+-9 0 *
+Fa
+0  1e-07 8 0
+2  10
+0101000
++11 0 +8 0 *
+Ed
+ 1e-07 1 1 0
+1  7 0 2191.25284262464 2400
+3  13 14CN 3 0 2191.25284262464 2400
+7  33 34 7 3
+0
+
+0101000
++42 3 -10 3 *
+Wi
+
+0101100
++6 1 +41 0 -6 1 -9 0 *
+Fa
+0  1e-07 3 1
+2  7
+0101000
++5 0 *
+Sh
+
+0101100
++12 0 -32 0 +7 0 -4 0 *
+So
+
+0100000
++3 0 *
+Co
+
+1100000
++17 0 +2 0 *
+
++1 0 ]]></shape>
+    <topology>
+      <vertices count="10">
+        <vertex index="0" name="" reference="7"/>
+        <vertex index="1" name="" reference="10"/>
+        <vertex index="2" name="" reference="14"/>
+        <vertex index="3" name="" reference="18"/>
+        <vertex index="4" name="" reference="22"/>
+        <vertex index="5" name="" reference="26"/>
+        <vertex index="6" name="" reference="33"/>
+        <vertex index="7" name="" reference="38"/>
+        <vertex index="8" name="" reference="48"/>
+        <vertex index="9" name="" reference="54"/>
+      </vertices>
+      <edges count="16">
+        <edge index="0" name="" reference="6"/>
+        <edge index="1" name="" reference="9"/>
+        <edge index="2" name="" reference="13"/>
+        <edge index="3" name="" reference="15"/>
+        <edge index="4" name="" reference="17"/>
+        <edge index="5" name="" reference="21"/>
+        <edge index="6" name="" reference="23"/>
+        <edge index="7" name="" reference="25"/>
+        <edge index="8" name="" reference="32"/>
+        <edge index="9" name="" reference="34"/>
+        <edge index="10" name="" reference="37"/>
+        <edge index="11" name="" reference="39"/>
+        <edge index="12" name="" reference="47"/>
+        <edge index="13" name="" reference="49"/>
+        <edge index="14" name="" reference="53"/>
+        <edge index="15" name="" reference="57"/>
+      </edges>
+      <faces count="10">
+        <face index="0" name="" reference="4"/>
+        <face index="1" name="" reference="11"/>
+        <face index="2" name="" reference="19"/>
+        <face index="3" name="" reference="27"/>
+        <face index="4" name="" reference="30"/>
+        <face index="5" name="" reference="35"/>
+        <face index="6" name="" reference="40"/>
+        <face index="7" name="" reference="45"/>
+        <face index="8" name="" reference="50"/>
+        <face index="9" name="" reference="55"/>
+      </faces>
+      <solids count="2">
+        <solid index="0" name="" reference="2"/>
+        <solid index="1" name="" reference="43"/>
+      </solids>
+    </topology>
+  </geometry>
+  <groups count="15">
+    <group name="IN1" dimension="face" count="1">
+      <element index="0"/>
+    </group>
+    <group name="IN2" dimension="face" count="1">
+      <element index="6"/>
+    </group>
+    <group name="IN2_E" dimension="edge" count="1">
+      <element index="9"/>
+    </group>
+    <group name="IN2_I" dimension="edge" count="1">
+      <element index="11"/>
+    </group>
+    <group name="INT_E" dimension="edge" count="1">
+      <element index="4"/>
+    </group>
+    <group name="INT_I" dimension="edge" count="1">
+      <element index="7"/>
+    </group>
+    <group name="OUT" dimension="face" count="1">
+      <element index="8"/>
+    </group>
+    <group name="POINT" dimension="vertex" count="1">
+      <element index="3"/>
+    </group>
+    <group name="T1_EXT_I" dimension="face" count="1">
+      <element index="1"/>
+    </group>
+    <group name="T1_EXT_O" dimension="face" count="1">
+      <element index="7"/>
+    </group>
+    <group name="T1_INT_I" dimension="face" count="1">
+      <element index="2"/>
+    </group>
+    <group name="T1_INT_O" dimension="face" count="1">
+      <element index="9"/>
+    </group>
+    <group name="T2_EXT" dimension="face" count="1">
+      <element index="4"/>
+    </group>
+    <group name="T2_INT" dimension="face" count="1">
+      <element index="5"/>
+    </group>
+    <group name="VOLUME" dimension="solid" count="2">
+      <element index="0"/>
+      <element index="1"/>
+    </group>
+  </groups>
+  <fields count="0"/>
+</XAO>
diff --git a/doc/examples/data/tutorial_5.00.med b/doc/examples/data/tutorial_5.00.med
new file mode 100644 (file)
index 0000000..9c1893a
Binary files /dev/null and b/doc/examples/data/tutorial_5.00.med differ
diff --git a/doc/examples/data/tutorial_5.fr.med b/doc/examples/data/tutorial_5.fr.med
new file mode 100644 (file)
index 0000000..d4faa4c
Binary files /dev/null and b/doc/examples/data/tutorial_5.fr.med differ
diff --git a/doc/examples/defining_hypotheses_adaptive1d.py b/doc/examples/defining_hypotheses_adaptive1d.py
new file mode 100644 (file)
index 0000000..e0f567a
--- /dev/null
@@ -0,0 +1,34 @@
+# Usage of Adaptive 1D hypothesis
+
+import math
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+box   = geom_builder.MakeBoxDXDYDZ( 100, 100, 100 )
+tool  = geom_builder.MakeTranslation( box, 50, 0, 10 )
+axis  = geom_builder.MakeVector( geom_builder.MakeVertex( 100, 0, 100 ),geom_builder.MakeVertex( 100, 10, 100 ),)
+tool  = geom_builder.Rotate( tool, axis, math.pi * 25 / 180. )
+shape = geom_builder.MakeCut( box, tool )
+cyl   = geom_builder.MakeCylinder( geom_builder.MakeVertex( -10,5, 95 ), geom_builder.MakeVectorDXDYDZ(1,0,0), 2, 90)
+shape = geom_builder.MakeCut( shape, cyl )
+tool  = geom_builder.MakeBoxTwoPnt( geom_builder.MakeVertex( -10, 2, 15 ), geom_builder.MakeVertex( 90, 5, 16 ))
+shape = geom_builder.MakeCut( shape, tool, theName="shape" )
+
+# Parameters of Adaptive hypothesis. minSize and maxSize are such that they do not limit
+# size of segments because size of geometrical features lies within [2.-100.] range, hence
+# size of segments is defined by deflection parameter and size of geometrical features only.
+minSize = 0.1
+maxSize = 200
+deflection = 0.05
+
+mesh = smesh_builder.Mesh( shape )
+mesh.Segment().Adaptive( minSize, maxSize, deflection )
+mesh.Triangle().MaxElementArea( 300 )
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/defining_hypotheses_ex01.py b/doc/examples/defining_hypotheses_ex01.py
new file mode 100644 (file)
index 0000000..48571de
--- /dev/null
@@ -0,0 +1,43 @@
+# Arithmetic Progression and Geometric Progression
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a box
+box = geom_builder.MakeBoxDXDYDZ(10., 10., 10.)
+geom_builder.addToStudy(box, "Box")
+
+# create a hexahedral mesh on the box
+hexa = smesh_builder.Mesh(box, "Box : hexahedrical mesh")
+
+# create a Regular 1D algorithm for edges
+algo1D = hexa.Segment()
+
+# optionally reverse node distribution on certain edges
+allEdges = geom_builder.SubShapeAllSorted( box, geom_builder.ShapeType["EDGE"])
+reversedEdges = [ allEdges[0], allEdges[4] ]
+
+# define "Arithmetic1D" hypothesis to cut all edges in several segments with increasing arithmetic length 
+algo1D.Arithmetic1D(1, 4, reversedEdges)
+
+# define "Geometric Progression" hypothesis on one edge to cut this edge in segments with length increasing by 20% starting from 1
+gpAlgo = hexa.Segment( allEdges[1] )
+gpAlgo.GeometricProgression( 1, 1.2 )
+
+# propagate distribution of nodes computed using "Geometric Progression" to parallel edges
+gpAlgo.PropagationOfDistribution() 
+
+# create a quadrangle 2D algorithm for faces
+hexa.Quadrangle()
+
+# create a hexahedron 3D algorithm for solids
+hexa.Hexahedron()
+
+# compute the mesh
+if not hexa.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/defining_hypotheses_ex02.py b/doc/examples/defining_hypotheses_ex02.py
new file mode 100644 (file)
index 0000000..b98b1a1
--- /dev/null
@@ -0,0 +1,46 @@
+# Deflection and Number of Segments
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a face from arc and straight segment
+px = geom_builder.MakeVertex(100., 0.  , 0.  )
+py = geom_builder.MakeVertex(0.  , 100., 0.  )
+pz = geom_builder.MakeVertex(0.  , 0.  , 100.)
+
+exy = geom_builder.MakeEdge(px, py)
+arc = geom_builder.MakeArc(py, pz, px)
+
+wire = geom_builder.MakeWire([exy, arc])
+
+isPlanarFace = 1
+face1 = geom_builder.MakeFace(wire, isPlanarFace)
+geom_builder.addToStudy(face1,"Face1")
+
+# get edges from the face
+e_straight,e_arc = geom_builder.SubShapeAll(face1, geom_builder.ShapeType["EDGE"])
+geom_builder.addToStudyInFather(face1, e_arc, "Arc Edge")
+
+# create hexahedral mesh
+hexa = smesh_builder.Mesh(face1, "Face : triangle mesh")
+
+# define "NumberOfSegments" hypothesis to cut a straight edge in a fixed number of segments
+algo1D = hexa.Segment()
+algo1D.NumberOfSegments(6)
+
+# define "MaxElementArea" hypothesis
+algo2D = hexa.Triangle()
+algo2D.MaxElementArea(70.0)
+
+# define a local "Deflection1D" hypothesis on the arc
+algo_local = hexa.Segment(e_arc)
+algo_local.Deflection1D(1.0)
+
+# compute the mesh
+if not hexa.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/defining_hypotheses_ex03.py b/doc/examples/defining_hypotheses_ex03.py
new file mode 100644 (file)
index 0000000..56be06d
--- /dev/null
@@ -0,0 +1,43 @@
+# Start and End Length
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a box
+box = geom_builder.MakeBoxDXDYDZ(10., 10., 10.)
+geom_builder.addToStudy(box, "Box")
+
+# get one edge of the box to put local hypothesis on
+p5 = geom_builder.MakeVertex(5., 0., 0.)
+EdgeX = geom_builder.GetEdgeNearPoint(box, p5)
+geom_builder.addToStudyInFather(box, EdgeX, "Edge [0,0,0 - 10,0,0]")
+
+# create a hexahedral mesh on the box
+hexa = smesh_builder.Mesh(box, "Box : hexahedrical mesh")
+
+# set algorithms
+algo1D = hexa.Segment()
+hexa.Quadrangle()
+hexa.Hexahedron()
+
+# define "NumberOfSegments" hypothesis to cut an edge in a fixed number of segments
+algo1D.NumberOfSegments(4)
+
+# create a local hypothesis
+algo_local = hexa.Segment(EdgeX)
+
+# define "StartEndLength" hypothesis to cut an edge in several segments with increasing geometric length
+algo_local.StartEndLength(1, 6)
+
+# define "Propagation" hypothesis that propagates all other hypothesis
+# on all edges on the opposite side in case of quadrangular faces
+algo_local.Propagation()
+
+# compute the mesh
+if not hexa.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/defining_hypotheses_ex04.py b/doc/examples/defining_hypotheses_ex04.py
new file mode 100644 (file)
index 0000000..f27cb3b
--- /dev/null
@@ -0,0 +1,43 @@
+# Local Length
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a box
+box = geom_builder.MakeBoxDXDYDZ(10., 10., 10.)
+geom_builder.addToStudy(box, "Box")
+
+# get one edge of the box to put local hypothesis on
+p5 = geom_builder.MakeVertex(5., 0., 0.)
+EdgeX = geom_builder.GetEdgeNearPoint(box, p5)
+geom_builder.addToStudyInFather(box, EdgeX, "Edge [0,0,0 - 10,0,0]")
+
+# create a hexahedral mesh on the box
+hexa = smesh_builder.Mesh(box, "Box : hexahedrical mesh")
+
+# set algorithms
+algo1D = hexa.Segment()
+hexa.Quadrangle()
+hexa.Hexahedron()
+
+# define "NumberOfSegments" hypothesis to cut all edges in a fixed number of segments
+algo1D.NumberOfSegments(4)
+
+# create a sub-mesh
+algo_local = hexa.Segment(EdgeX)
+
+# define "LocalLength" hypothesis to cut an edge in several segments with the same length
+algo_local.LocalLength(2.)
+
+# define "Propagation" hypothesis that propagates all other hypothesis
+# on all edges on the opposite side in case of quadrangular faces
+algo_local.Propagation()
+
+# compute the mesh
+if not hexa.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/defining_hypotheses_ex05.py b/doc/examples/defining_hypotheses_ex05.py
new file mode 100644 (file)
index 0000000..e18cceb
--- /dev/null
@@ -0,0 +1,43 @@
+# Maximum Element Area
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a face
+px   = geom_builder.MakeVertex(100., 0.  , 0.  )
+py   = geom_builder.MakeVertex(0.  , 100., 0.  )
+pz   = geom_builder.MakeVertex(0.  , 0.  , 100.)
+
+vxy = geom_builder.MakeVector(px, py)
+arc = geom_builder.MakeArc(py, pz, px)
+wire = geom_builder.MakeWire([vxy, arc])
+
+isPlanarFace = 1
+face = geom_builder.MakeFace(wire, isPlanarFace)
+
+# add the face in the study
+id_face = geom_builder.addToStudy(face, "Face to be meshed")
+
+# create a mesh
+tria_mesh = smesh_builder.Mesh(face, "Face : triangulation")
+
+# define 1D meshing:
+algo = tria_mesh.Segment()
+algo.NumberOfSegments(20)
+
+# define 2D meshing:
+
+# assign triangulation algorithm
+algo = tria_mesh.Triangle()
+
+# assign "Max Element Area" hypothesis
+algo.MaxElementArea(100)
+
+# compute the mesh
+if not tria_mesh.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/defining_hypotheses_ex06.py b/doc/examples/defining_hypotheses_ex06.py
new file mode 100644 (file)
index 0000000..351dc79
--- /dev/null
@@ -0,0 +1,36 @@
+# Maximum Element Volume
+
+import salome
+salome.salome_init_without_session()
+
+from salome.smesh import smeshBuilder
+from salome.geom import geomBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a cylinder
+cyl = geom_builder.MakeCylinderRH(30., 50.)
+geom_builder.addToStudy(cyl, "cyl")
+
+# create a mesh on the cylinder
+tetra = smesh_builder.Mesh(cyl, "Cylinder : tetrahedrical mesh")
+
+# assign algorithms
+algo1D = tetra.Segment()
+algo2D = tetra.Triangle()
+algo3D = tetra.Tetrahedron()
+
+# assign 1D and 2D hypotheses
+algo1D.NumberOfSegments(7)
+algo2D.MaxElementArea(150.)
+
+# assign Max Element Volume hypothesis
+algo3D.MaxElementVolume(200.)
+
+# compute the mesh
+ret = tetra.Compute()
+if ret == 0:
+    raise Exception("problem when computing the mesh")
+
+print("Computation succeeded")
diff --git a/doc/examples/defining_hypotheses_ex07.py b/doc/examples/defining_hypotheses_ex07.py
new file mode 100644 (file)
index 0000000..3cc6860
--- /dev/null
@@ -0,0 +1,36 @@
+# Length from Edges
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create sketchers
+sketcher1 = geom_builder.MakeSketcher("Sketcher:F 0 0:TT 70 0:TT 70 70:TT 0 70:WW")
+sketcher2 = geom_builder.MakeSketcher("Sketcher:F 20 20:TT 50 20:TT 50 50:TT 20 50:WW")
+
+# create a face from two wires
+isPlanarFace = 1
+face1 = geom_builder.MakeFaces([sketcher1, sketcher2], isPlanarFace)
+geom_builder.addToStudy(face1, "Face1")
+
+# create a mesh
+tria = smesh_builder.Mesh(face1, "Face : triangle 2D mesh")
+
+# Define 1D meshing
+algo1D = tria.Segment()
+algo1D.LocalLength(3.)
+
+# create and assign the algorithm for 2D meshing with triangles
+algo2D = tria.Triangle()
+
+# create and assign "LengthFromEdges" hypothesis to build triangles with
+# linear size close to the length of the segments generated on the face wires (3.)
+algo2D.LengthFromEdges()
+
+# compute the mesh
+if not tria.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/defining_hypotheses_ex08.py b/doc/examples/defining_hypotheses_ex08.py
new file mode 100644 (file)
index 0000000..d59d443
--- /dev/null
@@ -0,0 +1,63 @@
+# Propagation
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a box
+base = geom_builder.MakeSketcher("Sketcher:F 0 0:TT 10 0:TT 20 10:TT 0 10:WF", theName="F")
+box  = geom_builder.MakePrismDXDYDZ( base, 0,0,10 )
+geom_builder.addToStudy(box, "Box")
+
+# get one edge of the box to put local hypothesis on
+p5 = geom_builder.MakeVertex(5., 0., 0.)
+EdgeX = geom_builder.GetEdgeNearPoint(box, p5)
+geom_builder.addToStudyInFather(box, EdgeX, "Edge [0,0,0 - 10,0,0]")
+
+# create a hexahedral mesh on the box
+hexa = smesh_builder.Mesh(box, "Propagation of hypothesis")
+
+# set global algorithms and hypotheses
+algo1D = hexa.Segment()
+hexa.Quadrangle()
+hexa.Hexahedron()
+algo1D.NumberOfSegments(4)
+
+# create a sub-mesh with local 1D hypothesis and "Propagation of 1D Hypothesis"
+algo_local = hexa.Segment(EdgeX)
+
+# define "Arithmetic1D" hypothesis to cut an edge in several segments with increasing length
+algo_local.Arithmetic1D(1, 4)
+
+# define "Propagation" hypothesis that propagates "Arithmetic1D" hypothesis
+# from 'EdgeX' on opposite sides of all quadilateral faces
+algo_local.Propagation()
+
+# compute the mesh which contains prisms
+if not hexa.Compute(): raise Exception("Error when computing Mesh")
+
+# create another mesh on the box
+mesh = smesh_builder.Mesh(box, "Propagation of distribution of nodes")
+
+# set global algorithms and hypotheses
+algo1D = mesh.Segment()
+mesh.Quadrangle()
+mesh.Hexahedron()
+algo1D.NumberOfSegments(4)
+
+# create a sub-mesh with local 1D hypothesis and "Propagation of Node Distribution"
+algo_local = mesh.Segment(EdgeX)
+algo_local.Arithmetic1D(1, 4)
+
+# define "Propagation Of Distribution" hypothesis that propagates
+# distribution of nodes generated by "Arithmetic1D" hypothesis
+# from 'EdgeX' on opposite sides of all quadilateral faces
+algo_local.PropagationOfDistribution()
+
+# compute the mesh which contains hexahedra only
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/defining_hypotheses_ex09.py b/doc/examples/defining_hypotheses_ex09.py
new file mode 100644 (file)
index 0000000..cb02c91
--- /dev/null
@@ -0,0 +1,51 @@
+# Defining Meshing Algorithms
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a box
+box = geom_builder.MakeBoxDXDYDZ(10., 10., 10.)
+geom_builder.addToStudy(box, "Box")
+
+# Create a hexahedral mesh on the box
+hexa = smesh_builder.Mesh(box, "Box : hexahedrical mesh")
+
+# create a Regular 1D algorithm for edges
+algo1D = hexa.Segment()
+
+# create a quadrangle 2D algorithm for faces
+algo2D = hexa.Quadrangle()
+
+# create a hexahedron 3D algorithm for solids
+algo3D = hexa.Hexahedron()
+
+# define hypotheses
+algo1D.Arithmetic1D(1, 4)
+
+# compute the mesh
+if not hexa.Compute(): raise Exception("Error when computing Mesh")
+
+# 2. Create a tetrahedral mesh on the box
+tetra = smesh_builder.Mesh(box, "Box : tetrahedrical mesh")
+
+# create a 1D algorithm for edges
+algo1D = tetra.Segment()
+
+# create a 2D algorithm for faces
+algo2D = tetra.Triangle()
+
+# create a 3D algorithm for solids
+algo3D = tetra.Tetrahedron()
+
+# define hypotheses
+algo1D.Arithmetic1D(1, 4)
+algo2D.LengthFromEdges()
+
+# compute the mesh
+if not tetra.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/defining_hypotheses_ex10.py b/doc/examples/defining_hypotheses_ex10.py
new file mode 100644 (file)
index 0000000..92e0f11
--- /dev/null
@@ -0,0 +1,81 @@
+# Projection Algorithms
+
+# Project prisms from one meshed box to another mesh on the same box
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# Prepare geometry
+
+# Create a parallelepiped
+box = geom_builder.MakeBoxDXDYDZ(200, 100, 70)
+geom_builder.addToStudy( box, "box" )
+
+# Get geom faces to mesh with triangles in the 1ts and 2nd meshes
+faces = geom_builder.SubShapeAll(box, geom_builder.ShapeType["FACE"])
+# 2 adjacent faces of the box
+f1 = faces[2]
+f2 = faces[0]
+# face opposite to f2
+f2opp = geom_builder.GetOppositeFace( box, f2 )
+
+# Get vertices used to specify how to associate sides of faces at projection
+[v1F1, v2F1] = geom_builder.SubShapeAll(f1, geom_builder.ShapeType["VERTEX"])[:2]
+[v1F2, v2F2] = geom_builder.SubShapeAll(f2, geom_builder.ShapeType["VERTEX"])[:2]
+geom_builder.addToStudyInFather( box, v1F1, "v1F1" )
+geom_builder.addToStudyInFather( box, v2F1, "v2F1" )
+geom_builder.addToStudyInFather( box, v1F2, "v1F2" )
+geom_builder.addToStudyInFather( box, v2F2, "v2F2" )
+
+# Make group of 3 edges of f1 and f2
+edgesF1 = geom_builder.CreateGroup(f1, geom_builder.ShapeType["EDGE"])
+geom_builder.UnionList( edgesF1, geom_builder.SubShapeAll(f1, geom_builder.ShapeType["EDGE"])[:3])
+edgesF2 = geom_builder.CreateGroup(f2, geom_builder.ShapeType["EDGE"])
+geom_builder.UnionList( edgesF2, geom_builder.SubShapeAll(f2, geom_builder.ShapeType["EDGE"])[:3])
+geom_builder.addToStudyInFather( box, edgesF1, "edgesF1" )
+geom_builder.addToStudyInFather( box, edgesF2, "edgesF2" )
+
+# Make the source mesh with prisms
+src_mesh = smesh_builder.Mesh(box, "Source mesh")
+src_mesh.Segment().NumberOfSegments(9,10)
+src_mesh.Quadrangle()
+src_mesh.Hexahedron()
+src_mesh.Triangle(f1) # triangular sub-mesh
+if not src_mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# Mesh the box using projection algorithms
+
+# Define the same global 1D and 2D hypotheses
+tgt_mesh = smesh_builder.Mesh(box, "Target mesh")
+tgt_mesh.Segment().NumberOfSegments(9,10,UseExisting=True)
+tgt_mesh.Quadrangle()
+
+# Define Projection 1D algorithm to project 1d mesh elements from group edgesF2 to edgesF1
+# It is actually not needed, just a demonstration
+proj1D = tgt_mesh.Projection1D( edgesF1 )
+# each vertex must be at the end of a connected group of edges (or a sole edge)
+proj1D.SourceEdge( edgesF2, src_mesh, v2F1, v2F2 )
+
+# Define 2D hypotheses to project triangles from f1 face of the source mesh to
+# f2 face in the target mesh. Vertices specify how to associate sides of faces
+proj2D = tgt_mesh.Projection2D( f2 )
+proj2D.SourceFace( f1, src_mesh, v1F1, v1F2, v2F1, v2F2 )
+
+# 2D hypotheses to project triangles from f2 of target mesh to the face opposite to f2.
+# Association of face sides is default
+proj2D = tgt_mesh.Projection2D( f2opp )
+proj2D.SourceFace( f2 )
+
+# 3D hypotheses to project prisms from the source to the target mesh
+proj3D = tgt_mesh.Projection3D()
+proj3D.SourceShape3D( box, src_mesh, v1F1, v1F2, v2F1, v2F2 )
+if not tgt_mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# Move the source mesh to visually compare the two meshes
+src_mesh.TranslateObject( src_mesh, smesh_builder.MakeDirStruct( 210, 0, 0 ), Copy=False)
diff --git a/doc/examples/defining_hypotheses_ex11.py b/doc/examples/defining_hypotheses_ex11.py
new file mode 100644 (file)
index 0000000..0fb36d3
--- /dev/null
@@ -0,0 +1,37 @@
+# Projection 1D2D
+# Project triangles from one meshed face to another mesh on the same box
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# Prepare geometry
+
+# Create a box
+box = geom_builder.MakeBoxDXDYDZ(100, 100, 100)
+
+# Get geom faces to mesh with triangles in the 1ts and 2nd meshes
+faces = geom_builder.SubShapeAll(box, geom_builder.ShapeType["FACE"])
+# 2 adjacent faces of the box
+Face_1 = faces[2]
+Face_2 = faces[0]
+
+geom_builder.addToStudy( box, 'box' )
+geom_builder.addToStudyInFather( box, Face_1, 'Face_1' )
+geom_builder.addToStudyInFather( box, Face_2, 'Face_2' )
+
+# Make the source mesh triangulated by default algorithm
+src_mesh = smesh_builder.Mesh(Face_1, "Source mesh")
+src_mesh.Segment().NumberOfSegments(15)
+src_mesh.Triangle()
+if not src_mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# Mesh the target mesh using the algorithm Projection1D2D
+tgt_mesh = smesh_builder.Mesh(Face_2, "Target mesh")
+tgt_mesh.Projection1D2D().SourceFace(Face_1,src_mesh)
+if not tgt_mesh.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/defining_hypotheses_ex12.py b/doc/examples/defining_hypotheses_ex12.py
new file mode 100644 (file)
index 0000000..d391b5f
--- /dev/null
@@ -0,0 +1,40 @@
+# 1D Mesh with Fixed Points example
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# Create face and explode it on edges
+face = geom_builder.MakeFaceHW(100, 100, 1)
+edges = geom_builder.SubShapeAllSorted(face, geom_builder.ShapeType["EDGE"])
+geom_builder.addToStudy( face, "Face" )
+
+# get the first edge from exploded result
+edge1 = geom_builder.GetSubShapeID(face, edges[0])
+
+# Define Mesh on previously created face
+Mesh_1 = smesh_builder.Mesh(face)
+
+# Create Fixed Point 1D hypothesis and define parameters.
+# Note: values greater than 1.0 and less than 0.0 are not taken into account;
+# duplicated values are removed. Also, if not specified explicitly, values 0.0 and 1.0
+# add added automatically.
+# The number of segments should correspond to the number of points (NbSeg = NbPnt-1);
+# extra values of segments splitting parameter are not taken into account,
+# while missing values are considered to be equal to 1.
+Fixed_points_1D_1 = smesh_builder.CreateHypothesis('FixedPoints1D')
+Fixed_points_1D_1.SetPoints( [ 1.1, 0.9, 0.5, 0.0, 0.5, -0.3 ] )
+Fixed_points_1D_1.SetNbSegments( [ 3, 1, 2 ] )
+Fixed_points_1D_1.SetReversedEdges( [edge1] )
+
+# Add hypothesis to mesh and define 2D parameters
+Mesh_1.AddHypothesis(Fixed_points_1D_1)
+Regular_1D = Mesh_1.Segment()
+Quadrangle_2D = Mesh_1.Quadrangle()
+# Compute mesh
+if not Mesh_1.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/defining_hypotheses_ex13.py b/doc/examples/defining_hypotheses_ex13.py
new file mode 100644 (file)
index 0000000..0ef0433
--- /dev/null
@@ -0,0 +1,40 @@
+# Radial Quadrangle 1D-2D example
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# Create face from the wire and add to study
+Face = geom_builder.MakeSketcher("Sketcher:F 0 0:TT 20 0:R 90:C 20 90:WF", [0, 0, 0, 1, 0, 0, 0, 0, 1])
+geom_builder.addToStudy(Face,"Face")
+circle, radius1, radius2 = geom_builder.SubShapeAllSorted(Face, geom_builder.ShapeType["EDGE"])
+geom_builder.addToStudyInFather(Face, radius1,"radius1")
+geom_builder.addToStudyInFather(Face, radius2,"radius2")
+geom_builder.addToStudyInFather(Face, circle,"circle")
+
+# Define geometry for mesh, and Radial Quadrange algorithm
+mesh = smesh_builder.Mesh(Face)
+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
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# 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)
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# Define own parameters of Radial Quadrange algorithm
+# The number of radial layers will be 4
+radial_Quad_algo.NumberOfLayers( 4 )
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/defining_hypotheses_ex14.py b/doc/examples/defining_hypotheses_ex14.py
new file mode 100644 (file)
index 0000000..bc7ce0b
--- /dev/null
@@ -0,0 +1,31 @@
+# Quadrangle Parameters example 1 (meshing a face with 3 edges)
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# Get 1/4 part from the disk face.
+Box_1 = geom_builder.MakeBoxDXDYDZ(100, 100, 100)
+Disk_1 = geom_builder.MakeDiskR(100, 1)
+Common_1 = geom_builder.MakeCommon(Disk_1, Box_1)
+triaVertex = geom_builder.GetVertexNearPoint( Common_1, geom_builder.MakeVertex(0,0,0) )
+geom_builder.addToStudy( Common_1, "Common_1" )
+geom_builder.addToStudyInFather( Common_1, triaVertex, "triaVertex" )
+
+# Set the Geometry for meshing
+Mesh_1 = smesh_builder.Mesh(Common_1)
+
+# Define 1D hypothesis
+Regular_1D = Mesh_1.Segment()
+Nb_Segments_1 = Regular_1D.NumberOfSegments(10)
+
+# Create Quadrangle parameters and define the Base Vertex.
+Quadrangle_2D = Mesh_1.Quadrangle().TriangleVertex( triaVertex )
+
+# Compute the mesh
+if not Mesh_1.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/defining_hypotheses_ex15.py b/doc/examples/defining_hypotheses_ex15.py
new file mode 100644 (file)
index 0000000..06ec83c
--- /dev/null
@@ -0,0 +1,43 @@
+# Quadrangle Parameters example 2 (using different types)
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# Make quadrangle face and explode it on edges.
+Vertex_1 = geom_builder.MakeVertex(0, 0, 0)
+Vertex_2 = geom_builder.MakeVertex(40, 0, 0)
+Vertex_3 = geom_builder.MakeVertex(40, 30, 0)
+Vertex_4 = geom_builder.MakeVertex(0, 30, 0)
+Quadrangle_Face_1 = geom_builder.MakeQuad4Vertices(Vertex_1, Vertex_4, Vertex_3, Vertex_2)
+[Edge_1,Edge_2,Edge_3,Edge_4] = geom_builder.SubShapeAllSorted(Quadrangle_Face_1, geom_builder.ShapeType["EDGE"])
+geom_builder.addToStudy( Quadrangle_Face_1, "Quadrangle Face_1" )
+geom_builder.addToStudyInFather( Quadrangle_Face_1, Edge_2, "Edge_2" )
+
+# Set the Geometry for meshing
+Mesh_1 = smesh_builder.Mesh(Quadrangle_Face_1)
+
+# Create Quadrangle parameters and
+# define the Type as Quadrangle Preference
+Quad_algo = Mesh_1.Quadrangle()
+Quadrangle_Parameters_1 = Quad_algo.QuadrangleParameters( smeshBuilder.QUAD_QUADRANGLE_PREF )
+
+# Define other hypotheses and algorithms
+Regular_1D = Mesh_1.Segment()
+Nb_Segments_1 = Regular_1D.NumberOfSegments(4)
+
+# Define submesh on one edge to provide different number of segments
+Regular_1D_1 = Mesh_1.Segment(geom=Edge_2)
+Nb_Segments_2 = Regular_1D_1.NumberOfSegments(10)
+
+# Compute mesh (with Quadrangle Preference type)
+if not Mesh_1.Compute(): raise Exception("Error when computing Mesh")
+
+# Change type to Reduced and compute again
+Quadrangle_Parameters_1.SetQuadType( smeshBuilder.QUAD_REDUCED )
+if not Mesh_1.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/defining_hypotheses_ex16.py b/doc/examples/defining_hypotheses_ex16.py
new file mode 100644 (file)
index 0000000..c3fb9ec
--- /dev/null
@@ -0,0 +1,50 @@
+# "Import 2D Elements from Another Mesh" example
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# Make a patritioned box
+
+box = geom_builder.MakeBoxDXDYDZ(100,100,100)
+
+N = geom_builder.MakeVectorDXDYDZ( 1,0,0 )
+O = geom_builder.MakeVertex( 50,0,0 )
+plane = geom_builder.MakePlane( O, N, 200 ) # plane YOZ
+
+shape2boxes = geom_builder.MakeHalfPartition( box, plane )
+boxes = geom_builder.SubShapeAllSorted(shape2boxes, geom_builder.ShapeType["SOLID"])
+
+geom_builder.addToStudy( boxes[0], "boxes[0]")
+geom_builder.addToStudy( boxes[1], "boxes[1]")
+midFace0 = geom_builder.SubShapeAllSorted(boxes[0], geom_builder.ShapeType["FACE"])[5]
+geom_builder.addToStudyInFather( boxes[0], midFace0, "middle Face")
+midFace1 = geom_builder.SubShapeAllSorted(boxes[1], geom_builder.ShapeType["FACE"])[0]
+geom_builder.addToStudyInFather( boxes[1], midFace1, "middle Face")
+
+# Mesh one of boxes with quadrangles. It is a source mesh
+
+srcMesh = smesh_builder.Mesh(boxes[0], "source mesh") # box coloser to CS origin
+nSeg1 = srcMesh.Segment().NumberOfSegments(4)
+srcMesh.Quadrangle()
+if not srcMesh.Compute(): raise Exception("Error when computing Mesh")
+srcFaceGroup = srcMesh.GroupOnGeom( midFace0, "src faces", SMESH.FACE )
+
+# Import faces from midFace0 to the target mesh
+
+tgtMesh = smesh_builder.Mesh(boxes[1], "target mesh")
+importAlgo = tgtMesh.UseExisting2DElements(midFace1)
+import2hyp = importAlgo.SourceFaces( [srcFaceGroup] )
+tgtMesh.Segment().NumberOfSegments(3)
+tgtMesh.Quadrangle()
+if not tgtMesh.Compute(): raise Exception("Error when computing Mesh")
+
+# Import the whole source mesh with groups
+import2hyp.SetCopySourceMesh(True,True)
+if not tgtMesh.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/defining_hypotheses_ex17.py b/doc/examples/defining_hypotheses_ex17.py
new file mode 100644 (file)
index 0000000..9861b2a
--- /dev/null
@@ -0,0 +1,77 @@
+# Viscous layers construction
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+X = geom_builder.MakeVectorDXDYDZ( 1,0,0 )
+O = geom_builder.MakeVertex( 100,50,50 )
+plane = geom_builder.MakePlane( O, X, 200 ) # plane YZ
+
+box = geom_builder.MakeBoxDXDYDZ(200,100,100)
+
+shape = geom_builder.MakeHalfPartition( box, plane )
+
+faces = geom_builder.SubShapeAllSorted(shape, geom_builder.ShapeType["FACE"])
+face1 = faces[1]
+ignoreFaces = [ faces[0], faces[-1]]
+
+geom_builder.addToStudy( shape, "shape" )
+geom_builder.addToStudyInFather( shape, face1, "face1")
+
+# 3D Viscous layers
+
+mesh = smesh_builder.Mesh(shape, "CFD")
+
+mesh.Segment().NumberOfSegments( 4 )
+
+mesh.Triangle()
+mesh.Quadrangle(face1)
+algo3D = mesh.Tetrahedron()
+
+thickness = 20
+numberOfLayers = 10
+stretchFactor = 1.5
+groupName = "Boundary layers"
+layersHyp = algo3D.ViscousLayers(thickness,numberOfLayers,stretchFactor,
+                                 ignoreFaces,           # optional
+                                 groupName = groupName) # optional
+
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# retrieve boundary prisms created by mesh.Compute()
+boundaryGroup = mesh.GetGroupByName( layersHyp.GetGroupName() )[0]
+print( "Nb boundary prisms", boundaryGroup.Size() )
+
+mesh.MakeGroup("Tetras",SMESH.VOLUME,SMESH.FT_ElemGeomType,"=",SMESH.Geom_TETRA)
+mesh.MakeGroup("Pyras",SMESH.VOLUME,SMESH.FT_ElemGeomType,"=",SMESH.Geom_PYRAMID)
+mesh.MakeGroup("Prims",SMESH.VOLUME,SMESH.FT_ElemGeomType,"=",SMESH.Geom_PENTA)
+
+# 2D Viscous layers
+
+# 3 edges of the 4 edges of face1
+edgeIds = geom_builder.SubShapeAllIDs( face1, geom_builder.ShapeType["EDGE"])[:-1]
+
+mesh = smesh_builder.Mesh(face1,"VicsousLayers2D")
+mesh.Segment().NumberOfSegments( 5 )
+
+# viscous layers will be created on 1 edge, as we set 3 edges to ignore
+vlHyp = mesh.Triangle().ViscousLayers2D( 2, 3, 1.5,
+                                         edgeIds, isEdgesToIgnore=True, # optional
+                                         groupName=groupName)           # optional
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# retrieve boundary elements created by mesh.Compute()
+quadrangles = mesh.GetGroupByName( vlHyp.GetGroupName() )[0]
+print( "Nb boundary quadrangles", quadrangles.Size() )
+
+# viscous layers will be created on 3 edges, as we pass isEdgesToIgnore=False
+vlHyp.SetEdges( edgeIds, False )
+
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/defining_hypotheses_len_near_vertex.py b/doc/examples/defining_hypotheses_len_near_vertex.py
new file mode 100644 (file)
index 0000000..5fca17b
--- /dev/null
@@ -0,0 +1,31 @@
+# Usage of Segments around Vertex algorithm
+
+# for meshing a box with quadrangles with refinement near vertices
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a box
+box = geom_builder.MakeBoxDXDYDZ( 10, 10, 10 )
+
+# make a mesh
+mesh = smesh_builder.Mesh( box )
+
+# define quadrangle meshing
+algo1d = mesh.Segment()
+algo1d.LocalLength( 1. )
+mesh.Quadrangle()
+
+# add Hexahedron algo to assure that there are no triangles
+mesh.Hexahedron()
+
+# define refinement near vertices
+algo1d.LengthNearVertex( 0.2 )
+
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/defining_hypotheses_vlapi_ex17.py b/doc/examples/defining_hypotheses_vlapi_ex17.py
new file mode 100644 (file)
index 0000000..3f4ed36
--- /dev/null
@@ -0,0 +1,84 @@
+# Viscous layers construction
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+X = geom_builder.MakeVectorDXDYDZ( 1,0,0 )
+O = geom_builder.MakeVertex( 100,50,50 )
+plane = geom_builder.MakePlane( O, X, 200 ) # plane YZ
+
+box = geom_builder.MakeBoxDXDYDZ(200,100,100)
+
+shape = geom_builder.MakeHalfPartition( box, plane )
+
+faces = geom_builder.SubShapeAllSorted(shape, geom_builder.ShapeType["FACE"])
+face1 = faces[1]
+# 4 left, 34 middle, 50 right
+# Have to pass the middle face id, otherwise it is going to create two disjoint boxes
+# because the common face is not going to be ignored and both boxes are going to shrink
+# in this direction too
+ignoreFaces = [4,34,50]
+
+geom_builder.addToStudy( shape, "shape" )
+geom_builder.addToStudyInFather( shape, face1, "face1")
+
+# 3D Viscous layers
+mesh = smesh_builder.Mesh(shape, "CFD")
+
+ViscousBuilder = mesh.ViscousLayerBuilder()
+thickness = 20 
+numberOfLayers = 10
+stretchFactor = 1.5
+groupName = "Boundary layers"
+ViscousBuilder.setBuilderParameters( thickness, numberOfLayers, stretchFactor, 
+                                                ignoreFaces,                # optional
+                                                groupName = groupName )     # optional
+
+Shrinkshape = ViscousBuilder.GetShrinkGeometry()
+
+shrinkMesh = smesh_builder.Mesh(Shrinkshape, "Shrink")
+shrinkMesh.Segment().NumberOfSegments( 4 )
+faces = geom_builder.SubShapeAllSorted(Shrinkshape, geom_builder.ShapeType["FACE"])
+shrinkFace1 = faces[1]
+
+shrinkMesh.Triangle()
+shrinkMesh.Quadrangle(shrinkFace1)
+algo3D = shrinkMesh.Tetrahedron()
+
+if not shrinkMesh.Compute(): raise Exception("Error when computing Mesh")
+
+#Add viscous layer
+FinalMesh = ViscousBuilder.AddLayers( shrinkMesh )
+
+mesh.MakeGroup("Tetras",SMESH.VOLUME,SMESH.FT_ElemGeomType,"=",SMESH.Geom_TETRA)
+mesh.MakeGroup("Pyras",SMESH.VOLUME,SMESH.FT_ElemGeomType,"=",SMESH.Geom_PYRAMID)
+mesh.MakeGroup("Prims",SMESH.VOLUME,SMESH.FT_ElemGeomType,"=",SMESH.Geom_PENTA)
+
+# 2D Viscous layers
+
+# 3 edges of the 4 edges of face1
+edgeIds = geom_builder.SubShapeAllIDs( face1, geom_builder.ShapeType["EDGE"])[:-1]
+
+mesh = smesh_builder.Mesh(face1,"Face1")
+ViscousBuilder = mesh.ViscousLayerBuilder()
+ViscousBuilder.setBuilderParameters( 2, 3, 1.5, 
+                                    edgeIds, True, # optional
+                                    groupName = groupName )     # optional
+
+#For 2D, edges are not selectable (to be developed in occt) the entire face is shrink
+shrinkFace = ViscousBuilder.GetShrinkGeometry()
+shrinkMesh = smesh_builder.Mesh(shrinkFace, "VicsousLayers2D")
+
+shrinkMesh.Segment().NumberOfSegments( 5 )
+algo2D = shrinkMesh.Triangle()
+
+if not shrinkMesh.Compute(): raise Exception("Error when computing Mesh of shrink face")
+
+FinalMeshFace = ViscousBuilder.AddLayers( shrinkMesh )
\ No newline at end of file
diff --git a/doc/examples/filters_belong2group.py b/doc/examples/filters_belong2group.py
new file mode 100644 (file)
index 0000000..e8d0395
--- /dev/null
@@ -0,0 +1,18 @@
+# Belong to Mesh Group criterion
+
+# create mesh
+from mechanic import *
+
+# create a group of all faces (quadrangles) generated on sub_face3
+quads_on_face3 = mesh.MakeGroup("quads_on_face3", SMESH.FACE, SMESH.FT_BelongToGeom,'=',sub_face3)
+print("There are %s quadrangles generated on '%s' and included in the group '%s'" % ( quads_on_face3.Size(), sub_face3.GetName(), quads_on_face3.GetName() ))
+
+# create a group of all the rest quadrangles, generated on other faces by combining 2 criteria:
+# - negated FT_BelongToMeshGroup to select elements not included in quads_on_face3
+# - FT_ElemGeomType to select quadrangles
+not_on_face3 = smesh_builder.GetCriterion( SMESH.FACE, SMESH.FT_BelongToMeshGroup,'=',quads_on_face3, SMESH.FT_LogicalNOT )
+quadrangles  = smesh_builder.GetCriterion( SMESH.FACE, SMESH.FT_ElemGeomType,'=',SMESH.Geom_QUADRANGLE )
+
+rest_quads = mesh.MakeGroupByCriteria("rest_quads", [ not_on_face3, quadrangles ])
+print("'%s' group includes all the rest %s quadrangles" % ( rest_quads.GetName(), rest_quads.Size() ))
+
diff --git a/doc/examples/filters_ex01.py b/doc/examples/filters_ex01.py
new file mode 100644 (file)
index 0000000..5f1604f
--- /dev/null
@@ -0,0 +1,44 @@
+# Aspect ratio
+# This script demonstrates various usages of filters
+
+# create mesh
+from mechanic import *
+
+# get faces with aspect ratio > 2.5
+filter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_AspectRatio, SMESH.FT_MoreThan, 2.5)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of faces with aspect ratio > 2.5:", len(ids))
+
+# get faces with aspect ratio > 1.5
+filter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_AspectRatio, '>', 1.5, mesh=mesh)
+ids = filter.GetIDs()
+print("Number of faces with aspect ratio > 1.5:", len(ids))
+
+# copy the faces with aspect ratio > 1.5 to another mesh;
+# this demonstrates that a filter can be used where usually a group or sub-mesh is acceptable
+filter.SetMesh( mesh.GetMesh() ) # - actually non necessary as mesh is set at filter creation
+mesh2 = smesh_builder.CopyMesh( filter, "AR > 1.5" )
+print("Number of copied faces with aspect ratio > 1.5:", mesh2.NbFaces())
+
+# create a group (Group on Filter) of faces with Aspect Ratio < 1.5
+group = mesh.MakeGroup("AR < 1.5", SMESH.FACE, SMESH.FT_AspectRatio, '<', 1.5)
+print("Number of faces with aspect ratio < 1.5:", group.Size())
+
+# combine several criteria to Create a Group of only Triangular faces with Aspect Ratio < 1.5;
+# note that contents of a GroupOnFilter is dynamically updated as the mesh changes
+crit = [ smesh_builder.GetCriterion( SMESH.FACE, SMESH.FT_AspectRatio, '<', 1.5, BinaryOp=SMESH.FT_LogicalAND ),
+         smesh_builder.GetCriterion( SMESH.FACE, SMESH.FT_ElemGeomType,'=', SMESH.Geom_TRIANGLE ) ]
+triaGroup = mesh.MakeGroupByCriteria( "Tria AR < 1.5", crit )
+print("Number of triangles with aspect ratio < 1.5:", triaGroup.Size())
+
+# get range of values of Aspect Ratio of all faces in the mesh
+aspects = mesh.GetMinMax( SMESH.FT_AspectRatio )
+print("MESH: Min aspect = %s, Max aspect = %s" % ( aspects[0], aspects[1] ))
+
+# get max value of Aspect Ratio of faces in triaGroup
+grAspects = mesh.GetMinMax( SMESH.FT_AspectRatio, triaGroup )
+print("GROUP: Max aspect = %s" % grAspects[1])
+
+# get Aspect Ratio of an element
+aspect = mesh.FunctorValue( SMESH.FT_AspectRatio, ids[0] )
+print("Aspect ratio of the face %s = %s" % ( ids[0], aspect ))
diff --git a/doc/examples/filters_ex02.py b/doc/examples/filters_ex02.py
new file mode 100644 (file)
index 0000000..1e00b70
--- /dev/null
@@ -0,0 +1,9 @@
+# Aspect ratio 3D
+
+# create mesh with volumes
+from mechanic import *
+
+# get volumes with aspect ratio < 2.0
+filter = smesh_builder.GetFilter(SMESH.VOLUME, SMESH.FT_AspectRatio3D, SMESH.FT_LessThan, 2.0)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of volumes with aspect ratio < 2.0:", len(ids))
diff --git a/doc/examples/filters_ex03.py b/doc/examples/filters_ex03.py
new file mode 100644 (file)
index 0000000..c10c1eb
--- /dev/null
@@ -0,0 +1,9 @@
+# Warping angle
+
+# create mesh
+from mechanic import *
+
+# get faces with warping angle = 2.0e-13 with tolerance 5.0e-14
+filter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Warping, "=", 2.0e-13, Tolerance=5.0e-14)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of faces with warping angle = 2.0e-13 (tolerance 5.0e-14):", len(ids))
diff --git a/doc/examples/filters_ex04.py b/doc/examples/filters_ex04.py
new file mode 100644 (file)
index 0000000..96d9e2e
--- /dev/null
@@ -0,0 +1,9 @@
+# Minimum angle
+
+# create mesh
+from mechanic import *
+
+# get faces with minimum angle > 75
+filter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_MinimumAngle,">", 75)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of faces with minimum angle > 75:", len(ids))
diff --git a/doc/examples/filters_ex05.py b/doc/examples/filters_ex05.py
new file mode 100644 (file)
index 0000000..f3ddf6a
--- /dev/null
@@ -0,0 +1,9 @@
+# Taper
+
+# create mesh
+from mechanic import *
+
+# get faces with taper < 1.e-15
+filter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Taper, SMESH.FT_LessThan, 1.e-15)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of faces with taper < 1.e-15:", len(ids))
diff --git a/doc/examples/filters_ex06.py b/doc/examples/filters_ex06.py
new file mode 100644 (file)
index 0000000..a62dbf6
--- /dev/null
@@ -0,0 +1,9 @@
+# Skew
+
+# create mesh
+from mechanic import *
+
+# get faces with skew > 50
+filter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Skew, SMESH.FT_MoreThan, 50)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of faces with skew > 50:", len(ids))
diff --git a/doc/examples/filters_ex07.py b/doc/examples/filters_ex07.py
new file mode 100644 (file)
index 0000000..1684de1
--- /dev/null
@@ -0,0 +1,11 @@
+# Area
+
+# create mesh
+from mechanic import *
+
+# get faces with area > 60 and < 90
+criterion1 = smesh_builder.GetCriterion(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 60)
+criterion2 = smesh_builder.GetCriterion(SMESH.FACE, SMESH.FT_Area, SMESH.FT_LessThan, 90)
+filter = smesh_builder.GetFilterFromCriteria([criterion1,criterion2], SMESH.FT_LogicalAND)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of faces with area in range (60,90):", len(ids))
diff --git a/doc/examples/filters_ex08.py b/doc/examples/filters_ex08.py
new file mode 100644 (file)
index 0000000..a56e45b
--- /dev/null
@@ -0,0 +1,9 @@
+# Volume
+
+# create mesh with volumes
+from mechanic import *
+
+# get volumes faces with volume > 100
+filter = smesh_builder.GetFilter(SMESH.VOLUME, SMESH.FT_Volume3D, SMESH.FT_MoreThan, 100)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of volumes with volume > 100:", len(ids))
diff --git a/doc/examples/filters_ex09.py b/doc/examples/filters_ex09.py
new file mode 100644 (file)
index 0000000..30bf3d9
--- /dev/null
@@ -0,0 +1,23 @@
+# Free borders
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create mesh
+face = geom_builder.MakeFaceHW(100, 100, 1, theName="quadrangle")
+mesh = smesh_builder.Mesh(face)
+mesh.Segment().NumberOfSegments(10)
+mesh.Triangle().MaxElementArea(25)
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# get all free borders
+filter = smesh_builder.GetFilter(SMESH.EDGE, SMESH.FT_FreeBorders)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of edges on free borders:", len(ids))
diff --git a/doc/examples/filters_ex10.py b/doc/examples/filters_ex10.py
new file mode 100644 (file)
index 0000000..741bfe1
--- /dev/null
@@ -0,0 +1,24 @@
+# Free edges
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create mesh
+face = geom_builder.MakeFaceHW(100, 100, 1)
+geom_builder.addToStudy( face, "quadrangle" )
+mesh = smesh_builder.Mesh(face)
+mesh.Segment().NumberOfSegments(10)
+mesh.Triangle().MaxElementArea(25)
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# get all faces with free edges
+filter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_FreeEdges)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of faces with free edges:", len(ids))
diff --git a/doc/examples/filters_ex11.py b/doc/examples/filters_ex11.py
new file mode 100644 (file)
index 0000000..3c4751b
--- /dev/null
@@ -0,0 +1,12 @@
+# Free nodes
+
+# create mesh
+from mechanic import *
+
+# add node
+mesh.AddNode(0,0,0)
+
+# get all free nodes
+filter = smesh_builder.GetFilter(SMESH.NODE, SMESH.FT_FreeNodes)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of free nodes:", len(ids))
diff --git a/doc/examples/filters_ex12.py b/doc/examples/filters_ex12.py
new file mode 100644 (file)
index 0000000..9dc0213
--- /dev/null
@@ -0,0 +1,9 @@
+# Free faces
+
+# create mesh
+from mechanic import *
+
+# get all free faces
+filter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_FreeFaces)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of free faces:", len(ids))
diff --git a/doc/examples/filters_ex13.py b/doc/examples/filters_ex13.py
new file mode 100644 (file)
index 0000000..89e7acd
--- /dev/null
@@ -0,0 +1,12 @@
+# Bare border faces
+
+# create mesh
+from mechanic import *
+
+# remove some faces to have faces with bare borders
+mesh.RemoveElements( mesh.GetElementsByType(SMESH.FACE)[0:5] )
+
+# get all faces with bare borders
+filter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_BareBorderFace)
+ids = mesh.GetIdsFromFilter(filter)
+print("Faces with bare borders:", ids)
diff --git a/doc/examples/filters_ex14.py b/doc/examples/filters_ex14.py
new file mode 100644 (file)
index 0000000..a5e0273
--- /dev/null
@@ -0,0 +1,10 @@
+# Coplanar faces
+
+# create mesh
+from mechanic import *
+
+faceID = mesh.GetElementsByType(SMESH.FACE)[0]
+# get all faces co-planar to the first face with tolerance 5 degrees
+filter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_CoplanarFaces,faceID,Tolerance=5.0)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of faces coplanar with the first one:", len(ids))
diff --git a/doc/examples/filters_ex15.py b/doc/examples/filters_ex15.py
new file mode 100644 (file)
index 0000000..ff022e6
--- /dev/null
@@ -0,0 +1,9 @@
+# Over-constrained faces
+
+# create mesh
+from mechanic import *
+
+# get all over-constrained faces
+filter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_OverConstrainedFace)
+ids = mesh.GetIdsFromFilter(filter)
+print("Over-constrained faces:", ids)
diff --git a/doc/examples/filters_ex16.py b/doc/examples/filters_ex16.py
new file mode 100644 (file)
index 0000000..01b2fa4
--- /dev/null
@@ -0,0 +1,30 @@
+# Double edges, Double faces, Double volumes
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# make a mesh on a box
+box = geom_builder.MakeBoxDXDYDZ(100,100,100)
+mesh = smesh_builder.Mesh( box, "Box" )
+mesh.Segment().NumberOfSegments(10)
+mesh.Quadrangle()
+mesh.Hexahedron()
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+# copy all elements with translation and Merge nodes
+mesh.TranslateObject( mesh, smesh_builder.MakeDirStruct( 10,0,0), Copy=True )
+mesh.MergeNodes( mesh.FindCoincidentNodes(1e-7) )
+# create filters to find equal elements
+equalEdgesFilter   = smesh_builder.GetFilter(SMESH.EDGE, SMESH.FT_EqualEdges)
+equalFacesFilter   = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_EqualFaces)
+equalVolumesFilter = smesh_builder.GetFilter(SMESH.VOLUME, SMESH.FT_EqualVolumes)
+# get equal elements
+print("Number of equal edges:",   len( mesh.GetIdsFromFilter( equalEdgesFilter )))
+print("Number of equal faces:",   len( mesh.GetIdsFromFilter( equalFacesFilter )))
+print("Number of equal volumes:", len( mesh.GetIdsFromFilter( equalVolumesFilter )))
diff --git a/doc/examples/filters_ex17.py b/doc/examples/filters_ex17.py
new file mode 100644 (file)
index 0000000..9d6c27c
--- /dev/null
@@ -0,0 +1,25 @@
+# Double nodes
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# make a mesh on a box
+box = geom_builder.MakeBoxDXDYDZ(100,100,100)
+mesh = smesh_builder.Mesh( box, "Box" )
+mesh.Segment().NumberOfSegments(10)
+mesh.Quadrangle()
+mesh.Hexahedron()
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+# copy all elements with translation
+mesh.TranslateObject( mesh, [10,0,0], Copy=True )
+# create  a filter to find nodes equal within tolerance of 1e-5
+filter = smesh_builder.GetFilter(SMESH.NODE, SMESH.FT_EqualNodes, Tolerance=1e-5)
+# get equal nodes
+print("Number of equal nodes:", len( mesh.GetIdsFromFilter( filter )))
diff --git a/doc/examples/filters_ex18.py b/doc/examples/filters_ex18.py
new file mode 100644 (file)
index 0000000..22369a4
--- /dev/null
@@ -0,0 +1,27 @@
+# Borders at multi-connection
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# make a mesh on a box
+box = geom_builder.MakeBoxDXDYDZ(100,100,100)
+mesh = smesh_builder.Mesh( box, "Box" )
+mesh.Segment().NumberOfSegments(10)
+mesh.Quadrangle()
+mesh.Hexahedron()
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+# copy all elements with translation and merge nodes
+mesh.TranslateObject( mesh, [10,0,0], Copy=True )
+mesh.MergeNodes( mesh.FindCoincidentNodes( 1e-5 ))
+
+# get mesh edges with number of connected elements (faces and volumes) == 3
+filter = smesh_builder.GetFilter(SMESH.EDGE, SMESH.FT_MultiConnection, 3)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of border edges with 3 faces connected:", len(ids))
diff --git a/doc/examples/filters_ex19.py b/doc/examples/filters_ex19.py
new file mode 100644 (file)
index 0000000..b55a08a
--- /dev/null
@@ -0,0 +1,9 @@
+# Borders at multi-connection 2D
+
+# create mesh
+from mechanic import *
+
+# get faces which consist of edges belonging to 2 mesh elements
+filter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_MultiConnection2D, 2)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of faces consisting of edges belonging to 2 faces:", len(ids))
diff --git a/doc/examples/filters_ex20.py b/doc/examples/filters_ex20.py
new file mode 100644 (file)
index 0000000..d0a22f6
--- /dev/null
@@ -0,0 +1,9 @@
+# Length
+
+# create mesh
+from mechanic import *
+
+# get edges with length > 14
+filter = smesh_builder.GetFilter(SMESH.EDGE, SMESH.FT_Length, SMESH.FT_MoreThan, 14)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of edges with length > 14:", len(ids))
diff --git a/doc/examples/filters_ex21.py b/doc/examples/filters_ex21.py
new file mode 100644 (file)
index 0000000..229a0ca
--- /dev/null
@@ -0,0 +1,9 @@
+# Length 2D
+
+# create mesh
+from mechanic import *
+
+# get all faces that have edges with length > 14
+filter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_MaxElementLength2D, SMESH.FT_MoreThan, 14)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of faces with maximum edge length > 14:", len(ids))
diff --git a/doc/examples/filters_ex22.py b/doc/examples/filters_ex22.py
new file mode 100644 (file)
index 0000000..96f8bda
--- /dev/null
@@ -0,0 +1,9 @@
+# Element Diameter 2D
+
+# create mesh
+from mechanic import *
+
+# get all faces that have elements with length > 10
+filter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_MaxElementLength2D, SMESH.FT_MoreThan, 10)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of faces with maximum element length > 10:", len(ids))
diff --git a/doc/examples/filters_ex23.py b/doc/examples/filters_ex23.py
new file mode 100644 (file)
index 0000000..8a34c16
--- /dev/null
@@ -0,0 +1,9 @@
+# Element Diameter 3D
+
+# create mesh with volumes
+from mechanic import *
+
+# get all volumes that have elements with length > 10
+filter = smesh_builder.GetFilter(SMESH.VOLUME, SMESH.FT_MaxElementLength3D, SMESH.FT_MoreThan, 10)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of volumes with maximum element length > 10:", len(ids))
diff --git a/doc/examples/filters_ex24.py b/doc/examples/filters_ex24.py
new file mode 100644 (file)
index 0000000..2d8075c
--- /dev/null
@@ -0,0 +1,11 @@
+# Bare border volumes
+
+# create mesh
+from mechanic import *
+
+# remove some volumes to have volumes with bare borders
+mesh.RemoveElements(mesh.GetElementsByType(SMESH.VOLUME)[0:5])
+# get all volumes with bare borders
+filter = smesh_builder.GetFilter(SMESH.VOLUME, SMESH.FT_BareBorderVolume)
+ids = mesh.GetIdsFromFilter(filter)
+print("Volumes with bare borders:", ids)
diff --git a/doc/examples/filters_ex25.py b/doc/examples/filters_ex25.py
new file mode 100644 (file)
index 0000000..2cae3e1
--- /dev/null
@@ -0,0 +1,9 @@
+# Over-constrained volumes
+
+# create mesh
+from mechanic import *
+
+# get all over-constrained volumes
+filter = smesh_builder.GetFilter(SMESH.VOLUME, SMESH.FT_OverConstrainedVolume)
+ids = mesh.GetIdsFromFilter(filter)
+print("Over-constrained volumes:", ids)
diff --git a/doc/examples/filters_ex26.py b/doc/examples/filters_ex26.py
new file mode 100644 (file)
index 0000000..71bfc4b
--- /dev/null
@@ -0,0 +1,9 @@
+# Belong to Geom
+
+# create mesh
+from mechanic import *
+
+# get all faces which nodes lie on the face sub_face3
+filter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_BelongToGeom, sub_face3)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of faces which nodes lie on sub_face3:", len(ids))
diff --git a/doc/examples/filters_ex27.py b/doc/examples/filters_ex27.py
new file mode 100644 (file)
index 0000000..8ac06e3
--- /dev/null
@@ -0,0 +1,9 @@
+# Lying on Geom
+
+# create mesh
+from mechanic import *
+
+# get all faces at least one node of each lies on the face sub_face3
+filter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_LyingOnGeom, sub_face3)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of faces at least one node of each lies on sub_face3:", len(ids))
diff --git a/doc/examples/filters_ex28.py b/doc/examples/filters_ex28.py
new file mode 100644 (file)
index 0000000..19e6983
--- /dev/null
@@ -0,0 +1,13 @@
+# Belong to Plane
+
+# create mesh
+from mechanic import *
+
+# create plane
+plane_1 = geom_builder.MakePlane(p3,seg1,2000)
+geom_builder.addToStudy(plane_1, "plane_1")
+
+# get all nodes which lie on the plane \a plane_1
+filter = smesh_builder.GetFilter(SMESH.NODE, SMESH.FT_BelongToPlane, plane_1)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of nodes which lie on the plane plane_1:", len(ids))
diff --git a/doc/examples/filters_ex29.py b/doc/examples/filters_ex29.py
new file mode 100644 (file)
index 0000000..5b2b9db
--- /dev/null
@@ -0,0 +1,9 @@
+# Belong to Cylinder
+
+# create mesh
+from mechanic import *
+
+# get all faces which lie on the cylindrical face \a sub_face1
+filter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_BelongToCylinder, sub_face1)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of faces which lie on the cylindrical surface sub_face1:", len(ids))
diff --git a/doc/examples/filters_ex30.py b/doc/examples/filters_ex30.py
new file mode 100644 (file)
index 0000000..b34bdad
--- /dev/null
@@ -0,0 +1,14 @@
+# Belong to Surface
+
+# create mesh
+from mechanic import *
+
+# create b-spline
+spline_1 = geom_builder.MakeInterpol([p4,p6,p3,p1])
+surface_1 = geom_builder.MakePrismVecH( spline_1, vz, 70.0 )
+geom_builder.addToStudy(surface_1, "surface_1")
+
+# get all nodes which lie on the surface \a surface_1
+filter = smesh_builder.GetFilter(SMESH.NODE, SMESH.FT_BelongToGenSurface, surface_1)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of nodes which lie on the surface surface_1:", len(ids))
diff --git a/doc/examples/filters_ex31.py b/doc/examples/filters_ex31.py
new file mode 100644 (file)
index 0000000..5bbad4e
--- /dev/null
@@ -0,0 +1,13 @@
+# Range of IDs
+
+# create mesh
+from mechanic import *
+
+# get nodes with identifiers [5-10] and [15-30]
+criterion1 = smesh_builder.GetCriterion(SMESH.NODE, SMESH.FT_RangeOfIds, Threshold="5-10",\
+                                        BinaryOp=SMESH.FT_LogicalOR)
+criterion2 = smesh_builder.GetCriterion(SMESH.NODE, SMESH.FT_RangeOfIds, Threshold="15-30")
+filter = smesh_builder.CreateFilterManager().CreateFilter()
+filter.SetCriteria([criterion1,criterion2])
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of nodes in ranges [5-10] and [15-30]:", len(ids))
diff --git a/doc/examples/filters_ex32.py b/doc/examples/filters_ex32.py
new file mode 100644 (file)
index 0000000..f0e0781
--- /dev/null
@@ -0,0 +1,9 @@
+# Badly oriented volume
+
+# create mesh with volumes
+from mechanic import *
+
+# get all badly oriented volumes
+filter = smesh_builder.GetFilter(SMESH.VOLUME, SMESH.FT_BadOrientedVolume)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of badly oriented volumes:", len(ids))
diff --git a/doc/examples/filters_ex33.py b/doc/examples/filters_ex33.py
new file mode 100644 (file)
index 0000000..8d90a65
--- /dev/null
@@ -0,0 +1,20 @@
+# Linear / quadratic
+
+# create mesh
+from mechanic import *
+
+# get linear and quadratic edges
+filter_linear    = smesh_builder.GetFilter(SMESH.EDGE, SMESH.FT_LinearOrQuadratic)
+filter_quadratic = smesh_builder.GetFilter(SMESH.EDGE, SMESH.FT_LinearOrQuadratic, SMESH.FT_LogicalNOT)
+ids_linear    = mesh.GetIdsFromFilter(filter_linear)
+ids_quadratic = mesh.GetIdsFromFilter(filter_quadratic)
+print("Number of linear edges:", len(ids_linear), "; number of quadratic edges:", len(ids_quadratic))
+
+# convert mesh to quadratic
+print("Convert to quadratic...")
+mesh.ConvertToQuadratic()
+
+# get linear and quadratic edges
+ids_linear    = mesh.GetIdsFromFilter(filter_linear)
+ids_quadratic = mesh.GetIdsFromFilter(filter_quadratic)
+print("Number of linear edges:", len(ids_linear), "; number of quadratic edges:", len(ids_quadratic))
diff --git a/doc/examples/filters_ex34.py b/doc/examples/filters_ex34.py
new file mode 100644 (file)
index 0000000..5fcb89a
--- /dev/null
@@ -0,0 +1,15 @@
+# Group color
+
+# create mesh
+from mechanic import *
+
+# create group of edges
+all_edges = mesh.GetElementsByType(SMESH.EDGE)
+grp = mesh.MakeGroupByIds("edges group", SMESH.EDGE, all_edges[:len(all_edges) // 4])
+import SALOMEDS
+c = SALOMEDS.Color(0.1, 0.5, 1.0)
+grp.SetColor(c)
+# get number of the edges not belonging to the group with the given color
+filter = smesh_builder.GetFilter(SMESH.EDGE, SMESH.FT_GroupColor, c, SMESH.FT_LogicalNOT)
+ids = mesh.GetIdsFromFilter(filter)
+print ("Number of edges not belonging to the group with color (0.1, 0.5, 1.0):", len(ids))
diff --git a/doc/examples/filters_ex35.py b/doc/examples/filters_ex35.py
new file mode 100644 (file)
index 0000000..a44fce5
--- /dev/null
@@ -0,0 +1,18 @@
+# Geometry type
+
+# create mesh with volumes
+from mechanic import *
+
+# get all triangles, quadrangles, tetrahedrons, pyramids
+filter_tri = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_ElemGeomType, SMESH.Geom_TRIANGLE)
+filter_qua = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_ElemGeomType, SMESH.Geom_QUADRANGLE)
+filter_tet = smesh_builder.GetFilter(SMESH.VOLUME, SMESH.FT_ElemGeomType, SMESH.Geom_TETRA)
+filter_pyr = smesh_builder.GetFilter(SMESH.VOLUME, SMESH.FT_ElemGeomType, SMESH.Geom_PYRAMID)
+ids_tri = mesh.GetIdsFromFilter(filter_tri)
+ids_qua = mesh.GetIdsFromFilter(filter_qua)
+ids_tet = mesh.GetIdsFromFilter(filter_tet)
+ids_pyr = mesh.GetIdsFromFilter(filter_pyr)
+print("Number of triangles:", len(ids_tri))
+print("Number of quadrangles:", len(ids_qua))
+print("Number of tetrahedrons:", len(ids_tet))
+print("Number of pyramids:", len(ids_pyr))
diff --git a/doc/examples/filters_ex36.py b/doc/examples/filters_ex36.py
new file mode 100644 (file)
index 0000000..ebf39f3
--- /dev/null
@@ -0,0 +1,17 @@
+# Combine several criteria into a filter
+
+# create mesh
+from mechanic import *
+
+# get all the quadrangle faces ...
+criterion1 = smesh_builder.GetCriterion(SMESH.FACE, SMESH.FT_ElemGeomType, SMESH.Geom_QUADRANGLE, SMESH.FT_LogicalAND)
+# ... but those from sub_face3
+criterion2 = smesh_builder.GetCriterion(SMESH.FACE, SMESH.FT_BelongToGeom, sub_face3, SMESH.FT_LogicalNOT)
+
+quadFilter = smesh_builder.GetFilterFromCriteria([criterion1,criterion2])
+
+# get faces satisfying the criteria
+ids = mesh.GetIdsFromFilter(quadFilter)
+
+# create a group of faces satisfying the criteria
+myGroup = mesh.GroupOnFilter(SMESH.FACE,"Quads_on_cylindrical_faces",quadFilter)
diff --git a/doc/examples/filters_ex37.py b/doc/examples/filters_ex37.py
new file mode 100644 (file)
index 0000000..821e241
--- /dev/null
@@ -0,0 +1,15 @@
+# Entity type
+
+# create a mesh
+from mechanic import *
+
+# make the mesh quadratic
+mesh.ConvertToQuadratic()
+# make some elements bi-quadratic
+for face in shape_faces[: len(shape_faces) // 2]:
+    mesh.ConvertToQuadratic( theSubMesh=mesh.Group( face ), theToBiQuad=True )
+
+# get triangles with 7 nodes
+filter_tri = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_EntityType,'=', SMESH.Entity_BiQuad_Triangle )
+ids_tri = mesh.GetIdsFromFilter(filter_tri)
+print("Number of bi-quadratic triangles:", len(ids_tri))
diff --git a/doc/examples/filters_ex38.py b/doc/examples/filters_ex38.py
new file mode 100644 (file)
index 0000000..1aee732
--- /dev/null
@@ -0,0 +1,15 @@
+# Ball diameter
+
+# create a mesh
+from mechanic import *
+
+# create several balls with increasing diameter
+for i in range(1,10):
+    diameter = float( i )
+    mesh.AddBall( i, diameter )
+    pass
+
+# get balls with diameter > 5.
+diam_filter = smesh_builder.GetFilter(SMESH.BALL, SMESH.FT_BallDiameter,'>', 5. )
+ids = mesh.GetIdsFromFilter( diam_filter )
+print("Number of balls with diameter > 5:", len(ids))
diff --git a/doc/examples/filters_ex39.py b/doc/examples/filters_ex39.py
new file mode 100644 (file)
index 0000000..587138e
--- /dev/null
@@ -0,0 +1,55 @@
+# "Elements of a domain" filter and "Renumber" hypothesis
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create two boxes to have two domains in the mesh
+
+box1 = geom_builder.MakeBoxDXDYDZ( 100,100,100 )
+box2 = geom_builder.MakeTranslation( box1, 200, 0, 0 )
+boxes = geom_builder.MakeCompound( [box1, box2] )
+box1, box2 = geom_builder.SubShapeAll( boxes, geom_builder.ShapeType["SHAPE"], "box")
+
+vertex = geom_builder.SubShape( box1, geom_builder.ShapeType["VERTEX"], [1] )
+
+# create a mesh
+
+mesh = smesh_builder.Mesh( boxes )
+mesh.Segment(box1).NumberOfSegments( 5 )  # to have different nb of elements on the boxes
+mesh.Segment(box2).NumberOfSegments( 10 )
+mesh.Quadrangle()
+ijkAlgo = mesh.Hexahedron()
+
+# Use Renumber hypothesis to get hexahedra and nodes numbered like in a structured mesh.
+# k axis of box1 will be ( 100,100,0 ) - ( 100,100,100 )
+# k axis of box2 will be ( 0,0,0 ) - (0,0,100), by default
+v000 = geom_builder.MakeVertex( 100,100,0, theName='v000' ) # can use box sub-vertex or standalone one
+v001 = geom_builder.GetVertexNearPoint( box1, geom_builder.MakeVertex(100,100,100), theName='v001')
+ijkAlgo.Renumber([ smeshBuilder.BlockCS( box1, v000, v001 ) ])
+
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# Create filters with FT_ConnectedElements criterion by pointing a domain in different ways:
+
+# using point coordinates in box_1
+nodeFilter = smesh_builder.GetFilter( SMESH.NODE, SMESH.FT_ConnectedElements, "=", "1.,2,10", mesh=mesh )
+print("Nb. nodes in box_1:", len( nodeFilter.GetIDs()))
+
+# using point coordinates in box_2
+edgeFilter = smesh_builder.GetFilter( SMESH.EDGE, SMESH.FT_ConnectedElements, "=", [202,1,1 ], mesh=mesh )
+print("Nb. segments in box_2:", len( edgeFilter.GetIDs()))
+
+# using a geom vertex of box_1
+faceFilter = smesh_builder.GetFilter( SMESH.FACE, SMESH.FT_ConnectedElements, "=", vertex, mesh=mesh )
+print("Nb. faces in box_1:", len( edgeFilter.GetIDs()))
+
+# using node ID in box_2
+voluFilter = smesh_builder.GetFilter( SMESH.VOLUME, SMESH.FT_ConnectedElements, "=", 10, mesh=mesh )
+print("Nb. volumes in box_2:", len( voluFilter.GetIDs()))
diff --git a/doc/examples/filters_ex40.py b/doc/examples/filters_ex40.py
new file mode 100644 (file)
index 0000000..8abb7e4
--- /dev/null
@@ -0,0 +1,9 @@
+# Scaled Jacobian
+
+# create mesh with volumes
+from mechanic import *
+
+# get volumes with scaled jacobian > 0.75
+filter = smesh_builder.GetFilter(SMESH.VOLUME, SMESH.FT_ScaledJacobian, SMESH.FT_MoreThan, 0.75 )
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of volumes with scaled jacobian > 0.75:", len(ids))
diff --git a/doc/examples/filters_ex41.py b/doc/examples/filters_ex41.py
new file mode 100644 (file)
index 0000000..30fec54
--- /dev/null
@@ -0,0 +1,9 @@
+# Warping 3D
+
+# create mesh
+from mechanic import *
+
+# get faces with warping angle = 2.0e-13 with tolerance 5.0e-14
+filter = smesh_builder.GetFilter(SMESH.VOLUME, SMESH.FT_Warping3D, "=", 2.0e-13, Tolerance=5.0e-14)
+ids = mesh.GetIdsFromFilter(filter)
+print("Number of volumes with warping = 2.0e-13 (tolerance 5.0e-14):", len(ids))
diff --git a/doc/examples/filters_node_nb_conn.py b/doc/examples/filters_node_nb_conn.py
new file mode 100644 (file)
index 0000000..052ff9d
--- /dev/null
@@ -0,0 +1,9 @@
+# Number of connectivities of a node
+
+# create a mesh
+from mechanic import *
+
+# get nodes connected to more than 6 tetrahedra
+conn_nb_filter = smesh_builder.GetFilter(SMESH.NODE, SMESH.FT_NodeConnectivityNumber,'>', 6 )
+ids = mesh.GetIdsFromFilter( conn_nb_filter )
+print("Number of nodes connected to more than 6 tetrahedra:", len(ids))
diff --git a/doc/examples/generate_flat_elements.py b/doc/examples/generate_flat_elements.py
new file mode 100644 (file)
index 0000000..f816da0
--- /dev/null
@@ -0,0 +1,62 @@
+# Double nodes on groups boundaries
+
+# This example represents an iron cable (a thin cylinder) in a concrete block (a big cylinder).
+# The big cylinder is defined by two geometric volumes.
+
+import salome
+salome.salome_init_without_session()
+
+import GEOM
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# geometry 
+
+O = geom_builder.MakeVertex(0, 0, 0)
+OX = geom_builder.MakeVectorDXDYDZ(1, 0, 0)
+OY = geom_builder.MakeVectorDXDYDZ(0, 1, 0)
+OZ = geom_builder.MakeVectorDXDYDZ(0, 0, 1)
+Vertex_1 = geom_builder.MakeVertex(50, 0, 0)
+Cylinder_1 = geom_builder.MakeCylinder(O, OX, 10, 500)
+Cylinder_2 = geom_builder.MakeCylinder(Vertex_1, OX, 100, 400)
+Vertex_2 = geom_builder.MakeVertex(-200, -200, -200)
+Vertex_3 = geom_builder.MakeVertex(250, 200, 200)
+Box_1 = geom_builder.MakeBoxTwoPnt(Vertex_2, Vertex_3)
+Fuse_1 = geom_builder.MakeFuse(Cylinder_1, Cylinder_2)
+Partition_1 = geom_builder.MakePartition([Fuse_1], [Cylinder_1, Box_1], [], [], geom_builder.ShapeType["SOLID"], 0, [], 0)
+[Solid_1,Solid_2] = geom_builder.GetShapesOnShape(Cylinder_1, Partition_1, geom_builder.ShapeType["SOLID"], GEOM.ST_IN)
+[Solid_3,Solid_4] = geom_builder.GetShapesOnShape(Cylinder_2, Partition_1, geom_builder.ShapeType["SOLID"], GEOM.ST_IN)
+Vertex_4 = geom_builder.MakeVertex(450, 0, 0)
+Vertex_5 = geom_builder.MakeVertex(500, 0, 0)
+Vertex_6 = geom_builder.MakeVertex(550, 0, 0)
+vec1 = geom_builder.MakeVector(Vertex_4, Vertex_5)
+vec2 = geom_builder.MakeVector(Vertex_5, Vertex_6)
+[Face_1] = geom_builder.GetShapesOnPlane(Partition_1, geom_builder.ShapeType["FACE"], vec1, GEOM.ST_ON)
+[Face_2] = geom_builder.GetShapesOnPlane(Partition_1, geom_builder.ShapeType["FACE"], vec2, GEOM.ST_ON)
+
+# meshing (we have linear tetrahedrons here, but other elements are OK)
+
+Mesh_1 = smesh_builder.Mesh(Partition_1)
+Mesh_1.Segment().NumberOfSegments(15)
+Mesh_1.Triangle().LengthFromEdges()
+Mesh_1.Tetrahedron()
+if not Mesh_1.Compute(): raise Exception("Error when computing Mesh")
+
+# relevant groups of volumes and faces
+
+Solid_1_1 = Mesh_1.GroupOnGeom(Solid_1,'Solid_1',SMESH.VOLUME)
+Solid_2_1 = Mesh_1.GroupOnGeom(Solid_2,'Solid_2',SMESH.VOLUME)
+Solid_3_1 = Mesh_1.GroupOnGeom(Solid_3,'Solid_3',SMESH.VOLUME)
+Solid_4_1 = Mesh_1.GroupOnGeom(Solid_4,'Solid_4',SMESH.VOLUME)
+Face_1_1 = Mesh_1.GroupOnGeom(Face_1,'Face_1',SMESH.FACE)
+Face_2_1 = Mesh_1.GroupOnGeom(Face_2,'Face_2',SMESH.FACE)
+
+# Building of flat elements
+
+Mesh_1.DoubleNodesOnGroupBoundaries([Solid_1_1, Solid_2_1, Solid_3_1, Solid_4_1], 1)
+
+Mesh_1.CreateFlatElementsOnFacesGroups([Face_1_1, Face_2_1])
diff --git a/doc/examples/grouping_elements_ex01.py b/doc/examples/grouping_elements_ex01.py
new file mode 100644 (file)
index 0000000..e76dbde
--- /dev/null
@@ -0,0 +1,70 @@
+# Create a Standalone Group
+
+from mechanic import *
+
+# Get ids of all faces with area > 100 
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 100.)
+
+anIds = mesh.GetIdsFromFilter(aFilter) 
+
+# create a group consisting of faces with area > 100
+aGroup1 = mesh.MakeGroupByIds("Area > 100", SMESH.FACE, anIds)
+
+# create a group that contains all nodes from the mesh
+aGroup2 = mesh.CreateEmptyGroup(SMESH.NODE, "all nodes")
+aGroup2.AddFrom(mesh.mesh)
+
+
+# ====================================
+# Various methods of the Group object
+# ====================================
+
+aGroup = mesh.CreateEmptyGroup(SMESH.NODE, "aGroup")
+
+# set/get group name
+aGroup.SetName( "new name" )
+print("name", aGroup.GetName())
+
+# get group type (type of entities in the group, SMESH.NODE in our case)
+print("type", aGroup.GetType())
+
+# get number of entities (nodes in our case) in the group
+print("size", aGroup.Size())
+
+# check of emptiness
+print("is empty", aGroup.IsEmpty())
+
+# check of presence of an entity in the group
+aGroup.Add([1,2]) # Add() method is specific to the standalone group
+print("contains node 2", aGroup.Contains(2))
+
+# get an entity by index
+print("1st node", aGroup.GetID(1))
+
+# get all entities
+print("all", aGroup.GetIDs())
+
+# get number of nodes (actual for groups of elements)
+print("nb nodes", aGroup.GetNumberOfNodes())
+
+# get underlying nodes (actual for groups of elements)
+print("nodes", aGroup.GetNodeIDs())
+
+# set/get color
+import SALOMEDS
+aGroup.SetColor( SALOMEDS.Color(1.,1.,0.));
+print("color", aGroup.GetColor())
+
+# ----------------------------------------------------------------------------
+# methods specific to the standalone group and not present in GroupOnGeometry
+# and GroupOnFilter
+# ----------------------------------------------------------------------------
+
+# clear the group's contents
+aGroup.Clear()
+
+# add contents of other object (group, sub-mesh, filter)
+aGroup.AddFrom( aGroup2 )
+
+# removes entities
+aGroup.Remove( [2,3,4] )
diff --git a/doc/examples/grouping_elements_ex02.py b/doc/examples/grouping_elements_ex02.py
new file mode 100644 (file)
index 0000000..fff4b40
--- /dev/null
@@ -0,0 +1,42 @@
+# Create a Group on Geometry
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a box
+box = geom_builder.MakeBox(0., 0., 0., 100., 100., 100.)
+geom_builder.addToStudy(box, "box")
+
+# add the first face of the box to the study
+subShapeList = geom_builder.SubShapeAll(box, geom_builder.ShapeType["FACE"])
+face = subShapeList[0]
+geom_builder.addToStudyInFather(box, face, "face 1") 
+
+# create group of edges on the face
+aGeomGroupE = geom_builder.CreateGroup(face, geom_builder.ShapeType["EDGE"])
+geom_builder.AddObject(aGeomGroupE, 3)
+geom_builder.AddObject(aGeomGroupE, 6)
+geom_builder.AddObject(aGeomGroupE, 8)
+geom_builder.AddObject(aGeomGroupE, 10)
+geom_builder.addToStudyInFather(face, aGeomGroupE, "Group of Edges")
+
+# create quadrangle 2D mesh on the box
+quadra = smesh_builder.Mesh(box, "Box : quadrangle 2D mesh")
+algo1D = quadra.Segment()
+quadra.Quadrangle()
+algo1D.NumberOfSegments(7) 
+
+# compute the mesh
+if not quadra.Compute(): raise Exception("Error when computing Mesh")
+
+# create SMESH group on the face with name "SMESHGroup1"
+aSmeshGroup1 = quadra.GroupOnGeom(face, "SMESHGroup1")
+
+# create SMESH group on <aGeomGroupE> with default name
+aSmeshGroup2 = quadra.GroupOnGeom(aGeomGroupE) 
diff --git a/doc/examples/grouping_elements_ex03.py b/doc/examples/grouping_elements_ex03.py
new file mode 100644 (file)
index 0000000..2c592ae
--- /dev/null
@@ -0,0 +1,44 @@
+# Create a Group on Filter
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+box = geom_builder.MakeBoxDXDYDZ(10,10,10)
+
+# make a mesh with quadrangles of different area in range [1,16]
+mesh = smesh_builder.Mesh(box,"Quad mesh")
+hyp1D = mesh.Segment().StartEndLength( 1, 4 )
+mesh.Quadrangle()
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# create a group on filter selecting faces of medium size
+critaria = [ \
+    smesh_builder.GetCriterion(SMESH.FACE, SMESH.FT_Area, ">", 1.1, BinaryOp=SMESH.FT_LogicalAND ),
+    smesh_builder.GetCriterion(SMESH.FACE, SMESH.FT_Area, "<", 15.0 )
+    ]
+filt = smesh_builder.GetFilterFromCriteria( critaria )
+filtGroup = mesh.GroupOnFilter( SMESH.FACE, "group on filter", filt )
+print("Group on filter contains %s elements" % filtGroup.Size())
+
+# group on filter is updated if the mesh is modified
+hyp1D.SetStartLength( 2.5 )
+hyp1D.SetEndLength( 2.5 )
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+print("After mesh change, group on filter contains %s elements" % filtGroup.Size())
+
+# set a new filter defining the group
+filt2 = smesh_builder.GetFilter( SMESH.FACE, SMESH.FT_RangeOfIds, "1-50" )
+filtGroup.SetFilter( filt2 )
+print("With a new filter, group on filter contains %s elements" % filtGroup.Size())
+
+# group is updated at modification of the filter
+filt2.SetCriteria( [ smesh_builder.GetCriterion( SMESH.FACE, SMESH.FT_RangeOfIds, "1-70" )])
+filtIDs3 = filtGroup.GetIDs()
+print("After filter modification, group on filter contains %s elements" % filtGroup.Size())
diff --git a/doc/examples/grouping_elements_ex04.py b/doc/examples/grouping_elements_ex04.py
new file mode 100644 (file)
index 0000000..d3b88c1
--- /dev/null
@@ -0,0 +1,38 @@
+# Edit a Group
+
+from mechanic import *
+
+# Get ids of all faces with area > 35
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 35.)
+
+anIds = mesh.GetIdsFromFilter(aFilter) 
+
+print("Criterion: Area > 35, Nb = ", len(anIds))
+
+# create a group by adding elements with area > 35
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Area > 35")
+aGroup.Add(anIds) 
+
+# Get ids of all faces with area > 40
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 40.)
+
+anIds = mesh.GetIdsFromFilter(aFilter)
+
+print("Criterion: Area > 40, Nb = ", len(anIds)) 
+
+# create a group of elements with area [35; 40] by removing elements with area > 40 from group aGroup
+aGroup.Remove(anIds) 
+aGroup.SetName("35 < Area < 40")
+
+# print the result
+aGroupElemIDs = aGroup.GetListOfID()
+
+print("Criterion: 35 < Area < 40, Nb = ", len(aGroupElemIDs))
+
+j = 1
+for i in range(len(aGroupElemIDs)):
+  if j > 20: j = 1; print("")
+  print(aGroupElemIDs[i], end=' ')
+  j = j + 1
+  pass
+print("")
diff --git a/doc/examples/grouping_elements_ex05.py b/doc/examples/grouping_elements_ex05.py
new file mode 100644 (file)
index 0000000..a1ef0a5
--- /dev/null
@@ -0,0 +1,49 @@
+# Union of groups
+
+from mechanic import *
+import SALOMEDS
+
+# Criterion : AREA > 20
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 20.)
+
+anIds = mesh.GetIdsFromFilter(aFilter)
+
+print("Criterion: Area > 20, Nb = ", len( anIds )) 
+
+# create a group by adding elements with area > 20
+aGroup1 = mesh.CreateEmptyGroup(SMESH.FACE, "Area > 20")
+aGroup1.Add(anIds)
+
+# Criterion : AREA = 20
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_EqualTo, 20.)
+
+anIds = mesh.GetIdsFromFilter(aFilter)
+
+print("Criterion: Area = 20, Nb = ", len( anIds )) 
+
+# create a group by adding elements with area = 20
+aGroup2 = mesh.CreateEmptyGroup( SMESH.FACE, "Area = 20" )
+
+aGroup2.Add(anIds)
+
+# create union group : area >= 20
+aGroup3 = mesh.UnionListOfGroups([aGroup1, aGroup2], "Area >= 20")
+aGroup3.SetColor( SALOMEDS.Color(1.,1.,0.));
+print("Criterion: Area >= 20, Nb = ", len(aGroup3.GetListOfID()))
+# Please note that also there is UnionGroups() method which works with two groups only
+
+# Criterion : AREA < 20
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_LessThan, 20.)
+
+anIds = mesh.GetIdsFromFilter(aFilter)
+
+print("Criterion: Area < 20, Nb = ", len(anIds))
+
+# create a group by adding elements with area < 20
+aGroup4 = mesh.CreateEmptyGroup(SMESH.FACE, "Area < 20")
+aGroup4.Add(anIds)
+aGroup4.SetColor( SALOMEDS.Color(1.,0.,0.));
+
+# create union group : area >= 20 and area < 20
+aGroup5 = mesh.UnionListOfGroups([aGroup3, aGroup4], "Any Area")
+print("Criterion: Any Area, Nb = ", len(aGroup5.GetListOfID()))
diff --git a/doc/examples/grouping_elements_ex06.py b/doc/examples/grouping_elements_ex06.py
new file mode 100644 (file)
index 0000000..e6bbd49
--- /dev/null
@@ -0,0 +1,31 @@
+# Intersection of groups
+
+from mechanic import *
+
+# Criterion : AREA > 20
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 20.)
+
+anIds = mesh.GetIdsFromFilter(aFilter)
+
+print("Criterion: Area > 20, Nb = ", len(anIds)) 
+
+# create a group by adding elements with area > 20
+aGroup1 = mesh.CreateEmptyGroup(SMESH.FACE, "Area > 20")
+aGroup1.Add(anIds)
+
+# Criterion : AREA < 60
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_LessThan, 60.)
+
+anIds = mesh.GetIdsFromFilter(aFilter)
+
+print("Criterion: Area < 60, Nb = ", len(anIds)) 
+
+# create a group by adding elements with area < 60
+aGroup2 = mesh.CreateEmptyGroup(SMESH.FACE, "Area < 60")
+aGroup2.Add(anIds)
+
+# create an intersection of groups : 20 < area < 60
+aGroup3 = mesh.IntersectListOfGroups([aGroup1, aGroup2], "20 < Area < 60")
+print("Criterion: 20 < Area < 60, Nb = ", len(aGroup3.GetListOfID()))
+# Please note that also there is IntersectGroups() method which works with two groups only
+
diff --git a/doc/examples/grouping_elements_ex07.py b/doc/examples/grouping_elements_ex07.py
new file mode 100644 (file)
index 0000000..98108fd
--- /dev/null
@@ -0,0 +1,28 @@
+# Cut of groups
+
+from mechanic import *
+
+# Criterion : AREA > 20
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 20.)
+
+anIds = mesh.GetIdsFromFilter(aFilter)
+
+print("Criterion: Area > 20, Nb = ", len(anIds)) 
+
+# create a group by adding elements with area > 20
+aGroupMain = mesh.MakeGroupByIds("Area > 20", SMESH.FACE, anIds)
+
+# Criterion : AREA < 60
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_LessThan, 60.)
+
+anIds = mesh.GetIdsFromFilter(aFilter)
+
+print("Criterion: Area < 60, Nb = ", len(anIds)) 
+
+# create a group by adding elements with area < 60
+aGroupTool = mesh.MakeGroupByIds("Area < 60", SMESH.FACE, anIds)
+# create a cut of groups : area >= 60
+aGroupRes = mesh.CutGroups(aGroupMain, aGroupTool, "Area >= 60")
+print("Criterion: Area >= 60, Nb = ", len(aGroupRes.GetListOfID()))
+# Please note that also there is CutListOfGroups() method which works with lists of groups of any lengths
diff --git a/doc/examples/grouping_elements_ex08.py b/doc/examples/grouping_elements_ex08.py
new file mode 100644 (file)
index 0000000..244e8c7
--- /dev/null
@@ -0,0 +1,27 @@
+# Creating groups of entities basing on nodes of other groups
+
+from mechanic import *
+import SALOMEDS
+
+# Criterion : AREA > 100
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 100.)
+
+# create a group by adding elements with area > 100
+aSrcGroup1 = mesh.GroupOnFilter(SMESH.FACE, "Area > 100", aFilter)
+aSrcGroup1.SetColor( SALOMEDS.Color(1.,1.,0.))
+print("Criterion: Area > 100, Nb = ", aSrcGroup1.Size())
+
+# Criterion : AREA < 30
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_LessThan, 30.)
+
+# create a group by adding elements with area < 30
+aSrcGroup2 = mesh.GroupOnFilter(SMESH.FACE, "Area < 30", aFilter)
+aSrcGroup2.SetColor( SALOMEDS.Color(1.,0.,0.))
+print("Criterion: Area < 30, Nb = ", aSrcGroup2.Size())
+
+
+# Create group of edges using source groups of faces
+aGrp = mesh.CreateDimGroup( [aSrcGroup1, aSrcGroup2], SMESH.EDGE, "Edges" )
+
+# Create group of nodes using source groups of faces
+aGrp = mesh.CreateDimGroup( [aSrcGroup1, aSrcGroup2], SMESH.NODE, "Nodes" )
diff --git a/doc/examples/grouping_elements_ex09.py b/doc/examples/grouping_elements_ex09.py
new file mode 100644 (file)
index 0000000..e46deda
--- /dev/null
@@ -0,0 +1,18 @@
+# Creating groups of faces separated by sharp edges
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a mesh on a box
+box = geom_builder.MakeBoxDXDYDZ( 10,10,10, theName="Box" )
+mesh = smesh_builder.Mesh(box,"Mesh")
+mesh.AutomaticHexahedralization()
+
+# create groups of faces of each side of the box
+groups = mesh.FaceGroupsSeparatedByEdges( 89 )
diff --git a/doc/examples/measurements_ex01.py b/doc/examples/measurements_ex01.py
new file mode 100644 (file)
index 0000000..9e1053d
--- /dev/null
@@ -0,0 +1,70 @@
+# Minimum Distance
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create and mesh two boxes
+
+p1 = geom_builder.MakeVertex(10.0, 10.0, 10.0)
+p2 = geom_builder.MakeVertex(20.0, 20.0, 20.0)
+p3 = geom_builder.MakeVertex(30.0, 40.0, 50.0)
+p4 = geom_builder.MakeVertex(70.0, 100.0, 200.0)
+
+box1 = geom_builder.MakeBoxTwoPnt(p1, p2)
+box2 = geom_builder.MakeBoxTwoPnt(p3, p4)
+
+mesh1 = smesh_builder.Mesh(box1, 'box1')
+mesh1.Segment().NumberOfSegments(2)
+mesh1.Triangle().MaxElementArea(10)
+
+mesh2 = smesh_builder.Mesh(box2, 'box2')
+mesh2.Segment().NumberOfSegments(5)
+mesh2.Triangle().MaxElementArea(20)
+
+if not mesh1.Compute(): raise Exception("Error when computing Mesh")
+if not mesh2.Compute(): raise Exception("Error when computing Mesh")
+
+# compute min distance from grp1 to the origin (not available yet)
+smesh_builder.MinDistance(mesh1)
+
+# compute min distance from node 10 of mesh1 to the origin
+smesh_builder.MinDistance(mesh1, id1=10)
+# ... or
+mesh1.MinDistance(10)
+
+# compute min distance between nodes 10 and 20 of mesh1
+smesh_builder.MinDistance(mesh1, id1=10, id2=20)
+# ... or
+mesh1.MinDistance(10, 20)
+
+# compute min distance from element 100 of mesh1 to the origin (not available yet)
+smesh_builder.MinDistance(mesh1, id1=100, isElem1=True)
+# ... or
+mesh1.MinDistance(100, isElem1=True)
+
+# compute min distance between elements 100 and 200 of mesh1 (not available yet)
+smesh_builder.MinDistance(mesh1, id1=100, id2=200, isElem1=True, isElem2=True)
+# ... or
+mesh1.MinDistance(100, 200, True, True)
+
+# compute min distance from element 100 to node 20 of mesh1 (not available yet)
+smesh_builder.MinDistance(mesh1, id1=100, id2=20, isElem1=True)
+# ... or
+mesh1.MinDistance(100, 20, True)
+
+# compute min distance from mesh1 to mesh2 (not available yet)
+smesh_builder.MinDistance(mesh1, mesh2)
+
+# compute min distance from node 10 of mesh1 to node 20 of mesh2
+smesh_builder.MinDistance(mesh1, mesh2, 10, 20)
+
+# compute min distance from node 10 of mesh1 to element 200 of mesh2 (not available yet)
+smesh_builder.MinDistance(mesh1, mesh2, 10, 200, isElem2=True)
+
+# etc...
diff --git a/doc/examples/measurements_ex02.py b/doc/examples/measurements_ex02.py
new file mode 100644 (file)
index 0000000..e4d8338
--- /dev/null
@@ -0,0 +1,45 @@
+# Bounding Box
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create and mesh two boxes
+
+p1 = geom_builder.MakeVertex(10.0, 10.0, 10.0)
+p2 = geom_builder.MakeVertex(20.0, 20.0, 20.0)
+p3 = geom_builder.MakeVertex(30.0, 40.0, 50.0)
+p4 = geom_builder.MakeVertex(70.0, 100.0, 200.0)
+
+box1 = geom_builder.MakeBoxTwoPnt(p1, p2)
+box2 = geom_builder.MakeBoxTwoPnt(p3, p4)
+
+mesh1 = smesh_builder.Mesh(box1, 'box1')
+mesh1.Segment().NumberOfSegments(2)
+mesh1.Triangle().MaxElementArea(10)
+
+mesh2 = smesh_builder.Mesh(box2, 'box2')
+mesh2.Segment().NumberOfSegments(5)
+mesh2.Triangle().MaxElementArea(20)
+
+if not mesh1.Compute(): raise Exception("Error when computing Mesh")
+if not mesh2.Compute(): raise Exception("Error when computing Mesh")
+
+# compute bounding box for mesh1
+mesh1.BoundingBox()
+
+# compute bounding box for list of nodes of mesh2
+mesh2.BoundingBox([363, 364, 370, 371, 372, 373, 379, 380, 381])
+
+# compute bounding box for list of elements of mesh2
+mesh2.BoundingBox([363, 364, 370, 371, 372, 373, 379, 380, 381], isElem=True)
+
+# compute common bounding box of mesh1 and mesh2
+smesh_builder.BoundingBox([mesh1, mesh2])
+
+# etc...
diff --git a/doc/examples/measurements_ex03.py b/doc/examples/measurements_ex03.py
new file mode 100644 (file)
index 0000000..77a59ee
--- /dev/null
@@ -0,0 +1,77 @@
+# Basic Properties
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a box
+box = geom_builder.MakeBoxDXDYDZ(100,100,100)
+face = geom_builder.SubShapeAllSorted(box, geom_builder.ShapeType['FACE'])[0]
+
+# mesh a box
+mesh = smesh_builder.Mesh(box)
+submesh_1d = mesh.Segment().NumberOfSegments(5)
+submesh_2d = mesh.Quadrangle()
+submesh_3d = mesh.Hexahedron()
+submesh_2d_face = mesh.Triangle(face)
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# create a group
+
+group_2d = mesh.Group(face)
+
+# compute basic properties
+
+print("Get basic properties: approach 1 (via measurements tool) ----")
+
+measure = smesh_builder.CreateMeasurements()
+
+print("* for mesh:")
+print("  length:", measure.Length(mesh.mesh))
+print("  area:",   measure.Area(mesh.mesh))
+print("  volume:", measure.Volume(mesh.mesh))
+
+print("* for group (2d):")
+print("  length:", measure.Length(group_2d))
+print("  area:",   measure.Area(group_2d))
+print("  volume:", measure.Volume(group_2d))
+
+print("* for submesh (2d):")
+print("  length:", measure.Length(submesh_2d_face.GetSubMesh()))
+print("  area:",   measure.Area(submesh_2d_face.GetSubMesh()))
+print("  volume:", measure.Volume(submesh_2d_face.GetSubMesh()))
+
+measure.UnRegister()
+
+print("Get basic properties: approach 2 (via smeshBuilder) ----")
+
+print("* for mesh:")
+print("  length:", smesh_builder.GetLength(mesh))
+print("  area:",   smesh_builder.GetArea(mesh))
+print("  volume:", smesh_builder.GetVolume(mesh))
+
+print("* for group (2d):")
+print("  length:", smesh_builder.GetLength(group_2d))
+print("  area:",   smesh_builder.GetArea(group_2d))
+print("  volume:", smesh_builder.GetVolume(group_2d))
+
+print("* for submesh (2d):")
+print("  length:", smesh_builder.GetLength(submesh_2d_face))
+print("  area:",   smesh_builder.GetArea(submesh_2d_face))
+print("  volume:", smesh_builder.GetVolume(submesh_2d_face))
+
+print("Get basic properties: approach 3 (via smeshBuilder.Mesh) ----")
+
+print("* for mesh:")
+print("  length:", mesh.GetLength())
+print("  area:",   mesh.GetArea())
+print("  volume:", mesh.GetVolume())
+
+print("* for group (2d): unsupported")
+
+print("* for submesh (2d): unsupported")
diff --git a/doc/examples/measurements_ex04.py b/doc/examples/measurements_ex04.py
new file mode 100644 (file)
index 0000000..ab66d2c
--- /dev/null
@@ -0,0 +1,26 @@
+# Angle measurement
+
+import salome
+salome.salome_init_without_session()
+
+from salome.smesh import smeshBuilder
+
+smesh_builder = smeshBuilder.New()
+
+# use smeshBuilder.GetAngle() to compute angle between 3 arbitrary points
+
+p0 = [1,0,0]
+p1 = [0,0,0]
+p2 = [0,1,0]
+
+a1 = smesh_builder.GetAngle(p0, p1, p2)
+print("Right angle measure", a1 )
+
+# use Mesh.GetAngle() to compute angle between 3 nodes of a mesh
+
+mesh = smesh_builder.Mesh()
+n0 = mesh.AddNode( *p0 )
+n1 = mesh.AddNode( *p1 )
+n2 = mesh.AddNode( *p2 )
+
+a2 = mesh.GetAngle( n0,n1,n2 )
diff --git a/doc/examples/mechanic.py b/doc/examples/mechanic.py
new file mode 100644 (file)
index 0000000..37a372e
--- /dev/null
@@ -0,0 +1,86 @@
+# Inspired by SMESH_mechanic.py.
+# Creates geometry and a mesh to be used in other examples
+# --------------------------------------------------------
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# Geometry
+# --------
+
+# create planar face on a wire combined from a segment and three arcs
+
+p1 = geom_builder.MakeVertex(100.0, 0.0, 0.0)
+p2 = geom_builder.MakeVertex(50.0, 50.0, 0.0)
+p3 = geom_builder.MakeVertex(100.0, 100.0, 0.0)
+arc1 = geom_builder.MakeArc(p1, p2, p3)
+
+p4 = geom_builder.MakeVertex(170.0, 100.0, 0.0)
+seg1 = geom_builder.MakeVector(p3, p4)
+
+p5 = geom_builder.MakeVertex(200.0, 70.0, 0.0)
+p6 = geom_builder.MakeVertex(170.0, 40.0, 0.0)
+arc2 = geom_builder.MakeArc(p4, p5, p6)
+
+p7 = geom_builder.MakeVertex(120.0, 30.0, 0.0)
+arc3 = geom_builder.MakeArc(p6, p7, p1)
+
+wire1 = geom_builder.MakeWire([arc1, seg1, arc2, arc3])
+face1 = geom_builder.MakeFace(wire1, True)
+
+# create main shape by extruding just created planar face
+
+pO = geom_builder.MakeVertex(0.0, 0.0, 0.0)
+pz = geom_builder.MakeVertex(0.0, 0.0, 100.0)
+vz = geom_builder.MakeVector(pO, pz)
+prism1 = geom_builder.MakePrismVecH(face1, vz, 100.0)
+
+# create two cylinders
+
+pc1 = geom_builder.MakeVertex(90.0, 50.0, -40.0)
+pc2 = geom_builder.MakeVertex(170.0, 70.0, -40.0)
+
+cyl1 = geom_builder.MakeCylinder(pc1, vz, 20.0, 180.0)
+cyl2 = geom_builder.MakeCylinder(pc2, vz, 20.0, 180.0)
+
+# create final shape by cutting one cylinder and fusing with another
+
+shape = geom_builder.MakeBoolean(prism1, cyl1, 2)
+mechanic = geom_builder.MakeBoolean(shape, cyl2, 3)
+
+# get all faces from shape and keep sub of them into variables for future processing
+
+shape_faces = geom_builder.SubShapeAllSorted(mechanic, geom_builder.ShapeType["FACE"])
+
+sub_face1 = shape_faces[0]
+sub_face2 = shape_faces[4]
+sub_face3 = shape_faces[5]
+sub_face4 = shape_faces[10]
+
+# Mesh
+# ----
+
+# create tria+tetra mesh from mechanic shape
+
+mesh = smesh_builder.Mesh(mechanic, "mechanic")
+mesh.Segment().NumberOfSegments(10)
+mesh.Triangle().MaxElementArea(25)
+mesh.Tetrahedron()
+
+# create quad sub-meshes on faces sub_face1 - sub_face4
+
+mesh.Quadrangle(sub_face1)
+mesh.Quadrangle(sub_face2)
+mesh.Quadrangle(sub_face3)
+mesh.Quadrangle(sub_face4)
+
+# finally compute whole mesh
+
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/mesh_3d.py b/doc/examples/mesh_3d.py
new file mode 100644 (file)
index 0000000..0041b61
--- /dev/null
@@ -0,0 +1,104 @@
+# 3d mesh generation and mesh exploration
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+###
+# Geometry: an assembly of a box, a cylinder and a truncated cone
+# to be meshed with tetrahedra
+###
+
+# Define values
+name = "ex21_lamp" 
+cote = 60 
+section = 20 
+size = 200 
+radius_1 = 80 
+radius_2 = 40 
+height = 100 
+
+# Build a box
+box = geom_builder.MakeBox(-cote, -cote, -cote, +cote, +cote, +cote) 
+
+# Build a cylinder
+pt1 = geom_builder.MakeVertex(0, 0, cote/3) 
+di1 = geom_builder.MakeVectorDXDYDZ(0, 0, 1) 
+cyl = geom_builder.MakeCylinder(pt1, di1, section, size) 
+
+# Build a truncated cone
+pt2 = geom_builder.MakeVertex(0, 0, size) 
+cone = geom_builder.MakeCone(pt2, di1, radius_1, radius_2, height) 
+
+# Fuse
+box_cyl = geom_builder.MakeFuse(box, cyl) 
+piece = geom_builder.MakeFuse(box_cyl, cone) 
+
+# Add to the study
+geom_builder.addToStudy(piece, name) 
+
+# Create a group of faces
+faces_group = geom_builder.CreateGroup(piece, geom_builder.ShapeType["FACE"]) 
+group_name = name + "_grp" 
+geom_builder.addToStudy(faces_group, group_name) 
+faces_group.SetName(group_name) 
+
+# Add faces to the group
+faces = geom_builder.SubShapeAllIDs(piece, geom_builder.ShapeType["FACE"]) 
+geom_builder.UnionIDs(faces_group, faces) 
+
+###
+# Create a mesh
+###
+
+# Define a mesh on a geometry
+tetra = smesh_builder.Mesh(piece, name) 
+
+# Define 1D algorithm and hypothesis
+algo1d = tetra.Segment() 
+algo1d.LocalLength(10) 
+
+# Define 2D algorithm and hypothesis
+algo2d = tetra.Triangle() 
+algo2d.LengthFromEdges() 
+
+# Define 3D algorithm and hypothesis
+algo3d = tetra.Tetrahedron()
+algo3d.MaxElementVolume(100) 
+
+# Compute the mesh
+if not tetra.Compute(): raise Exception("Error when computing Mesh")
+
+# Create a mesh group of all triangles generated on geom faces present in faces_group
+group = tetra.Group(faces_group)
+
+###
+# Explore the mesh
+###
+
+# Retrieve coordinates of nodes
+coordStr = ""
+for node in tetra.GetNodesId():
+    x,y,z = tetra.GetNodeXYZ( node )
+    coordStr += "%s (%s, %s, %s) " % ( node, x,y,z )
+    pass
+
+# Retrieve nodal connectivity of triangles
+triaStr = ""
+for tria in tetra.GetElementsByType( SMESH.FACE ):
+    nodes = tetra.GetElemNodes( tria )
+    triaStr += "%s (%s, %s, %s) " % ( tria, nodes[0], nodes[1], nodes[2] )
+
+# Retrieve group contents
+groupStr = ""
+for group in tetra.GetGroups():
+    ids   = group.GetIDs()
+    name  = group.GetName()
+    eType = group.GetType()
+    groupStr += "'%s' %s: %s \n" % ( name, eType, ids )
diff --git a/doc/examples/modifying_meshes_cut_triangles.py b/doc/examples/modifying_meshes_cut_triangles.py
new file mode 100644 (file)
index 0000000..f45cc19
--- /dev/null
@@ -0,0 +1,38 @@
+# Cutting Triangles
+
+import salome
+salome.salome_init_without_session()
+
+from salome.smesh import smeshBuilder
+
+smesh_builder = smeshBuilder.New()
+
+# create 3 triangles and 1 segment all sharing edge 1-2
+mesh = smesh_builder.Mesh()
+n1 = mesh.AddNode( 0, 0, 0)
+n2 = mesh.AddNode( 0, 0, -10)
+n3 = mesh.AddNode( 10, 0, 0)
+n4 = mesh.AddNode( 0, 10, 0)
+n5 = mesh.AddNode( 0, -10, 0)
+mesh.AddFace([ n1, n2, n3])
+mesh.AddFace([ n1, n2, n4])
+mesh.AddFace([ n1, n2, n5])
+mesh.AddEdge([ n1, n2] )
+
+# ===========================================================================
+# cut all the triangles and the segment by setting a new node on the segment
+# ===========================================================================
+
+mesh.AddNodeOnSegment( n1, n2, 0.6 )
+assert mesh.NbNodes() == 6     # one new node created
+assert mesh.NbTriangles() == 6 # each of the 3 triangles is split into two
+assert mesh.NbEdges() == 2     # a segment is split into two
+
+# ===============================================================
+# cut a triangle into three by adding a new node on the triangle
+# ===============================================================
+
+triangleID = 1
+mesh.AddNodeOnFace( triangleID, 2, 0, -6 )
+assert mesh.NbNodes() == 7     # one new node created
+assert mesh.NbTriangles() == 8 # the triangles is split into three
diff --git a/doc/examples/modifying_meshes_ex01.py b/doc/examples/modifying_meshes_ex01.py
new file mode 100644 (file)
index 0000000..ceeb3c0
--- /dev/null
@@ -0,0 +1,15 @@
+# Add Node
+
+import salome
+salome.salome_init_without_session()
+
+from salome.smesh import smeshBuilder
+smesh_builder = smeshBuilder.New()
+
+mesh = smesh_builder.Mesh()
+
+# add node
+new_id = mesh.AddNode(50, 10, 0)
+print("")
+if new_id == 0: print("KO node addition.")
+else:           print("New Node has been added with ID ", new_id)
diff --git a/doc/examples/modifying_meshes_ex02.py b/doc/examples/modifying_meshes_ex02.py
new file mode 100644 (file)
index 0000000..1f1aeca
--- /dev/null
@@ -0,0 +1,19 @@
+# Add 0D Element
+
+import salome
+salome.salome_init_without_session()
+
+from salome.smesh import smeshBuilder
+smesh_builder = smeshBuilder.New()
+
+mesh = smesh_builder.Mesh()
+
+# add node
+node_id = mesh.AddNode(50, 10, 0)
+
+# add 0D Element
+new_id = mesh.Add0DElement(node_id)
+
+print("")
+if new_id == 0: print("KO node addition.")
+else:           print("New 0D Element has been added with ID ", new_id)
diff --git a/doc/examples/modifying_meshes_ex03.py b/doc/examples/modifying_meshes_ex03.py
new file mode 100644 (file)
index 0000000..d5a5249
--- /dev/null
@@ -0,0 +1,50 @@
+# Add 0D Element on Element Nodes
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a geometry
+box = geom_builder.MakeBoxDXDYDZ( 10, 10, 10 )
+face = geom_builder.SubShapeAll( box, geom_builder.ShapeType["FACE"])[0]
+
+# make 3D mesh
+mesh = smesh_builder.Mesh( box )
+mesh.AutomaticHexahedralization(0)
+
+# create 0D elements on all nodes of the mesh
+res = mesh.Add0DElementsToAllNodes( mesh )
+
+# find 0D elements on all nodes of the mesh, all found nodes are added to a new group
+groupName = "0Dmesh"
+res = mesh.Add0DElementsToAllNodes( mesh, groupName )
+mesh.RemoveGroupWithContents( res ) # remove all found 0D elements
+
+# create 0D elements on all nodes of a sub-mesh, with group creation
+groupName = "0Dsubmesh"
+submesh = mesh.GetSubMesh( face, "faceSM")
+res = mesh.Add0DElementsToAllNodes( submesh, groupName )
+
+# create 0D elements on all nodes of a group
+group = mesh.Group( face, "faceGroup" )
+res = mesh.Add0DElementsToAllNodes( group )
+
+# remove all 0D elements
+mesh.RemoveElements( mesh.GetIdsFromFilter( smesh_builder.GetFilter( SMESH.ELEM0D,
+                                                                     SMESH.FT_ElemGeomType,
+                                                                     "=",SMESH.Geom_POINT )))
+
+# create 0D elements on all nodes of some elements
+res = mesh.Add0DElementsToAllNodes( mesh.GetElementsId() )
+
+mesh.RemoveElements( mesh.GetElementsByType( SMESH.ELEM0D ))
+
+# create 0D elements on some nodes
+nodes = list(range(1,10))
+res = mesh.Add0DElementsToAllNodes( mesh.GetIDSource( nodes, SMESH.NODE ))
diff --git a/doc/examples/modifying_meshes_ex04.py b/doc/examples/modifying_meshes_ex04.py
new file mode 100644 (file)
index 0000000..ffd16eb
--- /dev/null
@@ -0,0 +1,12 @@
+# Add Edge
+
+from mechanic import *
+
+# add node
+n1 = mesh.AddNode(50, 10, 0)
+if n1 == 0: print("KO node addition.") 
+
+# add edge
+e1 = mesh.AddEdge([n1, 38])
+if e1 == 0: print("KO edge addition.")
+else:       print("New Edge has been added with ID ", e1)
diff --git a/doc/examples/modifying_meshes_ex05.py b/doc/examples/modifying_meshes_ex05.py
new file mode 100644 (file)
index 0000000..ba62dfc
--- /dev/null
@@ -0,0 +1,12 @@
+# Add Triangle
+
+from mechanic import *
+
+# add node
+n1 = mesh.AddNode(50, 10, 0)
+if n1 == 0: print("KO node addition.")
+
+# add triangle
+t1 = mesh.AddFace([n1, 38, 39])
+if t1 == 0: print("KO triangle addition.")
+else:       print("New Triangle has been added with ID ", t1)
diff --git a/doc/examples/modifying_meshes_ex06.py b/doc/examples/modifying_meshes_ex06.py
new file mode 100644 (file)
index 0000000..449f753
--- /dev/null
@@ -0,0 +1,15 @@
+# Add Quadrangle
+
+from mechanic import *
+
+# add node
+n1 = mesh.AddNode(50, 10, 0)
+if n1 == 0: print("KO node addition.")
+
+n2 = mesh.AddNode(40, 20, 0)
+if n2 == 0: print("KO node addition.")
+
+# add quadrangle
+q1 = mesh.AddFace([n2, n1, 38, 39])
+if q1 == 0: print("KO quadrangle addition.")
+else:       print("New Quadrangle has been added with ID ", q1)
diff --git a/doc/examples/modifying_meshes_ex07.py b/doc/examples/modifying_meshes_ex07.py
new file mode 100644 (file)
index 0000000..898c3a2
--- /dev/null
@@ -0,0 +1,12 @@
+# Add Tetrahedron
+
+from mechanic import *
+
+# add node
+n1 = mesh.AddNode(50, 10, 0)
+if n1 == 0: print("KO node addition.")
+
+# add tetrahedron
+t1 = mesh.AddVolume([n1, 38, 39, 246])
+if t1 == 0: print("KO tetrahedron addition.")
+else:       print("New Tetrahedron has been added with ID ", t1)
diff --git a/doc/examples/modifying_meshes_ex08.py b/doc/examples/modifying_meshes_ex08.py
new file mode 100644 (file)
index 0000000..5face16
--- /dev/null
@@ -0,0 +1,16 @@
+# Add Hexahedron
+
+from mechanic import *
+
+# add nodes
+nId1 = mesh.AddNode(50, 10, 0)
+nId2 = mesh.AddNode(47, 12, 0)
+nId3 = mesh.AddNode(50, 10, 10)
+nId4 = mesh.AddNode(47, 12, 10)
+
+if nId1 == 0 or nId2 == 0 or nId3 == 0 or nId4 == 0: print("KO node addition.")
+
+# add hexahedron
+vId = mesh.AddVolume([nId2, nId1, 38, 39, nId4, nId3, 245, 246])
+if vId == 0: print("KO Hexahedron addition.")
+else:        print("New Hexahedron has been added with ID ", vId)
diff --git a/doc/examples/modifying_meshes_ex09.py b/doc/examples/modifying_meshes_ex09.py
new file mode 100644 (file)
index 0000000..b015f10
--- /dev/null
@@ -0,0 +1,34 @@
+# Add Polygon
+
+import salome
+salome.salome_init_without_session()
+
+from salome.smesh import smeshBuilder
+
+smesh_builder = smeshBuilder.New()
+
+# create an empty mesh structure
+mesh = smesh_builder.Mesh() 
+
+# a method to build a polygonal mesh element with <nb_vert> angles:
+def MakePolygon (a_mesh, x0, y0, z0, radius, nb_vert, smesh_builder):
+    import math
+
+    al = 2.0 * math.pi / nb_vert
+    node_ids = []
+
+    # Create nodes for a polygon
+    for ii in range(nb_vert):
+        nid = smesh_builder.AddNode(x0 + radius * math.cos(ii*al),
+                                    y0 + radius * math.sin(ii*al),
+                                    z0)
+        node_ids.append(nid)
+        pass
+
+    # Create a polygon
+    return smesh_builder.AddPolygonalFace(node_ids)
+
+# Create three polygons
+f1 = MakePolygon(mesh, 0, 0,  0, 30, 13, smesh_builder=mesh)
+f2 = MakePolygon(mesh, 0, 0, 10, 21,  9, smesh_builder=mesh)
+f3 = MakePolygon(mesh, 0, 0, 20, 13,  6, smesh_builder=mesh)
diff --git a/doc/examples/modifying_meshes_ex10.py b/doc/examples/modifying_meshes_ex10.py
new file mode 100644 (file)
index 0000000..d880897
--- /dev/null
@@ -0,0 +1,60 @@
+# Add Polyhedron
+
+import math
+
+import salome
+salome.salome_init_without_session()
+
+from salome.smesh import smeshBuilder
+
+smesh_builder = smeshBuilder.New()
+
+# create an empty mesh structure
+mesh = smesh_builder.Mesh()  
+
+# Create nodes for 12-hedron with pentagonal faces
+al = 2 * math.pi / 5.0
+cosal = math.cos(al)
+aa = 13
+rr = aa / (2.0 * math.sin(al/2.0))
+dr = 2.0 * rr * cosal
+r1 = rr + dr
+dh = rr * math.sqrt(2.0 * (1.0 - cosal * (1.0 + 2.0 * cosal)))
+hh = 2.0 * dh - dr * (rr*(cosal - 1) + (rr + dr)*(math.cos(al/2) - 1)) / dh
+
+dd = [] # top
+cc = [] # below top
+bb = [] # above bottom
+aa = [] # bottom
+
+for i in range(5):
+    cos_bot = math.cos(i*al)
+    sin_bot = math.sin(i*al)
+
+    cos_top = math.cos(i*al + al/2.0)
+    sin_top = math.sin(i*al + al/2.0)
+
+    nd = mesh.AddNode(rr * cos_top, rr * sin_top, hh     ) # top
+    nc = mesh.AddNode(r1 * cos_top, r1 * sin_top, hh - dh) # below top
+    nb = mesh.AddNode(r1 * cos_bot, r1 * sin_bot,      dh) # above bottom
+    na = mesh.AddNode(rr * cos_bot, rr * sin_bot,       0) # bottom
+    dd.append(nd) # top
+    cc.append(nc) # below top
+    bb.append(nb) # above bottom
+    aa.append(na) # bottom
+    pass
+
+# Create a polyhedral volume (12-hedron with pentagonal faces)
+mesh.AddPolyhedralVolume([dd[0], dd[1], dd[2], dd[3], dd[4],  # top
+                          dd[0], cc[0], bb[1], cc[1], dd[1],  # -
+                          dd[1], cc[1], bb[2], cc[2], dd[2],  # -
+                          dd[2], cc[2], bb[3], cc[3], dd[3],  # - below top
+                          dd[3], cc[3], bb[4], cc[4], dd[4],  # -
+                          dd[4], cc[4], bb[0], cc[0], dd[0],  # -
+                          aa[4], bb[4], cc[4], bb[0], aa[0],  # .
+                          aa[3], bb[3], cc[3], bb[4], aa[4],  # .
+                          aa[2], bb[2], cc[2], bb[3], aa[3],  # . above bottom
+                          aa[1], bb[1], cc[1], bb[2], aa[2],  # .
+                          aa[0], bb[0], cc[0], bb[1], aa[1],  # .
+                          aa[0], aa[1], aa[2], aa[3], aa[4]], # bottom
+                         [5,5,5,5,5,5,5,5,5,5,5,5])
diff --git a/doc/examples/modifying_meshes_ex11.py b/doc/examples/modifying_meshes_ex11.py
new file mode 100644 (file)
index 0000000..4555823
--- /dev/null
@@ -0,0 +1,30 @@
+# Removing Nodes
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create and mesh two boxes
+
+box = geom_builder.MakeBoxDXDYDZ(10.0, 10.0, 10.0)
+mesh = smesh_builder.Mesh(box, 'box')
+mesh.Segment().NumberOfSegments(10)
+mesh.Triangle().MaxElementArea(5)
+
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+print("After Compute(): %s nodes, %s faces" % ( mesh.NbNodes(), mesh.NbFaces()))
+
+# remove nodes #246 and #255
+
+res = mesh.RemoveNodes([246, 255])
+print("After RemoveNodes(): %s nodes, %s faces" % ( mesh.NbNodes(), mesh.NbFaces()))
+
+# removing node #100 with reconnection 
+
+mesh.RemoveNodeWithReconnection( 100 )
+print("After RemoveNodeWithReconnection(): %s nodes, %s faces" % ( mesh.NbNodes(), mesh.NbFaces()))
diff --git a/doc/examples/modifying_meshes_ex12.py b/doc/examples/modifying_meshes_ex12.py
new file mode 100644 (file)
index 0000000..74c9797
--- /dev/null
@@ -0,0 +1,8 @@
+# Removing Elements
+
+from mechanic import *
+
+# remove three elements: #850, #859 and #814
+res = mesh.RemoveElements([850, 859, 814])
+if res == 1: print("Elements removing is OK!")
+else:        print("KO Elements removing.")
diff --git a/doc/examples/modifying_meshes_ex13.py b/doc/examples/modifying_meshes_ex13.py
new file mode 100644 (file)
index 0000000..0ef3c30
--- /dev/null
@@ -0,0 +1,11 @@
+# Removing Orphan Nodes
+
+from mechanic import *
+
+# add orphan nodes
+mesh.AddNode(0,0,0)
+mesh.AddNode(1,1,1)
+# remove just created orphan nodes
+res = mesh.RemoveOrphanNodes()
+if res == 1: print("Removed %d nodes!" % res)
+else:        print("KO nodes removing.")
diff --git a/doc/examples/modifying_meshes_ex15.py b/doc/examples/modifying_meshes_ex15.py
new file mode 100644 (file)
index 0000000..5b570e3
--- /dev/null
@@ -0,0 +1,49 @@
+# Moving Nodes
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+box = geom_builder.MakeBoxDXDYDZ(200, 200, 200)
+
+mesh = smesh_builder.Mesh( box )
+mesh.Segment().AutomaticLength(0.1)
+mesh.Quadrangle()
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# find node at (0,0,0) which is located on a geom vertex
+node000 = None
+for vId in geom_builder.SubShapeAllIDs( box, geom_builder.ShapeType["VERTEX"]):
+    if node000: break
+    nodeIds = mesh.GetSubMeshNodesId( vId, True )
+    for node in nodeIds:
+        xyz = mesh.GetNodeXYZ( node )
+        if xyz[0] == 0 and xyz[1] == 0 and xyz[2] == 0 :
+            node000 = node
+            pass
+        pass
+    pass
+
+if not node000:
+    raise Exception("node000 not found")
+
+# find node000 using a dedicated function 
+n = mesh.FindNodeClosestTo( -1,-1,-1 )
+if not n == node000:
+    raise Exception("FindNodeClosestTo() returns " + str( n ) + " != " + str( node000 ))
+
+# move node000 to a new location
+x,y,z = -10, -10, -10
+n = mesh.MoveNode( n,x,y,z )
+if not n:
+    raise Exception("MoveNode() returns " + n)
+
+# check the coordinates of the node000
+xyz = mesh.GetNodeXYZ( node000 )
+if not ( xyz[0] == x and xyz[1] == y and xyz[2] == z) :
+    raise Exception("Wrong coordinates: " + str( xyz ) + " != " + str( [x,y,z] ))
diff --git a/doc/examples/modifying_meshes_ex16.py b/doc/examples/modifying_meshes_ex16.py
new file mode 100644 (file)
index 0000000..49c009e
--- /dev/null
@@ -0,0 +1,47 @@
+# Diagonal Inversion
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+smesh_builder = smeshBuilder.New()
+
+# create an empty mesh structure
+mesh = smesh_builder.Mesh() 
+
+# create the following mesh:
+# .----.----.----.
+# |   /|   /|   /|
+# |  / |  / |  / |
+# | /  | /  | /  |
+# |/   |/   |/   |
+# .----.----.----.
+
+bb = [0, 0, 0, 0]
+tt = [0, 0, 0, 0]
+ff = [0, 0, 0, 0, 0, 0]
+
+bb[0] = mesh.AddNode( 0., 0., 0.)
+bb[1] = mesh.AddNode(10., 0., 0.)
+bb[2] = mesh.AddNode(20., 0., 0.)
+bb[3] = mesh.AddNode(30., 0., 0.)
+
+tt[0] = mesh.AddNode( 0., 15., 0.)
+tt[1] = mesh.AddNode(10., 15., 0.)
+tt[2] = mesh.AddNode(20., 15., 0.)
+tt[3] = mesh.AddNode(30., 15., 0.)
+
+ff[0] = mesh.AddFace([bb[0], bb[1], tt[1]])
+ff[1] = mesh.AddFace([bb[0], tt[1], tt[0]])
+ff[2] = mesh.AddFace([bb[1], bb[2], tt[2]])
+ff[3] = mesh.AddFace([bb[1], tt[2], tt[1]])
+ff[4] = mesh.AddFace([bb[2], bb[3], tt[3]])
+ff[5] = mesh.AddFace([bb[2], tt[3], tt[2]])
+
+# inverse the diagonal bb[1] - tt[2]
+print("\nDiagonal inversion ... ", end=' ')
+res = mesh.InverseDiag(bb[1], tt[2])
+if not res: print("failed!")
+else:       print("done.")
diff --git a/doc/examples/modifying_meshes_ex17.py b/doc/examples/modifying_meshes_ex17.py
new file mode 100644 (file)
index 0000000..cc82746
--- /dev/null
@@ -0,0 +1,46 @@
+# Uniting two Triangles
+
+import salome
+salome.salome_init_without_session()
+
+from salome.smesh import smeshBuilder
+
+smesh_builder = smeshBuilder.New()
+
+# create an empty mesh structure
+mesh = smesh_builder.Mesh() 
+
+# create the following mesh:
+# .----.----.----.
+# |   /|   /|   /|
+# |  / |  / |  / |
+# | /  | /  | /  |
+# |/   |/   |/   |
+# .----.----.----.
+
+bb = [0, 0, 0, 0]
+tt = [0, 0, 0, 0]
+ff = [0, 0, 0, 0, 0, 0]
+
+bb[0] = mesh.AddNode( 0., 0., 0.)
+bb[1] = mesh.AddNode(10., 0., 0.)
+bb[2] = mesh.AddNode(20., 0., 0.)
+bb[3] = mesh.AddNode(30., 0., 0.)
+
+tt[0] = mesh.AddNode( 0., 15., 0.)
+tt[1] = mesh.AddNode(10., 15., 0.)
+tt[2] = mesh.AddNode(20., 15., 0.)
+tt[3] = mesh.AddNode(30., 15., 0.)
+
+ff[0] = mesh.AddFace([bb[0], bb[1], tt[1]])
+ff[1] = mesh.AddFace([bb[0], tt[1], tt[0]])
+ff[2] = mesh.AddFace([bb[1], bb[2], tt[2]])
+ff[3] = mesh.AddFace([bb[1], tt[2], tt[1]])
+ff[4] = mesh.AddFace([bb[2], bb[3], tt[3]])
+ff[5] = mesh.AddFace([bb[2], tt[3], tt[2]]) 
+
+# delete the diagonal bb[1] - tt[2]
+print("\nUnite two triangles ... ", end=' ')
+res = mesh.DeleteDiag(bb[1], tt[2])
+if not res: print("failed!")
+else:       print("done.")
diff --git a/doc/examples/modifying_meshes_ex18.py b/doc/examples/modifying_meshes_ex18.py
new file mode 100644 (file)
index 0000000..40a890b
--- /dev/null
@@ -0,0 +1,47 @@
+# Uniting a Set of Triangles
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.smesh import smeshBuilder
+
+smesh_builder = smeshBuilder.New()
+
+# create an empty mesh structure
+mesh = smesh_builder.Mesh() 
+
+# create the following mesh:
+# .----.----.----.
+# |   /|   /|   /|
+# |  / |  / |  / |
+# | /  | /  | /  |
+# |/   |/   |/   |
+# .----.----.----.
+
+bb = [0, 0, 0, 0]
+tt = [0, 0, 0, 0]
+ff = [0, 0, 0, 0, 0, 0]
+
+bb[0] = mesh.AddNode( 0., 0., 0.)
+bb[1] = mesh.AddNode(10., 0., 0.)
+bb[2] = mesh.AddNode(20., 0., 0.)
+bb[3] = mesh.AddNode(30., 0., 0.)
+
+tt[0] = mesh.AddNode( 0., 15., 0.)
+tt[1] = mesh.AddNode(10., 15., 0.)
+tt[2] = mesh.AddNode(20., 15., 0.)
+tt[3] = mesh.AddNode(30., 15., 0.)
+
+ff[0] = mesh.AddFace([bb[0], bb[1], tt[1]])
+ff[1] = mesh.AddFace([bb[0], tt[1], tt[0]])
+ff[2] = mesh.AddFace([bb[1], bb[2], tt[2]])
+ff[3] = mesh.AddFace([bb[1], tt[2], tt[1]])
+ff[4] = mesh.AddFace([bb[2], bb[3], tt[3]])
+ff[5] = mesh.AddFace([bb[2], tt[3], tt[2]])
+
+# unite a set of triangles
+print("\nUnite a set of triangles ... ", end=' ')
+res = mesh.TriToQuad([ff[2], ff[3], ff[4], ff[5]], SMESH.FT_MinimumAngle, 60.)
+if not res: print("failed!")
+else:       print("done.")
diff --git a/doc/examples/modifying_meshes_ex19.py b/doc/examples/modifying_meshes_ex19.py
new file mode 100644 (file)
index 0000000..79f4cc9
--- /dev/null
@@ -0,0 +1,37 @@
+# Orientation
+
+import salome
+salome.salome_init_without_session()
+
+from salome.smesh import smeshBuilder
+
+smesh_builder = smeshBuilder.New()
+
+# create an empty mesh structure
+mesh = smesh_builder.Mesh() 
+
+# build five quadrangles:
+dx = 10
+dy = 20
+
+n1  = mesh.AddNode(0.0 * dx, 0, 0)
+n2  = mesh.AddNode(1.0 * dx, 0, 0)
+n3  = mesh.AddNode(2.0 * dx, 0, 0)
+n4  = mesh.AddNode(3.0 * dx, 0, 0)
+n5  = mesh.AddNode(4.0 * dx, 0, 0)
+n6  = mesh.AddNode(5.0 * dx, 0, 0)
+n7  = mesh.AddNode(0.0 * dx, dy, 0)
+n8  = mesh.AddNode(1.0 * dx, dy, 0)
+n9  = mesh.AddNode(2.0 * dx, dy, 0)
+n10 = mesh.AddNode(3.0 * dx, dy, 0)
+n11 = mesh.AddNode(4.0 * dx, dy, 0)
+n12 = mesh.AddNode(5.0 * dx, dy, 0)
+
+f1 = mesh.AddFace([n1, n2, n8 , n7 ])
+f2 = mesh.AddFace([n2, n3, n9 , n8 ])
+f3 = mesh.AddFace([n3, n4, n10, n9 ])
+f4 = mesh.AddFace([n4, n5, n11, n10])
+f5 = mesh.AddFace([n5, n6, n12, n11]) 
+
+# Change the orientation of the second and the fourth faces.
+mesh.Reorient([2, 4])
diff --git a/doc/examples/modifying_meshes_ex20.py b/doc/examples/modifying_meshes_ex20.py
new file mode 100644 (file)
index 0000000..87f3877
--- /dev/null
@@ -0,0 +1,6 @@
+# Cutting Quadrangles
+
+from mechanic import *
+
+# cut two quadrangles: 405 and 406
+mesh.QuadToTri([405, 406], SMESH.FT_MinimumAngle)
diff --git a/doc/examples/modifying_meshes_ex21.py b/doc/examples/modifying_meshes_ex21.py
new file mode 100644 (file)
index 0000000..c351259
--- /dev/null
@@ -0,0 +1,18 @@
+# Smoothing
+
+from mechanic import *
+
+# select the top face
+faces = geom_builder.SubShapeAllSorted(mechanic, geom_builder.ShapeType["FACE"])
+
+# create a group of faces to be smoothed
+group_smooth = mesh.GroupOnGeom(faces[3], "Group of faces (smooth)", SMESH.FACE)
+
+# perform smoothing
+
+# boolean SmoothObject(Object, IDsOfFixedNodes, MaxNbOfIterations, MaxAspectRatio, Method)
+res0 = mesh.SmoothObject(group_smooth, [], 20, 2., smesh_builder.CENTROIDAL_SMOOTH)
+res1 = mesh.SmoothObject(group_smooth, [], 20, 2., smesh_builder.LAPLACIAN_SMOOTH)
+print("\nSmoothing ... ", end=' ')
+if not (res0 and res1): print("failed!")
+else:       print("done.")
diff --git a/doc/examples/modifying_meshes_ex22.py b/doc/examples/modifying_meshes_ex22.py
new file mode 100644 (file)
index 0000000..ca1e30e
--- /dev/null
@@ -0,0 +1,82 @@
+# Extrusion
+
+# There is a series of Extrusion Along Line methods added at different times;
+# a fully functional method is ExtrusionSweepObjects()
+
+import math
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.smesh import smeshBuilder
+
+smesh_builder = smeshBuilder.New()
+
+# create an empty mesh
+mesh = smesh_builder.Mesh() 
+
+# add a node
+mesh.AddNode( 0.,0.,0. )
+
+# extrude a node into a line of 10 segments along the X axis
+ids = mesh.GetNodesId()
+stepVector = [1.,0.,0.]
+nbSteps = 10
+mesh.ExtrusionSweep( ids, stepVector, nbSteps, IsNodes=True )
+
+# create some groups
+lastNode      = mesh.GetNodesId()[-1]
+lastNodeGroup = mesh.MakeGroupByIds( "node %s"% lastNode, SMESH.NODE, [lastNode])
+lineGroup     = mesh.MakeGroupByIds( "line", SMESH.EDGE, mesh.GetElementsId() )
+
+# rotate the segments around the first node to get a mesh of a disk quarter
+axisZ  = [0.,0.,0., 0.,0.,1.]
+groups = mesh.RotationSweepObject( lineGroup, axisZ, math.pi/2., 10, 1e-3, MakeGroups=True, TotalAngle=True )
+
+# extrude all faces into volumes
+obj        = mesh
+stepVector = [0.,0.,-1.]
+nbSteps    = 5
+groups = mesh.ExtrusionSweepObject2D( obj, stepVector, nbSteps, MakeGroups=True )
+
+# remove all segments created by the last command
+for g in groups:
+    if g.GetType() == SMESH.EDGE:
+        mesh.RemoveGroupWithContents( g )
+
+# extrude all segments into faces along Z
+obj = mesh
+stepVector = [0.,0.,1.]
+mesh.ExtrusionSweepObject1D( obj, stepVector, nbSteps )
+
+# extrude a group
+obj        = mesh.GetGroupByName( "line_extruded", SMESH.FACE )[0]
+stepVector = [0,-5.,0.]
+nbSteps    = 1
+mesh.ExtrusionSweepObject( obj, stepVector, nbSteps )
+
+# extrude all nodes and triangle faces of the disk quarter, applying a scale factor
+diskGroup = mesh.GetGroupByName( "line_rotated", SMESH.FACE )[0]
+crit = [ smesh_builder.GetCriterion( SMESH.FACE, SMESH.FT_ElemGeomType,'=',SMESH.Geom_TRIANGLE ),
+         smesh_builder.GetCriterion( SMESH.FACE, SMESH.FT_BelongToMeshGroup,'=', diskGroup )]
+trianglesFilter = smesh_builder.GetFilterFromCriteria( crit )
+
+nodes      = [ diskGroup ]
+edges      = []
+faces      = [ trianglesFilter ]
+stepVector = [0,0,1]
+nbSteps    = 10
+mesh.ExtrusionSweepObjects( nodes, edges, faces, stepVector, nbSteps, scaleFactors=[0.5], linearVariation=True )
+
+# extrude a cylindrical group of faces by normal
+cylGroup = None
+for g in mesh.GetGroups( SMESH.FACE ):
+    if g.GetName().startswith("node "):
+        cylGroup = g
+        break
+
+elements = cylGroup
+stepSize = 5.
+nbSteps  = 2
+mesh.ExtrusionByNormal( elements, stepSize, nbSteps )
diff --git a/doc/examples/modifying_meshes_ex23.py b/doc/examples/modifying_meshes_ex23.py
new file mode 100644 (file)
index 0000000..acfb757
--- /dev/null
@@ -0,0 +1,174 @@
+# Extrusion along a Path
+
+import math
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# 1. Create points
+points = [[0, 0], [50, 30], [50, 110], [0, 150], [-80, 150], [-130, 70], [-130, -20]]
+
+iv = 1
+vertices = []
+for point in points:
+    vert = geom_builder.MakeVertex(point[0], point[1], 0)
+    vertices.append(vert)
+    iv += 1
+
+# 2. Create edges and wires
+Edge_straight = geom_builder.MakeEdge(vertices[0], vertices[4])
+Edge_bezierrr = geom_builder.MakeBezier(vertices)
+Wire_polyline = geom_builder.MakePolyline(vertices)
+Edge_Circle   = geom_builder.MakeCircleThreePnt(vertices[0], vertices[1], vertices[2])
+
+geom_builder.addToStudy(Edge_straight, "Edge_straight")
+geom_builder.addToStudy(Edge_bezierrr, "Edge_bezierrr")
+geom_builder.addToStudy(Wire_polyline, "Wire_polyline")
+geom_builder.addToStudy(Edge_Circle  , "Edge_Circle")
+
+# 3. Explode wire on edges, as they will be used for mesh extrusion
+Wire_polyline_edges = geom_builder.SubShapeAll(Wire_polyline, geom_builder.ShapeType["EDGE"])
+for ii in range(len(Wire_polyline_edges)):
+    geom_builder.addToStudyInFather(Wire_polyline, Wire_polyline_edges[ii], "Edge_" + repr(ii + 1))
+
+# Mesh
+
+# Mesh the given shape with the given 1d hypothesis
+def Mesh1D(shape1d, nbSeg, name):
+  mesh1d_tool = smesh_builder.Mesh(shape1d, name)
+  algo = mesh1d_tool.Segment()
+  hyp  = algo.NumberOfSegments(nbSeg)
+  isDone = mesh1d_tool.Compute()
+  if not isDone: raise Exception('Mesh %s: computation failed' % name)
+  return mesh1d_tool
+
+# Create a mesh with six nodes, seven edges and two quadrangle faces
+def MakeQuadMesh2(mesh_name):
+  quad_1 = smesh_builder.Mesh(name = mesh_name)
+  
+  # six nodes
+  n1 = quad_1.AddNode(0, 20, 10)
+  n2 = quad_1.AddNode(0, 40, 10)
+  n3 = quad_1.AddNode(0, 40, 30)
+  n4 = quad_1.AddNode(0, 20, 30)
+  n5 = quad_1.AddNode(0,  0, 30)
+  n6 = quad_1.AddNode(0,  0, 10)
+
+  # seven edges
+  quad_1.AddEdge([n1, n2]) # 1
+  quad_1.AddEdge([n2, n3]) # 2
+  quad_1.AddEdge([n3, n4]) # 3
+  quad_1.AddEdge([n4, n1]) # 4
+  quad_1.AddEdge([n4, n5]) # 5
+  quad_1.AddEdge([n5, n6]) # 6
+  quad_1.AddEdge([n6, n1]) # 7
+
+  # two quadrangle faces
+  quad_1.AddFace([n1, n2, n3, n4]) # 8
+  quad_1.AddFace([n1, n4, n5, n6]) # 9
+  return [quad_1, [1,2,3,4,5,6,7], [8,9]]
+
+# Path meshes
+Edge_straight_mesh = Mesh1D(Edge_straight, 7, "Edge_straight")
+Edge_bezierrr_mesh = Mesh1D(Edge_bezierrr, 7, "Edge_bezierrr")
+Wire_polyline_mesh = Mesh1D(Wire_polyline, 3, "Wire_polyline")
+Edge_Circle_mesh   = Mesh1D(Edge_Circle  , 8, "Edge_Circle")
+
+# Initial meshes (to be extruded)
+[quad_1, ee_1, ff_1] = MakeQuadMesh2("quad_1")
+[quad_2, ee_2, ff_2] = MakeQuadMesh2("quad_2")
+[quad_3, ee_3, ff_3] = MakeQuadMesh2("quad_3")
+[quad_4, ee_4, ff_4] = MakeQuadMesh2("quad_4")
+[quad_5, ee_5, ff_5] = MakeQuadMesh2("quad_5")
+[quad_6, ee_6, ff_6] = MakeQuadMesh2("quad_6")
+[quad_7, ee_7, ff_7] = MakeQuadMesh2("quad_7")
+
+# ExtrusionAlongPath
+# IDsOfElements, PathMesh, PathShape, NodeStart,
+# HasAngles, Angles, HasRefPoint, RefPoint
+refPoint = SMESH.PointStruct(0, 0, 0)
+a10 = math.radians( 10.0 )
+a45 = math.radians( 45.0 )
+
+# 1. Extrusion of two mesh edges along a straight path
+error = quad_1.ExtrusionAlongPath([1,2], Edge_straight_mesh, Edge_straight, 1,
+                                  0, [], 0, refPoint)
+
+# 2. Extrusion of one mesh edge along a curved path
+error = quad_2.ExtrusionAlongPath([2], Edge_bezierrr_mesh, Edge_bezierrr, 1,
+                                  0, [], 0, refPoint)
+
+# 3. Extrusion of one mesh edge along a curved path with usage of angles
+error = quad_3.ExtrusionAlongPath([2], Edge_bezierrr_mesh, Edge_bezierrr, 1,
+                                  1, [a45, a45, a45, 0, -a45, -a45, -a45], 0, refPoint)
+
+# 4. Extrusion of one mesh edge along the path, which is a part of a meshed wire
+error = quad_4.ExtrusionAlongPath([4], Wire_polyline_mesh, Wire_polyline_edges[0], 1,
+                                  1, [a10, a10, a10], 0, refPoint)
+
+# 5. Extrusion of two mesh faces along the path, which is a part of a meshed wire
+error = quad_5.ExtrusionAlongPath(ff_5 , Wire_polyline_mesh, Wire_polyline_edges[2], 4,
+                                  0, [], 0, refPoint)
+
+# 6. Extrusion of two mesh faces along a closed path
+error = quad_6.ExtrusionAlongPath(ff_6 , Edge_Circle_mesh, Edge_Circle, 1,
+                                  0, [], 0, refPoint)
+
+# 7. Extrusion of two mesh faces along a closed path with usage of angles
+error = quad_7.ExtrusionAlongPath(ff_7, Edge_Circle_mesh, Edge_Circle, 1,
+                                  1, [a45, -a45, a45, -a45, a45, -a45, a45, -a45], 0, refPoint)
+
+
+
+# Make the same meshes using a fully functional method ExtrusionAlongPathObjects() having
+# the following arguments:
+#   Nodes, Edges, Faces, PathObject, PathShape=None,
+#   NodeStart=1, HasAngles=False, Angles=[], LinearVariation=False,
+#   HasRefPoint=False, RefPoint=[0,0,0], MakeGroups=False,
+#   ScaleFactors=[], ScalesVariation=False
+
+quad_1 = MakeQuadMesh2("quad_1")[0]
+quad_2 = MakeQuadMesh2("quad_2")[0]
+quad_3 = MakeQuadMesh2("quad_3")[0]
+quad_4 = MakeQuadMesh2("quad_4")[0]
+quad_5 = MakeQuadMesh2("quad_5")[0]
+quad_6 = MakeQuadMesh2("quad_6")[0]
+quad_7 = MakeQuadMesh2("quad_7")[0]
+
+# 1. Extrusion of two mesh edges along a straight path
+nn, ee, ff = [], [1,2], []
+error = quad_1.ExtrusionAlongPathObjects( nn, ee, ff, Edge_straight_mesh )
+
+# 2. Extrusion of one mesh edge along a curved path
+nn, ee, ff = [], [2], []
+error = quad_2.ExtrusionAlongPathObjects( nn, ee, ff, Edge_bezierrr_mesh )
+
+# 3. Extrusion of one mesh edge along a curved path with usage of angles
+error = quad_3.ExtrusionAlongPathObjects( nn, ee, ff, Edge_bezierrr_mesh,
+                                          Angles=[a45, a45, a45, 0, -a45, -a45, -a45])
+
+# 4. Extrusion of one mesh edge along the path, which is a part of a meshed wire
+nn, ee, ff = [], [4], []
+error = quad_4.ExtrusionAlongPathObjects( nn, ee, ff, Wire_polyline_mesh, Wire_polyline_edges[0],
+                                          Angles=[a10, a10, a10])
+
+# 5. Extrusion of two mesh faces along the path, which is a part of a meshed wire
+nn, ee, ff = [], [], quad_5
+error = quad_5.ExtrusionAlongPathObjects( nn, ee, ff, Wire_polyline_mesh, Wire_polyline_edges[2],
+                                          NodeStart=4 )
+
+# 6. Extrusion of two mesh faces along a closed path
+nn, ee, ff = [], [], quad_6
+error = quad_6.ExtrusionAlongPathObjects( nn, ee, ff, Edge_Circle_mesh )
+
+# 7. Extrusion of two mesh faces along a closed path with usage of angles
+nn, ee, ff = [], [], quad_7
+error = quad_7.ExtrusionAlongPathObjects( nn, ee, ff, Edge_Circle_mesh, Edge_Circle,
+                                          Angles=[a45, -a45, a45, -a45, a45, -a45, a45, -a45])
diff --git a/doc/examples/modifying_meshes_ex24.py b/doc/examples/modifying_meshes_ex24.py
new file mode 100644 (file)
index 0000000..07f6980
--- /dev/null
@@ -0,0 +1,17 @@
+# Revolution
+
+import math
+
+from mechanic import *
+
+# create a group of faces to be revolved
+FacesRotate = [492, 493, 502, 503]
+GroupRotate = mesh.CreateEmptyGroup(SMESH.FACE,"Group of faces (rotate)")
+GroupRotate.Add(FacesRotate)
+
+# define revolution angle and axis
+angle45 = 45 * math.pi / 180
+axisXYZ = SMESH.AxisStruct(-38.3128, -73.3658, -23.321, -13.3402, -13.3265, 6.66632)
+
+# perform revolution of an object
+mesh.RotationSweepObject(GroupRotate, axisXYZ, angle45, 4, 1e-5) 
diff --git a/doc/examples/modifying_meshes_ex25.py b/doc/examples/modifying_meshes_ex25.py
new file mode 100644 (file)
index 0000000..b01e6be
--- /dev/null
@@ -0,0 +1,137 @@
+# Pattern Mapping
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# define the geometry
+Box_1 = geom_builder.MakeBoxDXDYDZ(200., 200., 200.)
+geom_builder.addToStudy(Box_1, "Box_1")
+
+faces = geom_builder.SubShapeAll(Box_1, geom_builder.ShapeType["FACE"])
+Face_1 = faces[0]
+Face_2 = faces[1]
+
+geom_builder.addToStudyInFather(Box_1, Face_1, "Face_1")
+geom_builder.addToStudyInFather(Box_1, Face_2, "Face_2")
+
+# build a quadrangle mesh 3x3 on Face_1
+Mesh_1 = smesh_builder.Mesh(Face_1)
+algo1D = Mesh_1.Segment()
+algo1D.NumberOfSegments(3)
+Mesh_1.Quadrangle()
+
+isDone = Mesh_1.Compute()
+if not isDone: raise Exception('Mesh Mesh_1 : computation failed')
+
+# build a triangle mesh on Face_2
+Mesh_2 = smesh_builder.Mesh(Face_2)
+
+algo1D = Mesh_2.Segment()
+algo1D.NumberOfSegments(1)
+algo2D = Mesh_2.Triangle()
+algo2D.MaxElementArea(240)
+
+isDone = Mesh_2.Compute()
+if not isDone: raise Exception('Mesh Mesh_2 : computation failed')
+
+# create a 2d pattern
+pattern = smesh_builder.GetPattern()
+
+isDone = pattern.LoadFromFace(Mesh_2.GetMesh(), Face_2, 0)
+if (isDone != 1): print('LoadFromFace :', pattern.GetErrorCode())
+
+# apply the pattern to a face of the first mesh
+facesToSplit = Mesh_1.GetElementsByType(SMESH.FACE)
+print("Splitting %d rectangular face(s) to %d triangles..."%(len(facesToSplit), 2*len(facesToSplit)))
+pattern.ApplyToMeshFaces(Mesh_1.GetMesh(), facesToSplit, 0, 0)
+isDone = pattern.MakeMesh(Mesh_1.GetMesh(), 0, 0)
+if (isDone != 1): print('MakeMesh :', pattern.GetErrorCode())  
+
+# create quadrangle mesh
+Mesh_3 = smesh_builder.Mesh(Box_1)
+Mesh_3.Segment().NumberOfSegments(1)
+Mesh_3.Quadrangle()
+Mesh_3.Hexahedron()
+isDone = Mesh_3.Compute()
+if not isDone: raise Exception('Mesh Mesh_3 : computation failed')
+
+# create a 3d pattern (hexahedrons)
+pattern_hexa = smesh_builder.GetPattern()
+
+smp_hexa = """!!! Nb of points:
+15
+      0        0        0   !- 0
+      1        0        0   !- 1
+      0        1        0   !- 2
+      1        1        0   !- 3
+      0        0        1   !- 4
+      1        0        1   !- 5
+      0        1        1   !- 6
+      1        1        1   !- 7
+    0.5        0      0.5   !- 8
+    0.5        0        1   !- 9
+    0.5      0.5      0.5   !- 10
+    0.5      0.5        1   !- 11
+      1        0      0.5   !- 12
+      1      0.5      0.5   !- 13
+      1      0.5        1   !- 14
+  !!! Indices of points of 4 elements:
+  8 12 5 9 10 13 14 11
+  0 8 9 4 2 10 11 6
+  2 10 11 6 3 13 14 7
+  0 1 12 8 2 3 13 10"""
+
+pattern_hexa.LoadFromFile(smp_hexa)
+
+# apply the pattern to a mesh
+volsToSplit = Mesh_3.GetElementsByType(SMESH.VOLUME)
+print("Splitting %d hexa volume(s) to %d hexas..."%(len(volsToSplit), 4*len(volsToSplit)))
+pattern_hexa.ApplyToHexahedrons(Mesh_3.GetMesh(), volsToSplit,0,3)
+isDone = pattern_hexa.MakeMesh(Mesh_3.GetMesh(), True, True)
+if (isDone != 1): print('MakeMesh :', pattern_hexa.GetErrorCode())  
+
+# create one more quadrangle mesh
+Mesh_4 = smesh_builder.Mesh(Box_1)
+Mesh_4.Segment().NumberOfSegments(1)
+Mesh_4.Quadrangle()
+Mesh_4.Hexahedron()
+isDone = Mesh_4.Compute()
+if not isDone: raise Exception('Mesh Mesh_4 : computation failed')
+
+# create another 3d pattern (pyramids)
+pattern_pyra = smesh_builder.GetPattern()
+
+smp_pyra = """!!! Nb of points:
+9
+        0        0        0   !- 0
+        1        0        0   !- 1
+        0        1        0   !- 2
+        1        1        0   !- 3
+        0        0        1   !- 4
+        1        0        1   !- 5
+        0        1        1   !- 6
+        1        1        1   !- 7
+      0.5      0.5      0.5   !- 8
+  !!! Indices of points of 6 elements:
+  0 1 5 4 8
+  7 5 1 3 8
+  3 2 6 7 8
+  2 0 4 6 8
+  0 2 3 1 8
+  4 5 7 6 8"""
+
+pattern_pyra.LoadFromFile(smp_pyra)
+
+# apply the pattern to a face mesh
+volsToSplit = Mesh_4.GetElementsByType(SMESH.VOLUME)
+print("Splitting %d hexa volume(s) to %d hexas..."%(len(volsToSplit), 6*len(volsToSplit)))
+pattern_pyra.ApplyToHexahedrons(Mesh_4.GetMesh(), volsToSplit,1,0)
+isDone = pattern_pyra.MakeMesh(Mesh_4.GetMesh(), True, True)
+if (isDone != 1): print('MakeMesh :', pattern_pyra.GetErrorCode())  
diff --git a/doc/examples/modifying_meshes_ex26.py b/doc/examples/modifying_meshes_ex26.py
new file mode 100644 (file)
index 0000000..1a8ea2a
--- /dev/null
@@ -0,0 +1,50 @@
+# Convert mesh to/from quadratic
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create sphere of radius 100
+
+Sphere = geom_builder.MakeSphereR( 100 )
+geom_builder.addToStudy( Sphere, "Sphere" )
+
+# create simple tetrahedral mesh
+
+Mesh = smesh_builder.Mesh(Sphere)
+Mesh.Segment().NumberOfSegments(5)
+Mesh.Triangle()
+Mesh.Tetrahedron()
+
+# compute mesh
+
+if not Mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# convert to quadratic
+# theForce3d = 1; this results in the medium node lying at the
+# middle of the line segments connecting start and end node of a mesh
+# element
+
+Mesh.ConvertToQuadratic( theForce3d=1 )
+
+# revert back to the non-quadratic mesh
+
+Mesh.ConvertFromQuadratic()
+
+# convert to quadratic
+# theForce3d = 0; this results in the medium node lying at the
+# geometrical edge from which the mesh element is built
+
+Mesh.ConvertToQuadratic( theForce3d=0 )
+
+# to convert not the whole mesh but a sub-mesh, provide it as 
+# an additional argument to the functions:
+# Mesh.ConvertToQuadratic( 0, subMesh )
+# Mesh.ConvertFromQuadratic( subMesh )
+#
+# Note that the mesh becomes non-conformal at conversion of sub-mesh.
diff --git a/doc/examples/modifying_meshes_split_vol.py b/doc/examples/modifying_meshes_split_vol.py
new file mode 100644 (file)
index 0000000..f41fafe
--- /dev/null
@@ -0,0 +1,20 @@
+# Split volumic elements into tetrahedrons
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# mesh a hexahedral mesh
+box = geom_builder.MakeBoxDXDYDZ (1, 1, 1 )
+mesh = smesh_builder.Mesh( box )
+mesh.AutomaticHexahedralization(0)
+print("Nb volumes mesh: %s" % mesh.NbHexas())
+
+# split each hexahedron into 6 tetrahedra
+mesh.SplitVolumesIntoTetra( mesh, smesh_builder.Hex_6Tet )
+print("Nb volumes mesh: %s" % mesh.NbTetras())
diff --git a/doc/examples/notebook_smesh.py b/doc/examples/notebook_smesh.py
new file mode 100644 (file)
index 0000000..9e65604
--- /dev/null
@@ -0,0 +1,45 @@
+# Using SALOME NoteBook
+
+import salome
+salome.salome_init_without_session()
+from salome_notebook import notebook
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# set variables
+notebook.set("Length", 100)
+notebook.set("Width", 200)
+notebook.set("Offset", 50)
+
+notebook.set("NbSegments", 7)
+notebook.set("MaxElementArea", 800)
+notebook.set("MaxElementVolume", 900)
+
+# create a box
+box = geom_builder.MakeBoxDXDYDZ("Length", "Width", 300)
+idbox = geom_builder.addToStudy(box, "Box")
+
+# create a mesh
+tetra = smesh_builder.Mesh(box, "MeshBox")
+
+algo1D = tetra.Segment()
+algo1D.NumberOfSegments("NbSegments")
+
+algo2D = tetra.Triangle()
+algo2D.MaxElementArea("MaxElementArea")
+
+algo3D = tetra.Tetrahedron()
+algo3D.MaxElementVolume("MaxElementVolume")
+
+# compute the mesh
+if not tetra.Compute(): raise Exception("Error when computing Mesh")
+
+# translate the mesh
+point = SMESH.PointStruct("Offset", 0., 0.)
+vector = SMESH.DirStruct(point)
+tetra.TranslateObject(tetra, vector, 0)
diff --git a/doc/examples/prism_3d_algo.py b/doc/examples/prism_3d_algo.py
new file mode 100644 (file)
index 0000000..481fdad
--- /dev/null
@@ -0,0 +1,75 @@
+# Usage of Extrusion 3D meshing algorithm
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+OX = geom_builder.MakeVectorDXDYDZ(1,0,0)
+OY = geom_builder.MakeVectorDXDYDZ(0,1,0)
+OZ = geom_builder.MakeVectorDXDYDZ(0,0,1)
+
+#  Y ^       Make geometry of a "pipe" with the following base (cross section).
+#    |       Big central quadrangles will be meshed with triangles, walls
+#                         of the pipe will be meshed with quadrilaterals
+#   +--+--+--+--+--+--+
+#   |  |  |  |  |  |  |
+#   +--+--+--+--+--+--+
+#   |  |     |     |  |
+#   +--+     |     +--+
+#   |  |     |     |  |
+#   +--+-----+-----+--+
+#   |  |     |     |  |
+#   +--+     |     +--+
+#   |  |     |     |  |
+#   +--+--+--+--+--+--+
+#   |  |  |  |  |  |  |  -->
+#   +--+--+--+--+--+--+   X
+
+quadBig   = geom_builder.MakeFaceHW( 20,20, 1 )
+quadBig   = geom_builder.MakeTranslation( quadBig, 15,15,0 )
+quadSmall = geom_builder.MakeFaceHW( 10,10, 1 )
+smallQuads1 = geom_builder.MakeMultiTranslation1D( quadSmall, OX, 10, 3 )
+smallQuads2 = geom_builder.MakeMultiTranslation1D( quadSmall, OY, 10, 3 )
+smallQuads2 = geom_builder.SubShapeAllSortedCentres( smallQuads2, geom_builder.ShapeType["FACE"])[1:]
+
+base = geom_builder.MakeCompound( smallQuads2 + [smallQuads1, quadBig])
+axis = geom_builder.MakeLine( geom_builder.MakeVertex( 25,25,0), OZ )
+base = geom_builder.MultiRotate1DNbTimes( base, axis, 4)
+base = geom_builder.MakePartition( [base], theName="base")
+path = geom_builder.MakeSketcher("Sketcher:F 0 0:TT 0 100:R 0:C -90 180:T 0 -150",[0,0,0, 0,-1,0, 1,0,0])
+
+# Make the pipe, each quadrangle of the base turns into a prism with composite wall faces
+pipe   = geom_builder.MakePipe( base, path )
+prisms = geom_builder.MakePartition( [pipe], theName="prisms")
+
+# get base faces of the prism to define sub-mesh on them
+smallQuad = geom_builder.GetFaceNearPoint( prisms, geom_builder.MakeVertex( 0,0,0 ), "smallQuad")
+bigQuad   = geom_builder.GetFaceNearPoint( prisms, geom_builder.MakeVertex( 15,15,0 ), "bigQuad")
+
+mesh = smesh_builder.Mesh( prisms )
+
+# assign Global hypotheses
+
+# 1D algorithm and hypothesis for division along the pipe
+mesh.Segment().NumberOfSegments(15)
+
+# Extrusion 3D algo
+mesh.Prism()
+
+# assign Local hypotheses
+
+# 1D and 2D algos and hyps to mesh smallQuad with quadrilaterals
+mesh.Segment(smallQuad).LocalLength( 3 )
+mesh.Quadrangle(smallQuad)
+
+# 1D and 2D algos and hyps to mesh bigQuad with triangles
+mesh.Segment(bigQuad).LocalLength( 3 )
+mesh.Triangle(bigQuad)
+
+# compute the mesh
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/quad_medial_axis_algo.py b/doc/examples/quad_medial_axis_algo.py
new file mode 100644 (file)
index 0000000..669cfd8
--- /dev/null
@@ -0,0 +1,32 @@
+# Usage of Medial Axis Projection algorithm
+
+# for meshing a ring face with quadrangles
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a ring face
+circleEdge1 = geom_builder.MakeCircleR( 3 )
+circleEdge2 = geom_builder.MakeCircleR( 7 )
+ring = geom_builder.MakeFaceWires( [ circleEdge1, circleEdge2 ], True, theName='Ring' )
+circleLen1  = geom_builder.BasicProperties( circleEdge1 )[0]
+circleLen2  = geom_builder.BasicProperties( circleEdge2 )[0]
+
+# make a mesh
+
+mesh = smesh_builder.Mesh( ring )
+
+circNbSeg = 60
+algo1d = mesh.Segment()
+algo1d.NumberOfSegments( circNbSeg ) # division of circle edges
+
+algo2d = mesh.Quadrangle( smeshBuilder.QUAD_MA_PROJ )
+algo2d.StartEndLength( circleLen2 / circNbSeg, circleLen1 / circNbSeg ) # radial division
+
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/quality_controls_defl.py b/doc/examples/quality_controls_defl.py
new file mode 100644 (file)
index 0000000..e9c4074
--- /dev/null
@@ -0,0 +1,43 @@
+# Deflection 2D
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# fuse a box and a sphere
+Sphere_1 = geom_builder.MakeSphereR(100)
+Box_1 = geom_builder.MakeBoxDXDYDZ(200, 200, 200)
+Fuse = geom_builder.MakeFuse( Sphere_1, Box_1, theName="box + sphere" )
+
+# create a mesh
+mesh = smesh_builder.Mesh( Fuse, "Deflection_2D")
+algo = mesh.Segment()
+algo.LocalLength(35)
+algo = mesh.Triangle()
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# get min and max deflection
+minMax = mesh.GetMinMax( SMESH.FT_Deflection2D )
+print("min and max deflection: ", minMax)
+
+# get deflection of a certain face
+faceID = mesh.NbEdges() + mesh.NbFaces()
+defl = mesh.FunctorValue( SMESH.FT_Deflection2D, faceID )
+print("deflection of face %s = %s" % ( faceID, defl ))
+
+margin = minMax[1] / 2
+
+# get all faces with deflection LESS than the margin
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Deflection2D, '<', margin, mesh=mesh)
+anIds = aFilter.GetIDs()
+print("%s faces have deflection less than %s" %( len(anIds), margin ))
+
+# create a group of faces with deflection MORE than the margin
+aGroup = mesh.MakeGroup("Deflection > " + repr(margin), SMESH.FACE, SMESH.FT_Deflection2D,'>',margin)
+print("%s faces have deflection more than %s: %s ..." %( aGroup.Size(), margin, aGroup.GetIDs()[:10] ))
diff --git a/doc/examples/quality_controls_ex01.py b/doc/examples/quality_controls_ex01.py
new file mode 100644 (file)
index 0000000..76b8be6
--- /dev/null
@@ -0,0 +1,44 @@
+# Free Borders
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create open shell: a box without one plane
+box = geom_builder.MakeBox(0., 0., 0., 20., 20., 15.)
+FaceList = geom_builder.SubShapeAll(box, geom_builder.ShapeType["FACE"])
+FaceList.remove(FaceList[5])
+box = geom_builder.MakeShell(FaceList)
+idbox = geom_builder.addToStudy(box, "box")
+
+# create a mesh
+mesh = smesh_builder.Mesh(box, "Mesh_free_borders")
+algo = mesh.Segment()
+algo.NumberOfSegments(5)
+algo = mesh.Triangle()
+algo.MaxElementArea(20.)
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# criterion : free borders
+aFilter = smesh_builder.GetFilter(SMESH.EDGE, SMESH.FT_FreeBorders)
+anIds = mesh.GetIdsFromFilter(aFilter)
+
+# print the result
+print("Criterion: Free borders Nb = ", len(anIds))
+j = 1
+for i in range(len(anIds)):
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
+  j = j + 1
+  pass
+print("")
+
+# create a group
+aGroup = mesh.GetMesh().CreateGroup(SMESH.EDGE, "Free borders")
+aGroup.Add(anIds)
diff --git a/doc/examples/quality_controls_ex02.py b/doc/examples/quality_controls_ex02.py
new file mode 100644 (file)
index 0000000..e4c6c52
--- /dev/null
@@ -0,0 +1,46 @@
+# Borders at Multiconnection
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create open shell: a box without one plane
+box = geom_builder.MakeBox(0., 0., 0., 20., 20., 15.)
+FaceList = geom_builder.SubShapeAll(box, geom_builder.ShapeType["FACE"])
+FaceList.remove(FaceList[5])
+box = geom_builder.MakeShell(FaceList)
+idbox = geom_builder.addToStudy(box, "box")
+
+# create a mesh
+mesh = smesh_builder.Mesh(box, "Mesh_borders_at_multi-connections")
+algo = mesh.Segment()
+algo.NumberOfSegments(5)
+algo = mesh.Triangle()
+algo.MaxElementArea(20.)
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# Criterion : Borders at multi-connection
+nb_conn = 2
+
+aFilter = smesh_builder.GetFilter(SMESH.EDGE, SMESH.FT_MultiConnection, SMESH.FT_EqualTo, nb_conn)
+anIds = mesh.GetIdsFromFilter(aFilter)
+
+# print the result
+print("Criterion: Borders at multi-connections Nb = ", len(anIds))
+j = 1
+for i in range(len(anIds)):
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
+  j = j + 1
+  pass
+print("")
+
+# create a group
+aGroup = mesh.GetMesh().CreateGroup(SMESH.EDGE, "Borders at multi-connections")
+aGroup.Add(anIds)
diff --git a/doc/examples/quality_controls_ex03.py b/doc/examples/quality_controls_ex03.py
new file mode 100644 (file)
index 0000000..cfe71c9
--- /dev/null
@@ -0,0 +1,46 @@
+# Length 1D
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create open shell: a box without one plane
+box = geom_builder.MakeBox(0., 0., 0., 20., 20., 15.)
+FaceList = geom_builder.SubShapeAll(box, geom_builder.ShapeType["FACE"])
+FaceList.remove(FaceList[5])
+box = geom_builder.MakeShell(FaceList)
+idbox = geom_builder.addToStudy(box, "box")
+
+# create a mesh
+mesh = smesh_builder.Mesh(box, "Mesh_Length_1D")
+algo = mesh.Segment()
+algo.NumberOfSegments(5)
+algo = mesh.Triangle()
+algo.MaxElementArea(20.)
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# Criterion : Length > 3.
+length_margin = 3.
+
+aFilter = smesh_builder.GetFilter(SMESH.EDGE, SMESH.FT_Length, SMESH.FT_MoreThan, length_margin)
+anIds = mesh.GetIdsFromFilter(aFilter) 
+
+# print the result
+print("Criterion: Edges length > ", length_margin, " Nb = ", len(anIds))
+j = 1
+for i in range(len(anIds)):
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
+  j = j + 1
+  pass
+print("")
+
+# create a group
+aGroup = mesh.GetMesh().CreateGroup(SMESH.EDGE, "Edges with length > " + repr(length_margin))
+aGroup.Add(anIds)
diff --git a/doc/examples/quality_controls_ex04.py b/doc/examples/quality_controls_ex04.py
new file mode 100644 (file)
index 0000000..b4c1dd2
--- /dev/null
@@ -0,0 +1,33 @@
+# Free Edges
+
+from mechanic import *
+
+aFilterMgr = smesh_builder.CreateFilterManager()
+
+# Remove some elements to obtain free edges
+# Criterion : AREA > 95.
+area_margin = 95.
+
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, area_margin)
+
+anIds = mesh.GetIdsFromFilter(aFilter)
+
+mesh.RemoveElements(anIds)
+
+# Criterion : Free Edges
+aBorders = mesh.GetFreeBorders() 
+
+# create groups
+aGroupF = mesh.CreateEmptyGroup(SMESH.FACE, "Faces with free edges")
+aGroupN = mesh.CreateEmptyGroup(SMESH.NODE, "Nodes on free edges")
+
+# fill groups with elements, corresponding to the criterion
+print("")
+print("Criterion: Free edges Nb = ", len(aBorders))
+for i in range(len(aBorders)):
+  aBorder = aBorders[i]
+  print("Face # ", aBorder.myElemId, " : Edge between nodes (", end=' ')
+  print(aBorder.myPnt1, ", ", aBorder.myPnt2, ")")
+
+  aGroupF.Add([aBorder.myElemId])
+  aGroupN.Add([aBorder.myPnt1, aBorder.myPnt2])
diff --git a/doc/examples/quality_controls_ex05.py b/doc/examples/quality_controls_ex05.py
new file mode 100644 (file)
index 0000000..008ee2f
--- /dev/null
@@ -0,0 +1,49 @@
+# Free Nodes
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create box
+box = geom_builder.MakeBox(0., 0., 0., 100., 200., 300.)
+idbox = geom_builder.addToStudy(box, "box")
+
+# create a mesh
+mesh = smesh_builder.Mesh(box, "Mesh_free_nodes")
+mesh.Segment().NumberOfSegments(10)
+mesh.Triangle().MaxElementArea(150.)
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# Remove some elements to obtain free nodes
+# Criterion : AREA < 80.
+area_margin = 80.
+
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_LessThan, area_margin)
+
+anIds = mesh.GetIdsFromFilter(aFilter)
+
+mesh.RemoveElements(anIds)
+
+# criterion : free nodes
+aFilter = smesh_builder.GetFilter(SMESH.NODE, SMESH.FT_FreeNodes)
+anNodeIds = mesh.GetIdsFromFilter(aFilter)
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(SMESH.NODE, "Free_nodes")
+aGroup.Add(anNodeIds)
+
+# print the result
+print("Criterion: Free nodes Nb = ", len(anNodeIds))
+j = 1
+for i in range(len(anNodeIds)):
+  if j > 20: j = 1; print("")
+  print(anNodeIds[i], end=' ')
+  j = j + 1
+  pass
+print("")
diff --git a/doc/examples/quality_controls_ex06.py b/doc/examples/quality_controls_ex06.py
new file mode 100644 (file)
index 0000000..22d6a9b
--- /dev/null
@@ -0,0 +1,74 @@
+# Free Faces
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+####### GEOM part ########
+
+Box_1 = geom_builder.MakeBoxDXDYDZ(200, 200, 200)
+Box_1_vertex_6 = geom_builder.GetSubShape(Box_1, [6])
+Box_1 = geom_builder.GetMainShape(Box_1_vertex_6)
+Box_1_vertex_16 = geom_builder.GetSubShape(Box_1, [16])
+Box_1 = geom_builder.GetMainShape(Box_1_vertex_16)
+Box_1_vertex_11 = geom_builder.GetSubShape(Box_1, [11])
+Box_1 = geom_builder.GetMainShape(Box_1_vertex_11)
+Plane_1 = geom_builder.MakePlaneThreePnt(Box_1_vertex_6, Box_1_vertex_16, Box_1_vertex_11, 2000)
+Partition_1 = geom_builder.MakePartition([Box_1], [Plane_1], [], [], geom_builder.ShapeType["SOLID"], 0, [], 0)
+
+Box_1_vertex_19 = geom_builder.GetSubShape(Box_1, [19])
+Box_1_vertex_21 = geom_builder.GetSubShape(Box_1, [21])
+Plane_2 = geom_builder.MakePlaneThreePnt(Box_1_vertex_16, Box_1_vertex_19, Box_1_vertex_21, 2000)
+
+geom_builder.addToStudy( Box_1, "Box_1" )
+geom_builder.addToStudyInFather( Box_1, Box_1_vertex_6, "Box_1:vertex_6" )
+geom_builder.addToStudyInFather( Box_1, Box_1_vertex_16, "Box_1:vertex_16" )
+geom_builder.addToStudyInFather( Box_1, Box_1_vertex_11, "Box_1:vertex_11" )
+geom_builder.addToStudy( Plane_1, "Plane_1" )
+geom_builder.addToStudy( Partition_1, "Partition_1" )
+geom_builder.addToStudyInFather( Box_1, Box_1_vertex_19, "Box_1:vertex_19" )
+geom_builder.addToStudyInFather( Box_1, Box_1_vertex_21, "Box_1:vertex_21" )
+geom_builder.addToStudy( Plane_2, "Plane_2" )
+
+###### SMESH part ######
+
+Mesh_1 = smesh_builder.Mesh(Partition_1)
+Mesh_1.Segment().MaxSize(34.641)
+Mesh_1.Triangle()
+Mesh_1.Tetrahedron()
+if not Mesh_1.Compute(): raise Exception("Error when computing Mesh")
+
+# create a group of free faces
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_FreeFaces )
+aFaceIds = Mesh_1.GetIdsFromFilter(aFilter)
+
+aGroup = Mesh_1.CreateEmptyGroup(SMESH.FACE, "Free_faces")
+aGroup.Add(aFaceIds)
+
+# print the result
+print("Criterion: Free faces Nb = ", len(aFaceIds))
+j = 1
+for i in range(len(aFaceIds)):
+  if j > 20: j = 1; print("")
+  print(aFaceIds[i], end=' ')
+  j = j + 1
+  pass
+print("")
+
+#filter faces from plane 2
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_BelongToPlane, Plane_2)
+aFaceIds = Mesh_1.GetIdsFromFilter(aFilter)
+aGroup.Remove(aFaceIds)
+
+# create a group of shared faces (located on partition boundary inside box)
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_BelongToPlane, Plane_1)
+aFaceIds = Mesh_1.GetIdsFromFilter(aFilter)
+
+aGroup = Mesh_1.CreateEmptyGroup(SMESH.FACE, "Shared_faces")
+aGroup.Add(aFaceIds)
diff --git a/doc/examples/quality_controls_ex07.py b/doc/examples/quality_controls_ex07.py
new file mode 100644 (file)
index 0000000..5b1b695
--- /dev/null
@@ -0,0 +1,26 @@
+# Bare border faces
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+box = geom_builder.MakeBoxDXDYDZ(100, 100, 100)
+geom_builder.addToStudy( box, "box" )
+
+mesh = smesh_builder.Mesh(box)
+mesh.Segment().NumberOfSegments(3)
+mesh.Quadrangle()
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# remove 2 faces
+allFaces = mesh.GetElementsByType(SMESH.FACE)
+mesh.RemoveElements( allFaces[0:2])
+
+bareGroup = mesh.MakeGroup("bare faces", SMESH.FACE, SMESH.FT_BareBorderFace)
+assert(bareGroup.Size() == 3)
diff --git a/doc/examples/quality_controls_ex08.py b/doc/examples/quality_controls_ex08.py
new file mode 100644 (file)
index 0000000..61c7a25
--- /dev/null
@@ -0,0 +1,30 @@
+# Bare border volumes
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+box = geom_builder.MakeBoxDXDYDZ(100, 30, 10)
+# the smallest face of the box
+face = geom_builder.SubShapeAllSorted( box, geom_builder.ShapeType["FACE"])[0]
+
+geom_builder.addToStudy( box, "box" )
+geom_builder.addToStudyInFather( box, face, "face" )
+
+mesh = smesh_builder.Mesh(box)
+mesh.AutomaticHexahedralization();
+
+# remove half of mesh faces from the smallest face
+faceFaces = mesh.GetSubMeshElementsId(face)
+faceToRemove = faceFaces[: len(faceFaces) // 2]
+mesh.RemoveElements( faceToRemove )
+
+# make a group of volumes missing the removed faces
+bareGroup = mesh.MakeGroup("bare volumes", SMESH.VOLUME, SMESH.FT_BareBorderVolume)
+assert(bareGroup.Size() == len( faceToRemove))
diff --git a/doc/examples/quality_controls_ex09.py b/doc/examples/quality_controls_ex09.py
new file mode 100644 (file)
index 0000000..c05ba61
--- /dev/null
@@ -0,0 +1,22 @@
+# Over-constrained faces
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.smesh import smeshBuilder
+
+smesh_builder = smeshBuilder.New()
+
+mesh = smesh_builder.Mesh()
+faceFilter = smesh_builder.GetFilter(SMESH.FACE,SMESH.FT_OverConstrainedFace)
+
+#make an edge
+n1 = mesh.AddNode(0,0,0)
+n2 = mesh.AddNode(10,0,0)
+edge = mesh.AddEdge([n1,n2])
+assert( not mesh.GetIdsFromFilter( faceFilter ))
+
+# make faces
+mesh.ExtrusionSweep([edge], smesh_builder.MakeDirStruct(0,7,0), 5)
+assert( 5 == len( mesh.GetIdsFromFilter( faceFilter )))
diff --git a/doc/examples/quality_controls_ex10.py b/doc/examples/quality_controls_ex10.py
new file mode 100644 (file)
index 0000000..b369234
--- /dev/null
@@ -0,0 +1,20 @@
+# Over-constrained volumes
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.smesh import smeshBuilder
+
+smesh_builder = smeshBuilder.New()
+
+mesh = smesh_builder.Mesh()
+volumeFilter = smesh_builder.GetFilter(SMESH.VOLUME,SMESH.FT_OverConstrainedVolume)
+
+# make volumes by extrusion of one face
+n1 = mesh.AddNode(0,0,0)
+n2 = mesh.AddNode(10,0,0)
+edge = mesh.AddEdge([n1,n2])
+mesh.ExtrusionSweep([edge], smesh_builder.MakeDirStruct(0,7,0), 1)
+mesh.ExtrusionSweep( mesh.GetElementsByType(SMESH.FACE), smesh_builder.MakeDirStruct(0,0,5), 7)
+assert( 7 == len( mesh.GetIdsFromFilter( volumeFilter )))
diff --git a/doc/examples/quality_controls_ex11.py b/doc/examples/quality_controls_ex11.py
new file mode 100644 (file)
index 0000000..731b3b0
--- /dev/null
@@ -0,0 +1,47 @@
+# Length 2D
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create open shell: a box without one plane
+box = geom_builder.MakeBox(0., 0., 0., 20., 20., 15.)
+FaceList = geom_builder.SubShapeAll(box, geom_builder.ShapeType["FACE"])
+FaceList.remove(FaceList[5])
+box = geom_builder.MakeShell(FaceList)
+idbox = geom_builder.addToStudy(box, "box")
+
+# create a mesh
+mesh = smesh_builder.Mesh(box, "Mesh_Length_2D")
+algo = mesh.Segment()
+algo.NumberOfSegments(5)
+algo = mesh.Triangle()
+algo.MaxElementArea(20.)
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# Criterion : Length 2D > 5.7
+length_margin = 5.7
+
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Length2D, SMESH.FT_MoreThan, length_margin)
+
+anIds = mesh.GetIdsFromFilter(aFilter)
+
+# print the result
+print("Criterion: Edges length 2D > ", length_margin, " Nb = ", len(anIds))
+j = 1
+for i in range(len(anIds)):
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
+  j = j + 1
+  pass
+print("")
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Faces with length 2D > " + repr(length_margin))
+aGroup.Add(anIds)
diff --git a/doc/examples/quality_controls_ex12.py b/doc/examples/quality_controls_ex12.py
new file mode 100644 (file)
index 0000000..1e875a8
--- /dev/null
@@ -0,0 +1,47 @@
+# Borders at Multiconnection 2D
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a compound of two glued boxes
+box1 = geom_builder.MakeBox(0., 0., 0., 20., 20., 15.)
+box2 = geom_builder.MakeTranslation(box1, 0., 20., 0)
+comp = geom_builder.MakeCompound([box1, box2])
+box = geom_builder.MakeGlueFaces(comp, 0.000001)
+idbox = geom_builder.addToStudy(box, "box")
+
+# create a mesh
+mesh = smesh_builder.Mesh(box, "Box compound : 2D triangle mesh")
+algo = mesh.Segment()
+algo.NumberOfSegments(5)
+algo = mesh.Triangle()
+algo.MaxElementArea(20.)
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# Criterion : MULTI-CONNECTION 2D = 3
+nb_conn = 3
+
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_MultiConnection2D, SMESH.FT_EqualTo, nb_conn)
+
+anIds = mesh.GetIdsFromFilter(aFilter) 
+
+# print the result
+print("Criterion: Borders at multi-connection 2D = ", nb_conn, " Nb = ", len(anIds))
+j = 1
+for i in range(len(anIds)):
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
+  j = j + 1
+  pass
+print("")
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Borders at multi-connection 2D = " + repr(nb_conn))
+aGroup.Add(anIds)
diff --git a/doc/examples/quality_controls_ex13.py b/doc/examples/quality_controls_ex13.py
new file mode 100644 (file)
index 0000000..994025f
--- /dev/null
@@ -0,0 +1,24 @@
+# Area
+
+from mechanic import *
+
+# Criterion : AREA > 100.
+area_margin = 100.
+
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, area_margin)
+
+anIds = mesh.GetIdsFromFilter(aFilter) 
+
+# print the result
+print("Criterion: Area > ", area_margin, " Nb = ", len(anIds))
+j = 1
+for i in range(len(anIds)):
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
+  j = j + 1
+  pass
+print("")
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Area > " + repr(area_margin))
+aGroup.Add(anIds)
diff --git a/doc/examples/quality_controls_ex14.py b/doc/examples/quality_controls_ex14.py
new file mode 100644 (file)
index 0000000..23f9f5e
--- /dev/null
@@ -0,0 +1,24 @@
+# Taper
+
+from mechanic import *
+
+# Criterion : Taper > 3e-20
+taper_margin = 3e-20
+
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Taper, SMESH.FT_MoreThan, taper_margin)
+
+anIds = mesh.GetIdsFromFilter(aFilter) 
+
+# print the result
+print("Criterion: Taper > ", taper_margin, " Nb = ", len(anIds))
+j = 1
+for i in range(len(anIds)):
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
+  j = j + 1
+  pass
+print("")
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Taper > " + repr(taper_margin))
+aGroup.Add(anIds)
diff --git a/doc/examples/quality_controls_ex15.py b/doc/examples/quality_controls_ex15.py
new file mode 100644 (file)
index 0000000..2775b20
--- /dev/null
@@ -0,0 +1,24 @@
+# Aspect Ratio
+
+from mechanic import *
+
+# Criterion : ASPECT RATIO > 1.8
+ar_margin = 1.8
+
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_AspectRatio, SMESH.FT_MoreThan, ar_margin)
+
+anIds = mesh.GetIdsFromFilter(aFilter) 
+
+# print the result
+print("Criterion: Aspect Ratio > ", ar_margin, " Nb = ", len(anIds))
+j = 1
+for i in range(len(anIds)):
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
+  j = j + 1
+  pass
+print("")
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Aspect Ratio > " + repr(ar_margin))
+aGroup.Add(anIds)
diff --git a/doc/examples/quality_controls_ex16.py b/doc/examples/quality_controls_ex16.py
new file mode 100644 (file)
index 0000000..df4ba5e
--- /dev/null
@@ -0,0 +1,25 @@
+# Minimum Angle
+
+from mechanic import *
+
+# Criterion : MINIMUM ANGLE < 35.
+min_angle = 35.
+
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_MinimumAngle, SMESH.FT_LessThan, min_angle)
+
+anIds = mesh.GetIdsFromFilter(aFilter) 
+
+# print the result
+print("Criterion: Minimum Angle < ", min_angle, " Nb = ", len(anIds))
+j = 1
+for i in range(len(anIds)):
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
+  j = j + 1
+  pass
+print("")
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Minimum Angle < " + repr(min_angle))
+
+aGroup.Add(anIds)
diff --git a/doc/examples/quality_controls_ex17.py b/doc/examples/quality_controls_ex17.py
new file mode 100644 (file)
index 0000000..b8ebd9a
--- /dev/null
@@ -0,0 +1,25 @@
+# Warping
+
+from mechanic import *
+
+# Criterion : WARP ANGLE > 1e-15
+wa_margin = 1e-15
+
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Warping, SMESH.FT_MoreThan, wa_margin)
+
+anIds = mesh.GetIdsFromFilter(aFilter) 
+
+# print the result
+print("Criterion: Warp > ", wa_margin, " Nb = ", len(anIds))
+j = 1
+for i in range(len(anIds)):
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
+  j = j + 1
+  pass
+print("")
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Warp > " + repr(wa_margin))
+
+aGroup.Add(anIds)
diff --git a/doc/examples/quality_controls_ex18.py b/doc/examples/quality_controls_ex18.py
new file mode 100644 (file)
index 0000000..1ca2cb4
--- /dev/null
@@ -0,0 +1,24 @@
+# Skew
+
+from mechanic import *
+
+# Criterion : Skew > 38.
+skew_margin = 38.
+
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_Skew, SMESH.FT_MoreThan, skew_margin)
+
+anIds = mesh.GetIdsFromFilter(aFilter)
+
+# print the result
+print("Criterion: Skew > ", skew_margin, " Nb = ", len(anIds))
+j = 1
+for i in range(len(anIds)):
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
+  j = j + 1
+  pass
+print("")
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Skew > " + repr(skew_margin))
+aGroup.Add(anIds)
diff --git a/doc/examples/quality_controls_ex19.py b/doc/examples/quality_controls_ex19.py
new file mode 100644 (file)
index 0000000..daf2f83
--- /dev/null
@@ -0,0 +1,24 @@
+# Element Diameter 2D
+
+from mechanic import *
+
+# Criterion : ELEMENT DIAMETER 2D > 10
+mel_2d_margin = 10
+
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_MaxElementLength2D, SMESH.FT_MoreThan, mel_2d_margin)
+
+anIds = mesh.GetIdsFromFilter(aFilter) 
+
+# print the result
+print("Criterion: Element Diameter 2D Ratio > ", mel_2d_margin, " Nb = ", len(anIds))
+j = 1
+for i in range(len(anIds)):
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
+  j = j + 1
+  pass
+print("")
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Element Diameter 2D > " + repr(mel_2d_margin))
+aGroup.Add(anIds)
diff --git a/doc/examples/quality_controls_ex20.py b/doc/examples/quality_controls_ex20.py
new file mode 100644 (file)
index 0000000..2767919
--- /dev/null
@@ -0,0 +1,25 @@
+# Aspect Ratio 3D
+
+from mechanic import *
+
+# Criterion : ASPECT RATIO 3D > 4.5
+ar_margin = 4.5
+
+aFilter = smesh_builder.GetFilter(SMESH.VOLUME, SMESH.FT_AspectRatio3D, SMESH.FT_MoreThan, ar_margin)
+
+anIds = mesh.GetIdsFromFilter(aFilter) 
+
+# print the result
+print("Criterion: Aspect Ratio 3D > ", ar_margin, " Nb = ", len(anIds))
+j = 1
+for i in range(len(anIds)):
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
+  j = j + 1
+  pass
+print("")
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(SMESH.VOLUME, "Aspect Ratio 3D > " + repr(ar_margin))
+
+aGroup.Add(anIds)
diff --git a/doc/examples/quality_controls_ex21.py b/doc/examples/quality_controls_ex21.py
new file mode 100644 (file)
index 0000000..1fb8bb4
--- /dev/null
@@ -0,0 +1,26 @@
+# Volume
+
+from mechanic import *
+
+# Criterion : VOLUME < 7.
+volume_margin = 7.
+
+aFilter = smesh_builder.GetFilter(SMESH.VOLUME, SMESH.FT_Volume3D, SMESH.FT_LessThan, volume_margin)
+
+anIds = mesh.GetIdsFromFilter(aFilter) 
+
+# print the result
+print("")
+print("Criterion: Volume < ", volume_margin, " Nb = ", len(anIds))
+j = 1
+for i in range(len(anIds)):
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
+  j = j + 1
+  pass
+print("")
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(SMESH.VOLUME, "Volume < " + repr(volume_margin))
+
+aGroup.Add(anIds)
diff --git a/doc/examples/quality_controls_ex22.py b/doc/examples/quality_controls_ex22.py
new file mode 100644 (file)
index 0000000..c33c3ec
--- /dev/null
@@ -0,0 +1,24 @@
+# Element Diameter 3D
+
+from mechanic import *
+
+# Criterion : ELEMENT DIAMETER 3D > 10
+mel_3d_margin = 10
+
+aFilter = smesh_builder.GetFilter(SMESH.FACE, SMESH.FT_MaxElementLength3D, SMESH.FT_MoreThan, mel_3d_margin)
+
+anIds = mesh.GetIdsFromFilter(aFilter) 
+
+# print the result
+print("Criterion: Element Diameter 3D Ratio > ", mel_3d_margin, " Nb = ", len(anIds))
+j = 1
+for i in range(len(anIds)):
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
+  j = j + 1
+  pass
+print("")
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Element Diameter 3D > " + repr(mel_3d_margin))
+aGroup.Add(anIds)
diff --git a/doc/examples/quality_controls_ex23.py b/doc/examples/quality_controls_ex23.py
new file mode 100644 (file)
index 0000000..f34704a
--- /dev/null
@@ -0,0 +1,25 @@
+# Warping
+
+from mechanic import *
+
+# Criterion : WARP ANGLE > 1e-15
+wa_margin = 1e-15
+
+aFilter = smesh_builder.GetFilter(SMESH.VOLUME, SMESH.FT_Warping3D, SMESH.FT_MoreThan, wa_margin)
+
+anIds = mesh.GetIdsFromFilter(aFilter) 
+
+# print the result
+print("Criterion: Warp > ", wa_margin, " Nb = ", len(anIds))
+j = 1
+for i in range(len(anIds)):
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
+  j = j + 1
+  pass
+print("")
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(SMESH.VOLUME, "Warp > " + repr(wa_margin))
+
+aGroup.Add(anIds)
diff --git a/doc/examples/quality_controls_ex24.py b/doc/examples/quality_controls_ex24.py
new file mode 100644 (file)
index 0000000..3bce488
--- /dev/null
@@ -0,0 +1,24 @@
+# Scaled Jacobian
+
+from mechanic import *
+
+# Criterion : Scaled Jacobian > 0.75
+scaledJacobian = 0.75
+
+aFilter = smesh_builder.GetFilter(SMESH.VOLUME, SMESH.FT_ScaledJacobian, SMESH.FT_MoreThan, scaledJacobian)
+
+anIds = mesh.GetIdsFromFilter(aFilter) 
+
+# print the result
+print("Criterion: Scaled Jacobian > ", scaledJacobian, " Nb = ", len(anIds))
+j = 1
+for i in range(len(anIds)):
+  if j > 20: j = 1; print("")
+  print(anIds[i], end=' ')
+  j = j + 1
+  pass
+print("")
+
+# create a group
+aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Scaled Jacobian > " + repr(scaledJacobian))
+aGroup.Add(anIds)
\ No newline at end of file
diff --git a/doc/examples/radial_prism_3d_algo.py b/doc/examples/radial_prism_3d_algo.py
new file mode 100644 (file)
index 0000000..a84ecc8
--- /dev/null
@@ -0,0 +1,36 @@
+# Usage of Radial Prism 3D meshing algorithm
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# Create geometry: hollow sphere
+
+sphere_1 = geom_builder.MakeSphereR( 100 )
+sphere_2 = geom_builder.MakeSphereR( 50 )
+
+hollow_sphere = geom_builder.MakeCut( sphere_1, sphere_2, theName="hollow sphere")
+
+faces = geom_builder.ExtractShapes( hollow_sphere, geom_builder.ShapeType["FACE"] )
+
+# Create mesh 
+
+mesh = smesh_builder.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
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/split_biquad.py b/doc/examples/split_biquad.py
new file mode 100644 (file)
index 0000000..a8e51ed
--- /dev/null
@@ -0,0 +1,37 @@
+# Split bi-quadratic to linear
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# make a shape consisting of two quadranges
+OY  = geom_builder.MakeVectorDXDYDZ(0, 1, 0)
+OY1 = geom_builder.MakeTranslation( OY, 1, 0, 0 )
+OY2 = geom_builder.MakeTranslation( OY, 2, 0, 0 )
+q1  = geom_builder.MakeQuad2Edges( OY, OY1 )
+q2  = geom_builder.MakeQuad2Edges( OY1, OY2 )
+
+shape = geom_builder.Partition( [q1,q2], theName='shape' )
+ff    = geom_builder.SubShapeAll( shape, geom_builder.ShapeType["FACE"], theName="quad" )
+
+# mesh one quadrange with quadrangless and the other with triangles
+mesh = smesh_builder.Mesh( shape )
+mesh.Segment().NumberOfSegments(1)
+mesh.Quadrangle()
+mesh.Triangle( ff[1] )
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# make group of quadrangles and extrude them into a hexahedron
+quadGroup = mesh.Group( ff[0], "quads")
+mesh.ExtrusionSweepObject2D( quadGroup, [0,0,1], 1 )
+
+# make the mesh bi-quadratic
+mesh.ConvertToQuadratic( theToBiQuad=True )
+
+# split all elements into linear ones
+mesh.SplitBiQuadraticIntoLinear()
diff --git a/doc/examples/test_homard_adapt.py b/doc/examples/test_homard_adapt.py
new file mode 100644 (file)
index 0000000..0c1d88f
--- /dev/null
@@ -0,0 +1,95 @@
+import inspect
+import os
+import os.path as osp
+import shutil
+import tempfile
+
+import salome
+salome.salome_init_without_session()
+
+from salome.smesh import smeshBuilder
+import SMESHHOMARD
+
+smesh = smeshBuilder.New()
+
+data_dir = osp.abspath(osp.join(osp.dirname(inspect.getfile(lambda: None)), 'data'))
+working_dir = tempfile.mkdtemp()
+
+input_med = osp.join (data_dir, "test_homard_adapt.med")
+output_med_1 = osp.join (working_dir, "test_1.00_Uniform_R_01.med")
+output_med_2 = osp.join (working_dir, "test_1.00_Uniform_R_02.med")
+log_file_1 = osp.join (working_dir, "test_1.00_Uniform_R_01.med.log")
+log_file_2 = osp.join (working_dir, "test_1.00_Uniform_R_02.med.log")
+
+# Case 1: input: med file
+#         output: med file, log file, published mesh
+if osp.isfile(output_med_1):
+  os.remove(output_med_1)
+if osp.isfile(log_file_1):
+  os.remove(log_file_1)
+
+smeshhomard = smesh.Adaptation("Uniform")
+smeshhomard.CreateCase("MAILL", input_med, working_dir)
+smeshhomard.SetConfType(0)
+smeshhomard.SetKeepMedOUT(True)
+smeshhomard.SetPublishMeshOUT(True)
+smeshhomard.SetMeshNameOUT("MAILL_Uniform_R_01")
+smeshhomard.SetMeshFileOUT(output_med_1)
+smeshhomard.SetKeepWorkingFiles(False)
+smeshhomard.SetLogInFile(True)
+smeshhomard.SetLogFile(log_file_1)
+smeshhomard.SetRemoveLogOnSuccess(False)
+smeshhomard.SetVerboseLevel(3)
+if smeshhomard.Compute() != 0: raise Exception("Error when computing Mesh")
+
+if osp.isfile(output_med_1):
+  os.remove(output_med_1)
+else:
+  print("Test Uniform refinement Case 1: Error: no output med file")
+  assert(False)
+
+if osp.isfile(log_file_1):
+  os.remove(log_file_1)
+else:
+  print("Test Uniform refinement Case 1: Error: no log file")
+  assert(False)
+
+# Case 2: input: mesh, boundaries
+#         output: published mesh
+if osp.isfile(output_med_2):
+  os.remove(output_med_2)
+if osp.isfile(log_file_2):
+  os.remove(log_file_2)
+
+# prepare input mesh
+([MAILL], status) = smesh.CreateMeshesFromMED( input_med )
+
+#smeshhomard = smesh.Adaptation("Uniform")
+Boun_1 = smeshhomard.CreateBoundaryCylinder("Boun_1", 0.5, 0.5, 0.5, 0, 0, 1, 0.25)
+smeshhomard.CreateCaseOnMesh("MAILL", MAILL.GetMesh(), working_dir)
+smeshhomard.SetConfType(0)
+smeshhomard.AddBoundaryGroup("Boun_1", "BORD_EXT")
+smeshhomard.AddBoundaryGroup("Boun_1", "MOITIE1")
+smeshhomard.SetKeepMedOUT(False)
+smeshhomard.SetPublishMeshOUT(True)
+smeshhomard.SetMeshNameOUT("MAILL_Uniform_R_02")
+smeshhomard.SetMeshFileOUT(output_med_2)
+smeshhomard.SetKeepWorkingFiles(False)
+smeshhomard.SetLogInFile(True)
+smeshhomard.SetLogFile(log_file_2)
+smeshhomard.SetRemoveLogOnSuccess(True)
+smeshhomard.SetVerboseLevel(0)
+if smeshhomard.Compute() != 0: raise Exception("Error when computing Mesh")
+
+if osp.isfile(output_med_2):
+  print("Test Uniform refinement Case 2: Error: output med file has not been removed")
+  assert(False)
+
+if osp.isfile(log_file_2):
+  print("Test Uniform refinement Case 2: Error: log file has not been removed")
+  assert(False)
+
+shutil.rmtree(working_dir)
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser()
diff --git a/doc/examples/test_uniform_refinement.py b/doc/examples/test_uniform_refinement.py
new file mode 100644 (file)
index 0000000..1b362b0
--- /dev/null
@@ -0,0 +1,101 @@
+import inspect
+import os
+import os.path as osp
+import shutil
+import tempfile
+
+import salome
+salome.salome_init_without_session()
+
+from salome.smesh import smeshBuilder
+import SMESHHOMARD
+
+smesh = smeshBuilder.New()
+
+data_dir = osp.abspath(osp.join(osp.dirname(inspect.getfile(lambda: None)), 'data'))
+working_dir = tempfile.mkdtemp()
+
+input_med_1 = osp.join(data_dir, "tutorial_4.00.med")
+input_xao_1 = osp.join(data_dir, "tutorial_4.xao")
+output_med_1 = osp.join(working_dir, "tutorial_4.00_Uniform_R.med")
+log_file_1 = osp.join(working_dir, "tutorial_4.00_Uniform_R.log")
+
+# Case 1: input: med file
+#         output: med file, log file, published mesh
+if osp.isfile(output_med_1):
+  os.remove(output_med_1)
+if osp.isfile(log_file_1):
+  os.remove(log_file_1)
+
+cao_name = "CAO_PIQUAGE"
+smeshhomard = smesh.Adaptation("Uniform")
+smeshhomard.CreateBoundaryCAO(cao_name, input_xao_1)
+smeshhomard.CreateCase("PIQUAGE", input_med_1, working_dir)
+smeshhomard.AddBoundary(cao_name)
+smeshhomard.SetConfType(0)
+smeshhomard.SetKeepMedOUT(True)
+smeshhomard.SetPublishMeshOUT(True)
+smeshhomard.SetMeshNameOUT("PIQUAGE_Uniform_R_01")
+smeshhomard.SetMeshFileOUT(output_med_1)
+smeshhomard.SetKeepWorkingFiles(False)
+smeshhomard.SetLogInFile(True)
+smeshhomard.SetLogFile(log_file_1)
+smeshhomard.SetRemoveLogOnSuccess(False)
+smeshhomard.SetVerboseLevel(3)
+if smeshhomard.Compute() != 0: raise Exception("Error when computing Mesh")
+
+if osp.isfile(output_med_1):
+  os.remove(output_med_1)
+else:
+  print("Test Uniform refinement Case 1: Error: no output med file")
+  assert(False)
+
+if osp.isfile(log_file_1):
+  os.remove(log_file_1)
+else:
+  print("Test Uniform refinement Case 1: Error: no log file")
+  assert(False)
+
+# Case 2: input: mesh, boundaries
+#         output: published mesh
+input_med_2 = osp.join(data_dir, "tutorial_5.00.med")
+input_fr    = osp.join(data_dir, "tutorial_5.fr.med")
+output_med_2 = osp.join(working_dir, "tutorial_5.00_Uniform_R.med")
+log_file_2 = osp.join(working_dir, "tutorial_5.00_Uniform_R.log")
+
+if osp.isfile(output_med_2):
+  os.remove(output_med_2)
+if osp.isfile(log_file_2):
+  os.remove(log_file_2)
+
+# prepare input mesh
+([MAILL], status) = smesh.CreateMeshesFromMED( input_med_2 )
+
+smeshhomard = smesh.Adaptation("Uniform")
+smeshhomard.CreateBoundaryDi("Boun_5_1", "MAIL_EXT", input_fr)
+smeshhomard.CreateCaseOnMesh("COEUR_2D", MAILL.GetMesh(), working_dir)
+smeshhomard.AddBoundary("Boun_5_1")
+smeshhomard.SetConfType(1)
+smeshhomard.SetKeepMedOUT(False)
+smeshhomard.SetPublishMeshOUT(True)
+smeshhomard.SetMeshNameOUT("COEUR_2D_Uniform_R")
+smeshhomard.SetMeshFileOUT(output_med_2)
+smeshhomard.SetKeepWorkingFiles(False)
+smeshhomard.SetLogInFile(True)
+smeshhomard.SetLogFile(log_file_2)
+smeshhomard.SetRemoveLogOnSuccess(True)
+smeshhomard.SetVerboseLevel(0)
+if smeshhomard.Compute() != 0: raise Exception("Error when computing Mesh")
+
+if osp.isfile(output_med_2):
+  print("Test Uniform refinement Case 2: Error: output med file has not been removed")
+  assert(False)
+
+if osp.isfile(log_file_2):
+  print("Test Uniform refinement Case 2: Error: log file has not been removed")
+  assert(False)
+
+shutil.rmtree(working_dir)
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser()
diff --git a/doc/examples/tests.set b/doc/examples/tests.set
new file mode 100644 (file)
index 0000000..ca05a2a
--- /dev/null
@@ -0,0 +1,208 @@
+# Copyright (C) 2015-2024  CEA, EDF, 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
+#
+
+# The following tests cannot be executed with 'make test' because they use
+# external meshing plug-ins.
+# On the other hand these tests can be executed with 'salome test'.
+# ---------------------------------------------------------------------------
+
+SET(BAD_TESTS
+  a3DmeshOnModified2Dmesh.py
+  creating_meshes_ex01.py
+  creating_meshes_ex03.py
+  creating_meshes_ex04.py
+  creating_meshes_ex05.py
+  creating_meshes_ex08.py
+  defining_hypotheses_ex02.py
+  defining_hypotheses_ex05.py
+  defining_hypotheses_ex06.py
+  defining_hypotheses_ex07.py
+  defining_hypotheses_ex09.py
+  defining_hypotheses_ex10.py
+  defining_hypotheses_ex11.py
+  defining_hypotheses_ex17.py
+  defining_hypotheses_vlapi_ex17.py
+  defining_hypotheses_adaptive1d.py
+  filters_ex01.py
+  filters_ex02.py
+  filters_ex03.py
+  filters_ex04.py
+  filters_ex05.py
+  filters_ex06.py
+  filters_ex07.py
+  filters_ex08.py
+  filters_ex09.py
+  filters_ex10.py
+  filters_ex11.py
+  filters_ex12.py
+  filters_ex13.py
+  filters_ex14.py
+  filters_ex15.py
+  filters_ex19.py
+  filters_ex20.py
+  filters_ex21.py
+  filters_ex22.py
+  filters_ex23.py
+  filters_ex24.py
+  filters_ex25.py
+  filters_ex26.py
+  filters_ex27.py
+  filters_ex28.py
+  filters_ex29.py
+  filters_ex30.py
+  filters_ex31.py
+  filters_ex32.py
+  filters_ex33.py
+  filters_ex34.py
+  filters_ex35.py
+  filters_ex36.py
+  filters_ex37.py
+  filters_ex38.py
+  filters_ex40.py
+  filters_node_nb_conn.py
+  filters_belong2group.py
+  generate_flat_elements.py
+  grouping_elements_ex01.py
+  grouping_elements_ex04.py
+  grouping_elements_ex05.py
+  grouping_elements_ex06.py
+  grouping_elements_ex07.py
+  grouping_elements_ex08.py
+  measurements_ex01.py
+  measurements_ex02.py
+  measurements_ex03.py
+  mesh_3d.py
+  modifying_meshes_ex04.py
+  modifying_meshes_ex05.py
+  modifying_meshes_ex06.py
+  modifying_meshes_ex07.py
+  modifying_meshes_ex08.py
+  modifying_meshes_ex11.py
+  modifying_meshes_ex12.py
+  modifying_meshes_ex13.py
+  modifying_meshes_ex26.py
+  modifying_meshes_ex20.py
+  modifying_meshes_ex21.py
+  modifying_meshes_ex24.py
+  modifying_meshes_ex25.py
+  prism_3d_algo.py
+  notebook_smesh.py
+  quality_controls_ex01.py
+  quality_controls_ex02.py
+  quality_controls_ex03.py
+  quality_controls_ex04.py
+  quality_controls_ex05.py
+  quality_controls_ex06.py
+  quality_controls_ex11.py
+  quality_controls_ex12.py
+  quality_controls_ex13.py
+  quality_controls_ex14.py
+  quality_controls_ex15.py
+  quality_controls_ex16.py
+  quality_controls_ex17.py
+  quality_controls_ex18.py
+  quality_controls_ex19.py
+  quality_controls_ex20.py
+  quality_controls_ex21.py
+  quality_controls_ex22.py
+  quality_controls_ex24.py
+  quality_controls_defl.py
+  split_biquad.py
+  transforming_meshes_ex01.py
+  transforming_meshes_ex02.py
+  transforming_meshes_ex04.py
+  transforming_meshes_ex05.py
+  transforming_meshes_ex06.py
+  transforming_meshes_ex15.py
+  viewing_meshes_ex01.py
+  radial_prism_3d_algo.py
+  create_dual_mesh.py
+  creating_parallel_mesh.py  
+  creating_parallel_gmsh_mesh.py
+  creating_parallel_2D_mesh.py
+  )
+IF(NOT WIN32)
+  LIST(APPEND BAD_TESTS
+    MGAdaptTests_without_session.py
+  )
+  IF(MED_INT_IS_LONG)
+    LIST(APPEND BAD_TESTS
+      test_homard_adapt.py
+      test_uniform_refinement.py
+    )
+  ENDIF(MED_INT_IS_LONG)
+ENDIF(NOT WIN32)
+
+# The following tests can be executed with both 'make test' and 'salome test'.
+# ----------------------------------------------------------------------------
+
+SET(GOOD_TESTS
+  cartesian_algo.py
+  creating_meshes_ex02.py
+  creating_meshes_ex06.py
+  creating_meshes_ex07.py
+  defining_hypotheses_ex01.py
+  defining_hypotheses_ex03.py
+  defining_hypotheses_ex04.py
+  defining_hypotheses_ex08.py
+  defining_hypotheses_ex12.py
+  defining_hypotheses_ex13.py
+  defining_hypotheses_ex14.py
+  defining_hypotheses_ex15.py
+  defining_hypotheses_ex16.py
+  filters_ex16.py
+  filters_ex17.py
+  filters_ex18.py
+  filters_ex39.py
+  grouping_elements_ex02.py
+  grouping_elements_ex03.py
+  grouping_elements_ex09.py
+  measurements_ex04.py
+  modifying_meshes_ex01.py
+  modifying_meshes_ex02.py
+  modifying_meshes_ex03.py
+  modifying_meshes_ex09.py
+  modifying_meshes_ex10.py
+  modifying_meshes_ex15.py
+  modifying_meshes_ex16.py
+  modifying_meshes_ex17.py
+  modifying_meshes_ex18.py
+  modifying_meshes_ex19.py
+  modifying_meshes_ex22.py
+  modifying_meshes_ex23.py
+  modifying_meshes_cut_triangles.py
+  modifying_meshes_split_vol.py
+  quality_controls_ex07.py
+  quality_controls_ex08.py
+  quality_controls_ex09.py
+  quality_controls_ex10.py
+  transforming_meshes_ex03.py
+  transforming_meshes_ex07.py
+  transforming_meshes_ex08.py
+  transforming_meshes_ex09.py
+  transforming_meshes_ex10.py
+  transforming_meshes_ex11.py
+  transforming_meshes_ex12.py
+  transforming_meshes_ex13.py
+  transforming_meshes_ex14.py
+  use_existing_faces.py
+  viewing_meshes_ex02.py
+  quad_medial_axis_algo.py
+  defining_hypotheses_len_near_vertex.py
+)
diff --git a/doc/examples/transforming_meshes_ex01.py b/doc/examples/transforming_meshes_ex01.py
new file mode 100644 (file)
index 0000000..27dd161
--- /dev/null
@@ -0,0 +1,9 @@
+# Translation
+
+from mechanic import *
+
+# define translation vector
+vector = [-150., -150., 0.]
+
+# make a translated copy of all elements of the mesh
+mesh.TranslateObject(mesh, vector, Copy=True)
diff --git a/doc/examples/transforming_meshes_ex02.py b/doc/examples/transforming_meshes_ex02.py
new file mode 100644 (file)
index 0000000..d516a79
--- /dev/null
@@ -0,0 +1,12 @@
+# Rotation
+
+import math
+
+from mechanic import *
+
+# define rotation axis and angle
+axisXYZ = SMESH.AxisStruct(0., 0., 0., 5., 5., 20.)
+angle270 = 1.5 * math.pi
+
+# rotate a mesh
+mesh.Rotate([], axisXYZ, angle270, 1)  
diff --git a/doc/examples/transforming_meshes_ex03.py b/doc/examples/transforming_meshes_ex03.py
new file mode 100644 (file)
index 0000000..750040b
--- /dev/null
@@ -0,0 +1,33 @@
+# Scale
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+Box = geom_builder.MakeBoxDXDYDZ(200, 200, 200)
+f = geom_builder.SubShapeAllSorted(Box, geom_builder.ShapeType["FACE"])
+
+Mesh1 = smesh_builder.Mesh(f[0])
+Regular_1D = Mesh1.Segment()
+Nb_Segments_1 = Regular_1D.NumberOfSegments(3)
+Nb_Segments_1.SetDistrType( 0 )
+Quadrangle_2D = Mesh1.Quadrangle()
+if not Mesh1.Compute(): raise Exception("Error when computing Mesh")
+
+#Perform scale operation for the whole mesh and creation of a new mesh
+newMesh = Mesh1.ScaleMakeMesh(Mesh1,SMESH.PointStruct(100,100,200),[0.5,0.3,0.7],True,"ScaledMesh")
+
+#Perform scale operation for the whole mesh and copy elements
+Mesh1.Scale(Mesh1,SMESH.PointStruct(200,100,100),[0.5,0.5,0.5],True,True)
+
+#Perform scale operation for two edges and move elements
+Mesh1.Scale([1,2],SMESH.PointStruct(-100,100,100),[0.8,1.0,0.7],False)
+
+#Perform scale operation for one face and move elements
+Mesh1.Scale([21],SMESH.PointStruct(0,200,200),[0.7,0.7,0.7],False)
diff --git a/doc/examples/transforming_meshes_ex04.py b/doc/examples/transforming_meshes_ex04.py
new file mode 100644 (file)
index 0000000..cd421fe
--- /dev/null
@@ -0,0 +1,8 @@
+# Symmetry
+
+from mechanic import *
+
+# create a symmetrical copy of the mesh mirrored through a point
+axis = SMESH.AxisStruct(0, 0, 0, 0, 0, 0)
+
+mesh.Mirror([], axis, smesh_builder.POINT, 1)
diff --git a/doc/examples/transforming_meshes_ex05.py b/doc/examples/transforming_meshes_ex05.py
new file mode 100644 (file)
index 0000000..4d3b349
--- /dev/null
@@ -0,0 +1,21 @@
+# Merging Nodes
+
+from mechanic import *
+
+# criterion of coincidence
+Tolerance = 4.0
+
+# find close nodes of triangle elements only
+triangleFilter = smesh_builder.GetFilter( SMESH.FACE, SMESH.FT_ElemGeomType,'=', SMESH.Geom_TRIANGLE )
+GroupsOfNodesOfTriangles = mesh.FindCoincidentNodesOnPart([triangleFilter],Tolerance)
+
+# prevent nodes located on geom edges from removal during merge:
+# create a group including all nodes on edges
+allSegs = mesh.MakeGroup( "all segments", SMESH.EDGE, SMESH.FT_ElemGeomType,'=', SMESH.Geom_EDGE )
+
+mesh.MergeNodes(GroupsOfNodesOfTriangles, NodesToKeep=allSegs)
+
+# find close nodes in the whole mesh
+GroupsOfNodes = mesh.FindCoincidentNodes(Tolerance)
+
+mesh.MergeNodes(GroupsOfNodes, NodesToKeep=allSegs)
diff --git a/doc/examples/transforming_meshes_ex06.py b/doc/examples/transforming_meshes_ex06.py
new file mode 100644 (file)
index 0000000..72fd27d
--- /dev/null
@@ -0,0 +1,84 @@
+# Merging Elements
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a face to be meshed
+px = geom_builder.MakeVertex(100., 0.  , 0.  )
+py = geom_builder.MakeVertex(0.  , 100., 0.  )
+pz = geom_builder.MakeVertex(0.  , 0.  , 100.)
+
+vxy = geom_builder.MakeVector(px, py)
+arc = geom_builder.MakeArc(py, pz, px)
+
+wire = geom_builder.MakeWire([vxy, arc])
+isPlanarFace = 1
+
+face1 = geom_builder.MakeFace(wire, isPlanarFace)
+id_face1 = geom_builder.addToStudy(face1, "Face1")
+
+# create a circle to be an extrusion path
+px1 = geom_builder.MakeVertex( 100.,  100.,  0.)
+py1 = geom_builder.MakeVertex(-100., -100.,  0.)
+pz1 = geom_builder.MakeVertex(   0.,    0., 50.)
+
+circle = geom_builder.MakeCircleThreePnt(py1, pz1, px1)
+id_circle = geom_builder.addToStudy(circle, "Path")
+# create a 2D mesh on the face
+trias = smesh_builder.Mesh(face1, "Face : 2D mesh")
+
+algo1D = trias.Segment()
+algo1D.NumberOfSegments(6)
+algo2D = trias.Triangle()
+algo2D.LengthFromEdges()
+
+if not trias.Compute(): raise Exception("Error when computing Mesh")
+
+# create a group of all triangles currently present in the mesh
+faceTriGroup = trias.Group( face1, "face triangles" )
+
+# create a path mesh
+circlemesh = smesh_builder.Mesh(circle, "Path mesh")
+algo = circlemesh.Segment()
+algo.NumberOfSegments(10)
+if not circlemesh.Compute(): raise Exception("Error when computing Mesh")
+
+# extrusion of the mesh
+trias.ExtrusionAlongPath([], circlemesh, circle, 1, MakeGroups=True )
+
+# get a group "opposite" to faceTriGroup within the generated prismatic mesh
+oppositeGroup = trias.GetGroupByName( faceTriGroup.GetName() + "_top" )[0]
+
+# get edges of the groups
+edgeGroup = trias.CreateDimGroup([ faceTriGroup, oppositeGroup ], SMESH.EDGE, "face edges")
+
+# merge nodes of the groups only
+print("Number of nodes before MergeNodes:", end=' ') 
+trias.NbNodes()
+tolerance = 0.001
+array_of_nodes_groups = trias.FindCoincidentNodesOnPart([faceTriGroup, oppositeGroup], tolerance)
+
+trias.MergeNodes(array_of_nodes_groups)
+
+print("Number of nodes after MergeNodes:", trias.NbNodes())
+print("")
+print("Number of elements before MergeEqualElements:")
+print("Edges      : ", trias.NbEdges())
+print("Faces      : ", trias.NbFaces())
+print("Volumes    : ", trias.NbVolumes())
+
+# merge elements of the groups
+equalFaces = trias.FindEqualElements( [faceTriGroup, oppositeGroup, edgeGroup] )
+trias.MergeElements( equalFaces )
+print("Number of elements after MergeEqualElements:")
+print("Edges      : ", trias.NbEdges())
+print("Faces      : ", trias.NbFaces())
+print("Volumes    : ", trias.NbVolumes())
diff --git a/doc/examples/transforming_meshes_ex07.py b/doc/examples/transforming_meshes_ex07.py
new file mode 100644 (file)
index 0000000..e54dec1
--- /dev/null
@@ -0,0 +1,44 @@
+# Sew Meshes Border to Side
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create two faces of a box
+box1 = geom_builder.MakeBox(0., 0., -10., 30., 20., 25.)
+facesList1 = geom_builder.SubShapeAll(box1, geom_builder.ShapeType["FACE"])
+face1 = facesList1[2]
+
+box2 = geom_builder.MakeBox(0., 5., 0., 20., 20., 15.)
+facesList2 = geom_builder.SubShapeAll(box2, geom_builder.ShapeType["FACE"])
+face2 = facesList2[1]
+
+edgesList = geom_builder.SubShapeAll(face2, geom_builder.ShapeType["EDGE"])
+edge1 = edgesList[2]
+
+aComp = geom_builder.MakeCompound([face1, face2])
+geom_builder.addToStudy(aComp, "Two faces")
+
+# create a mesh on two faces
+mesh = smesh_builder.Mesh(aComp, "Two faces : quadrangle mesh")
+
+algo1D = mesh.Segment()
+algo1D.NumberOfSegments(9)
+algo2D = mesh.Quadrangle()
+
+algo_local = mesh.Segment(edge1)
+algo_local.Arithmetic1D(1, 4)
+algo_local.Propagation()
+
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# sew border to side
+# FirstNodeIDOnFreeBorder, SecondNodeIDOnFreeBorder, LastNodeIDOnFreeBorder,
+# FirstNodeIDOnSide, LastNodeIDOnSide,
+# CreatePolygons, CreatePolyedrs
+mesh.SewBorderToSide(5, 45, 6, 113, 109, 0, 0)
diff --git a/doc/examples/transforming_meshes_ex08.py b/doc/examples/transforming_meshes_ex08.py
new file mode 100644 (file)
index 0000000..50249a7
--- /dev/null
@@ -0,0 +1,42 @@
+# Sew Conform Free Borders
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create two faces of the box
+box1 = geom_builder.MakeBox(0., 0., -10., 20., 20., 15.)
+facesList1 = geom_builder.SubShapeAll(box1, geom_builder.ShapeType["FACE"])
+face1 = facesList1[2]
+
+box2 = geom_builder.MakeBox(0., 5., 0., 20., 20., 15.)
+facesList2 = geom_builder.SubShapeAll(box2, geom_builder.ShapeType["FACE"])
+face2 = facesList2[1]
+
+edgesList = geom_builder.SubShapeAll(face2, geom_builder.ShapeType["EDGE"])
+edge1 = edgesList[2]
+
+aComp = geom_builder.MakeCompound([face1, face2])
+geom_builder.addToStudy(aComp, "Two faces")
+
+# create a mesh on two faces
+mesh = smesh_builder.Mesh(aComp, "Two faces : quadrangle mesh")
+
+algo1D = mesh.Segment()
+algo1D.NumberOfSegments(9)
+algo2D = mesh.Quadrangle()
+
+algo_local = mesh.Segment(edge1)
+algo_local.Arithmetic1D(1, 4)
+algo_local.Propagation()
+
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# sew conform free borders
+# FirstNodeID1, SecondNodeID1, LastNodeID1, FirstNodeID2, SecondNodeID2
+mesh.SewConformFreeBorders(5, 45, 6, 3, 24) 
diff --git a/doc/examples/transforming_meshes_ex09.py b/doc/examples/transforming_meshes_ex09.py
new file mode 100644 (file)
index 0000000..7941b29
--- /dev/null
@@ -0,0 +1,47 @@
+# Sew Free Borders
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# make two not sewed quadranges
+OY0 = geom_builder.MakeVectorDXDYDZ(0, 1, 0)
+OY1 = geom_builder.MakeTranslation( OY0, 1, 0, 0, theName="OY1" )
+OY2 = geom_builder.MakeTranslation( OY0, 1.01, 0, 0, theName="OY2" )
+OY3 = geom_builder.MakeTranslation( OY0, 2, 0, 0 )
+q1  = geom_builder.MakeQuad2Edges( OY0, OY1 )
+q2  = geom_builder.MakeQuad2Edges( OY2, OY3 )
+
+shape = geom_builder.MakeCompound( [q1,q2], theName='shape' )
+
+# make a non-uniform quadrangle mesh on two faces
+mesh = smesh_builder.Mesh(shape, "Two faces : quadrangle mesh")
+mesh.Segment().Arithmetic1D( 0.1, 0.4 )
+mesh.Segment(q1).NumberOfSegments( 5 )
+mesh.Quadrangle()
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# sew free borders
+
+segs1 = mesh.GetSubMeshElementsId( OY1 ) # mesh segments generated on borders
+segs2 = mesh.GetSubMeshElementsId( OY2 )
+
+FirstNodeID1  = mesh.GetElemNode( segs1[0], 0 )
+SecondNodeID1 = mesh.GetElemNode( segs1[0], 1 )
+LastNodeID1   = mesh.GetElemNode( segs1[-1], 1 )
+FirstNodeID2  = mesh.GetElemNode( segs2[0], 0 )
+SecondNodeID2 = mesh.GetElemNode( segs2[0], 1 )
+LastNodeID2   = mesh.GetElemNode( segs2[-1], 1 )
+CreatePolygons = True
+CreatePolyedrs = False
+
+res = mesh.SewFreeBorders(FirstNodeID1, SecondNodeID1, LastNodeID1,
+                          FirstNodeID2, SecondNodeID2, LastNodeID2,
+                          CreatePolygons, CreatePolyedrs )
+print(res)
+print("nb polygons:", mesh.NbPolygons())
diff --git a/doc/examples/transforming_meshes_ex10.py b/doc/examples/transforming_meshes_ex10.py
new file mode 100644 (file)
index 0000000..317a61b
--- /dev/null
@@ -0,0 +1,63 @@
+# Sew Side Elements
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create two boxes
+box1 = geom_builder.MakeBox(0.,  0., 0., 10., 10., 10.)
+box2 = geom_builder.MakeBox(0., 15., 0., 20., 25., 10.)
+
+EdgesList = geom_builder.SubShapeAll(box2, geom_builder.ShapeType["EDGE"])
+
+aComp = geom_builder.MakeCompound([box1, box2])
+geom_builder.addToStudy(aComp, "Two boxes")
+
+# create a mesh on two boxes
+mesh = smesh_builder.Mesh(aComp, "Sew Side Elements")
+
+algo1D = mesh.Segment()
+algo1D.NumberOfSegments(2)
+algo2D = mesh.Quadrangle()
+
+algo_local = mesh.Segment(EdgesList[8])
+algo_local.NumberOfSegments(4)
+algo_local.Propagation()
+
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# sew side elements
+
+# find elements to sew
+face1 = geom_builder.GetFaceNearPoint( aComp, geom_builder.MakeVertex( 5, 10, 5 ))
+IDsOfSide1Elements = mesh.GetSubMeshElementsId( face1 )
+print("side faces 1:",IDsOfSide1Elements)
+
+face1Translated = geom_builder.MakeTranslation( face1, 0,5,0 )
+faceFilter = smesh_builder.GetFilter( SMESH.FACE, SMESH.FT_BelongToGeom,'=', face1Translated )
+IDsOfSide2Elements = mesh.GetIdsFromFilter( faceFilter )
+print("side faces 2:",IDsOfSide2Elements)
+
+# find corresponding nodes on sides
+edge1 = geom_builder.GetEdgeNearPoint( aComp, geom_builder.MakeVertex( 0, 10, 5 ))
+segs1 = mesh.GetSubMeshElementsId( edge1 ) # mesh segments generated on edge1
+NodeID1OfSide1ToMerge = mesh.GetElemNode( segs1[0], 0 )
+NodeID2OfSide1ToMerge = mesh.GetElemNode( segs1[0], 1 )
+print("nodes of side1:", [NodeID1OfSide1ToMerge,NodeID2OfSide1ToMerge])
+
+edge2 = geom_builder.GetEdgeNearPoint( aComp, geom_builder.MakeVertex( 0, 15, 5 ))
+segs2 = mesh.GetSubMeshElementsId( edge2 ) # mesh segments generated on edge2
+NodeID1OfSide2ToMerge = mesh.GetElemNode( segs2[0], 0 )
+NodeID2OfSide2ToMerge = mesh.GetElemNode( segs2[0], 1 )
+print("nodes of side2:", [NodeID1OfSide2ToMerge,NodeID2OfSide2ToMerge])
+
+res = mesh.SewSideElements(IDsOfSide1Elements, IDsOfSide2Elements,
+                           NodeID1OfSide1ToMerge, NodeID1OfSide2ToMerge,
+                           NodeID2OfSide1ToMerge, NodeID2OfSide2ToMerge)
+print(res)
diff --git a/doc/examples/transforming_meshes_ex11.py b/doc/examples/transforming_meshes_ex11.py
new file mode 100644 (file)
index 0000000..a08d21f
--- /dev/null
@@ -0,0 +1,89 @@
+# Duplicate nodes or/and elements
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# Create a box
+
+box = geom_builder.MakeBox(0., 0., 0., 100., 200., 300.)
+
+# Define hexa mesh on a box
+mesh = smesh_builder.Mesh(box, "Mesh")
+mesh.Segment().NumberOfSegments(7)
+mesh.Quadrangle()
+mesh.Hexahedron()
+
+# Compute mesh
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# Duplicate nodes only
+
+# Nodes to duplicate
+nodes1 = mesh.CreateEmptyGroup( SMESH.NODE, 'nodes1' )
+nodes1.Add( [ 119, 125, 131, 137 ] )
+
+# Group of faces to replace nodes with new ones 
+faces1 = mesh.CreateEmptyGroup( SMESH.FACE, 'faces1' )
+faces1.Add( [ 144, 151, 158 ] )
+
+# Duplicate nodes
+print("\nMesh before the first nodes duplication:")
+print("Nodes       : ", mesh.NbNodes())
+print("Edges       : ", mesh.NbEdges())
+print("Quadrangles : ", mesh.NbQuadrangles())
+
+groupOfCreatedNodes = mesh.DoubleNodeGroup(nodes1, faces1, theMakeGroup=True)
+print("New nodes:", groupOfCreatedNodes.GetIDs())
+
+print("\nMesh after the first nodes duplication:")
+print("Nodes       : ", mesh.NbNodes())
+print("Edges       : ", mesh.NbEdges())
+print("Quadrangles : ", mesh.NbQuadrangles())
+
+# Duplicate nodes and border elements
+
+# Edges to duplicate
+edges = mesh.CreateEmptyGroup( SMESH.EDGE, 'edges' )
+edges.Add( [ 32, 33, 34 ] )
+
+# Nodes not to duplicate
+nodes2 = mesh.CreateEmptyGroup( SMESH.NODE, 'nodes2' )
+nodes2.Add( [ 35, 38 ] )
+
+# Group of faces to replace nodes with new ones 
+faces2 = mesh.CreateEmptyGroup( SMESH.FACE, 'faces2' )
+faces2.Add( [ 141, 148, 155 ] )
+
+# Duplicate nodes
+print("\nMesh before the second nodes duplication:")
+print("Nodes       : ", mesh.NbNodes())
+print("Edges       : ", mesh.NbEdges())
+print("Quadrangles : ", mesh.NbQuadrangles())
+
+groupOfNewEdges = mesh.DoubleNodeElemGroup( edges, nodes2, faces2, theMakeGroup=True )
+print("New edges:", groupOfNewEdges.GetIDs())
+
+print("\nMesh after the second nodes duplication:")
+print("Nodes       : ", mesh.NbNodes())
+print("Edges       : ", mesh.NbEdges())
+print("Quadrangles : ", mesh.NbQuadrangles())
+
+
+# Duplicate elements only
+
+# Duplicate all faces and make a group of new faces.
+# If a mesh is given to DoubleElements(), all elements of the greatest dimension are duplicated
+newFacesGroup = mesh.DoubleElements( mesh, "newFacesGroup" )
+
+# Duplicate edges contained in the group "edges" and add new edges to this group
+mesh.DoubleElements( edges, edges.GetName() )
+
+# Duplicate two first edges of the mesh
+mesh.DoubleElements([ 1, 2 ])
diff --git a/doc/examples/transforming_meshes_ex12.py b/doc/examples/transforming_meshes_ex12.py
new file mode 100644 (file)
index 0000000..edf9120
--- /dev/null
@@ -0,0 +1,112 @@
+# Create boundary elements
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+box = geom_builder.MakeBoxDXDYDZ(100, 100, 100)
+gFaces = geom_builder.SubShapeAllSorted(box, geom_builder.ShapeType["FACE"])
+f1,f2 = gFaces[0],gFaces[1]
+geom_builder.addToStudy(box,"box")
+geom_builder.addToStudyInFather(box,f1,"face1")
+geom_builder.addToStudyInFather(box,f2,"face2")
+
+twoFaces = geom_builder.MakeCompound([f1,f2])
+
+## -----------
+##
+## 2D from 3D
+##
+## -----------
+dim = SMESH.BND_2DFROM3D
+
+init_mesh = smesh_builder.Mesh(box, "box")
+init_mesh.AutomaticHexahedralization() # it makes 3 x 3 x 3 hexahedrons
+
+# remove some faces
+faces = init_mesh.GetElementsByType( SMESH.FACE )
+nb_faces = len( faces )
+rm_face = faces[ : nb_faces // 2]
+init_mesh.RemoveElements( rm_face )
+
+# restore boundary in this mesh
+mesh = smesh_builder.CopyMesh( init_mesh, "2D from 3D")
+groupName = "bnd 2D"
+nb, new_mesh, new_group = mesh.MakeBoundaryElements(dim, groupName)
+
+# restore boundary (only) in other mesh
+meshName = "2D boundary of " + init_mesh.GetName()
+nb, new_mesh, new_group = init_mesh.MakeBoundaryElements(dim, groupName, meshName)
+
+# restore boundary in mesh copy
+meshName = init_mesh.GetName() + " + boundary"
+nb, new_mesh, new_group = init_mesh.MakeBoundaryElements(dim, groupName, meshName, toCopyAll=True)
+
+## -----------
+##
+## 1D from 2D
+##
+## -----------
+dim = SMESH.BND_1DFROM2D
+
+init_mesh = smesh_builder.Mesh(f1, "2D mesh")
+init_mesh.AutomaticHexahedralization()
+
+# remove some edges
+edges = init_mesh.GetElementsByType( SMESH.EDGE )
+nb_edges = len( edges )
+rm_edge = edges[ : nb_edges // 2]
+init_mesh.RemoveElements( rm_edge )
+
+
+# restore boundary edges in this mesh
+mesh = smesh_builder.CopyMesh( init_mesh, "1D from 2D")
+groupName = "bnd 1D"
+nb, new_mesh, new_group = mesh.MakeBoundaryElements(dim, groupName)
+
+# restore boundary edges (only) in other mesh
+meshName = "1D boundary of " + init_mesh.GetName()
+nb, new_mesh, new_group = init_mesh.MakeBoundaryElements(dim, groupName, meshName)
+
+# restore boundary edges in mesh copy
+meshName = init_mesh.GetName() + " + boundary"
+nb, new_mesh, new_group = init_mesh.MakeBoundaryElements(dim, groupName, meshName, toCopyAll=True)
+
+## ------------------
+##
+## 1D from 2D GROUPS
+##
+## ------------------
+dim = SMESH.BND_1DFROM3D
+
+init_mesh = smesh_builder.Mesh(box, "box")
+init_mesh.AutomaticHexahedralization() # it makes 3 x 3 x 3 hexahedrons
+# remove all edges
+rm_edges = init_mesh.GetElementsByType( SMESH.EDGE )
+init_mesh.RemoveElements( rm_edges )
+
+# make groups of faces
+fGroup1 = init_mesh.Group( f1, "f1" )
+fGroup2 = init_mesh.Group( f2, "f2" )
+
+# make 1D boundary around groups in this mesh
+mesh = smesh_builder.CopyMesh( init_mesh, "1D from 2D groups", toCopyGroups=True)
+groups = mesh.GetGroups()
+nb, new_mesh, new_group = mesh.MakeBoundaryElements(dim, groupName,groups=groups)
+
+# make 1D boundary (only) in other mesh
+meshName =  "boundary from groups of " + init_mesh.GetName()
+groups = init_mesh.GetGroups()
+nb, new_mesh, new_group = init_mesh.MakeBoundaryElements(dim, groupName, meshName,groups=groups)
+
+# make 1D boundary in mesh copy
+meshName = init_mesh.GetName() + " + boundary from groups"
+nb, new_mesh, new_group = init_mesh.MakeBoundaryElements(dim, groupName, meshName,
+                                                         groups=groups, toCopyAll=True)
+
diff --git a/doc/examples/transforming_meshes_ex13.py b/doc/examples/transforming_meshes_ex13.py
new file mode 100644 (file)
index 0000000..8ee0260
--- /dev/null
@@ -0,0 +1,84 @@
+# Reorient faces
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a geometry consisting of two faces
+box = geom_builder.MakeBoxDXDYDZ( 10, 10, 10 )
+faces = geom_builder.SubShapeAllSorted( box, geom_builder.ShapeType["FACE"])
+
+shape = geom_builder.MakeCompound( faces[:2] )
+faces = geom_builder.SubShapeAll( shape, geom_builder.ShapeType["FACE"] )
+geom_builder.addToStudy( shape, "shape")
+geom_builder.addToStudyInFather( shape, faces[0], "faces[0]")
+geom_builder.addToStudyInFather( shape, faces[1], "faces[1]")
+
+# create a 2D mesh
+mesh = smesh_builder.Mesh( shape, "test_Reorient2D")
+mesh.AutomaticHexahedralization(0.5)
+localAlgo = mesh.Segment(faces[0])
+localAlgo.NumberOfSegments( 11 )
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+group = mesh.Group( faces[1] )
+
+vec = geom_builder.MakeVectorDXDYDZ( 1, 1, 1 )
+
+# ============
+# Reorient2D()
+# ============
+
+# Each of arguments of Reorient2D() function can be of different types:
+#
+# 2DObject    - the whole mesh
+# Direction   - a GEOM object (vector)
+# FaceOrPoint - an ID of face
+mesh.Reorient2D( mesh, vec, mesh.NbElements() )
+#
+# 2DObject    - a sub-mesh
+# Direction   - components of a vector
+# FaceOrPoint - a GEOM object (vertex)
+mesh.Reorient2D( localAlgo.GetSubMesh(), [ 1, -1, 1 ], geom_builder.GetFirstVertex( vec ))
+#
+# 2DObject    - a group of faces
+# Direction   - a SMESH.DirStruct structure
+# FaceOrPoint - coordinates of a point
+mesh.Reorient2D( group, smesh_builder.MakeDirStruct( -10, 1, 10 ), [0,0,0])
+#
+# FaceOrPoint - a SMESH.PointStruct structure
+mesh.Reorient2D( localAlgo.GetSubMesh().GetIDs(), [10,1,0], SMESH.PointStruct(0,0,0))
+
+# ========================
+# Reorient2DByNeighbours()
+# ========================
+
+# Use faces of 'group' as a reference to reorient equally all faces
+mesh.Reorient2DByNeighbours([mesh], [group])
+
+# Orient equally face on 'group', but not define which orientation is correct
+mesh.Reorient2DByNeighbours([group])
+
+# =================
+# Reorient2DBy3D()
+# =================
+
+# Use Reorient2DBy3D() to orient faces of 2 geom faces to have their normal pointing inside volumes
+
+mesh3D = smesh_builder.Mesh( box, '3D mesh')
+mesh3D.AutomaticHexahedralization(0.5)
+group0 = mesh3D.Group( faces[0] )
+group1 = mesh3D.Group( faces[1] )
+
+# pass group0 and ids of faces of group1 to inverse
+nbRev = mesh3D.Reorient2DBy3D([ group0, group1.GetIDs() ], mesh3D, theOutsideNormal=False)
+print("Nb reoriented faces:", nbRev)
+
+# orient the reversed faces back
+nbRev = mesh3D.Reorient2DBy3D( mesh3D, mesh3D, theOutsideNormal=True)
+print("Nb re-reoriented faces:", nbRev)
diff --git a/doc/examples/transforming_meshes_ex14.py b/doc/examples/transforming_meshes_ex14.py
new file mode 100644 (file)
index 0000000..38010b2
--- /dev/null
@@ -0,0 +1,47 @@
+# Create 2D mesh from 3D elements
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+box = geom_builder.MakeBoxDXDYDZ(100, 100, 100)
+
+gFaces = geom_builder.SubShapeAllSorted(box, geom_builder.ShapeType["FACE"])
+f1,f2 = gFaces[0],gFaces[1]
+geom_builder.addToStudy(box,"box")
+geom_builder.addToStudyInFather(box,f1,"face1")
+geom_builder.addToStudyInFather(box,f2,"face2")
+
+twoFaces = geom_builder.MakeCompound([f1,f2])
+
+## -----------
+##
+## Create 2D from 3D elements
+##
+## -----------
+
+init_mesh = smesh_builder.Mesh(box, "box")
+init_mesh.AutomaticHexahedralization() # it makes 3 x 3 x 3 hexahedrons
+init_mesh.Compute()
+
+mesh_1 = smesh_builder.CopyMesh(init_mesh, "Mesh_1")
+#Return the number of created faces in the original mesh.
+nb, new_mesh, new_group = mesh_1.MakeBoundaryOfEachElement()
+
+if nb != 54: raise Exception("Error on MakeBoundaryOfEachElement call. The number of created elements does not match.")
+if new_mesh.GetId() != mesh_1.GetId(): raise Exception("The mesh created from MakeBoundaryElements should be the same of the call")
+if new_group: raise Exception("The group created from MakeBoundaryElements should be undefined")
+
+mesh_2 = smesh_builder.CopyMesh(init_mesh, "Mesh_2")
+
+#Return the number of created faces and a new_mesh and new_group 
+nb, new_mesh, new_group = mesh_2.MakeBoundaryOfEachElement("MyFacesElements", "Face_Mesh")
+if nb != 54: raise Exception("Error on MakeBoundaryOfEachElement call. The number of created elements does not match.")
+if new_mesh.GetId() == mesh_2.GetId(): raise Exception("The mesh created from MakeBoundaryElements should be the different of the call")
+if not new_group: raise Exception("The group created from MakeBoundaryElements should be defined")
diff --git a/doc/examples/transforming_meshes_ex15.py b/doc/examples/transforming_meshes_ex15.py
new file mode 100644 (file)
index 0000000..42dfa64
--- /dev/null
@@ -0,0 +1,40 @@
+# Offset 2D mesh, sub-mesh, group or elements from filter.
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+box = geom_builder.MakeBoxDXDYDZ(100, 100, 100)
+
+## -----------
+##
+## Offset mesh
+##
+## -----------
+
+init_mesh = smesh_builder.Mesh(box, "box")
+init_mesh.AutomaticTetrahedralization()
+init_mesh.Compute()
+
+#Offset triangular elements in mesh (expand the entire mesh)
+offset = 20
+mesh, mesh_group = init_mesh.Offset( init_mesh, offset, MakeGroups=False, CopyElements=False )
+assert isinstance( mesh, smeshBuilder.Mesh )
+assert len( mesh_group ) == 0
+offsetMeshArea = smesh_builder.GetArea(mesh)
+
+#Offset triangular elements in mesh (shrink the entire mesh)
+offset = -20
+mesh, mesh_group = init_mesh.Offset( init_mesh, offset, MakeGroups=False, CopyElements=False, NewMeshName="MeshShrink" )
+assert isinstance( mesh, smeshBuilder.Mesh )
+assert len( mesh_group ) == 0
+assert mesh.GetName() == "MeshShrink"
+shrinkMeshArea = smesh_builder.GetArea(mesh)
+
+assert offsetMeshArea > shrinkMeshArea
\ No newline at end of file
diff --git a/doc/examples/use_existing_faces.py b/doc/examples/use_existing_faces.py
new file mode 100644 (file)
index 0000000..ef13199
--- /dev/null
@@ -0,0 +1,116 @@
+# Usage of "Use Faces to be Created Manually" algorithm
+
+import salome
+salome.salome_init_without_session()
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# define my 2D algorithm
+def my2DMeshing(geomFace, mesh):
+    import numpy as np
+
+    # find gravity center of geomFace
+    gcXYZ = geom_builder.PointCoordinates( geom_builder.MakeCDG( geomFace ))
+
+    # define order and orientation of edges
+    sortedEdges = []
+    geomEdges = geom_builder.SubShapeAll( geomFace, geom_builder.ShapeType["EDGE"])
+    sortedEdges.append(( geomEdges.pop(0), True ))
+    while geomEdges:
+        prevEdge_rev = sortedEdges[ -1 ]
+        prevVV = geom_builder.SubShapeAll( prevEdge_rev[0], geom_builder.ShapeType["VERTEX"])
+        prevV2 = prevVV[ prevEdge_rev[1] ]
+        found = False
+        for iE in range( len( geomEdges )):
+            v1,v2 = geom_builder.SubShapeAll( geomEdges[ iE ], geom_builder.ShapeType["VERTEX"])
+            same1,same2 = [( geom_builder.MinDistance( prevV2, v ) < 1e-7 ) for v in [v1,v2] ]
+            if not same1 and not same2: continue
+            sortedEdges.append(( geomEdges.pop( iE ), same1 ))
+            found = True
+            break
+        assert found
+    sortedEdges.reverse()
+
+    # put nodes on edges in a right order
+    nodes = []
+    for edge, isForward in sortedEdges:
+        v1,v2 = geom_builder.SubShapeAll( edge, geom_builder.ShapeType["VERTEX"])
+        edgeNodes = mesh.GetSubMeshNodesId( v2,   all=False ) + \
+                    mesh.GetSubMeshNodesId( edge, all=False ) + \
+                    mesh.GetSubMeshNodesId( v1,   all=False )
+        if not isForward: edgeNodes.reverse()
+        nodes.extend( edgeNodes[:-1] )
+
+    # create nodes inside the geomFace
+    r1 = 0.6
+    r2 = 1 - r1
+    nodesInside = []
+    for n in nodes:
+        nXYZ = mesh.GetNodeXYZ( n )
+        newXYZ = np.add( np.multiply( r1, gcXYZ ), np.multiply( r2, nXYZ ))
+        nodesInside.append( mesh.AddNode( newXYZ[0], newXYZ[1], newXYZ[2] ))
+        mesh.SetNodeOnFace( nodesInside[-1], geomFace, 0, 0 )
+
+    # find out orientation of faces to create
+    #    geomFace normal
+    faceNorm = geom_builder.GetNormal( geomFace )
+    v1,v2 = [ geom_builder.PointCoordinates( v ) \
+              for v in geom_builder.SubShapeAll( faceNorm, geom_builder.ShapeType["VERTEX"]) ]
+    faceNormXYZ = np.subtract( v2, v1 )
+    outDirXYZ   = np.subtract( v1, [ 50, 50, 50 ] )
+    if np.dot( faceNormXYZ, outDirXYZ ) < 0: # reversed face
+        faceNormXYZ = np.multiply( -1., faceNormXYZ )
+    #   mesh face normal
+    e1 = np.subtract( mesh.GetNodeXYZ( nodes[0] ), mesh.GetNodeXYZ( nodes[1] ))
+    e2 = np.subtract( mesh.GetNodeXYZ( nodes[0] ), mesh.GetNodeXYZ( nodesInside[0] ))
+    meshNorm = np.cross( e1, e2 )
+    #   faces orientation
+    reverse = ( np.dot( faceNormXYZ, meshNorm ) < 0 )
+
+    # create mesh faces
+    iN = len( nodes )
+    while iN:
+        n1, n2, n3, n4 = nodes[iN-1], nodes[iN-2], nodesInside[iN-2], nodesInside[iN-1]
+        iN -= 1
+        if reverse:
+            f = mesh.AddFace( [n1, n2, n3, n4] )
+        else:
+            f = mesh.AddFace( [n4, n3, n2, n1] )
+        # new faces must be assigned to geometry to allow 3D algorithm finding them
+        mesh.SetMeshElementOnShape( f, geomFace )
+
+    if reverse:
+        nodesInside.reverse()
+    polygon = mesh.AddPolygonalFace( nodesInside )
+    mesh.SetMeshElementOnShape( polygon, geomFace )
+
+    return
+
+# create geometry and get faces to mesh with my2DMeshing()
+box = geom_builder.MakeBoxDXDYDZ( 100, 100, 100 )
+f1 = geom_builder.SubShapeAll( box, geom_builder.ShapeType["FACE"])[0]
+f2 = geom_builder.GetOppositeFace( box, f1 )
+geom_builder.addToStudy( box, "box" )
+geom_builder.addToStudy( f1, "f1" )
+geom_builder.addToStudy( f2, "f2" )
+
+# compute 1D mesh
+mesh = smesh_builder.Mesh( box )
+mesh.Segment().NumberOfSegments( 5 )
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# compute 2D mesh
+mesh.Quadrangle()
+mesh.UseExistingFaces(f1) # UseExistingFaces() allows using my2DMeshing();
+mesh.UseExistingFaces(f2) # assign UseExistingFaces() BEFORE calling my2DMeshing()!
+my2DMeshing(f1, mesh)
+my2DMeshing(f2, mesh)
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# compute 3D mesh
+mesh.Prism()
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
diff --git a/doc/examples/viewing_meshes_ex01.py b/doc/examples/viewing_meshes_ex01.py
new file mode 100644 (file)
index 0000000..ded69ba
--- /dev/null
@@ -0,0 +1,82 @@
+# Viewing Mesh Infos
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# create a box
+box = geom_builder.MakeBox(0., 0., 0., 20., 20., 20.)
+geom_builder.addToStudy(box, "box")
+[Face_1,Face_2,Face_3,Face_4,Face_5,Face_5] = geom_builder.SubShapeAll(box, geom_builder.ShapeType["FACE"])
+
+# create a mesh
+tetra = smesh_builder.Mesh(box, "MeshBox")
+
+algo1D = tetra.Segment()
+algo1D.NumberOfSegments(3)
+
+algo2D = tetra.Triangle()
+algo2D.MaxElementArea(10.)
+
+algo3D = tetra.Tetrahedron()
+algo3D.MaxElementVolume(900.)
+
+# Creation of SubMesh
+Regular_1D_1_1 = tetra.Segment(geom=Face_1)
+Nb_Segments_1 = Regular_1D_1_1.NumberOfSegments(5)
+Nb_Segments_1.SetDistrType( 0 )
+Quadrangle_2D = tetra.Quadrangle(geom=Face_1)
+if not tetra.Compute(): raise Exception("Error when computing Mesh")
+submesh = Regular_1D_1_1.GetSubMesh()
+
+# compute the mesh
+if not tetra.Compute(): raise Exception("Error when computing Mesh")
+
+# Creation of group
+group = tetra.CreateEmptyGroup( SMESH.FACE, 'Group' )
+nbAdd = group.Add( [ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76 ] )
+
+# Print information about the mesh
+print("Information about mesh:") 
+print("Number of nodes       : ", tetra.NbNodes())
+print("Number of edges       : ", tetra.NbEdges())
+print("Number of faces       : ", tetra.NbFaces())
+print("          triangles   : ", tetra.NbTriangles())
+print("          quadrangles : ", tetra.NbQuadrangles())
+print("          polygons    : ", tetra.NbPolygons())
+print("Number of volumes     : ", tetra.NbVolumes())
+print("          tetrahedrons: ", tetra.NbTetras())
+print("          hexahedrons : ", tetra.NbHexas())
+print("          prisms      : ", tetra.NbPrisms())
+print("          pyramids    : ", tetra.NbPyramids())
+print("          polyhedrons : ", tetra.NbPolyhedrons()) 
+
+# Get Information About Mesh by GetMeshInfo
+print("\nInformation about mesh by GetMeshInfo:")
+info = smesh_builder.GetMeshInfo(tetra)
+keys = list(info.keys()); keys.sort()
+for i in keys:
+  print("  %s   :  %d" % ( i, info[i] ))
+  pass
+
+# Get Information About Group by GetMeshInfo
+print("\nInformation about group by GetMeshInfo:")
+info = smesh_builder.GetMeshInfo(group)
+keys = list(info.keys()); keys.sort()
+for i in keys:
+  print("  %s  :  %d" % ( i, info[i] ))
+  pass
+
+# Get Information About SubMesh by GetMeshInfo
+print("\nInformation about Submesh by GetMeshInfo:")
+info = smesh_builder.GetMeshInfo(submesh)
+keys = list(info.keys()); keys.sort()
+for i in keys:
+  print("  %s  :  %d" % ( i, info[i] ))
+  pass
diff --git a/doc/examples/viewing_meshes_ex02.py b/doc/examples/viewing_meshes_ex02.py
new file mode 100644 (file)
index 0000000..ddaba32
--- /dev/null
@@ -0,0 +1,51 @@
+# Find Element by Point
+
+import salome
+salome.salome_init_without_session()
+
+import SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+geom_builder = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+# Create a geometry to mesh
+box = geom_builder.MakeBoxDXDYDZ(100,100,100)
+
+# Create a mesh
+mesh = smesh_builder.Mesh(box,"Mesh")
+mesh.AutomaticHexahedralization()
+if not mesh.Compute(): raise Exception("Error when computing Mesh")
+
+# Create a point
+x,y,z = 0, 0, 1
+
+# Find all elements (except 0D ones) located at the point
+all_elems_except_0D = mesh.FindElementsByPoint(x,y,z)
+assert( len(all_elems_except_0D) == 4)
+
+# Find nodes at the point
+nodes = mesh.FindElementsByPoint(x,y,z, SMESH.NODE )
+assert( len(nodes) == 0)
+assert( len( mesh.FindElementsByPoint(x,y,0, SMESH.NODE)) == 1)
+
+# Find an edge at the point
+edges = mesh.FindElementsByPoint(x,y,z, SMESH.EDGE )
+assert( len(edges) == 1)
+
+# Find faces at the point
+edges = mesh.FindElementsByPoint(x,y,z, SMESH.FACE )
+assert( len(edges) == 2)
+
+# Find a volume at the point
+vols = mesh.FindElementsByPoint(x,y,z, SMESH.VOLUME )
+assert( len(vols) == 1)
+
+# Find 0D elements at the point
+elems0d = mesh.FindElementsByPoint(x,y,z, SMESH.ELEM0D )
+assert( len(elems0d) == 0)
+
+# Find edges within a group
+group1D = mesh.MakeGroupByIds("1D", SMESH.EDGE, [1,2] )
+edges = mesh.FindElementsByPoint(x,y,z, SMESH.EDGE, group1D )
diff --git a/doc/examples/viewing_meshes_ex03.py b/doc/examples/viewing_meshes_ex03.py
new file mode 100644 (file)
index 0000000..a46ecc4
--- /dev/null
@@ -0,0 +1,306 @@
+#!/usr/bin/env python
+
+###
+### This file shows how to get the information that are displayed when using Mesh Information for elements/nodes
+###
+
+import sys
+import salome
+
+salome.salome_init()
+import salome_notebook
+notebook = salome_notebook.NoteBook()
+sys.path.insert(0, r'/local00/home/B61570/work_in_progress/mesh_info')
+
+###
+### GEOM component
+###
+
+import GEOM
+from salome.geom import geomBuilder
+import math
+import SALOMEDS
+
+
+geompy = geomBuilder.New()
+
+Box_1 = geompy.MakeBoxDXDYDZ(200, 200, 200)
+geompy.addToStudy( Box_1, 'Box_1' )
+bottom = geompy.CreateGroup(Box_1, geompy.ShapeType["FACE"])
+geompy.UnionIDs(bottom, [31])
+
+###
+### SMESH component
+###
+
+import  SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+
+smesh = smeshBuilder.New()
+
+
+## Tetra
+NETGEN_3D_Parameters_1 = smesh.CreateHypothesisByAverageLength( 'NETGEN_Parameters', 'NETGENEngine', 25, 0 )
+Mesh_tetra = smesh.Mesh(Box_1,'Mesh_tetra')
+status = Mesh_tetra.AddHypothesis( Box_1, NETGEN_3D_Parameters_1 )
+NETGEN_1D_2D_3D = Mesh_tetra.Tetrahedron(algo=smeshBuilder.NETGEN_1D2D3D)
+isDone = Mesh_tetra.Compute()
+if not isDone:
+    raise ("Could not compute mesh: "+Mesh_tetra.GetName())
+
+## Tetra
+Mesh_quadratic = smesh.Mesh(Box_1,'Mesh_quadratic')
+NETGEN_1D_2D_3D_1 = Mesh_quadratic.Tetrahedron(algo=smeshBuilder.NETGEN_1D2D3D)
+NETGEN_3D_Parameters_2 = NETGEN_1D_2D_3D_1.Parameters()
+NETGEN_3D_Parameters_2.SetMaxSize( 34.641 )
+NETGEN_3D_Parameters_2.SetMinSize( 0.34641 )
+NETGEN_3D_Parameters_2.SetSecondOrder( 1 )
+isDone = Mesh_quadratic.Compute()
+if not isDone:
+    raise ("Could not compute mesh: "+Mesh_quadratic.GetName())
+
+
+# Hexa mesh
+Mesh_hexa = smesh.Mesh(Box_1,'Mesh_hexa')
+Regular_1D = Mesh_hexa.Segment()
+Number_of_Segments_1 = Regular_1D.NumberOfSegments(15)
+Quadrangle_2D = Mesh_hexa.Quadrangle(algo=smeshBuilder.QUADRANGLE)
+Hexa_3D = Mesh_hexa.Hexahedron(algo=smeshBuilder.Hexa)
+isDone = Mesh_hexa.Compute()
+if not isDone:
+    raise ("Could not compute mesh: "+Mesh_hexa.GetName())
+
+# Poly Mesh
+Mesh_poly = smesh.CreateDualMesh(Mesh_tetra, 'dual_Mesh_1', True)
+
+# Prism mesh
+
+Mesh_prism = smesh.Mesh(Box_1,'Mesh_prism')
+Regular_1D_1 = Mesh_prism.Segment()
+Number_of_Segments_2 = Regular_1D_1.NumberOfSegments(15)
+NETGEN_1D_2D = Mesh_prism.Triangle(algo=smeshBuilder.NETGEN_1D2D,geom=bottom)
+NETGEN_2D_Parameters_1 = NETGEN_1D_2D.Parameters()
+NETGEN_2D_Parameters_1.SetMaxSize(35)
+NETGEN_2D_Parameters_1.SetMinSize(0.3)
+Prism_3D = Mesh_prism.Prism()
+isDone = Mesh_prism.Compute()
+if not isDone:
+    raise ("Could not compute mesh: "+Mesh_prism.GetName())
+
+# Pyramid mesh
+Mesh_pyramids = smesh.Mesh(Box_1,'Mesh_pyramids')
+Regular_1D_2 = Mesh_pyramids.Segment()
+Number_of_Segments_3 = Regular_1D_2.NumberOfSegments(15)
+Quadrangle_2D_1 = Mesh_pyramids.Quadrangle(algo=smeshBuilder.QUADRANGLE)
+NETGEN_3D = Mesh_pyramids.Tetrahedron()
+bottom_1 = Mesh_pyramids.GroupOnGeom(bottom,'bottom',SMESH.FACE)
+isDone = Mesh_pyramids.Compute()
+if not isDone:
+    raise ("Could not compute mesh: "+Mesh_pyramids.GetName())
+
+
+## Set names of Mesh objects
+smesh.SetName(NETGEN_1D_2D_3D.GetAlgorithm(), 'NETGEN 1D-2D-3D')
+smesh.SetName(NETGEN_3D_Parameters_1, 'NETGEN 3D Parameters_1')
+smesh.SetName(Mesh_tetra.GetMesh(), 'Mesh_tetra')
+smesh.SetName(Mesh_hexa.GetMesh(), 'Mesh_hexa')
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser()
+
+# Look in SMESH_GUI/SMESHGUI_MeshInfo.cxx +1666 for list of what is
+
+def face_info(mesh, elem_id):
+    """
+    Print equivalent of Mesh Information for a face
+    """
+    elem_type = mesh.GetElementGeomType(elem_id)
+
+    conn = mesh.GetElemNodes(elem_id)
+
+    nb_nodes = len(conn)
+
+    position = mesh.GetElementPosition(elem_id)
+    pos = f"{position.shapeType} #{position.shapeID}"
+
+    grav_center = mesh.BaryCenter(elem_id)
+
+    normal = mesh.GetFaceNormal(elem_id, normalized=True)
+
+    aspect_ratio = mesh.GetAspectRatio(elem_id)
+    #aspect_ratio = mesh.FunctorValue(SMESH.FT_AspectRatio, elem_id, isElem=True)
+
+    warping = mesh.GetWarping(elem_id)
+    #warping = mesh.FunctorValue(SMESH.FT_Warping, elem_id, isElem=True)
+
+    min_angle = mesh.GetMinimumAngle(elem_id)
+    #min_angle = mesh.FunctorValue(SMESH.FT_MinimumAngle, elem_id, isElem=True)
+
+    taper = mesh.GetTaper(elem_id)
+    #taper = mesh.FunctorValue(SMESH.FT_Taper, elem_id, isElem=True)
+
+    skew = mesh.GetSkew(elem_id)
+    #skew = mesh.FunctorValue(SMESH.FT_Skew, elem_id, isElem=True)
+
+    area = mesh.GetArea(elem_id)
+    #area = mesh.FunctorValue(SMESH.FT_Area, elem_id, isElem=True)
+
+    diameter = mesh.GetMaxElementLength(elem_id)
+    #diameter = mesh.FunctorValue(SMESH.FT_MaxElementLength2D, elem_id, isElem=True)
+
+    min_length = mesh.FunctorValue(SMESH.FT_Length2D, elem_id, isElem=True)
+
+    string = f"""
+Id: {elem_id}
+Type: {elem_type}
+Nb Nodes: {nb_nodes}
+Connectivity: {conn}
+Position: {pos}
+Gravity center:
+ - X: {grav_center[0]}
+ - Y: {grav_center[1]}
+ - Z: {grav_center[2]}
+Normal:
+ - X: {normal[0]}
+ - Y: {normal[1]}
+ - Z: {normal[2]}
+Quality:
+ - Aspect Ratio: {aspect_ratio}
+ - Warping: {warping}
+ - Minimum Angle: {min_angle}
+ - Taper: {taper}
+ - Skew: {skew}
+ - Area: {area}
+ - Element Diameter 2D: {diameter}
+ - Minimum Edge Length: {min_length}
+"""
+    print(string)
+
+def volume_info(mesh, elem_id):
+    """
+    Print equivalent of Mesh Information for a volume
+    """
+    elem_type = mesh.GetElementGeomType(elem_id)
+
+    if elem_type in [SMESH.Entity_Polyhedra, SMESH.Entity_Quad_Polyhedra]:
+        iface = 1
+        face_conn = [12]
+        conn = []
+        while face_conn != []:
+            face_conn = mesh.GetElemFaceNodes(elem_id, iface)
+            iface += 1
+            conn.append(face_conn)
+            nb_nodes = len(mesh.GetElemNodes(elem_id))
+    else:
+        conn = mesh.GetElemNodes(elem_id)
+        nb_nodes = len(conn)
+
+
+    position = mesh.GetElementPosition(elem_id)
+    pos = f"{position.shapeType} #{position.shapeID}"
+
+    grav_center = mesh.BaryCenter(elem_id)
+
+    aspect_ratio = mesh.GetAspectRatio(elem_id)
+    #aspect_ratio = mesh.FunctorValue(SMESH.FT_AspectRatio3D, elem_id, isElem=True)
+
+    volume = mesh.GetVolume(elem_id)
+    #volume = mesh.FunctorValue(SMESH.FT_Volume3D, elem_id, isElem=True)
+
+    jacob = mesh.GetScaledJacobian(elem_id)
+    #jacob = mesh.FunctorValue(SMESH.FT_ScaledJacobian, elem_id, isElem=True)
+
+    diameter = mesh.GetMaxElementLength(elem_id)
+    #diameter = mesh.FunctorValue(SMESH.FT_MaxElementLength3D, elem_id, isElem=True)
+
+    min_length = mesh.FunctorValue(SMESH.FT_Length3D, elem_id, isElem=True)
+
+    string = f"""
+Id: {elem_id}
+Type: {elem_type}
+Nb Nodes: {nb_nodes}
+Connectivity: {conn}
+Position: {pos}
+Gravity center:
+ - X: {grav_center[0]}
+ - Y: {grav_center[1]}
+ - Z: {grav_center[2]}
+Quality:
+ - Aspect Ratio 3D: {aspect_ratio}
+ - Volume: {volume}
+ - Scaled Jacobian: {jacob}
+ - Element Diameter 3D: {diameter}
+ - Minimum Edge Length: {min_length}
+"""
+    print(string)
+
+def node_info(mesh, node_id):
+
+    coord = mesh.GetNodeXYZ(node_id)
+
+    conn_edge = mesh.GetNodeInverseElements(node_id, SMESH.EDGE)
+    conn_face = mesh.GetNodeInverseElements(node_id, SMESH.FACE)
+    conn_vol = mesh.GetNodeInverseElements(node_id, SMESH.VOLUME)
+
+    position = mesh.GetNodePosition(node_id)
+    pos = f"{position.shapeType} #{position.shapeID}"
+
+    vec = [None, None]
+    vec[0:len(position.params)] = position.params
+
+    string = f"""
+Id: {node_id}
+Coordinates:
+- X: {coord[0]}
+- Y: {coord[1]}
+- Z: {coord[2]}
+Connectivity
+- Edges: {conn_edge}
+- Faces: {conn_face}
+- Volumes: {conn_vol}
+Position: {pos}
+- U: {vec[0]}
+- V: {vec[1]}
+"""
+    print(string)
+
+###
+# Volume
+##
+
+# Tetrahedron
+volume_info(Mesh_tetra, 3000)
+# Hexahedron
+volume_info(Mesh_hexa, 3000)
+# Polyhedron
+volume_info(Mesh_poly, 3000)
+# Prism
+volume_info(Mesh_prism, 1400)
+# Pyramids
+volume_info(Mesh_pyramids, 8176)
+# Quadratic tetra
+volume_info(Mesh_quadratic, 1180)
+
+###
+# Face
+##
+
+## Triangle
+face_info(Mesh_tetra, 147)
+#Quadrangle
+face_info(Mesh_hexa, 1464)
+# Polygon
+face_info(Mesh_poly, 771)
+# Quadratic triangle
+face_info(Mesh_quadratic, 138)
+
+
+###
+# Node
+###
+# U & V
+node_info(Mesh_tetra, 152)
+# U
+node_info(Mesh_tetra, 32)
+# None
+node_info(Mesh_tetra, 2)
diff --git a/doc/gui/CMakeLists.txt b/doc/gui/CMakeLists.txt
new file mode 100644 (file)
index 0000000..687ee92
--- /dev/null
@@ -0,0 +1,89 @@
+# Copyright (C) 2012-2024  CEA, EDF, 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(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(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)
+
+SET(ADD_VAR)
+LIST(APPEND ADD_VAR SMESH_MeshersList=StdMeshers)
+LIST(APPEND ADD_VAR PYTHONPATH=${CMAKE_CURRENT_BINARY_DIR}/tmp1)
+LIST(APPEND ADD_VAR PYTHONPATH=${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 ADDITIONAL_ENVIRONMENT ${ADD_VAR})
+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 ADDITIONAL_ENVIRONMENT ${ADD_VAR})
+ENDIF()
+
+# 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}" CONTEXT "SMESH_DOC" ADDITIONAL_VARIABLES ${ADD_VAR})
+
+# 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}" CONTEXT "SMESH_DOC" ADDITIONAL_VARIABLES ${ADD_VAR})
+
+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
+
+  # 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)
+IF(SALOME_SMESH_BUILD_FRENCH_DOC)
+  INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/SMESH_fr DESTINATION ${SALOME_INSTALL_DOC}/gui)
+ENDIF()
+
+SET(make_clean_files tmp1 tmp2)
+SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${make_clean_files}")
diff --git a/doc/gui/collect_mesh_methods.py b/doc/gui/collect_mesh_methods.py
new file mode 100755 (executable)
index 0000000..e13aa0c
--- /dev/null
@@ -0,0 +1,199 @@
+#!/usr/bin/env python3
+# Copyright (C) 2012-2024  CEA, EDF, 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:   collect_mesh_methods.py
+# Author: Vadim SANDLER, Open CASCADE S.A.S (vadim.sandler@opencascade.com)
+#
+#################################################################################
+#
+# Extraction of the meshing algorithm classes
+# dynamically added by the plug-in to the Mesh
+# class.
+# 
+# This script is intended for internal usage - only
+# for generation of the extra developer documentation for
+# the meshing plug-in(s).
+# 
+# Usage:
+#       collect_mesh_methods.py <plugin_name>
+# where
+#   <plugin_name> is a name of the plug-in module
+#
+# Notes:
+# - the script is supposed to be run in correct environment
+# i.e. PYTHONPATH, SMESH_MeshersList and other important
+# variables are set properly; otherwise the script will fail.
+#
+################################################################################
+
+import inspect
+import sys
+
+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:
+        exec("from salome.smesh.smeshBuilder import *", globals())
+        exec("import %s" % plugin_module, globals())
+        exec("mod = %s" % plugin_module , globals())
+        methods = {}
+        for attr in dir( mod ):
+            if attr.startswith( '_' ): continue
+            algo = getattr( mod, attr )
+            if inspect.isclass(algo) and hasattr(algo, "meshMethod"):
+                method = getattr( algo, "meshMethod" )
+                if method not in methods: methods[ method ] = []
+                methods[ method ].append( algo )
+                pass
+            pass
+        if methods:
+            output = []
+            if dummymeshhelp:
+                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
+            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
+                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
+                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
+            if format == "doxygen":
+                output.append( "class Mesh:" )
+            for method in methods:
+                docHelper = ""
+                for algo in methods[ method ]:
+                    if hasattr( algo, "docHelper" ): docHelper = getattr( algo, "docHelper" )
+                    if docHelper: break
+                    pass
+                if not docHelper: docHelper = "Create new algorithm."
+                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))
+            pass
+        pass
+    except Exception as e:
+        print(e)
+        pass
+    pass
+    
+if __name__ == "__main__":
+    import argparse
+    parser = argparse.ArgumentParser()
+    h  = "Output file (smesh.py by default)"
+    parser.add_argument("-o", "--output", dest="output",
+                      action="store", default='smesh.py', metavar="file",
+                      help=h)
+    h  = "If this option is True, dummy help for Mesh class is added. "
+    h += "This option should be False (default) when building documentation for SMESH module "
+    h += "and True when building documentation for meshing plug-ins."
+    parser.add_argument("-d", "--dummy-mesh-help", dest="dummymeshhelp",
+                      action="store_true", default=False,
+                      help=h)
+    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 definition."
+    h+= "'sphinx' - documentation strings are generated in the sphinx format, after a method definition."
+    parser.add_argument("-f", "--format", dest="format",
+                      action="store", default="doxygen", help=h)
+
+    parser.add_argument("plugin_name")
+
+
+    args = parser.parse_args()
+
+    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/gui/conf.py.in b/doc/gui/conf.py.in
new file mode 100644 (file)
index 0000000..854a10d
--- /dev/null
@@ -0,0 +1,249 @@
+# -*- 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 importlib
+import sys, os
+import sphinx
+
+# 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']
+# Optional extensions
+extra_extensions = ['sphinx_rtd_theme']
+if sphinx.version_info[:2] < (1,3):
+    extra_extensions += ['sphinxcontrib.napoleon']
+else:
+    extra_extensions += ['sphinx.ext.napoleon']
+for ext in extra_extensions:
+    try:
+        importlib.import_module(ext)
+        extensions.append(ext)
+        globals().update({'use_{}'.format(ext):True})
+    except:
+        globals().update({'use_{}'.format(ext):False})
+
+#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'.
+if use_sphinx_rtd_theme:
+  html_theme = 'sphinx_rtd_theme'
+else:
+  html_theme = 'default' if sphinx.version_info[:2] < (1,3) else 'classic'
+
+themes_options = {}
+themes_options['classic'] = {
+  'body_max_width':'none',
+  'body_min_width':0,
+}
+html_theme_options = themes_options.get(html_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'
+
+extensions += ['sphinx.ext.mathjax']
+
+# 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/gui/images/2d_from_3d_dlg.png b/doc/gui/images/2d_from_3d_dlg.png
new file mode 100644 (file)
index 0000000..e0c8ca5
Binary files /dev/null and b/doc/gui/images/2d_from_3d_dlg.png differ
diff --git a/doc/gui/images/2d_from_3d_example.png b/doc/gui/images/2d_from_3d_example.png
new file mode 100644 (file)
index 0000000..d01efd5
Binary files /dev/null and b/doc/gui/images/2d_from_3d_example.png differ
diff --git a/doc/gui/images/2d_from_3d_ico.png b/doc/gui/images/2d_from_3d_ico.png
new file mode 100644 (file)
index 0000000..b0842d3
Binary files /dev/null and b/doc/gui/images/2d_from_3d_ico.png differ
diff --git a/doc/gui/images/2d_from_3d_menu.png b/doc/gui/images/2d_from_3d_menu.png
new file mode 100644 (file)
index 0000000..acb7b34
Binary files /dev/null and b/doc/gui/images/2d_from_3d_menu.png differ
diff --git a/doc/gui/images/2d_mesh_from_3d_elements.jpg b/doc/gui/images/2d_mesh_from_3d_elements.jpg
new file mode 100644 (file)
index 0000000..2edba32
Binary files /dev/null and b/doc/gui/images/2d_mesh_from_3d_elements.jpg differ
diff --git a/doc/gui/images/2d_mesh_from_3d_elements_dlg.png b/doc/gui/images/2d_mesh_from_3d_elements_dlg.png
new file mode 100644 (file)
index 0000000..77ed543
Binary files /dev/null and b/doc/gui/images/2d_mesh_from_3d_elements_dlg.png differ
diff --git a/doc/gui/images/2d_mesh_from_3d_elements_icon.png b/doc/gui/images/2d_mesh_from_3d_elements_icon.png
new file mode 100644 (file)
index 0000000..2cb269d
Binary files /dev/null and b/doc/gui/images/2d_mesh_from_3d_elements_icon.png differ
diff --git a/doc/gui/images/Clipping_Absolute.png b/doc/gui/images/Clipping_Absolute.png
new file mode 100644 (file)
index 0000000..9657d81
Binary files /dev/null and b/doc/gui/images/Clipping_Absolute.png differ
diff --git a/doc/gui/images/Clipping_Relative.png b/doc/gui/images/Clipping_Relative.png
new file mode 100644 (file)
index 0000000..4fd7dbe
Binary files /dev/null and b/doc/gui/images/Clipping_Relative.png differ
diff --git a/doc/gui/images/Nut_sharp_edges.png b/doc/gui/images/Nut_sharp_edges.png
new file mode 100644 (file)
index 0000000..754710b
Binary files /dev/null and b/doc/gui/images/Nut_sharp_edges.png differ
diff --git a/doc/gui/images/a-arithmetic1d.png b/doc/gui/images/a-arithmetic1d.png
new file mode 100644 (file)
index 0000000..9bc67b0
Binary files /dev/null and b/doc/gui/images/a-arithmetic1d.png differ
diff --git a/doc/gui/images/a-averagelength.png b/doc/gui/images/a-averagelength.png
new file mode 100644 (file)
index 0000000..c8ca5ac
Binary files /dev/null and b/doc/gui/images/a-averagelength.png differ
diff --git a/doc/gui/images/a-clipping2.png b/doc/gui/images/a-clipping2.png
new file mode 100644 (file)
index 0000000..9d1249c
Binary files /dev/null and b/doc/gui/images/a-clipping2.png differ
diff --git a/doc/gui/images/a-creategroup.png b/doc/gui/images/a-creategroup.png
new file mode 100644 (file)
index 0000000..553fb98
Binary files /dev/null and b/doc/gui/images/a-creategroup.png differ
diff --git a/doc/gui/images/a-createpolyhedralvolume.png b/doc/gui/images/a-createpolyhedralvolume.png
new file mode 100644 (file)
index 0000000..6c6bb61
Binary files /dev/null and b/doc/gui/images/a-createpolyhedralvolume.png differ
diff --git a/doc/gui/images/a-cuttingofquadrangles.png b/doc/gui/images/a-cuttingofquadrangles.png
new file mode 100644 (file)
index 0000000..1e533e6
Binary files /dev/null and b/doc/gui/images/a-cuttingofquadrangles.png differ
diff --git a/doc/gui/images/a-deflection1d.png b/doc/gui/images/a-deflection1d.png
new file mode 100644 (file)
index 0000000..57fd859
Binary files /dev/null and b/doc/gui/images/a-deflection1d.png differ
diff --git a/doc/gui/images/a-filteronfaces.png b/doc/gui/images/a-filteronfaces.png
new file mode 100644 (file)
index 0000000..93014f9
Binary files /dev/null and b/doc/gui/images/a-filteronfaces.png differ
diff --git a/doc/gui/images/a-geometric1d.png b/doc/gui/images/a-geometric1d.png
new file mode 100644 (file)
index 0000000..cb5b9cc
Binary files /dev/null and b/doc/gui/images/a-geometric1d.png differ
diff --git a/doc/gui/images/a-maxelarea.png b/doc/gui/images/a-maxelarea.png
new file mode 100644 (file)
index 0000000..4306ed5
Binary files /dev/null and b/doc/gui/images/a-maxelarea.png differ
diff --git a/doc/gui/images/a-maxelvolume.png b/doc/gui/images/a-maxelvolume.png
new file mode 100644 (file)
index 0000000..033e700
Binary files /dev/null and b/doc/gui/images/a-maxelvolume.png differ
diff --git a/doc/gui/images/a-maxsize1d.png b/doc/gui/images/a-maxsize1d.png
new file mode 100644 (file)
index 0000000..c2ddd0c
Binary files /dev/null and b/doc/gui/images/a-maxsize1d.png differ
diff --git a/doc/gui/images/a-nbsegments1.png b/doc/gui/images/a-nbsegments1.png
new file mode 100644 (file)
index 0000000..0cd778f
Binary files /dev/null and b/doc/gui/images/a-nbsegments1.png differ
diff --git a/doc/gui/images/a-nbsegments2.png b/doc/gui/images/a-nbsegments2.png
new file mode 100644 (file)
index 0000000..d9f9c56
Binary files /dev/null and b/doc/gui/images/a-nbsegments2.png differ
diff --git a/doc/gui/images/a-patterntype.png b/doc/gui/images/a-patterntype.png
new file mode 100644 (file)
index 0000000..82c6efb
Binary files /dev/null and b/doc/gui/images/a-patterntype.png differ
diff --git a/doc/gui/images/a-patterntype1.png b/doc/gui/images/a-patterntype1.png
new file mode 100644 (file)
index 0000000..b84257e
Binary files /dev/null and b/doc/gui/images/a-patterntype1.png differ
diff --git a/doc/gui/images/a-standmeshinfo.png b/doc/gui/images/a-standmeshinfo.png
new file mode 100644 (file)
index 0000000..dc037ef
Binary files /dev/null and b/doc/gui/images/a-standmeshinfo.png differ
diff --git a/doc/gui/images/a-startendlength.png b/doc/gui/images/a-startendlength.png
new file mode 100644 (file)
index 0000000..33293d3
Binary files /dev/null and b/doc/gui/images/a-startendlength.png differ
diff --git a/doc/gui/images/a-transparency.png b/doc/gui/images/a-transparency.png
new file mode 100644 (file)
index 0000000..df10f7a
Binary files /dev/null and b/doc/gui/images/a-transparency.png differ
diff --git a/doc/gui/images/a-unionoftriangles.png b/doc/gui/images/a-unionoftriangles.png
new file mode 100644 (file)
index 0000000..24e9a8b
Binary files /dev/null and b/doc/gui/images/a-unionoftriangles.png differ
diff --git a/doc/gui/images/a-viewgeneral.png b/doc/gui/images/a-viewgeneral.png
new file mode 100644 (file)
index 0000000..638870e
Binary files /dev/null and b/doc/gui/images/a-viewgeneral.png differ
diff --git a/doc/gui/images/adaptation_01.png b/doc/gui/images/adaptation_01.png
new file mode 100644 (file)
index 0000000..67cb8b6
Binary files /dev/null and b/doc/gui/images/adaptation_01.png differ
diff --git a/doc/gui/images/adaptation_02.png b/doc/gui/images/adaptation_02.png
new file mode 100644 (file)
index 0000000..1f3f9ed
Binary files /dev/null and b/doc/gui/images/adaptation_02.png differ
diff --git a/doc/gui/images/adaptation_with_homard_advanced.png b/doc/gui/images/adaptation_with_homard_advanced.png
new file mode 100644 (file)
index 0000000..dc05826
Binary files /dev/null and b/doc/gui/images/adaptation_with_homard_advanced.png differ
diff --git a/doc/gui/images/adaptation_with_homard_arguments.png b/doc/gui/images/adaptation_with_homard_arguments.png
new file mode 100644 (file)
index 0000000..2bdd411
Binary files /dev/null and b/doc/gui/images/adaptation_with_homard_arguments.png differ
diff --git a/doc/gui/images/adaptation_with_homard_boundary_analytical.png b/doc/gui/images/adaptation_with_homard_boundary_analytical.png
new file mode 100644 (file)
index 0000000..2beb58d
Binary files /dev/null and b/doc/gui/images/adaptation_with_homard_boundary_analytical.png differ
diff --git a/doc/gui/images/adaptation_with_homard_boundary_cao.png b/doc/gui/images/adaptation_with_homard_boundary_cao.png
new file mode 100644 (file)
index 0000000..8d823b9
Binary files /dev/null and b/doc/gui/images/adaptation_with_homard_boundary_cao.png differ
diff --git a/doc/gui/images/adaptation_with_homard_boundary_discrete.png b/doc/gui/images/adaptation_with_homard_boundary_discrete.png
new file mode 100644 (file)
index 0000000..31d2cdf
Binary files /dev/null and b/doc/gui/images/adaptation_with_homard_boundary_discrete.png differ
diff --git a/doc/gui/images/adaptation_with_homard_boundary_groups.png b/doc/gui/images/adaptation_with_homard_boundary_groups.png
new file mode 100644 (file)
index 0000000..815591e
Binary files /dev/null and b/doc/gui/images/adaptation_with_homard_boundary_groups.png differ
diff --git a/doc/gui/images/adaptive1d.png b/doc/gui/images/adaptive1d.png
new file mode 100644 (file)
index 0000000..8091c8d
Binary files /dev/null and b/doc/gui/images/adaptive1d.png differ
diff --git a/doc/gui/images/adaptive1d_sample_mesh.png b/doc/gui/images/adaptive1d_sample_mesh.png
new file mode 100644 (file)
index 0000000..034207f
Binary files /dev/null and b/doc/gui/images/adaptive1d_sample_mesh.png differ
diff --git a/doc/gui/images/add.gif b/doc/gui/images/add.gif
new file mode 100644 (file)
index 0000000..26350e4
Binary files /dev/null and b/doc/gui/images/add.gif differ
diff --git a/doc/gui/images/add.png b/doc/gui/images/add.png
new file mode 100644 (file)
index 0000000..87995aa
Binary files /dev/null and b/doc/gui/images/add.png differ
diff --git a/doc/gui/images/add0delement.png b/doc/gui/images/add0delement.png
new file mode 100644 (file)
index 0000000..06621cc
Binary files /dev/null and b/doc/gui/images/add0delement.png differ
diff --git a/doc/gui/images/add_0delement.png b/doc/gui/images/add_0delement.png
new file mode 100644 (file)
index 0000000..fa1075b
Binary files /dev/null and b/doc/gui/images/add_0delement.png differ
diff --git a/doc/gui/images/add_ball.png b/doc/gui/images/add_ball.png
new file mode 100644 (file)
index 0000000..1fe4f64
Binary files /dev/null and b/doc/gui/images/add_ball.png differ
diff --git a/doc/gui/images/add_edge.png b/doc/gui/images/add_edge.png
new file mode 100644 (file)
index 0000000..8a532e1
Binary files /dev/null and b/doc/gui/images/add_edge.png differ
diff --git a/doc/gui/images/add_node.png b/doc/gui/images/add_node.png
new file mode 100644 (file)
index 0000000..cb50bf6
Binary files /dev/null and b/doc/gui/images/add_node.png differ
diff --git a/doc/gui/images/add_node_on_face-dlg.png b/doc/gui/images/add_node_on_face-dlg.png
new file mode 100644 (file)
index 0000000..64dc225
Binary files /dev/null and b/doc/gui/images/add_node_on_face-dlg.png differ
diff --git a/doc/gui/images/add_node_on_face.png b/doc/gui/images/add_node_on_face.png
new file mode 100644 (file)
index 0000000..8443493
Binary files /dev/null and b/doc/gui/images/add_node_on_face.png differ
diff --git a/doc/gui/images/add_node_on_segment-dlg.png b/doc/gui/images/add_node_on_segment-dlg.png
new file mode 100644 (file)
index 0000000..25cbb08
Binary files /dev/null and b/doc/gui/images/add_node_on_segment-dlg.png differ
diff --git a/doc/gui/images/add_node_on_segment.png b/doc/gui/images/add_node_on_segment.png
new file mode 100644 (file)
index 0000000..0601b8a
Binary files /dev/null and b/doc/gui/images/add_node_on_segment.png differ
diff --git a/doc/gui/images/add_polygone.png b/doc/gui/images/add_polygone.png
new file mode 100644 (file)
index 0000000..a76bace
Binary files /dev/null and b/doc/gui/images/add_polygone.png differ
diff --git a/doc/gui/images/add_polyhedron.png b/doc/gui/images/add_polyhedron.png
new file mode 100644 (file)
index 0000000..2e23634
Binary files /dev/null and b/doc/gui/images/add_polyhedron.png differ
diff --git a/doc/gui/images/add_quadrangle.png b/doc/gui/images/add_quadrangle.png
new file mode 100644 (file)
index 0000000..f25b94d
Binary files /dev/null and b/doc/gui/images/add_quadrangle.png differ
diff --git a/doc/gui/images/add_triangle.png b/doc/gui/images/add_triangle.png
new file mode 100644 (file)
index 0000000..41c3359
Binary files /dev/null and b/doc/gui/images/add_triangle.png differ
diff --git a/doc/gui/images/addball.png b/doc/gui/images/addball.png
new file mode 100644 (file)
index 0000000..c38c9fa
Binary files /dev/null and b/doc/gui/images/addball.png differ
diff --git a/doc/gui/images/addedge.png b/doc/gui/images/addedge.png
new file mode 100644 (file)
index 0000000..7a5a030
Binary files /dev/null and b/doc/gui/images/addedge.png differ
diff --git a/doc/gui/images/addhexahedron.png b/doc/gui/images/addhexahedron.png
new file mode 100644 (file)
index 0000000..0cf7fe8
Binary files /dev/null and b/doc/gui/images/addhexahedron.png differ
diff --git a/doc/gui/images/addinfo_group.png b/doc/gui/images/addinfo_group.png
new file mode 100644 (file)
index 0000000..7dfcdf0
Binary files /dev/null and b/doc/gui/images/addinfo_group.png differ
diff --git a/doc/gui/images/addinfo_mesh.png b/doc/gui/images/addinfo_mesh.png
new file mode 100644 (file)
index 0000000..75215b3
Binary files /dev/null and b/doc/gui/images/addinfo_mesh.png differ
diff --git a/doc/gui/images/addinfo_submesh.png b/doc/gui/images/addinfo_submesh.png
new file mode 100644 (file)
index 0000000..44b1dda
Binary files /dev/null and b/doc/gui/images/addinfo_submesh.png differ
diff --git a/doc/gui/images/addnode.png b/doc/gui/images/addnode.png
new file mode 100644 (file)
index 0000000..1fd9a9f
Binary files /dev/null and b/doc/gui/images/addnode.png differ
diff --git a/doc/gui/images/addnode_notebook.png b/doc/gui/images/addnode_notebook.png
new file mode 100644 (file)
index 0000000..804f806
Binary files /dev/null and b/doc/gui/images/addnode_notebook.png differ
diff --git a/doc/gui/images/addpolygon.png b/doc/gui/images/addpolygon.png
new file mode 100644 (file)
index 0000000..200999d
Binary files /dev/null and b/doc/gui/images/addpolygon.png differ
diff --git a/doc/gui/images/addquadrangle.png b/doc/gui/images/addquadrangle.png
new file mode 100644 (file)
index 0000000..bd24622
Binary files /dev/null and b/doc/gui/images/addquadrangle.png differ
diff --git a/doc/gui/images/addtetrahedron.png b/doc/gui/images/addtetrahedron.png
new file mode 100644 (file)
index 0000000..0a6a740
Binary files /dev/null and b/doc/gui/images/addtetrahedron.png differ
diff --git a/doc/gui/images/addtriangle.png b/doc/gui/images/addtriangle.png
new file mode 100644 (file)
index 0000000..67682c8
Binary files /dev/null and b/doc/gui/images/addtriangle.png differ
diff --git a/doc/gui/images/advanced_mesh_infos.png b/doc/gui/images/advanced_mesh_infos.png
new file mode 100644 (file)
index 0000000..c3585ea
Binary files /dev/null and b/doc/gui/images/advanced_mesh_infos.png differ
diff --git a/doc/gui/images/analyticdensity.png b/doc/gui/images/analyticdensity.png
new file mode 100644 (file)
index 0000000..b1c9972
Binary files /dev/null and b/doc/gui/images/analyticdensity.png differ
diff --git a/doc/gui/images/angle_measure.png b/doc/gui/images/angle_measure.png
new file mode 100644 (file)
index 0000000..80a2116
Binary files /dev/null and b/doc/gui/images/angle_measure.png differ
diff --git a/doc/gui/images/aqt.png b/doc/gui/images/aqt.png
new file mode 100644 (file)
index 0000000..46ee94d
Binary files /dev/null and b/doc/gui/images/aqt.png differ
diff --git a/doc/gui/images/automaticlength.png b/doc/gui/images/automaticlength.png
new file mode 100644 (file)
index 0000000..15fb8b3
Binary files /dev/null and b/doc/gui/images/automaticlength.png differ
diff --git a/doc/gui/images/b-art_end_length.png b/doc/gui/images/b-art_end_length.png
new file mode 100644 (file)
index 0000000..26da5fa
Binary files /dev/null and b/doc/gui/images/b-art_end_length.png differ
diff --git a/doc/gui/images/b-erage_length.png b/doc/gui/images/b-erage_length.png
new file mode 100644 (file)
index 0000000..f64077c
Binary files /dev/null and b/doc/gui/images/b-erage_length.png differ
diff --git a/doc/gui/images/b-flection1d.png b/doc/gui/images/b-flection1d.png
new file mode 100644 (file)
index 0000000..b0e366b
Binary files /dev/null and b/doc/gui/images/b-flection1d.png differ
diff --git a/doc/gui/images/b-ithmetic1d.png b/doc/gui/images/b-ithmetic1d.png
new file mode 100644 (file)
index 0000000..72f76b9
Binary files /dev/null and b/doc/gui/images/b-ithmetic1d.png differ
diff --git a/doc/gui/images/b-mberofsegments.png b/doc/gui/images/b-mberofsegments.png
new file mode 100644 (file)
index 0000000..27f6868
Binary files /dev/null and b/doc/gui/images/b-mberofsegments.png differ
diff --git a/doc/gui/images/b-mesh_infos.png b/doc/gui/images/b-mesh_infos.png
new file mode 100644 (file)
index 0000000..6abd3c1
Binary files /dev/null and b/doc/gui/images/b-mesh_infos.png differ
diff --git a/doc/gui/images/bare_border_faces_smpl.png b/doc/gui/images/bare_border_faces_smpl.png
new file mode 100644 (file)
index 0000000..6b7ead8
Binary files /dev/null and b/doc/gui/images/bare_border_faces_smpl.png differ
diff --git a/doc/gui/images/bare_border_volumes_smpl.png b/doc/gui/images/bare_border_volumes_smpl.png
new file mode 100644 (file)
index 0000000..3508518
Binary files /dev/null and b/doc/gui/images/bare_border_volumes_smpl.png differ
diff --git a/doc/gui/images/basic_props.png b/doc/gui/images/basic_props.png
new file mode 100644 (file)
index 0000000..abf3aa3
Binary files /dev/null and b/doc/gui/images/basic_props.png differ
diff --git a/doc/gui/images/before_clipping.png b/doc/gui/images/before_clipping.png
new file mode 100644 (file)
index 0000000..41e14d2
Binary files /dev/null and b/doc/gui/images/before_clipping.png differ
diff --git a/doc/gui/images/before_clipping_preview.png b/doc/gui/images/before_clipping_preview.png
new file mode 100644 (file)
index 0000000..f0740cf
Binary files /dev/null and b/doc/gui/images/before_clipping_preview.png differ
diff --git a/doc/gui/images/block_renumber_hyp.png b/doc/gui/images/block_renumber_hyp.png
new file mode 100644 (file)
index 0000000..4c610f7
Binary files /dev/null and b/doc/gui/images/block_renumber_hyp.png differ
diff --git a/doc/gui/images/bnd_box.png b/doc/gui/images/bnd_box.png
new file mode 100644 (file)
index 0000000..4c0bbd3
Binary files /dev/null and b/doc/gui/images/bnd_box.png differ
diff --git a/doc/gui/images/bnd_box_preview.png b/doc/gui/images/bnd_box_preview.png
new file mode 100644 (file)
index 0000000..902101c
Binary files /dev/null and b/doc/gui/images/bnd_box_preview.png differ
diff --git a/doc/gui/images/buildcompound.png b/doc/gui/images/buildcompound.png
new file mode 100644 (file)
index 0000000..d1f4801
Binary files /dev/null and b/doc/gui/images/buildcompound.png differ
diff --git a/doc/gui/images/buildcompound_groups.png b/doc/gui/images/buildcompound_groups.png
new file mode 100644 (file)
index 0000000..ee12892
Binary files /dev/null and b/doc/gui/images/buildcompound_groups.png differ
diff --git a/doc/gui/images/cartesian3D_hyp.png b/doc/gui/images/cartesian3D_hyp.png
new file mode 100644 (file)
index 0000000..768150d
Binary files /dev/null and b/doc/gui/images/cartesian3D_hyp.png differ
diff --git a/doc/gui/images/cartesian3D_sphere.png b/doc/gui/images/cartesian3D_sphere.png
new file mode 100644 (file)
index 0000000..45bffda
Binary files /dev/null and b/doc/gui/images/cartesian3D_sphere.png differ
diff --git a/doc/gui/images/cartesian_implement_edge.png b/doc/gui/images/cartesian_implement_edge.png
new file mode 100644 (file)
index 0000000..59ac9ba
Binary files /dev/null and b/doc/gui/images/cartesian_implement_edge.png differ
diff --git a/doc/gui/images/choose_geom_selection_way.png b/doc/gui/images/choose_geom_selection_way.png
new file mode 100644 (file)
index 0000000..ffee00d
Binary files /dev/null and b/doc/gui/images/choose_geom_selection_way.png differ
diff --git a/doc/gui/images/circle_angles_after.png b/doc/gui/images/circle_angles_after.png
new file mode 100644 (file)
index 0000000..f4c606b
Binary files /dev/null and b/doc/gui/images/circle_angles_after.png differ
diff --git a/doc/gui/images/circle_simple_after.png b/doc/gui/images/circle_simple_after.png
new file mode 100644 (file)
index 0000000..99f65b5
Binary files /dev/null and b/doc/gui/images/circle_simple_after.png differ
diff --git a/doc/gui/images/circle_simple_before.png b/doc/gui/images/circle_simple_before.png
new file mode 100644 (file)
index 0000000..95b9037
Binary files /dev/null and b/doc/gui/images/circle_simple_before.png differ
diff --git a/doc/gui/images/colors_size.png b/doc/gui/images/colors_size.png
new file mode 100644 (file)
index 0000000..0b1d3e5
Binary files /dev/null and b/doc/gui/images/colors_size.png differ
diff --git a/doc/gui/images/connectivity_edge.png b/doc/gui/images/connectivity_edge.png
new file mode 100644 (file)
index 0000000..9d7af87
Binary files /dev/null and b/doc/gui/images/connectivity_edge.png differ
diff --git a/doc/gui/images/connectivity_hex_prism.png b/doc/gui/images/connectivity_hex_prism.png
new file mode 100644 (file)
index 0000000..d5cbfcd
Binary files /dev/null and b/doc/gui/images/connectivity_hex_prism.png differ
diff --git a/doc/gui/images/connectivity_hexa.png b/doc/gui/images/connectivity_hexa.png
new file mode 100644 (file)
index 0000000..326b3ef
Binary files /dev/null and b/doc/gui/images/connectivity_hexa.png differ
diff --git a/doc/gui/images/connectivity_penta.png b/doc/gui/images/connectivity_penta.png
new file mode 100644 (file)
index 0000000..1990a1d
Binary files /dev/null and b/doc/gui/images/connectivity_penta.png differ
diff --git a/doc/gui/images/connectivity_polygon.png b/doc/gui/images/connectivity_polygon.png
new file mode 100644 (file)
index 0000000..3594178
Binary files /dev/null and b/doc/gui/images/connectivity_polygon.png differ
diff --git a/doc/gui/images/connectivity_polyhedron.png b/doc/gui/images/connectivity_polyhedron.png
new file mode 100644 (file)
index 0000000..c59506f
Binary files /dev/null and b/doc/gui/images/connectivity_polyhedron.png differ
diff --git a/doc/gui/images/connectivity_pyramid.png b/doc/gui/images/connectivity_pyramid.png
new file mode 100644 (file)
index 0000000..40cc35a
Binary files /dev/null and b/doc/gui/images/connectivity_pyramid.png differ
diff --git a/doc/gui/images/connectivity_quad.png b/doc/gui/images/connectivity_quad.png
new file mode 100644 (file)
index 0000000..0b7cdd3
Binary files /dev/null and b/doc/gui/images/connectivity_quad.png differ
diff --git a/doc/gui/images/connectivity_tetra.png b/doc/gui/images/connectivity_tetra.png
new file mode 100644 (file)
index 0000000..cd86363
Binary files /dev/null and b/doc/gui/images/connectivity_tetra.png differ
diff --git a/doc/gui/images/connectivity_tria.png b/doc/gui/images/connectivity_tria.png
new file mode 100644 (file)
index 0000000..593ff05
Binary files /dev/null and b/doc/gui/images/connectivity_tria.png differ
diff --git a/doc/gui/images/controls_popup.png b/doc/gui/images/controls_popup.png
new file mode 100644 (file)
index 0000000..c32f9ea
Binary files /dev/null and b/doc/gui/images/controls_popup.png differ
diff --git a/doc/gui/images/convert.png b/doc/gui/images/convert.png
new file mode 100644 (file)
index 0000000..9139f60
Binary files /dev/null and b/doc/gui/images/convert.png differ
diff --git a/doc/gui/images/copy_mesh_dlg.png b/doc/gui/images/copy_mesh_dlg.png
new file mode 100644 (file)
index 0000000..97ca1ca
Binary files /dev/null and b/doc/gui/images/copy_mesh_dlg.png differ
diff --git a/doc/gui/images/copy_mesh_icon.png b/doc/gui/images/copy_mesh_icon.png
new file mode 100644 (file)
index 0000000..263479f
Binary files /dev/null and b/doc/gui/images/copy_mesh_icon.png differ
diff --git a/doc/gui/images/crack_emulation_double_nodes.png b/doc/gui/images/crack_emulation_double_nodes.png
new file mode 100644 (file)
index 0000000..032d9d6
Binary files /dev/null and b/doc/gui/images/crack_emulation_double_nodes.png differ
diff --git a/doc/gui/images/crack_emulation_double_nodes_with_elems.png b/doc/gui/images/crack_emulation_double_nodes_with_elems.png
new file mode 100644 (file)
index 0000000..9a0fd5e
Binary files /dev/null and b/doc/gui/images/crack_emulation_double_nodes_with_elems.png differ
diff --git a/doc/gui/images/create_boundary_1.png b/doc/gui/images/create_boundary_1.png
new file mode 100644 (file)
index 0000000..f6e34b6
Binary files /dev/null and b/doc/gui/images/create_boundary_1.png differ
diff --git a/doc/gui/images/create_boundary_an_1.png b/doc/gui/images/create_boundary_an_1.png
new file mode 100644 (file)
index 0000000..2e634da
Binary files /dev/null and b/doc/gui/images/create_boundary_an_1.png differ
diff --git a/doc/gui/images/create_boundary_an_2.png b/doc/gui/images/create_boundary_an_2.png
new file mode 100644 (file)
index 0000000..25c6e9b
Binary files /dev/null and b/doc/gui/images/create_boundary_an_2.png differ
diff --git a/doc/gui/images/create_boundary_an_3.png b/doc/gui/images/create_boundary_an_3.png
new file mode 100644 (file)
index 0000000..6f38d9f
Binary files /dev/null and b/doc/gui/images/create_boundary_an_3.png differ
diff --git a/doc/gui/images/create_boundary_an_4.png b/doc/gui/images/create_boundary_an_4.png
new file mode 100644 (file)
index 0000000..abf1042
Binary files /dev/null and b/doc/gui/images/create_boundary_an_4.png differ
diff --git a/doc/gui/images/create_boundary_an_co_1.png b/doc/gui/images/create_boundary_an_co_1.png
new file mode 100644 (file)
index 0000000..7212cba
Binary files /dev/null and b/doc/gui/images/create_boundary_an_co_1.png differ
diff --git a/doc/gui/images/create_boundary_an_co_2.png b/doc/gui/images/create_boundary_an_co_2.png
new file mode 100644 (file)
index 0000000..017b56d
Binary files /dev/null and b/doc/gui/images/create_boundary_an_co_2.png differ
diff --git a/doc/gui/images/create_boundary_an_cy.png b/doc/gui/images/create_boundary_an_cy.png
new file mode 100644 (file)
index 0000000..2efc3fd
Binary files /dev/null and b/doc/gui/images/create_boundary_an_cy.png differ
diff --git a/doc/gui/images/create_boundary_an_sp.png b/doc/gui/images/create_boundary_an_sp.png
new file mode 100644 (file)
index 0000000..be7b28b
Binary files /dev/null and b/doc/gui/images/create_boundary_an_sp.png differ
diff --git a/doc/gui/images/create_boundary_an_to.png b/doc/gui/images/create_boundary_an_to.png
new file mode 100644 (file)
index 0000000..38e3940
Binary files /dev/null and b/doc/gui/images/create_boundary_an_to.png differ
diff --git a/doc/gui/images/create_boundary_cao_1.png b/doc/gui/images/create_boundary_cao_1.png
new file mode 100644 (file)
index 0000000..96c2382
Binary files /dev/null and b/doc/gui/images/create_boundary_cao_1.png differ
diff --git a/doc/gui/images/create_boundary_cao_2.png b/doc/gui/images/create_boundary_cao_2.png
new file mode 100644 (file)
index 0000000..94da749
Binary files /dev/null and b/doc/gui/images/create_boundary_cao_2.png differ
diff --git a/doc/gui/images/create_boundary_di_1.png b/doc/gui/images/create_boundary_di_1.png
new file mode 100644 (file)
index 0000000..8f5770b
Binary files /dev/null and b/doc/gui/images/create_boundary_di_1.png differ
diff --git a/doc/gui/images/create_boundary_di_2.png b/doc/gui/images/create_boundary_di_2.png
new file mode 100644 (file)
index 0000000..33ed85f
Binary files /dev/null and b/doc/gui/images/create_boundary_di_2.png differ
diff --git a/doc/gui/images/create_boundary_di_3.png b/doc/gui/images/create_boundary_di_3.png
new file mode 100644 (file)
index 0000000..e682a39
Binary files /dev/null and b/doc/gui/images/create_boundary_di_3.png differ
diff --git a/doc/gui/images/create_dual_mesh_dlg.png b/doc/gui/images/create_dual_mesh_dlg.png
new file mode 100644 (file)
index 0000000..b28beaa
Binary files /dev/null and b/doc/gui/images/create_dual_mesh_dlg.png differ
diff --git a/doc/gui/images/create_dual_mesh_icon.png b/doc/gui/images/create_dual_mesh_icon.png
new file mode 100644 (file)
index 0000000..b9c48f8
Binary files /dev/null and b/doc/gui/images/create_dual_mesh_icon.png differ
diff --git a/doc/gui/images/create_group.png b/doc/gui/images/create_group.png
new file mode 100644 (file)
index 0000000..82e8f86
Binary files /dev/null and b/doc/gui/images/create_group.png differ
diff --git a/doc/gui/images/create_groups_from_geometry.png b/doc/gui/images/create_groups_from_geometry.png
new file mode 100644 (file)
index 0000000..7da08fc
Binary files /dev/null and b/doc/gui/images/create_groups_from_geometry.png differ
diff --git a/doc/gui/images/creategroup.png b/doc/gui/images/creategroup.png
new file mode 100644 (file)
index 0000000..710064b
Binary files /dev/null and b/doc/gui/images/creategroup.png differ
diff --git a/doc/gui/images/creategroup_on_filter.png b/doc/gui/images/creategroup_on_filter.png
new file mode 100644 (file)
index 0000000..98e5a58
Binary files /dev/null and b/doc/gui/images/creategroup_on_filter.png differ
diff --git a/doc/gui/images/createmesh-inv.png b/doc/gui/images/createmesh-inv.png
new file mode 100644 (file)
index 0000000..d17ce53
Binary files /dev/null and b/doc/gui/images/createmesh-inv.png differ
diff --git a/doc/gui/images/createmesh-inv2.png b/doc/gui/images/createmesh-inv2.png
new file mode 100644 (file)
index 0000000..30e6248
Binary files /dev/null and b/doc/gui/images/createmesh-inv2.png differ
diff --git a/doc/gui/images/createmesh-inv3.png b/doc/gui/images/createmesh-inv3.png
new file mode 100644 (file)
index 0000000..f53ab0a
Binary files /dev/null and b/doc/gui/images/createmesh-inv3.png differ
diff --git a/doc/gui/images/ctrlinfo.png b/doc/gui/images/ctrlinfo.png
new file mode 100644 (file)
index 0000000..100fbe0
Binary files /dev/null and b/doc/gui/images/ctrlinfo.png differ
diff --git a/doc/gui/images/curvi_angles_after.png b/doc/gui/images/curvi_angles_after.png
new file mode 100644 (file)
index 0000000..9d06262
Binary files /dev/null and b/doc/gui/images/curvi_angles_after.png differ
diff --git a/doc/gui/images/curvi_simple_after.png b/doc/gui/images/curvi_simple_after.png
new file mode 100644 (file)
index 0000000..ae1d98f
Binary files /dev/null and b/doc/gui/images/curvi_simple_after.png differ
diff --git a/doc/gui/images/curvi_simple_before.png b/doc/gui/images/curvi_simple_before.png
new file mode 100644 (file)
index 0000000..a0bbf73
Binary files /dev/null and b/doc/gui/images/curvi_simple_before.png differ
diff --git a/doc/gui/images/custom_point_marker.png b/doc/gui/images/custom_point_marker.png
new file mode 100644 (file)
index 0000000..a46e33e
Binary files /dev/null and b/doc/gui/images/custom_point_marker.png differ
diff --git a/doc/gui/images/cut_groups1.png b/doc/gui/images/cut_groups1.png
new file mode 100644 (file)
index 0000000..d78c4fe
Binary files /dev/null and b/doc/gui/images/cut_groups1.png differ
diff --git a/doc/gui/images/cutgroups.png b/doc/gui/images/cutgroups.png
new file mode 100644 (file)
index 0000000..213a52a
Binary files /dev/null and b/doc/gui/images/cutgroups.png differ
diff --git a/doc/gui/images/dataset_clipping.png b/doc/gui/images/dataset_clipping.png
new file mode 100644 (file)
index 0000000..b50e38a
Binary files /dev/null and b/doc/gui/images/dataset_clipping.png differ
diff --git a/doc/gui/images/deflection_2d.png b/doc/gui/images/deflection_2d.png
new file mode 100644 (file)
index 0000000..f815962
Binary files /dev/null and b/doc/gui/images/deflection_2d.png differ
diff --git a/doc/gui/images/deletegroups.png b/doc/gui/images/deletegroups.png
new file mode 100644 (file)
index 0000000..52494c8
Binary files /dev/null and b/doc/gui/images/deletegroups.png differ
diff --git a/doc/gui/images/diagonalinversion.png b/doc/gui/images/diagonalinversion.png
new file mode 100644 (file)
index 0000000..1329ebe
Binary files /dev/null and b/doc/gui/images/diagonalinversion.png differ
diff --git a/doc/gui/images/diagram_parallel_mesh.png b/doc/gui/images/diagram_parallel_mesh.png
new file mode 100644 (file)
index 0000000..466b29b
Binary files /dev/null and b/doc/gui/images/diagram_parallel_mesh.png differ
diff --git a/doc/gui/images/dialog.png b/doc/gui/images/dialog.png
new file mode 100644 (file)
index 0000000..c9cc22c
Binary files /dev/null and b/doc/gui/images/dialog.png differ
diff --git a/doc/gui/images/dimgroup_0d.png b/doc/gui/images/dimgroup_0d.png
new file mode 100644 (file)
index 0000000..caabdc4
Binary files /dev/null and b/doc/gui/images/dimgroup_0d.png differ
diff --git a/doc/gui/images/dimgroup_1d.png b/doc/gui/images/dimgroup_1d.png
new file mode 100644 (file)
index 0000000..23af4a7
Binary files /dev/null and b/doc/gui/images/dimgroup_1d.png differ
diff --git a/doc/gui/images/dimgroup_2d.png b/doc/gui/images/dimgroup_2d.png
new file mode 100644 (file)
index 0000000..bbfa059
Binary files /dev/null and b/doc/gui/images/dimgroup_2d.png differ
diff --git a/doc/gui/images/dimgroup_dlg.png b/doc/gui/images/dimgroup_dlg.png
new file mode 100644 (file)
index 0000000..22bdbc6
Binary files /dev/null and b/doc/gui/images/dimgroup_dlg.png differ
diff --git a/doc/gui/images/dimgroup_src.png b/doc/gui/images/dimgroup_src.png
new file mode 100644 (file)
index 0000000..93606a8
Binary files /dev/null and b/doc/gui/images/dimgroup_src.png differ
diff --git a/doc/gui/images/dimgroup_tui1.png b/doc/gui/images/dimgroup_tui1.png
new file mode 100644 (file)
index 0000000..91617ce
Binary files /dev/null and b/doc/gui/images/dimgroup_tui1.png differ
diff --git a/doc/gui/images/display_entity_choose_item.png b/doc/gui/images/display_entity_choose_item.png
new file mode 100644 (file)
index 0000000..d099618
Binary files /dev/null and b/doc/gui/images/display_entity_choose_item.png differ
diff --git a/doc/gui/images/display_entity_dlg.png b/doc/gui/images/display_entity_dlg.png
new file mode 100644 (file)
index 0000000..d0f4fa0
Binary files /dev/null and b/doc/gui/images/display_entity_dlg.png differ
diff --git a/doc/gui/images/distribution_of_layers.png b/doc/gui/images/distribution_of_layers.png
new file mode 100644 (file)
index 0000000..02975ef
Binary files /dev/null and b/doc/gui/images/distribution_of_layers.png differ
diff --git a/doc/gui/images/distributionwithanalyticdensity.png b/doc/gui/images/distributionwithanalyticdensity.png
new file mode 100644 (file)
index 0000000..53c618c
Binary files /dev/null and b/doc/gui/images/distributionwithanalyticdensity.png differ
diff --git a/doc/gui/images/distributionwithtabledensity.png b/doc/gui/images/distributionwithtabledensity.png
new file mode 100644 (file)
index 0000000..75bd698
Binary files /dev/null and b/doc/gui/images/distributionwithtabledensity.png differ
diff --git a/doc/gui/images/dlg_0D_on_all_nodes.png b/doc/gui/images/dlg_0D_on_all_nodes.png
new file mode 100644 (file)
index 0000000..78ac7c8
Binary files /dev/null and b/doc/gui/images/dlg_0D_on_all_nodes.png differ
diff --git a/doc/gui/images/double_faces.png b/doc/gui/images/double_faces.png
new file mode 100644 (file)
index 0000000..47bed1f
Binary files /dev/null and b/doc/gui/images/double_faces.png differ
diff --git a/doc/gui/images/double_nodes.png b/doc/gui/images/double_nodes.png
new file mode 100644 (file)
index 0000000..27a209b
Binary files /dev/null and b/doc/gui/images/double_nodes.png differ
diff --git a/doc/gui/images/duplicate01.png b/doc/gui/images/duplicate01.png
new file mode 100644 (file)
index 0000000..af668e1
Binary files /dev/null and b/doc/gui/images/duplicate01.png differ
diff --git a/doc/gui/images/duplicate02.png b/doc/gui/images/duplicate02.png
new file mode 100644 (file)
index 0000000..e8a6a8c
Binary files /dev/null and b/doc/gui/images/duplicate02.png differ
diff --git a/doc/gui/images/duplicate03.png b/doc/gui/images/duplicate03.png
new file mode 100644 (file)
index 0000000..0291103
Binary files /dev/null and b/doc/gui/images/duplicate03.png differ
diff --git a/doc/gui/images/duplicate04.png b/doc/gui/images/duplicate04.png
new file mode 100644 (file)
index 0000000..7bab0da
Binary files /dev/null and b/doc/gui/images/duplicate04.png differ
diff --git a/doc/gui/images/duplicate_nodes.png b/doc/gui/images/duplicate_nodes.png
new file mode 100644 (file)
index 0000000..61ff32b
Binary files /dev/null and b/doc/gui/images/duplicate_nodes.png differ
diff --git a/doc/gui/images/edge_wire_3d_after.png b/doc/gui/images/edge_wire_3d_after.png
new file mode 100644 (file)
index 0000000..3fab598
Binary files /dev/null and b/doc/gui/images/edge_wire_3d_after.png differ
diff --git a/doc/gui/images/edge_wire_3d_before.png b/doc/gui/images/edge_wire_3d_before.png
new file mode 100644 (file)
index 0000000..28f9868
Binary files /dev/null and b/doc/gui/images/edge_wire_3d_before.png differ
diff --git a/doc/gui/images/edge_wire_after.png b/doc/gui/images/edge_wire_after.png
new file mode 100644 (file)
index 0000000..408480e
Binary files /dev/null and b/doc/gui/images/edge_wire_after.png differ
diff --git a/doc/gui/images/edge_wire_before.png b/doc/gui/images/edge_wire_before.png
new file mode 100644 (file)
index 0000000..186528e
Binary files /dev/null and b/doc/gui/images/edge_wire_before.png differ
diff --git a/doc/gui/images/edit_mesh1.png b/doc/gui/images/edit_mesh1.png
new file mode 100644 (file)
index 0000000..4369e51
Binary files /dev/null and b/doc/gui/images/edit_mesh1.png differ
diff --git a/doc/gui/images/edit_mesh_change_value_hyp.png b/doc/gui/images/edit_mesh_change_value_hyp.png
new file mode 100644 (file)
index 0000000..7dee01f
Binary files /dev/null and b/doc/gui/images/edit_mesh_change_value_hyp.png differ
diff --git a/doc/gui/images/edit_mesh_remove_hyp.png b/doc/gui/images/edit_mesh_remove_hyp.png
new file mode 100644 (file)
index 0000000..0a45639
Binary files /dev/null and b/doc/gui/images/edit_mesh_remove_hyp.png differ
diff --git a/doc/gui/images/editgroup.png b/doc/gui/images/editgroup.png
new file mode 100644 (file)
index 0000000..1a9db08
Binary files /dev/null and b/doc/gui/images/editgroup.png differ
diff --git a/doc/gui/images/editing_groups1.png b/doc/gui/images/editing_groups1.png
new file mode 100644 (file)
index 0000000..a565ed3
Binary files /dev/null and b/doc/gui/images/editing_groups1.png differ
diff --git a/doc/gui/images/elem_info.png b/doc/gui/images/elem_info.png
new file mode 100644 (file)
index 0000000..9937d6d
Binary files /dev/null and b/doc/gui/images/elem_info.png differ
diff --git a/doc/gui/images/eleminfo1.png b/doc/gui/images/eleminfo1.png
new file mode 100644 (file)
index 0000000..9f9e03a
Binary files /dev/null and b/doc/gui/images/eleminfo1.png differ
diff --git a/doc/gui/images/eleminfo2.png b/doc/gui/images/eleminfo2.png
new file mode 100644 (file)
index 0000000..34061d9
Binary files /dev/null and b/doc/gui/images/eleminfo2.png differ
diff --git a/doc/gui/images/extr_along_wire_after.png b/doc/gui/images/extr_along_wire_after.png
new file mode 100644 (file)
index 0000000..eb39bdd
Binary files /dev/null and b/doc/gui/images/extr_along_wire_after.png differ
diff --git a/doc/gui/images/extr_along_wire_before.png b/doc/gui/images/extr_along_wire_before.png
new file mode 100644 (file)
index 0000000..2f30cee
Binary files /dev/null and b/doc/gui/images/extr_along_wire_before.png differ
diff --git a/doc/gui/images/extru_rib_segs.png b/doc/gui/images/extru_rib_segs.png
new file mode 100644 (file)
index 0000000..24f04cf
Binary files /dev/null and b/doc/gui/images/extru_rib_segs.png differ
diff --git a/doc/gui/images/extrusion_along_path_dlg.png b/doc/gui/images/extrusion_along_path_dlg.png
new file mode 100644 (file)
index 0000000..74176d8
Binary files /dev/null and b/doc/gui/images/extrusion_along_path_dlg.png differ
diff --git a/doc/gui/images/extrusion_box.png b/doc/gui/images/extrusion_box.png
new file mode 100644 (file)
index 0000000..fb08486
Binary files /dev/null and b/doc/gui/images/extrusion_box.png differ
diff --git a/doc/gui/images/extrusion_groups.png b/doc/gui/images/extrusion_groups.png
new file mode 100644 (file)
index 0000000..c58e397
Binary files /dev/null and b/doc/gui/images/extrusion_groups.png differ
diff --git a/doc/gui/images/extrusion_groups_res.png b/doc/gui/images/extrusion_groups_res.png
new file mode 100644 (file)
index 0000000..7063c82
Binary files /dev/null and b/doc/gui/images/extrusion_groups_res.png differ
diff --git a/doc/gui/images/extrusionalongaline1.png b/doc/gui/images/extrusionalongaline1.png
new file mode 100644 (file)
index 0000000..cc97577
Binary files /dev/null and b/doc/gui/images/extrusionalongaline1.png differ
diff --git a/doc/gui/images/extrusionalongaline2.png b/doc/gui/images/extrusionalongaline2.png
new file mode 100644 (file)
index 0000000..f0e6d9e
Binary files /dev/null and b/doc/gui/images/extrusionalongaline2.png differ
diff --git a/doc/gui/images/extrusionalongaline3.png b/doc/gui/images/extrusionalongaline3.png
new file mode 100644 (file)
index 0000000..75c359b
Binary files /dev/null and b/doc/gui/images/extrusionalongaline3.png differ
diff --git a/doc/gui/images/extrusionbynormal_alongavgnorm.png b/doc/gui/images/extrusionbynormal_alongavgnorm.png
new file mode 100644 (file)
index 0000000..ecb550e
Binary files /dev/null and b/doc/gui/images/extrusionbynormal_alongavgnorm.png differ
diff --git a/doc/gui/images/extrusionbynormal_useonly.png b/doc/gui/images/extrusionbynormal_useonly.png
new file mode 100644 (file)
index 0000000..1c63a2b
Binary files /dev/null and b/doc/gui/images/extrusionbynormal_useonly.png differ
diff --git a/doc/gui/images/failed_computation.png b/doc/gui/images/failed_computation.png
new file mode 100644 (file)
index 0000000..e44a538
Binary files /dev/null and b/doc/gui/images/failed_computation.png differ
diff --git a/doc/gui/images/find_geom_by_mesh_elem.png b/doc/gui/images/find_geom_by_mesh_elem.png
new file mode 100644 (file)
index 0000000..d71495e
Binary files /dev/null and b/doc/gui/images/find_geom_by_mesh_elem.png differ
diff --git a/doc/gui/images/findelement1.png b/doc/gui/images/findelement1.png
new file mode 100644 (file)
index 0000000..1c11a03
Binary files /dev/null and b/doc/gui/images/findelement1.png differ
diff --git a/doc/gui/images/findelement2.png b/doc/gui/images/findelement2.png
new file mode 100644 (file)
index 0000000..c9898b5
Binary files /dev/null and b/doc/gui/images/findelement2.png differ
diff --git a/doc/gui/images/findelement3.png b/doc/gui/images/findelement3.png
new file mode 100644 (file)
index 0000000..26cfff2
Binary files /dev/null and b/doc/gui/images/findelement3.png differ
diff --git a/doc/gui/images/formula1.png b/doc/gui/images/formula1.png
new file mode 100644 (file)
index 0000000..b3468a1
Binary files /dev/null and b/doc/gui/images/formula1.png differ
diff --git a/doc/gui/images/formula2.png b/doc/gui/images/formula2.png
new file mode 100644 (file)
index 0000000..dd45fbf
Binary files /dev/null and b/doc/gui/images/formula2.png differ
diff --git a/doc/gui/images/formula4.png b/doc/gui/images/formula4.png
new file mode 100644 (file)
index 0000000..3a5d31f
Binary files /dev/null and b/doc/gui/images/formula4.png differ
diff --git a/doc/gui/images/formula5.png b/doc/gui/images/formula5.png
new file mode 100644 (file)
index 0000000..8cd035f
Binary files /dev/null and b/doc/gui/images/formula5.png differ
diff --git a/doc/gui/images/free_borders1.png b/doc/gui/images/free_borders1.png
new file mode 100644 (file)
index 0000000..871beba
Binary files /dev/null and b/doc/gui/images/free_borders1.png differ
diff --git a/doc/gui/images/free_edges.png b/doc/gui/images/free_edges.png
new file mode 100644 (file)
index 0000000..6f1100c
Binary files /dev/null and b/doc/gui/images/free_edges.png differ
diff --git a/doc/gui/images/free_faces.png b/doc/gui/images/free_faces.png
new file mode 100644 (file)
index 0000000..8b5bee4
Binary files /dev/null and b/doc/gui/images/free_faces.png differ
diff --git a/doc/gui/images/free_nodes.png b/doc/gui/images/free_nodes.png
new file mode 100644 (file)
index 0000000..ea043ea
Binary files /dev/null and b/doc/gui/images/free_nodes.png differ
diff --git a/doc/gui/images/ghs3dprl_parameters_basic.png b/doc/gui/images/ghs3dprl_parameters_basic.png
new file mode 100644 (file)
index 0000000..0628058
Binary files /dev/null and b/doc/gui/images/ghs3dprl_parameters_basic.png differ
diff --git a/doc/gui/images/groups_by_sharp_edges_dlg.png b/doc/gui/images/groups_by_sharp_edges_dlg.png
new file mode 100644 (file)
index 0000000..936d0ba
Binary files /dev/null and b/doc/gui/images/groups_by_sharp_edges_dlg.png differ
diff --git a/doc/gui/images/groups_in_OB.png b/doc/gui/images/groups_in_OB.png
new file mode 100644 (file)
index 0000000..1ffb96a
Binary files /dev/null and b/doc/gui/images/groups_in_OB.png differ
diff --git a/doc/gui/images/hexa_ijk_mesh.png b/doc/gui/images/hexa_ijk_mesh.png
new file mode 100644 (file)
index 0000000..577ee8e
Binary files /dev/null and b/doc/gui/images/hexa_ijk_mesh.png differ
diff --git a/doc/gui/images/hyp_source_edges.png b/doc/gui/images/hyp_source_edges.png
new file mode 100644 (file)
index 0000000..2305e17
Binary files /dev/null and b/doc/gui/images/hyp_source_edges.png differ
diff --git a/doc/gui/images/hyp_source_faces.png b/doc/gui/images/hyp_source_faces.png
new file mode 100644 (file)
index 0000000..fe9e6c6
Binary files /dev/null and b/doc/gui/images/hyp_source_faces.png differ
diff --git a/doc/gui/images/hypo_fixedpnt_dlg.png b/doc/gui/images/hypo_fixedpnt_dlg.png
new file mode 100644 (file)
index 0000000..d1c131a
Binary files /dev/null and b/doc/gui/images/hypo_fixedpnt_dlg.png differ
diff --git a/doc/gui/images/hypo_quad_params_1.png b/doc/gui/images/hypo_quad_params_1.png
new file mode 100644 (file)
index 0000000..eca8767
Binary files /dev/null and b/doc/gui/images/hypo_quad_params_1.png differ
diff --git a/doc/gui/images/hypo_quad_params_2.png b/doc/gui/images/hypo_quad_params_2.png
new file mode 100644 (file)
index 0000000..4102a76
Binary files /dev/null and b/doc/gui/images/hypo_quad_params_2.png differ
diff --git a/doc/gui/images/hypo_quad_params_dialog.png b/doc/gui/images/hypo_quad_params_dialog.png
new file mode 100644 (file)
index 0000000..f0c381a
Binary files /dev/null and b/doc/gui/images/hypo_quad_params_dialog.png differ
diff --git a/doc/gui/images/hypo_quad_params_dialog_corners.png b/doc/gui/images/hypo_quad_params_dialog_corners.png
new file mode 100644 (file)
index 0000000..4f30c07
Binary files /dev/null and b/doc/gui/images/hypo_quad_params_dialog_corners.png differ
diff --git a/doc/gui/images/hypo_quad_params_dialog_enf.png b/doc/gui/images/hypo_quad_params_dialog_enf.png
new file mode 100644 (file)
index 0000000..cc1be66
Binary files /dev/null and b/doc/gui/images/hypo_quad_params_dialog_enf.png differ
diff --git a/doc/gui/images/hypo_quad_params_dialog_vert.png b/doc/gui/images/hypo_quad_params_dialog_vert.png
new file mode 100644 (file)
index 0000000..c819144
Binary files /dev/null and b/doc/gui/images/hypo_quad_params_dialog_vert.png differ
diff --git a/doc/gui/images/hypo_quad_params_enfnodes_algo1.png b/doc/gui/images/hypo_quad_params_enfnodes_algo1.png
new file mode 100644 (file)
index 0000000..3040015
Binary files /dev/null and b/doc/gui/images/hypo_quad_params_enfnodes_algo1.png differ
diff --git a/doc/gui/images/hypo_quad_params_enfnodes_algo2.png b/doc/gui/images/hypo_quad_params_enfnodes_algo2.png
new file mode 100644 (file)
index 0000000..f0a4c62
Binary files /dev/null and b/doc/gui/images/hypo_quad_params_enfnodes_algo2.png differ
diff --git a/doc/gui/images/hypo_quad_params_enfnodes_algo3.png b/doc/gui/images/hypo_quad_params_enfnodes_algo3.png
new file mode 100644 (file)
index 0000000..f6db339
Binary files /dev/null and b/doc/gui/images/hypo_quad_params_enfnodes_algo3.png differ
diff --git a/doc/gui/images/hypo_quad_params_res.png b/doc/gui/images/hypo_quad_params_res.png
new file mode 100644 (file)
index 0000000..8aae276
Binary files /dev/null and b/doc/gui/images/hypo_quad_params_res.png differ
diff --git a/doc/gui/images/hypo_quad_params_res_2.png b/doc/gui/images/hypo_quad_params_res_2.png
new file mode 100644 (file)
index 0000000..6dc37e2
Binary files /dev/null and b/doc/gui/images/hypo_quad_params_res_2.png differ
diff --git a/doc/gui/images/hypo_radquad_dlg.png b/doc/gui/images/hypo_radquad_dlg.png
new file mode 100644 (file)
index 0000000..e658a68
Binary files /dev/null and b/doc/gui/images/hypo_radquad_dlg.png differ
diff --git a/doc/gui/images/hypo_sets.png b/doc/gui/images/hypo_sets.png
new file mode 100644 (file)
index 0000000..14af9af
Binary files /dev/null and b/doc/gui/images/hypo_sets.png differ
diff --git a/doc/gui/images/image10.jpg b/doc/gui/images/image10.jpg
new file mode 100644 (file)
index 0000000..c52d80c
Binary files /dev/null and b/doc/gui/images/image10.jpg differ
diff --git a/doc/gui/images/image101.png b/doc/gui/images/image101.png
new file mode 100644 (file)
index 0000000..0e2c966
Binary files /dev/null and b/doc/gui/images/image101.png differ
diff --git a/doc/gui/images/image105.gif b/doc/gui/images/image105.gif
new file mode 100644 (file)
index 0000000..0f74545
Binary files /dev/null and b/doc/gui/images/image105.gif differ
diff --git a/doc/gui/images/image106.gif b/doc/gui/images/image106.gif
new file mode 100644 (file)
index 0000000..71bda2e
Binary files /dev/null and b/doc/gui/images/image106.gif differ
diff --git a/doc/gui/images/image120.png b/doc/gui/images/image120.png
new file mode 100644 (file)
index 0000000..65318de
Binary files /dev/null and b/doc/gui/images/image120.png differ
diff --git a/doc/gui/images/image121.png b/doc/gui/images/image121.png
new file mode 100644 (file)
index 0000000..16ed2a4
Binary files /dev/null and b/doc/gui/images/image121.png differ
diff --git a/doc/gui/images/image122.png b/doc/gui/images/image122.png
new file mode 100644 (file)
index 0000000..7fa491b
Binary files /dev/null and b/doc/gui/images/image122.png differ
diff --git a/doc/gui/images/image123.gif b/doc/gui/images/image123.gif
new file mode 100644 (file)
index 0000000..2780e70
Binary files /dev/null and b/doc/gui/images/image123.gif differ
diff --git a/doc/gui/images/image124.gif b/doc/gui/images/image124.gif
new file mode 100644 (file)
index 0000000..98f0c40
Binary files /dev/null and b/doc/gui/images/image124.gif differ
diff --git a/doc/gui/images/image125.gif b/doc/gui/images/image125.gif
new file mode 100644 (file)
index 0000000..1983513
Binary files /dev/null and b/doc/gui/images/image125.gif differ
diff --git a/doc/gui/images/image126.gif b/doc/gui/images/image126.gif
new file mode 100644 (file)
index 0000000..e2e6955
Binary files /dev/null and b/doc/gui/images/image126.gif differ
diff --git a/doc/gui/images/image127.gif b/doc/gui/images/image127.gif
new file mode 100644 (file)
index 0000000..79bccc6
Binary files /dev/null and b/doc/gui/images/image127.gif differ
diff --git a/doc/gui/images/image130.gif b/doc/gui/images/image130.gif
new file mode 100644 (file)
index 0000000..cc8c3a5
Binary files /dev/null and b/doc/gui/images/image130.gif differ
diff --git a/doc/gui/images/image131.gif b/doc/gui/images/image131.gif
new file mode 100644 (file)
index 0000000..8ca3453
Binary files /dev/null and b/doc/gui/images/image131.gif differ
diff --git a/doc/gui/images/image132.gif b/doc/gui/images/image132.gif
new file mode 100644 (file)
index 0000000..e7577ea
Binary files /dev/null and b/doc/gui/images/image132.gif differ
diff --git a/doc/gui/images/image133.gif b/doc/gui/images/image133.gif
new file mode 100644 (file)
index 0000000..60a4b96
Binary files /dev/null and b/doc/gui/images/image133.gif differ
diff --git a/doc/gui/images/image134.gif b/doc/gui/images/image134.gif
new file mode 100644 (file)
index 0000000..60148ba
Binary files /dev/null and b/doc/gui/images/image134.gif differ
diff --git a/doc/gui/images/image135.gif b/doc/gui/images/image135.gif
new file mode 100644 (file)
index 0000000..13b7b08
Binary files /dev/null and b/doc/gui/images/image135.gif differ
diff --git a/doc/gui/images/image136.gif b/doc/gui/images/image136.gif
new file mode 100644 (file)
index 0000000..9b17450
Binary files /dev/null and b/doc/gui/images/image136.gif differ
diff --git a/doc/gui/images/image137.gif b/doc/gui/images/image137.gif
new file mode 100644 (file)
index 0000000..7f4cd13
Binary files /dev/null and b/doc/gui/images/image137.gif differ
diff --git a/doc/gui/images/image138.gif b/doc/gui/images/image138.gif
new file mode 100644 (file)
index 0000000..1659aab
Binary files /dev/null and b/doc/gui/images/image138.gif differ
diff --git a/doc/gui/images/image143.gif b/doc/gui/images/image143.gif
new file mode 100644 (file)
index 0000000..de9df14
Binary files /dev/null and b/doc/gui/images/image143.gif differ
diff --git a/doc/gui/images/image144.png b/doc/gui/images/image144.png
new file mode 100644 (file)
index 0000000..75219e9
Binary files /dev/null and b/doc/gui/images/image144.png differ
diff --git a/doc/gui/images/image145.png b/doc/gui/images/image145.png
new file mode 100644 (file)
index 0000000..52b21ca
Binary files /dev/null and b/doc/gui/images/image145.png differ
diff --git a/doc/gui/images/image146.png b/doc/gui/images/image146.png
new file mode 100644 (file)
index 0000000..06c1c03
Binary files /dev/null and b/doc/gui/images/image146.png differ
diff --git a/doc/gui/images/image147.gif b/doc/gui/images/image147.gif
new file mode 100644 (file)
index 0000000..7b9a354
Binary files /dev/null and b/doc/gui/images/image147.gif differ
diff --git a/doc/gui/images/image148.gif b/doc/gui/images/image148.gif
new file mode 100644 (file)
index 0000000..0ef4147
Binary files /dev/null and b/doc/gui/images/image148.gif differ
diff --git a/doc/gui/images/image15.jpg b/doc/gui/images/image15.jpg
new file mode 100644 (file)
index 0000000..15edee5
Binary files /dev/null and b/doc/gui/images/image15.jpg differ
diff --git a/doc/gui/images/image151.gif b/doc/gui/images/image151.gif
new file mode 100644 (file)
index 0000000..5c4a20e
Binary files /dev/null and b/doc/gui/images/image151.gif differ
diff --git a/doc/gui/images/image152.png b/doc/gui/images/image152.png
new file mode 100644 (file)
index 0000000..d30ae67
Binary files /dev/null and b/doc/gui/images/image152.png differ
diff --git a/doc/gui/images/image154.png b/doc/gui/images/image154.png
new file mode 100644 (file)
index 0000000..72421a4
Binary files /dev/null and b/doc/gui/images/image154.png differ
diff --git a/doc/gui/images/image155.gif b/doc/gui/images/image155.gif
new file mode 100644 (file)
index 0000000..fe03093
Binary files /dev/null and b/doc/gui/images/image155.gif differ
diff --git a/doc/gui/images/image156.gif b/doc/gui/images/image156.gif
new file mode 100644 (file)
index 0000000..36b37c8
Binary files /dev/null and b/doc/gui/images/image156.gif differ
diff --git a/doc/gui/images/image157.gif b/doc/gui/images/image157.gif
new file mode 100644 (file)
index 0000000..4592151
Binary files /dev/null and b/doc/gui/images/image157.gif differ
diff --git a/doc/gui/images/image160.gif b/doc/gui/images/image160.gif
new file mode 100644 (file)
index 0000000..5aff389
Binary files /dev/null and b/doc/gui/images/image160.gif differ
diff --git a/doc/gui/images/image161.png b/doc/gui/images/image161.png
new file mode 100644 (file)
index 0000000..5b1aed2
Binary files /dev/null and b/doc/gui/images/image161.png differ
diff --git a/doc/gui/images/image22.jpg b/doc/gui/images/image22.jpg
new file mode 100644 (file)
index 0000000..b6a5e8d
Binary files /dev/null and b/doc/gui/images/image22.jpg differ
diff --git a/doc/gui/images/image23.jpg b/doc/gui/images/image23.jpg
new file mode 100644 (file)
index 0000000..74f899b
Binary files /dev/null and b/doc/gui/images/image23.jpg differ
diff --git a/doc/gui/images/image24.gif b/doc/gui/images/image24.gif
new file mode 100644 (file)
index 0000000..3d8032b
Binary files /dev/null and b/doc/gui/images/image24.gif differ
diff --git a/doc/gui/images/image25.jpg b/doc/gui/images/image25.jpg
new file mode 100644 (file)
index 0000000..79ddf05
Binary files /dev/null and b/doc/gui/images/image25.jpg differ
diff --git a/doc/gui/images/image25.png b/doc/gui/images/image25.png
new file mode 100644 (file)
index 0000000..aeef930
Binary files /dev/null and b/doc/gui/images/image25.png differ
diff --git a/doc/gui/images/image27.jpg b/doc/gui/images/image27.jpg
new file mode 100644 (file)
index 0000000..d2f32b1
Binary files /dev/null and b/doc/gui/images/image27.jpg differ
diff --git a/doc/gui/images/image28.png b/doc/gui/images/image28.png
new file mode 100644 (file)
index 0000000..7c16b0c
Binary files /dev/null and b/doc/gui/images/image28.png differ
diff --git a/doc/gui/images/image30.jpg b/doc/gui/images/image30.jpg
new file mode 100644 (file)
index 0000000..997a36e
Binary files /dev/null and b/doc/gui/images/image30.jpg differ
diff --git a/doc/gui/images/image31.jpg b/doc/gui/images/image31.jpg
new file mode 100644 (file)
index 0000000..aa00403
Binary files /dev/null and b/doc/gui/images/image31.jpg differ
diff --git a/doc/gui/images/image32.jpg b/doc/gui/images/image32.jpg
new file mode 100644 (file)
index 0000000..77d595d
Binary files /dev/null and b/doc/gui/images/image32.jpg differ
diff --git a/doc/gui/images/image32.png b/doc/gui/images/image32.png
new file mode 100644 (file)
index 0000000..cad35fd
Binary files /dev/null and b/doc/gui/images/image32.png differ
diff --git a/doc/gui/images/image33.gif b/doc/gui/images/image33.gif
new file mode 100644 (file)
index 0000000..6613182
Binary files /dev/null and b/doc/gui/images/image33.gif differ
diff --git a/doc/gui/images/image34.png b/doc/gui/images/image34.png
new file mode 100644 (file)
index 0000000..eb7ca81
Binary files /dev/null and b/doc/gui/images/image34.png differ
diff --git a/doc/gui/images/image35.png b/doc/gui/images/image35.png
new file mode 100644 (file)
index 0000000..00031d3
Binary files /dev/null and b/doc/gui/images/image35.png differ
diff --git a/doc/gui/images/image36.jpg b/doc/gui/images/image36.jpg
new file mode 100644 (file)
index 0000000..9b44dc7
Binary files /dev/null and b/doc/gui/images/image36.jpg differ
diff --git a/doc/gui/images/image36.png b/doc/gui/images/image36.png
new file mode 100644 (file)
index 0000000..6a250d0
Binary files /dev/null and b/doc/gui/images/image36.png differ
diff --git a/doc/gui/images/image37.jpg b/doc/gui/images/image37.jpg
new file mode 100644 (file)
index 0000000..5fba91a
Binary files /dev/null and b/doc/gui/images/image37.jpg differ
diff --git a/doc/gui/images/image37.png b/doc/gui/images/image37.png
new file mode 100644 (file)
index 0000000..266cef9
Binary files /dev/null and b/doc/gui/images/image37.png differ
diff --git a/doc/gui/images/image38.jpg b/doc/gui/images/image38.jpg
new file mode 100644 (file)
index 0000000..29d5e71
Binary files /dev/null and b/doc/gui/images/image38.jpg differ
diff --git a/doc/gui/images/image38.png b/doc/gui/images/image38.png
new file mode 100644 (file)
index 0000000..fb8a690
Binary files /dev/null and b/doc/gui/images/image38.png differ
diff --git a/doc/gui/images/image39.png b/doc/gui/images/image39.png
new file mode 100644 (file)
index 0000000..54729b8
Binary files /dev/null and b/doc/gui/images/image39.png differ
diff --git a/doc/gui/images/image40.png b/doc/gui/images/image40.png
new file mode 100644 (file)
index 0000000..bbde0d4
Binary files /dev/null and b/doc/gui/images/image40.png differ
diff --git a/doc/gui/images/image41.gif b/doc/gui/images/image41.gif
new file mode 100644 (file)
index 0000000..2e132c2
Binary files /dev/null and b/doc/gui/images/image41.gif differ
diff --git a/doc/gui/images/image42.png b/doc/gui/images/image42.png
new file mode 100644 (file)
index 0000000..d0120fa
Binary files /dev/null and b/doc/gui/images/image42.png differ
diff --git a/doc/gui/images/image43.png b/doc/gui/images/image43.png
new file mode 100644 (file)
index 0000000..7b6b895
Binary files /dev/null and b/doc/gui/images/image43.png differ
diff --git a/doc/gui/images/image46.gif b/doc/gui/images/image46.gif
new file mode 100644 (file)
index 0000000..0f00ea7
Binary files /dev/null and b/doc/gui/images/image46.gif differ
diff --git a/doc/gui/images/image49.png b/doc/gui/images/image49.png
new file mode 100644 (file)
index 0000000..6e5b317
Binary files /dev/null and b/doc/gui/images/image49.png differ
diff --git a/doc/gui/images/image5.jpg b/doc/gui/images/image5.jpg
new file mode 100644 (file)
index 0000000..f195ac8
Binary files /dev/null and b/doc/gui/images/image5.jpg differ
diff --git a/doc/gui/images/image50.gif b/doc/gui/images/image50.gif
new file mode 100644 (file)
index 0000000..22bdf55
Binary files /dev/null and b/doc/gui/images/image50.gif differ
diff --git a/doc/gui/images/image51.jpg b/doc/gui/images/image51.jpg
new file mode 100644 (file)
index 0000000..dfe3bc6
Binary files /dev/null and b/doc/gui/images/image51.jpg differ
diff --git a/doc/gui/images/image52.jpg b/doc/gui/images/image52.jpg
new file mode 100644 (file)
index 0000000..1c83b35
Binary files /dev/null and b/doc/gui/images/image52.jpg differ
diff --git a/doc/gui/images/image53.gif b/doc/gui/images/image53.gif
new file mode 100644 (file)
index 0000000..8f72820
Binary files /dev/null and b/doc/gui/images/image53.gif differ
diff --git a/doc/gui/images/image55.gif b/doc/gui/images/image55.gif
new file mode 100644 (file)
index 0000000..cc1b80e
Binary files /dev/null and b/doc/gui/images/image55.gif differ
diff --git a/doc/gui/images/image56.gif b/doc/gui/images/image56.gif
new file mode 100644 (file)
index 0000000..ffe1e95
Binary files /dev/null and b/doc/gui/images/image56.gif differ
diff --git a/doc/gui/images/image56.jpg b/doc/gui/images/image56.jpg
new file mode 100644 (file)
index 0000000..6f19970
Binary files /dev/null and b/doc/gui/images/image56.jpg differ
diff --git a/doc/gui/images/image58.png b/doc/gui/images/image58.png
new file mode 100644 (file)
index 0000000..a496170
Binary files /dev/null and b/doc/gui/images/image58.png differ
diff --git a/doc/gui/images/image59.png b/doc/gui/images/image59.png
new file mode 100644 (file)
index 0000000..5b8106e
Binary files /dev/null and b/doc/gui/images/image59.png differ
diff --git a/doc/gui/images/image63.png b/doc/gui/images/image63.png
new file mode 100644 (file)
index 0000000..b9e65be
Binary files /dev/null and b/doc/gui/images/image63.png differ
diff --git a/doc/gui/images/image64.png b/doc/gui/images/image64.png
new file mode 100644 (file)
index 0000000..554959b
Binary files /dev/null and b/doc/gui/images/image64.png differ
diff --git a/doc/gui/images/image67.png b/doc/gui/images/image67.png
new file mode 100644 (file)
index 0000000..0d456ba
Binary files /dev/null and b/doc/gui/images/image67.png differ
diff --git a/doc/gui/images/image7.jpg b/doc/gui/images/image7.jpg
new file mode 100644 (file)
index 0000000..cbd6170
Binary files /dev/null and b/doc/gui/images/image7.jpg differ
diff --git a/doc/gui/images/image70.jpg b/doc/gui/images/image70.jpg
new file mode 100644 (file)
index 0000000..0df360f
Binary files /dev/null and b/doc/gui/images/image70.jpg differ
diff --git a/doc/gui/images/image70.png b/doc/gui/images/image70.png
new file mode 100644 (file)
index 0000000..30a2d92
Binary files /dev/null and b/doc/gui/images/image70.png differ
diff --git a/doc/gui/images/image71.jpg b/doc/gui/images/image71.jpg
new file mode 100644 (file)
index 0000000..cb1223d
Binary files /dev/null and b/doc/gui/images/image71.jpg differ
diff --git a/doc/gui/images/image71.png b/doc/gui/images/image71.png
new file mode 100644 (file)
index 0000000..ef9407a
Binary files /dev/null and b/doc/gui/images/image71.png differ
diff --git a/doc/gui/images/image74.gif b/doc/gui/images/image74.gif
new file mode 100644 (file)
index 0000000..c66029e
Binary files /dev/null and b/doc/gui/images/image74.gif differ
diff --git a/doc/gui/images/image75.jpg b/doc/gui/images/image75.jpg
new file mode 100644 (file)
index 0000000..54718d4
Binary files /dev/null and b/doc/gui/images/image75.jpg differ
diff --git a/doc/gui/images/image76.jpg b/doc/gui/images/image76.jpg
new file mode 100644 (file)
index 0000000..cdeb880
Binary files /dev/null and b/doc/gui/images/image76.jpg differ
diff --git a/doc/gui/images/image77.jpg b/doc/gui/images/image77.jpg
new file mode 100644 (file)
index 0000000..9205644
Binary files /dev/null and b/doc/gui/images/image77.jpg differ
diff --git a/doc/gui/images/image78.jpg b/doc/gui/images/image78.jpg
new file mode 100644 (file)
index 0000000..80c2a16
Binary files /dev/null and b/doc/gui/images/image78.jpg differ
diff --git a/doc/gui/images/image79.jpg b/doc/gui/images/image79.jpg
new file mode 100644 (file)
index 0000000..0efc736
Binary files /dev/null and b/doc/gui/images/image79.jpg differ
diff --git a/doc/gui/images/image79.png b/doc/gui/images/image79.png
new file mode 100644 (file)
index 0000000..e8d648c
Binary files /dev/null and b/doc/gui/images/image79.png differ
diff --git a/doc/gui/images/image80.png b/doc/gui/images/image80.png
new file mode 100644 (file)
index 0000000..114b38d
Binary files /dev/null and b/doc/gui/images/image80.png differ
diff --git a/doc/gui/images/image81.png b/doc/gui/images/image81.png
new file mode 100644 (file)
index 0000000..47e03cc
Binary files /dev/null and b/doc/gui/images/image81.png differ
diff --git a/doc/gui/images/image82.png b/doc/gui/images/image82.png
new file mode 100644 (file)
index 0000000..c37c5fb
Binary files /dev/null and b/doc/gui/images/image82.png differ
diff --git a/doc/gui/images/image83.gif b/doc/gui/images/image83.gif
new file mode 100644 (file)
index 0000000..331b64a
Binary files /dev/null and b/doc/gui/images/image83.gif differ
diff --git a/doc/gui/images/image84.png b/doc/gui/images/image84.png
new file mode 100644 (file)
index 0000000..2c0b285
Binary files /dev/null and b/doc/gui/images/image84.png differ
diff --git a/doc/gui/images/image86.jpg b/doc/gui/images/image86.jpg
new file mode 100644 (file)
index 0000000..168b43e
Binary files /dev/null and b/doc/gui/images/image86.jpg differ
diff --git a/doc/gui/images/image88.gif b/doc/gui/images/image88.gif
new file mode 100644 (file)
index 0000000..553656d
Binary files /dev/null and b/doc/gui/images/image88.gif differ
diff --git a/doc/gui/images/image88.jpg b/doc/gui/images/image88.jpg
new file mode 100644 (file)
index 0000000..9499ab2
Binary files /dev/null and b/doc/gui/images/image88.jpg differ
diff --git a/doc/gui/images/image90.jpg b/doc/gui/images/image90.jpg
new file mode 100644 (file)
index 0000000..a78c439
Binary files /dev/null and b/doc/gui/images/image90.jpg differ
diff --git a/doc/gui/images/image91.png b/doc/gui/images/image91.png
new file mode 100644 (file)
index 0000000..64fcc31
Binary files /dev/null and b/doc/gui/images/image91.png differ
diff --git a/doc/gui/images/image92.jpg b/doc/gui/images/image92.jpg
new file mode 100644 (file)
index 0000000..bf6e610
Binary files /dev/null and b/doc/gui/images/image92.jpg differ
diff --git a/doc/gui/images/image92.png b/doc/gui/images/image92.png
new file mode 100644 (file)
index 0000000..3068b0f
Binary files /dev/null and b/doc/gui/images/image92.png differ
diff --git a/doc/gui/images/image93.jpg b/doc/gui/images/image93.jpg
new file mode 100644 (file)
index 0000000..f9780b4
Binary files /dev/null and b/doc/gui/images/image93.jpg differ
diff --git a/doc/gui/images/image94.gif b/doc/gui/images/image94.gif
new file mode 100644 (file)
index 0000000..7313f5d
Binary files /dev/null and b/doc/gui/images/image94.gif differ
diff --git a/doc/gui/images/image94.jpg b/doc/gui/images/image94.jpg
new file mode 100644 (file)
index 0000000..7891667
Binary files /dev/null and b/doc/gui/images/image94.jpg differ
diff --git a/doc/gui/images/image95.gif b/doc/gui/images/image95.gif
new file mode 100644 (file)
index 0000000..6491f27
Binary files /dev/null and b/doc/gui/images/image95.gif differ
diff --git a/doc/gui/images/image95.jpg b/doc/gui/images/image95.jpg
new file mode 100644 (file)
index 0000000..047dccf
Binary files /dev/null and b/doc/gui/images/image95.jpg differ
diff --git a/doc/gui/images/image96.gif b/doc/gui/images/image96.gif
new file mode 100644 (file)
index 0000000..1392ee7
Binary files /dev/null and b/doc/gui/images/image96.gif differ
diff --git a/doc/gui/images/image96.jpg b/doc/gui/images/image96.jpg
new file mode 100644 (file)
index 0000000..5f3128e
Binary files /dev/null and b/doc/gui/images/image96.jpg differ
diff --git a/doc/gui/images/image97.gif b/doc/gui/images/image97.gif
new file mode 100644 (file)
index 0000000..480b584
Binary files /dev/null and b/doc/gui/images/image97.gif differ
diff --git a/doc/gui/images/image97.jpg b/doc/gui/images/image97.jpg
new file mode 100644 (file)
index 0000000..275f2e3
Binary files /dev/null and b/doc/gui/images/image97.jpg differ
diff --git a/doc/gui/images/image98.png b/doc/gui/images/image98.png
new file mode 100644 (file)
index 0000000..a2c131d
Binary files /dev/null and b/doc/gui/images/image98.png differ
diff --git a/doc/gui/images/image99.gif b/doc/gui/images/image99.gif
new file mode 100644 (file)
index 0000000..2672e99
Binary files /dev/null and b/doc/gui/images/image99.gif differ
diff --git a/doc/gui/images/image_octa12.png b/doc/gui/images/image_octa12.png
new file mode 100644 (file)
index 0000000..1a5ed8c
Binary files /dev/null and b/doc/gui/images/image_octa12.png differ
diff --git a/doc/gui/images/image_warping3D.jpg b/doc/gui/images/image_warping3D.jpg
new file mode 100644 (file)
index 0000000..1795d1b
Binary files /dev/null and b/doc/gui/images/image_warping3D.jpg differ
diff --git a/doc/gui/images/intersect_groups1.png b/doc/gui/images/intersect_groups1.png
new file mode 100644 (file)
index 0000000..ad2ff52
Binary files /dev/null and b/doc/gui/images/intersect_groups1.png differ
diff --git a/doc/gui/images/intersectgroups.png b/doc/gui/images/intersectgroups.png
new file mode 100644 (file)
index 0000000..8114b10
Binary files /dev/null and b/doc/gui/images/intersectgroups.png differ
diff --git a/doc/gui/images/length-crit.png b/doc/gui/images/length-crit.png
new file mode 100644 (file)
index 0000000..96836cd
Binary files /dev/null and b/doc/gui/images/length-crit.png differ
diff --git a/doc/gui/images/length2d.png b/doc/gui/images/length2d.png
new file mode 100644 (file)
index 0000000..9a5264a
Binary files /dev/null and b/doc/gui/images/length2d.png differ
diff --git a/doc/gui/images/lengthnearvertex.png b/doc/gui/images/lengthnearvertex.png
new file mode 100644 (file)
index 0000000..4a59c7b
Binary files /dev/null and b/doc/gui/images/lengthnearvertex.png differ
diff --git a/doc/gui/images/max_el_area.png b/doc/gui/images/max_el_area.png
new file mode 100644 (file)
index 0000000..88db3d6
Binary files /dev/null and b/doc/gui/images/max_el_area.png differ
diff --git a/doc/gui/images/max_element_length_2d.png b/doc/gui/images/max_element_length_2d.png
new file mode 100644 (file)
index 0000000..012d552
Binary files /dev/null and b/doc/gui/images/max_element_length_2d.png differ
diff --git a/doc/gui/images/max_element_length_3d.png b/doc/gui/images/max_element_length_3d.png
new file mode 100644 (file)
index 0000000..fdf1b76
Binary files /dev/null and b/doc/gui/images/max_element_length_3d.png differ
diff --git a/doc/gui/images/mergeelems.png b/doc/gui/images/mergeelems.png
new file mode 100644 (file)
index 0000000..f35955a
Binary files /dev/null and b/doc/gui/images/mergeelems.png differ
diff --git a/doc/gui/images/mergeelems_auto.png b/doc/gui/images/mergeelems_auto.png
new file mode 100644 (file)
index 0000000..ffbb092
Binary files /dev/null and b/doc/gui/images/mergeelems_auto.png differ
diff --git a/doc/gui/images/mergeelems_ico.png b/doc/gui/images/mergeelems_ico.png
new file mode 100644 (file)
index 0000000..1342fe8
Binary files /dev/null and b/doc/gui/images/mergeelems_ico.png differ
diff --git a/doc/gui/images/mergenodes.png b/doc/gui/images/mergenodes.png
new file mode 100644 (file)
index 0000000..2676025
Binary files /dev/null and b/doc/gui/images/mergenodes.png differ
diff --git a/doc/gui/images/mergenodes_auto.png b/doc/gui/images/mergenodes_auto.png
new file mode 100644 (file)
index 0000000..e01aacc
Binary files /dev/null and b/doc/gui/images/mergenodes_auto.png differ
diff --git a/doc/gui/images/mergenodes_ico.png b/doc/gui/images/mergenodes_ico.png
new file mode 100644 (file)
index 0000000..a0c1146
Binary files /dev/null and b/doc/gui/images/mergenodes_ico.png differ
diff --git a/doc/gui/images/merging_nodes1.png b/doc/gui/images/merging_nodes1.png
new file mode 100644 (file)
index 0000000..05c8175
Binary files /dev/null and b/doc/gui/images/merging_nodes1.png differ
diff --git a/doc/gui/images/merging_nodes2.png b/doc/gui/images/merging_nodes2.png
new file mode 100644 (file)
index 0000000..862ed17
Binary files /dev/null and b/doc/gui/images/merging_nodes2.png differ
diff --git a/doc/gui/images/mesh_clear.png b/doc/gui/images/mesh_clear.png
new file mode 100644 (file)
index 0000000..956e903
Binary files /dev/null and b/doc/gui/images/mesh_clear.png differ
diff --git a/doc/gui/images/mesh_cylinder_hexa.png b/doc/gui/images/mesh_cylinder_hexa.png
new file mode 100644 (file)
index 0000000..f95dc67
Binary files /dev/null and b/doc/gui/images/mesh_cylinder_hexa.png differ
diff --git a/doc/gui/images/mesh_deflection.png b/doc/gui/images/mesh_deflection.png
new file mode 100644 (file)
index 0000000..f9d8542
Binary files /dev/null and b/doc/gui/images/mesh_deflection.png differ
diff --git a/doc/gui/images/mesh_evaluation_succeed.png b/doc/gui/images/mesh_evaluation_succeed.png
new file mode 100644 (file)
index 0000000..b9aeb52
Binary files /dev/null and b/doc/gui/images/mesh_evaluation_succeed.png differ
diff --git a/doc/gui/images/mesh_fixedpnt.png b/doc/gui/images/mesh_fixedpnt.png
new file mode 100644 (file)
index 0000000..5d044ab
Binary files /dev/null and b/doc/gui/images/mesh_fixedpnt.png differ
diff --git a/doc/gui/images/mesh_for_extr_along_path.png b/doc/gui/images/mesh_for_extr_along_path.png
new file mode 100644 (file)
index 0000000..4ee52eb
Binary files /dev/null and b/doc/gui/images/mesh_for_extr_along_path.png differ
diff --git a/doc/gui/images/mesh_node_to_point.png b/doc/gui/images/mesh_node_to_point.png
new file mode 100644 (file)
index 0000000..e7e2866
Binary files /dev/null and b/doc/gui/images/mesh_node_to_point.png differ
diff --git a/doc/gui/images/mesh_order_123.png b/doc/gui/images/mesh_order_123.png
new file mode 100644 (file)
index 0000000..952f207
Binary files /dev/null and b/doc/gui/images/mesh_order_123.png differ
diff --git a/doc/gui/images/mesh_order_123_res.png b/doc/gui/images/mesh_order_123_res.png
new file mode 100644 (file)
index 0000000..02208a0
Binary files /dev/null and b/doc/gui/images/mesh_order_123_res.png differ
diff --git a/doc/gui/images/mesh_order_213.png b/doc/gui/images/mesh_order_213.png
new file mode 100644 (file)
index 0000000..959ca38
Binary files /dev/null and b/doc/gui/images/mesh_order_213.png differ
diff --git a/doc/gui/images/mesh_order_213_res.png b/doc/gui/images/mesh_order_213_res.png
new file mode 100644 (file)
index 0000000..8706fb4
Binary files /dev/null and b/doc/gui/images/mesh_order_213_res.png differ
diff --git a/doc/gui/images/mesh_order_321.png b/doc/gui/images/mesh_order_321.png
new file mode 100644 (file)
index 0000000..7ad61fa
Binary files /dev/null and b/doc/gui/images/mesh_order_321.png differ
diff --git a/doc/gui/images/mesh_order_321_res.png b/doc/gui/images/mesh_order_321_res.png
new file mode 100644 (file)
index 0000000..7a5f017
Binary files /dev/null and b/doc/gui/images/mesh_order_321_res.png differ
diff --git a/doc/gui/images/mesh_order_no_concurrent.png b/doc/gui/images/mesh_order_no_concurrent.png
new file mode 100644 (file)
index 0000000..6df59a1
Binary files /dev/null and b/doc/gui/images/mesh_order_no_concurrent.png differ
diff --git a/doc/gui/images/mesh_order_preview.png b/doc/gui/images/mesh_order_preview.png
new file mode 100644 (file)
index 0000000..f4b5e3b
Binary files /dev/null and b/doc/gui/images/mesh_order_preview.png differ
diff --git a/doc/gui/images/mesh_precompute.png b/doc/gui/images/mesh_precompute.png
new file mode 100644 (file)
index 0000000..dd90498
Binary files /dev/null and b/doc/gui/images/mesh_precompute.png differ
diff --git a/doc/gui/images/mesh_radquad_01.png b/doc/gui/images/mesh_radquad_01.png
new file mode 100644 (file)
index 0000000..dfd8eb5
Binary files /dev/null and b/doc/gui/images/mesh_radquad_01.png differ
diff --git a/doc/gui/images/mesh_radquad_02.png b/doc/gui/images/mesh_radquad_02.png
new file mode 100644 (file)
index 0000000..63432eb
Binary files /dev/null and b/doc/gui/images/mesh_radquad_02.png differ
diff --git a/doc/gui/images/mesh_split_diag_interactive.png b/doc/gui/images/mesh_split_diag_interactive.png
new file mode 100644 (file)
index 0000000..1342df9
Binary files /dev/null and b/doc/gui/images/mesh_split_diag_interactive.png differ
diff --git a/doc/gui/images/mesh_split_face_interactive.png b/doc/gui/images/mesh_split_face_interactive.png
new file mode 100644 (file)
index 0000000..5323e3f
Binary files /dev/null and b/doc/gui/images/mesh_split_face_interactive.png differ
diff --git a/doc/gui/images/meshcomputationfail.png b/doc/gui/images/meshcomputationfail.png
new file mode 100644 (file)
index 0000000..8d09dba
Binary files /dev/null and b/doc/gui/images/meshcomputationfail.png differ
diff --git a/doc/gui/images/meshcomputationsucceed.png b/doc/gui/images/meshcomputationsucceed.png
new file mode 100644 (file)
index 0000000..943387c
Binary files /dev/null and b/doc/gui/images/meshcomputationsucceed.png differ
diff --git a/doc/gui/images/meshcut_plugin.png b/doc/gui/images/meshcut_plugin.png
new file mode 100644 (file)
index 0000000..305e920
Binary files /dev/null and b/doc/gui/images/meshcut_plugin.png differ
diff --git a/doc/gui/images/meshexportgroupwarning.png b/doc/gui/images/meshexportgroupwarning.png
new file mode 100644 (file)
index 0000000..613cd46
Binary files /dev/null and b/doc/gui/images/meshexportgroupwarning.png differ
diff --git a/doc/gui/images/meshexportmesh.png b/doc/gui/images/meshexportmesh.png
new file mode 100644 (file)
index 0000000..f60679e
Binary files /dev/null and b/doc/gui/images/meshexportmesh.png differ
diff --git a/doc/gui/images/meshimportmesh.png b/doc/gui/images/meshimportmesh.png
new file mode 100644 (file)
index 0000000..9190987
Binary files /dev/null and b/doc/gui/images/meshimportmesh.png differ
diff --git a/doc/gui/images/meshtopass1.png b/doc/gui/images/meshtopass1.png
new file mode 100644 (file)
index 0000000..1705f5e
Binary files /dev/null and b/doc/gui/images/meshtopass1.png differ
diff --git a/doc/gui/images/meshtopass2.png b/doc/gui/images/meshtopass2.png
new file mode 100644 (file)
index 0000000..2bb53dc
Binary files /dev/null and b/doc/gui/images/meshtopass2.png differ
diff --git a/doc/gui/images/meshtopass3.png b/doc/gui/images/meshtopass3.png
new file mode 100644 (file)
index 0000000..bdbf86f
Binary files /dev/null and b/doc/gui/images/meshtopass3.png differ
diff --git a/doc/gui/images/meshtrianglemergeelem1.png b/doc/gui/images/meshtrianglemergeelem1.png
new file mode 100644 (file)
index 0000000..0f9bd52
Binary files /dev/null and b/doc/gui/images/meshtrianglemergeelem1.png differ
diff --git a/doc/gui/images/min_distance.png b/doc/gui/images/min_distance.png
new file mode 100644 (file)
index 0000000..294178f
Binary files /dev/null and b/doc/gui/images/min_distance.png differ
diff --git a/doc/gui/images/min_distance_preview.png b/doc/gui/images/min_distance_preview.png
new file mode 100644 (file)
index 0000000..c5373d9
Binary files /dev/null and b/doc/gui/images/min_distance_preview.png differ
diff --git a/doc/gui/images/movenodes.png b/doc/gui/images/movenodes.png
new file mode 100644 (file)
index 0000000..3027c76
Binary files /dev/null and b/doc/gui/images/movenodes.png differ
diff --git a/doc/gui/images/moving_nodes1.png b/doc/gui/images/moving_nodes1.png
new file mode 100644 (file)
index 0000000..295b3a3
Binary files /dev/null and b/doc/gui/images/moving_nodes1.png differ
diff --git a/doc/gui/images/moving_nodes2.png b/doc/gui/images/moving_nodes2.png
new file mode 100644 (file)
index 0000000..a89e8b3
Binary files /dev/null and b/doc/gui/images/moving_nodes2.png differ
diff --git a/doc/gui/images/number_of_layers.png b/doc/gui/images/number_of_layers.png
new file mode 100644 (file)
index 0000000..8baa821
Binary files /dev/null and b/doc/gui/images/number_of_layers.png differ
diff --git a/doc/gui/images/offset_filter_for_faces_gui.png b/doc/gui/images/offset_filter_for_faces_gui.png
new file mode 100644 (file)
index 0000000..ef39a7b
Binary files /dev/null and b/doc/gui/images/offset_filter_for_faces_gui.png differ
diff --git a/doc/gui/images/offset_mesh.png b/doc/gui/images/offset_mesh.png
new file mode 100644 (file)
index 0000000..53aaeed
Binary files /dev/null and b/doc/gui/images/offset_mesh.png differ
diff --git a/doc/gui/images/offset_mesh_from_filter.png b/doc/gui/images/offset_mesh_from_filter.png
new file mode 100644 (file)
index 0000000..a5d2402
Binary files /dev/null and b/doc/gui/images/offset_mesh_from_filter.png differ
diff --git a/doc/gui/images/opengl_clipping.png b/doc/gui/images/opengl_clipping.png
new file mode 100644 (file)
index 0000000..475151a
Binary files /dev/null and b/doc/gui/images/opengl_clipping.png differ
diff --git a/doc/gui/images/orientaation1.png b/doc/gui/images/orientaation1.png
new file mode 100644 (file)
index 0000000..b1c2ec0
Binary files /dev/null and b/doc/gui/images/orientaation1.png differ
diff --git a/doc/gui/images/over_constrained_faces.png b/doc/gui/images/over_constrained_faces.png
new file mode 100644 (file)
index 0000000..9d584e8
Binary files /dev/null and b/doc/gui/images/over_constrained_faces.png differ
diff --git a/doc/gui/images/over_constrained_volumes.png b/doc/gui/images/over_constrained_volumes.png
new file mode 100644 (file)
index 0000000..7611443
Binary files /dev/null and b/doc/gui/images/over_constrained_volumes.png differ
diff --git a/doc/gui/images/pattern2d.png b/doc/gui/images/pattern2d.png
new file mode 100644 (file)
index 0000000..ff488eb
Binary files /dev/null and b/doc/gui/images/pattern2d.png differ
diff --git a/doc/gui/images/patternmapping1.png b/doc/gui/images/patternmapping1.png
new file mode 100644 (file)
index 0000000..e0eb867
Binary files /dev/null and b/doc/gui/images/patternmapping1.png differ
diff --git a/doc/gui/images/patternmapping2.png b/doc/gui/images/patternmapping2.png
new file mode 100644 (file)
index 0000000..5c8c520
Binary files /dev/null and b/doc/gui/images/patternmapping2.png differ
diff --git a/doc/gui/images/point_marker_widget1.png b/doc/gui/images/point_marker_widget1.png
new file mode 100644 (file)
index 0000000..3d788cd
Binary files /dev/null and b/doc/gui/images/point_marker_widget1.png differ
diff --git a/doc/gui/images/point_marker_widget2.png b/doc/gui/images/point_marker_widget2.png
new file mode 100644 (file)
index 0000000..d44f388
Binary files /dev/null and b/doc/gui/images/point_marker_widget2.png differ
diff --git a/doc/gui/images/pref21.png b/doc/gui/images/pref21.png
new file mode 100644 (file)
index 0000000..b0d756f
Binary files /dev/null and b/doc/gui/images/pref21.png differ
diff --git a/doc/gui/images/pref22.png b/doc/gui/images/pref22.png
new file mode 100644 (file)
index 0000000..cf08621
Binary files /dev/null and b/doc/gui/images/pref22.png differ
diff --git a/doc/gui/images/pref23.png b/doc/gui/images/pref23.png
new file mode 100644 (file)
index 0000000..23d804b
Binary files /dev/null and b/doc/gui/images/pref23.png differ
diff --git a/doc/gui/images/pref24.png b/doc/gui/images/pref24.png
new file mode 100644 (file)
index 0000000..9a7a5a8
Binary files /dev/null and b/doc/gui/images/pref24.png differ
diff --git a/doc/gui/images/preview_mesh_1D.png b/doc/gui/images/preview_mesh_1D.png
new file mode 100644 (file)
index 0000000..3922a19
Binary files /dev/null and b/doc/gui/images/preview_mesh_1D.png differ
diff --git a/doc/gui/images/preview_mesh_2D.png b/doc/gui/images/preview_mesh_2D.png
new file mode 100644 (file)
index 0000000..55ec7b8
Binary files /dev/null and b/doc/gui/images/preview_mesh_2D.png differ
diff --git a/doc/gui/images/preview_tmp_data.png b/doc/gui/images/preview_tmp_data.png
new file mode 100644 (file)
index 0000000..6f9fb31
Binary files /dev/null and b/doc/gui/images/preview_tmp_data.png differ
diff --git a/doc/gui/images/prism_mesh.png b/doc/gui/images/prism_mesh.png
new file mode 100644 (file)
index 0000000..95a3121
Binary files /dev/null and b/doc/gui/images/prism_mesh.png differ
diff --git a/doc/gui/images/prism_needs_hyps.png b/doc/gui/images/prism_needs_hyps.png
new file mode 100644 (file)
index 0000000..d56d430
Binary files /dev/null and b/doc/gui/images/prism_needs_hyps.png differ
diff --git a/doc/gui/images/prism_ok_ko.png b/doc/gui/images/prism_ok_ko.png
new file mode 100644 (file)
index 0000000..0394985
Binary files /dev/null and b/doc/gui/images/prism_ok_ko.png differ
diff --git a/doc/gui/images/prism_stack.png b/doc/gui/images/prism_stack.png
new file mode 100644 (file)
index 0000000..bba6334
Binary files /dev/null and b/doc/gui/images/prism_stack.png differ
diff --git a/doc/gui/images/prism_tui_sample.png b/doc/gui/images/prism_tui_sample.png
new file mode 100644 (file)
index 0000000..0df7e48
Binary files /dev/null and b/doc/gui/images/prism_tui_sample.png differ
diff --git a/doc/gui/images/projection_1d.png b/doc/gui/images/projection_1d.png
new file mode 100644 (file)
index 0000000..6115327
Binary files /dev/null and b/doc/gui/images/projection_1d.png differ
diff --git a/doc/gui/images/projection_2d.png b/doc/gui/images/projection_2d.png
new file mode 100644 (file)
index 0000000..e137309
Binary files /dev/null and b/doc/gui/images/projection_2d.png differ
diff --git a/doc/gui/images/projection_3d.png b/doc/gui/images/projection_3d.png
new file mode 100644 (file)
index 0000000..03eedc3
Binary files /dev/null and b/doc/gui/images/projection_3d.png differ
diff --git a/doc/gui/images/propagation_chain.png b/doc/gui/images/propagation_chain.png
new file mode 100644 (file)
index 0000000..420dee0
Binary files /dev/null and b/doc/gui/images/propagation_chain.png differ
diff --git a/doc/gui/images/quad_from_ma_medial_axis.png b/doc/gui/images/quad_from_ma_medial_axis.png
new file mode 100644 (file)
index 0000000..b02ceab
Binary files /dev/null and b/doc/gui/images/quad_from_ma_medial_axis.png differ
diff --git a/doc/gui/images/quad_from_ma_mesh.png b/doc/gui/images/quad_from_ma_mesh.png
new file mode 100644 (file)
index 0000000..3e3c63b
Binary files /dev/null and b/doc/gui/images/quad_from_ma_mesh.png differ
diff --git a/doc/gui/images/quad_from_ma_ring_mesh.png b/doc/gui/images/quad_from_ma_ring_mesh.png
new file mode 100644 (file)
index 0000000..9a43e6d
Binary files /dev/null and b/doc/gui/images/quad_from_ma_ring_mesh.png differ
diff --git a/doc/gui/images/quad_mesh_invalid.png b/doc/gui/images/quad_mesh_invalid.png
new file mode 100644 (file)
index 0000000..cce9980
Binary files /dev/null and b/doc/gui/images/quad_mesh_invalid.png differ
diff --git a/doc/gui/images/quad_meshes.png b/doc/gui/images/quad_meshes.png
new file mode 100644 (file)
index 0000000..c6cbd0c
Binary files /dev/null and b/doc/gui/images/quad_meshes.png differ
diff --git a/doc/gui/images/radial_prism_mesh.png b/doc/gui/images/radial_prism_mesh.png
new file mode 100644 (file)
index 0000000..6d9a986
Binary files /dev/null and b/doc/gui/images/radial_prism_mesh.png differ
diff --git a/doc/gui/images/reduce_three_to_one.png b/doc/gui/images/reduce_three_to_one.png
new file mode 100644 (file)
index 0000000..d5f4a38
Binary files /dev/null and b/doc/gui/images/reduce_three_to_one.png differ
diff --git a/doc/gui/images/remove.gif b/doc/gui/images/remove.gif
new file mode 100644 (file)
index 0000000..8b81cb2
Binary files /dev/null and b/doc/gui/images/remove.gif differ
diff --git a/doc/gui/images/remove.png b/doc/gui/images/remove.png
new file mode 100644 (file)
index 0000000..cbf4069
Binary files /dev/null and b/doc/gui/images/remove.png differ
diff --git a/doc/gui/images/remove_elements1.png b/doc/gui/images/remove_elements1.png
new file mode 100644 (file)
index 0000000..538460f
Binary files /dev/null and b/doc/gui/images/remove_elements1.png differ
diff --git a/doc/gui/images/remove_elements2.png b/doc/gui/images/remove_elements2.png
new file mode 100644 (file)
index 0000000..888188c
Binary files /dev/null and b/doc/gui/images/remove_elements2.png differ
diff --git a/doc/gui/images/remove_elements_icon.png b/doc/gui/images/remove_elements_icon.png
new file mode 100644 (file)
index 0000000..2a31c3e
Binary files /dev/null and b/doc/gui/images/remove_elements_icon.png differ
diff --git a/doc/gui/images/remove_node_reconnection.png b/doc/gui/images/remove_node_reconnection.png
new file mode 100644 (file)
index 0000000..02eef9c
Binary files /dev/null and b/doc/gui/images/remove_node_reconnection.png differ
diff --git a/doc/gui/images/remove_node_reconnection_dlg.png b/doc/gui/images/remove_node_reconnection_dlg.png
new file mode 100644 (file)
index 0000000..ecc57bd
Binary files /dev/null and b/doc/gui/images/remove_node_reconnection_dlg.png differ
diff --git a/doc/gui/images/remove_node_reconnection_icon.png b/doc/gui/images/remove_node_reconnection_icon.png
new file mode 100644 (file)
index 0000000..3180b11
Binary files /dev/null and b/doc/gui/images/remove_node_reconnection_icon.png differ
diff --git a/doc/gui/images/remove_nodes1.png b/doc/gui/images/remove_nodes1.png
new file mode 100644 (file)
index 0000000..94caae6
Binary files /dev/null and b/doc/gui/images/remove_nodes1.png differ
diff --git a/doc/gui/images/remove_nodes2.png b/doc/gui/images/remove_nodes2.png
new file mode 100644 (file)
index 0000000..e9f8064
Binary files /dev/null and b/doc/gui/images/remove_nodes2.png differ
diff --git a/doc/gui/images/remove_nodes_icon.png b/doc/gui/images/remove_nodes_icon.png
new file mode 100644 (file)
index 0000000..0818837
Binary files /dev/null and b/doc/gui/images/remove_nodes_icon.png differ
diff --git a/doc/gui/images/remove_orphan_nodes_icon.png b/doc/gui/images/remove_orphan_nodes_icon.png
new file mode 100644 (file)
index 0000000..16df2e5
Binary files /dev/null and b/doc/gui/images/remove_orphan_nodes_icon.png differ
diff --git a/doc/gui/images/removeelements.png b/doc/gui/images/removeelements.png
new file mode 100644 (file)
index 0000000..78e4959
Binary files /dev/null and b/doc/gui/images/removeelements.png differ
diff --git a/doc/gui/images/removenodes.png b/doc/gui/images/removenodes.png
new file mode 100644 (file)
index 0000000..52a5ac6
Binary files /dev/null and b/doc/gui/images/removenodes.png differ
diff --git a/doc/gui/images/removeorphannodes.png b/doc/gui/images/removeorphannodes.png
new file mode 100644 (file)
index 0000000..fdf8395
Binary files /dev/null and b/doc/gui/images/removeorphannodes.png differ
diff --git a/doc/gui/images/renumberelements.png b/doc/gui/images/renumberelements.png
new file mode 100644 (file)
index 0000000..0f09c6a
Binary files /dev/null and b/doc/gui/images/renumberelements.png differ
diff --git a/doc/gui/images/renumbernodes.png b/doc/gui/images/renumbernodes.png
new file mode 100644 (file)
index 0000000..46fe28b
Binary files /dev/null and b/doc/gui/images/renumbernodes.png differ
diff --git a/doc/gui/images/reorient_2d_face.png b/doc/gui/images/reorient_2d_face.png
new file mode 100644 (file)
index 0000000..0407faf
Binary files /dev/null and b/doc/gui/images/reorient_2d_face.png differ
diff --git a/doc/gui/images/reorient_2d_point.png b/doc/gui/images/reorient_2d_point.png
new file mode 100644 (file)
index 0000000..8440c91
Binary files /dev/null and b/doc/gui/images/reorient_2d_point.png differ
diff --git a/doc/gui/images/reorient_2d_refgroup.png b/doc/gui/images/reorient_2d_refgroup.png
new file mode 100644 (file)
index 0000000..f080f46
Binary files /dev/null and b/doc/gui/images/reorient_2d_refgroup.png differ
diff --git a/doc/gui/images/reorient_2d_volume.png b/doc/gui/images/reorient_2d_volume.png
new file mode 100644 (file)
index 0000000..1d04de0
Binary files /dev/null and b/doc/gui/images/reorient_2d_volume.png differ
diff --git a/doc/gui/images/reorient_faces_face.png b/doc/gui/images/reorient_faces_face.png
new file mode 100644 (file)
index 0000000..23c241f
Binary files /dev/null and b/doc/gui/images/reorient_faces_face.png differ
diff --git a/doc/gui/images/reorient_faces_point.png b/doc/gui/images/reorient_faces_point.png
new file mode 100644 (file)
index 0000000..63fae72
Binary files /dev/null and b/doc/gui/images/reorient_faces_point.png differ
diff --git a/doc/gui/images/reorient_faces_ref_groups.png b/doc/gui/images/reorient_faces_ref_groups.png
new file mode 100644 (file)
index 0000000..f9cf53b
Binary files /dev/null and b/doc/gui/images/reorient_faces_ref_groups.png differ
diff --git a/doc/gui/images/reorient_faces_volume.png b/doc/gui/images/reorient_faces_volume.png
new file mode 100644 (file)
index 0000000..e58bdb6
Binary files /dev/null and b/doc/gui/images/reorient_faces_volume.png differ
diff --git a/doc/gui/images/rev_edges_helper_dlg.png b/doc/gui/images/rev_edges_helper_dlg.png
new file mode 100644 (file)
index 0000000..e8790a1
Binary files /dev/null and b/doc/gui/images/rev_edges_helper_dlg.png differ
diff --git a/doc/gui/images/revolution1.png b/doc/gui/images/revolution1.png
new file mode 100644 (file)
index 0000000..18928d1
Binary files /dev/null and b/doc/gui/images/revolution1.png differ
diff --git a/doc/gui/images/revolutionsn1.png b/doc/gui/images/revolutionsn1.png
new file mode 100644 (file)
index 0000000..3e7a7a1
Binary files /dev/null and b/doc/gui/images/revolutionsn1.png differ
diff --git a/doc/gui/images/revolutionsn2.png b/doc/gui/images/revolutionsn2.png
new file mode 100644 (file)
index 0000000..064dd6c
Binary files /dev/null and b/doc/gui/images/revolutionsn2.png differ
diff --git a/doc/gui/images/rotation.png b/doc/gui/images/rotation.png
new file mode 100644 (file)
index 0000000..c8f11e6
Binary files /dev/null and b/doc/gui/images/rotation.png differ
diff --git a/doc/gui/images/rotation1.png b/doc/gui/images/rotation1.png
new file mode 100644 (file)
index 0000000..5a4ad99
Binary files /dev/null and b/doc/gui/images/rotation1.png differ
diff --git a/doc/gui/images/rotation2.png b/doc/gui/images/rotation2.png
new file mode 100644 (file)
index 0000000..366771a
Binary files /dev/null and b/doc/gui/images/rotation2.png differ
diff --git a/doc/gui/images/rotation_ico.png b/doc/gui/images/rotation_ico.png
new file mode 100644 (file)
index 0000000..8f3d4bf
Binary files /dev/null and b/doc/gui/images/rotation_ico.png differ
diff --git a/doc/gui/images/scalar_bar_dlg.png b/doc/gui/images/scalar_bar_dlg.png
new file mode 100644 (file)
index 0000000..564689a
Binary files /dev/null and b/doc/gui/images/scalar_bar_dlg.png differ
diff --git a/doc/gui/images/scale01.png b/doc/gui/images/scale01.png
new file mode 100644 (file)
index 0000000..685bbc1
Binary files /dev/null and b/doc/gui/images/scale01.png differ
diff --git a/doc/gui/images/scale02.png b/doc/gui/images/scale02.png
new file mode 100644 (file)
index 0000000..982f468
Binary files /dev/null and b/doc/gui/images/scale02.png differ
diff --git a/doc/gui/images/scale03.png b/doc/gui/images/scale03.png
new file mode 100644 (file)
index 0000000..891ae8d
Binary files /dev/null and b/doc/gui/images/scale03.png differ
diff --git a/doc/gui/images/scale04.png b/doc/gui/images/scale04.png
new file mode 100644 (file)
index 0000000..a042834
Binary files /dev/null and b/doc/gui/images/scale04.png differ
diff --git a/doc/gui/images/scale06.png b/doc/gui/images/scale06.png
new file mode 100644 (file)
index 0000000..2bd8219
Binary files /dev/null and b/doc/gui/images/scale06.png differ
diff --git a/doc/gui/images/scale07.png b/doc/gui/images/scale07.png
new file mode 100644 (file)
index 0000000..8ee0923
Binary files /dev/null and b/doc/gui/images/scale07.png differ
diff --git a/doc/gui/images/scale09.png b/doc/gui/images/scale09.png
new file mode 100644 (file)
index 0000000..2816bac
Binary files /dev/null and b/doc/gui/images/scale09.png differ
diff --git a/doc/gui/images/scaled_jacobian.png b/doc/gui/images/scaled_jacobian.png
new file mode 100644 (file)
index 0000000..e25a7fa
Binary files /dev/null and b/doc/gui/images/scaled_jacobian.png differ
diff --git a/doc/gui/images/scaled_jacobian_hexa.png b/doc/gui/images/scaled_jacobian_hexa.png
new file mode 100644 (file)
index 0000000..b05f8dc
Binary files /dev/null and b/doc/gui/images/scaled_jacobian_hexa.png differ
diff --git a/doc/gui/images/scaled_jacobian_mesh_hexa.png b/doc/gui/images/scaled_jacobian_mesh_hexa.png
new file mode 100644 (file)
index 0000000..4c88186
Binary files /dev/null and b/doc/gui/images/scaled_jacobian_mesh_hexa.png differ
diff --git a/doc/gui/images/scaled_jacobian_tetra.png b/doc/gui/images/scaled_jacobian_tetra.png
new file mode 100644 (file)
index 0000000..5761c37
Binary files /dev/null and b/doc/gui/images/scaled_jacobian_tetra.png differ
diff --git a/doc/gui/images/scaleinit01.png b/doc/gui/images/scaleinit01.png
new file mode 100644 (file)
index 0000000..97990a8
Binary files /dev/null and b/doc/gui/images/scaleinit01.png differ
diff --git a/doc/gui/images/scaleinit02.png b/doc/gui/images/scaleinit02.png
new file mode 100644 (file)
index 0000000..008d2e3
Binary files /dev/null and b/doc/gui/images/scaleinit02.png differ
diff --git a/doc/gui/images/scaleres03.png b/doc/gui/images/scaleres03.png
new file mode 100644 (file)
index 0000000..99b65d7
Binary files /dev/null and b/doc/gui/images/scaleres03.png differ
diff --git a/doc/gui/images/scaleres04.png b/doc/gui/images/scaleres04.png
new file mode 100644 (file)
index 0000000..0880989
Binary files /dev/null and b/doc/gui/images/scaleres04.png differ
diff --git a/doc/gui/images/scaleres06.png b/doc/gui/images/scaleres06.png
new file mode 100644 (file)
index 0000000..059fa97
Binary files /dev/null and b/doc/gui/images/scaleres06.png differ
diff --git a/doc/gui/images/scaleres07.png b/doc/gui/images/scaleres07.png
new file mode 100644 (file)
index 0000000..b75f83c
Binary files /dev/null and b/doc/gui/images/scaleres07.png differ
diff --git a/doc/gui/images/scaleres09.png b/doc/gui/images/scaleres09.png
new file mode 100644 (file)
index 0000000..4708be5
Binary files /dev/null and b/doc/gui/images/scaleres09.png differ
diff --git a/doc/gui/images/selectionfilterlibrary.png b/doc/gui/images/selectionfilterlibrary.png
new file mode 100644 (file)
index 0000000..38f297b
Binary files /dev/null and b/doc/gui/images/selectionfilterlibrary.png differ
diff --git a/doc/gui/images/sew_after_merge.png b/doc/gui/images/sew_after_merge.png
new file mode 100644 (file)
index 0000000..43d6869
Binary files /dev/null and b/doc/gui/images/sew_after_merge.png differ
diff --git a/doc/gui/images/sew_using_merge.png b/doc/gui/images/sew_using_merge.png
new file mode 100644 (file)
index 0000000..80cc44c
Binary files /dev/null and b/doc/gui/images/sew_using_merge.png differ
diff --git a/doc/gui/images/sewing.png b/doc/gui/images/sewing.png
new file mode 100644 (file)
index 0000000..fcd2dfd
Binary files /dev/null and b/doc/gui/images/sewing.png differ
diff --git a/doc/gui/images/sewing1.png b/doc/gui/images/sewing1.png
new file mode 100644 (file)
index 0000000..55e0d83
Binary files /dev/null and b/doc/gui/images/sewing1.png differ
diff --git a/doc/gui/images/sewing2.png b/doc/gui/images/sewing2.png
new file mode 100644 (file)
index 0000000..2ba3e43
Binary files /dev/null and b/doc/gui/images/sewing2.png differ
diff --git a/doc/gui/images/sewing3.png b/doc/gui/images/sewing3.png
new file mode 100644 (file)
index 0000000..d2d97d5
Binary files /dev/null and b/doc/gui/images/sewing3.png differ
diff --git a/doc/gui/images/sewing4.png b/doc/gui/images/sewing4.png
new file mode 100644 (file)
index 0000000..ad66682
Binary files /dev/null and b/doc/gui/images/sewing4.png differ
diff --git a/doc/gui/images/sewing_auto.png b/doc/gui/images/sewing_auto.png
new file mode 100644 (file)
index 0000000..f81cfe2
Binary files /dev/null and b/doc/gui/images/sewing_auto.png differ
diff --git a/doc/gui/images/sewing_manual.png b/doc/gui/images/sewing_manual.png
new file mode 100644 (file)
index 0000000..ff125bc
Binary files /dev/null and b/doc/gui/images/sewing_manual.png differ
diff --git a/doc/gui/images/show_bad_mesh.png b/doc/gui/images/show_bad_mesh.png
new file mode 100644 (file)
index 0000000..9c17681
Binary files /dev/null and b/doc/gui/images/show_bad_mesh.png differ
diff --git a/doc/gui/images/smesh_sort.png b/doc/gui/images/smesh_sort.png
new file mode 100644 (file)
index 0000000..0b00568
Binary files /dev/null and b/doc/gui/images/smesh_sort.png differ
diff --git a/doc/gui/images/smesh_sort_groups.png b/doc/gui/images/smesh_sort_groups.png
new file mode 100644 (file)
index 0000000..0176a30
Binary files /dev/null and b/doc/gui/images/smesh_sort_groups.png differ
diff --git a/doc/gui/images/smoothing.png b/doc/gui/images/smoothing.png
new file mode 100644 (file)
index 0000000..26a427e
Binary files /dev/null and b/doc/gui/images/smoothing.png differ
diff --git a/doc/gui/images/smoothing1.png b/doc/gui/images/smoothing1.png
new file mode 100644 (file)
index 0000000..567bab5
Binary files /dev/null and b/doc/gui/images/smoothing1.png differ
diff --git a/doc/gui/images/smoothing2.png b/doc/gui/images/smoothing2.png
new file mode 100644 (file)
index 0000000..45ce704
Binary files /dev/null and b/doc/gui/images/smoothing2.png differ
diff --git a/doc/gui/images/sort.gif b/doc/gui/images/sort.gif
new file mode 100644 (file)
index 0000000..28a5dff
Binary files /dev/null and b/doc/gui/images/sort.gif differ
diff --git a/doc/gui/images/sort.png b/doc/gui/images/sort.png
new file mode 100644 (file)
index 0000000..1dcf44a
Binary files /dev/null and b/doc/gui/images/sort.png differ
diff --git a/doc/gui/images/split_biquad_to_linear_dlg.png b/doc/gui/images/split_biquad_to_linear_dlg.png
new file mode 100644 (file)
index 0000000..c3df009
Binary files /dev/null and b/doc/gui/images/split_biquad_to_linear_dlg.png differ
diff --git a/doc/gui/images/split_biquad_to_linear_icon.png b/doc/gui/images/split_biquad_to_linear_icon.png
new file mode 100644 (file)
index 0000000..0b9b7a0
Binary files /dev/null and b/doc/gui/images/split_biquad_to_linear_icon.png differ
diff --git a/doc/gui/images/split_biquad_to_linear_mesh.png b/doc/gui/images/split_biquad_to_linear_mesh.png
new file mode 100644 (file)
index 0000000..4a25e8f
Binary files /dev/null and b/doc/gui/images/split_biquad_to_linear_mesh.png differ
diff --git a/doc/gui/images/split_into_prisms.png b/doc/gui/images/split_into_prisms.png
new file mode 100644 (file)
index 0000000..6d48e69
Binary files /dev/null and b/doc/gui/images/split_into_prisms.png differ
diff --git a/doc/gui/images/split_into_tetra.png b/doc/gui/images/split_into_tetra.png
new file mode 100644 (file)
index 0000000..a54f445
Binary files /dev/null and b/doc/gui/images/split_into_tetra.png differ
diff --git a/doc/gui/images/split_into_tetra_icon.png b/doc/gui/images/split_into_tetra_icon.png
new file mode 100644 (file)
index 0000000..c9ea7b4
Binary files /dev/null and b/doc/gui/images/split_into_tetra_icon.png differ
diff --git a/doc/gui/images/std_point_marker.png b/doc/gui/images/std_point_marker.png
new file mode 100644 (file)
index 0000000..2a62693
Binary files /dev/null and b/doc/gui/images/std_point_marker.png differ
diff --git a/doc/gui/images/straight_after.png b/doc/gui/images/straight_after.png
new file mode 100644 (file)
index 0000000..4572fea
Binary files /dev/null and b/doc/gui/images/straight_after.png differ
diff --git a/doc/gui/images/straight_before.png b/doc/gui/images/straight_before.png
new file mode 100644 (file)
index 0000000..200aad8
Binary files /dev/null and b/doc/gui/images/straight_before.png differ
diff --git a/doc/gui/images/swap.png b/doc/gui/images/swap.png
new file mode 100644 (file)
index 0000000..6470710
Binary files /dev/null and b/doc/gui/images/swap.png differ
diff --git a/doc/gui/images/symmetry.png b/doc/gui/images/symmetry.png
new file mode 100644 (file)
index 0000000..64fd26c
Binary files /dev/null and b/doc/gui/images/symmetry.png differ
diff --git a/doc/gui/images/symmetry1.png b/doc/gui/images/symmetry1.png
new file mode 100644 (file)
index 0000000..879a41d
Binary files /dev/null and b/doc/gui/images/symmetry1.png differ
diff --git a/doc/gui/images/symmetry2.png b/doc/gui/images/symmetry2.png
new file mode 100644 (file)
index 0000000..83d2338
Binary files /dev/null and b/doc/gui/images/symmetry2.png differ
diff --git a/doc/gui/images/symmetry3.png b/doc/gui/images/symmetry3.png
new file mode 100644 (file)
index 0000000..8654659
Binary files /dev/null and b/doc/gui/images/symmetry3.png differ
diff --git a/doc/gui/images/topo_equality.png b/doc/gui/images/topo_equality.png
new file mode 100644 (file)
index 0000000..119251a
Binary files /dev/null and b/doc/gui/images/topo_equality.png differ
diff --git a/doc/gui/images/translation.png b/doc/gui/images/translation.png
new file mode 100644 (file)
index 0000000..2362d79
Binary files /dev/null and b/doc/gui/images/translation.png differ
diff --git a/doc/gui/images/translation1.png b/doc/gui/images/translation1.png
new file mode 100644 (file)
index 0000000..790e365
Binary files /dev/null and b/doc/gui/images/translation1.png differ
diff --git a/doc/gui/images/translation2.png b/doc/gui/images/translation2.png
new file mode 100644 (file)
index 0000000..5df23cc
Binary files /dev/null and b/doc/gui/images/translation2.png differ
diff --git a/doc/gui/images/union_groups1.png b/doc/gui/images/union_groups1.png
new file mode 100644 (file)
index 0000000..598c33d
Binary files /dev/null and b/doc/gui/images/union_groups1.png differ
diff --git a/doc/gui/images/uniongroups.png b/doc/gui/images/uniongroups.png
new file mode 100644 (file)
index 0000000..831f3cf
Binary files /dev/null and b/doc/gui/images/uniongroups.png differ
diff --git a/doc/gui/images/unionoftwotriangles.png b/doc/gui/images/unionoftwotriangles.png
new file mode 100644 (file)
index 0000000..e897cfa
Binary files /dev/null and b/doc/gui/images/unionoftwotriangles.png differ
diff --git a/doc/gui/images/uniting_a_set_of_triangles1.png b/doc/gui/images/uniting_a_set_of_triangles1.png
new file mode 100644 (file)
index 0000000..fb00167
Binary files /dev/null and b/doc/gui/images/uniting_a_set_of_triangles1.png differ
diff --git a/doc/gui/images/uniting_a_set_of_triangles2.png b/doc/gui/images/uniting_a_set_of_triangles2.png
new file mode 100644 (file)
index 0000000..16d1351
Binary files /dev/null and b/doc/gui/images/uniting_a_set_of_triangles2.png differ
diff --git a/doc/gui/images/uniting_two_triangles1.png b/doc/gui/images/uniting_two_triangles1.png
new file mode 100644 (file)
index 0000000..e94be3a
Binary files /dev/null and b/doc/gui/images/uniting_two_triangles1.png differ
diff --git a/doc/gui/images/uniting_two_triangles2.png b/doc/gui/images/uniting_two_triangles2.png
new file mode 100644 (file)
index 0000000..5cac5f5
Binary files /dev/null and b/doc/gui/images/uniting_two_triangles2.png differ
diff --git a/doc/gui/images/use_existing_face_sample_mesh.png b/doc/gui/images/use_existing_face_sample_mesh.png
new file mode 100644 (file)
index 0000000..2110540
Binary files /dev/null and b/doc/gui/images/use_existing_face_sample_mesh.png differ
diff --git a/doc/gui/images/using_notebook_smesh.png b/doc/gui/images/using_notebook_smesh.png
new file mode 100644 (file)
index 0000000..0946bff
Binary files /dev/null and b/doc/gui/images/using_notebook_smesh.png differ
diff --git a/doc/gui/images/viscous_layers_2d_hyp.png b/doc/gui/images/viscous_layers_2d_hyp.png
new file mode 100644 (file)
index 0000000..f9b952f
Binary files /dev/null and b/doc/gui/images/viscous_layers_2d_hyp.png differ
diff --git a/doc/gui/images/viscous_layers_extrusion_method.png b/doc/gui/images/viscous_layers_extrusion_method.png
new file mode 100644 (file)
index 0000000..cf6fe21
Binary files /dev/null and b/doc/gui/images/viscous_layers_extrusion_method.png differ
diff --git a/doc/gui/images/viscous_layers_hyp.png b/doc/gui/images/viscous_layers_hyp.png
new file mode 100644 (file)
index 0000000..b7bbffb
Binary files /dev/null and b/doc/gui/images/viscous_layers_hyp.png differ
diff --git a/doc/gui/images/viscous_layers_mesh.png b/doc/gui/images/viscous_layers_mesh.png
new file mode 100644 (file)
index 0000000..9373a5e
Binary files /dev/null and b/doc/gui/images/viscous_layers_mesh.png differ
diff --git a/doc/gui/images/viscous_layers_on_submesh.png b/doc/gui/images/viscous_layers_on_submesh.png
new file mode 100644 (file)
index 0000000..3897baa
Binary files /dev/null and b/doc/gui/images/viscous_layers_on_submesh.png differ
diff --git a/doc/gui/input/1d_meshing_hypo.rst b/doc/gui/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/gui/input/2d_meshing_hypo.rst b/doc/gui/input/2d_meshing_hypo.rst
new file mode 100644 (file)
index 0000000..f3987d7
--- /dev/null
@@ -0,0 +1,175 @@
+.. _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
+#####################
+
+**Quadrangle parameters** is a hypothesis for :ref:`quad_ijk_algo_page`.
+
+Quadrangle parameters dialog includes four tab pages:
+
+- :ref:`Transition <transition_anchor>`
+- :ref:`Base vertex <base_vertex_anchor>`
+- :ref:`Corner Vertices <corner_vertices_anchor>`
+- :ref:`Enforced nodes <enforced_nodes_anchor>`
+
+.. _transition_anchor:
+
+Transition tab
+--------------
+
+.. image:: ../images/ hypo_quad_params_dialog.png 
+       :align: center
+
+.. centered::
+       Quadrangle parameters: Transition
+
+**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_anchor:
+
+Base vertex tab
+---------------
+
+.. image:: ../images/ hypo_quad_params_dialog_vert.png 
+       :align: center
+
+.. centered::
+       Quadrangle parameters: Base Vertex
+
+**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_1.png 
+       :align: center
+
+.. centered::
+       A face built from 3 edges and 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). 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_2.png 
+       :align: center
+
+.. centered:: 
+       3/4 of a circular face and the resulting meshes
+
+
+.. _corner_vertices_anchor:
+
+Corner Vertices tab
+-------------------
+
+.. image:: ../images/hypo_quad_params_dialog_corners.png 
+       :align: center
+
+.. centered::
+       Quadrangle parameters: Corner Vertices
+
+**Corner Vertices** tab page allows specifying vertices that should be used as quadrangle corners. This can be useful for faces with more than four vertices, since in some cases Quadrangle Mapping algorithm chooses corner vertices differently than it is desired. **Quadrangle parameters** hypothesis can be global and define corners for all CAD faces that require it, but be sure that each specified vertex is a corner in all faces the hypothesis will be applied to.
+
+
+.. _enforced_nodes_anchor:
+
+Enforced nodes tab
+------------------
+
+.. 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/gui/input/3d_meshing_hypo.rst b/doc/gui/input/3d_meshing_hypo.rst
new file mode 100644 (file)
index 0000000..bef317c
--- /dev/null
@@ -0,0 +1,42 @@
+.. _a3d_meshing_hypo_page:
+
+*********************
+3D Meshing Hypotheses
+*********************
+
+.. _max_element_volume_hypo:
+
+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.  
+
+.. _block_renumber_hypo:
+
+Renumber hypothesis
+###################
+
+**Renumber** hypothesis is applied for meshing of 3D objects along with **Hexahedron (i,j,k)** algorithm.
+
+Order and hence numbering of hexahedral elements in the structured mesh generated by **Hexahedron (ijk)** algorithm depends on the order of faces in a block geometry. Nodes are not in a structured order, since geometrical edges and faces are discretized before construction of hexahedra. **Renumber** hypothesis allows for getting hexahedra and nodes ordered like in a structured grid.
+
+.. image:: ../images/block_renumber_hyp.png
+       :align: center
+
+**Renumber** hypothesis allows to define direction of **i, j** and **k** axes of a block. For that you specify two vertices of the block
+
+* **Vertex (0,0,0)** located at the origin of the block local coordinate system.
+* **Vertex (0,0,1)** located at the end of **k** axis of the block.
+
+Axes **i** and **j** are found automatically using the right-hand rule.
+
+For blocks with edges parallel to the axes of global coordinate system, their local coordinate system by default is defined as having axes parallel to the global ones. So, for such blocks specification of vertices is optional, it is enough just to assign **Renumber** hypothesis.
+
+**See Also** a sample TUI Script of a :ref:`tui_block_renumber` operation.  
+
+
diff --git a/doc/gui/input/StdMeshersBuilder.rst b/doc/gui/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/gui/input/about_filters.rst b/doc/gui/input/about_filters.rst
new file mode 100644 (file)
index 0000000..c2cfce9
--- /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 functionality 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/gui/input/about_hypo.rst b/doc/gui/input/about_hypo.rst
new file mode 100644 (file)
index 0000000..a4609d9
--- /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:`a3d_meshing_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_meshing_hypo.rst
+   additional_hypo.rst 
+
diff --git a/doc/gui/input/about_meshes.rst b/doc/gui/input/about_meshes.rst
new file mode 100644 (file)
index 0000000..6350eea
--- /dev/null
@@ -0,0 +1,91 @@
+.. _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 and GMF 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.
+
+* A new mesh can be created from the gernation of the :ref:`dual <create_dual_mesh_page>` of a Tetrahedron 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  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.
+
+A work in progress allow you to compute your mesh in parralle :ref:`Parallel Computing<parallel_compute>`
+
+
+**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
+   create_dual_mesh.rst
+   connectivity.rst
+   parallel_compute.rst
diff --git a/doc/gui/input/about_quality_controls.rst b/doc/gui/input/about_quality_controls.rst
new file mode 100644 (file)
index 0000000..1c48d16
--- /dev/null
@@ -0,0 +1,106 @@
+.. _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:`deflection_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:`warping_3d_page`
+* :ref:`max_element_length_3d_page`
+* :ref:`scaled_jacobian_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
+       deflection_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
+       warping_3d.rst
+       bare_border_volumes.rst
+       over_constrained_volumes.rst
+       scalar_bar.rst
+       scaled_jacobian.rst
\ No newline at end of file
diff --git a/doc/gui/input/adaptation.rst b/doc/gui/input/adaptation.rst
new file mode 100644 (file)
index 0000000..ceac1c9
--- /dev/null
@@ -0,0 +1,87 @@
+.. _adaptation_page:
+
+**********
+Adaptation
+**********
+
+Mesh module provides the possibility to perform different adaptations of a mesh.
+To refine the mesh means to cut out elements indicated according to indications provided by the user.
+
+.. _homard_adapt_anchor:
+
+HOMARD
+######
+
+HOMARD can treat meshes into 2 or 3 dimensions and comprising the following elements:
+   - mesh-points
+   - segments
+   - triangles
+   - quadrangles
+   - tetrahedra
+   - hexahedra
+   - prisms
+
+These elements can be present simultaneously. For example, HOMARD will be able to adapt a comprising mesh of the triangles and the quadrangles.
+
+To start operation, select **Remesh with HOMARD** item in **Adaptation** menu.
+
+.. image:: ../images/adaptation_with_homard_arguments.png
+  :align: center
+
+* **Mesh In** is the initial mesh to remesh.
+* **Mesh Out** is the resulting mesh after remeshing. By default, the name of the initial mesh is kept and the file name is based on the name of the initial mesh.
+* **Conformity type** is a choice between **Conformal** and **Non conformal**.
+* **Boundary type** is a choice between **No boundary**, **CAO** and **Non CAO**.
+
+- If the choice is **CAO**, a XAO file is required for each CAO boundary creation.
+
+.. image:: ../images/adaptation_with_homard_boundary_cao.png
+  :align: center
+
+**See more** at :ref:`homard_create_boundary_CAO`.
+
+- If the choice is **Non CAO**, some discrete and/or analytical boundaries can be created.
+
+.. image:: ../images/adaptation_with_homard_boundary_discrete.png
+  :align: center
+
+**See more** at :ref:`homard_create_boundary_Di`.
+
+.. image:: ../images/adaptation_with_homard_boundary_analytical.png
+  :align: center
+
+**See more** at :ref:`homard_create_boundary_An`.
+
+.. note::
+  The exhaustive description of HOMARD can be read into its documentation. It can be reached by the general help button.
+
+**See Also** a sample TUI Script of adaptation with :ref:`tui_homard_adapt`.
+
+
+.. _mg_adapt_anchor:
+
+MG_Adapt
+########
+
+For meshes made of triangles and/or tetrahedra, remeshing operations are available with the MG-Adapt plugin. The remeshing is based on wanted mesh sizes defined over the mesh or as a constant. The boundaries are dedeuced from the initial mesh.
+
+To start **Remeshing** operation, select **Remesh with MG_Adapt** item in **Adaptation** menu.
+
+.. image:: ../images/adaptation_01.png
+  :align: center
+
+
+* **Mesh In** is the initial mesh to remesh.
+* **Mesh Out** is the resulting mesh after remeshing. By default, the name of the initial mesh is kept and the file name is based on the name of the initial mesh.
+* **Size map definition** is a choice between **Local**, **Background** and **Constant**.
+
+- If the choice is **Background**, the name of the MED file must be given.
+- If the choice is **Local** or **Background**, the name of the field must be selected from the list, together with time step.
+
+.. image:: ../images/adaptation_02.png
+  :align: center
+
+.. note::
+  The exhaustive description of MG-Adapt can be read into its documentation. It can be reached by the general help button.
+
+**See Also** a sample TUI Script of :ref:`tui_adaptation_page`.
diff --git a/doc/gui/input/add_node_on_face.rst b/doc/gui/input/add_node_on_face.rst
new file mode 100644 (file)
index 0000000..1b7cddf
--- /dev/null
@@ -0,0 +1,37 @@
+.. _add_node_on_face_page:
+
+*****************************
+Cutting a face into triangles
+*****************************
+
+This operation cuts a face into triangles by adding a node on the face and connecting the new node with face nodes.
+
+   .. image:: ../images/add_node_on_face.png
+      :align: center
+
+*To cut a face:*
+
+.. |img| image:: ../images/mesh_split_face_interactive.png
+
+#. Select a mesh and display it in the 3D Viewer.
+#. In the **Modification** menu select the **Add node to triangle** item or click *"Add node to triangle"* button |img| in the toolbar.
+
+   The following dialog box will appear:
+
+      .. image:: ../images/add_node_on_face-dlg.png
+         :align: center
+                  
+                  
+#. Enter an **ID** of the face to split either by picking it in the 3D viewer or by typing its ID.
+   
+#. Press *Selection* button in **Node location by mouse click** group to activate specifying location of a new node. You can specify it
+
+       * by clicking with your mouse on the face in the Viewer,
+       * by typing coordinates in **X, Y, Z** fields,
+       * by setting coordinates using arrows of spin boxes.
+
+#. Activate **Preview** to see a result of the operation.
+
+#. Click the **Apply** or **Apply and Close** button to confirm the operation.
+
+**See Also** a sample TUI Script of a :ref:`tui_cutting_triangles` operation.  
diff --git a/doc/gui/input/add_node_on_segment.rst b/doc/gui/input/add_node_on_segment.rst
new file mode 100644 (file)
index 0000000..9ab16bb
--- /dev/null
@@ -0,0 +1,37 @@
+.. _add_node_on_segment_page:
+
+*****************
+Cutting triangles
+*****************
+
+This operation cuts triangles into two by adding a node on an edge bounding these triangles.
+
+   .. image:: ../images/add_node_on_segment.png
+      :align: center
+
+*To cut triangles:*
+
+.. |img| image:: ../images/mesh_split_diag_interactive.png
+
+#. Select a mesh and display it in the 3D Viewer.
+#. In the **Modification** menu select the **Add node on segment** item or click *"Add node on segment"* button |img| in the toolbar.
+
+   The following dialog box will appear:
+
+      .. image:: ../images/add_node_on_segment-dlg.png
+         :align: center
+                  
+                  
+#. Enter IDs of nodes forming the edge in the **Edge** field (the node IDs must be separated by a dash) or select the edge in the 3D viewer.
+   
+#. Enter location of a new node on the edge which is defined as a real number in the range between 0.0 and 1.0. You can define it
+
+       * by clicking with your mouse on the edge in the Viewer,
+       * by typing a number in a field,
+       * by setting a number using arrows of a spin box.
+
+#. Activate **Preview** to see a result of the operation.
+
+#. Click the **Apply** or **Apply and Close** button to confirm the operation.
+
+**See Also** a sample TUI Script of a :ref:`tui_cutting_triangles` operation.  
diff --git a/doc/gui/input/adding_nodes_and_elements.rst b/doc/gui/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/gui/input/adding_quadratic_elements.rst b/doc/gui/input/adding_quadratic_elements.rst
new file mode 100644 (file)
index 0000000..b706aa7
--- /dev/null
@@ -0,0 +1,45 @@
+                                    
+.. _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. 
+
+#. 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/gui/input/additional_hypo.rst b/doc/gui/input/additional_hypo.rst
new file mode 100644 (file)
index 0000000..21c42ea
--- /dev/null
@@ -0,0 +1,190 @@
+.. _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
+(NETGEN_2D), 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.
+
+* **Create groups from layers** - activates creation of a group containing elements of the layers.
+
+  .. 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`.
+
+.. _viscous_layers_api_anchor:
+
+Viscous Layers API
+####################################
+
+The Viscous layer API is available on TUI. Allows to compute a shrink version of the geometry. This shrank version can be passed to any mesher and be used to
+build the viscous layer from the mesh computed in the shrank geometry. The current implementation only support the **Face offset** method to extrude the 
+nodes from the shrank mesh to the original geometry. 
+
+This implementation supports 3D (Solids and Solid Compound) and 2D (Face) geometries. For the 3D case, the faces Ids are
+used to identify the faces (perpendicular to it) where the solid is to be reduced. For the 2D case, the edges Ids can be provided but will not have any effect
+on the geometry computation (this control is not available in the opencascade library), therefore, for this case the entire face is shrank.
+
+The Viscous Layer API receive the same parameters as the Viscous Layers Hypothesis and implements four methods:
+
+* The constructor ``ViscousLayerBuilder()``
+* The parameters definitions ``setBuilderParameters(...)``
+* The ``GetShrinkGeometry()`` method that returns the shrink version of the original geomtry.
+* The ``AddLayers( shrinkMesh )`` method that returns the complet version of the mesh (shrink+viscous layer)
+
+**See also** a sample TUI script of a :ref:`tui_viscous_layers_api`.
+
+.. _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/gui/input/area.rst b/doc/gui/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/gui/input/aspect_ratio.rst b/doc/gui/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/gui/input/aspect_ratio_3d.rst b/doc/gui/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/gui/input/bare_border_face.rst b/doc/gui/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/gui/input/bare_border_volumes.rst b/doc/gui/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/gui/input/basic_meshing_algos.rst b/doc/gui/input/basic_meshing_algos.rst
new file mode 100644 (file)
index 0000000..b0df708
--- /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 (menu **Help / User's Guide / Mesh module / Plugins**).
+
+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**):
+
+  * :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.
+   * **Polyhedron per Solid** meshing algorithm - generates one mesh volume (of a classical type or a polyhedron) per a geometrical solid using all faces of the solid boundary. It does not require that 2D mesh is generated on geometrical faces. It creates one mesh edge per geometrical edges and applies **Polygon per Face** to faces if they are not meshed by optional algorithms of lower dimensions.
+   * :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/gui/input/borders_at_multi_connection.rst b/doc/gui/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/gui/input/borders_at_multi_connection_2d.rst b/doc/gui/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/gui/input/building_compounds.rst b/doc/gui/input/building_compounds.rst
new file mode 100644 (file)
index 0000000..f7d41d1
--- /dev/null
@@ -0,0 +1,52 @@
+.. _building_compounds_page:
+
+************************
+Building Compound Meshes
+************************
+
+Compound Mesh is a combination of several mesh objects (meshes, groups, submeshes). 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 mesh objects.
+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.
+
+There are two modes of building a compound:
+
+* joining selected mesh objects into a new mesh.
+* appending selected mesh objects to an existing 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
+
+* **Result** group allows selecting a mode of operation
+
+  * Activating **Create new mesh named** enables typing the name of the resulting compound mesh.
+  * Activating **Append to mesh** enables selection of a mesh to append other selected objects to.
+   
+* **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/gui/input/cartesian_algo.rst b/doc/gui/input/cartesian_algo.rst
new file mode 100644 (file)
index 0000000..199f304
--- /dev/null
@@ -0,0 +1,95 @@
+.. _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. The algorithm supports construction of 
+:ref:`viscous boundary layers<cartesian_VL_anchor>` (use 
+:ref:`Viscous Layers hypothesis <viscous_layers_anchor>` to define them).
+
+.. 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.  
+
+.. _cartesian_VL_anchor:
+
+**Viscous boundary layers** are constructed as follows:
+
+   * create an offset geometry with offset value equal to full layers thickness by using BRepOffset_MakeOffset OCCT class;
+   * mesh the offset geometry with the Body Fitting algorithm;
+   * create prisms of the layers by projecting boundary nodes of offset geometry onto the boundary of initial geometry.
+
+.. note:: Viscous layers can't be constructed on geometry with **shared/internal** faces.
+
+To apply the 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
+
+* **Create Faces** check-box activates creation on mesh faces.
+* **Consider Shared and Internal Faces** check-box activates treatment of faces shared by solids and internal. By default the algorithm considers only outer boundaries of the geometry.
+* **Apply Threshold to Shared / Internal Faces** check-box activates application of **Threshold** to cells cut by shared and internal faces, that can cause appearance of holes inside the mesh.
+* **Set Quanta** check-box activates application of **Quanta Value** to replace **polyhedrons** by hexahedrons at the boundary of the geometry. 
+* **Quanta Value** the relation between the volume of a polyhedrons and the equivalent hexahedron at the solid boundary. When **Set Quanta** is checked, those elements are replaced by hexahedrons if the volume of the polyhedron divided by the equivalente hexahedron is bigger than **Quanta**.  
+* **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.
+
+.. note:: The actual grid spacing can slightly differ from the defined one. This is done for the best fitting of polyhedrons and for a better mesh quality on the interval boundaries. For example, if a constant **Spacing** is defined along an axis, the actual grid will fill the shape's dimension L along this axis with round number of equal cells: Spacing_actual = L / round( L / Spacing_defined ).
+  
+* **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/gui/input/changing_orientation_of_elements.rst b/doc/gui/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/gui/input/clipping.rst b/doc/gui/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/gui/input/colors_size.rst b/doc/gui/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/gui/input/connectivity.rst b/doc/gui/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/gui/input/constructing_meshes.rst b/doc/gui/input/constructing_meshes.rst
new file mode 100644 (file)
index 0000000..923ecf9
--- /dev/null
@@ -0,0 +1,408 @@
+.. _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::
+      * 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 their :ref:`default priority <submesh_priority>`. Changing priority works in two ways:
+
+* For sub-meshes with assigned algorithms of same dimension generating mesh of *several dimensions*, it sets the order in which the sub-meshes are computed.
+* For the rest sub-meshes, it sets the order in which the sub-meshes are checked when looking for  meshing parameters to apply to a sub-shape. Examples below present this way. To impose the order in which sub-meshes with uni-dimensional algorithms are computed, invoke **Compute Sub-mesh** command on sub-meshes in a desired order.
+
+
+*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** 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** 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** 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** 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/gui/input/constructing_submeshes.rst b/doc/gui/input/constructing_submeshes.rst
new file mode 100644 (file)
index 0000000..a2a6dd2
--- /dev/null
@@ -0,0 +1,147 @@
+.. _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. Elements generated on a sub-shape can be retrieved without
+explicit creation of a sub-mesh by creating a *Group on Geometry* using
+:ref:`Create Groups from Geometry <create_groups_from_geometry_page>` dialog.
+
+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 Object 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/gui/input/convert_to_from_quadratic_mesh.rst b/doc/gui/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/gui/input/copy_mesh.rst b/doc/gui/input/copy_mesh.rst
new file mode 100644 (file)
index 0000000..1d1b975
--- /dev/null
@@ -0,0 +1,53 @@
+.. _copy_mesh_page:
+
+*********
+Copy Mesh
+*********
+
+A mesh can be created by copying a part of or the whole other mesh. There are two modes of the operation:
+
+* copy mesh elements only;
+* copy mesh definition to another geometry. This mode can be used only if the source mesh is based on geometry. It is supposed that the new geometry is a modified geometry of the source 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:
+
+* select the mode of the operation.
+* 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**;
+* select the **New Geometry**;
+* specify the conditions of copying:
+
+  * activate **Generate groups** check-box to copy the groups of the source mesh to the newly created mesh. In the mode of copying to new geometry, standalone groups are copied only if **Copy Mesh Elements** is activated.
+  * activate **Reuse hypotheses** check-box to use hypotheses applied to the source mesh in the new mesh. Hypotheses having parameters defined as sub-shapes will be copied independently of this check-box state.
+  * activate **Copy Mesh Element** to copy mesh elements of sub-shapes that are not modified.
+
+* Click **Apply** or **Apply and Close** button to confirm the operation.
+
+---------------------------------------------------
+Limitations of copying the mesh to the new geometry
+---------------------------------------------------
+
+It can happen that a sub-shape used to define a sub-mesh, group or hypotheses is not found in the new geometry. In this case a new object depending on the not found sub-shape is marked with red color in the Object Browser in order to allow identifying such objects and to fix them, either by modifying their definition or by removing. If a depending object is a group on geometry, a standalone group is created instead. You can't transform it to a group on geometry, it can only be removed and re-created anew.
+
+Empty standalone groups are not constructed.
+
+**See Also** a sample script of :ref:`tui_copy_mesh`.
+
diff --git a/doc/gui/input/create_dual_mesh.rst b/doc/gui/input/create_dual_mesh.rst
new file mode 100644 (file)
index 0000000..2a540a1
--- /dev/null
@@ -0,0 +1,42 @@
+.. _create_dual_mesh_page:
+
+****************
+Create Dual Mesh
+****************
+
+We can create the dual of a Tetrahedron Mesh which will be a polyhedron mesh.
+The Mesh is created using MEDCoupling computeDualMesh function.
+
+*To create a dual mesh:*
+
+.. |img| image:: ../images/create_dual_mesh_icon.png
+
+From the contextual menu in the Object Browser of from the **Mesh** menu select
+**Create Dual Mesh** or click *"Create Dual Mesh"* button |img| in the toolbar.
+
+The following dialog box will appear:
+
+.. image:: ../images/create_dual_mesh_dlg.png
+       :align: center
+
+In the dialog:
+
+* specify the mesh for which to create the dual mesh:
+  * **Select whole mesh** from the study tree. If a mesh was selected before calling function it will be preselected.
+  * If the mesh is not made of only Tetrahedrons a error message will be displayed and you won't be allowed to go through.
+* specify the **New Mesh Name**;
+* activate **Project boundary elements on shape** for the boundary points of the
+  dual mesh to be projected on their associated shape.
+
+* Click **Apply** or **Apply and Close** button to confirm the operation.
+
+----------------------------
+Limitations of the dual mesh
+----------------------------
+
+Only 2d groups will be transferred to the dual mesh.
+
+If you have convex shape the projection might not improve the mesh.
+
+
+**See Also** a sample script of :ref:`tui_create_dual_mesh`.
diff --git a/doc/gui/input/create_groups_from_geometry.rst b/doc/gui/input/create_groups_from_geometry.rst
new file mode 100644 (file)
index 0000000..70f3a58
--- /dev/null
@@ -0,0 +1,20 @@
+.. _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.
+
+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/gui/input/creating_groups.rst b/doc/gui/input/creating_groups.rst
new file mode 100644 (file)
index 0000000..a66df15
--- /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 Object 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/gui/input/cut_mesh_by_plane.rst b/doc/gui/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/gui/input/cutting_quadrangles.rst b/doc/gui/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/gui/input/define_mesh_by_script.rst b/doc/gui/input/define_mesh_by_script.rst
new file mode 100644 (file)
index 0000000..43d7f89
--- /dev/null
@@ -0,0 +1,28 @@
+.. _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.
+     * Nodes and elements created in your script must be assigned to geometry entities by calling *SetMeshElementOnShape*, *SetNodeOnVertex*, *SetNodeOnEdge* etc. in order to be used by an algorithm of upper dimension.
+
+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/gui/input/deflection_2d.rst b/doc/gui/input/deflection_2d.rst
new file mode 100644 (file)
index 0000000..1af3376
--- /dev/null
@@ -0,0 +1,24 @@
+.. _deflection_2d_page:
+
+*************
+Deflection 2D
+*************
+
+This quality control criterion consists of calculation of distance between a mesh face gravity corner
+and the surface the face discretizes.
+
+*To apply the Deflection 2D quality criterion to your mesh:*
+
+.. |img| image:: ../images/mesh_deflection.png
+
+#. Display your mesh in the viewer.
+#. Choose **Controls > Face Controls > Deflection 2D** or click *"Deflection 2D"* |img| button in the toolbar. 
+
+
+Your mesh will be displayed in the viewer with faces colored according to the applied mesh quality control criterion:
+
+.. image:: ../images/deflection_2d.png
+       :align: center
+
+
+**See Also** a sample TUI Script of a :ref:`tui_deflection_2d` operation.  
diff --git a/doc/gui/input/deleting_groups.rst b/doc/gui/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/gui/input/diagonal_inversion_of_elements.rst b/doc/gui/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/gui/input/display_entity.rst b/doc/gui/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/gui/input/display_mode.rst b/doc/gui/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/gui/input/double_elements_control.rst b/doc/gui/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/gui/input/double_nodes_control.rst b/doc/gui/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/gui/input/double_nodes_page.rst b/doc/gui/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/gui/input/editing_groups.rst b/doc/gui/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/gui/input/editing_meshes.rst b/doc/gui/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/gui/input/extrusion.rst b/doc/gui/input/extrusion.rst
new file mode 100644 (file)
index 0000000..3cee68e
--- /dev/null
@@ -0,0 +1,167 @@
+.. _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 factors** is checked, is which case the scale factors are spread over all extrusion steps.
+               * **Base point** serving as a scaling canter 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.
+
+        * The elements can also be rotated around the **Base point** to get the resulting mesh in a helical fashion. You can set the values of **Rotation angles** to the list by pressing the *"Add"* button |add| and remove them from the list by pressing the *"Remove"* button |rm|.
+
+          **Linear variation of 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 )*.
+
+       * 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/gui/input/extrusion_along_path.rst b/doc/gui/input/extrusion_along_path.rst
new file mode 100644 (file)
index 0000000..ce226f8
--- /dev/null
@@ -0,0 +1,160 @@
+.. _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 with rotation center at the **Base point** to get the resulting mesh in a helical fashion. You can set the values of angles at the right, add them to **Rotation angles** list at the left by pressing the *"Add"* button |add| and remove them from the list by pressing the *"Remove"* button |rem|.
+
+     **Linear variation of 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 )*.
+
+   * Each of optional **Scale factors** in the list is applied to nodes of a corresponding extrusion step unless **Linear variation of factors** is checked, is which case the scale factors are spread over all extrusion steps. **Base point** serves as a scaling canter.
+       * *"Add"* button |add| adds a scale factor to the list.   
+       * *"Remove"* button |rem| removes selected scale factors from the list.
+
+
+#. 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/gui/input/face_groups_by_sharp_edges.rst b/doc/gui/input/face_groups_by_sharp_edges.rst
new file mode 100644 (file)
index 0000000..eed6996
--- /dev/null
@@ -0,0 +1,29 @@
+************************************
+Face Groups Separated By Sharp Edges
+************************************
+
+**Face groups separated by sharp edges** operation distributes all faces of the mesh among groups using sharp edges and optionally existing 1D elements as group boundaries. Edges where more than two faces meet are always considered as a group boundary. The operation is available in **Mesh** menu.
+
+The operation dialog looks as follows:
+
+.. image:: ../images/groups_by_sharp_edges_dlg.png
+       :align: center
+
+In this dialog box specify
+
+       * **Mesh** including the faces to distribute among groups.
+        * **Sharp angle** in degrees, by which edges used as group boundaries are detected. An edge is considered as a group boundary if an angle between normals of adjacent faces is more than this angle.
+       * Activate **Create edges** option if you wish that 1D elements to be created (if not yet exist) on the edges that served as group boundaries.
+       * Activate **Use existing edges** option if you wish that existing 1D elements to be used as group boundaries.
+       * Activate **Preview** to see the edges that will be used as group boundaries highlighted in the Viewer.
+
+
+.. image:: ../images/Nut_sharp_edges.png
+       :align: center
+
+.. centered:: 
+       **Preview of boundary edges detected at Sharp Angle = 10 degrees**
+
+**See Also** a sample TUI Script of a :ref:`tui_groups_by_sharp_edges` operation.
+
+
diff --git a/doc/gui/input/find_element_by_point.rst b/doc/gui/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/gui/input/free_borders.rst b/doc/gui/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/gui/input/free_edges.rst b/doc/gui/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/gui/input/free_faces.rst b/doc/gui/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/gui/input/free_nodes.rst b/doc/gui/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/gui/input/generate_flat_elements.rst b/doc/gui/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/gui/input/group_of_underlying_elements.rst b/doc/gui/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/gui/input/grouping_elements.rst b/doc/gui/input/grouping_elements.rst
new file mode 100644 (file)
index 0000000..2846fa9
--- /dev/null
@@ -0,0 +1,67 @@
+.. _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.
+* :doc:`face_groups_by_sharp_edges` operation distributes all faces of the mesh among groups using sharp edges and/or existing 1D elements as group boundaries.
+* 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`.
+
+**See Also** sample TUI Scripts of :doc:`tui_grouping_elements` operations.
+
+
+**Table of Contents**
+
+.. toctree::
+       :maxdepth: 2
+
+       creating_groups.rst
+       create_groups_from_geometry.rst
+       face_groups_by_sharp_edges.rst
+       group_of_underlying_elements.rst
+       using_operations_on_groups.rst
+       editing_groups.rst
+       deleting_groups.rst
diff --git a/doc/gui/input/homard_create_boundary.rst b/doc/gui/input/homard_create_boundary.rst
new file mode 100644 (file)
index 0000000..230ce00
--- /dev/null
@@ -0,0 +1,169 @@
+.. _homard_create_boundary:
+
+The boundary
+############
+.. index:: single: boundary
+.. index:: single: frontière
+.. index:: single: CAO
+
+The object boundary contains all the geometrical definitions allowing to describe a curved boundary to be followed.
+
+There are two modes of description of a boundary:
+
+  - CAO: the boundary comes from the geometry of the domain
+  - Non CAO: if the CAO is not available, the boundary can be approximated by its descriptions:
+
+    * Discrete: to describe the set of 1D curves that defines the boundary
+    * Analytics: to describe every surface that defines the boundary
+
+This choice is:
+
+.. image:: ../images/create_boundary_1.png
+   :align: center
+
+.. _homard_create_boundary_CAO:
+
+CAO boundary
+************
+
+The follow-up of a CAO boundary will be made by selecting a boundary chosen in the list of the existing CAO boundaries.
+
+In the starting up, the list is empty. It is necessary to create a first CAO boundary by activation of the button "*New*":
+
+.. image:: ../images/create_boundary_cao_1.png
+   :align: center
+
+The window invites in the choice of a file that contains the CAO with XAO format. This CAO is the one that is the basis for the initial mesh. A name of boundary is automatically proposed: Boun_1, Boun_2, etc. This name can be modified. It must not already have been used for another boundary, whatever its type.
+
+.. image:: ../images/create_boundary_cao_2.png
+   :align: center
+
+.. note::
+  The coherence between this CAO and the initial mesh is not checked.
+
+Filtering by the groups
+***********************
+.. index:: single: group
+
+We can restrict the application of the boundary to groups. So elements not belonging to these groups will not be affected. We check the associated button **Filtering with groups**. The list of the present groups of elements in the mesh is shown. It is enough to check those wanted to restrict the boundary.
+
+.. image:: ../images/adaptation_with_homard_boundary_groups.png
+   :align: center
+
+.. _homard_create_boundary_Di:
+
+Discrete boundary
+*****************
+
+The follow-up of a discrete boundary will be made by selecting a boundary chosen in the list of the existing discrete boundaries.
+
+In the starting up, the list is empty. It is necessary to create a first discrete boundary by activation of the button "*New*":
+
+.. image:: ../images/create_boundary_di_1.png
+   :align: center
+
+The window invites in the choice of a file of mesh. This mesh is the one of all the lines constituting the boundary. A name of boundary is automatically proposed: Boun_1, Boun_2, etc. This name can be modified. It must not already have been used for another boundary, whatever its type.
+
+.. image:: ../images/create_boundary_di_2.png
+   :align: center
+
+.. note::
+  The file has to contain only a single mesh.
+
+If discrete boundaries were already defined for another case, we can select one of them. We can also create a new discrete boundary by activation of the button "*New*", as explained previously.
+
+.. image:: ../images/create_boundary_di_3.png
+   :align: center
+
+
+
+.. _homard_create_boundary_An:
+
+Analytical boundary
+*******************
+In the starting up, SALOME shows a table with one only one column. This column contains the list of all the groups of the initial mesh defining the case.
+
+.. image:: ../images/create_boundary_an_1.png
+   :align: center
+
+It is necessary to create a first analytical boundary by activation of the button "*New*". We shall have the choice between cylinder, sphere, cone or torus. When the boundary will be validated, its name will appear in header of the second column.
+
+.. image:: ../images/create_boundary_an_2.png
+   :align: center
+
+It is now necessary to establish the link enter the mesh defining the case and this boundary described analytically. It is made by checking the groups of the faces which have to be on the boundary.
+
+.. image:: ../images/create_boundary_an_3.png
+   :align: center
+
+This operation is repeated as often as we wish to place faces of meshs on a curved surface:
+
+.. image:: ../images/create_boundary_an_4.png
+   :align: center
+
+.. note::
+
+  A group can be checked very well never: it means that the elements which it defines belong to none of the described boundaries.
+
+  A group can be checked only once. Indeed, surface elements cannot belong to more than one surface.
+
+  Several groups can be checked for the same boundary. It occurs if the initial mesh of the zone was subdivided into several groups: all the surface elements belong to this surface but were distributed in several groups.
+
+  Conversely, a boundary can be very well retained by no group. It occurs if it was defined for a previous case and if it is groundless for the case in the course of definition.
+
+
+There are four types of analytical boundary:
+
+  - Cylindre
+  - Sphere
+  - Cone, described by an axis and an angle or by two radius
+  - Torus
+
+.. note::
+  The numerical values proposed by default take into account the geometry of the mesh.
+
+
+Cylindre
+========
+.. index:: single: cylindre
+
+The cylinder is defined by a point of the axis, its axis and its radius. The axis is defined by a vector. The standard of this vector is not inevitably equal to 1; also, its orientation has no importance. A name of boundary is automatically proposed: Boun_1, Boun_2, etc. This name can be modified. It must not already have been used for another boundary, whatever its type.
+
+.. image:: ../images/create_boundary_an_cy.png
+   :align: center
+
+Sphere
+======
+.. index:: single: sphere
+
+The sphere is defined by its center and its radius. A name of boundary is automatically proposed: Boun_1, Boun_2, etc. This name can be modified. It must not already have been used for another boundary, whatever its type.
+
+.. image:: ../images/create_boundary_an_sp.png
+   :align: center
+
+Cone
+====
+.. index:: single: cone
+
+A cone is defined by two different manners: the center, the axis and the angle of opening in degree or by two points centered on the axis and the associated radius. A name of boundary is automatically proposed: Boun_1, Boun_2, etc. This name can be modified. It must not already have been used for another boundary, whatever its type.
+
+Creation by an origin, an axis and an angle of opening:
+
+.. image:: ../images/create_boundary_an_co_1.png
+   :align: center
+
+Creation by two points centered on the axis and the associated radius:
+
+.. image:: ../images/create_boundary_an_co_2.png
+   :align: center
+
+.. index:: single: object browser
+
+Torus
+=====
+.. index:: single: torus
+
+The torus is defined by its centre, its axis, the revolution radius and the primary radius. The axis is defined by a vector. The standard of this vector is not inevitably equal to 1; also, its orientation has no importance. A name of boundary is automatically proposed: Boun_1, Boun_2, etc. This name can be modified. It must not already have been used for another boundary, whatever its type.
+
+.. image:: ../images/create_boundary_an_to.png
+   :align: center
diff --git a/doc/gui/input/importing_exporting_meshes.rst b/doc/gui/input/importing_exporting_meshes.rst
new file mode 100644 (file)
index 0000000..fe9aa27
--- /dev/null
@@ -0,0 +1,62 @@
+
+.. _importing_exporting_meshes_page:
+
+******************************
+Importing and exporting meshes
+******************************
+
+In MESH there is a functionality allowing import/export of meshes in the following formats:
+
+* **MED**,
+* **UNV** (I-DEAS 10),
+* **STL**, 
+* **CGNS**,
+* **GMF** (internal format of DISTENE products from the MeshGems suite),
+* **DAT** (simple ascii format).
+
+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>`.
+
+Only MED format supports all types of elements that can be created in the module. If you export a mesh or group that includes elements of types that are not supported by chosen format, you will be warned about that.
+
+There are additional parameters available at export to MED format files.
+
+.. _export_auto_groups:
+
+* **Z tolerance** field if enabled specifies distance of nodes from the XOY plane below which the nodes snap to this plane. A default value can be set in :ref:`Preferences <medexport_z_tolerance_pref>`.
+* **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. 
+
+* :ref:`Save cell/node numbers to MED file <med_export_numbers_pref>` preference controls whether node and cell numbers are saved.
+
+**See Also** a sample TUI Script of an :ref:`Export Mesh <tui_export_mesh>` operation.
+
+
diff --git a/doc/gui/input/index.rst b/doc/gui/input/index.rst
new file mode 100644 (file)
index 0000000..fcd97b7
--- /dev/null
@@ -0,0 +1,62 @@
+.. 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;
+* :ref:`remeshing meshes <adaptation_page>`;
+* 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
+   adaptation
+   measurements
+   viewing_meshes_overview
+   smeshpy_interface
+   tools
+   mesh_preferences
+   using_notebook_smesh_page
diff --git a/doc/gui/input/length.rst b/doc/gui/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/gui/input/length_2d.rst b/doc/gui/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/gui/input/make_2dmesh_from_3d.rst b/doc/gui/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/gui/input/make_2dmesh_from_3d_elements.rst b/doc/gui/input/make_2dmesh_from_3d_elements.rst
new file mode 100644 (file)
index 0000000..25e2233
--- /dev/null
@@ -0,0 +1,45 @@
+.. _make_2dmesh_from_3d_elements_page:
+
+**************************
+Generate 2D mesh from 3D elements
+**************************
+
+This functionality allows to generate 2D mesh elements from the 3D elements in the mesh.
+
+.. image:: ../images/2d_mesh_from_3d_elements.jpg
+       :align: center
+
+.. centered::
+       2D mesh created from the 3D elements
+
+
+*To generate 2D elements:*
+
+.. |img| image:: ../images/2d_mesh_from_3d_elements_icon.png
+
+#. Select a mesh or group in the Object Browser or in the 3D Viewer
+#. From the **Modification** menu choose **Create 2D mesh from 3D** item, or click "Create 2D mesh from 3D" button |img| in the toolbar
+
+   The following dialog box will appear:
+
+       .. image:: ../images/2d_mesh_from_3d_elements_dlg.png   
+               :align: center
+
+       .. centered::
+                Create 2D mesh from 3D elements dialog box
+
+#. Click the **Apply** or **Apply and Close** button to perform the operation.
+
+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 2D elements (old and created by this operation).
+* activate **Create group** checkbox to create a group to which all the 2D 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_elements` operation.  
+
+
diff --git a/doc/gui/input/max_element_length_2d.rst b/doc/gui/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/gui/input/max_element_length_3d.rst b/doc/gui/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/gui/input/measurements.rst b/doc/gui/input/measurements.rst
new file mode 100644 (file)
index 0000000..9fb3cac
--- /dev/null
@@ -0,0 +1,100 @@
+.. _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 coordinate 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.
+
+.. _angle_anchor:
+
+Angle
+#####
+
+This operation measures angle defined by three nodes. The second of the specified nodes is a vertex of angle. 
+
+You can specify nodes either by clicking them in the Viewer or by typing their IDs in **Tree nodes** field. If the nodes are correctly specified, upon pressing **Compute** button the angle measure will be displayed and the angle will be shown in the Viewer.
+
+.. image:: ../images/angle_measure.png
+       :align: center
+
+
+**See Also** a sample TUI Script of :ref:`tui_measurements_page`.
diff --git a/doc/gui/input/merging_elements.rst b/doc/gui/input/merging_elements.rst
new file mode 100644 (file)
index 0000000..628e364
--- /dev/null
@@ -0,0 +1,68 @@
+.. _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
+
+.. |ad| image:: ../images/add.png
+.. |rm| image:: ../images/remove.png
+.. |mv| image:: ../images/sort.png
+
+In this dialog:
+
+       * **Names** contains names of the selected mesh objects 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.
+       * **Exclude groups from detection** group allows to ignore the elements which belong to the specified mesh groups. This control is active provided that the mesh includes groups.
+       * **Elements to keep during the merge** group allows to specify elements to keep in the mesh. (By default an element being the first in a group of coincident elements is kept.) It is possible to either select elements in the Viewer or select groups whose elements will be kept.
+  
+               * *Selection* button activates selection of elements to keep.
+               * **Elements** button activates selection of elements in the Viewer.
+               * **Groups and sub-meshes** button activates selection of groups and sub-meshes.
+               * **Add** button adds selected elements or groups to the list.
+               * Elements or groups selected in the list can be removed using **Remove** button.
+
+
+         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:
+    
+                       * |ad| adds to the group the elements selected in the viewer.
+                       * |rm| removes the selected elements from the group.
+                       * |mv| 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/gui/input/merging_nodes.rst b/doc/gui/input/merging_nodes.rst
new file mode 100644 (file)
index 0000000..18096ba
--- /dev/null
@@ -0,0 +1,79 @@
+.. _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
+
+.. |ad| image:: ../images/add.png
+.. |rm| image:: ../images/remove.png
+.. |mv| image:: ../images/sort.png
+
+*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
+        
+       * **Names** contains names of the selected mesh objects 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:
+    
+         * |ad| adds to the group the nodes selected in the viewer.
+         * |rm| removes from the group the selected nodes.
+         * |mv| 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/gui/input/mesh_infos.rst b/doc/gui/input/mesh_infos.rst
new file mode 100644 (file)
index 0000000..f61e35e
--- /dev/null
@@ -0,0 +1,183 @@
+.. _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 reasons, 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>` for basic mesh information and :ref:`TUI Example <tui_node_element_mesh_infos>`.
diff --git a/doc/gui/input/mesh_preferences.rst b/doc/gui/input/mesh_preferences.rst
new file mode 100644 (file)
index 0000000..c7a5167
--- /dev/null
@@ -0,0 +1,228 @@
+.. _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**
+
+  * **Fit All upon Show Only** - if activated, *Show Only* command additionally performs *Fit All* command.
+
+  * **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.
+
+.. _med_export_numbers_pref:
+
+  * **Save cell/node numbers to MED file** - if activated, optional node and cell numbers are saved to MED file.
+
+.. _medexport_z_tolerance_pref:
+
+  * **Z tolerance for MED export** - defines Z tolerance in :ref:`MED Export <export_auto_groups>` dialog.
+
+.. _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.
+
+.. _use_meshgems_pref:
+
+  * **Use MeshGems meshers when assigning set of hypotheses** - if activated, commercial meshers of MeshGems suite are used instead of a free mesher NETGEN when assigning a set of hypotheses in Create Mesh/Sub-mesh dialog.
+  
+* **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/gui/input/mesh_through_point.rst b/doc/gui/input/mesh_through_point.rst
new file mode 100644 (file)
index 0000000..47bd8c4
--- /dev/null
@@ -0,0 +1,65 @@
+.. _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.
+* by movement of a selected node to the point specified by mouse click.
+
+*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
+
+       .. image:: ../images/meshtopass3.png
+               :align: center
+
+       .. centered::
+               Manual node selection with mouse location
+
+
+#. 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/gui/input/minimum_angle.rst b/doc/gui/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/gui/input/modifying_meshes.rst b/doc/gui/input/modifying_meshes.rst
new file mode 100644 (file)
index 0000000..6e574f8
--- /dev/null
@@ -0,0 +1,89 @@
+.. _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 existing mesh elements and nodes.
+* :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 2D mesh from 3D elements <make_2dmesh_from_3d_elements_page>`.
+* :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:`Offset <offset_elements_page>` the entire mesh, the sub-mesh or a selection of elements based on filters.
+* :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.
+* :ref:`Merge Nodes<merging_nodes_page>` coincident within the indicated tolerance.
+* :ref:`Merge Elements <merging_elements_page>` based on the same 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.
+* :ref:`Move Nodes <mesh_through_point_page>` to an arbitrary location with consequent transformation of all adjacent elements.
+* :ref:`Change orientation <changing_orientation_of_elements_page>` of the selected elements.
+* :ref:`Orient faces <reorient_faces_page>` by several means.
+* Unite meshes by :ref:`sewing <sewing_meshes_page>` free borders, border to side or side 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:`Cut a quadrangle <cutting_quadrangles_page>` into two triangles.
+* :ref:`Cut triangles <add_node_on_segment_page>` into two by adding a node on edge.
+* :ref:`Cut a face <add_node_on_face_page>` into triangles by adding a node on it.
+* :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.
+* Apply :ref:`pattern mapping <pattern_mapping_page>`.
+* :ref:`generate_flat_elements_page`.
+* :ref:`cut_mesh_by_plane_page`.
+
+
+.. note::
+       You can use these operations 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
+   offset_elements.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
+   add_node_on_segment.rst
+   add_node_on_face.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
+   make_2dmesh_from_3d_elements.rst
+   generate_flat_elements.rst
+   cut_mesh_by_plane.rst
+
diff --git a/doc/gui/input/modules.rst b/doc/gui/input/modules.rst
new file mode 100644 (file)
index 0000000..6cf84d1
--- /dev/null
@@ -0,0 +1,531 @@
+########################
+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
+   Mesh.ExportMED
+   Mesh.ExportUNV
+   Mesh.ExportSTL
+   Mesh.ExportCGNS
+   Mesh.ExportDAT
+   Mesh.ExportGMF
+
+
+Constructing meshes
+===================
+
+.. autosummary::
+
+   smeshBuilder.Mesh
+   Mesh.SetName
+   Mesh.SetMeshOrder
+   Mesh.Compute
+   Mesh.Evaluate
+   Mesh.Clear
+   Mesh.GetMesh
+   Mesh.GetShape
+   Mesh.HasShapeToMesh
+   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_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.FaceGroupsSeparatedByEdges
+   Mesh.CreateDimGroup
+   Mesh.ConvertToStandalone
+   Mesh.GetGroups
+   Mesh.NbGroups
+   Mesh.GetGroupNames
+   Mesh.GetGroupByName
+
+
+Operations on groups
+====================
+
+.. autosummary::
+
+   Mesh.UnionGroups
+   Mesh.UnionListOfGroups
+   Mesh.IntersectGroups
+   Mesh.IntersectListOfGroups
+   Mesh.CutGroups
+   Mesh.CutListOfGroups
+
+Deleting Groups
+===============
+
+.. autosummary::
+
+   Mesh.RemoveGroup
+   Mesh.RemoveGroupWithContents
+
+****************
+Mesh Information
+****************
+
+.. autosummary::
+
+   smeshBuilder.GetMeshInfo
+   Mesh.GetEngine
+   Mesh.GetGeomEngine
+   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.Get1DBranches
+   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
+   smeshBuilder.GetAngle
+   Mesh.GetFreeBorders
+   Mesh.MinDistance
+   Mesh.GetMinDistance
+   Mesh.BoundingBox
+   Mesh.GetBoundingBox
+   Mesh.GetFunctor
+   Mesh.FunctorValue
+   Mesh.GetLength
+   Mesh.GetArea
+   Mesh.GetVolume
+   Mesh.GetAngle
+
+****************
+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.Append
+   Mesh.GetLastCreatedNodes
+   Mesh.GetLastCreatedElems
+   Mesh.ClearLastCreated
+
+Removing nodes and elements
+===========================
+
+.. autosummary::
+
+   Mesh.RemoveElements
+   Mesh.RemoveNodes
+   Mesh.RemoveNodeWithReconnection
+   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.Reorient2DByNeighbours
+   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
+   Mesh.AddNodeOnSegment
+   Mesh.AddNodeOnFace
+
+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/gui/input/numbering.rst b/doc/gui/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/gui/input/offset_elements.rst b/doc/gui/input/offset_elements.rst
new file mode 100644 (file)
index 0000000..daa343c
--- /dev/null
@@ -0,0 +1,49 @@
+.. _offset_elements_page:
+
+********************************
+Offset mesh 
+********************************
+
+Offset 2D elements in mesh, submesh, group or elements from filter.
+
+*To offset all elements from mesh, sub-mesh or group:*
+
+.. |img| image:: ../images/image81.png
+
+#. In the **Modification** menu, select the **Transformations** then click *Offset* button |img| or click directly in the same button in the toolbar.
+
+   The following dialog box will appear:
+
+       .. image:: ../images/offset_mesh.png
+               :align: center
+    
+       * Check the option **Select whole mesh, sub-mesh or group** if it is not set.
+       * Set the name of the mesh, sub-mesh or created group.
+       * Set the **Offset** value (negative offsets are allowed).
+       * Select **Move Elements** to offset the current mesh, **Copy Elements** to offset and duplicate them, or **Create a new mesh** to create a new mesh from the offset elements.
+
+#. Click the **Apply** or **Apply and Close** button to confirm the operation.
+
+
+*To offset all elements ids from a filter:*
+
+#. In the **Modification** menu, select the **Transformations** then click *Offset* button |img| or click directly in the same button from the toolbar.
+       
+       * Uncheck the option **Select whole mesh, sub-mesh or group**.
+
+       .. image:: ../images/offset_mesh_from_filter.png
+               :align: center
+       
+       * Then click on **Set_Filter** button
+       
+       The dialog for filter for faces will appear:
+
+       .. image:: ../images/offset_filter_for_faces_gui.png
+               :align: center
+       
+       * Define the desired criterias and then click the **Apply and Close** button to confirm the selection of elements.
+       * Set **Offset** value and mesh creation **options** as done for the first case.
+
+#. Click the **Apply** or **Apply and Close** button to confirm the operation.
+
+**See also:** A sample TUI Script of a :ref:`tui_offset_elements` transformation.
\ No newline at end of file
diff --git a/doc/gui/input/over_constrained_faces.rst b/doc/gui/input/over_constrained_faces.rst
new file mode 100644 (file)
index 0000000..87af11c
--- /dev/null
@@ -0,0 +1,20 @@
+.. _over_constrained_faces_page:
+
+**********************
+Over-constrained faces
+**********************
+
+This mesh quality control highlights faces having all their points on the border.
+
+.. 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/gui/input/over_constrained_volumes.rst b/doc/gui/input/over_constrained_volumes.rst
new file mode 100644 (file)
index 0000000..e601090
--- /dev/null
@@ -0,0 +1,19 @@
+.. _over_constrained_volumes_page:
+
+************************
+Over-constrained volumes
+************************
+
+This mesh quality control highlights volumes having all their points on the border.
+
+
+.. 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/gui/input/parallel_compute.rst b/doc/gui/input/parallel_compute.rst
new file mode 100644 (file)
index 0000000..dab61fc
--- /dev/null
@@ -0,0 +1,104 @@
+.. _parallel_compute_page:
+
+******************
+Parallel Computing
+******************
+
+
+.. warning::
+  This functionality is a work in progress.
+
+  It is only available for NETGEN.
+
+  It is only available in TUI.
+
+
+The goal here is to speed up computation by running sub-meshes in parallel
+(multi-threading).
+
+Concept
+#######
+
+.. image:: ../images/diagram_parallel_mesh.png
+
+In order to parallelise the computation of the mesh we split the geometry into:
+
+  * A 1D+2D compound
+  * A list of 3D solids
+
+Then create a sub-mesh for each of those geometry.
+And associate Hypothesis to the mesh using a hypothesis on the whole geometry
+
+We will first compute sequentially the 1D+2D compound with NETGEN_1D2D.
+
+Then we will compute all the solids in parallel. Having done the 1D+2D first
+ensure that all the solids can be computed without any concurrency.
+
+
+How to
+######
+
+You follow the same principle as the creation of a sequential Mesh.
+
+
+1. First you create the mesh:
+
+       .. code-block:: python
+
+               par_mesh = smesh.ParallelMesh(my_geom, name="par_mesh")
+
+2. Define the Global Hypothesis that will be split into an hypothesis for the
+   1D+2D compound and one for each of the 3D solids:
+
+  .. code-block:: python
+
+               NETGEN_3D_Parameters_1 = smesh.CreateHypothesisByAverageLength( 'NETGEN_Parameters',
+                                                 'NETGENEngine', 34.641, 0 )
+               par_mesh.AddGlobalHypothesis(NETGEN_3D_Parameters_1)
+
+3. Set the method for the parallelisation:
+
+  You have two methods for parallelisation:
+
+  * Multihtreading: Will run the computation on your computer using the processors on your computer.
+
+  .. code-block:: python
+
+     par_mesh.SetParallelismMethod(smeshBuilder.MULTITHREAD)
+
+
+  * MultiNodal: Will run the computation on a remote resource (cluster) that is defined in your salome catalog.
+
+  .. code-block:: python
+
+     par_mesh.SetParallelismMethod(smeshBuilder.MULTINODE)
+
+
+4.  Set the parameters for the parallelism:
+
+  *  Multithread:
+
+       .. code-block:: python
+
+               param = par_mesh.GetParallelismSettings()
+               param.SetNbThreads(6)
+
+  * Multinode:
+
+  .. code-block:: python
+
+     param = par_mesh.GetParallelismSettings()
+     param.SetResource("cronos")
+     param.SetNbProc(nbox**3)
+     param.SetNbProcPerNode(2)
+     param.SetNbNode(6)
+     param.SetWcKey("P11N0:SALOME_COFEE")
+
+5. Compute the mesh:
+       .. code-block:: python
+
+               is_done = par_mesh.Compute()
+               if not is_done:
+                   raise Exception("Error when computing Mesh")
+
+**See Also** a sample script of :ref:`tui_create_parallel_mesh`.
diff --git a/doc/gui/input/pattern_mapping.rst b/doc/gui/input/pattern_mapping.rst
new file mode 100644 (file)
index 0000000..e88a291
--- /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 linear 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/gui/input/point_marker.rst b/doc/gui/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/gui/input/prism_3d_algo.rst b/doc/gui/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/gui/input/projection_algos.rst b/doc/gui/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/gui/input/quad_from_ma_algo.rst b/doc/gui/input/quad_from_ma_algo.rst
new file mode 100644 (file)
index 0000000..0cc1979
--- /dev/null
@@ -0,0 +1,46 @@
+.. _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
+
+
+**See Also** a sample TUI Script of a :ref:`tui_quad_ma_proj_algo`.
+
diff --git a/doc/gui/input/quad_ijk_algo.rst b/doc/gui/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/gui/input/radial_prism_algo.rst b/doc/gui/input/radial_prism_algo.rst
new file mode 100644 (file)
index 0000000..7e2c148
--- /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 most 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/gui/input/radial_quadrangle_1D2D_algo.rst b/doc/gui/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/gui/input/removing_nodes_and_elements.rst b/doc/gui/input/removing_nodes_and_elements.rst
new file mode 100644 (file)
index 0000000..6d7281c
--- /dev/null
@@ -0,0 +1,157 @@
+.. _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_nodes_reconnect_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 **Node IDs** 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_nodes_reconnect_anchor:
+
+Removing node with reconnection
+###############################
+
+This operation removes a node and changes surrounding faces in order to cover a hole appearing in the mesh. This operation applies to 2D triangle mesh only.
+
+       .. image:: ../images/remove_node_reconnection.png
+               :align: center
+
+**To remove a node:**
+
+.. |rmnr| image:: ../images/remove_node_reconnection_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 **Node with reconnection**, or just click *"Remove node with reconnection"* button |rmnr| in the toolbar.
+   The following dialog box will appear:
+
+       .. image:: ../images/remove_node_reconnection_dlg.png
+               :align: center
+
+
+   In this dialog box you can specify one node to remove:
+
+   * choose a mesh node with the mouse in the 3D Viewer or 
+   * input the node ID directly in **ID** field. The selected node will be highlighted in the viewer.
+
+   Activate **Preview** to see how faces will change.
+
+#. Click **Apply** or **Apply and Close** to confirm deletion of the specified node.
+
+
+.. _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/gui/input/reorient_faces.rst b/doc/gui/input/reorient_faces.rst
new file mode 100644 (file)
index 0000000..87d5100
--- /dev/null
@@ -0,0 +1,86 @@
+
+.. _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. 
+* The required orientation is given by faces of specified reference groups or/and sub-meshes. The reference groups can be omitted, then orientation of an arbitrary selected face to orient defines common orientation.
+* 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:*
+
+.. |imgfac| image:: ../images/reorient_faces_face.png
+.. |imgpnt| image:: ../images/reorient_faces_point.png
+.. |imggrp| image:: ../images/reorient_faces_ref_groups.png
+.. |imgvol| image:: ../images/reorient_faces_volume.png
+
+#. In the **Modification** menu select **Reorient faces** item or click *"Reorient faces"* button |imgfac| in the toolbar.
+#. In the "Reorient faces" dialog box
+
+   * Select a way to define orientation:
+
+       * |imgpnt| - by specifying a point and a vector
+       * |imgfac| - by specifying a face and a vector
+       * |imggrp| - by specifying reference face groups
+       * |imgvol| - by specifying reference volume groups
+
+   * Select the **Object(s)** (mesh, groups and/or sub-meshes) 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 enter 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 equally to reference faces:
+
+     * If necessary, select 2D **Reference objects** (groups or/and sub-meshes) containing the reference faces, in the Object Browser or in the 3D Viewer. This field can be left empty, then orientation of an arbitrary face will be used as a reference.
+
+
+       .. image:: ../images/reorient_2d_refgroup.png
+               :align: center
+
+       .. centered::
+               The orientation of faces is given by reference face groups and/or sub-meshes.
+
+   * In the fourth 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/gui/input/revolution.rst b/doc/gui/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/gui/input/rotation.rst b/doc/gui/input/rotation.rst
new file mode 100644 (file)
index 0000000..4d38cae
--- /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 coordinates 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/gui/input/scalar_bar.rst b/doc/gui/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/gui/input/scale.rst b/doc/gui/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/gui/input/scaled_jacobian.rst b/doc/gui/input/scaled_jacobian.rst
new file mode 100644 (file)
index 0000000..fddfd09
--- /dev/null
@@ -0,0 +1,49 @@
+.. _scaled_jacobian_page:
+
+***************
+Scaled Jacobian
+***************
+
+The **Scaled Jacobian** mesh quality criteria is a scalar measure of the deviation from the perfect element in the geometrical sense. This measure normalizes the range of reported values between [0,1] for a normal element, the value of 1 is considered a perfect element and 0 a element with a collapsed side. Negative values are also accepted for invalid elements.
+
+The **Scaled Jacobian** is implemented for all volumetric elements (except for polyhedrons, returning 0).
+
+For tetrahedrons and hexahedrons, the formulas are
+defined in `The Verdict Library Reference Manual [1] <https://gitlab.kitware.com/third-party/verdict/-/blob/master/SAND2007-2853p.pdf>`_.
+
+For pyramid, the minimum scaled jacobian of the four tetrahedrons formed
+in the four vertices of the pyramid base is reported.
+
+For pentahedron, a decomposition into tetrahedron is also done.
+
+For hexahedron prisms, the minimum scaled jacobian between two pentahedrons and one hexahedron is reported.
+
+* Geometrically the Scaled Jacobian of a **tetrahedron** can be understood by the follow figure:
+
+       .. image:: ../images/scaled_jacobian_tetra.png
+               :align: center
+
+       The reported Scaled Jacobian will be 1 if :math:`\alpha=45^{\circ}`
+
+* For **hexadrons** this measure return 1 for the perfect non rotated elements:
+
+       .. image:: ../images/scaled_jacobian_hexa.png
+               :align: center
+
+       The reported Scaled Jacobian will be 1 if :math:`\alpha=0^{\circ}` for all the vertices
+
+
+*To visualize the Scaled Jacobian quality criterion in your mesh:*
+
+.. |img| image:: ../images/scaled_jacobian.png
+
+#. Display your mesh in the viewer.
+#. Choose **Controls > Volume Controls > Scaled Jacobian** or click *"Scaled Jacobian"* 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/scaled_jacobian_mesh_hexa.png
+               :align: center
+
+
+**See Also** a sample TUI Script of a :ref:`tui_scaled_jacobian` filter.
diff --git a/doc/gui/input/segments_around_vertex_algo.rst b/doc/gui/input/segments_around_vertex_algo.rst
new file mode 100644 (file)
index 0000000..e70c160
--- /dev/null
@@ -0,0 +1,25 @@
+.. _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.
+
+.. _note: To create 0D elements, use :ref:`adding_nodes_and_elements_page` operation.
+
+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                                                 
+
+**See also** a sample :ref:`TUI Script <tui_segments_around_vertex>`.
diff --git a/doc/gui/input/selection_filter_library.rst b/doc/gui/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/gui/input/sewing_meshes.rst b/doc/gui/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/gui/input/skew.rst b/doc/gui/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/gui/input/smeshBuilder.rst b/doc/gui/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/gui/input/smesh_migration.rst b/doc/gui/input/smesh_migration.rst
new file mode 100644 (file)
index 0000000..645feb2
--- /dev/null
@@ -0,0 +1,108 @@
+.. _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.
+
+See also *"Modifying Geometry Python scripts from SALOME 6 and before"* page in the Geometry module's
+User Guide.
+
+* **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::
+
+       Quadrangle_2D_1 = Mesh_1.Quadrangle(algo=smesh.QUADRANGLE,geom=Face_1)
+
+  is replaced by::
+
+       Quadrangle_2D_1 = Mesh_1.Quadrangle(algo=smeshBuilder.QUADRANGLE,geom=Face_1)
+
+  StdMeshers algorithms concerned are *REGULAR, PYTHON, COMPOSITE, 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/gui/input/smesh_module.rst b/doc/gui/input/smesh_module.rst
new file mode 100644 (file)
index 0000000..831452e
--- /dev/null
@@ -0,0 +1,962 @@
+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 applying 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 of 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>`. 
+   Base class of :class:`standalone group <SMESH_Group>`, 
+   :class:`group on geometry <SMESH_GroupOnGeom>` and 
+   :class:`group on filter <SMESH_GroupOnFilter>`.
+   Inherit all methods from :class:`SMESH_IDSource`.
+
+   .. 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/gui/input/smeshpy_interface.rst b/doc/gui/input/smeshpy_interface.rst
new file mode 100644 (file)
index 0000000..5b637ac
--- /dev/null
@@ -0,0 +1,111 @@
+.. _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` Python module.
+
+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
+
+               from salome.smesh import smeshBuilder
+               smesh = smeshBuilder.New()
+
+#. Create a :class:`smeshBuilder.Mesh` object:
+
+       .. code-block:: python
+
+               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
+
+               regular1D  = mesh.Segment()
+               quadrangle = mesh.Quadrangle()
+               # use other 2D algorithm on a face -- a sub-mesh appears in the mesh
+               triangle   = mesh.Triangle( face )
+
+#. Create and assign :ref:`hypotheses <about_hypo_page>` by calling corresponding methods of algorithms:
+       .. code-block:: python
+
+               regular1D.LocalLength( 10. )
+               quadrangle.Reduced()
+               triangle.SetMaxSize( 20. )
+               triangle.SetFineness( smeshBuilder.VeryCoarse )
+
+#. :ref:`Compute the mesh <compute_anchor>` (generate mesh nodes and elements):
+       .. code-block:: python
+
+               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 :class:`Mesh Group <SMESH.SMESH_GroupBase>` 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 basic information on mesh nodes, elements and groups.
+
+.. _example_3d_mesh:
+
+Example of 3d mesh generation:
+##############################
+
+.. literalinclude:: ../../examples/mesh_3d.py
+    :language: python
+
+:download:`Download this script <../../examples/mesh_3d.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_adaptation
+   tui_measurements
+   tui_work_on_objects_from_gui
+   tui_notebook_smesh
+
+.. toctree::
+   :hidden:
+
+   smesh_migration.rst
+   smeshBuilder.rst
+   StdMeshersBuilder.rst
+   smeshstudytools.rst
+   modules.rst
+   smesh_module.rst
diff --git a/doc/gui/input/smeshstudytools.rst b/doc/gui/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/gui/input/smoothing.rst b/doc/gui/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/gui/input/split_biquad_to_linear.rst b/doc/gui/input/split_biquad_to_linear.rst
new file mode 100644 (file)
index 0000000..4778ec4
--- /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 linear 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/gui/input/split_to_tetra.rst b/doc/gui/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/gui/input/symmetry.rst b/doc/gui/input/symmetry.rst
new file mode 100644 (file)
index 0000000..c80b489
--- /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 coordinates 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/gui/input/taper.rst b/doc/gui/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/gui/input/tools.rst b/doc/gui/input/tools.rst
new file mode 100644 (file)
index 0000000..0812a8e
--- /dev/null
@@ -0,0 +1,19 @@
+.. _tools_page:
+
+*******
+Plugins
+*******
+
+The following plugins are accessible via **Mesh > SMESH plugins** menu:
+
+* `SpherePadder plugin <padder/padder_userguide_page.html>`_
+* `MGSurfOpt plugin <yams/index.html>`_
+* `MGCleaner plugin <MGCleaner/index.html>`_
+* `topIIVolMesh plugin <TopIIVolMesh/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/gui/input/translation.rst b/doc/gui/input/translation.rst
new file mode 100644 (file)
index 0000000..ff477ac
--- /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 coordinates 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/gui/input/transparency.rst b/doc/gui/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/gui/input/tui_adaptation.rst b/doc/gui/input/tui_adaptation.rst
new file mode 100644 (file)
index 0000000..b8ec686
--- /dev/null
@@ -0,0 +1,33 @@
+.. _tui_adaptation_page:
+
+**********
+Adaptation
+**********
+
+.. _tui_homard_adapt:
+
+HOMARD
+======
+
+.. literalinclude:: ../../examples/test_uniform_refinement.py
+    :language: python
+
+:download:`Download this script <../../examples/test_uniform_refinement.py>`
+
+.. literalinclude:: ../../examples/test_homard_adapt.py
+    :language: python
+
+:download:`Download this script <../../examples/test_homard_adapt.py>`
+
+.. _tui_mg_adapt:
+
+MG_Adapt
+========
+
+.. literalinclude:: ../../examples/MGAdaptTests_without_session.py
+    :language: python
+
+:download:`Download this script <../../examples/MGAdaptTests_without_session.py>`
+
+
+**See Also** the GUI :ref:`adaptation_page`.
diff --git a/doc/gui/input/tui_creating_meshes.rst b/doc/gui/input/tui_creating_meshes.rst
new file mode 100644 (file)
index 0000000..67e14d3
--- /dev/null
@@ -0,0 +1,128 @@
+.. _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
+    :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
+    :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
+    :language: python
+
+:download:`Download this script <../../examples/creating_meshes_ex03.py>`
+
+.. _tui_editing_while_meshing:
+
+Intermediate edition while meshing
+==================================
+
+.. literalinclude:: ../../examples/a3DmeshOnModified2Dmesh.py
+    :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
+    :language: python
+
+:download:`Download this script <../../examples/creating_meshes_ex04.py>`
+
+.. _tui_export_mesh:
+
+Export of a Mesh
+================
+
+.. literalinclude:: ../../examples/creating_meshes_ex05.py
+    :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
+    :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
+    :language: python
+
+:download:`Download this script <../../examples/creating_meshes_ex07.py>`
+
+.. _tui_copy_mesh:
+
+Mesh Copying
+============
+
+.. literalinclude:: ../../examples/creating_meshes_ex08.py
+    :language: python
+
+:download:`Download this script <../../examples/creating_meshes_ex08.py>`
+
+.. _tui_create_dual_mesh:
+
+Creating Dual Mesh
+==================
+
+.. literalinclude:: ../../examples/create_dual_mesh.py
+    :language: python
+
+:download:`Download this script <../../examples/create_dual_mesh.py>`
+
+.. _tui_create_parallel_mesh:
+
+Creating Parallel Mesh
+======================
+
+.. literalinclude:: ../../examples/creating_parallel_mesh.py
+    :language: python
+
+:download:`Download this script <../../examples/creating_parallel_mesh.py>`
diff --git a/doc/gui/input/tui_defining_hypotheses.rst b/doc/gui/input/tui_defining_hypotheses.rst
new file mode 100644 (file)
index 0000000..0121a0c
--- /dev/null
@@ -0,0 +1,340 @@
+.. _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:`Arithmetic 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: NETGEN 2D algorithm
+  
+    * :ref:`tui_max_element_area` hypothesis 
+    * :ref:`tui_length_from_edges` hypothesis 
+  
+* Quadrangle: Mapping 2D algorithm
+  
+    * :ref:`Quadrangle Parameters <tui_quadrangle_parameters>` hypothesis 
+
+* :ref:`Radial Quadrangle 1D-2D <tui_radial_quadrangle>` algorithm
+* NETGEN 3D algorithm
+  
+    *  :ref:`tui_max_element_volume` hypothesis 
+    *  :ref:`Viscous layers <tui_viscous_layers>` hypotheses
+
+* Hexahedron (i,j,k) 3D algorithm
+
+   *   :ref:`tui_block_renumber`
+
+* :ref:`tui_projection`
+* :ref:`Extrusion 3D <tui_prism_3d_algo>` algorithm
+* :ref:`Radial Prism <tui_radial_prism>` algorithm
+* :ref:`Body Fitting <tui_cartesian_algo>` algorithm
+* :ref:`Import 1D-2D Elements from Another Mesh <tui_import>` algorithm
+* :ref:`Use Faces to be Created Manually <tui_use_existing_faces>` algorithm
+* :ref:`Segments around Vertex <tui_segments_around_vertex>` algorithm
+
+
+
+Defining 1D Hypotheses
+######################
+
+.. _tui_1d_arithmetic:
+
+Arithmetic Progression and Geometric Progression
+================================================
+
+.. literalinclude:: ../../examples/defining_hypotheses_ex01.py
+    :language: python
+
+:download:`Download this script <../../examples/defining_hypotheses_ex01.py>`
+
+.. _tui_1d_adaptive:
+
+Adaptive
+========
+
+.. literalinclude:: ../../examples/defining_hypotheses_adaptive1d.py
+    :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
+    :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
+    :language: python
+
+:download:`Download this script <../../examples/defining_hypotheses_ex03.py>`
+
+
+.. _tui_average_length:
+
+Local Length
+============
+
+.. literalinclude:: ../../examples/defining_hypotheses_ex04.py
+    :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
+    :language: python
+
+:download:`Download this script <../../examples/defining_hypotheses_ex05.py>`
+
+
+.. _tui_max_element_volume:
+
+Maximum Element Volume
+======================
+
+.. literalinclude:: ../../examples/defining_hypotheses_ex06.py
+    :language: python
+
+:download:`Download this script <../../examples/defining_hypotheses_ex06.py>`
+
+
+.. _tui_length_from_edges:
+
+Length from Edges
+=================
+
+.. literalinclude:: ../../examples/defining_hypotheses_ex07.py
+    :language: python
+
+:download:`Download this script <../../examples/defining_hypotheses_ex07.py>`
+
+.. _tui_block_renumber:
+
+Renumber 3D hypothesis
+======================
+
+.. literalinclude:: ../../examples/filters_ex39.py
+    :language: python
+
+:download:`Download this script <../../examples/filters_ex39.py>`
+
+Defining Additional Hypotheses
+##############################
+
+.. _tui_propagation:
+
+Propagation
+===========
+
+.. literalinclude:: ../../examples/defining_hypotheses_ex08.py
+    :language: python
+
+:download:`Download this script <../../examples/defining_hypotheses_ex08.py>`
+
+
+.. _tui_defining_meshing_algos:
+
+Defining Meshing Algorithms
+###########################
+
+.. literalinclude:: ../../examples/defining_hypotheses_ex09.py
+    :language: python
+
+:download:`Download this script <../../examples/defining_hypotheses_ex09.py>`
+
+
+.. _tui_projection:
+
+Projection Algorithms
+=====================
+
+.. literalinclude:: ../../examples/defining_hypotheses_ex10.py
+    :language: python
+
+:download:`Download this script <../../examples/defining_hypotheses_ex10.py>`
+
+Projection 1D2D
+===============
+
+.. literalinclude:: ../../examples/defining_hypotheses_ex11.py
+    :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
+    :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
+    :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
+    :language: python
+
+:download:`Download this script <../../examples/defining_hypotheses_ex14.py>`
+
+Quadrangle Parameters example 2 (using different types)
+#######################################################
+
+.. literalinclude:: ../../examples/defining_hypotheses_ex15.py
+    :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
+    :language: python
+
+:download:`Download this script <../../examples/defining_hypotheses_ex16.py>`
+
+.. _tui_viscous_layers:
+
+Viscous layers construction
+###########################
+
+.. literalinclude:: ../../examples/defining_hypotheses_ex17.py
+    :language: python
+
+:download:`Download this script <../../examples/defining_hypotheses_ex17.py>`
+
+.. _tui_viscous_layers_api:
+
+Viscous layers API construction
+###########################
+
+.. literalinclude:: ../../examples/defining_hypotheses_vlapi_ex17.py
+    :language: python
+
+:download:`Download this script <../../examples/defining_hypotheses_vlapi_ex17.py>`
+
+.. _tui_radial_prism:
+
+Radial Prism example
+####################
+
+.. literalinclude:: ../../examples/radial_prism_3d_algo.py
+    :language: python
+
+:download:`Download this script <../../examples/radial_prism_3d_algo.py>`
+
+.. _tui_cartesian_algo:
+
+Usage of Body Fitting algorithm
+###############################
+
+.. literalinclude:: ../../examples/cartesian_algo.py
+    :language: python
+
+:download:`Download this script <../../examples/cartesian_algo.py>`
+
+.. _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
+    :language: python
+
+:download:`Download this script <../../examples/use_existing_faces.py>`
+
+Resulting mesh:
+
+.. image:: ../images/use_existing_face_sample_mesh.png
+       :align: center
+
+
+.. _tui_prism_3d_algo:
+
+Usage of Extrusion 3D meshing algorithm
+########################################
+
+.. literalinclude:: ../../examples/prism_3d_algo.py
+    :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
+
+
+.. _tui_quad_ma_proj_algo:
+
+Usage of Medial Axis Projection algorithm
+#########################################
+
+.. literalinclude:: ../../examples/quad_medial_axis_algo.py
+    :language: python
+
+:download:`Download this script <../../examples/quad_medial_axis_algo.py>`
+
+
+.. _tui_segments_around_vertex:
+
+Usage of Segments around Vertex algorithm
+#########################################
+
+.. literalinclude:: ../../examples/defining_hypotheses_len_near_vertex.py
+    :language: python
+
+:download:`Download this script <../../examples/defining_hypotheses_len_near_vertex.py>`
+
diff --git a/doc/gui/input/tui_filters.rst b/doc/gui/input/tui_filters.rst
new file mode 100644 (file)
index 0000000..db22d5e
--- /dev/null
@@ -0,0 +1,785 @@
+.. _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
+    :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
+    :language: python
+
+:download:`Download this script <../../examples/filters_ex02.py>`
+
+**See also:** :ref:`tui_aspect_ratio_3d`
+
+.. _filter_scaled_jacobian:
+
+Scaled Jacobian
+===============
+
+filters 3D mesh elements (volumes) according to the scaled jacobian value:
+
+* element type is *SMESH.VOLUME*
+* functor type is *SMESH.FT_ScaledJacobian*
+* threshold is floating point value
+
+.. literalinclude:: ../../examples/filters_ex40.py
+    :language: python
+
+:download:`Download this script <../../examples/filters_ex40.py>`
+
+**See also:** :ref:`tui_scaled_jacobian`
+
+.. _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
+    :language: python
+
+:download:`Download this script <../../examples/filters_ex03.py>`
+
+**See also:** :ref:`tui_warping`
+
+.. _filter_warping_3d:
+
+Warping 3D
+=============
+
+filters 3D mesh elements (volumes) according to the maximum warping angle value of the faces of volumes:
+
+* element type is *SMESH.VOLUME*
+* functor type is *SMESH.FT_Warping3D*
+* threshold is floating point value (warping angle)
+
+.. literalinclude:: ../../examples/filters_ex41.py
+    :language: python
+
+:download:`Download this script <../../examples/filters_ex41.py>`
+
+**See also:** :ref:`tui_warping_3d`
+
+.. _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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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.EDGE*, *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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :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
+    :language: python
+
+:download:`Download this script <../../examples/filters_ex36.py>`
diff --git a/doc/gui/input/tui_grouping_elements.rst b/doc/gui/input/tui_grouping_elements.rst
new file mode 100644 (file)
index 0000000..90bd66b
--- /dev/null
@@ -0,0 +1,121 @@
+*****************
+Grouping Elements
+*****************
+
+.. contents:: `Table of contents`
+
+
+.. _tui_create_standalone_group: 
+
+Create a Standalone Group
+=========================
+
+.. literalinclude:: ../../examples/grouping_elements_ex01.py
+    :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
+    :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
+    :language: python
+
+:download:`Download this script <../../examples/grouping_elements_ex03.py>`
+
+.. _tui_edit_group: 
+
+Edit a Group
+============
+
+.. literalinclude:: ../../examples/grouping_elements_ex04.py
+    :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
+    :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
+    :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
+    :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
+    :language: python
+
+:download:`Download this script <../../examples/grouping_elements_ex08.py>`
+
+.. image:: ../images/dimgroup_tui1.png
+       :align: center
+
+
+.. _tui_groups_by_sharp_edges: 
+
+Creating face groups separated by sharp edges
+=============================================
+
+.. literalinclude:: ../../examples/grouping_elements_ex09.py
+    :language: python
+
+:download:`Download this script <../../examples/grouping_elements_ex09.py>`
+
diff --git a/doc/gui/input/tui_measurements.rst b/doc/gui/input/tui_measurements.rst
new file mode 100644 (file)
index 0000000..a891e2a
--- /dev/null
@@ -0,0 +1,43 @@
+.. _tui_measurements_page: 
+
+************
+Measurements
+************
+
+.. _tui_min_distance: 
+
+Minimum Distance
+================
+
+.. literalinclude:: ../../examples/measurements_ex01.py
+    :language: python
+
+:download:`Download this script <../../examples/measurements_ex01.py>`
+
+.. _tui_bounding_box: 
+
+Bounding Box
+============
+
+.. literalinclude:: ../../examples/measurements_ex02.py
+    :language: python
+
+:download:`Download this script <../../examples/measurements_ex02.py>`
+
+.. _tui_basic_properties: 
+
+Basic Properties
+================
+
+.. literalinclude:: ../../examples/measurements_ex03.py
+    :language: python
+
+:download:`Download this script <../../examples/measurements_ex03.py>`
+
+Angle
+=====
+
+.. literalinclude:: ../../examples/measurements_ex04.py
+    :language: python
+
+:download:`Download this script <../../examples/measurements_ex04.py>`
diff --git a/doc/gui/input/tui_modifying_meshes.rst b/doc/gui/input/tui_modifying_meshes.rst
new file mode 100644 (file)
index 0000000..c8297ee
--- /dev/null
@@ -0,0 +1,338 @@
+.. _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
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex01.py>`
+
+.. _tui_add_0DElement:
+
+Add 0D Element
+**************
+
+.. literalinclude:: ../../examples/modifying_meshes_ex02.py
+    :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
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex03.py>`
+
+.. _tui_add_edge:
+
+Add Edge
+********
+
+.. literalinclude:: ../../examples/modifying_meshes_ex04.py
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex04.py>`
+
+.. _tui_add_triangle:
+
+Add Triangle
+************
+
+.. literalinclude:: ../../examples/modifying_meshes_ex05.py
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex05.py>`
+
+.. _tui_add_quadrangle:
+
+Add Quadrangle
+**************
+
+.. literalinclude:: ../../examples/modifying_meshes_ex06.py
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex06.py>`
+
+.. _tui_add_tetrahedron:
+
+Add Tetrahedron
+***************
+
+.. literalinclude:: ../../examples/modifying_meshes_ex07.py
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex07.py>`
+
+.. _tui_add_hexahedron:
+
+Add Hexahedron
+**************
+
+.. literalinclude:: ../../examples/modifying_meshes_ex08.py
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex08.py>`
+
+.. _tui_add_polygon:
+
+Add Polygon
+***********
+
+.. literalinclude:: ../../examples/modifying_meshes_ex09.py
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex09.py>`
+
+.. _tui_add_polyhedron:
+
+Add Polyhedron
+**************
+
+.. literalinclude:: ../../examples/modifying_meshes_ex10.py
+    :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
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex11.py>`
+
+.. _tui_removing_elements:
+
+Removing Elements
+*****************
+
+.. literalinclude:: ../../examples/modifying_meshes_ex12.py
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex12.py>`
+
+.. _tui_removing_orphan_nodes:
+
+Removing Orphan Nodes
+*********************
+
+.. literalinclude:: ../../examples/modifying_meshes_ex13.py
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex13.py>`
+
+.. _tui_moving_nodes: 
+
+Moving Nodes
+============
+
+.. literalinclude:: ../../examples/modifying_meshes_ex15.py
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex15.py>`
+
+.. _tui_diagonal_inversion: 
+
+Diagonal Inversion
+==================
+
+.. literalinclude:: ../../examples/modifying_meshes_ex16.py
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex16.py>`
+
+.. _tui_uniting_two_triangles:
+
+Uniting two Triangles
+=====================
+
+.. literalinclude:: ../../examples/modifying_meshes_ex17.py
+    :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
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex18.py>`
+
+.. _tui_orientation: 
+
+Orientation
+===========
+
+.. literalinclude:: ../../examples/modifying_meshes_ex19.py
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex19.py>`
+
+.. _tui_cutting_quadrangles: 
+
+Cutting Quadrangles
+===================
+
+.. literalinclude:: ../../examples/modifying_meshes_ex20.py
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex20.py>`
+
+.. _tui_cutting_triangles: 
+
+Cutting Triangles
+=================
+
+.. literalinclude:: ../../examples/modifying_meshes_cut_triangles.py
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_cut_triangles.py>`
+
+.. _modifying_meshes_split_vol: 
+
+Split Volumes into Tetrahedra
+=============================
+
+.. literalinclude:: ../../examples/modifying_meshes_split_vol.py
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_split_vol.py>`
+
+.. _tui_smoothing: 
+
+Smoothing
+=========
+
+.. literalinclude:: ../../examples/modifying_meshes_ex21.py
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex21.py>`
+
+.. _tui_extrusion: 
+
+Extrusion
+=========
+
+.. literalinclude:: ../../examples/modifying_meshes_ex22.py
+    :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
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex23.py>`
+
+.. _tui_revolution: 
+
+Revolution
+==========
+
+.. literalinclude:: ../../examples/modifying_meshes_ex24.py
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex24.py>`
+
+.. _tui_pattern_mapping: 
+
+Pattern Mapping
+===============
+
+.. literalinclude:: ../../examples/modifying_meshes_ex25.py
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex25.py>`
+
+.. _tui_quadratic: 
+
+Convert mesh to/from quadratic
+==============================
+
+.. literalinclude:: ../../examples/modifying_meshes_ex26.py
+    :language: python
+
+:download:`Download this script <../../examples/modifying_meshes_ex26.py>`
+
+.. _tui_split_biquad: 
+
+Split bi-quadratic into linear
+==============================
+
+.. literalinclude:: ../../examples/split_biquad.py
+    :language: python
+
+:download:`Download this script <../../examples/split_biquad.py>`
+
+.. _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 block (a big cylinder).
+The big cylinder is defined by two geometric volumes.
+
+.. literalinclude:: ../../examples/generate_flat_elements.py
+    :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/gui/input/tui_notebook_smesh.rst b/doc/gui/input/tui_notebook_smesh.rst
new file mode 100644 (file)
index 0000000..7384e67
--- /dev/null
@@ -0,0 +1,16 @@
+.. _tui_notebook_smesh_page: 
+
+
+*********************
+Using SALOME NoteBook
+*********************
+
+.. _tui_notebook_smesh:
+
+Notebook Smesh
+==============
+
+.. literalinclude:: ../../examples/notebook_smesh.py
+    :language: python
+
+:download:`Download this script <../../examples/notebook_smesh.py>`
diff --git a/doc/gui/input/tui_quality_controls.rst b/doc/gui/input/tui_quality_controls.rst
new file mode 100644 (file)
index 0000000..478b807
--- /dev/null
@@ -0,0 +1,262 @@
+.. _tui_quality_controls_page: 
+
+****************
+Quality Controls
+****************
+
+.. contents:: `Table of contents`
+
+
+.. _tui_free_borders: 
+
+Free Borders
+============
+
+.. literalinclude:: ../../examples/quality_controls_ex01.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex01.py>`
+
+
+.. _tui_borders_at_multiconnection: 
+
+Borders at Multiconnection
+==========================
+
+.. literalinclude:: ../../examples/quality_controls_ex02.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex02.py>`
+
+
+.. _tui_length_1d: 
+
+Length 1D
+=========
+
+.. literalinclude:: ../../examples/quality_controls_ex03.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex03.py>`
+
+.. _tui_free_edges: 
+
+Free Edges
+==========
+
+.. literalinclude:: ../../examples/quality_controls_ex04.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex04.py>`
+
+.. _tui_free_nodes: 
+
+Free Nodes
+==========
+
+.. literalinclude:: ../../examples/quality_controls_ex05.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex05.py>`
+
+.. _tui_free_faces: 
+
+Free Faces
+==========
+
+.. literalinclude:: ../../examples/quality_controls_ex06.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex06.py>`
+
+.. _tui_bare_border_faces: 
+
+Bare border faces
+=================
+
+.. literalinclude:: ../../examples/quality_controls_ex07.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex07.py>`
+
+.. _tui_bare_border_volumes: 
+
+Bare border volumes
+===================
+
+.. literalinclude:: ../../examples/quality_controls_ex08.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex08.py>`
+
+.. _tui_over_constrained_faces: 
+
+Over-constrained faces
+======================
+
+.. literalinclude:: ../../examples/quality_controls_ex09.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex09.py>`
+
+.. _tui_over_constrained_volumes: 
+
+Over-constrained volumes
+========================
+
+.. literalinclude:: ../../examples/quality_controls_ex10.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex10.py>`
+
+.. _tui_length_2d: 
+
+Length 2D
+=========
+
+.. literalinclude:: ../../examples/quality_controls_ex11.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex11.py>`
+
+
+.. _tui_deflection_2d:
+
+Deflection 2D
+=============
+
+.. literalinclude:: ../../examples/quality_controls_defl.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_defl.py>`
+
+
+.. _tui_borders_at_multiconnection_2d: 
+
+Borders at Multiconnection 2D
+=============================
+
+.. literalinclude:: ../../examples/quality_controls_ex12.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex12.py>`
+
+.. _tui_area: 
+
+Area
+====
+
+.. literalinclude:: ../../examples/quality_controls_ex13.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex13.py>`
+
+.. _tui_taper: 
+
+Taper
+=====
+
+.. literalinclude:: ../../examples/quality_controls_ex14.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex14.py>`
+
+.. _tui_aspect_ratio: 
+
+Aspect Ratio
+============
+
+.. literalinclude:: ../../examples/quality_controls_ex15.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex15.py>`
+
+.. _tui_minimum_angle: 
+
+Minimum Angle
+=============
+
+.. literalinclude:: ../../examples/quality_controls_ex16.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex16.py>`
+
+.. _tui_warping: 
+
+Warping
+=======
+
+.. literalinclude:: ../../examples/quality_controls_ex17.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex17.py>`
+
+.. _tui_skew: 
+
+Skew
+====
+
+.. literalinclude:: ../../examples/quality_controls_ex18.py
+    :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
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex19.py>`
+
+.. _tui_aspect_ratio_3d: 
+
+Aspect Ratio 3D
+===============
+
+.. literalinclude:: ../../examples/quality_controls_ex20.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex20.py>`
+
+.. _tui_volume: 
+
+Volume
+======
+
+.. literalinclude:: ../../examples/quality_controls_ex21.py
+    :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
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex22.py>`
+
+.. _tui_scaled_jacobian:
+
+Scaled Jacobian
+===================
+
+.. literalinclude:: ../../examples/quality_controls_ex24.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex24.py>`
+
+.. _tui_warping_3d: 
+
+Warping 3D
+=======
+
+.. literalinclude:: ../../examples/quality_controls_ex23.py
+    :language: python
+
+:download:`Download this script <../../examples/quality_controls_ex23.py>`
diff --git a/doc/gui/input/tui_transforming_meshes.rst b/doc/gui/input/tui_transforming_meshes.rst
new file mode 100644 (file)
index 0000000..01c89f9
--- /dev/null
@@ -0,0 +1,158 @@
+.. _tui_transforming_meshes_page: 
+
+*******************
+Transforming Meshes
+*******************
+
+.. contents:: `Table of contents`
+
+
+.. _tui_translation: 
+
+Translation
+===========
+
+.. literalinclude:: ../../examples/transforming_meshes_ex01.py
+    :language: python
+
+:download:`Download this script <../../examples/transforming_meshes_ex01.py>`
+
+.. _tui_rotation: 
+
+Rotation
+========
+
+.. literalinclude:: ../../examples/transforming_meshes_ex02.py
+    :language: python
+
+:download:`Download this script <../../examples/transforming_meshes_ex02.py>`
+
+.. _tui_scale: 
+
+Scale
+=====
+
+.. literalinclude:: ../../examples/transforming_meshes_ex03.py
+    :language: python
+
+:download:`Download this script <../../examples/transforming_meshes_ex03.py>`
+
+.. _tui_symmetry: 
+
+Symmetry
+========
+
+.. literalinclude:: ../../examples/transforming_meshes_ex04.py
+    :language: python
+
+:download:`Download this script <../../examples/transforming_meshes_ex04.py>`
+
+.. _tui_merging_nodes: 
+
+Merging Nodes
+=============
+
+.. literalinclude:: ../../examples/transforming_meshes_ex05.py
+    :language: python
+
+:download:`Download this script <../../examples/transforming_meshes_ex05.py>`
+
+.. _tui_merging_elements: 
+
+Merging Elements
+================
+
+.. literalinclude:: ../../examples/transforming_meshes_ex06.py
+    :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
+    :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
+    :language: python
+
+:download:`Download this script <../../examples/transforming_meshes_ex08.py>`
+
+.. _tui_sew_free_borders: 
+
+Sew Free Borders
+================
+
+.. literalinclude:: ../../examples/transforming_meshes_ex09.py
+    :language: python
+
+:download:`Download this script <../../examples/transforming_meshes_ex09.py>`
+
+.. _tui_sew_side_elements: 
+
+Sew Side Elements
+=================
+
+.. literalinclude:: ../../examples/transforming_meshes_ex10.py
+    :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
+    :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
+    :language: python
+
+:download:`Download this script <../../examples/transforming_meshes_ex12.py>`
+
+.. _tui_reorient_faces: 
+
+Reorient faces
+==============
+
+.. literalinclude:: ../../examples/transforming_meshes_ex13.py
+    :language: python
+
+:download:`Download this script <../../examples/transforming_meshes_ex13.py>`
+
+.. _tui_make_2dmesh_from_3d_elements: 
+
+Create 2D mesh from 3D elements
+========================
+
+.. literalinclude:: ../../examples/transforming_meshes_ex14.py
+    :language: python
+
+:download:`Download this script <../../examples/transforming_meshes_ex14.py>`
+
+.. _tui_offset_elements: 
+
+Offset 2D mesh
+========================
+
+.. literalinclude:: ../../examples/transforming_meshes_ex15.py
+    :language: python
+
+:download:`Download this script <../../examples/transforming_meshes_ex15.py>`
\ No newline at end of file
diff --git a/doc/gui/input/tui_viewing_meshes.rst b/doc/gui/input/tui_viewing_meshes.rst
new file mode 100644 (file)
index 0000000..4a67295
--- /dev/null
@@ -0,0 +1,36 @@
+
+.. _tui_viewing_meshes_page:
+
+**************
+Viewing Meshes
+**************
+
+.. _tui_viewing_mesh_infos:
+
+Viewing Basic Mesh Infos
+########################
+
+.. literalinclude:: ../../examples/viewing_meshes_ex01.py
+    :language: python
+
+:download:`Download this script <../../examples/viewing_meshes_ex01.py>`
+
+.. _tui_node_element_mesh_infos:
+
+Viewing node element Mesh Infos
+###############################
+
+.. literalinclude:: ../../examples/viewing_meshes_ex03.py
+    :language: python
+
+:download:`Download this script <../../examples/viewing_meshes_ex03.py>`
+
+.. _tui_find_element_by_point:
+
+Find Element by Point
+#####################
+
+.. literalinclude:: ../../examples/viewing_meshes_ex02.py
+    :language: python
+
+:download:`Download this script <../../examples/viewing_meshes_ex02.py>`
diff --git a/doc/gui/input/tui_work_on_objects_from_gui.rst b/doc/gui/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/gui/input/uniting_set_of_triangles.rst b/doc/gui/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/gui/input/uniting_two_triangles.rst b/doc/gui/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/gui/input/use_existing_algos.rst b/doc/gui/input/use_existing_algos.rst
new file mode 100644 (file)
index 0000000..d362c70
--- /dev/null
@@ -0,0 +1,62 @@
+.. _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 algorithms import elements whose all nodes lye on the geometry
+being meshed.
+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. The algorithm imports a mesh face provided that all its nodes lye on the geometrical face.
+
+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/gui/input/using_notebook_smesh_page.rst b/doc/gui/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/gui/input/using_operations_on_groups.rst b/doc/gui/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/gui/input/viewing_meshes_overview.rst b/doc/gui/input/viewing_meshes_overview.rst
new file mode 100644 (file)
index 0000000..06c9197
--- /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 3D Viewer, 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. If :ref:`Fit All upon Show Only <display_mode_pref>` Preference option is active, *Fit All* command is additionally performed.
+* :doc:`clipping` - allows to create cross-sections of the displayed objects.
+* **Dump view** - exports an object from the viewer in bmp, png or jpeg image format.
+* **Change background** - allows to redefine the background color. By default it is black.
+* **View Operations** - 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/gui/input/volume.rst b/doc/gui/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/gui/input/warping.rst b/doc/gui/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/gui/input/warping_3d.rst b/doc/gui/input/warping_3d.rst
new file mode 100644 (file)
index 0000000..6050357
--- /dev/null
@@ -0,0 +1,24 @@
+.. _warping_3d_page: 
+
+*******
+Warping 3D
+*******
+
+3D Warping control compute warping angle on each faces of volume elements.
+
+The page :ref:`warping_page` provide information about computing warping angle for 2D element
+
+*To apply the Warping quality criterion to your mesh:*
+
+.. |img| image:: ../images/image39.png
+
+#. Display your mesh in the viewer.
+#. Choose **Controls > Volume Controls > Warping 3D** or click *"Warping 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/image_warping3D.jpg
+                       :align: center
+
+
+**See Also** a sample TUI Script of a :ref:`tui_warping_3d` filter.
diff --git a/doc/gui/locale/fr/LC_MESSAGES/1d_meshing_hypo.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/2d_meshing_hypo.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/about_filters.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/about_hypo.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/about_meshes.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/about_quality_controls.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/adding_nodes_and_elements.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/adding_quadratic_elements.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/additional_hypo.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/area.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/aspect_ratio.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/aspect_ratio_3d.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/bare_border_face.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/bare_border_volumes.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/basic_meshing_algos.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/borders_at_multi_connection.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/borders_at_multi_connection_2d.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/building_compounds.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/cartesian_algo.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/changing_orientation_of_elements.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/clipping.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/colors_size.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/connectivity.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/constructing_meshes.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/constructing_submeshes.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/convert_to_from_quadratic_mesh.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/copy_mesh.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/create_groups_from_geometry.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/creating_groups.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/cut_mesh_by_plane.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/cutting_quadrangles.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/define_mesh_by_script.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/deleting_groups.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/diagonal_inversion_of_elements.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/display_entity.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/display_mode.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/double_elements_control.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/double_nodes_control.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/double_nodes_page.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/editing_groups.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/editing_meshes.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/extrusion.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/extrusion_along_path.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/find_element_by_point.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/free_borders.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/free_edges.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/free_faces.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/free_nodes.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/generate_flat_elements.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/group_of_underlying_elements.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/grouping_elements.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/importing_exporting_meshes.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/index.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/introduction.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/length.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/length_2d.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/make_2dmesh_from_3d.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/max_element_length_2d.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/max_element_length_3d.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/max_element_volume_hypo.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/measurements.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/merging_elements.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/merging_nodes.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/mesh_infos.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/mesh_preferences.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/mesh_through_point.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/minimum_angle.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/modifying_meshes.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/modules.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/numbering.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/over_constrained_faces.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/over_constrained_volumes.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/pattern_mapping.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/point_marker.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/prism_3d_algo.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/projection_algos.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/python_api.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/quad_from_ma_algo.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/quad_ijk_algo.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/radial_prism_algo.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/radial_quadrangle_1D2D_algo.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/removing_nodes_and_elements.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/reorient_faces.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/revolution.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/rotation.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/scalar_bar.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/scale.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/segments_around_vertex_algo.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/selection_filter_library.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/sewing_meshes.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/skew.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/smesh_migration.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/smeshpy_interface.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/smoothing.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/split_biquad_to_linear.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/split_to_tetra.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/symmetry.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/taper.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/tools.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/translation.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/transparency.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/tui_cartesian_algo.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/tui_creating_meshes.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/tui_defining_hypotheses.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/tui_filters.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/tui_generate_flat_elements.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/tui_grouping_elements.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/tui_measurements.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/tui_modifying_meshes.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/tui_notebook_smesh.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/tui_prism_3d_algo.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/tui_quality_controls.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/tui_transforming_meshes.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/tui_use_existing_faces.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/tui_viewing_meshes.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/tui_work_on_objects_from_gui.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/uniting_set_of_triangles.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/uniting_two_triangles.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/use_existing_algos.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/using_notebook_smesh_page.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/using_operations_on_groups.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/viewing_meshes_overview.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/volume.po b/doc/gui/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/gui/locale/fr/LC_MESSAGES/warping.po b/doc/gui/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/gui/merge_mesh_class.py b/doc/gui/merge_mesh_class.py
new file mode 100755 (executable)
index 0000000..bd1048f
--- /dev/null
@@ -0,0 +1,78 @@
+#!/usr/bin/env python3
+# Copyright (C) 2017-2024  CEA, EDF, 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
+#
+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 )
+        origin_module = locals()[ 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 )
+        dynanmic_module = locals()[ 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+=locals()['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/gui/static/switchers.js.in b/doc/gui/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/gui/templates/layout.html b/doc/gui/templates/layout.html
new file mode 100644 (file)
index 0000000..a61738d
--- /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">
+         Copyright &copy; 2007-2024  CEA, EDF, 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.
+ </div>
+ {{ super() }}
+{%- endblock %}
diff --git a/doc/salome/CMakeLists.txt b/doc/salome/CMakeLists.txt
deleted file mode 100644 (file)
index ccc73ba..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# Copyright (C) 2007-2020  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
-#
-
-ADD_SUBDIRECTORY(tui)
-ADD_SUBDIRECTORY(gui)
-ADD_SUBDIRECTORY(examples)
\ No newline at end of file
diff --git a/doc/salome/examples/3dmesh.py b/doc/salome/examples/3dmesh.py
deleted file mode 100644 (file)
index 04d6073..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-# 3d mesh generation and mesh exploration
-
-import salome
-salome.salome_init()
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-###
-# Geometry: an assembly of a box, a cylinder and a truncated cone
-# to be meshed with tetrahedra
-###
-
-# Define values
-name = "ex21_lamp" 
-cote = 60 
-section = 20 
-size = 200 
-radius_1 = 80 
-radius_2 = 40 
-height = 100 
-
-# Build a box
-box = geompy.MakeBox(-cote, -cote, -cote, +cote, +cote, +cote) 
-
-# Build a cylinder
-pt1 = geompy.MakeVertex(0, 0, cote/3) 
-di1 = geompy.MakeVectorDXDYDZ(0, 0, 1) 
-cyl = geompy.MakeCylinder(pt1, di1, section, size) 
-
-# Build a truncated cone
-pt2 = geompy.MakeVertex(0, 0, size) 
-cone = geompy.MakeCone(pt2, di1, radius_1, radius_2, height) 
-
-# Fuse
-box_cyl = geompy.MakeFuse(box, cyl) 
-piece = geompy.MakeFuse(box_cyl, cone) 
-
-# Add to the study
-geompy.addToStudy(piece, name) 
-
-# Create a group of faces
-faces_group = geompy.CreateGroup(piece, geompy.ShapeType["FACE"]) 
-group_name = name + "_grp" 
-geompy.addToStudy(faces_group, group_name) 
-faces_group.SetName(group_name) 
-
-# Add faces to the group
-faces = geompy.SubShapeAllIDs(piece, geompy.ShapeType["FACE"]) 
-geompy.UnionIDs(faces_group, faces) 
-
-###
-# Create a mesh
-###
-
-# Define a mesh on a geometry
-tetra = smesh.Mesh(piece, name) 
-
-# Define 1D algorithm and hypothesis
-algo1d = tetra.Segment() 
-algo1d.LocalLength(10) 
-
-# Define 2D algorithm and hypothesis
-algo2d = tetra.Triangle() 
-algo2d.LengthFromEdges() 
-
-# Define 3D algorithm and hypothesis
-algo3d = tetra.Tetrahedron()
-algo3d.MaxElementVolume(100) 
-
-# Compute the mesh
-tetra.Compute() 
-
-# Create a mesh group of all triangles generated on geom faces present in faces_group
-group = tetra.Group(faces_group)
-
-###
-# Explore the mesh
-###
-
-# Retrieve coordinates of nodes
-coordStr = ""
-for node in tetra.GetNodesId():
-    x,y,z = tetra.GetNodeXYZ( node )
-    coordStr += "%s (%s, %s, %s) " % ( node, x,y,z )
-    pass
-
-# Retrieve nodal connectivity of triangles
-triaStr = ""
-for tria in tetra.GetElementsByType( SMESH.FACE ):
-    nodes = tetra.GetElemNodes( tria )
-    triaStr += "%s (%s, %s, %s) " % ( tria, nodes[0], nodes[1], nodes[2] )
-
-# Retrieve group contents
-groupStr = ""
-for group in tetra.GetGroups():
-    ids   = group.GetIDs()
-    name  = group.GetName()
-    eType = group.GetType()
-    groupStr += "'%s' %s: %s \n" % ( name, eType, ids )
-
diff --git a/doc/salome/examples/CMakeLists.txt b/doc/salome/examples/CMakeLists.txt
deleted file mode 100644 (file)
index 8121124..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-# Copyright (C) 2012-2020  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(tests.set)
-
-SET(TEST_REINIT_SALOME "False")
-SALOME_CONFIGURE_FILE(tests.py.in tests.py)
-
-SALOME_GENERATE_TESTS_ENVIRONMENT(tests_env)
-
-IF(SMESH_JOIN_TESTS)
-  ADD_TEST(NAME SMESH_examples COMMAND ${PYTHON_EXECUTABLE} -B ${CMAKE_SOURCE_DIR}/doc/salome/examples/testme.py tests.py)
-ELSE(SMESH_JOIN_TESTS)
-  FOREACH(test ${GOOD_TESTS})
-    GET_FILENAME_COMPONENT(testname ${test} NAME_WE)
-    ADD_TEST(NAME ${testname}
-             COMMAND ${PYTHON_EXECUTABLE} -B ${CMAKE_SOURCE_DIR}/doc/salome/examples/testme.py ${CMAKE_CURRENT_SOURCE_DIR}/${test})
-    SET_TESTS_PROPERTIES(${testname} PROPERTIES ENVIRONMENT "${tests_env}")
-  ENDFOREACH()
-ENDIF(SMESH_JOIN_TESTS)
-
-# install Python scripts
-SALOME_INSTALL_SCRIPTS("${EXAMPLES_TESTS}" ${SALOME_INSTALL_DOC}/examples/SMESH)
-
-# Application tests
-
-SET(TEST_INSTALL_DIRECTORY ${SALOME_INSTALL_SCRIPT_SCRIPTS}/test)
-INSTALL(FILES ${GOOD_TESTS} ${BAD_TESTS} DESTINATION ${TEST_INSTALL_DIRECTORY})
-
-INSTALL(FILES CTestTestfileInstall.cmake
-        DESTINATION ${TEST_INSTALL_DIRECTORY}
-        RENAME CTestTestfile.cmake)
-INSTALL(FILES tests.set DESTINATION ${TEST_INSTALL_DIRECTORY})
diff --git a/doc/salome/examples/CTestTestfileInstall.cmake b/doc/salome/examples/CTestTestfileInstall.cmake
deleted file mode 100644 (file)
index 9a38643..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# Copyright (C) 2015-2020  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(tests.set)
-
-SET(SALOME_TEST_DRIVER "$ENV{KERNEL_ROOT_DIR}/bin/salome/appliskel/salome_test_driver.py")
-SET(COMPONENT_NAME SMESH)
-SET(TIMEOUT        300)
-
-FOREACH(tfile ${GOOD_TESTS} ${BAD_TESTS})
-  GET_FILENAME_COMPONENT(BASE_NAME ${tfile} NAME_WE)
-  SET(TEST_NAME SMESH_${BASE_NAME})
-  ADD_TEST(${TEST_NAME} python ${SALOME_TEST_DRIVER} ${TIMEOUT} ${tfile})
-  SET_TESTS_PROPERTIES(${TEST_NAME} PROPERTIES LABELS "${COMPONENT_NAME}")
-ENDFOREACH()
diff --git a/doc/salome/examples/a3DmeshOnModified2Dmesh.py b/doc/salome/examples/a3DmeshOnModified2Dmesh.py
deleted file mode 100644 (file)
index ae03906..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-import salome
-salome.salome_init()
-
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-# This script demonstrates generation of 3D mesh basing on a modified 2D mesh
-#
-# Purpose is to get a tetrahedral mesh in a sphere cut by a cube.
-# The requirement is to have a surface mesh on the cube comprised of
-# triangles of exactly the same size arranged in a grid pattern.
-#
-# To fulfill this requirement we mesh the box using Quadrangle: Mapping
-# meshing algorithm, split quadrangles into triangles and then generate
-# tetrahedrons.
-
-
-# Make the geometry
-
-Box_1    = geompy.MakeBox(-100,-100,-100, 100, 100, 100)
-Sphere_1 = geompy.MakeSphereR( 300 )
-Cut_1    = geompy.MakeCut(Sphere_1, Box_1, theName="Cut_1")
-# get a spherical face
-Sph_Face = geompy.ExtractShapes( Sphere_1, geompy.ShapeType["FACE"] )[0]
-
-# get the shape Sph_Face turned into during MakeCut()
-Sph_Face = geompy.GetInPlace(Cut_1, Sph_Face, isNewImplementation=True, theName="Sphere_1")
-
-
-# 1) Define a mesh with 1D and 2D meshers
-
-import  SMESH
-from salome.smesh import smeshBuilder
-smesh = smeshBuilder.New()
-
-Mesh_1 = smesh.Mesh(Cut_1)
-
-# "global" meshers (assigned to Cut_1) that will be used for the box
-Regular_1D = Mesh_1.Segment()
-Local_Length_1 = Regular_1D.LocalLength(20)
-Quadrangle_2D = Mesh_1.Quadrangle()
-
-# a "local" mesher (assigned to a sub-mesh on Sphere_1) to mesh the sphere
-algo_2D = Mesh_1.Triangle( smeshBuilder.NETGEN_1D2D, Sph_Face )
-algo_2D.SetMaxSize( 70. )
-algo_2D.SetFineness( smeshBuilder.Moderate )
-algo_2D.SetMinSize( 7. )
-
-# 2) Compute 2D mesh
-isDone = Mesh_1.Compute()
-
-# 3) Split quadrangles into triangles
-isDone = Mesh_1.SplitQuadObject( Mesh_1, Diag13=True )
-
-# 4) Define a 3D mesher
-Mesh_1.Tetrahedron()
-
-# 5) Compute 3D mesh
-Mesh_1.Compute()
-
-if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/cartesian_algo.py b/doc/salome/examples/cartesian_algo.py
deleted file mode 100644 (file)
index d7d64b8..0000000
+++ /dev/null
@@ -1,111 +0,0 @@
-# Usage of Body Fitting algorithm
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-
-# create a sphere
-sphere = geompy.MakeSphereR( 50 )
-
-# cut the sphere by a box
-box = geompy.MakeBoxDXDYDZ( 100, 100, 100 )
-partition = geompy.MakePartition([ sphere ], [ box ], theName="partition")
-
-# create a mesh and assign a "Body Fitting" algo
-mesh = smesh.Mesh( partition )
-cartAlgo = mesh.BodyFitted()
-
-# define a cartesian grid using Coordinates
-coords = list(range(-100,100,10))
-cartHyp = cartAlgo.SetGrid( coords,coords,coords, 1000000)
-
-# compute the mesh
-mesh.Compute()
-print("nb hexahedra",mesh.NbHexas())
-print("nb tetrahedra",mesh.NbTetras())
-print("nb polyhedra",mesh.NbPolyhedrons())
-print()
-
-# define the grid by setting constant spacing
-cartHyp = cartAlgo.SetGrid( "10","10","10", 1000000)
-
-mesh.Compute()
-print("nb hexahedra",mesh.NbHexas())
-print("nb tetrahedra",mesh.NbTetras())
-print("nb polyhedra",mesh.NbPolyhedrons())
-print("nb faces",mesh.NbFaces())
-print()
-
-# activate creation of faces
-cartHyp.SetToCreateFaces( True )
-
-mesh.Compute()
-print("nb hexahedra",mesh.NbHexas())
-print("nb tetrahedra",mesh.NbTetras())
-print("nb polyhedra",mesh.NbPolyhedrons())
-print("nb faces",mesh.NbFaces())
-print()
-
-# enable consideration of shared faces
-cartHyp.SetToConsiderInternalFaces( True )
-mesh.Compute()
-print("nb hexahedra",mesh.NbHexas())
-print("nb tetrahedra",mesh.NbTetras())
-print("nb polyhedra",mesh.NbPolyhedrons())
-print("nb faces",mesh.NbFaces())
-print()
-
-# define the grid by setting different spacing in 2 sub-ranges of geometry
-spaceFuns = ["5","10+10*t"]
-cartAlgo.SetGrid( [spaceFuns, [0.5]], [spaceFuns, [0.5]], [spaceFuns, [0.25]], 10 )
-
-mesh.Compute()
-print("nb hexahedra",mesh.NbHexas())
-print("nb tetrahedra",mesh.NbTetras())
-print("nb polyhedra",mesh.NbPolyhedrons())
-print()
-
-# Example of customization of dirtections of the grid axes
-
-# make a box with non-orthogonal edges
-xDir = geompy.MakeVectorDXDYDZ( 1.0, 0.1, 0.0, "xDir" )
-yDir = geompy.MakeVectorDXDYDZ(-0.1, 1.0, 0.0, "yDir"  )
-zDir = geompy.MakeVectorDXDYDZ( 0.2, 0.3, 1.0, "zDir"  )
-face = geompy.MakePrismVecH( xDir, yDir, 1.0 )
-box  = geompy.MakePrismVecH( face, zDir, 1.0, theName="box" )
-
-spc = "0.1" # spacing
-
-# default axes
-mesh = smesh.Mesh( box, "custom axes")
-algo = mesh.BodyFitted()
-algo.SetGrid( spc, spc, spc, 10000 )
-mesh.Compute()
-print("Default axes")
-print("   nb hex:",mesh.NbHexas())
-
-# set axes using edges of the box
-algo.SetAxesDirs( xDir, [-0.1,1,0], zDir )
-mesh.Compute()
-print("Manual axes")
-print("   nb hex:",mesh.NbHexas())
-
-# set optimal orthogonal axes
-algo.SetOptimalAxesDirs( isOrthogonal=True )
-mesh.Compute()
-print("Optimal orthogonal axes")
-print("   nb hex:",mesh.NbHexas())
-
-# set optimal non-orthogonal axes
-algo.SetOptimalAxesDirs( isOrthogonal=False )
-mesh.Compute()
-print("Optimal non-orthogonal axes")
-print("   nb hex:",mesh.NbHexas())
diff --git a/doc/salome/examples/create_penta_biquad.py b/doc/salome/examples/create_penta_biquad.py
deleted file mode 100644 (file)
index 9e7ec27..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import sys
-import salome
-
-salome.salome_init()
-
-import  SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-
-smesh = smeshBuilder.New()
-unPentaBiQuad = smesh.Mesh()
-nodeID = unPentaBiQuad.AddNode( 0, 0, 0 )
-nodeID = unPentaBiQuad.AddNode( 10, 0, 0 )
-nodeID = unPentaBiQuad.AddNode( 0, 10, 0 )
-nodeID = unPentaBiQuad.AddNode( 0, 0, 10 )
-nodeID = unPentaBiQuad.AddNode( 10, 0, 10 )
-nodeID = unPentaBiQuad.AddNode( 0, 10, 10 )
-nodeID = unPentaBiQuad.AddNode( 5, 0, 0 )
-nodeID = unPentaBiQuad.AddNode( 7, 7, 0 )
-nodeID = unPentaBiQuad.AddNode( 0, 5, 0 )
-nodeID = unPentaBiQuad.AddNode( 5, 0, 10 )
-nodeID = unPentaBiQuad.AddNode( 7, 7, 10 )
-nodeID = unPentaBiQuad.AddNode( 0, 5, 10 )
-nodeID = unPentaBiQuad.AddNode( 0, 0, 5 )
-nodeID = unPentaBiQuad.AddNode( 10, 0, 5 )
-nodeID = unPentaBiQuad.AddNode( 0, 10, 5 )
-nodeID = unPentaBiQuad.AddNode( 5, -1, 5 )
-nodeID = unPentaBiQuad.AddNode( 8, 8, 5 )
-nodeID = unPentaBiQuad.AddNode( -1, 5, 5 )
-volID = unPentaBiQuad.AddVolume( [ 4, 5, 6, 1, 2, 3, 10, 11, 12, 7, 8, 9, 13, 14, 15, 16, 17, 18 ] )
-
-infos = unPentaBiQuad.GetMeshInfo()
-print("Number of biquadratic pentahedrons:", infos[SMESH.Entity_BiQuad_Penta])
-if (infos[SMESH.Entity_BiQuad_Penta] != 1):
-  raise RuntimeError("Bad number of biquadratic pentahedrons: should be 1")
-
-## Set names of Mesh objects
-smesh.SetName(unPentaBiQuad.GetMesh(), 'unPentaBiQuad')
-
-if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/creating_meshes_ex01.py b/doc/salome/examples/creating_meshes_ex01.py
deleted file mode 100644 (file)
index 110f626..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-# Construction of a Mesh
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create a box
-box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
-idbox = geompy.addToStudy(box, "box")
-
-# create a mesh
-tetra = smesh.Mesh(box, "MeshBox")
-
-algo1D = tetra.Segment()
-algo1D.NumberOfSegments(7)
-
-algo2D = tetra.Triangle()
-algo2D.MaxElementArea(800.)
-
-algo3D = tetra.Tetrahedron()
-algo3D.MaxElementVolume(900.)
-
-# compute the mesh
-ret = tetra.Compute()
-if ret == 0:
-    print("problem when computing the mesh")
-else:
-    print("mesh computed")
-    pass
diff --git a/doc/salome/examples/creating_meshes_ex02.py b/doc/salome/examples/creating_meshes_ex02.py
deleted file mode 100644 (file)
index 522f72b..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-# Construction of a Sub-mesh
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create a box
-box = geompy.MakeBoxDXDYDZ(10., 10., 10.)
-geompy.addToStudy(box, "Box")
-
-# select one edge of the box for definition of a local hypothesis
-p5 = geompy.MakeVertex(5., 0., 0.)
-EdgeX = geompy.GetEdgeNearPoint(box, p5)
-geompy.addToStudyInFather(box, EdgeX, "Edge [0,0,0 - 10,0,0]")
-
-# create a hexahedral mesh on the box
-mesh = smesh.Mesh(box, "Box : hexahedral 3D mesh")
-
-# create a Regular_1D algorithm for discretization of edges
-algo1D = mesh.Segment()
-
-# define "NumberOfSegments" hypothesis to cut
-# all the edges in a fixed number of segments
-algo1D.NumberOfSegments(4)
-
-# create a quadrangle 2D algorithm for the faces
-mesh.Quadrangle()
-
-# construct a sub-mesh on the edge with a local Regular_1D algorithm
-algo_local = mesh.Segment(EdgeX)
-
-# define "Arithmetic1D" hypothesis to cut EdgeX in several segments with length arithmetically
-# increasing from 1.0 to 4.0
-algo_local.Arithmetic1D(1, 4)
-
-# define "Propagation" hypothesis that propagates algo_local and "Arithmetic1D" hypothesis
-# from EdgeX to all parallel edges
-algo_local.Propagation()
-
-# assign a hexahedral algorithm
-mesh.Hexahedron()
-
-
-# any sub-shape can be meshed individually --
-# compute mesh on two surfaces using different methods
-
-# get surfaces
-surfaces = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
-
-# method 1: no sub-mesh is created
-mesh.Compute( surfaces[0] )
-
-# method 2: a sub-mesh is created
-submesh = mesh.GetSubMesh( surfaces[2], "submesh 2" )
-submesh.Compute()
-
-
-
-# compute the whole mesh
-mesh.Compute()
diff --git a/doc/salome/examples/creating_meshes_ex03.py b/doc/salome/examples/creating_meshes_ex03.py
deleted file mode 100644 (file)
index 42bf8c9..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-# Change priority of sub-meshes in Mesh
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-Box_1 = geompy.MakeBoxDXDYDZ(200, 200, 200)
-[Face_1,Face_2,Face_3,Face_4,Face_5,Face_6] = geompy.SubShapeAllSorted(Box_1, geompy.ShapeType["FACE"])
-
-# create Mesh object on Box shape
-Mesh_1 = smesh.Mesh(Box_1)
-
-# assign mesh algorithms and hypotheses
-Regular_1D = Mesh_1.Segment()
-Nb_Segments_1 = Regular_1D.NumberOfSegments(20)
-MEFISTO_2D = Mesh_1.Triangle()
-Max_Element_Area_1 = MEFISTO_2D.MaxElementArea(1200)
-Tetrahedron = Mesh_1.Tetrahedron()
-Max_Element_Volume_1 = Tetrahedron.MaxElementVolume(40000)
-
-# create sub-mesh and assign algorithms on Face_1
-Regular_1D_1 = Mesh_1.Segment(geom=Face_1)
-Nb_Segments_2 = Regular_1D_1.NumberOfSegments(4)
-MEFISTO_2D_1 = Mesh_1.Triangle(algo=smeshBuilder.MEFISTO,geom=Face_1)
-SubMesh_1 = MEFISTO_2D_1.GetSubMesh()
-
-# create sub-mesh and assign algorithms on Face_2
-Regular_1D_2 = Mesh_1.Segment(geom=Face_2)
-Nb_Segments_3 = Regular_1D_2.NumberOfSegments(8)
-MEFISTO_2D_2 = Mesh_1.Triangle(algo=smeshBuilder.MEFISTO,geom=Face_2)
-SubMesh_2 = MEFISTO_2D_2.GetSubMesh()
-
-# create sub-mesh and assign algorithms on Face_3
-Regular_1D_3 = Mesh_1.Segment(geom=Face_3)
-Nb_Segments_4 = Regular_1D_3.NumberOfSegments(12)
-MEFISTO_2D_3 = Mesh_1.Triangle(algo=smeshBuilder.MEFISTO,geom=Face_3)
-SubMesh_3 = MEFISTO_2D_3.GetSubMesh()
-
-# check existing sub-mesh priority order
-[ [ SubMesh_1, SubMesh_3, SubMesh_2 ] ] = Mesh_1.GetMeshOrder()
-isDone = Mesh_1.Compute()
-print("Nb elements at initial order of sub-meshes:", Mesh_1.NbElements())
-
-# set new sub-mesh order
-isDone = Mesh_1.SetMeshOrder( [ [ SubMesh_1, SubMesh_2, SubMesh_3 ] ])
-# compute mesh
-isDone = Mesh_1.Compute()
-print("Nb elements at new order of sub-meshes:", Mesh_1.NbElements())
-
-# compute with other sub-mesh order
-isDone = Mesh_1.SetMeshOrder( [ [ SubMesh_2, SubMesh_1, SubMesh_3 ] ])
-isDone = Mesh_1.Compute()
-print("Nb elements at another order of sub-meshes:", Mesh_1.NbElements())
diff --git a/doc/salome/examples/creating_meshes_ex04.py b/doc/salome/examples/creating_meshes_ex04.py
deleted file mode 100644 (file)
index 0a3cc9f..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-# Editing of a mesh
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-def PrintMeshInfo(theMesh):
-    aMesh = theMesh.GetMesh()
-    print("Information about mesh:")
-    print("Number of nodes       : ", aMesh.NbNodes())
-    print("Number of edges       : ", aMesh.NbEdges())
-    print("Number of faces       : ", aMesh.NbFaces())
-    print("Number of volumes     : ", aMesh.NbVolumes())
-    pass
-
-# create a box
-box = geompy.MakeBox(0., 0., 0., 20., 20., 20.)
-geompy.addToStudy(box, "box")
-
-# select one edge of the box for definition of a local hypothesis
-subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["EDGE"])
-edge = subShapeList[0]
-name = geompy.SubShapeName(edge, box)
-geompy.addToStudyInFather(box, edge, name)
-
-# create a mesh
-tria = smesh.Mesh(box, "Mesh 2D")
-algo1D = tria.Segment()
-hyp1 = algo1D.NumberOfSegments(3)
-algo2D = tria.Triangle()
-hyp2 = algo2D.MaxElementArea(10.)
-
-# create a sub-mesh
-algo_local = tria.Segment(edge)
-hyp3 = algo_local.Arithmetic1D(1, 6)
-hyp4 = algo_local.Propagation()
-
-# compute the mesh
-tria.Compute()
-PrintMeshInfo(tria)
-
-# remove a local hypothesis
-tria.RemoveHypothesis(hyp4, edge)
-
-# compute the mesh
-tria.Compute()
-PrintMeshInfo(tria)
-
-# change the value of the 2D hypothesis
-hyp2.SetMaxElementArea(2.)
-
-# compute the mesh
-tria.Compute()
-PrintMeshInfo(tria)
diff --git a/doc/salome/examples/creating_meshes_ex05.py b/doc/salome/examples/creating_meshes_ex05.py
deleted file mode 100644 (file)
index 08e8d13..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-# Export of a Mesh
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create a box
-box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
-idbox = geompy.addToStudy(box, "box")
-
-# create a mesh
-tetra = smesh.Mesh(box, "MeshBox")
-tetra.Segment().NumberOfSegments(7)
-tetra.Triangle()
-tetra.Tetrahedron()
-
-# compute the mesh
-tetra.Compute()
-
-# export the mesh in a MED file
-import tempfile
-medFile = tempfile.NamedTemporaryFile(suffix=".med").name
-tetra.ExportMED( medFile, 0 )
-
-# export a group in a MED file
-face = geompy.SubShapeAll( box, geompy.ShapeType["FACE"])[0] # a box side
-group = tetra.GroupOnGeom( face, "face group" ) # group of 2D elements on the <face>
-tetra.ExportMED( medFile, meshPart=group )
-
-# ========================
-# autoDimension parameter
-# ========================
-
-face = geompy.MakeFaceHW( 10, 10, 1, "rectangle" )
-mesh2D = smesh.Mesh( face, "mesh2D" )
-mesh2D.AutomaticHexahedralization(0)
-
-import MEDLoader, os
-
-# exported mesh is in 2D space because it is a planar mesh lying
-# on XOY plane, and autoDimension=True by default
-mesh2D.ExportMED( medFile )
-medMesh = MEDLoader.ReadUMeshFromFile(medFile,mesh2D.GetName(),0)
-print("autoDimension==True, exported mesh is in %sD"%medMesh.getSpaceDimension())
-
-# exported mesh is in 3D space, same as in Mesh module,
-# thanks to autoDimension=False
-mesh2D.ExportMED( medFile, autoDimension=False )
-medMesh = MEDLoader.ReadUMeshFromFile(medFile,mesh2D.GetName(),0)
-print("autoDimension==False, exported mesh is in %sD"%medMesh.getSpaceDimension())
-
-os.remove( medFile )
diff --git a/doc/salome/examples/creating_meshes_ex06.py b/doc/salome/examples/creating_meshes_ex06.py
deleted file mode 100644 (file)
index 20b8a04..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-# Creating a hexahedral mesh on a cylinder.
-#
-# This example uses Partition to divide the cylinder into blocks, which is
-# a general approach. But for the case of cylinder there is a dedicated
-# command creating a blocked cylinder: geompy.MakeDividedCylinder()
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-import math
-
-# Parameters
-# ----------
-
-radius =  50
-height = 200
-
-# Build a cylinder
-# ----------------
-
-base      = geompy.MakeVertex(0, 0, 0)
-direction = geompy.MakeVectorDXDYDZ(0, 0, 1)
-
-cylinder = geompy.MakeCylinder(base, direction, radius, height)
-
-geompy.addToStudy(cylinder, "cylinder")
-
-# Build blocks
-# ------------
-
-size = radius/2.0
-
-box_rot  = geompy.MakeBox(-size, -size, 0,  +size, +size, height)
-box_axis = geompy.MakeLine(base, direction)
-box      = geompy.MakeRotation(box_rot, box_axis, math.pi/4)
-
-hole = geompy.MakeCut(cylinder, box)
-
-plane_trim = 2000
-
-plane_a = geompy.MakePlane(base, geompy.MakeVectorDXDYDZ(1, 0, 0), plane_trim)
-plane_b = geompy.MakePlane(base, geompy.MakeVectorDXDYDZ(0, 1, 0), plane_trim)
-
-blocks_part = geompy.MakePartition([hole], [plane_a, plane_b], [], [], geompy.ShapeType["SOLID"])
-blocks_list = [box] + geompy.SubShapeAll(blocks_part, geompy.ShapeType["SOLID"])
-blocks_all  = geompy.MakeCompound(blocks_list)
-blocks      = geompy.MakeGlueFaces(blocks_all, 0.0001)
-
-geompy.addToStudy(blocks, "cylinder:blocks")
-
-# Build geometric groups
-# ----------------------
-
-group_a = geompy.CreateGroup(blocks, geompy.ShapeType["FACE"])
-geompy.addToStudyInFather(blocks, group_a, "baseA")
-items = geompy.GetShapesOnPlaneWithLocationIDs(blocks, geompy.ShapeType["FACE"], direction, base, GEOM.ST_ON)
-geompy.UnionIDs(group_a, items)
-
-base_b = geompy.MakeVertex(0, 0, height)
-group_b = geompy.CreateGroup(blocks, geompy.ShapeType["FACE"])
-geompy.addToStudyInFather(blocks, group_b, "baseB")
-items = geompy.GetShapesOnPlaneWithLocationIDs(blocks, geompy.ShapeType["FACE"], direction, base_b, GEOM.ST_ON)
-geompy.UnionIDs(group_b, items)
-
-group_1 = geompy.CreateGroup(blocks, geompy.ShapeType["SOLID"])
-geompy.addToStudyInFather(blocks, group_1, "limit")
-group_1_all = geompy.SubShapeAllIDs(blocks, geompy.ShapeType["SOLID"])
-geompy.UnionIDs(group_1, group_1_all)
-group_1_box = geompy.GetBlockNearPoint(blocks, base)
-geompy.DifferenceList(group_1, [group_1_box])
-
-# Mesh the blocks with hexahedral
-# -------------------------------
-
-smesh.UpdateStudy()
-
-hexa = smesh.Mesh(blocks)
-
-hexa_1d = hexa.Segment()
-hexa_1d.NumberOfSegments(1)
-
-vertex = geompy.MakeVertex(+radius, +radius, 0)
-edge = geompy.GetEdgeNearPoint(blocks, vertex)
-algo = hexa.Segment(edge)
-algo.NumberOfSegments(5)
-algo.Propagation()
-
-vertex = geompy.MakeVertex(-radius, +radius, 0)
-edge = geompy.GetEdgeNearPoint(blocks, vertex)
-algo = hexa.Segment(edge)
-algo.NumberOfSegments(8)
-algo.Propagation()
-
-vertex = geompy.MakeVertex((radius+size)/2, 0, 0)
-edge = geompy.GetEdgeNearPoint(blocks, vertex)
-algo = hexa.Segment(edge)
-algo.NumberOfSegments(10)
-algo.Propagation()
-
-vertex = geompy.MakeVertex(+radius, 0, height/2)
-edge = geompy.GetEdgeNearPoint(blocks, vertex)
-algo = hexa.Segment(edge)
-algo.NumberOfSegments(20)
-algo.Propagation()
-
-hexa.Quadrangle()
-hexa.Hexahedron()
-
-hexa.Compute()
-
-hexa.Group(group_a)
-hexa.Group(group_b)
-hexa.Group(group_1)
diff --git a/doc/salome/examples/creating_meshes_ex07.py b/doc/salome/examples/creating_meshes_ex07.py
deleted file mode 100644 (file)
index 669c9b0..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-# Building a compound of meshes
-
-import salome
-salome.salome_init()
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-## create a bottom box
-Box_inf = geompy.MakeBox(0., 0., 0., 200., 200., 50.)
-
-# get a top face
-Psup1=geompy.MakeVertex(100., 100., 50.)
-Fsup1=geompy.GetFaceNearPoint(Box_inf, Psup1)
-# get a bottom face
-Pinf1=geompy.MakeVertex(100., 100., 0.)
-Finf1=geompy.GetFaceNearPoint(Box_inf, Pinf1)
-
-## create a top box
-Box_sup = geompy.MakeBox(100., 100., 50., 200., 200., 100.)
-
-# get a top face
-Psup2=geompy.MakeVertex(150., 150., 100.)
-Fsup2=geompy.GetFaceNearPoint(Box_sup, Psup2)
-# get a bottom face
-Pinf2=geompy.MakeVertex(150., 150., 50.)
-Finf2=geompy.GetFaceNearPoint(Box_sup, Pinf2)
-
-## Publish in the study
-geompy.addToStudy(Box_inf, "Box_inf")
-geompy.addToStudyInFather(Box_inf, Fsup1, "Fsup")
-geompy.addToStudyInFather(Box_inf, Finf1, "Finf")
-
-geompy.addToStudy(Box_sup, "Box_sup")
-geompy.addToStudyInFather(Box_sup, Fsup2, "Fsup")
-geompy.addToStudyInFather(Box_sup, Finf2, "Finf")
-
-smesh.UpdateStudy()
-
-## create a bottom mesh
-Mesh_inf = smesh.Mesh(Box_inf, "Mesh_inf")
-algo1D_1=Mesh_inf.Segment()
-algo1D_1.NumberOfSegments(10)
-algo2D_1=Mesh_inf.Quadrangle()
-algo3D_1=Mesh_inf.Hexahedron()
-Mesh_inf.Compute()
-
-# create a group on the top face
-Gsup1=Mesh_inf.Group(Fsup1, "Sup")
-# create a group on the bottom face
-Ginf1=Mesh_inf.Group(Finf1, "Inf")
-
-## create a top mesh
-Mesh_sup = smesh.Mesh(Box_sup, "Mesh_sup")
-algo1D_2=Mesh_sup.Segment()
-algo1D_2.NumberOfSegments(5)
-algo2D_2=Mesh_sup.Quadrangle()
-algo3D_2=Mesh_sup.Hexahedron()
-Mesh_sup.Compute()
-
-# create a group on the top face
-Gsup2=Mesh_sup.Group(Fsup2, "Sup")
-# create a group on the bottom face
-Ginf2=Mesh_sup.Group(Finf2, "Inf")
-
-## create compounds
-# create a compound of two meshes with renaming namesake groups and
-# merging elements with the given tolerance
-Compound1 = smesh.Concatenate([Mesh_inf, Mesh_sup], 0, 1, 1e-05,
-                              name='Compound with RenamedGrps and MergeElems')
-# create a compound of two meshes with uniting namesake groups and
-# creating groups of all elements
-Compound2 = smesh.Concatenate([Mesh_inf, Mesh_sup], 1, 0, 1e-05, True,
-                              name='Compound with UniteGrps and GrpsOfAllElems')
-
-# copy Gsup1 into a separate mesh and translate it
-groupMesh = Mesh_inf.TranslateObjectMakeMesh( Gsup1, [300,0,0] )
-
-# add Ginf2 to groupMesh
-smesh.Concatenate([Ginf2], False, meshToAppendTo = groupMesh )
-
-
-if salome.sg.hasDesktop():
-    salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/creating_meshes_ex08.py b/doc/salome/examples/creating_meshes_ex08.py
deleted file mode 100644 (file)
index ff41f09..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-# Mesh Copying
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# make geometry of a box
-box = geompy.MakeBoxDXDYDZ(100,100,100)
-face = geompy.SubShapeAllSorted(box, geompy.ShapeType["FACE"])[0]
-
-# generate a prismatic 3D mesh
-mesh = smesh.Mesh(box, "box")
-localAlgo = mesh.Triangle(face)
-mesh.Segment().NumberOfSegments( 3 )
-mesh.Quadrangle()
-mesh.Prism()
-mesh.Compute()
-
-# objects to copy
-fGroup = mesh.GroupOnGeom( face, "2D on face")
-nGroup = mesh.GroupOnGeom( face, "nodes on face", SMESH.NODE)
-subMesh = localAlgo.GetSubMesh()
-
-# make a new mesh by copying different parts of the mesh
-
-# 1. copy the whole mesh
-newMesh = smesh.CopyMesh( mesh, "whole mesh copy")
-
-# 2. copy a group of 2D elements along with groups
-newMesh = smesh.CopyMesh( fGroup,  "face group copy with groups",toCopyGroups=True)
-
-# 3. copy a group of nodes
-newMesh = smesh.CopyMesh( nGroup, "node group copy")
-
-# 4. copy some faces
-faceIds = fGroup.GetIDs()[-10:]
-newMesh = smesh.CopyMesh( mesh.GetIDSource( faceIds, SMESH.FACE ), "some faces copy")
-
-# 5. copy some nodes
-nodeIds = nGroup.GetIDs()[-10:]
-newMesh = smesh.CopyMesh( mesh.GetIDSource( nodeIds, SMESH.NODE), "some nodes copy")
-
-# 6. copy a sub-mesh
-newMesh = smesh.CopyMesh( subMesh, "sub-mesh copy" )
-
-
-# make a new mesh with same hypotheses on a modified geometry
-
-smallBox = geompy.MakeScaleAlongAxes( box, None, 1, 0.5, 0.5 )
-cutBox = geompy.MakeCut( box, smallBox, theName="box - smallBox" )
-
-ok, newMesh, groups, submehses, hyps, invIDs = smesh.CopyMeshWithGeom( mesh, cutBox, "cutBox" )
-newMesh.Compute()
diff --git a/doc/salome/examples/defining_hypotheses_adaptive1d.py b/doc/salome/examples/defining_hypotheses_adaptive1d.py
deleted file mode 100644 (file)
index 579d14d..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-import salome, math
-salome.salome_init()
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-
-box   = geompy.MakeBoxDXDYDZ( 100, 100, 100 )
-tool  = geompy.MakeTranslation( box, 50, 0, 10 )
-axis  = geompy.MakeVector( geompy.MakeVertex( 100, 0, 100 ),geompy.MakeVertex( 100, 10, 100 ),)
-tool  = geompy.Rotate( tool, axis, math.pi * 25 / 180. )
-shape = geompy.MakeCut( box, tool )
-cyl   = geompy.MakeCylinder( geompy.MakeVertex( -10,5, 95 ), geompy.MakeVectorDXDYDZ(1,0,0), 2, 90)
-shape = geompy.MakeCut( shape, cyl )
-tool  = geompy.MakeBoxTwoPnt( geompy.MakeVertex( -10, 2, 15 ), geompy.MakeVertex( 90, 5, 16 ))
-shape = geompy.MakeCut( shape, tool, theName="shape" )
-
-# Parameters of Adaptive hypothesis. minSize and maxSize are such that they do not limit
-# size of segments because size of geometrical features lies within [2.-100.] range, hence
-# size of segments is defined by deflection parameter and size of geometrical features only.
-minSize = 0.1
-maxSize = 200
-deflection = 0.05
-
-mesh = smesh.Mesh( shape )
-mesh.Segment().Adaptive( minSize, maxSize, deflection )
-mesh.Triangle().MaxElementArea( 300 )
-mesh.Compute()
-
diff --git a/doc/salome/examples/defining_hypotheses_ex01.py b/doc/salome/examples/defining_hypotheses_ex01.py
deleted file mode 100644 (file)
index a4083ba..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-# Arithmetic Progression and Geometric Progression
-
-import salome
-salome.salome_init()
-
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create a box
-box = geompy.MakeBoxDXDYDZ(10., 10., 10.)
-geompy.addToStudy(box, "Box")
-
-# create a hexahedral mesh on the box
-hexa = smesh.Mesh(box, "Box : hexahedrical mesh")
-
-# create a Regular 1D algorithm for edges
-algo1D = hexa.Segment()
-
-# optionally reverse node distribution on certain edges
-allEdges = geompy.SubShapeAllSorted( box, geompy.ShapeType["EDGE"])
-reversedEdges = [ allEdges[0], allEdges[4] ]
-
-# define "Arithmetic1D" hypothesis to cut all edges in several segments with increasing arithmetic length 
-algo1D.Arithmetic1D(1, 4, reversedEdges)
-
-# define "Geometric Progression" hypothesis on one edge to cut this edge in segments with length increasing by 20% starting from 1
-gpAlgo = hexa.Segment( allEdges[1] )
-gpAlgo.GeometricProgression( 1, 1.2 )
-
-# propagate distribution of nodes computed using "Geometric Progression" to parallel edges
-gpAlgo.PropagationOfDistribution() 
-
-
-# create a quadrangle 2D algorithm for faces
-hexa.Quadrangle()
-
-# create a hexahedron 3D algorithm for solids
-hexa.Hexahedron()
-
-# compute the mesh
-hexa.Compute()
diff --git a/doc/salome/examples/defining_hypotheses_ex02.py b/doc/salome/examples/defining_hypotheses_ex02.py
deleted file mode 100644 (file)
index 9473354..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-# Deflection and Number of Segments
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create a face from arc and straight segment
-px = geompy.MakeVertex(100., 0.  , 0.  )
-py = geompy.MakeVertex(0.  , 100., 0.  )
-pz = geompy.MakeVertex(0.  , 0.  , 100.)
-
-exy = geompy.MakeEdge(px, py)
-arc = geompy.MakeArc(py, pz, px)
-
-wire = geompy.MakeWire([exy, arc])
-
-isPlanarFace = 1
-face1 = geompy.MakeFace(wire, isPlanarFace)
-geompy.addToStudy(face1,"Face1")
-
-# get edges from the face
-e_straight,e_arc = geompy.SubShapeAll(face1, geompy.ShapeType["EDGE"])
-geompy.addToStudyInFather(face1, e_arc, "Arc Edge")
-
-# create hexahedral mesh
-hexa = smesh.Mesh(face1, "Face : triangle mesh")
-
-# define "NumberOfSegments" hypothesis to cut a straight edge in a fixed number of segments
-algo1D = hexa.Segment()
-algo1D.NumberOfSegments(6)
-
-# define "MaxElementArea" hypothesis
-algo2D = hexa.Triangle()
-algo2D.MaxElementArea(70.0)
-
-# define a local "Deflection1D" hypothesis on the arc
-algo_local = hexa.Segment(e_arc)
-algo_local.Deflection1D(1.0)
-
-# compute the mesh
-hexa.Compute()
diff --git a/doc/salome/examples/defining_hypotheses_ex03.py b/doc/salome/examples/defining_hypotheses_ex03.py
deleted file mode 100644 (file)
index 3e0a5a7..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-# Start and End Length
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create a box
-box = geompy.MakeBoxDXDYDZ(10., 10., 10.)
-geompy.addToStudy(box, "Box")
-
-# get one edge of the box to put local hypothesis on
-p5 = geompy.MakeVertex(5., 0., 0.)
-EdgeX = geompy.GetEdgeNearPoint(box, p5)
-geompy.addToStudyInFather(box, EdgeX, "Edge [0,0,0 - 10,0,0]")
-
-# create a hexahedral mesh on the box
-hexa = smesh.Mesh(box, "Box : hexahedrical mesh")
-
-# set algorithms
-algo1D = hexa.Segment()
-hexa.Quadrangle()
-hexa.Hexahedron()
-
-# define "NumberOfSegments" hypothesis to cut an edge in a fixed number of segments
-algo1D.NumberOfSegments(4)
-
-# create a local hypothesis
-algo_local = hexa.Segment(EdgeX)
-
-# define "StartEndLength" hypothesis to cut an edge in several segments with increasing geometric length
-algo_local.StartEndLength(1, 6)
-
-# define "Propagation" hypothesis that propagates all other hypothesis
-# on all edges on the opposite side in case of quadrangular faces
-algo_local.Propagation()
-
-# compute the mesh
-hexa.Compute()
diff --git a/doc/salome/examples/defining_hypotheses_ex04.py b/doc/salome/examples/defining_hypotheses_ex04.py
deleted file mode 100644 (file)
index c15e442..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-# Local Length
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create a box
-box = geompy.MakeBoxDXDYDZ(10., 10., 10.)
-geompy.addToStudy(box, "Box")
-
-# get one edge of the box to put local hypothesis on
-p5 = geompy.MakeVertex(5., 0., 0.)
-EdgeX = geompy.GetEdgeNearPoint(box, p5)
-geompy.addToStudyInFather(box, EdgeX, "Edge [0,0,0 - 10,0,0]")
-
-# create a hexahedral mesh on the box
-hexa = smesh.Mesh(box, "Box : hexahedrical mesh")
-
-# set algorithms
-algo1D = hexa.Segment()
-hexa.Quadrangle()
-hexa.Hexahedron()
-
-# define "NumberOfSegments" hypothesis to cut all edges in a fixed number of segments
-algo1D.NumberOfSegments(4)
-
-# create a sub-mesh
-algo_local = hexa.Segment(EdgeX)
-
-# define "LocalLength" hypothesis to cut an edge in several segments with the same length
-algo_local.LocalLength(2.)
-
-# define "Propagation" hypothesis that propagates all other hypothesis
-# on all edges on the opposite side in case of quadrangular faces
-algo_local.Propagation()
-
-# compute the mesh
-hexa.Compute()
diff --git a/doc/salome/examples/defining_hypotheses_ex05.py b/doc/salome/examples/defining_hypotheses_ex05.py
deleted file mode 100644 (file)
index d998447..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-# Maximum Element Area
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create a face
-px   = geompy.MakeVertex(100., 0.  , 0.  )
-py   = geompy.MakeVertex(0.  , 100., 0.  )
-pz   = geompy.MakeVertex(0.  , 0.  , 100.)
-
-vxy = geompy.MakeVector(px, py)
-arc = geompy.MakeArc(py, pz, px)
-wire = geompy.MakeWire([vxy, arc])
-
-isPlanarFace = 1
-face = geompy.MakeFace(wire, isPlanarFace)
-
-# add the face in the study
-id_face = geompy.addToStudy(face, "Face to be meshed")
-
-# create a mesh
-tria_mesh = smesh.Mesh(face, "Face : triangulation")
-
-# define 1D meshing:
-algo = tria_mesh.Segment()
-algo.NumberOfSegments(20)
-
-# define 2D meshing:
-
-# assign triangulation algorithm
-algo = tria_mesh.Triangle()
-
-# assign "Max Element Area" hypothesis
-algo.MaxElementArea(100)
-
-# compute the mesh
-tria_mesh.Compute()
diff --git a/doc/salome/examples/defining_hypotheses_ex06.py b/doc/salome/examples/defining_hypotheses_ex06.py
deleted file mode 100644 (file)
index f0a02ae..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-# Maximum Element Volume
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create a cylinder
-cyl = geompy.MakeCylinderRH(30., 50.)
-geompy.addToStudy(cyl, "cyl")
-
-# create a mesh on the cylinder
-tetra = smesh.Mesh(cyl, "Cylinder : tetrahedrical mesh")
-
-# assign algorithms
-algo1D = tetra.Segment()
-algo2D = tetra.Triangle()
-algo3D = tetra.Tetrahedron()
-
-# assign 1D and 2D hypotheses
-algo1D.NumberOfSegments(7)
-algo2D.MaxElementArea(150.)
-
-# assign Max Element Volume hypothesis
-algo3D.MaxElementVolume(200.)
-
-# compute the mesh
-ret = tetra.Compute()
-if ret == 0:
-    print("problem when computing the mesh")
-else:
-    print("Computation succeeded")
diff --git a/doc/salome/examples/defining_hypotheses_ex07.py b/doc/salome/examples/defining_hypotheses_ex07.py
deleted file mode 100644 (file)
index a8a8e9f..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-# Length from Edges
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create sketchers
-sketcher1 = geompy.MakeSketcher("Sketcher:F 0 0:TT 70 0:TT 70 70:TT 0 70:WW")
-sketcher2 = geompy.MakeSketcher("Sketcher:F 20 20:TT 50 20:TT 50 50:TT 20 50:WW")
-
-# create a face from two wires
-isPlanarFace = 1
-face1 = geompy.MakeFaces([sketcher1, sketcher2], isPlanarFace)
-geompy.addToStudy(face1, "Face1")
-
-# create a mesh
-tria = smesh.Mesh(face1, "Face : triangle 2D mesh")
-
-# Define 1D meshing
-algo1D = tria.Segment()
-algo1D.LocalLength(3.)
-
-# create and assign the algorithm for 2D meshing with triangles
-algo2D = tria.Triangle()
-
-# create and assign "LengthFromEdges" hypothesis to build triangles with
-# linear size close to the length of the segments generated on the face wires (3.)
-algo2D.LengthFromEdges()
-
-# compute the mesh
-tria.Compute()
diff --git a/doc/salome/examples/defining_hypotheses_ex08.py b/doc/salome/examples/defining_hypotheses_ex08.py
deleted file mode 100644 (file)
index 285eae2..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-# Propagation
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create a box
-base = geompy.MakeSketcher("Sketcher:F 0 0:TT 10 0:TT 20 10:TT 0 10:WF", theName="F")
-box  = geompy.MakePrismDXDYDZ( base, 0,0,10 )
-geompy.addToStudy(box, "Box")
-
-# get one edge of the box to put local hypothesis on
-p5 = geompy.MakeVertex(5., 0., 0.)
-EdgeX = geompy.GetEdgeNearPoint(box, p5)
-geompy.addToStudyInFather(box, EdgeX, "Edge [0,0,0 - 10,0,0]")
-
-# create a hexahedral mesh on the box
-hexa = smesh.Mesh(box, "Propagation of hypothesis")
-
-# set global algorithms and hypotheses
-algo1D = hexa.Segment()
-hexa.Quadrangle()
-hexa.Hexahedron()
-algo1D.NumberOfSegments(4)
-
-# create a sub-mesh with local 1D hypothesis and "Propagation of 1D Hypothesis"
-algo_local = hexa.Segment(EdgeX)
-
-# define "Arithmetic1D" hypothesis to cut an edge in several segments with increasing length
-algo_local.Arithmetic1D(1, 4)
-
-# define "Propagation" hypothesis that propagates "Arithmetic1D" hypothesis
-# from 'EdgeX' on opposite sides of all quadilateral faces
-algo_local.Propagation()
-
-# compute the mesh which contains prisms
-hexa.Compute()
-
-
-# create another mesh on the box
-mesh = smesh.Mesh(box, "Propagation of distribution of nodes")
-
-# set global algorithms and hypotheses
-algo1D = mesh.Segment()
-mesh.Quadrangle()
-mesh.Hexahedron()
-algo1D.NumberOfSegments(4)
-
-# create a sub-mesh with local 1D hypothesis and "Propagation of Node Distribution"
-algo_local = mesh.Segment(EdgeX)
-algo_local.Arithmetic1D(1, 4)
-
-# define "Propagation Of Distribution" hypothesis that propagates
-# distribution of nodes generated by "Arithmetic1D" hypothesis
-# from 'EdgeX' on opposite sides of all quadilateral faces
-algo_local.PropagationOfDistribution()
-
-# compute the mesh which contains hexahedra only
-mesh.Compute()
diff --git a/doc/salome/examples/defining_hypotheses_ex09.py b/doc/salome/examples/defining_hypotheses_ex09.py
deleted file mode 100644 (file)
index 6e86cc9..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-# Defining Meshing Algorithms
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create a box
-box = geompy.MakeBoxDXDYDZ(10., 10., 10.)
-geompy.addToStudy(box, "Box")
-
-# Create a hexahedral mesh on the box
-hexa = smesh.Mesh(box, "Box : hexahedrical mesh")
-
-# create a Regular 1D algorithm for edges
-algo1D = hexa.Segment()
-
-# create a quadrangle 2D algorithm for faces
-algo2D = hexa.Quadrangle()
-
-# create a hexahedron 3D algorithm for solids
-algo3D = hexa.Hexahedron()
-
-# define hypotheses
-algo1D.Arithmetic1D(1, 4)
-
-# compute the mesh
-hexa.Compute()
-
-# 2. Create a tetrahedral mesh on the box
-tetra = smesh.Mesh(box, "Box : tetrahedrical mesh")
-
-# create a Regular 1D algorithm for edges
-algo1D = tetra.Segment()
-
-# create a Mefisto 2D algorithm for faces
-algo2D = tetra.Triangle()
-
-# create a 3D algorithm for solids
-algo3D = tetra.Tetrahedron()
-
-# define hypotheses
-algo1D.Arithmetic1D(1, 4)
-algo2D.LengthFromEdges()
-
-# compute the mesh
-tetra.Compute()
diff --git a/doc/salome/examples/defining_hypotheses_ex10.py b/doc/salome/examples/defining_hypotheses_ex10.py
deleted file mode 100644 (file)
index c55af79..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-# Projection Algorithms
-
-# Project prisms from one meshed box to another mesh on the same box
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Prepare geometry
-
-# Create a parallelepiped
-box = geompy.MakeBoxDXDYDZ(200, 100, 70)
-geompy.addToStudy( box, "box" )
-
-# Get geom faces to mesh with triangles in the 1ts and 2nd meshes
-faces = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
-# 2 adjacent faces of the box
-f1 = faces[2]
-f2 = faces[0]
-# face opposite to f2
-f2opp = geompy.GetOppositeFace( box, f2 )
-
-# Get vertices used to specify how to associate sides of faces at projection
-[v1F1, v2F1] = geompy.SubShapeAll(f1, geompy.ShapeType["VERTEX"])[:2]
-[v1F2, v2F2] = geompy.SubShapeAll(f2, geompy.ShapeType["VERTEX"])[:2]
-geompy.addToStudyInFather( box, v1F1, "v1F1" )
-geompy.addToStudyInFather( box, v2F1, "v2F1" )
-geompy.addToStudyInFather( box, v1F2, "v1F2" )
-geompy.addToStudyInFather( box, v2F2, "v2F2" )
-
-# Make group of 3 edges of f1 and f2
-edgesF1 = geompy.CreateGroup(f1, geompy.ShapeType["EDGE"])
-geompy.UnionList( edgesF1, geompy.SubShapeAll(f1, geompy.ShapeType["EDGE"])[:3])
-edgesF2 = geompy.CreateGroup(f2, geompy.ShapeType["EDGE"])
-geompy.UnionList( edgesF2, geompy.SubShapeAll(f2, geompy.ShapeType["EDGE"])[:3])
-geompy.addToStudyInFather( box, edgesF1, "edgesF1" )
-geompy.addToStudyInFather( box, edgesF2, "edgesF2" )
-
-
-# Make the source mesh with prisms
-src_mesh = smesh.Mesh(box, "Source mesh")
-src_mesh.Segment().NumberOfSegments(9,10)
-src_mesh.Quadrangle()
-src_mesh.Hexahedron()
-src_mesh.Triangle(f1) # triangular sub-mesh
-src_mesh.Compute()
-
-
-# Mesh the box using projection algorithms
-
-# Define the same global 1D and 2D hypotheses
-tgt_mesh = smesh.Mesh(box, "Target mesh")
-tgt_mesh.Segment().NumberOfSegments(9,10,UseExisting=True)
-tgt_mesh.Quadrangle()
-
-# Define Projection 1D algorithm to project 1d mesh elements from group edgesF2 to edgesF1
-# It is actually not needed, just a demonstration
-proj1D = tgt_mesh.Projection1D( edgesF1 )
-# each vertex must be at the end of a connected group of edges (or a sole edge)
-proj1D.SourceEdge( edgesF2, src_mesh, v2F1, v2F2 )
-
-# Define 2D hypotheses to project triangles from f1 face of the source mesh to
-# f2 face in the target mesh. Vertices specify how to associate sides of faces
-proj2D = tgt_mesh.Projection2D( f2 )
-proj2D.SourceFace( f1, src_mesh, v1F1, v1F2, v2F1, v2F2 )
-
-# 2D hypotheses to project triangles from f2 of target mesh to the face opposite to f2.
-# Association of face sides is default
-proj2D = tgt_mesh.Projection2D( f2opp )
-proj2D.SourceFace( f2 )
-
-# 3D hypotheses to project prisms from the source to the target mesh
-proj3D = tgt_mesh.Projection3D()
-proj3D.SourceShape3D( box, src_mesh, v1F1, v1F2, v2F1, v2F2 )
-tgt_mesh.Compute()
-
-# Move the source mesh to visually compare the two meshes
-src_mesh.TranslateObject( src_mesh, smesh.MakeDirStruct( 210, 0, 0 ), Copy=False)
diff --git a/doc/salome/examples/defining_hypotheses_ex11.py b/doc/salome/examples/defining_hypotheses_ex11.py
deleted file mode 100644 (file)
index a57d078..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-# Projection 1D2D
-
-# Project triangles from one meshed face to another mesh on the same box
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Prepare geometry
-
-# Create a box
-box = geompy.MakeBoxDXDYDZ(100, 100, 100)
-
-# Get geom faces to mesh with triangles in the 1ts and 2nd meshes
-faces = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
-# 2 adjacent faces of the box
-Face_1 = faces[2]
-Face_2 = faces[0]
-
-geompy.addToStudy( box, 'box' )
-geompy.addToStudyInFather( box, Face_1, 'Face_1' )
-geompy.addToStudyInFather( box, Face_2, 'Face_2' )
-
-
-# Make the source mesh triangulated by MEFISTO
-src_mesh = smesh.Mesh(Face_1, "Source mesh")
-src_mesh.Segment().NumberOfSegments(15)
-src_mesh.Triangle()
-src_mesh.Compute()
-
-# Mesh the target mesh using the algorithm Projection1D2D
-tgt_mesh = smesh.Mesh(Face_2, "Target mesh")
-tgt_mesh.Projection1D2D().SourceFace(Face_1,src_mesh)
-tgt_mesh.Compute()
diff --git a/doc/salome/examples/defining_hypotheses_ex12.py b/doc/salome/examples/defining_hypotheses_ex12.py
deleted file mode 100644 (file)
index 7ead18c..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-# 1D Mesh with Fixed Points example
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-from salome.StdMeshers import StdMeshersBuilder
-
-# Create face and explode it on edges
-face = geompy.MakeFaceHW(100, 100, 1)
-edges = geompy.SubShapeAllSorted(face, geompy.ShapeType["EDGE"])
-geompy.addToStudy( face, "Face" )
-
-# get the first edge from exploded result
-edge1 = geompy.GetSubShapeID(face, edges[0])
-
-# Define Mesh on previously created face
-Mesh_1 = smesh.Mesh(face)
-
-# Create Fixed Point 1D hypothesis and define parameters.
-# Note: values greater than 1.0 and less than 0.0 are not taken into account;
-# duplicated values are removed. Also, if not specified explicitly, values 0.0 and 1.0
-# add added automatically.
-# The number of segments should correspond to the number of points (NbSeg = NbPnt-1);
-# extra values of segments splitting parameter are not taken into account,
-# while missing values are considered to be equal to 1.
-Fixed_points_1D_1 = smesh.CreateHypothesis('FixedPoints1D')
-Fixed_points_1D_1.SetPoints( [ 1.1, 0.9, 0.5, 0.0, 0.5, -0.3 ] )
-Fixed_points_1D_1.SetNbSegments( [ 3, 1, 2 ] )
-Fixed_points_1D_1.SetReversedEdges( [edge1] )
-
-# Add hypothesis to mesh and define 2D parameters
-Mesh_1.AddHypothesis(Fixed_points_1D_1)
-Regular_1D = Mesh_1.Segment()
-Quadrangle_2D = Mesh_1.Quadrangle()
-# Compute mesh
-Mesh_1.Compute()
diff --git a/doc/salome/examples/defining_hypotheses_ex13.py b/doc/salome/examples/defining_hypotheses_ex13.py
deleted file mode 100644 (file)
index e952460..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-# Radial Quadrangle 1D-2D example
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Create face from the wire and add to study
-Face = geompy.MakeSketcher("Sketcher:F 0 0:TT 20 0:R 90:C 20 90:WF", [0, 0, 0, 1, 0, 0, 0, 0, 1])
-geompy.addToStudy(Face,"Face")
-circle, radius1, radius2 = geompy.SubShapeAllSorted(Face, geompy.ShapeType["EDGE"])
-geompy.addToStudyInFather(Face, radius1,"radius1")
-geompy.addToStudyInFather(Face, radius2,"radius2")
-geompy.addToStudyInFather(Face, circle,"circle")
-
-
-# Define geometry for mesh, and Radial Quadrange algorithm
-mesh = smesh.Mesh(Face)
-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/defining_hypotheses_ex14.py b/doc/salome/examples/defining_hypotheses_ex14.py
deleted file mode 100644 (file)
index d33e1e1..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-# Quadrangle Parameters example 1 (meshing a face with 3 edges)
-
-import salome
-salome.salome_init()
-
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Get 1/4 part from the disk face.
-Box_1 = geompy.MakeBoxDXDYDZ(100, 100, 100)
-Disk_1 = geompy.MakeDiskR(100, 1)
-Common_1 = geompy.MakeCommon(Disk_1, Box_1)
-triaVertex = geompy.GetVertexNearPoint( Common_1, geompy.MakeVertex(0,0,0) )
-geompy.addToStudy( Common_1, "Common_1" )
-geompy.addToStudyInFather( Common_1, triaVertex, "triaVertex" )
-
-
-# Set the Geometry for meshing
-Mesh_1 = smesh.Mesh(Common_1)
-
-# Define 1D hypothesis
-Regular_1D = Mesh_1.Segment()
-Nb_Segments_1 = Regular_1D.NumberOfSegments(10)
-
-# Create Quadrangle parameters and define the Base Vertex.
-Quadrangle_2D = Mesh_1.Quadrangle().TriangleVertex( triaVertex )
-
-# Compute the mesh
-Mesh_1.Compute()
diff --git a/doc/salome/examples/defining_hypotheses_ex15.py b/doc/salome/examples/defining_hypotheses_ex15.py
deleted file mode 100644 (file)
index 5a32a1d..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-# Quadrangle Parameters example 2 (using different types)
-
-import salome
-salome.salome_init()
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Make quadrangle face and explode it on edges.
-Vertex_1 = geompy.MakeVertex(0, 0, 0)
-Vertex_2 = geompy.MakeVertex(40, 0, 0)
-Vertex_3 = geompy.MakeVertex(40, 30, 0)
-Vertex_4 = geompy.MakeVertex(0, 30, 0)
-Quadrangle_Face_1 = geompy.MakeQuad4Vertices(Vertex_1, Vertex_4, Vertex_3, Vertex_2)
-[Edge_1,Edge_2,Edge_3,Edge_4] = geompy.SubShapeAllSorted(Quadrangle_Face_1, geompy.ShapeType["EDGE"])
-geompy.addToStudy( Quadrangle_Face_1, "Quadrangle Face_1" )
-geompy.addToStudyInFather( Quadrangle_Face_1, Edge_2, "Edge_2" )
-
-# Set the Geometry for meshing
-Mesh_1 = smesh.Mesh(Quadrangle_Face_1)
-
-# Create Quadrangle parameters and
-# define the Type as Quadrangle Preference
-Quad_algo = Mesh_1.Quadrangle()
-Quadrangle_Parameters_1 = Quad_algo.QuadrangleParameters( smeshBuilder.QUAD_QUADRANGLE_PREF )
-
-# Define other hypotheses and algorithms
-Regular_1D = Mesh_1.Segment()
-Nb_Segments_1 = Regular_1D.NumberOfSegments(4)
-
-# Define submesh on one edge to provide different number of segments
-Regular_1D_1 = Mesh_1.Segment(geom=Edge_2)
-Nb_Segments_2 = Regular_1D_1.NumberOfSegments(10)
-
-# Compute mesh (with Quadrangle Preference type)
-isDone = Mesh_1.Compute()
-
-# Change type to Reduced and compute again
-Quadrangle_Parameters_1.SetQuadType( smeshBuilder.QUAD_REDUCED )
-isDone = Mesh_1.Compute()
diff --git a/doc/salome/examples/defining_hypotheses_ex16.py b/doc/salome/examples/defining_hypotheses_ex16.py
deleted file mode 100644 (file)
index 575601f..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-# "Import 2D Elements from Another Mesh" example
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Make a patritioned box
-
-box = geompy.MakeBoxDXDYDZ(100,100,100)
-
-N = geompy.MakeVectorDXDYDZ( 1,0,0 )
-O = geompy.MakeVertex( 50,0,0 )
-plane = geompy.MakePlane( O, N, 200 ) # plane YOZ
-
-shape2boxes = geompy.MakeHalfPartition( box, plane )
-boxes = geompy.SubShapeAllSorted(shape2boxes, geompy.ShapeType["SOLID"])
-
-geompy.addToStudy( boxes[0], "boxes[0]")
-geompy.addToStudy( boxes[1], "boxes[1]")
-midFace0 = geompy.SubShapeAllSorted(boxes[0], geompy.ShapeType["FACE"])[5]
-geompy.addToStudyInFather( boxes[0], midFace0, "middle Face")
-midFace1 = geompy.SubShapeAllSorted(boxes[1], geompy.ShapeType["FACE"])[0]
-geompy.addToStudyInFather( boxes[1], midFace1, "middle Face")
-
-# Mesh one of boxes with quadrangles. It is a source mesh
-
-srcMesh = smesh.Mesh(boxes[0], "source mesh") # box coloser to CS origin
-nSeg1 = srcMesh.Segment().NumberOfSegments(4)
-srcMesh.Quadrangle()
-srcMesh.Compute()
-srcFaceGroup = srcMesh.GroupOnGeom( midFace0, "src faces", SMESH.FACE )
-
-# Import faces from midFace0 to the target mesh
-
-tgtMesh = smesh.Mesh(boxes[1], "target mesh")
-importAlgo = tgtMesh.UseExisting2DElements(midFace1)
-import2hyp = importAlgo.SourceFaces( [srcFaceGroup] )
-tgtMesh.Segment().NumberOfSegments(3)
-tgtMesh.Quadrangle()
-tgtMesh.Compute()
-
-# Import the whole source mesh with groups
-import2hyp.SetCopySourceMesh(True,True)
-tgtMesh.Compute()
diff --git a/doc/salome/examples/defining_hypotheses_ex17.py b/doc/salome/examples/defining_hypotheses_ex17.py
deleted file mode 100644 (file)
index cadd71e..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-# Viscous layers construction
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-X = geompy.MakeVectorDXDYDZ( 1,0,0 )
-O = geompy.MakeVertex( 100,50,50 )
-plane = geompy.MakePlane( O, X, 200 ) # plane YZ
-
-box = geompy.MakeBoxDXDYDZ(200,100,100)
-
-shape = geompy.MakeHalfPartition( box, plane )
-
-faces = geompy.SubShapeAllSorted(shape, geompy.ShapeType["FACE"])
-face1 = faces[1]
-ignoreFaces = [ faces[0], faces[-1]]
-
-geompy.addToStudy( shape, "shape" )
-geompy.addToStudyInFather( shape, face1, "face1")
-
-# 3D Viscous layers
-
-mesh = smesh.Mesh(shape, "CFD")
-
-mesh.Segment().NumberOfSegments( 4 )
-
-mesh.Triangle()
-mesh.Quadrangle(face1)
-algo3D = mesh.Tetrahedron()
-
-thickness = 20
-numberOfLayers = 10
-stretchFactor = 1.5
-groupName = "Boundary layers"
-layersHyp = algo3D.ViscousLayers(thickness,numberOfLayers,stretchFactor,
-                                 ignoreFaces,           # optional
-                                 groupName = groupName) # optional
-
-mesh.Compute()
-
-# retrieve boundary prisms created by mesh.Compute()
-boundaryGroup = mesh.GetGroupByName( layersHyp.GetGroupName() )[0]
-print( "Nb boundary prisms", boundaryGroup.Size() )
-
-mesh.MakeGroup("Tetras",SMESH.VOLUME,SMESH.FT_ElemGeomType,"=",SMESH.Geom_TETRA)
-mesh.MakeGroup("Pyras",SMESH.VOLUME,SMESH.FT_ElemGeomType,"=",SMESH.Geom_PYRAMID)
-mesh.MakeGroup("Prims",SMESH.VOLUME,SMESH.FT_ElemGeomType,"=",SMESH.Geom_PENTA)
-
-# 2D Viscous layers
-
-# 3 edges of the 4 edges of face1
-edgeIds = geompy.SubShapeAllIDs( face1, geompy.ShapeType["EDGE"])[:-1]
-
-mesh = smesh.Mesh(face1,"VicsousLayers2D")
-mesh.Segment().NumberOfSegments( 5 )
-
-# viscous layers will be created on 1 edge, as we set 3 edges to ignore
-vlHyp = mesh.Triangle().ViscousLayers2D( 2, 3, 1.5,
-                                         edgeIds, isEdgesToIgnore=True, # optional
-                                         groupName=groupName)           # optional
-mesh.Compute()
-
-# retrieve boundary elements created by mesh.Compute()
-quadrangles = mesh.GetGroupByName( vlHyp.GetGroupName() )[0]
-print( "Nb boundary quadrangles", quadrangles.Size() )
-
-# viscous layers will be created on 3 edges, as we pass isEdgesToIgnore=False
-vlHyp.SetEdges( edgeIds, False )
-
-mesh.Compute()
diff --git a/doc/salome/examples/defining_hypotheses_len_near_vertex.py b/doc/salome/examples/defining_hypotheses_len_near_vertex.py
deleted file mode 100644 (file)
index 6d8ab44..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-# Usage of Segments around Vertex algorithm
-
-# for meshing a box with quadrangles with refinement near vertices
-
-import salome
-salome.salome_init()
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create a box
-box = geompy.MakeBoxDXDYDZ( 10, 10, 10 )
-
-# make a mesh
-mesh = smesh.Mesh( box )
-
-# define quadrangle meshing
-algo1d = mesh.Segment()
-algo1d.LocalLength( 1. )
-mesh.Quadrangle()
-
-# add Hexahedron algo to assure that there are no triangles
-mesh.Hexahedron()
-
-# define refinement near vertices
-algo1d.LengthNearVertex( 0.2 )
-
-mesh.Compute()
diff --git a/doc/salome/examples/ex_MakePolyLine.py b/doc/salome/examples/ex_MakePolyLine.py
deleted file mode 100644 (file)
index 2091912..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-import salome
-salome.salome_init()
-
-### create geometry
-
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-Box_1 = geompy.MakeBoxDXDYDZ(200, 200, 200)
-geompy.addToStudy( Box_1, 'Box_1' )
-
-### create a mesh
-
-import SMESH
-from salome.smesh import smeshBuilder
-smesh = smeshBuilder.New()
-
-Mesh_1 = smesh.Mesh( Box_1 )
-Mesh_1.Segment().NumberOfSegments(15)
-Mesh_1.Triangle()
-Mesh_1.Compute()
-
-# define arguments for MakePolyLine
-
-segments = []
-# between nodes 20 and 1, default plane
-segments.append( SMESH.PolySegment( 20, 0, 1, 0, smesh.MakeDirStruct(0,0,0) ))
-# between nodes 1 and 100, default plane
-segments.append( SMESH.PolySegment( 1, 0, 200, 0, smesh.MakeDirStruct(0,0,0) ))
-# between nodes 200 and edge (578, 577), plane includes vector (1,1,1)
-segments.append( SMESH.PolySegment( 200, 0, 578, 577, smesh.MakeDirStruct(1,1,1) ))
-
-Mesh_1.MakePolyLine( segments, "1D group")
-
-
-if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/extrusion_penta_biquad.py b/doc/salome/examples/extrusion_penta_biquad.py
deleted file mode 100644 (file)
index b98f8cd..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-# -*- coding: utf-8 -*-
-
-import sys
-import salome
-
-salome.salome_init()
-
-import GEOM
-from salome.geom import geomBuilder
-import math
-import SALOMEDS
-
-geompy = geomBuilder.New()
-
-O = geompy.MakeVertex(0, 0, 0)
-OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
-OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
-OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
-Divided_Disk_1 = geompy.MakeDividedDisk(100, 1, GEOM.SQUARE)
-geompy.addToStudy( O, 'O' )
-geompy.addToStudy( OX, 'OX' )
-geompy.addToStudy( OY, 'OY' )
-geompy.addToStudy( OZ, 'OZ' )
-geompy.addToStudy( Divided_Disk_1, 'Divided Disk_1' )
-
-import  SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-
-smesh = smeshBuilder.New()
-aFilterManager = smesh.CreateFilterManager()
-Mesh_1 = smesh.Mesh(Divided_Disk_1)
-Regular_1D = Mesh_1.Segment()
-Number_of_Segments_1 = Regular_1D.NumberOfSegments(6)
-Quadrangle_2D = Mesh_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
-isDone = Mesh_1.Compute()
-aMaxElementLength2D0x5d7fdf0 = aFilterManager.CreateMaxElementLength2D()
-isDone = Mesh_1.QuadToTriObject( Mesh_1,  )
-Mesh_1.ExtrusionSweepObjects( [ Mesh_1 ], [ Mesh_1 ], [ Mesh_1 ], [ 0, 0, 50 ], 3, 1 )
-Mesh_1.ConvertToQuadratic(0, Mesh_1,True)
-
-infos = Mesh_1.GetMeshInfo()
-print("Number of biquadratic pentahedrons:", infos[SMESH.Entity_BiQuad_Penta])
-if (infos[SMESH.Entity_BiQuad_Penta] != 1080):
-  raise RuntimeError("Bad number of biquadratic pentahedrons: should be 1080")
-  
-## Set names of Mesh objects
-smesh.SetName(Regular_1D.GetAlgorithm(), 'Regular_1D')
-smesh.SetName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D')
-smesh.SetName(Number_of_Segments_1, 'Number of Segments_1')
-smesh.SetName(Mesh_1.GetMesh(), 'Mesh_1')
-
-
-if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/filters_belong2group.py b/doc/salome/examples/filters_belong2group.py
deleted file mode 100644 (file)
index b3b5b61..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-# Belong to Mesh Group criterion
-
-# create mesh
-from SMESH_mechanic import *
-print()
-
-# create a group of all faces (quadrangles) generated on sub_face3
-quads_on_face3 = mesh.MakeGroup("quads_on_face3", SMESH.FACE, SMESH.FT_BelongToGeom,'=',sub_face3)
-print("There are %s quadrangles generated on '%s' and included in the group '%s'" % ( quads_on_face3.Size(), sub_face3.GetName(), quads_on_face3.GetName() ))
-
-# create a group of all the rest quadrangles, generated on other faces by combining 2 criteria:
-# - negated FT_BelongToMeshGroup to select elements not included in quads_on_face3
-# - FT_ElemGeomType to select quadrangles
-not_on_face3 = smesh.GetCriterion( SMESH.FACE, SMESH.FT_BelongToMeshGroup,'=',quads_on_face3, SMESH.FT_LogicalNOT )
-quadrangles  = smesh.GetCriterion( SMESH.FACE, SMESH.FT_ElemGeomType,'=',SMESH.Geom_QUADRANGLE )
-
-rest_quads = mesh.MakeGroupByCriteria("rest_quads", [ not_on_face3, quadrangles ])
-print("'%s' group includes all the rest %s quadrangles" % ( rest_quads.GetName(), rest_quads.Size() ))
-
diff --git a/doc/salome/examples/filters_ex01.py b/doc/salome/examples/filters_ex01.py
deleted file mode 100644 (file)
index f323ecb..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-# Aspect ratio
-# This script demonstrates various usages of filters
-
-# create mesh
-from SMESH_mechanic import *
-
-# get faces with aspect ratio > 2.5
-filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_AspectRatio, SMESH.FT_MoreThan, 2.5)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of faces with aspect ratio > 2.5:", len(ids))
-
-# get faces with aspect ratio > 1.5
-filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_AspectRatio, '>', 1.5, mesh=mesh)
-ids = filter.GetIDs()
-print("Number of faces with aspect ratio > 1.5:", len(ids))
-
-# copy the faces with aspect ratio > 1.5 to another mesh;
-# this demonstrates that a filter can be used where usually a group or sub-mesh is acceptable
-filter.SetMesh( mesh.GetMesh() ) # - actually non necessary as mesh is set at filter creation
-mesh2 = smesh.CopyMesh( filter, "AR > 1.5" )
-print("Number of copied faces with aspect ratio > 1.5:", mesh2.NbFaces())
-
-# create a group (Group on Filter) of faces with Aspect Ratio < 1.5
-group = mesh.MakeGroup("AR < 1.5", SMESH.FACE, SMESH.FT_AspectRatio, '<', 1.5)
-print("Number of faces with aspect ratio < 1.5:", group.Size())
-
-# combine several criteria to Create a Group of only Triangular faces with Aspect Ratio < 1.5;
-# note that contents of a GroupOnFilter is dynamically updated as the mesh changes
-crit = [ smesh.GetCriterion( SMESH.FACE, SMESH.FT_AspectRatio, '<', 1.5, BinaryOp=SMESH.FT_LogicalAND ),
-         smesh.GetCriterion( SMESH.FACE, SMESH.FT_ElemGeomType,'=', SMESH.Geom_TRIANGLE ) ]
-triaGroup = mesh.MakeGroupByCriteria( "Tria AR < 1.5", crit )
-print("Number of triangles with aspect ratio < 1.5:", triaGroup.Size())
-
-# get range of values of Aspect Ratio of all faces in the mesh
-aspects = mesh.GetMinMax( SMESH.FT_AspectRatio )
-print("MESH: Min aspect = %s, Max aspect = %s" % ( aspects[0], aspects[1] ))
-
-# get max value of Aspect Ratio of faces in triaGroup
-grAspects = mesh.GetMinMax( SMESH.FT_AspectRatio, triaGroup )
-print("GROUP: Max aspect = %s" % grAspects[1])
-
-# get Aspect Ratio of an element
-aspect = mesh.FunctorValue( SMESH.FT_AspectRatio, ids[0] )
-print("Aspect ratio of the face %s = %s" % ( ids[0], aspect ))
diff --git a/doc/salome/examples/filters_ex02.py b/doc/salome/examples/filters_ex02.py
deleted file mode 100644 (file)
index 6a392ce..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# Aspect ratio 3D
-
-# create mesh with volumes
-from SMESH_mechanic import *
-mesh.Tetrahedron()
-mesh.Compute()
-# get volumes with aspect ratio < 2.0
-filter = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_AspectRatio3D, SMESH.FT_LessThan, 2.0)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of volumes with aspect ratio < 2.0:", len(ids))
diff --git a/doc/salome/examples/filters_ex03.py b/doc/salome/examples/filters_ex03.py
deleted file mode 100644 (file)
index e01b60d..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# Warping angle
-
-# create mesh
-from SMESH_mechanic import *
-# get faces with warping angle = 2.0e-13 with tolerance 5.0e-14
-filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Warping, "=", 2.0e-13, Tolerance=5.0e-14)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of faces with warping angle = 2.0e-13 (tolerance 5.0e-14):", len(ids))
diff --git a/doc/salome/examples/filters_ex04.py b/doc/salome/examples/filters_ex04.py
deleted file mode 100644 (file)
index 2b27483..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# Minimum angle
-
-# create mesh
-from SMESH_mechanic import *
-# get faces with minimum angle > 75
-filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_MinimumAngle,">", 75)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of faces with minimum angle > 75:", len(ids))
diff --git a/doc/salome/examples/filters_ex05.py b/doc/salome/examples/filters_ex05.py
deleted file mode 100644 (file)
index c470db6..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# Taper
-
-# create mesh
-from SMESH_mechanic import *
-# get faces with taper < 1.e-15
-filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Taper, SMESH.FT_LessThan, 1.e-15)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of faces with taper < 1.e-15:", len(ids))
diff --git a/doc/salome/examples/filters_ex06.py b/doc/salome/examples/filters_ex06.py
deleted file mode 100644 (file)
index 94666f7..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# Skew
-
-# create mesh
-from SMESH_mechanic import *
-# get faces with skew > 50
-filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Skew, SMESH.FT_MoreThan, 50)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of faces with skew > 50:", len(ids))
diff --git a/doc/salome/examples/filters_ex07.py b/doc/salome/examples/filters_ex07.py
deleted file mode 100644 (file)
index 7d781dc..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# Area
-
-# create mesh
-from SMESH_mechanic import *
-# get faces with area > 60 and < 90
-criterion1 = smesh.GetCriterion(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 60)
-criterion2 = smesh.GetCriterion(SMESH.FACE, SMESH.FT_Area, SMESH.FT_LessThan, 90)
-filter = smesh.GetFilterFromCriteria([criterion1,criterion2], SMESH.FT_LogicalAND)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of faces with area in range (60,90):", len(ids))
diff --git a/doc/salome/examples/filters_ex08.py b/doc/salome/examples/filters_ex08.py
deleted file mode 100644 (file)
index 479de96..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# Volume
-
-# create mesh with volumes
-from SMESH_mechanic import *
-mesh.Tetrahedron()
-mesh.Compute()
-# get volumes faces with volume > 100
-filter = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_Volume3D, SMESH.FT_MoreThan, 100)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of volumes with volume > 100:", len(ids))
diff --git a/doc/salome/examples/filters_ex09.py b/doc/salome/examples/filters_ex09.py
deleted file mode 100644 (file)
index 21c1d6c..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-# Free borders
-
-# initialize SALOME and modules
-import salome, SMESH
-salome.salome_init()
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create mesh
-face = geompy.MakeFaceHW(100, 100, 1, theName="quadrangle")
-mesh = smesh.Mesh(face)
-mesh.Segment().NumberOfSegments(10)
-mesh.Triangle().MaxElementArea(25)
-mesh.Compute()
-
-# get all free borders
-filter = smesh.GetFilter(SMESH.EDGE, SMESH.FT_FreeBorders)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of edges on free borders:", len(ids))
diff --git a/doc/salome/examples/filters_ex10.py b/doc/salome/examples/filters_ex10.py
deleted file mode 100644 (file)
index d1f5023..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-# Free edges
-
-# initialize SALOME and modules
-import salome, SMESH
-salome.salome_init()
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create mesh
-face = geompy.MakeFaceHW(100, 100, 1)
-geompy.addToStudy( face, "quadrangle" )
-mesh = smesh.Mesh(face)
-mesh.Segment().NumberOfSegments(10)
-mesh.Triangle().MaxElementArea(25)
-mesh.Compute()
-
-# get all faces with free edges
-filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_FreeEdges)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of faces with free edges:", len(ids))
diff --git a/doc/salome/examples/filters_ex11.py b/doc/salome/examples/filters_ex11.py
deleted file mode 100644 (file)
index 47b62e2..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# Free nodes
-
-# create mesh
-from SMESH_mechanic import *
-# add node
-mesh.AddNode(0,0,0)
-# get all free nodes
-filter = smesh.GetFilter(SMESH.NODE, SMESH.FT_FreeNodes)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of free nodes:", len(ids))
diff --git a/doc/salome/examples/filters_ex12.py b/doc/salome/examples/filters_ex12.py
deleted file mode 100644 (file)
index 5dfd81a..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# Free faces
-
-# create mesh
-from SMESH_mechanic import *
-# get all free faces
-filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_FreeFaces)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of free faces:", len(ids))
diff --git a/doc/salome/examples/filters_ex13.py b/doc/salome/examples/filters_ex13.py
deleted file mode 100644 (file)
index ae64b56..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# Bare border faces
-
-# create mesh
-from SMESH_mechanic import *
-# remove some faces to have faces with bare borders
-mesh.RemoveElements( mesh.GetElementsByType(SMESH.FACE)[0:5] )
-# get all faces with bare borders
-filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_BareBorderFace)
-ids = mesh.GetIdsFromFilter(filter)
-print("Faces with bare borders:", ids)
diff --git a/doc/salome/examples/filters_ex14.py b/doc/salome/examples/filters_ex14.py
deleted file mode 100644 (file)
index 2e68ae8..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-# Coplanar faces
-
-# create mesh
-from SMESH_mechanic import *
-faceID = mesh.GetElementsByType(SMESH.FACE)[0]
-# get all faces co-planar to the first face with tolerance 5 degrees
-filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_CoplanarFaces,faceID,Tolerance=5.0)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of faces coplanar with the first one:", len(ids))
diff --git a/doc/salome/examples/filters_ex15.py b/doc/salome/examples/filters_ex15.py
deleted file mode 100644 (file)
index 70c8cae..0000000
+++ /dev/null
@@ -1,7 +0,0 @@
-# Over-constrained faces
-# create mesh
-from SMESH_mechanic import *
-# get all over-constrained faces
-filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_OverConstrainedFace)
-ids = mesh.GetIdsFromFilter(filter)
-print("Over-constrained faces:", ids)
diff --git a/doc/salome/examples/filters_ex16.py b/doc/salome/examples/filters_ex16.py
deleted file mode 100644 (file)
index e417ca2..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-# Double edges, Double faces, Double volumes
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-import salome_notebook
-
-# make a mesh on a box
-box = geompy.MakeBoxDXDYDZ(100,100,100)
-mesh = smesh.Mesh( box, "Box" )
-mesh.Segment().NumberOfSegments(10)
-mesh.Quadrangle()
-mesh.Hexahedron()
-mesh.Compute()
-# copy all elements with translation and Merge nodes
-mesh.TranslateObject( mesh, smesh.MakeDirStruct( 10,0,0), Copy=True )
-mesh.MergeNodes( mesh.FindCoincidentNodes(1e-7) )
-# create filters to find equal elements
-equalEdgesFilter   = smesh.GetFilter(SMESH.EDGE, SMESH.FT_EqualEdges)
-equalFacesFilter   = smesh.GetFilter(SMESH.FACE, SMESH.FT_EqualFaces)
-equalVolumesFilter = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_EqualVolumes)
-# get equal elements
-print("Number of equal edges:",   len( mesh.GetIdsFromFilter( equalEdgesFilter )))
-print("Number of equal faces:",   len( mesh.GetIdsFromFilter( equalFacesFilter )))
-print("Number of equal volumes:", len( mesh.GetIdsFromFilter( equalVolumesFilter )))
diff --git a/doc/salome/examples/filters_ex17.py b/doc/salome/examples/filters_ex17.py
deleted file mode 100644 (file)
index a05fbaa..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-# Double nodes
-
-import salome
-salome.salome_init()
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-import SMESH
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# make a mesh on a box
-box = geompy.MakeBoxDXDYDZ(100,100,100)
-mesh = smesh.Mesh( box, "Box" )
-mesh.Segment().NumberOfSegments(10)
-mesh.Quadrangle()
-mesh.Hexahedron()
-mesh.Compute()
-# copy all elements with translation
-mesh.TranslateObject( mesh, [10,0,0], Copy=True )
-# create  a filter to find nodes equal within tolerance of 1e-5
-filter = smesh.GetFilter(SMESH.NODE, SMESH.FT_EqualNodes, Tolerance=1e-5)
-# get equal nodes
-print("Number of equal nodes:", len( mesh.GetIdsFromFilter( filter )))
diff --git a/doc/salome/examples/filters_ex18.py b/doc/salome/examples/filters_ex18.py
deleted file mode 100644 (file)
index 6fcba26..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# Borders at multi-connection
-
-import salome
-salome.salome_init()
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-import SMESH
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# make a mesh on a box
-box = geompy.MakeBoxDXDYDZ(100,100,100)
-mesh = smesh.Mesh( box, "Box" )
-mesh.Segment().NumberOfSegments(10)
-mesh.Quadrangle()
-mesh.Hexahedron()
-mesh.Compute()
-# copy all elements with translation and merge nodes
-mesh.TranslateObject( mesh, [10,0,0], Copy=True )
-mesh.MergeNodes( mesh.FindCoincidentNodes( 1e-5 ))
-
-# get mesh edges with number of connected elements (faces and volumes) == 3
-filter = smesh.GetFilter(SMESH.EDGE, SMESH.FT_MultiConnection, 3)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of border edges with 3 faces connected:", len(ids))
diff --git a/doc/salome/examples/filters_ex19.py b/doc/salome/examples/filters_ex19.py
deleted file mode 100644 (file)
index cb1c545..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# Borders at multi-connection 2D
-
-# create mesh
-from SMESH_mechanic import *
-# get faces which consist of edges belonging to 2 mesh elements
-filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_MultiConnection2D, 2)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of faces consisting of edges belonging to 2 faces:", len(ids))
diff --git a/doc/salome/examples/filters_ex20.py b/doc/salome/examples/filters_ex20.py
deleted file mode 100644 (file)
index c55b56b..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# Length
-
-# create mesh
-from SMESH_mechanic import *
-# get edges with length > 14
-filter = smesh.GetFilter(SMESH.EDGE, SMESH.FT_Length, SMESH.FT_MoreThan, 14)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of edges with length > 14:", len(ids))
diff --git a/doc/salome/examples/filters_ex21.py b/doc/salome/examples/filters_ex21.py
deleted file mode 100644 (file)
index 81d4087..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# Length 2D
-
-# create mesh
-from SMESH_mechanic import *
-# get all faces that have edges with length > 14
-filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Length2D, SMESH.FT_MoreThan, 14)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of faces with maximum edge length > 14:", len(ids))
diff --git a/doc/salome/examples/filters_ex22.py b/doc/salome/examples/filters_ex22.py
deleted file mode 100644 (file)
index cb7971b..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# Element Diameter 2D
-
-# create mesh
-from SMESH_mechanic import *
-# get all faces that have elements with length > 10
-filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_MaxElementLength2D, SMESH.FT_MoreThan, 10)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of faces with maximum element length > 10:", len(ids))
diff --git a/doc/salome/examples/filters_ex23.py b/doc/salome/examples/filters_ex23.py
deleted file mode 100644 (file)
index 8c99509..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# Element Diameter 3D
-
-# create mesh with volumes
-from SMESH_mechanic import *
-mesh.Tetrahedron()
-mesh.Compute()
-# get all volumes that have elements with length > 10
-filter = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_MaxElementLength3D, SMESH.FT_MoreThan, 10)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of volumes with maximum element length > 10:", len(ids))
diff --git a/doc/salome/examples/filters_ex24.py b/doc/salome/examples/filters_ex24.py
deleted file mode 100644 (file)
index ffe9226..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# Bare border volumes
-
-# create mesh
-from SMESH_mechanic import *
-mesh.Tetrahedron()
-mesh.Compute()
-# remove some volumes to have volumes with bare borders
-mesh.RemoveElements(mesh.GetElementsByType(SMESH.VOLUME)[0:5])
-# get all volumes with bare borders
-filter = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_BareBorderVolume)
-ids = mesh.GetIdsFromFilter(filter)
-print("Volumes with bare borders:", ids)
diff --git a/doc/salome/examples/filters_ex25.py b/doc/salome/examples/filters_ex25.py
deleted file mode 100644 (file)
index f3083f7..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# Over-constrained volumes
-
-# create mesh
-from SMESH_mechanic import *
-mesh.Tetrahedron()
-mesh.Compute()
-# get all over-constrained volumes
-filter = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_OverConstrainedVolume)
-ids = mesh.GetIdsFromFilter(filter)
-print("Over-constrained volumes:", ids)
diff --git a/doc/salome/examples/filters_ex26.py b/doc/salome/examples/filters_ex26.py
deleted file mode 100644 (file)
index ea7cff8..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# Belong to Geom
-
-# create mesh
-from SMESH_mechanic import *
-# get all faces which nodes lie on the face sub_face3
-filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_BelongToGeom, sub_face3)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of faces which nodes lie on sub_face3:", len(ids))
diff --git a/doc/salome/examples/filters_ex27.py b/doc/salome/examples/filters_ex27.py
deleted file mode 100644 (file)
index e05ecbe..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# Lying on Geom
-
-# create mesh
-from SMESH_mechanic import *
-# get all faces at least one node of each lies on the face sub_face3
-filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_LyingOnGeom, sub_face3)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of faces at least one node of each lies on sub_face3:", len(ids))
diff --git a/doc/salome/examples/filters_ex28.py b/doc/salome/examples/filters_ex28.py
deleted file mode 100644 (file)
index f0382ac..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-# Belong to Plane
-
-# create mesh
-from SMESH_mechanic import *
-# create plane
-plane_1 = geompy.MakePlane(p3,seg1,2000)
-geompy.addToStudy(plane_1, "plane_1")
-# get all nodes which lie on the plane \a plane_1
-filter = smesh.GetFilter(SMESH.NODE, SMESH.FT_BelongToPlane, plane_1)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of nodes which lie on the plane plane_1:", len(ids))
diff --git a/doc/salome/examples/filters_ex29.py b/doc/salome/examples/filters_ex29.py
deleted file mode 100644 (file)
index e6b817a..0000000
+++ /dev/null
@@ -1,8 +0,0 @@
-# Belong to Cylinder
-
-# create mesh
-from SMESH_mechanic import *
-# get all faces which lie on the cylindrical face \a sub_face1
-filter = smesh.GetFilter(SMESH.FACE, SMESH.FT_BelongToCylinder, sub_face1)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of faces which lie on the cylindrical surface sub_face1:", len(ids))
diff --git a/doc/salome/examples/filters_ex30.py b/doc/salome/examples/filters_ex30.py
deleted file mode 100644 (file)
index 856010b..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# Belong to Surface
-
-# create mesh
-from SMESH_mechanic import *
-# create b-spline
-spline_1 = geompy.MakeInterpol([p4,p6,p3,p1])
-surface_1 = geompy.MakePrismVecH( spline_1, vz, 70.0 )
-geompy.addToStudy(surface_1, "surface_1")
-# get all nodes which lie on the surface \a surface_1
-filter = smesh.GetFilter(SMESH.NODE, SMESH.FT_BelongToGenSurface, surface_1)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of nodes which lie on the surface surface_1:", len(ids))
diff --git a/doc/salome/examples/filters_ex31.py b/doc/salome/examples/filters_ex31.py
deleted file mode 100644 (file)
index 209bb9f..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-# Range of IDs
-
-# create mesh
-from SMESH_mechanic import *
-# get nodes with identifiers [5-10] and [15-30]
-criterion1 = smesh.GetCriterion(SMESH.NODE, SMESH.FT_RangeOfIds, Threshold="5-10",\
-                                BinaryOp=SMESH.FT_LogicalOR)
-criterion2 = smesh.GetCriterion(SMESH.NODE, SMESH.FT_RangeOfIds, Threshold="15-30")
-filter = smesh.CreateFilterManager().CreateFilter()
-filter.SetCriteria([criterion1,criterion2])
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of nodes in ranges [5-10] and [15-30]:", len(ids))
diff --git a/doc/salome/examples/filters_ex32.py b/doc/salome/examples/filters_ex32.py
deleted file mode 100644 (file)
index 5630f78..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# Badly oriented volume
-
-# create mesh with volumes
-from SMESH_mechanic import *
-mesh.Tetrahedron()
-mesh.Compute()
-# get all badly oriented volumes
-filter = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_BadOrientedVolume)
-ids = mesh.GetIdsFromFilter(filter)
-print("Number of badly oriented volumes:", len(ids))
diff --git a/doc/salome/examples/filters_ex33.py b/doc/salome/examples/filters_ex33.py
deleted file mode 100644 (file)
index 4e54e55..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-# Linear / quadratic
-
-# create mesh
-from SMESH_mechanic import *
-
-# get linear and quadratic edges
-filter_linear    = smesh.GetFilter(SMESH.EDGE, SMESH.FT_LinearOrQuadratic)
-filter_quadratic = smesh.GetFilter(SMESH.EDGE, SMESH.FT_LinearOrQuadratic, SMESH.FT_LogicalNOT)
-ids_linear    = mesh.GetIdsFromFilter(filter_linear)
-ids_quadratic = mesh.GetIdsFromFilter(filter_quadratic)
-print("Number of linear edges:", len(ids_linear), "; number of quadratic edges:", len(ids_quadratic))
-
-# convert mesh to quadratic
-print("Convert to quadratic...")
-mesh.ConvertToQuadratic()
-
-# get linear and quadratic edges
-ids_linear    = mesh.GetIdsFromFilter(filter_linear)
-ids_quadratic = mesh.GetIdsFromFilter(filter_quadratic)
-print("Number of linear edges:", len(ids_linear), "; number of quadratic edges:", len(ids_quadratic))
diff --git a/doc/salome/examples/filters_ex34.py b/doc/salome/examples/filters_ex34.py
deleted file mode 100644 (file)
index 9e29e97..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-# Group color
-
-# create mesh
-from SMESH_mechanic import *
-# create group of edges
-all_edges = mesh.GetElementsByType(SMESH.EDGE)
-grp = mesh.MakeGroupByIds("edges group", SMESH.EDGE, all_edges[:len(all_edges) // 4])
-import SALOMEDS
-c = SALOMEDS.Color(0.1, 0.5, 1.0)
-grp.SetColor(c)
-# get number of the edges not belonging to the group with the given color
-filter = smesh.GetFilter(SMESH.EDGE, SMESH.FT_GroupColor, c, SMESH.FT_LogicalNOT)
-ids = mesh.GetIdsFromFilter(filter)
-print ("Number of edges not belonging to the group with color (0.1, 0.5, 1.0):", len(ids))
diff --git a/doc/salome/examples/filters_ex35.py b/doc/salome/examples/filters_ex35.py
deleted file mode 100644 (file)
index fea0902..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-# Geometry type
-
-# create mesh with volumes
-from SMESH_mechanic import *
-mesh.Tetrahedron()
-mesh.Compute()
-# get all triangles, quadrangles, tetrahedrons, pyramids
-filter_tri = smesh.GetFilter(SMESH.FACE, SMESH.FT_ElemGeomType, SMESH.Geom_TRIANGLE)
-filter_qua = smesh.GetFilter(SMESH.FACE, SMESH.FT_ElemGeomType, SMESH.Geom_QUADRANGLE)
-filter_tet = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_ElemGeomType, SMESH.Geom_TETRA)
-filter_pyr = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_ElemGeomType, SMESH.Geom_PYRAMID)
-ids_tri = mesh.GetIdsFromFilter(filter_tri)
-ids_qua = mesh.GetIdsFromFilter(filter_qua)
-ids_tet = mesh.GetIdsFromFilter(filter_tet)
-ids_pyr = mesh.GetIdsFromFilter(filter_pyr)
-print("Number of triangles:", len(ids_tri))
-print("Number of quadrangles:", len(ids_qua))
-print("Number of tetrahedrons:", len(ids_tet))
-print("Number of pyramids:", len(ids_pyr))
diff --git a/doc/salome/examples/filters_ex36.py b/doc/salome/examples/filters_ex36.py
deleted file mode 100644 (file)
index ec1e2b4..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-# Combine several criteria into a filter
-
-# create mesh
-from SMESH_mechanic import *
-
-# get all the quadrangle faces ...
-criterion1 = smesh.GetCriterion(SMESH.FACE, SMESH.FT_ElemGeomType, SMESH.Geom_QUADRANGLE, SMESH.FT_LogicalAND)
-# ... but those from sub_face3
-criterion2 = smesh.GetCriterion(SMESH.FACE, SMESH.FT_BelongToGeom, sub_face3, SMESH.FT_LogicalNOT)
-
-quadFilter = smesh.GetFilterFromCriteria([criterion1,criterion2])
-
-# get faces satisfying the criteria
-ids = mesh.GetIdsFromFilter(quadFilter)
-
-# create a group of faces satisfying the criteria
-myGroup = mesh.GroupOnFilter(SMESH.FACE,"Quads_on_cylindrical_faces",quadFilter)
diff --git a/doc/salome/examples/filters_ex37.py b/doc/salome/examples/filters_ex37.py
deleted file mode 100644 (file)
index 0f1a0a8..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-# Entity type
-
-# create a mesh
-from SMESH_mechanic import *
-
-# make the mesh quadratic
-mesh.ConvertToQuadratic()
-# make some elements bi-quadratic
-for face in SubFaceL[: len(SubFaceL) // 2]:
-    mesh.ConvertToQuadratic( theSubMesh=mesh.Group( face ), theToBiQuad=True )
-
-# get triangles with 7 nodes
-filter_tri = smesh.GetFilter(SMESH.FACE, SMESH.FT_EntityType,'=', SMESH.Entity_BiQuad_Triangle )
-ids_tri = mesh.GetIdsFromFilter(filter_tri)
-print("Number of bi-quadratic triangles:", len(ids_tri))
diff --git a/doc/salome/examples/filters_ex38.py b/doc/salome/examples/filters_ex38.py
deleted file mode 100644 (file)
index 2193c66..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-# Ball diameter
-
-# create a mesh
-from SMESH_mechanic import *
-
-# create several balls with increasing diameter
-for i in range(1,10):
-    diameter = float( i )
-    mesh.AddBall( i, diameter )
-    pass
-
-# get balls with diameter > 5.
-diam_filter = smesh.GetFilter(SMESH.BALL, SMESH.FT_BallDiameter,'>', 5. )
-ids = mesh.GetIdsFromFilter( diam_filter )
-print("Number of balls with diameter > 5:", len(ids))
diff --git a/doc/salome/examples/filters_ex39.py b/doc/salome/examples/filters_ex39.py
deleted file mode 100644 (file)
index 6a2ddd5..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-# "Elements of a domain" filter and "Renumber" hypothesis
-
-import salome, SMESH
-salome.salome_init()
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create two boxes to have two domains in the mesh
-
-box1 = geompy.MakeBoxDXDYDZ( 100,100,100 )
-box2 = geompy.MakeTranslation( box1, 200, 0, 0 )
-boxes = geompy.MakeCompound( [box1, box2] )
-box1, box2 = geompy.SubShapeAll( boxes, geompy.ShapeType["SHAPE"], "box")
-
-vertex = geompy.SubShape( box1, geompy.ShapeType["VERTEX"], [1] )
-
-# create a mesh
-
-mesh = smesh.Mesh( boxes )
-mesh.Segment(box1).NumberOfSegments( 5 )  # to have different nb of elements on the boxes
-mesh.Segment(box2).NumberOfSegments( 10 )
-mesh.Quadrangle()
-ijkAlgo = mesh.Hexahedron()
-
-# Use Renumber hypothesis to get hexahedra and nodes numbered like in a structured mesh.
-# k axis of box1 will be ( 100,100,0 ) - ( 100,100,100 )
-# k axis of box2 will be ( 0,0,0 ) - (0,0,100), by default
-v000 = geompy.MakeVertex( 100,100,0, theName='v000' ) # can use box sub-vertex or standalone one
-v001 = geompy.GetVertexNearPoint( box1, geompy.MakeVertex(100,100,100), theName='v001')
-ijkAlgo.Renumber([ smeshBuilder.BlockCS( box1, v000, v001 ) ])
-
-mesh.Compute()
-
-# Create filters with FT_ConnectedElements criterion by pointing a domain in different ways:
-
-# using point coordinates in box_1
-nodeFilter = smesh.GetFilter( SMESH.NODE, SMESH.FT_ConnectedElements, "=", "1.,2,10", mesh=mesh )
-print("Nb. nodes in box_1:", len( nodeFilter.GetIDs()))
-
-# using point coordinates in box_2
-edgeFilter = smesh.GetFilter( SMESH.EDGE, SMESH.FT_ConnectedElements, "=", [202,1,1 ], mesh=mesh )
-print("Nb. segments in box_2:", len( edgeFilter.GetIDs()))
-
-# using a geom vertex of box_1
-faceFilter = smesh.GetFilter( SMESH.FACE, SMESH.FT_ConnectedElements, "=", vertex, mesh=mesh )
-print("Nb. faces in box_1:", len( edgeFilter.GetIDs()))
-
-# using node ID in box_2
-voluFilter = smesh.GetFilter( SMESH.VOLUME, SMESH.FT_ConnectedElements, "=", 10, mesh=mesh )
-print("Nb. volumes in box_2:", len( voluFilter.GetIDs()))
-
diff --git a/doc/salome/examples/filters_node_nb_conn.py b/doc/salome/examples/filters_node_nb_conn.py
deleted file mode 100644 (file)
index dc7ce0e..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-# Number of connectivities of a node
-
-# create a mesh
-from SMESH_mechanic import *
-
-# get nodes connected to more than 6 tetrahedra
-conn_nb_filter = smesh.GetFilter(SMESH.NODE, SMESH.FT_NodeConnectivityNumber,'>', 6 )
-ids = mesh.GetIdsFromFilter( conn_nb_filter )
-print("Number of nodes connected to more than 6 tetrahedra:", len(ids))
diff --git a/doc/salome/examples/generate_flat_elements.py b/doc/salome/examples/generate_flat_elements.py
deleted file mode 100644 (file)
index 5dda5bb..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-# Double nodes on groups boundaries
-
-# This example represents an iron cable (a thin cylinder) in a concrete block (a big cylinder).
-# The big cylinder is defined by two geometric volumes.
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-
-# geometry 
-
-O = geompy.MakeVertex(0, 0, 0)
-OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
-OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
-OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
-Vertex_1 = geompy.MakeVertex(50, 0, 0)
-Cylinder_1 = geompy.MakeCylinder(O, OX, 10, 500)
-Cylinder_2 = geompy.MakeCylinder(Vertex_1, OX, 100, 400)
-Vertex_2 = geompy.MakeVertex(-200, -200, -200)
-Vertex_3 = geompy.MakeVertex(250, 200, 200)
-Box_1 = geompy.MakeBoxTwoPnt(Vertex_2, Vertex_3)
-Fuse_1 = geompy.MakeFuse(Cylinder_1, Cylinder_2)
-Partition_1 = geompy.MakePartition([Fuse_1], [Cylinder_1, Box_1], [], [], geompy.ShapeType["SOLID"], 0, [], 0)
-[Solid_1,Solid_2] = geompy.GetShapesOnShape(Cylinder_1, Partition_1, geompy.ShapeType["SOLID"], GEOM.ST_IN)
-[Solid_3,Solid_4] = geompy.GetShapesOnShape(Cylinder_2, Partition_1, geompy.ShapeType["SOLID"], GEOM.ST_IN)
-Vertex_4 = geompy.MakeVertex(450, 0, 0)
-Vertex_5 = geompy.MakeVertex(500, 0, 0)
-Vertex_6 = geompy.MakeVertex(550, 0, 0)
-vec1 = geompy.MakeVector(Vertex_4, Vertex_5)
-vec2 = geompy.MakeVector(Vertex_5, Vertex_6)
-[Face_1] = geompy.GetShapesOnPlane(Partition_1, geompy.ShapeType["FACE"], vec1, GEOM.ST_ON)
-[Face_2] = geompy.GetShapesOnPlane(Partition_1, geompy.ShapeType["FACE"], vec2, GEOM.ST_ON)
-
-# meshing (we have linear tetrahedrons here, but other elements are OK)
-
-Mesh_1 = smesh.Mesh(Partition_1)
-Regular_1D = Mesh_1.Segment()
-Nb_Segments_1 = Regular_1D.NumberOfSegments(15)
-MEFISTO_2D = Mesh_1.Triangle(algo=smeshBuilder.MEFISTO)
-Length_From_Edges_2D = MEFISTO_2D.LengthFromEdges()
-ALGO3D = Mesh_1.Tetrahedron()
-isDone = Mesh_1.Compute()
-
-# relevant groups of volumes and faces
-
-Solid_1_1 = Mesh_1.GroupOnGeom(Solid_1,'Solid_1',SMESH.VOLUME)
-Solid_2_1 = Mesh_1.GroupOnGeom(Solid_2,'Solid_2',SMESH.VOLUME)
-Solid_3_1 = Mesh_1.GroupOnGeom(Solid_3,'Solid_3',SMESH.VOLUME)
-Solid_4_1 = Mesh_1.GroupOnGeom(Solid_4,'Solid_4',SMESH.VOLUME)
-Face_1_1 = Mesh_1.GroupOnGeom(Face_1,'Face_1',SMESH.FACE)
-Face_2_1 = Mesh_1.GroupOnGeom(Face_2,'Face_2',SMESH.FACE)
-
-# Building of flat elements
-
-Mesh_1.DoubleNodesOnGroupBoundaries([Solid_1_1, Solid_2_1, Solid_3_1, Solid_4_1], 1)
-
-Mesh_1.CreateFlatElementsOnFacesGroups([Face_1_1, Face_2_1])
diff --git a/doc/salome/examples/grouping_elements_ex01.py b/doc/salome/examples/grouping_elements_ex01.py
deleted file mode 100644 (file)
index c35de33..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-# Create a Standalone Group
-
-import SMESH_mechanic
-import SMESH
-
-smesh  = SMESH_mechanic.smesh
-mesh   = SMESH_mechanic.mesh
-salome = SMESH_mechanic.salome
-
-# Get ids of all faces with area > 100 
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 100.)
-
-anIds = mesh.GetIdsFromFilter(aFilter) 
-
-# create a group consisting of faces with area > 100
-aGroup1 = mesh.MakeGroupByIds("Area > 100", SMESH.FACE, anIds)
-
-# create a group that contains all nodes from the mesh
-aGroup2 = mesh.CreateEmptyGroup(SMESH.NODE, "all nodes")
-aGroup2.AddFrom(mesh.mesh)
-
-
-# ====================================
-# Various methods of the Group object
-# ====================================
-
-aGroup = mesh.CreateEmptyGroup(SMESH.NODE, "aGroup")
-
-# set/get group name
-aGroup.SetName( "new name" )
-print("name", aGroup.GetName())
-
-# get group type (type of entities in the group, SMESH.NODE in our case)
-print("type", aGroup.GetType())
-
-# get number of entities (nodes in our case) in the group
-print("size", aGroup.Size())
-
-# check of emptiness
-print("is empty", aGroup.IsEmpty())
-
-# check of presence of an entity in the group
-aGroup.Add([1,2]) # Add() method is specific to the standalone group
-print("contains node 2", aGroup.Contains(2))
-
-# get an entity by index
-print("1st node", aGroup.GetID(1))
-
-# get all entities
-print("all", aGroup.GetIDs())
-
-# get number of nodes (actual for groups of elements)
-print("nb nodes", aGroup.GetNumberOfNodes())
-
-# get underlying nodes (actual for groups of elements)
-print("nodes", aGroup.GetNodeIDs())
-
-# set/get color
-import SALOMEDS
-aGroup.SetColor( SALOMEDS.Color(1.,1.,0.));
-print("color", aGroup.GetColor())
-
-# ----------------------------------------------------------------------------
-# methods specific to the standalone group and not present in GroupOnGeometry
-# and GroupOnFilter
-# ----------------------------------------------------------------------------
-
-# clear the group's contents
-aGroup.Clear()
-
-# add contents of other object (group, sub-mesh, filter)
-aGroup.AddFrom( aGroup2 )
-
-# removes entities
-aGroup.Remove( [2,3,4] )
-
-
-
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/grouping_elements_ex02.py b/doc/salome/examples/grouping_elements_ex02.py
deleted file mode 100644 (file)
index 4e2a495..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-# Create a Group on Geometry
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create a box
-box = geompy.MakeBox(0., 0., 0., 100., 100., 100.)
-geompy.addToStudy(box, "box")
-
-# add the first face of the box to the study
-subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
-face = subShapeList[0]
-geompy.addToStudyInFather(box, face, "face 1") 
-
-# create group of edges on the face
-aGeomGroupE = geompy.CreateGroup(face, geompy.ShapeType["EDGE"])
-geompy.AddObject(aGeomGroupE, 3)
-geompy.AddObject(aGeomGroupE, 6)
-geompy.AddObject(aGeomGroupE, 8)
-geompy.AddObject(aGeomGroupE, 10)
-geompy.addToStudyInFather(face, aGeomGroupE, "Group of Edges")
-
-# create quadrangle 2D mesh on the box
-quadra = smesh.Mesh(box, "Box : quadrangle 2D mesh")
-algo1D = quadra.Segment()
-quadra.Quadrangle()
-algo1D.NumberOfSegments(7) 
-
-# compute the mesh
-quadra.Compute()
-
-# create SMESH group on the face with name "SMESHGroup1"
-aSmeshGroup1 = quadra.GroupOnGeom(face, "SMESHGroup1")
-
-# create SMESH group on <aGeomGroupE> with default name
-aSmeshGroup2 = quadra.GroupOnGeom(aGeomGroupE) 
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/grouping_elements_ex03.py b/doc/salome/examples/grouping_elements_ex03.py
deleted file mode 100644 (file)
index 97e1de9..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-# Create a Group on Filter
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-import salome_notebook
-
-
-box = geompy.MakeBoxDXDYDZ(10,10,10)
-
-# make a mesh with quadrangles of different area in range [1,16]
-mesh = smesh.Mesh(box,"Quad mesh")
-hyp1D = mesh.Segment().StartEndLength( 1, 4 )
-mesh.Quadrangle()
-mesh.Compute()
-
-# create a group on filter selecting faces of medium size
-critaria = [ \
-    smesh.GetCriterion(SMESH.FACE, SMESH.FT_Area, ">", 1.1, BinaryOp=SMESH.FT_LogicalAND ),
-    smesh.GetCriterion(SMESH.FACE, SMESH.FT_Area, "<", 15.0 )
-    ]
-filt = smesh.GetFilterFromCriteria( critaria )
-filtGroup = mesh.GroupOnFilter( SMESH.FACE, "group on filter", filt )
-print("Group on filter contains %s elements" % filtGroup.Size())
-
-# group on filter is updated if the mesh is modified
-hyp1D.SetStartLength( 2.5 )
-hyp1D.SetEndLength( 2.5 )
-mesh.Compute()
-print("After mesh change, group on filter contains %s elements" % filtGroup.Size())
-
-# set a new filter defining the group
-filt2 = smesh.GetFilter( SMESH.FACE, SMESH.FT_RangeOfIds, "1-50" )
-filtGroup.SetFilter( filt2 )
-print("With a new filter, group on filter contains %s elements" % filtGroup.Size())
-
-# group is updated at modification of the filter
-filt2.SetCriteria( [ smesh.GetCriterion( SMESH.FACE, SMESH.FT_RangeOfIds, "1-70" )])
-filtIDs3 = filtGroup.GetIDs()
-print("After filter modification, group on filter contains %s elements" % filtGroup.Size())
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/grouping_elements_ex04.py b/doc/salome/examples/grouping_elements_ex04.py
deleted file mode 100644 (file)
index e0e58ac..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Edit a Group
-
-import SMESH_mechanic
-import SMESH
-
-smesh  = SMESH_mechanic.smesh
-mesh   = SMESH_mechanic.mesh
-salome = SMESH_mechanic.salome
-
-# Get ids of all faces with area > 35
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 35.)
-
-anIds = mesh.GetIdsFromFilter(aFilter) 
-
-print("Criterion: Area > 35, Nb = ", len(anIds))
-
-# create a group by adding elements with area > 35
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Area > 35")
-aGroup.Add(anIds) 
-
-# Get ids of all faces with area > 40
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 40.)
-
-anIds = mesh.GetIdsFromFilter(aFilter)
-
-print("Criterion: Area > 40, Nb = ", len(anIds)) 
-
-# create a group of elements with area [35; 40] by removing elements with area > 40 from group aGroup
-aGroup.Remove(anIds) 
-aGroup.SetName("35 < Area < 40")
-
-# print the result
-aGroupElemIDs = aGroup.GetListOfID()
-
-print("Criterion: 35 < Area < 40, Nb = ", len(aGroupElemIDs))
-
-j = 1
-for i in range(len(aGroupElemIDs)):
-  if j > 20: j = 1; print("")
-  print(aGroupElemIDs[i], end=' ')
-  j = j + 1
-  pass
-print("")
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/grouping_elements_ex05.py b/doc/salome/examples/grouping_elements_ex05.py
deleted file mode 100644 (file)
index 96aa7fa..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-# Union of groups
-
-import SMESH_mechanic
-import SMESH, SALOMEDS
-
-smesh  = SMESH_mechanic.smesh
-mesh   = SMESH_mechanic.mesh
-salome = SMESH_mechanic.salome
-
-# Criterion : AREA > 20
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 20.)
-
-anIds = mesh.GetIdsFromFilter(aFilter)
-
-print("Criterion: Area > 20, Nb = ", len( anIds )) 
-
-# create a group by adding elements with area > 20
-aGroup1 = mesh.CreateEmptyGroup(SMESH.FACE, "Area > 20")
-aGroup1.Add(anIds)
-
-# Criterion : AREA = 20
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_EqualTo, 20.)
-
-anIds = mesh.GetIdsFromFilter(aFilter)
-
-print("Criterion: Area = 20, Nb = ", len( anIds )) 
-
-# create a group by adding elements with area = 20
-aGroup2 = mesh.CreateEmptyGroup( SMESH.FACE, "Area = 20" )
-
-aGroup2.Add(anIds)
-
-# create union group : area >= 20
-aGroup3 = mesh.UnionListOfGroups([aGroup1, aGroup2], "Area >= 20")
-aGroup3.SetColor( SALOMEDS.Color(1.,1.,0.));
-print("Criterion: Area >= 20, Nb = ", len(aGroup3.GetListOfID()))
-# Please note that also there is UnionGroups() method which works with two groups only
-
-# Criterion : AREA < 20
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_LessThan, 20.)
-
-anIds = mesh.GetIdsFromFilter(aFilter)
-
-print("Criterion: Area < 20, Nb = ", len(anIds))
-
-# create a group by adding elements with area < 20
-aGroup4 = mesh.CreateEmptyGroup(SMESH.FACE, "Area < 20")
-aGroup4.Add(anIds)
-aGroup4.SetColor( SALOMEDS.Color(1.,0.,0.));
-
-# create union group : area >= 20 and area < 20
-aGroup5 = mesh.UnionListOfGroups([aGroup3, aGroup4], "Any Area")
-print("Criterion: Any Area, Nb = ", len(aGroup5.GetListOfID()))
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/grouping_elements_ex06.py b/doc/salome/examples/grouping_elements_ex06.py
deleted file mode 100644 (file)
index 9423cf7..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-# Intersection of groups
-
-import SMESH_mechanic
-import SMESH
-
-smesh  = SMESH_mechanic.smesh
-mesh   = SMESH_mechanic.mesh
-salome = SMESH_mechanic.salome
-
-# Criterion : AREA > 20
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 20.)
-
-anIds = mesh.GetIdsFromFilter(aFilter)
-
-print("Criterion: Area > 20, Nb = ", len(anIds)) 
-
-# create a group by adding elements with area > 20
-aGroup1 = mesh.CreateEmptyGroup(SMESH.FACE, "Area > 20")
-aGroup1.Add(anIds)
-
-# Criterion : AREA < 60
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_LessThan, 60.)
-
-anIds = mesh.GetIdsFromFilter(aFilter)
-
-print("Criterion: Area < 60, Nb = ", len(anIds)) 
-
-# create a group by adding elements with area < 60
-aGroup2 = mesh.CreateEmptyGroup(SMESH.FACE, "Area < 60")
-aGroup2.Add(anIds)
-
-# create an intersection of groups : 20 < area < 60
-aGroup3 = mesh.IntersectListOfGroups([aGroup1, aGroup2], "20 < Area < 60")
-print("Criterion: 20 < Area < 60, Nb = ", len(aGroup3.GetListOfID()))
-# Please note that also there is IntersectGroups() method which works with two groups only
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/grouping_elements_ex07.py b/doc/salome/examples/grouping_elements_ex07.py
deleted file mode 100644 (file)
index 800e8e8..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-# Cut of groups
-
-import SMESH_mechanic
-import SMESH
-
-smesh  = SMESH_mechanic.smesh
-mesh   = SMESH_mechanic.mesh
-salome = SMESH_mechanic.salome
-
-# Criterion : AREA > 20
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 20.)
-
-anIds = mesh.GetIdsFromFilter(aFilter)
-
-print("Criterion: Area > 20, Nb = ", len(anIds)) 
-
-# create a group by adding elements with area > 20
-aGroupMain = mesh.MakeGroupByIds("Area > 20", SMESH.FACE, anIds)
-
-# Criterion : AREA < 60
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_LessThan, 60.)
-
-anIds = mesh.GetIdsFromFilter(aFilter)
-
-print("Criterion: Area < 60, Nb = ", len(anIds)) 
-
-# create a group by adding elements with area < 60
-aGroupTool = mesh.MakeGroupByIds("Area < 60", SMESH.FACE, anIds)
-# create a cut of groups : area >= 60
-aGroupRes = mesh.CutGroups(aGroupMain, aGroupTool, "Area >= 60")
-print("Criterion: Area >= 60, Nb = ", len(aGroupRes.GetListOfID()))
-# Please note that also there is CutListOfGroups() method which works with lists of groups of any lengths
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/grouping_elements_ex08.py b/doc/salome/examples/grouping_elements_ex08.py
deleted file mode 100644 (file)
index 76dc93f..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-# Creating groups of entities basing on nodes of other groups
-
-import SMESH_mechanic
-import SMESH, SALOMEDS
-
-smesh  = SMESH_mechanic.smesh
-mesh   = SMESH_mechanic.mesh
-salome = SMESH_mechanic.salome
-
-# Criterion : AREA > 100
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 100.)
-
-# create a group by adding elements with area > 100
-aSrcGroup1 = mesh.GroupOnFilter(SMESH.FACE, "Area > 100", aFilter)
-aSrcGroup1.SetColor( SALOMEDS.Color(1.,1.,0.))
-print("Criterion: Area > 100, Nb = ", aSrcGroup1.Size())
-
-# Criterion : AREA < 30
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_LessThan, 30.)
-
-# create a group by adding elements with area < 30
-aSrcGroup2 = mesh.GroupOnFilter(SMESH.FACE, "Area < 30", aFilter)
-aSrcGroup2.SetColor( SALOMEDS.Color(1.,0.,0.))
-print("Criterion: Area < 30, Nb = ", aSrcGroup2.Size())
-
-
-# Create group of edges using source groups of faces
-aGrp = mesh.CreateDimGroup( [aSrcGroup1, aSrcGroup2], SMESH.EDGE, "Edges" )
-
-# Create group of nodes using source groups of faces
-aGrp = mesh.CreateDimGroup( [aSrcGroup1, aSrcGroup2], SMESH.NODE, "Nodes" )
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/grouping_elements_ex09.py b/doc/salome/examples/grouping_elements_ex09.py
deleted file mode 100644 (file)
index e066dbd..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-# Creating groups of faces separated by sharp edges
-
-import salome
-salome.salome_init()
-from salome.geom import geomBuilder
-from salome.smesh import smeshBuilder
-geompy = geomBuilder.New()
-smesh =  smeshBuilder.New()
-
-# create a mesh on a box
-box = geompy.MakeBoxDXDYDZ( 10,10,10, theName="Box" )
-mesh = smesh.Mesh(box,"Mesh")
-mesh.AutomaticHexahedralization()
-
-# create groups of faces of each side of the box
-groups = mesh.FaceGroupsSeparatedByEdges( 89 )
diff --git a/doc/salome/examples/measurements_ex01.py b/doc/salome/examples/measurements_ex01.py
deleted file mode 100644 (file)
index b94f59c..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-# Minimum Distance
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-import salome_notebook
-
-from SMESH_mechanic import mesh as mesh1
-from SMESH_test1 import mesh as mesh2
-
-mesh1.Compute()
-mesh2.Compute()
-
-# compute min distance from mesh1 to the origin (not available yet)
-smesh.MinDistance(mesh1)
-
-# compute min distance from node 10 of mesh1 to the origin
-smesh.MinDistance(mesh1, id1=10)
-# ... or
-mesh1.MinDistance(10)
-
-# compute min distance between nodes 10 and 20 of mesh1
-smesh.MinDistance(mesh1, id1=10, id2=20)
-# ... or
-mesh1.MinDistance(10, 20)
-
-# compute min distance from element 100 of mesh1 to the origin (not available yet)
-smesh.MinDistance(mesh1, id1=100, isElem1=True)
-# ... or
-mesh1.MinDistance(100, isElem1=True)
-
-# compute min distance between elements 100 and 200 of mesh1 (not available yet)
-smesh.MinDistance(mesh1, id1=100, id2=200, isElem1=True, isElem2=True)
-# ... or
-mesh1.MinDistance(100, 200, True, True)
-
-# compute min distance from element 100 to node 20 of mesh1 (not available yet)
-smesh.MinDistance(mesh1, id1=100, id2=20, isElem1=True)
-# ... or
-mesh1.MinDistance(100, 20, True)
-
-# compute min distance from mesh1 to mesh2 (not available yet)
-smesh.MinDistance(mesh1, mesh2)
-
-# compute min distance from node 10 of mesh1 to node 20 of mesh2
-smesh.MinDistance(mesh1, mesh2, 10, 20)
-
-# compute min distance from node 10 of mesh1 to element 200 of mesh2 (not available yet)
-smesh.MinDistance(mesh1, mesh2, 10, 200, isElem2=True)
-
-# etc...
-
diff --git a/doc/salome/examples/measurements_ex02.py b/doc/salome/examples/measurements_ex02.py
deleted file mode 100644 (file)
index a11a47d..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-# Bounding Box
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-import salome_notebook
-
-from SMESH_mechanic import mesh as mesh1
-from SMESH_test1 import mesh as mesh2
-
-mesh1.Compute()
-mesh2.Compute()
-
-# compute bounding box for mesh1
-mesh1.BoundingBox()
-
-# compute bounding box for list of nodes of mesh1
-mesh1.BoundingBox([363, 364, 370, 371, 372, 373, 379, 380, 381])
-
-# compute bounding box for list of elements of mesh1
-mesh1.BoundingBox([363, 364, 370, 371, 372, 373, 379, 380, 381], isElem=True)
-
-# compute common bounding box of mesh1 and mesh2
-smesh.BoundingBox([mesh1, mesh2])
-
-# etc...
diff --git a/doc/salome/examples/measurements_ex03.py b/doc/salome/examples/measurements_ex03.py
deleted file mode 100644 (file)
index d936878..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-# Basic Properties
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create a box
-box = geompy.MakeBoxDXDYDZ(100,100,100)
-face = geompy.SubShapeAllSorted(box, geompy.ShapeType['FACE'])[0]
-
-# mesh a box
-mesh = smesh.Mesh(box)
-submesh_1d = mesh.Segment().NumberOfSegments(5)
-submesh_2d = mesh.Quadrangle()
-submesh_3d = mesh.Hexahedron()
-submesh_2d_face = mesh.Triangle(face)
-mesh.Compute()
-
-# create a group
-
-group_2d = mesh.Group(face)
-
-# compute basic properties
-
-print("Get basic properties: approach 1 (via measurements tool) ----")
-
-measure = smesh.CreateMeasurements()
-
-print("* for mesh:")
-print("  length:", measure.Length(mesh.mesh))
-print("  area:",   measure.Area(mesh.mesh))
-print("  volume:", measure.Volume(mesh.mesh))
-
-print("* for group (2d):")
-print("  length:", measure.Length(group_2d))
-print("  area:",   measure.Area(group_2d))
-print("  volume:", measure.Volume(group_2d))
-
-print("* for submesh (2d):")
-print("  length:", measure.Length(submesh_2d_face.GetSubMesh()))
-print("  area:",   measure.Area(submesh_2d_face.GetSubMesh()))
-print("  volume:", measure.Volume(submesh_2d_face.GetSubMesh()))
-
-measure.UnRegister()
-
-print("Get basic properties: approach 2 (via smeshBuilder) ----")
-
-print("* for mesh:")
-print("  length:", smesh.GetLength(mesh))
-print("  area:",   smesh.GetArea(mesh))
-print("  volume:", smesh.GetVolume(mesh))
-
-print("* for group (2d):")
-print("  length:", smesh.GetLength(group_2d))
-print("  area:",   smesh.GetArea(group_2d))
-print("  volume:", smesh.GetVolume(group_2d))
-
-print("* for submesh (2d):")
-print("  length:", smesh.GetLength(submesh_2d_face))
-print("  area:",   smesh.GetArea(submesh_2d_face))
-print("  volume:", smesh.GetVolume(submesh_2d_face))
-
-print("Get basic properties: approach 3 (via smeshBuilder.Mesh) ----")
-
-print("* for mesh:")
-print("  length:", mesh.GetLength())
-print("  area:",   mesh.GetArea())
-print("  volume:", mesh.GetVolume())
-
-print("* for group (2d): unsupported")
-
-print("* for submesh (2d): unsupported")
diff --git a/doc/salome/examples/measurements_ex04.py b/doc/salome/examples/measurements_ex04.py
deleted file mode 100644 (file)
index 6524ac9..0000000
+++ /dev/null
@@ -1,26 +0,0 @@
-# Angle measurement
-
-
-import salome
-salome.salome_init()
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# use smeshBuilder.GetAngle() to compute angle between 3 arbitrary points
-
-p0 = [1,0,0]
-p1 = [0,0,0]
-p2 = [0,1,0]
-
-a1 = smesh.GetAngle(p0, p1, p2)
-print("Right angle measure", a1 )
-
-# use Mesh.GetAngle() to compute angle between 3 nodes of a mesh
-
-mesh = smesh.Mesh()
-n0 = mesh.AddNode( *p0 )
-n1 = mesh.AddNode( *p1 )
-n2 = mesh.AddNode( *p2 )
-
-a2 = mesh.GetAngle( n0,n1,n2 )
-
diff --git a/doc/salome/examples/modifying_meshes_ex01.py b/doc/salome/examples/modifying_meshes_ex01.py
deleted file mode 100644 (file)
index 5950a00..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-# Add Node
-
-import salome
-salome.salome_init()
-
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-
-mesh = smesh.Mesh()
-
-# add node
-new_id = mesh.AddNode(50, 10, 0)
-print("")
-if new_id == 0: print("KO node addition.")
-else:           print("New Node has been added with ID ", new_id)
diff --git a/doc/salome/examples/modifying_meshes_ex02.py b/doc/salome/examples/modifying_meshes_ex02.py
deleted file mode 100644 (file)
index 78aff71..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-# Add 0D Element
-
-import salome
-salome.salome_init()
-
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-
-mesh = smesh.Mesh()
-
-# add node
-node_id = mesh.AddNode(50, 10, 0)
-
-# add 0D Element
-new_id = mesh.Add0DElement(node_id)
-
-print("")
-if new_id == 0: print("KO node addition.")
-else:           print("New 0D Element has been added with ID ", new_id)
diff --git a/doc/salome/examples/modifying_meshes_ex03.py b/doc/salome/examples/modifying_meshes_ex03.py
deleted file mode 100644 (file)
index 46df84e..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-# Add 0D Element on Element Nodes
-
-
-import salome
-salome.salome_init()
-
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-
-# create a geometry
-box = geompy.MakeBoxDXDYDZ( 10, 10, 10 )
-face = geompy.SubShapeAll( box, geompy.ShapeType["FACE"])[0]
-
-# make 3D mesh
-mesh = smesh.Mesh( box )
-mesh.AutomaticHexahedralization(0)
-
-# create 0D elements on all nodes of the mesh
-res = mesh.Add0DElementsToAllNodes( mesh )
-
-# find 0D elements on all nodes of the mesh, all found nodes are added to a new group
-groupName = "0Dmesh"
-res = mesh.Add0DElementsToAllNodes( mesh, groupName )
-mesh.RemoveGroupWithContents( res ) # remove all found 0D elements
-
-# create 0D elements on all nodes of a sub-mesh, with group creation
-groupName = "0Dsubmesh"
-submesh = mesh.GetSubMesh( face, "faceSM")
-res = mesh.Add0DElementsToAllNodes( submesh, groupName )
-
-# create 0D elements on all nodes of a group
-group = mesh.Group( face, "faceGroup" )
-res = mesh.Add0DElementsToAllNodes( group )
-
-# remove all 0D elements
-mesh.RemoveElements( mesh.GetIdsFromFilter( smesh.GetFilter( SMESH.ELEM0D,
-                                                             SMESH.FT_ElemGeomType,
-                                                             "=",SMESH.Geom_POINT )))
-
-# create 0D elements on all nodes of some elements
-res = mesh.Add0DElementsToAllNodes( mesh.GetElementsId() )
-
-mesh.RemoveElements( mesh.GetElementsByType( SMESH.ELEM0D ))
-
-# create 0D elements on some nodes
-nodes = list(range(1,10))
-res = mesh.Add0DElementsToAllNodes( mesh.GetIDSource( nodes, SMESH.NODE ))
diff --git a/doc/salome/examples/modifying_meshes_ex04.py b/doc/salome/examples/modifying_meshes_ex04.py
deleted file mode 100644 (file)
index ad8d151..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-# Add Edge
-
-import SMESH_mechanic
-
-mesh = SMESH_mechanic.mesh
-print("")
-
-# add node
-n1 = mesh.AddNode(50, 10, 0)
-if n1 == 0: print("KO node addition.") 
-
-# add edge
-e1 = mesh.AddEdge([n1, 38])
-if e1 == 0: print("KO edge addition.")
-else:       print("New Edge has been added with ID ", e1)
diff --git a/doc/salome/examples/modifying_meshes_ex05.py b/doc/salome/examples/modifying_meshes_ex05.py
deleted file mode 100644 (file)
index c48042a..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-# Add Triangle
-
-import SMESH_mechanic
-
-mesh = SMESH_mechanic.mesh
-print("")
-
-# add node
-n1 = mesh.AddNode(50, 10, 0)
-if n1 == 0: print("KO node addition.")
-
-# add triangle
-t1 = mesh.AddFace([n1, 38, 39])
-if t1 == 0: print("KO triangle addition.")
-else:       print("New Triangle has been added with ID ", t1)
diff --git a/doc/salome/examples/modifying_meshes_ex06.py b/doc/salome/examples/modifying_meshes_ex06.py
deleted file mode 100644 (file)
index ff568e0..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-# Add Quadrangle
-
-import SMESH_mechanic
-
-mesh = SMESH_mechanic.mesh
-print("")
-
-# add node
-n1 = mesh.AddNode(50, 10, 0)
-if n1 == 0: print("KO node addition.")
-
-n2 = mesh.AddNode(40, 20, 0)
-if n2 == 0: print("KO node addition.")
-
-# add quadrangle
-q1 = mesh.AddFace([n2, n1, 38, 39])
-if q1 == 0: print("KO quadrangle addition.")
-else:       print("New Quadrangle has been added with ID ", q1)
diff --git a/doc/salome/examples/modifying_meshes_ex07.py b/doc/salome/examples/modifying_meshes_ex07.py
deleted file mode 100644 (file)
index 93fa2d1..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-# Add Tetrahedron
-
-import SMESH_mechanic
-
-mesh = SMESH_mechanic.mesh
-print("")
-
-# add node
-n1 = mesh.AddNode(50, 10, 0)
-if n1 == 0: print("KO node addition.")
-
-# add tetrahedron
-t1 = mesh.AddVolume([n1, 38, 39, 246])
-if t1 == 0: print("KO tetrahedron addition.")
-else:       print("New Tetrahedron has been added with ID ", t1)
diff --git a/doc/salome/examples/modifying_meshes_ex08.py b/doc/salome/examples/modifying_meshes_ex08.py
deleted file mode 100644 (file)
index 1cf27c5..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-# Add Hexahedron
-
-import SMESH_mechanic
-
-mesh = SMESH_mechanic.mesh
-print("")
-
-# add nodes
-nId1 = mesh.AddNode(50, 10, 0)
-nId2 = mesh.AddNode(47, 12, 0)
-nId3 = mesh.AddNode(50, 10, 10)
-nId4 = mesh.AddNode(47, 12, 10)
-
-if nId1 == 0 or nId2 == 0 or nId3 == 0 or nId4 == 0: print("KO node addition.")
-
-# add hexahedron
-vId = mesh.AddVolume([nId2, nId1, 38, 39, nId4, nId3, 245, 246])
-if vId == 0: print("KO Hexahedron addition.")
-else:        print("New Hexahedron has been added with ID ", vId)
diff --git a/doc/salome/examples/modifying_meshes_ex09.py b/doc/salome/examples/modifying_meshes_ex09.py
deleted file mode 100644 (file)
index 057a5d6..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-# Add Polygon
-
-import salome
-salome.salome_init()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh = smeshBuilder.New()
-
-# create an empty mesh structure
-mesh = smesh.Mesh() 
-
-# a method to build a polygonal mesh element with <nb_vert> angles:
-def MakePolygon (a_mesh, x0, y0, z0, radius, nb_vert, smesh_builder):
-    import math
-
-    al = 2.0 * math.pi / nb_vert
-    node_ids = []
-
-    # Create nodes for a polygon
-    for ii in range(nb_vert):
-        nid = smesh_builder.AddNode(x0 + radius * math.cos(ii*al),
-                                    y0 + radius * math.sin(ii*al),
-                                    z0)
-        node_ids.append(nid)
-        pass
-
-    # Create a polygon
-    return smesh_builder.AddPolygonalFace(node_ids)
-
-# Create three polygons
-f1 = MakePolygon(mesh, 0, 0,  0, 30, 13, smesh_builder=mesh)
-f2 = MakePolygon(mesh, 0, 0, 10, 21,  9, smesh_builder=mesh)
-f3 = MakePolygon(mesh, 0, 0, 20, 13,  6, smesh_builder=mesh)
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/modifying_meshes_ex10.py b/doc/salome/examples/modifying_meshes_ex10.py
deleted file mode 100644 (file)
index fe8ec68..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-# Add Polyhedron
-
-
-import salome
-salome.salome_init()
-
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-import math
-
-# create an empty mesh structure
-mesh = smesh.Mesh()  
-
-# Create nodes for 12-hedron with pentagonal faces
-al = 2 * math.pi / 5.0
-cosal = math.cos(al)
-aa = 13
-rr = aa / (2.0 * math.sin(al/2.0))
-dr = 2.0 * rr * cosal
-r1 = rr + dr
-dh = rr * math.sqrt(2.0 * (1.0 - cosal * (1.0 + 2.0 * cosal)))
-hh = 2.0 * dh - dr * (rr*(cosal - 1) + (rr + dr)*(math.cos(al/2) - 1)) / dh
-
-dd = [] # top
-cc = [] # below top
-bb = [] # above bottom
-aa = [] # bottom
-
-for i in range(5):
-    cos_bot = math.cos(i*al)
-    sin_bot = math.sin(i*al)
-
-    cos_top = math.cos(i*al + al/2.0)
-    sin_top = math.sin(i*al + al/2.0)
-
-    nd = mesh.AddNode(rr * cos_top, rr * sin_top, hh     ) # top
-    nc = mesh.AddNode(r1 * cos_top, r1 * sin_top, hh - dh) # below top
-    nb = mesh.AddNode(r1 * cos_bot, r1 * sin_bot,      dh) # above bottom
-    na = mesh.AddNode(rr * cos_bot, rr * sin_bot,       0) # bottom
-    dd.append(nd) # top
-    cc.append(nc) # below top
-    bb.append(nb) # above bottom
-    aa.append(na) # bottom
-    pass
-
-# Create a polyhedral volume (12-hedron with pentagonal faces)
-mesh.AddPolyhedralVolume([dd[0], dd[1], dd[2], dd[3], dd[4],  # top
-                          dd[0], cc[0], bb[1], cc[1], dd[1],  # -
-                          dd[1], cc[1], bb[2], cc[2], dd[2],  # -
-                          dd[2], cc[2], bb[3], cc[3], dd[3],  # - below top
-                          dd[3], cc[3], bb[4], cc[4], dd[4],  # -
-                          dd[4], cc[4], bb[0], cc[0], dd[0],  # -
-                          aa[4], bb[4], cc[4], bb[0], aa[0],  # .
-                          aa[3], bb[3], cc[3], bb[4], aa[4],  # .
-                          aa[2], bb[2], cc[2], bb[3], aa[3],  # . above bottom
-                          aa[1], bb[1], cc[1], bb[2], aa[2],  # .
-                          aa[0], bb[0], cc[0], bb[1], aa[1],  # .
-                          aa[0], aa[1], aa[2], aa[3], aa[4]], # bottom
-                         [5,5,5,5,5,5,5,5,5,5,5,5])
-
-if salome.sg.hasDesktop():
-    salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/modifying_meshes_ex11.py b/doc/salome/examples/modifying_meshes_ex11.py
deleted file mode 100644 (file)
index 28b544b..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# Removing Nodes
-
-import SMESH_mechanic
-
-mesh = SMESH_mechanic.mesh
-
-# remove nodes #246 and #255
-res = mesh.RemoveNodes([246, 255])
-if res == 1: print("Nodes removing is OK!")
-else:        print("KO nodes removing.")
diff --git a/doc/salome/examples/modifying_meshes_ex12.py b/doc/salome/examples/modifying_meshes_ex12.py
deleted file mode 100644 (file)
index 8ef8356..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# Removing Elements
-
-import SMESH_mechanic
-
-mesh = SMESH_mechanic.mesh
-
-# remove three elements: #850, #859 and #814
-res = mesh.RemoveElements([850, 859, 814])
-if res == 1: print("Elements removing is OK!")
-else:        print("KO Elements removing.")
diff --git a/doc/salome/examples/modifying_meshes_ex13.py b/doc/salome/examples/modifying_meshes_ex13.py
deleted file mode 100644 (file)
index 3c2e4e0..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-# Removing Orphan Nodes
-
-import SMESH_mechanic
-
-mesh = SMESH_mechanic.mesh
-
-# add orphan nodes
-mesh.AddNode(0,0,0)
-mesh.AddNode(1,1,1)
-# remove just created orphan nodes
-res = mesh.RemoveOrphanNodes()
-if res == 1: print("Removed %d nodes!" % res)
-else:        print("KO nodes removing.")
diff --git a/doc/salome/examples/modifying_meshes_ex14.py b/doc/salome/examples/modifying_meshes_ex14.py
deleted file mode 100644 (file)
index 7bb10fd..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-# Renumbering Nodes and Elements
-
-import SMESH_mechanic
-
-mesh = SMESH_mechanic.mesh
-
-mesh.RenumberNodes()
-
-mesh.RenumberElements()
diff --git a/doc/salome/examples/modifying_meshes_ex15.py b/doc/salome/examples/modifying_meshes_ex15.py
deleted file mode 100644 (file)
index 2656ea3..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-# Moving Nodes
-
-
-import salome
-salome.salome_init()
-
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-
-box = geompy.MakeBoxDXDYDZ(200, 200, 200)
-
-mesh = smesh.Mesh( box )
-mesh.Segment().AutomaticLength(0.1)
-mesh.Quadrangle()
-mesh.Compute()
-
-# find node at (0,0,0) which is located on a geom vertex
-node000 = None
-for vId in geompy.SubShapeAllIDs( box, geompy.ShapeType["VERTEX"]):
-    if node000: break
-    nodeIds = mesh.GetSubMeshNodesId( vId, True )
-    for node in nodeIds:
-        xyz = mesh.GetNodeXYZ( node )
-        if xyz[0] == 0 and xyz[1] == 0 and xyz[2] == 0 :
-            node000 = node
-            pass
-        pass
-    pass
-
-if not node000:
-    raise Exception("node000 not found")
-
-# find node000 using a dedicated function 
-n = mesh.FindNodeClosestTo( -1,-1,-1 )
-if not n == node000:
-    raise Exception("FindNodeClosestTo() returns " + str( n ) + " != " + str( node000 ))
-
-# move node000 to a new location
-x,y,z = -10, -10, -10
-n = mesh.MoveNode( n,x,y,z )
-if not n:
-    raise Exception("MoveNode() returns " + n)
-
-# check the coordinates of the node000
-xyz = mesh.GetNodeXYZ( node000 )
-if not ( xyz[0] == x and xyz[1] == y and xyz[2] == z) :
-    raise Exception("Wrong coordinates: " + str( xyz ) + " != " + str( [x,y,z] ))
diff --git a/doc/salome/examples/modifying_meshes_ex16.py b/doc/salome/examples/modifying_meshes_ex16.py
deleted file mode 100644 (file)
index 2ecc4ed..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-# Diagonal Inversion
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-import salome_notebook
-
-
-# create an empty mesh structure
-mesh = smesh.Mesh() 
-
-# create the following mesh:
-# .----.----.----.
-# |   /|   /|   /|
-# |  / |  / |  / |
-# | /  | /  | /  |
-# |/   |/   |/   |
-# .----.----.----.
-
-bb = [0, 0, 0, 0]
-tt = [0, 0, 0, 0]
-ff = [0, 0, 0, 0, 0, 0]
-
-bb[0] = mesh.AddNode( 0., 0., 0.)
-bb[1] = mesh.AddNode(10., 0., 0.)
-bb[2] = mesh.AddNode(20., 0., 0.)
-bb[3] = mesh.AddNode(30., 0., 0.)
-
-tt[0] = mesh.AddNode( 0., 15., 0.)
-tt[1] = mesh.AddNode(10., 15., 0.)
-tt[2] = mesh.AddNode(20., 15., 0.)
-tt[3] = mesh.AddNode(30., 15., 0.)
-
-ff[0] = mesh.AddFace([bb[0], bb[1], tt[1]])
-ff[1] = mesh.AddFace([bb[0], tt[1], tt[0]])
-ff[2] = mesh.AddFace([bb[1], bb[2], tt[2]])
-ff[3] = mesh.AddFace([bb[1], tt[2], tt[1]])
-ff[4] = mesh.AddFace([bb[2], bb[3], tt[3]])
-ff[5] = mesh.AddFace([bb[2], tt[3], tt[2]])
-
-# inverse the diagonal bb[1] - tt[2]
-print("\nDiagonal inversion ... ", end=' ')
-res = mesh.InverseDiag(bb[1], tt[2])
-if not res: print("failed!")
-else:       print("done.")
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/modifying_meshes_ex17.py b/doc/salome/examples/modifying_meshes_ex17.py
deleted file mode 100644 (file)
index 1fe0c46..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-# Uniting two Triangles
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-import salome_notebook
-
-
-# create an empty mesh structure
-mesh = smesh.Mesh() 
-
-# create the following mesh:
-# .----.----.----.
-# |   /|   /|   /|
-# |  / |  / |  / |
-# | /  | /  | /  |
-# |/   |/   |/   |
-# .----.----.----.
-
-bb = [0, 0, 0, 0]
-tt = [0, 0, 0, 0]
-ff = [0, 0, 0, 0, 0, 0]
-
-bb[0] = mesh.AddNode( 0., 0., 0.)
-bb[1] = mesh.AddNode(10., 0., 0.)
-bb[2] = mesh.AddNode(20., 0., 0.)
-bb[3] = mesh.AddNode(30., 0., 0.)
-
-tt[0] = mesh.AddNode( 0., 15., 0.)
-tt[1] = mesh.AddNode(10., 15., 0.)
-tt[2] = mesh.AddNode(20., 15., 0.)
-tt[3] = mesh.AddNode(30., 15., 0.)
-
-ff[0] = mesh.AddFace([bb[0], bb[1], tt[1]])
-ff[1] = mesh.AddFace([bb[0], tt[1], tt[0]])
-ff[2] = mesh.AddFace([bb[1], bb[2], tt[2]])
-ff[3] = mesh.AddFace([bb[1], tt[2], tt[1]])
-ff[4] = mesh.AddFace([bb[2], bb[3], tt[3]])
-ff[5] = mesh.AddFace([bb[2], tt[3], tt[2]]) 
-
-# delete the diagonal bb[1] - tt[2]
-print("\nUnite two triangles ... ", end=' ')
-res = mesh.DeleteDiag(bb[1], tt[2])
-if not res: print("failed!")
-else:       print("done.")
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/modifying_meshes_ex18.py b/doc/salome/examples/modifying_meshes_ex18.py
deleted file mode 100644 (file)
index fd21b37..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-# Uniting a Set of Triangles
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-import salome_notebook
-
-
-# create an empty mesh structure
-mesh = smesh.Mesh() 
-
-# create the following mesh:
-# .----.----.----.
-# |   /|   /|   /|
-# |  / |  / |  / |
-# | /  | /  | /  |
-# |/   |/   |/   |
-# .----.----.----.
-
-bb = [0, 0, 0, 0]
-tt = [0, 0, 0, 0]
-ff = [0, 0, 0, 0, 0, 0]
-
-bb[0] = mesh.AddNode( 0., 0., 0.)
-bb[1] = mesh.AddNode(10., 0., 0.)
-bb[2] = mesh.AddNode(20., 0., 0.)
-bb[3] = mesh.AddNode(30., 0., 0.)
-
-tt[0] = mesh.AddNode( 0., 15., 0.)
-tt[1] = mesh.AddNode(10., 15., 0.)
-tt[2] = mesh.AddNode(20., 15., 0.)
-tt[3] = mesh.AddNode(30., 15., 0.)
-
-ff[0] = mesh.AddFace([bb[0], bb[1], tt[1]])
-ff[1] = mesh.AddFace([bb[0], tt[1], tt[0]])
-ff[2] = mesh.AddFace([bb[1], bb[2], tt[2]])
-ff[3] = mesh.AddFace([bb[1], tt[2], tt[1]])
-ff[4] = mesh.AddFace([bb[2], bb[3], tt[3]])
-ff[5] = mesh.AddFace([bb[2], tt[3], tt[2]])
-
-# unite a set of triangles
-print("\nUnite a set of triangles ... ", end=' ')
-res = mesh.TriToQuad([ff[2], ff[3], ff[4], ff[5]], SMESH.FT_MinimumAngle, 60.)
-if not res: print("failed!")
-else:       print("done.")
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/modifying_meshes_ex19.py b/doc/salome/examples/modifying_meshes_ex19.py
deleted file mode 100644 (file)
index 7e3c723..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Orientation
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-import salome_notebook
-
-
-# create an empty mesh structure
-mesh = smesh.Mesh() 
-
-# build five quadrangles:
-dx = 10
-dy = 20
-
-n1  = mesh.AddNode(0.0 * dx, 0, 0)
-n2  = mesh.AddNode(1.0 * dx, 0, 0)
-n3  = mesh.AddNode(2.0 * dx, 0, 0)
-n4  = mesh.AddNode(3.0 * dx, 0, 0)
-n5  = mesh.AddNode(4.0 * dx, 0, 0)
-n6  = mesh.AddNode(5.0 * dx, 0, 0)
-n7  = mesh.AddNode(0.0 * dx, dy, 0)
-n8  = mesh.AddNode(1.0 * dx, dy, 0)
-n9  = mesh.AddNode(2.0 * dx, dy, 0)
-n10 = mesh.AddNode(3.0 * dx, dy, 0)
-n11 = mesh.AddNode(4.0 * dx, dy, 0)
-n12 = mesh.AddNode(5.0 * dx, dy, 0)
-
-f1 = mesh.AddFace([n1, n2, n8 , n7 ])
-f2 = mesh.AddFace([n2, n3, n9 , n8 ])
-f3 = mesh.AddFace([n3, n4, n10, n9 ])
-f4 = mesh.AddFace([n4, n5, n11, n10])
-f5 = mesh.AddFace([n5, n6, n12, n11]) 
-
-# Change the orientation of the second and the fourth faces.
-mesh.Reorient([2, 4])
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/modifying_meshes_ex20.py b/doc/salome/examples/modifying_meshes_ex20.py
deleted file mode 100644 (file)
index ffbff36..0000000
+++ /dev/null
@@ -1,10 +0,0 @@
-# Cutting Quadrangles
-
-import SMESH_mechanic
-import SMESH
-
-smesh = SMESH_mechanic.smesh
-mesh  = SMESH_mechanic.mesh
-
-# cut two quadrangles: 405 and 406
-mesh.QuadToTri([405, 406], SMESH.FT_MinimumAngle)
diff --git a/doc/salome/examples/modifying_meshes_ex21.py b/doc/salome/examples/modifying_meshes_ex21.py
deleted file mode 100644 (file)
index a2b92a9..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-# Smoothing
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-import SMESH_mechanic
-
-#smesh = SMESH_mechanic.smesh
-mesh = SMESH_mechanic.mesh
-
-# select the top face
-faces = geompy.SubShapeAllSorted(SMESH_mechanic.shape_mesh, geompy.ShapeType["FACE"])
-face = faces[3]
-geompy.addToStudyInFather(SMESH_mechanic.shape_mesh, face, "face planar with hole")
-
-# create a group of faces to be smoothed
-GroupSmooth = mesh.GroupOnGeom(face, "Group of faces (smooth)", SMESH.FACE)
-
-# perform smoothing
-
-# boolean SmoothObject(Object, IDsOfFixedNodes, MaxNbOfIterations, MaxAspectRatio, Method)
-res = mesh.SmoothObject(GroupSmooth, [], 20, 2., smesh.CENTROIDAL_SMOOTH)
-print("\nSmoothing ... ", end=' ')
-if not res: print("failed!")
-else:       print("done.")
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/modifying_meshes_ex22.py b/doc/salome/examples/modifying_meshes_ex22.py
deleted file mode 100644 (file)
index fe99d13..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-# Extrusion
-
-# There is a series of Extrusion Along Line methods added at different times;
-# a fully functional method is ExtrusionSweepObjects()
-
-import salome, math
-salome.salome_init()
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create an empty mesh
-mesh = smesh.Mesh() 
-
-# add a node
-mesh.AddNode( 0.,0.,0. )
-
-# extrude a node into a line of 10 segments along the X axis
-ids = mesh.GetNodesId()
-stepVector = [1.,0.,0.]
-nbSteps = 10
-mesh.ExtrusionSweep( ids, stepVector, nbSteps, IsNodes=True )
-
-# create some groups
-lastNode      = mesh.GetNodesId()[-1]
-lastNodeGroup = mesh.MakeGroupByIds( "node %s"% lastNode, SMESH.NODE, [lastNode])
-lineGroup     = mesh.MakeGroupByIds( "line", SMESH.EDGE, mesh.GetElementsId() )
-
-# rotate the segments around the first node to get a mesh of a disk quarter
-axisZ  = [0.,0.,0., 0.,0.,1.]
-groups = mesh.RotationSweepObject( lineGroup, axisZ, math.pi/2., 10, 1e-3, MakeGroups=True, TotalAngle=True )
-
-# extrude all faces into volumes
-obj        = mesh
-stepVector = [0.,0.,-1.]
-nbSteps    = 5
-groups = mesh.ExtrusionSweepObject2D( obj, stepVector, nbSteps, MakeGroups=True )
-
-# remove all segments created by the last command
-for g in groups:
-    if g.GetType() == SMESH.EDGE:
-        mesh.RemoveGroupWithContents( g )
-
-# extrude all segments into faces along Z
-obj = mesh
-stepVector = [0.,0.,1.]
-mesh.ExtrusionSweepObject1D( obj, stepVector, nbSteps )
-
-# extrude a group
-obj        = mesh.GetGroupByName( "line_extruded", SMESH.FACE )[0]
-stepVector = [0,-5.,0.]
-nbSteps    = 1
-mesh.ExtrusionSweepObject( obj, stepVector, nbSteps )
-
-# extrude all nodes and triangle faces of the disk quarter, applying a scale factor
-diskGroup = mesh.GetGroupByName( "line_rotated", SMESH.FACE )[0]
-crit = [ smesh.GetCriterion( SMESH.FACE, SMESH.FT_ElemGeomType,'=',SMESH.Geom_TRIANGLE ),
-         smesh.GetCriterion( SMESH.FACE, SMESH.FT_BelongToMeshGroup,'=', diskGroup )]
-trianglesFilter = smesh.GetFilterFromCriteria( crit )
-
-nodes      = [ diskGroup ]
-edges      = []
-faces      = [ trianglesFilter ]
-stepVector = [0,0,1]
-nbSteps    = 10
-mesh.ExtrusionSweepObjects( nodes, edges, faces, stepVector, nbSteps, scaleFactors=[0.5], linearVariation=True )
-
-# extrude a cylindrical group of faces by normal
-cylGroup = None
-for g in mesh.GetGroups( SMESH.FACE ):
-    if g.GetName().startswith("node "):
-        cylGroup = g
-        break
-
-elements = cylGroup
-stepSize = 5.
-nbSteps  = 2
-mesh.ExtrusionByNormal( elements, stepSize, nbSteps )
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/modifying_meshes_ex23.py b/doc/salome/examples/modifying_meshes_ex23.py
deleted file mode 100644 (file)
index d7f4134..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-# Extrusion along a Path
-
-import math
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# 1. Create points
-points = [[0, 0], [50, 30], [50, 110], [0, 150], [-80, 150], [-130, 70], [-130, -20]]
-
-iv = 1
-vertices = []
-for point in points:
-    vert = geompy.MakeVertex(point[0], point[1], 0)
-    #geompy.addToStudy(vert, "Vertex_" + repr(iv))
-    vertices.append(vert)
-    iv += 1
-    pass
-
-# 2. Create edges and wires
-Edge_straight = geompy.MakeEdge(vertices[0], vertices[4])
-Edge_bezierrr = geompy.MakeBezier(vertices)
-Wire_polyline = geompy.MakePolyline(vertices)
-Edge_Circle   = geompy.MakeCircleThreePnt(vertices[0], vertices[1], vertices[2])
-
-geompy.addToStudy(Edge_straight, "Edge_straight")
-geompy.addToStudy(Edge_bezierrr, "Edge_bezierrr")
-geompy.addToStudy(Wire_polyline, "Wire_polyline")
-geompy.addToStudy(Edge_Circle  , "Edge_Circle")
-
-# 3. Explode wire on edges, as they will be used for mesh extrusion
-Wire_polyline_edges = geompy.SubShapeAll(Wire_polyline, geompy.ShapeType["EDGE"])
-for ii in range(len(Wire_polyline_edges)):
-    geompy.addToStudyInFather(Wire_polyline, Wire_polyline_edges[ii], "Edge_" + repr(ii + 1))
-    pass
-
-# Mesh
-
-# Mesh the given shape with the given 1d hypothesis
-def Mesh1D(shape1d, nbSeg, name, smesh_builder):
-  mesh1d_tool = smesh_builder.Mesh(shape1d, name)
-  algo = mesh1d_tool.Segment()
-  hyp  = algo.NumberOfSegments(nbSeg)
-  isDone = mesh1d_tool.Compute()
-  if not isDone: print('Mesh ', name, ': computation failed')
-  return mesh1d_tool
-
-# Create a mesh with six nodes, seven edges and two quadrangle faces
-def MakeQuadMesh2(mesh_name, smesh_builder):
-  quad_1 = smesh_builder.Mesh(name = mesh_name)
-  
-  # six nodes
-  n1 = quad_1.AddNode(0, 20, 10)
-  n2 = quad_1.AddNode(0, 40, 10)
-  n3 = quad_1.AddNode(0, 40, 30)
-  n4 = quad_1.AddNode(0, 20, 30)
-  n5 = quad_1.AddNode(0,  0, 30)
-  n6 = quad_1.AddNode(0,  0, 10)
-
-  # seven edges
-  quad_1.AddEdge([n1, n2]) # 1
-  quad_1.AddEdge([n2, n3]) # 2
-  quad_1.AddEdge([n3, n4]) # 3
-  quad_1.AddEdge([n4, n1]) # 4
-  quad_1.AddEdge([n4, n5]) # 5
-  quad_1.AddEdge([n5, n6]) # 6
-  quad_1.AddEdge([n6, n1]) # 7
-
-  # two quadrangle faces
-  quad_1.AddFace([n1, n2, n3, n4]) # 8
-  quad_1.AddFace([n1, n4, n5, n6]) # 9
-  return [quad_1, [1,2,3,4,5,6,7], [8,9]]
-
-# Path meshes
-Edge_straight_mesh = Mesh1D(Edge_straight, 7, "Edge_straight", smesh_builder=smesh)
-Edge_bezierrr_mesh = Mesh1D(Edge_bezierrr, 7, "Edge_bezierrr", smesh_builder=smesh)
-Wire_polyline_mesh = Mesh1D(Wire_polyline, 3, "Wire_polyline", smesh_builder=smesh)
-Edge_Circle_mesh   = Mesh1D(Edge_Circle  , 8, "Edge_Circle"  , smesh_builder=smesh)
-
-# Initial meshes (to be extruded)
-[quad_1, ee_1, ff_1] = MakeQuadMesh2("quad_1", smesh_builder=smesh)
-[quad_2, ee_2, ff_2] = MakeQuadMesh2("quad_2", smesh_builder=smesh)
-[quad_3, ee_3, ff_3] = MakeQuadMesh2("quad_3", smesh_builder=smesh)
-[quad_4, ee_4, ff_4] = MakeQuadMesh2("quad_4", smesh_builder=smesh)
-[quad_5, ee_5, ff_5] = MakeQuadMesh2("quad_5", smesh_builder=smesh)
-[quad_6, ee_6, ff_6] = MakeQuadMesh2("quad_6", smesh_builder=smesh)
-[quad_7, ee_7, ff_7] = MakeQuadMesh2("quad_7", smesh_builder=smesh)
-
-# ExtrusionAlongPath
-# IDsOfElements, PathMesh, PathShape, NodeStart,
-# HasAngles, Angles, HasRefPoint, RefPoint
-refPoint = SMESH.PointStruct(0, 0, 0)
-a10 = math.radians( 10.0 )
-a45 = math.radians( 45.0 )
-
-# 1. Extrusion of two mesh edges along a straight path
-error = quad_1.ExtrusionAlongPath([1,2], Edge_straight_mesh, Edge_straight, 1,
-                                  0, [], 0, refPoint)
-
-# 2. Extrusion of one mesh edge along a curved path
-error = quad_2.ExtrusionAlongPath([2], Edge_bezierrr_mesh, Edge_bezierrr, 1,
-                                  0, [], 0, refPoint)
-
-# 3. Extrusion of one mesh edge along a curved path with usage of angles
-error = quad_3.ExtrusionAlongPath([2], Edge_bezierrr_mesh, Edge_bezierrr, 1,
-                                  1, [a45, a45, a45, 0, -a45, -a45, -a45], 0, refPoint)
-
-# 4. Extrusion of one mesh edge along the path, which is a part of a meshed wire
-error = quad_4.ExtrusionAlongPath([4], Wire_polyline_mesh, Wire_polyline_edges[0], 1,
-                                  1, [a10, a10, a10], 0, refPoint)
-
-# 5. Extrusion of two mesh faces along the path, which is a part of a meshed wire
-error = quad_5.ExtrusionAlongPath(ff_5 , Wire_polyline_mesh, Wire_polyline_edges[2], 4,
-                                  0, [], 0, refPoint)
-
-# 6. Extrusion of two mesh faces along a closed path
-error = quad_6.ExtrusionAlongPath(ff_6 , Edge_Circle_mesh, Edge_Circle, 1,
-                                  0, [], 0, refPoint)
-
-# 7. Extrusion of two mesh faces along a closed path with usage of angles
-error = quad_7.ExtrusionAlongPath(ff_7, Edge_Circle_mesh, Edge_Circle, 1,
-                                  1, [a45, -a45, a45, -a45, a45, -a45, a45, -a45], 0, refPoint)
-
-
-
-# Make the same meshes using a fully functional method ExtrusionAlongPathObjects() having
-# the following arguments:
-#   Nodes, Edges, Faces, PathObject, PathShape=None,
-#   NodeStart=1, HasAngles=False, Angles=[], LinearVariation=False,
-#   HasRefPoint=False, RefPoint=[0,0,0], MakeGroups=False,
-#   ScaleFactors=[], ScalesVariation=False
-
-quad_1 = MakeQuadMesh2("quad_1", smesh_builder=smesh)[0]
-quad_2 = MakeQuadMesh2("quad_2", smesh_builder=smesh)[0]
-quad_3 = MakeQuadMesh2("quad_3", smesh_builder=smesh)[0]
-quad_4 = MakeQuadMesh2("quad_4", smesh_builder=smesh)[0]
-quad_5 = MakeQuadMesh2("quad_5", smesh_builder=smesh)[0]
-quad_6 = MakeQuadMesh2("quad_6", smesh_builder=smesh)[0]
-quad_7 = MakeQuadMesh2("quad_7", smesh_builder=smesh)[0]
-
-# 1. Extrusion of two mesh edges along a straight path
-nn, ee, ff = [], [1,2], []
-error = quad_1.ExtrusionAlongPathObjects( nn, ee, ff, Edge_straight_mesh )
-
-# 2. Extrusion of one mesh edge along a curved path
-nn, ee, ff = [], [2], []
-error = quad_2.ExtrusionAlongPathObjects( nn, ee, ff, Edge_bezierrr_mesh )
-
-# 3. Extrusion of one mesh edge along a curved path with usage of angles
-error = quad_3.ExtrusionAlongPathObjects( nn, ee, ff, Edge_bezierrr_mesh,
-                                          Angles=[a45, a45, a45, 0, -a45, -a45, -a45])
-
-# 4. Extrusion of one mesh edge along the path, which is a part of a meshed wire
-nn, ee, ff = [], [4], []
-error = quad_4.ExtrusionAlongPathObjects( nn, ee, ff, Wire_polyline_mesh, Wire_polyline_edges[0],
-                                          Angles=[a10, a10, a10])
-
-# 5. Extrusion of two mesh faces along the path, which is a part of a meshed wire
-nn, ee, ff = [], [], quad_5
-error = quad_5.ExtrusionAlongPathObjects( nn, ee, ff, Wire_polyline_mesh, Wire_polyline_edges[2],
-                                          NodeStart=4 )
-
-# 6. Extrusion of two mesh faces along a closed path
-nn, ee, ff = [], [], quad_6
-error = quad_6.ExtrusionAlongPathObjects( nn, ee, ff, Edge_Circle_mesh )
-
-# 7. Extrusion of two mesh faces along a closed path with usage of angles
-nn, ee, ff = [], [], quad_7
-error = quad_7.ExtrusionAlongPathObjects( nn, ee, ff, Edge_Circle_mesh, Edge_Circle,
-                                          Angles=[a45, -a45, a45, -a45, a45, -a45, a45, -a45])
-
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/modifying_meshes_ex24.py b/doc/salome/examples/modifying_meshes_ex24.py
deleted file mode 100644 (file)
index d07a7ca..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-# Revolution
-
-import math
-import SMESH
-
-import SMESH_mechanic
-
-mesh  = SMESH_mechanic.mesh
-smesh = SMESH_mechanic.smesh
-
-# create a group of faces to be revolved
-FacesRotate = [492, 493, 502, 503]
-GroupRotate = mesh.CreateEmptyGroup(SMESH.FACE,"Group of faces (rotate)")
-GroupRotate.Add(FacesRotate)
-
-# define revolution angle and axis
-angle45 = 45 * math.pi / 180
-axisXYZ = SMESH.AxisStruct(-38.3128, -73.3658, -23.321, -13.3402, -13.3265, 6.66632)
-
-# perform revolution of an object
-mesh.RotationSweepObject(GroupRotate, axisXYZ, angle45, 4, 1e-5) 
diff --git a/doc/salome/examples/modifying_meshes_ex25.py b/doc/salome/examples/modifying_meshes_ex25.py
deleted file mode 100644 (file)
index 82af9b1..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-# Pattern Mapping
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# define the geometry
-Box_1 = geompy.MakeBoxDXDYDZ(200., 200., 200.)
-geompy.addToStudy(Box_1, "Box_1")
-
-faces = geompy.SubShapeAll(Box_1, geompy.ShapeType["FACE"])
-Face_1 = faces[0]
-Face_2 = faces[1]
-
-geompy.addToStudyInFather(Box_1, Face_1, "Face_1")
-geompy.addToStudyInFather(Box_1, Face_2, "Face_2")
-
-# build a quadrangle mesh 3x3 on Face_1
-Mesh_1 = smesh.Mesh(Face_1)
-algo1D = Mesh_1.Segment()
-algo1D.NumberOfSegments(3)
-Mesh_1.Quadrangle()
-
-isDone = Mesh_1.Compute()
-if not isDone: print('Mesh Mesh_1 : computation failed')
-
-# build a triangle mesh on Face_2
-Mesh_2 = smesh.Mesh(Face_2)
-
-algo1D = Mesh_2.Segment()
-algo1D.NumberOfSegments(1)
-algo2D = Mesh_2.Triangle()
-algo2D.MaxElementArea(240)
-
-isDone = Mesh_2.Compute()
-if not isDone: print('Mesh Mesh_2 : computation failed')
-
-# create a 2d pattern
-pattern = smesh.GetPattern()
-
-isDone = pattern.LoadFromFace(Mesh_2.GetMesh(), Face_2, 0)
-if (isDone != 1): print('LoadFromFace :', pattern.GetErrorCode())
-
-# apply the pattern to a face of the first mesh
-facesToSplit = Mesh_1.GetElementsByType(SMESH.FACE)
-print("Splitting %d rectangular face(s) to %d triangles..."%(len(facesToSplit), 2*len(facesToSplit)))
-pattern.ApplyToMeshFaces(Mesh_1.GetMesh(), facesToSplit, 0, 0)
-isDone = pattern.MakeMesh(Mesh_1.GetMesh(), 0, 0)
-if (isDone != 1): print('MakeMesh :', pattern.GetErrorCode())  
-
-# create quadrangle mesh
-Mesh_3 = smesh.Mesh(Box_1)
-Mesh_3.Segment().NumberOfSegments(1)
-Mesh_3.Quadrangle()
-Mesh_3.Hexahedron()
-isDone = Mesh_3.Compute()
-if not isDone: print('Mesh Mesh_3 : computation failed')
-
-# create a 3d pattern (hexahedrons)
-pattern_hexa = smesh.GetPattern()
-
-smp_hexa = """!!! Nb of points:
-15
-      0        0        0   !- 0
-      1        0        0   !- 1
-      0        1        0   !- 2
-      1        1        0   !- 3
-      0        0        1   !- 4
-      1        0        1   !- 5
-      0        1        1   !- 6
-      1        1        1   !- 7
-    0.5        0      0.5   !- 8
-    0.5        0        1   !- 9
-    0.5      0.5      0.5   !- 10
-    0.5      0.5        1   !- 11
-      1        0      0.5   !- 12
-      1      0.5      0.5   !- 13
-      1      0.5        1   !- 14
-  !!! Indices of points of 4 elements:
-  8 12 5 9 10 13 14 11
-  0 8 9 4 2 10 11 6
-  2 10 11 6 3 13 14 7
-  0 1 12 8 2 3 13 10"""
-
-pattern_hexa.LoadFromFile(smp_hexa)
-
-# apply the pattern to a mesh
-volsToSplit = Mesh_3.GetElementsByType(SMESH.VOLUME)
-print("Splitting %d hexa volume(s) to %d hexas..."%(len(volsToSplit), 4*len(volsToSplit)))
-pattern_hexa.ApplyToHexahedrons(Mesh_3.GetMesh(), volsToSplit,0,3)
-isDone = pattern_hexa.MakeMesh(Mesh_3.GetMesh(), True, True)
-if (isDone != 1): print('MakeMesh :', pattern_hexa.GetErrorCode())  
-
-# create one more quadrangle mesh
-Mesh_4 = smesh.Mesh(Box_1)
-Mesh_4.Segment().NumberOfSegments(1)
-Mesh_4.Quadrangle()
-Mesh_4.Hexahedron()
-isDone = Mesh_4.Compute()
-if not isDone: print('Mesh Mesh_4 : computation failed')
-
-# create another 3d pattern (pyramids)
-pattern_pyra = smesh.GetPattern()
-
-smp_pyra = """!!! Nb of points:
-9
-        0        0        0   !- 0
-        1        0        0   !- 1
-        0        1        0   !- 2
-        1        1        0   !- 3
-        0        0        1   !- 4
-        1        0        1   !- 5
-        0        1        1   !- 6
-        1        1        1   !- 7
-      0.5      0.5      0.5   !- 8
-  !!! Indices of points of 6 elements:
-  0 1 5 4 8
-  7 5 1 3 8
-  3 2 6 7 8
-  2 0 4 6 8
-  0 2 3 1 8
-  4 5 7 6 8"""
-
-pattern_pyra.LoadFromFile(smp_pyra)
-
-# apply the pattern to a face mesh
-volsToSplit = Mesh_4.GetElementsByType(SMESH.VOLUME)
-print("Splitting %d hexa volume(s) to %d hexas..."%(len(volsToSplit), 6*len(volsToSplit)))
-pattern_pyra.ApplyToHexahedrons(Mesh_4.GetMesh(), volsToSplit,1,0)
-isDone = pattern_pyra.MakeMesh(Mesh_4.GetMesh(), True, True)
-if (isDone != 1): print('MakeMesh :', pattern_pyra.GetErrorCode())  
diff --git a/doc/salome/examples/modifying_meshes_ex26.py b/doc/salome/examples/modifying_meshes_ex26.py
deleted file mode 100644 (file)
index 53059ff..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-# Convert mesh to/from quadratic
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create sphere of radius 100
-
-Sphere = geompy.MakeSphereR( 100 )
-geompy.addToStudy( Sphere, "Sphere" )
-
-# create simple trihedral mesh
-
-Mesh = smesh.Mesh(Sphere)
-Regular_1D = Mesh.Segment()
-Nb_Segments = Regular_1D.NumberOfSegments(5)
-MEFISTO_2D = Mesh.Triangle()
-Tetrahedron = Mesh.Tetrahedron()
-
-# compute mesh
-
-isDone = Mesh.Compute()
-
-# convert to quadratic
-# theForce3d = 1; this results in the medium node lying at the
-# middle of the line segments connecting start and end node of a mesh
-# element
-
-Mesh.ConvertToQuadratic( theForce3d=1 )
-
-# revert back to the non-quadratic mesh
-
-Mesh.ConvertFromQuadratic()
-
-# convert to quadratic
-# theForce3d = 0; this results in the medium node lying at the
-# geometrical edge from which the mesh element is built
-
-Mesh.ConvertToQuadratic( theForce3d=0 )
-
-# to convert not the whole mesh but a sub-mesh, provide it as 
-# an additional argument to the functions:
-# Mesh.ConvertToQuadratic( 0, subMesh )
-# Mesh.ConvertFromQuadratic( subMesh )
-#
-# Note that the mesh becomes non-conformal at conversion of sub-mesh.
diff --git a/doc/salome/examples/modifying_meshes_split_vol.py b/doc/salome/examples/modifying_meshes_split_vol.py
deleted file mode 100644 (file)
index 38e8601..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-# Split volumic elements into tetrahedrons
-
-import salome
-salome.salome_init()
-
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-from salome.smesh import smeshBuilder
-smesh = smeshBuilder.New()
-
-# 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/notebook_smesh.py b/doc/salome/examples/notebook_smesh.py
deleted file mode 100644 (file)
index 376e511..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-# Using SALOME NoteBook
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-import salome_notebook
-
-# set variables
-notebook = salome_notebook.notebook
-notebook.set("Length", 100)
-notebook.set("Width", 200)
-notebook.set("Offset", 50)
-
-notebook.set("NbSegments", 7)
-notebook.set("MaxElementArea", 800)
-notebook.set("MaxElementVolume", 900)
-
-# create a box
-box = geompy.MakeBoxDXDYDZ("Length", "Width", 300)
-idbox = geompy.addToStudy(box, "Box")
-
-# create a mesh
-tetra = smesh.Mesh(box, "MeshBox")
-
-algo1D = tetra.Segment()
-algo1D.NumberOfSegments("NbSegments")
-
-algo2D = tetra.Triangle()
-algo2D.MaxElementArea("MaxElementArea")
-
-algo3D = tetra.Tetrahedron()
-algo3D.MaxElementVolume("MaxElementVolume")
-
-# compute the mesh
-ret = tetra.Compute()
-
-# translate the mesh
-point = SMESH.PointStruct("Offset", 0., 0.)
-vector = SMESH.DirStruct(point)
-tetra.TranslateObject(tetra, vector, 0)
diff --git a/doc/salome/examples/prism_3d_algo.py b/doc/salome/examples/prism_3d_algo.py
deleted file mode 100644 (file)
index 6c2a9d6..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-# Usage of Extrusion 3D meshing algorithm
-
-import salome
-salome.salome_init()
-
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-OX = geompy.MakeVectorDXDYDZ(1,0,0)
-OY = geompy.MakeVectorDXDYDZ(0,1,0)
-OZ = geompy.MakeVectorDXDYDZ(0,0,1)
-
-#  Y ^       Make geometry of a "pipe" with the following base (cross section).
-#    |       Big central quadrangles will be meshed with triangles, walls
-#                         of the pipe will be meshed with quadrilaterals
-#   +--+--+--+--+--+--+
-#   |  |  |  |  |  |  |
-#   +--+--+--+--+--+--+
-#   |  |     |     |  |
-#   +--+     |     +--+
-#   |  |     |     |  |
-#   +--+-----+-----+--+
-#   |  |     |     |  |
-#   +--+     |     +--+
-#   |  |     |     |  |
-#   +--+--+--+--+--+--+
-#   |  |  |  |  |  |  |  -->
-#   +--+--+--+--+--+--+   X
-
-quadBig   = geompy.MakeFaceHW( 20,20, 1 )
-quadBig   = geompy.MakeTranslation( quadBig, 15,15,0 )
-quadSmall = geompy.MakeFaceHW( 10,10, 1 )
-smallQuads1 = geompy.MakeMultiTranslation1D( quadSmall, OX, 10, 3 )
-smallQuads2 = geompy.MakeMultiTranslation1D( quadSmall, OY, 10, 3 )
-smallQuads2 = geompy.SubShapeAllSortedCentres( smallQuads2, geompy.ShapeType["FACE"])[1:]
-
-base = geompy.MakeCompound( smallQuads2 + [smallQuads1, quadBig])
-axis = geompy.MakeLine( geompy.MakeVertex( 25,25,0), OZ )
-base = geompy.MultiRotate1DNbTimes( base, axis, 4)
-base = geompy.MakePartition( [base], theName="base")
-path = geompy.MakeSketcher("Sketcher:F 0 0:TT 0 100:R 0:C -90 180:T 0 -150",[0,0,0, 0,-1,0, 1,0,0])
-
-# Make the pipe, each quadrangle of the base turns into a prism with composite wall faces
-pipe   = geompy.MakePipe( base, path )
-prisms = geompy.MakePartition( [pipe], theName="prisms")
-
-
-# get base faces of the prism to define sub-mesh on them
-smallQuad = geompy.GetFaceNearPoint( prisms, geompy.MakeVertex( 0,0,0 ), "smallQuad")
-bigQuad   = geompy.GetFaceNearPoint( prisms, geompy.MakeVertex( 15,15,0 ), "bigQuad")
-
-
-mesh = smesh.Mesh( prisms )
-
-# assign Global hypotheses
-
-# 1D algorithm and hypothesis for division along the pipe
-mesh.Segment().NumberOfSegments(15)
-
-# Extrusion 3D algo
-mesh.Prism()
-
-# assign Local hypotheses
-
-# 1D and 2D algos and hyps to mesh smallQuad with quadrilaterals
-mesh.Segment(smallQuad).LocalLength( 3 )
-mesh.Quadrangle(smallQuad)
-
-# 1D and 2D algos and hyps to mesh bigQuad with triangles
-mesh.Segment(bigQuad).LocalLength( 3 )
-mesh.Triangle(bigQuad)
-
-# compute the mesh
-mesh.Compute()
diff --git a/doc/salome/examples/quad_medial_axis_algo.py b/doc/salome/examples/quad_medial_axis_algo.py
deleted file mode 100644 (file)
index 42aea88..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-# Usage of Medial Axis Projection algorithm
-
-# for meshing a ring face with quadrangles
-
-import salome
-salome.salome_init()
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create a ring face
-circleEdge1 = geompy.MakeCircleR( 3 )
-circleEdge2 = geompy.MakeCircleR( 7 )
-ring = geompy.MakeFaceWires( [ circleEdge1, circleEdge2 ], True, theName='Ring' )
-circleLen1  = geompy.BasicProperties( circleEdge1 )[0]
-circleLen2  = geompy.BasicProperties( circleEdge2 )[0]
-
-# make a mesh
-
-mesh = smesh.Mesh( ring )
-
-circNbSeg = 60
-algo1d = mesh.Segment()
-algo1d.NumberOfSegments( circNbSeg ) # division of circle edges
-
-algo2d = mesh.Quadrangle( smeshBuilder.QUAD_MA_PROJ )
-algo2d.StartEndLength( circleLen2 / circNbSeg, circleLen1 / circNbSeg ) # radial division
-
-mesh.Compute()
diff --git a/doc/salome/examples/quality_controls_defl.py b/doc/salome/examples/quality_controls_defl.py
deleted file mode 100644 (file)
index 9c018e8..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# Deflection 2D
-
-
-import salome
-salome.salome_init()
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# fuse a box and a sphere
-Sphere_1 = geompy.MakeSphereR(100)
-Box_1 = geompy.MakeBoxDXDYDZ(200, 200, 200)
-Fuse = geompy.MakeFuse( Sphere_1, Box_1, theName="box + sphere" )
-
-# create a mesh
-mesh = smesh.Mesh( Fuse, "Deflection_2D")
-algo = mesh.Segment()
-algo.LocalLength(35)
-algo = mesh.Triangle()
-mesh.Compute()
-
-# get min and max deflection
-minMax = mesh.GetMinMax( SMESH.FT_Deflection2D )
-print("min and max deflection: ", minMax)
-
-# get deflection of a certain face
-faceID = mesh.NbEdges() + mesh.NbFaces()
-defl = mesh.FunctorValue( SMESH.FT_Deflection2D, faceID )
-print("deflection of face %s = %s" % ( faceID, defl ))
-
-margin = minMax[1] / 2
-
-# get all faces with deflection LESS than the margin
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Deflection2D, '<', margin, mesh=mesh)
-anIds = aFilter.GetIDs()
-print("%s faces have deflection less than %s" %( len(anIds), margin ))
-
-# create a group of faces with deflection MORE than the margin
-aGroup = mesh.MakeGroup("Deflection > " + repr(margin), SMESH.FACE, SMESH.FT_Deflection2D,'>',margin)
-print("%s faces have deflection more than %s: %s ..." %( aGroup.Size(), margin, aGroup.GetIDs()[:10] ))
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/quality_controls_ex01.py b/doc/salome/examples/quality_controls_ex01.py
deleted file mode 100644 (file)
index 30648a3..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-# Free Borders
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create open shell: a box without one plane
-box = geompy.MakeBox(0., 0., 0., 20., 20., 15.)
-FaceList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
-FaceList.remove(FaceList[5])
-box = geompy.MakeShell(FaceList)
-idbox = geompy.addToStudy(box, "box")
-
-# create a mesh
-mesh = smesh.Mesh(box, "Mesh_free_borders")
-algo = mesh.Segment()
-algo.NumberOfSegments(5)
-algo = mesh.Triangle()
-algo.MaxElementArea(20.)
-mesh.Compute() 
-
-# criterion : free borders
-aFilter = smesh.GetFilter(SMESH.EDGE, SMESH.FT_FreeBorders)
-anIds = mesh.GetIdsFromFilter(aFilter)
-
-# print the result
-print("Criterion: Free borders Nb = ", len(anIds))
-j = 1
-for i in range(len(anIds)):
-  if j > 20: j = 1; print("")
-  print(anIds[i], end=' ')
-  j = j + 1
-  pass
-print("")
-
-# create a group
-aGroup = mesh.GetMesh().CreateGroup(SMESH.EDGE, "Free borders")
-aGroup.Add(anIds)
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/quality_controls_ex02.py b/doc/salome/examples/quality_controls_ex02.py
deleted file mode 100644 (file)
index 62a312c..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-# Borders at Multiconnection
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create open shell: a box without one plane
-box = geompy.MakeBox(0., 0., 0., 20., 20., 15.)
-FaceList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
-FaceList.remove(FaceList[5])
-box = geompy.MakeShell(FaceList)
-idbox = geompy.addToStudy(box, "box")
-
-# create a mesh
-mesh = smesh.Mesh(box, "Mesh_borders_at_multi-connections")
-algo = mesh.Segment()
-algo.NumberOfSegments(5)
-algo = mesh.Triangle()
-algo.MaxElementArea(20.)
-mesh.Compute() 
-
-# Criterion : Borders at multi-connection
-nb_conn = 2
-
-aFilter = smesh.GetFilter(SMESH.EDGE, SMESH.FT_MultiConnection, SMESH.FT_EqualTo, nb_conn)
-anIds = mesh.GetIdsFromFilter(aFilter)
-
-# print the result
-print("Criterion: Borders at multi-connections Nb = ", len(anIds))
-j = 1
-for i in range(len(anIds)):
-  if j > 20: j = 1; print("")
-  print(anIds[i], end=' ')
-  j = j + 1
-  pass
-print("")
-
-# create a group
-aGroup = mesh.GetMesh().CreateGroup(SMESH.EDGE, "Borders at multi-connections")
-aGroup.Add(anIds)
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/quality_controls_ex03.py b/doc/salome/examples/quality_controls_ex03.py
deleted file mode 100644 (file)
index fca52fd..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-# Length 1D
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create open shell: a box without one plane
-box = geompy.MakeBox(0., 0., 0., 20., 20., 15.)
-FaceList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
-FaceList.remove(FaceList[5])
-box = geompy.MakeShell(FaceList)
-idbox = geompy.addToStudy(box, "box")
-
-# create a mesh
-mesh = smesh.Mesh(box, "Mesh_Length_1D")
-algo = mesh.Segment()
-algo.NumberOfSegments(5)
-algo = mesh.Triangle()
-algo.MaxElementArea(20.)
-mesh.Compute() 
-
-# Criterion : Length > 3.
-length_margin = 3.
-
-aFilter = smesh.GetFilter(SMESH.EDGE, SMESH.FT_Length, SMESH.FT_MoreThan, length_margin)
-anIds = mesh.GetIdsFromFilter(aFilter) 
-
-# print the result
-print("Criterion: Edges length > ", length_margin, " Nb = ", len(anIds))
-j = 1
-for i in range(len(anIds)):
-  if j > 20: j = 1; print("")
-  print(anIds[i], end=' ')
-  j = j + 1
-  pass
-print("")
-
-# create a group
-aGroup = mesh.GetMesh().CreateGroup(SMESH.EDGE, "Edges with length > " + repr(length_margin))
-aGroup.Add(anIds)
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/quality_controls_ex04.py b/doc/salome/examples/quality_controls_ex04.py
deleted file mode 100644 (file)
index 07867cc..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-# Free Edges
-
-import SMESH_mechanic
-import SMESH
-
-smesh  = SMESH_mechanic.smesh
-mesh   = SMESH_mechanic.mesh
-salome = SMESH_mechanic.salome
-
-aFilterMgr = smesh.CreateFilterManager()
-
-# Remove some elements to obtain free edges
-# Criterion : AREA > 95.
-area_margin = 95.
-
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, area_margin)
-
-anIds = mesh.GetIdsFromFilter(aFilter)
-
-mesh.RemoveElements(anIds)
-
-# Criterion : Free Edges
-aBorders = mesh.GetFreeBorders() 
-
-# create groups
-aGroupF = mesh.CreateEmptyGroup(SMESH.FACE, "Faces with free edges")
-aGroupN = mesh.CreateEmptyGroup(SMESH.NODE, "Nodes on free edges")
-
-# fill groups with elements, corresponding to the criterion
-print("")
-print("Criterion: Free edges Nb = ", len(aBorders))
-for i in range(len(aBorders)):
-  aBorder = aBorders[i]
-  print("Face # ", aBorder.myElemId, " : Edge between nodes (", end=' ')
-  print(aBorder.myPnt1, ", ", aBorder.myPnt2, ")")
-
-  aGroupF.Add([aBorder.myElemId])
-  aGroupN.Add([aBorder.myPnt1, aBorder.myPnt2])
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/quality_controls_ex05.py b/doc/salome/examples/quality_controls_ex05.py
deleted file mode 100644 (file)
index 1ec552f..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-# Free Nodes
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create box
-box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
-idbox = geompy.addToStudy(box, "box")
-
-# create a mesh
-mesh = smesh.Mesh(box, "Mesh_free_nodes")
-algo = mesh.Segment()
-algo.NumberOfSegments(10)
-algo = mesh.Triangle(smeshBuilder.MEFISTO)
-algo.MaxElementArea(150.)
-mesh.Compute() 
-
-# Remove some elements to obtain free nodes
-# Criterion : AREA < 80.
-area_margin = 80.
-
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_LessThan, area_margin)
-
-anIds = mesh.GetIdsFromFilter(aFilter)
-
-mesh.RemoveElements(anIds)
-
-# criterion : free nodes
-aFilter = smesh.GetFilter(SMESH.NODE, SMESH.FT_FreeNodes)
-anNodeIds = mesh.GetIdsFromFilter(aFilter)
-
-# create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.NODE, "Free_nodes")
-aGroup.Add(anNodeIds)
-
-# print the result
-print("Criterion: Free nodes Nb = ", len(anNodeIds))
-j = 1
-for i in range(len(anNodeIds)):
-  if j > 20: j = 1; print("")
-  print(anNodeIds[i], end=' ')
-  j = j + 1
-  pass
-print("")
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/quality_controls_ex06.py b/doc/salome/examples/quality_controls_ex06.py
deleted file mode 100644 (file)
index 8dd8e9c..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-# Free Faces
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-####### GEOM part ########
-
-Box_1 = geompy.MakeBoxDXDYDZ(200, 200, 200)
-Box_1_vertex_6 = geompy.GetSubShape(Box_1, [6])
-Box_1 = geompy.GetMainShape(Box_1_vertex_6)
-Box_1_vertex_16 = geompy.GetSubShape(Box_1, [16])
-Box_1 = geompy.GetMainShape(Box_1_vertex_16)
-Box_1_vertex_11 = geompy.GetSubShape(Box_1, [11])
-Box_1 = geompy.GetMainShape(Box_1_vertex_11)
-Plane_1 = geompy.MakePlaneThreePnt(Box_1_vertex_6, Box_1_vertex_16, Box_1_vertex_11, 2000)
-Partition_1 = geompy.MakePartition([Box_1], [Plane_1], [], [], geompy.ShapeType["SOLID"], 0, [], 0)
-
-Box_1_vertex_19 = geompy.GetSubShape(Box_1, [19])
-Box_1_vertex_21 = geompy.GetSubShape(Box_1, [21])
-Plane_2 = geompy.MakePlaneThreePnt(Box_1_vertex_16, Box_1_vertex_19, Box_1_vertex_21, 2000)
-
-geompy.addToStudy( Box_1, "Box_1" )
-geompy.addToStudyInFather( Box_1, Box_1_vertex_6, "Box_1:vertex_6" )
-geompy.addToStudyInFather( Box_1, Box_1_vertex_16, "Box_1:vertex_16" )
-geompy.addToStudyInFather( Box_1, Box_1_vertex_11, "Box_1:vertex_11" )
-geompy.addToStudy( Plane_1, "Plane_1" )
-geompy.addToStudy( Partition_1, "Partition_1" )
-geompy.addToStudyInFather( Box_1, Box_1_vertex_19, "Box_1:vertex_19" )
-geompy.addToStudyInFather( Box_1, Box_1_vertex_21, "Box_1:vertex_21" )
-geompy.addToStudy( Plane_2, "Plane_2" )
-
-###### SMESH part ######
-
-Mesh_1 = smesh.Mesh(Partition_1)
-Regular_1D = Mesh_1.Segment()
-Max_Size_1 = Regular_1D.MaxSize(34.641)
-MEFISTO_2D = Mesh_1.Triangle()
-Tetrahedronn = Mesh_1.Tetrahedron()
-isDone = Mesh_1.Compute()
-
-# create a group of free faces
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_FreeFaces )
-aFaceIds = Mesh_1.GetIdsFromFilter(aFilter)
-
-aGroup = Mesh_1.CreateEmptyGroup(SMESH.FACE, "Free_faces")
-aGroup.Add(aFaceIds)
-
-# print the result
-print("Criterion: Free faces Nb = ", len(aFaceIds))
-j = 1
-for i in range(len(aFaceIds)):
-  if j > 20: j = 1; print("")
-  print(aFaceIds[i], end=' ')
-  j = j + 1
-  pass
-print("")
-
-#filter faces from plane 2
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_BelongToPlane, Plane_2)
-aFaceIds = Mesh_1.GetIdsFromFilter(aFilter)
-aGroup.Remove(aFaceIds)
-
-# create a group of shared faces (located on partition boundary inside box)
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_BelongToPlane, Plane_1)
-aFaceIds = Mesh_1.GetIdsFromFilter(aFilter)
-
-aGroup = Mesh_1.CreateEmptyGroup(SMESH.FACE, "Shared_faces")
-aGroup.Add(aFaceIds)
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/quality_controls_ex07.py b/doc/salome/examples/quality_controls_ex07.py
deleted file mode 100644 (file)
index e85b27d..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-# Bare border faces
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-import salome_notebook
-
-
-box = geompy.MakeBoxDXDYDZ(100, 100, 100)
-geompy.addToStudy( box, "box" )
-
-mesh = smesh.Mesh(box)
-mesh.Segment().NumberOfSegments(3)
-mesh.Quadrangle()
-mesh.Compute()
-
-# remove 2 faces
-allFaces = mesh.GetElementsByType(SMESH.FACE)
-mesh.RemoveElements( allFaces[0:2])
-
-bareGroup = mesh.MakeGroup("bare faces", SMESH.FACE, SMESH.FT_BareBorderFace)
-assert(bareGroup.Size() == 3)
diff --git a/doc/salome/examples/quality_controls_ex08.py b/doc/salome/examples/quality_controls_ex08.py
deleted file mode 100644 (file)
index 157bf5f..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-# Bare border volumes
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-import salome_notebook
-
-
-box = geompy.MakeBoxDXDYDZ(100, 30, 10)
-# the smallest face of the box
-face = geompy.SubShapeAllSorted( box, geompy.ShapeType["FACE"])[0]
-
-geompy.addToStudy( box, "box" )
-geompy.addToStudyInFather( box, face, "face" )
-
-mesh = smesh.Mesh(box)
-mesh.AutomaticHexahedralization();
-
-# remove half of mesh faces from the smallest face
-faceFaces = mesh.GetSubMeshElementsId(face)
-faceToRemove = faceFaces[: len(faceFaces) // 2]
-mesh.RemoveElements( faceToRemove )
-
-# make a group of volumes missing the removed faces
-bareGroup = mesh.MakeGroup("bare volumes", SMESH.VOLUME, SMESH.FT_BareBorderVolume)
-assert(bareGroup.Size() == len( faceToRemove))
diff --git a/doc/salome/examples/quality_controls_ex09.py b/doc/salome/examples/quality_controls_ex09.py
deleted file mode 100644 (file)
index 82050cb..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-# Over-constrained faces
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-import salome_notebook
-
-
-mesh = smesh.Mesh()
-faceFilter = smesh.GetFilter(SMESH.FACE,SMESH.FT_OverConstrainedFace)
-
-#make an edge
-n1 = mesh.AddNode(0,0,0)
-n2 = mesh.AddNode(10,0,0)
-edge = mesh.AddEdge([n1,n2])
-assert( not mesh.GetIdsFromFilter( faceFilter ))
-
-# make faces 
-mesh.ExtrusionSweep([edge], smesh.MakeDirStruct(0,7,0), 5)
-assert( 2 == len( mesh.GetIdsFromFilter( faceFilter )))
diff --git a/doc/salome/examples/quality_controls_ex10.py b/doc/salome/examples/quality_controls_ex10.py
deleted file mode 100644 (file)
index 1a4287f..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-# Over-constrained volumes
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-import salome_notebook
-
-
-mesh = smesh.Mesh()
-volumeFilter = smesh.GetFilter(SMESH.VOLUME,SMESH.FT_OverConstrainedVolume)
-
-# make volumes by extrusion of one face
-n1 = mesh.AddNode(0,0,0)
-n2 = mesh.AddNode(10,0,0)
-edge = mesh.AddEdge([n1,n2])
-mesh.ExtrusionSweep([edge], smesh.MakeDirStruct(0,7,0), 1)
-mesh.ExtrusionSweep( mesh.GetElementsByType(SMESH.FACE), smesh.MakeDirStruct(0,0,5), 7)
-assert( 2 == len( mesh.GetIdsFromFilter( volumeFilter )))
diff --git a/doc/salome/examples/quality_controls_ex11.py b/doc/salome/examples/quality_controls_ex11.py
deleted file mode 100644 (file)
index 7c00278..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-# Length 2D
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create open shell: a box without one plane
-box = geompy.MakeBox(0., 0., 0., 20., 20., 15.)
-FaceList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
-FaceList.remove(FaceList[5])
-box = geompy.MakeShell(FaceList)
-idbox = geompy.addToStudy(box, "box")
-
-# create a mesh
-mesh = smesh.Mesh(box, "Mesh_Length_2D")
-algo = mesh.Segment()
-algo.NumberOfSegments(5)
-algo = mesh.Triangle()
-algo.MaxElementArea(20.)
-mesh.Compute()
-
-# Criterion : Length 2D > 5.7
-length_margin = 5.7
-
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Length2D, SMESH.FT_MoreThan, length_margin)
-
-anIds = mesh.GetIdsFromFilter(aFilter)
-
-# print the result
-print("Criterion: Edges length 2D > ", length_margin, " Nb = ", len(anIds))
-j = 1
-for i in range(len(anIds)):
-  if j > 20: j = 1; print("")
-  print(anIds[i], end=' ')
-  j = j + 1
-  pass
-print("")
-
-# create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Faces with length 2D > " + repr(length_margin))
-aGroup.Add(anIds)
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/quality_controls_ex12.py b/doc/salome/examples/quality_controls_ex12.py
deleted file mode 100644 (file)
index adedda5..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-# Borders at Multiconnection 2D
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create a compound of two glued boxes
-box1 = geompy.MakeBox(0., 0., 0., 20., 20., 15.)
-box2 = geompy.MakeTranslation(box1, 0., 20., 0)
-comp = geompy.MakeCompound([box1, box2])
-box = geompy.MakeGlueFaces(comp, 0.000001)
-idbox = geompy.addToStudy(box, "box")
-
-# create a mesh
-mesh = smesh.Mesh(box, "Box compound : 2D triangle mesh")
-algo = mesh.Segment()
-algo.NumberOfSegments(5)
-algo = mesh.Triangle()
-algo.MaxElementArea(20.)
-mesh.Compute() 
-
-# Criterion : MULTI-CONNECTION 2D = 3
-nb_conn = 3
-
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_MultiConnection2D, SMESH.FT_EqualTo, nb_conn)
-
-anIds = mesh.GetIdsFromFilter(aFilter) 
-
-# print the result
-print("Criterion: Borders at multi-connection 2D = ", nb_conn, " Nb = ", len(anIds))
-j = 1
-for i in range(len(anIds)):
-  if j > 20: j = 1; print("")
-  print(anIds[i], end=' ')
-  j = j + 1
-  pass
-print("")
-
-# create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Borders at multi-connection 2D = " + repr(nb_conn))
-aGroup.Add(anIds)
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/quality_controls_ex13.py b/doc/salome/examples/quality_controls_ex13.py
deleted file mode 100644 (file)
index 5cee2a8..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# Area
-
-import SMESH_mechanic
-import SMESH
-
-smesh  = SMESH_mechanic.smesh
-mesh   = SMESH_mechanic.mesh
-salome = SMESH_mechanic.salome
-
-# Criterion : AREA > 100.
-area_margin = 100.
-
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, area_margin)
-
-anIds = mesh.GetIdsFromFilter(aFilter) 
-
-# print the result
-print("Criterion: Area > ", area_margin, " Nb = ", len(anIds))
-j = 1
-for i in range(len(anIds)):
-  if j > 20: j = 1; print("")
-  print(anIds[i], end=' ')
-  j = j + 1
-  pass
-print("")
-
-# create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Area > " + repr(area_margin))
-aGroup.Add(anIds)
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/quality_controls_ex14.py b/doc/salome/examples/quality_controls_ex14.py
deleted file mode 100644 (file)
index ab939ba..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# Taper
-
-import SMESH_mechanic
-import SMESH
-
-smesh  = SMESH_mechanic.smesh
-mesh   = SMESH_mechanic.mesh
-salome = SMESH_mechanic.salome
-
-# Criterion : Taper > 3e-20
-taper_margin = 3e-20
-
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Taper, SMESH.FT_MoreThan, taper_margin)
-
-anIds = mesh.GetIdsFromFilter(aFilter) 
-
-# print the result
-print("Criterion: Taper > ", taper_margin, " Nb = ", len(anIds))
-j = 1
-for i in range(len(anIds)):
-  if j > 20: j = 1; print("")
-  print(anIds[i], end=' ')
-  j = j + 1
-  pass
-print("")
-
-# create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Taper > " + repr(taper_margin))
-aGroup.Add(anIds)
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/quality_controls_ex15.py b/doc/salome/examples/quality_controls_ex15.py
deleted file mode 100644 (file)
index d7cb290..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# Aspect Ratio
-
-import SMESH_mechanic
-import SMESH
-
-smesh  = SMESH_mechanic.smesh
-mesh   = SMESH_mechanic.mesh
-salome = SMESH_mechanic.salome
-
-# Criterion : ASPECT RATIO > 1.8
-ar_margin = 1.8
-
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_AspectRatio, SMESH.FT_MoreThan, ar_margin)
-
-anIds = mesh.GetIdsFromFilter(aFilter) 
-
-# print the result
-print("Criterion: Aspect Ratio > ", ar_margin, " Nb = ", len(anIds))
-j = 1
-for i in range(len(anIds)):
-  if j > 20: j = 1; print("")
-  print(anIds[i], end=' ')
-  j = j + 1
-  pass
-print("")
-
-# create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Aspect Ratio > " + repr(ar_margin))
-aGroup.Add(anIds)
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/quality_controls_ex16.py b/doc/salome/examples/quality_controls_ex16.py
deleted file mode 100644 (file)
index 645b2cd..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-# Minimum Angle
-
-import SMESH_mechanic
-import SMESH
-
-smesh  = SMESH_mechanic.smesh
-mesh   = SMESH_mechanic.mesh
-salome = SMESH_mechanic.salome
-
-# Criterion : MINIMUM ANGLE < 35.
-min_angle = 35.
-
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_MinimumAngle, SMESH.FT_LessThan, min_angle)
-
-anIds = mesh.GetIdsFromFilter(aFilter) 
-
-# print the result
-print("Criterion: Minimum Angle < ", min_angle, " Nb = ", len(anIds))
-j = 1
-for i in range(len(anIds)):
-  if j > 20: j = 1; print("")
-  print(anIds[i], end=' ')
-  j = j + 1
-  pass
-print("")
-
-# create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Minimum Angle < " + repr(min_angle))
-
-aGroup.Add(anIds)
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/quality_controls_ex17.py b/doc/salome/examples/quality_controls_ex17.py
deleted file mode 100644 (file)
index a22f5e5..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-# Warping
-
-import SMESH_mechanic
-import SMESH
-
-smesh  = SMESH_mechanic.smesh
-mesh   = SMESH_mechanic.mesh
-salome = SMESH_mechanic.salome
-
-# Criterion : WARP ANGLE > 1e-15
-wa_margin = 1e-15
-
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Warping, SMESH.FT_MoreThan, wa_margin)
-
-anIds = mesh.GetIdsFromFilter(aFilter) 
-
-# print the result
-print("Criterion: Warp > ", wa_margin, " Nb = ", len(anIds))
-j = 1
-for i in range(len(anIds)):
-  if j > 20: j = 1; print("")
-  print(anIds[i], end=' ')
-  j = j + 1
-  pass
-print("")
-
-# create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Warp > " + repr(wa_margin))
-
-aGroup.Add(anIds)
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/quality_controls_ex18.py b/doc/salome/examples/quality_controls_ex18.py
deleted file mode 100644 (file)
index 9f6f7a3..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# Skew
-
-import SMESH_mechanic
-import SMESH
-
-smesh  = SMESH_mechanic.smesh
-mesh   = SMESH_mechanic.mesh
-salome = SMESH_mechanic.salome
-
-# Criterion : Skew > 38.
-skew_margin = 38.
-
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_Skew, SMESH.FT_MoreThan, skew_margin)
-
-anIds = mesh.GetIdsFromFilter(aFilter)
-
-# print the result
-print("Criterion: Skew > ", skew_margin, " Nb = ", len(anIds))
-j = 1
-for i in range(len(anIds)):
-  if j > 20: j = 1; print("")
-  print(anIds[i], end=' ')
-  j = j + 1
-  pass
-print("")
-
-# create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Skew > " + repr(skew_margin))
-aGroup.Add(anIds)
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/quality_controls_ex19.py b/doc/salome/examples/quality_controls_ex19.py
deleted file mode 100644 (file)
index 62ef710..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# Element Diameter 2D
-
-import SMESH_mechanic
-import SMESH
-
-smesh  = SMESH_mechanic.smesh
-mesh   = SMESH_mechanic.mesh
-salome = SMESH_mechanic.salome
-
-# Criterion : ELEMENT DIAMETER 2D > 10
-mel_2d_margin = 10
-
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_MaxElementLength2D, SMESH.FT_MoreThan, mel_2d_margin)
-
-anIds = mesh.GetIdsFromFilter(aFilter) 
-
-# print the result
-print("Criterion: Element Diameter 2D Ratio > ", mel_2d_margin, " Nb = ", len(anIds))
-j = 1
-for i in range(len(anIds)):
-  if j > 20: j = 1; print("")
-  print(anIds[i], end=' ')
-  j = j + 1
-  pass
-print("")
-
-# create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Element Diameter 2D > " + repr(mel_2d_margin))
-aGroup.Add(anIds)
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/quality_controls_ex20.py b/doc/salome/examples/quality_controls_ex20.py
deleted file mode 100644 (file)
index dd594c1..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-# Aspect Ratio 3D
-
-import SMESH_mechanic_tetra 
-import SMESH
-
-smesh  = SMESH_mechanic_tetra.smesh
-mesh   = SMESH_mechanic_tetra.mesh
-salome = SMESH_mechanic_tetra.salome
-
-# Criterion : ASPECT RATIO 3D > 4.5
-ar_margin = 4.5
-
-aFilter = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_AspectRatio3D, SMESH.FT_MoreThan, ar_margin)
-
-anIds = mesh.GetIdsFromFilter(aFilter) 
-
-# print the result
-print("Criterion: Aspect Ratio 3D > ", ar_margin, " Nb = ", len(anIds))
-j = 1
-for i in range(len(anIds)):
-  if j > 20: j = 1; print("")
-  print(anIds[i], end=' ')
-  j = j + 1
-  pass
-print("")
-
-# create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.VOLUME, "Aspect Ratio 3D > " + repr(ar_margin))
-
-aGroup.Add(anIds)
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/quality_controls_ex21.py b/doc/salome/examples/quality_controls_ex21.py
deleted file mode 100644 (file)
index 683e314..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-# Volume
-
-import SMESH_mechanic_tetra
-import SMESH
-
-smesh  = SMESH_mechanic_tetra.smesh
-mesh   = SMESH_mechanic_tetra.mesh
-salome = SMESH_mechanic_tetra.salome
-
-# Criterion : VOLUME < 7.
-volume_margin = 7.
-
-aFilter = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_Volume3D, SMESH.FT_LessThan, volume_margin)
-
-anIds = mesh.GetIdsFromFilter(aFilter) 
-
-# print the result
-print("")
-print("Criterion: Volume < ", volume_margin, " Nb = ", len(anIds))
-j = 1
-for i in range(len(anIds)):
-  if j > 20: j = 1; print("")
-  print(anIds[i], end=' ')
-  j = j + 1
-  pass
-print("")
-
-# create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.VOLUME, "Volume < " + repr(volume_margin))
-
-aGroup.Add(anIds)
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/quality_controls_ex22.py b/doc/salome/examples/quality_controls_ex22.py
deleted file mode 100644 (file)
index 131091f..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-# Element Diameter 3D
-
-import SMESH_mechanic_tetra
-import SMESH
-
-smesh  = SMESH_mechanic_tetra.smesh
-mesh   = SMESH_mechanic_tetra.mesh
-salome = SMESH_mechanic_tetra.salome
-
-# Criterion : ELEMENT DIAMETER 3D > 10
-mel_3d_margin = 10
-
-aFilter = smesh.GetFilter(SMESH.FACE, SMESH.FT_MaxElementLength3D, SMESH.FT_MoreThan, mel_3d_margin)
-
-anIds = mesh.GetIdsFromFilter(aFilter) 
-
-# print the result
-print("Criterion: Element Diameter 3D Ratio > ", mel_3d_margin, " Nb = ", len(anIds))
-j = 1
-for i in range(len(anIds)):
-  if j > 20: j = 1; print("")
-  print(anIds[i], end=' ')
-  j = j + 1
-  pass
-print("")
-
-# create a group
-aGroup = mesh.CreateEmptyGroup(SMESH.FACE, "Element Diameter 3D > " + repr(mel_3d_margin))
-aGroup.Add(anIds)
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/radial_prism_3d_algo.py b/doc/salome/examples/radial_prism_3d_algo.py
deleted file mode 100644 (file)
index 6e8c7ad..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-# Usage of Radial Prism 3D meshing algorithm
-
-import salome
-salome.salome_init()
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-import SMESH
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# 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()
diff --git a/doc/salome/examples/split_biquad.py b/doc/salome/examples/split_biquad.py
deleted file mode 100644 (file)
index 235d491..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-# Split bi-quadratic to linear
-
-import salome
-salome.salome_init()
-
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-from salome.smesh import smeshBuilder
-smesh = smeshBuilder.New()
-
-# make a shape consisting of two quadranges
-OY  = geompy.MakeVectorDXDYDZ(0, 1, 0)
-OY1 = geompy.MakeTranslation( OY, 1, 0, 0 )
-OY2 = geompy.MakeTranslation( OY, 2, 0, 0 )
-q1  = geompy.MakeQuad2Edges( OY, OY1 )
-q2  = geompy.MakeQuad2Edges( OY1, OY2 )
-
-shape = geompy.Partition( [q1,q2], theName='shape' )
-ff    = geompy.SubShapeAll( shape, geompy.ShapeType["FACE"], theName="quad" )
-
-# mesh one quadrange with quadrangless and the other with triangles
-mesh = smesh.Mesh( shape )
-mesh.Segment().NumberOfSegments(1)
-mesh.Quadrangle()
-mesh.Triangle( ff[1] )
-mesh.Compute()
-
-# make group of quadrangles and extrude them into a hexahedron
-quadGroup = mesh.Group( ff[0], "quads")
-mesh.ExtrusionSweepObject2D( quadGroup, [0,0,1], 1 )
-
-# make the mesh bi-quadratic
-mesh.ConvertToQuadratic( theToBiQuad=True )
-
-# split all elements into linear ones
-mesh.SplitBiQuadraticIntoLinear()
diff --git a/doc/salome/examples/test_smeshplugin_mg_tetra_parallele.py b/doc/salome/examples/test_smeshplugin_mg_tetra_parallele.py
deleted file mode 100755 (executable)
index a918da2..0000000
+++ /dev/null
@@ -1,82 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-"""
-Test000
-Checks the availability of the external plugins :
- 1 MG-TETRA-PARALLELE   (GHS3DPRLPLUGIN)
-Copyright EDF R&D 2017
-"""
-__revision__ = "V1.0"
-#
-# Computation of the meshes: T/F
-ComputeMeshes = True
-
-import salome
-
-salome.salome_init()
-theStudy = salome.myStudy
-#
-import iparameters
-IPAR = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1))
-
-# fill list AP_MODULES_LIST
-IPAR.append("AP_MODULES_LIST", "Geometry")
-IPAR.append("AP_MODULES_LIST", "Mesh")
-
-ERROR = 0
-MESSAGE = ""
-#
-while not ERROR :
-
-###
-### A. GEOM component
-###
-  import GEOM
-  from salome.geom import geomBuilder
-  geompy = geomBuilder.New()
-  O = geompy.MakeVertex(0, 0, 0, "0")
-  OX = geompy.MakeVectorDXDYDZ(1, 0, 0, "OX")
-  OY = geompy.MakeVectorDXDYDZ(0, 1, 0, "OY")
-  OZ = geompy.MakeVectorDXDYDZ(0, 0, 1, "OZ")
-  BOX = geompy.MakeBoxDXDYDZ(200, 200, 200, "BOX")
-
-###
-### B. SMESH component
-###
-
-  import  SMESH
-  from salome.smesh import smeshBuilder
-
-  smesh = smeshBuilder.New()
-
-
-# B.7. MG_Tetra_Parallel
-  TEXTE = "MG_Tetra_Parallel"
-  MESH_7 = smesh.Mesh(BOX)
-  smesh.SetName(MESH_7.GetMesh(), "M_"+TEXTE)
-  MG_CADSurf_Tp = MESH_7.Triangle(algo=smeshBuilder.MG_CADSurf)
-  try :
-    MG_Tetra_Parallel = MESH_7.Tetrahedron(algo=smeshBuilder.MG_Tetra_Parallel)
-  except :
-    MESSAGE += "\nImpossible d'utiliser "+TEXTE
-    ERROR += 1
-  else :
-    if ComputeMeshes :
-      smesh.SetName(MG_Tetra_Parallel.GetAlgorithm(), TEXTE)
-      OK_COMPUTE = MESH_7.Compute()
-      if not OK_COMPUTE :
-        MESSAGE += "\nErreur avec "+TEXTE
-        ERROR += 1
-      else :
-        print(TEXTE+": OK")
-
-  break
-
-###
-### C. End
-###
-if ERROR :
-  raise Exception("\n\nNombre d'erreurs : %d" % ERROR + MESSAGE + "\n")
-else :
-  print("\nAucun problème\n")
-
diff --git a/doc/salome/examples/test_smeshplugins.py b/doc/salome/examples/test_smeshplugins.py
deleted file mode 100755 (executable)
index 0484092..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-#!/usr/bin/env python3
-# -*- coding: utf-8 -*-
-"""
-Test000
-Checks the availability of the external plugins :
- 1 NETGENPLUGIN
- 2 GMSHPLUGIN
- 3 MG-CADSURF           (BLSURFPLUGIN)
- 4 MG-TETRA             (GHS3DPLUGIN)
- 5 MG-HEXA              (HEXOTICPLUGIN)
- 6 MG-HYBRID            (HYBRIDPLUGIN)
-Copyright EDF R&D 2017
-"""
-__revision__ = "V1.0"
-#
-# Computation of the meshes: T/F
-ComputeMeshes = True
-
-import salome
-
-salome.salome_init()
-theStudy = salome.myStudy
-#
-import iparameters
-IPAR = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1))
-
-# fill list AP_MODULES_LIST
-IPAR.append("AP_MODULES_LIST", "Geometry")
-IPAR.append("AP_MODULES_LIST", "Mesh")
-
-ERROR = 0
-MESSAGE = ""
-#
-while not ERROR :
-
-###
-### A. GEOM component
-###
-  import GEOM
-  from salome.geom import geomBuilder
-  geompy = geomBuilder.New()
-  O = geompy.MakeVertex(0, 0, 0, "0")
-  OX = geompy.MakeVectorDXDYDZ(1, 0, 0, "OX")
-  OY = geompy.MakeVectorDXDYDZ(0, 1, 0, "OY")
-  OZ = geompy.MakeVectorDXDYDZ(0, 0, 1, "OZ")
-  BOX = geompy.MakeBoxDXDYDZ(200, 200, 200, "BOX")
-
-###
-### B. SMESH component
-###
-
-  import  SMESH
-  from salome.smesh import smeshBuilder
-
-  smesh = smeshBuilder.New()
-
-# B.1. NETGEN
-  TEXTE = "NETGEN_1D2D3D"
-  MESH_1 = smesh.Mesh(BOX)
-  smesh.SetName(MESH_1.GetMesh(), "M_"+TEXTE)
-  try :
-    NETGEN_2D3D = MESH_1.Tetrahedron(algo=smeshBuilder.NETGEN_1D2D3D)
-  except :
-    MESSAGE += "\nImpossible d'utiliser "+TEXTE
-    ERROR += 1
-  else :
-    if ComputeMeshes :
-      smesh.SetName(NETGEN_2D3D.GetAlgorithm(), TEXTE)
-      OK_COMPUTE = MESH_1.Compute()
-      if not OK_COMPUTE :
-        MESSAGE += "\nErreur avec "+TEXTE
-        ERROR += 1
-      else :
-        print(TEXTE+": OK")
-
-# B.2. Gmsh
-  TEXTE = "Gmsh"
-  MESH_2 = smesh.Mesh(BOX)
-  smesh.SetName(MESH_2.GetMesh(), "M_"+TEXTE)
-  try :
-    GMSH = MESH_2.Tetrahedron(algo=smeshBuilder.GMSH)
-  except :
-    MESSAGE += "\nImpossible d'utiliser "+TEXTE
-    ERROR += 1
-  else :
-    if ComputeMeshes :
-      smesh.SetName(GMSH.GetAlgorithm(), TEXTE)
-      OK_COMPUTE = MESH_2.Compute()
-      if not OK_COMPUTE :
-        MESSAGE += "\nErreur avec "+TEXTE
-        ERROR += 1
-      else :
-        print(TEXTE+": OK")
-
-# B.3. MG_CADSurf
-  TEXTE = "MG_CADSurf"
-  MESH_3 = smesh.Mesh(BOX)
-  smesh.SetName(MESH_3.GetMesh(), "M_"+TEXTE)
-  try :
-    MG_CADSurf = MESH_3.Triangle(algo=smeshBuilder.MG_CADSurf)
-  except :
-    MESSAGE += "\nImpossible d'utiliser "+TEXTE
-    ERROR += 1
-#   On arrete tout en cas de problème car les suivants en dépendent
-    break
-  else :
-    if ComputeMeshes :
-      smesh.SetName(MG_CADSurf.GetAlgorithm(), TEXTE)
-      OK_COMPUTE = MESH_3.Compute()
-      if not OK_COMPUTE :
-        MESSAGE += "\nErreur avec "+TEXTE
-        ERROR += 1
-      else :
-        print(TEXTE+": OK")
-
-# B.4. MG_Tetra
-  TEXTE = "MG_Tetra"
-  MESH_4 = smesh.Mesh(BOX)
-  smesh.SetName(MESH_4.GetMesh(), "M_"+TEXTE)
-  MG_CADSurf_Te = MESH_4.Triangle(algo=smeshBuilder.MG_CADSurf)
-  try :
-    MG_Tetra = MESH_4.Tetrahedron(algo=smeshBuilder.MG_Tetra)
-  except :
-    MESSAGE += "\nImpossible d'utiliser "+TEXTE
-    ERROR += 1
-  else :
-    if ComputeMeshes :
-      smesh.SetName(MG_Tetra.GetAlgorithm(), TEXTE)
-      OK_COMPUTE = MESH_4.Compute()
-      if not OK_COMPUTE :
-        MESSAGE += "\nErreur avec "+TEXTE
-        ERROR += 1
-      else :
-        print(TEXTE+": OK")
-
-# B.5. MG_Hexa
-  TEXTE = "MG_Hexa"
-  MESH_5 = smesh.Mesh(BOX)
-  smesh.SetName(MESH_5.GetMesh(), "M_"+TEXTE)
-  MG_CADSurf_He = MESH_5.Triangle(algo=smeshBuilder.MG_CADSurf)
-  try :
-    MG_Hexa = MESH_5.Hexahedron(algo=smeshBuilder.MG_Hexa)
-  except :
-    MESSAGE += "\nImpossible d'utiliser "+TEXTE
-    ERROR += 1
-  else :
-    if ComputeMeshes :
-      smesh.SetName(MG_Hexa.GetAlgorithm(), TEXTE)
-      OK_COMPUTE = MESH_5.Compute()
-      if not OK_COMPUTE :
-        MESSAGE += "\nErreur avec "+TEXTE
-        ERROR += 1
-      else :
-        print(TEXTE+": OK")
-
-# B.6. MG_Hybrid
-  TEXTE = "MG_Hybrid"
-  MESH_6 = smesh.Mesh(BOX)
-  smesh.SetName(MESH_6.GetMesh(), "M_"+TEXTE)
-  MG_CADSurf_Hy = MESH_6.Triangle(algo=smeshBuilder.MG_CADSurf)
-  try :
-    MG_Hybrid = MESH_6.Tetrahedron(algo=smeshBuilder.HYBRID)
-  except :
-    MESSAGE += "\nImpossible d'utiliser "+TEXTE
-    ERROR += 1
-  else :
-    if ComputeMeshes :
-      smesh.SetName(MG_Hybrid.GetAlgorithm(), TEXTE)
-      OK_COMPUTE = MESH_6.Compute()
-      if not OK_COMPUTE :
-        MESSAGE += "\nErreur avec "+TEXTE
-        ERROR += 1
-      else :
-        print(TEXTE+": OK")
-
-  break
-
-###
-### C. End
-###
-if ERROR :
-  raise Exception("\n\nNombre d'erreurs : %d" % ERROR + MESSAGE + "\n")
-else :
-  print("\nAucun problème\n")
-
diff --git a/doc/salome/examples/testme.py b/doc/salome/examples/testme.py
deleted file mode 100755 (executable)
index 7babeea..0000000
+++ /dev/null
@@ -1,56 +0,0 @@
-#!/usr/bin/env python3
-# Copyright (C) 2007-2020  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
-#
-
-
-import unittest, sys, os
-
-class SalomeSession(object):
-    def __init__(self, script):
-        import runSalome
-        run_script = "runSalome.py"
-        if sys.platform == 'win32':
-            module_dir = os.getenv("KERNEL_ROOT_DIR")
-            if module_dir: run_script = os.path.join(module_dir, "bin", "salome", run_script)
-            pass
-        sys.argv  = [run_script]
-        sys.argv += ["--terminal"]
-        sys.argv += ["--modules=GEOM,SHAPER,SHAPERSTUDY,SMESH"]
-        sys.argv += ["%s" % script]
-        if sys.platform == 'win32':
-            main_module_path = sys.modules['__main__'].__file__
-            sys.modules['__main__'].__file__ = ''
-        clt, d = runSalome.main()
-        if sys.platform == 'win32':
-            sys.modules['__main__'].__file__ = main_module_path
-        return
-
-    def __del__(self):
-        port = os.getenv('NSPORT')
-        import killSalomeWithPort
-        killSalomeWithPort.killMyPort(port)
-        return
-    pass
-
-class MyTest(unittest.TestCase):
-    def testFunction(self):
-        SalomeSession(sys.argv[1])
-    pass
-
-unittest.main(argv=sys.argv[:1])
diff --git a/doc/salome/examples/tests.py.in b/doc/salome/examples/tests.py.in
deleted file mode 100644 (file)
index 5ae0856..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-# Copyright (C) 2018-2020  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
-#
-
-DIR='@CMAKE_CURRENT_SOURCE_DIR@'
-TESTS='@GOOD_TESTS@'
-REINIT_SALOME=@TEST_REINIT_SALOME@
-
-import os
-import unittest
-import salome
-
-class MyTest(unittest.TestCase):
-    def setUp(self):
-        if REINIT_SALOME:
-            salome.salome_init()
-    def tearDown(self):
-        if REINIT_SALOME:
-            salome.salome_close()
-    pass
-
-if __name__ == "__main__":
-    tests = TESTS.split(';')
-    for test in tests:
-        file_name = os.path.basename(test)
-        if os.path.isabs(test):
-            file_path = file_name
-        else:
-            file_path = os.path.join(DIR, file_name)
-        case_name = 'test_' + file_name[:-3]
-        code = """
-def func(self):
-  with open('{}') as f:
-    exec(f.read())
-"""
-        exec(code.format(file_path))
-        setattr(MyTest, case_name, func)
-
-    unittest.main()
diff --git a/doc/salome/examples/tests.set b/doc/salome/examples/tests.set
deleted file mode 100644 (file)
index 4f341f5..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-# Copyright (C) 2015-2020  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
-#
-
-# examples that can't be used for testing because they use external mesher plug-ins
-SET(BAD_TESTS
-  3dmesh.py
-  a3DmeshOnModified2Dmesh.py
-  creating_meshes_ex01.py
-  creating_meshes_ex03.py
-  creating_meshes_ex05.py
-  defining_hypotheses_ex06.py
-  defining_hypotheses_ex09.py
-  defining_hypotheses_ex17.py
-  filters_ex02.py
-  filters_ex08.py
-  filters_ex23.py
-  filters_ex24.py
-  filters_ex25.py
-  filters_ex32.py
-  filters_ex35.py
-  generate_flat_elements.py
-  modifying_meshes_ex26.py
-  notebook_smesh.py
-  quality_controls_ex06.py
-  quality_controls_ex20.py
-  quality_controls_ex21.py
-  quality_controls_ex22.py
-  viewing_meshes_ex01.py
-  radial_prism_3d_algo.py
-  test_smeshplugin_mg_tetra_parallele.py
-  test_smeshplugins.py
-  )
-
-SET(GOOD_TESTS
-  cartesian_algo.py
-  create_penta_biquad.py
-  creating_meshes_ex02.py
-  creating_meshes_ex04.py
-  creating_meshes_ex06.py
-  creating_meshes_ex07.py
-  creating_meshes_ex08.py
-  defining_hypotheses_ex01.py
-  defining_hypotheses_ex02.py
-  defining_hypotheses_ex03.py
-  defining_hypotheses_ex04.py
-  defining_hypotheses_ex05.py
-  defining_hypotheses_ex07.py
-  defining_hypotheses_ex08.py
-  defining_hypotheses_ex10.py
-  defining_hypotheses_ex11.py
-  defining_hypotheses_ex12.py
-  defining_hypotheses_ex13.py
-  defining_hypotheses_ex14.py
-  defining_hypotheses_ex15.py
-  defining_hypotheses_ex16.py
-  defining_hypotheses_adaptive1d.py
-  extrusion_penta_biquad.py
-  filters_ex01.py
-  filters_ex03.py
-  filters_ex04.py
-  filters_ex05.py
-  filters_ex06.py
-  filters_ex07.py
-  filters_ex09.py
-  filters_ex10.py
-  filters_ex11.py
-  filters_ex12.py
-  filters_ex13.py
-  filters_ex14.py
-  filters_ex15.py
-  filters_ex16.py
-  filters_ex17.py
-  filters_ex18.py
-  filters_ex19.py
-  filters_ex20.py
-  filters_ex21.py
-  filters_ex22.py
-  filters_ex26.py
-  filters_ex27.py
-  filters_ex28.py
-  filters_ex29.py
-  filters_ex30.py
-  filters_ex31.py
-  filters_ex33.py
-  filters_ex34.py
-  filters_ex36.py
-  filters_ex37.py
-  filters_ex38.py
-  filters_ex39.py
-  filters_node_nb_conn.py
-  filters_belong2group.py
-  grouping_elements_ex01.py
-  grouping_elements_ex02.py
-  grouping_elements_ex03.py
-  grouping_elements_ex04.py
-  grouping_elements_ex05.py
-  grouping_elements_ex06.py
-  grouping_elements_ex07.py
-  grouping_elements_ex08.py
-  grouping_elements_ex09.py
-  measurements_ex01.py
-  measurements_ex02.py
-  measurements_ex03.py
-  measurements_ex04.py
-  modifying_meshes_ex01.py
-  modifying_meshes_ex02.py
-  modifying_meshes_ex03.py
-  modifying_meshes_ex04.py
-  modifying_meshes_ex05.py
-  modifying_meshes_ex06.py
-  modifying_meshes_ex07.py
-  modifying_meshes_ex08.py
-  modifying_meshes_ex09.py
-  modifying_meshes_ex10.py
-  modifying_meshes_ex11.py
-  modifying_meshes_ex12.py
-  modifying_meshes_ex13.py
-  modifying_meshes_ex14.py
-  modifying_meshes_ex15.py
-  modifying_meshes_ex16.py
-  modifying_meshes_ex17.py
-  modifying_meshes_ex18.py
-  modifying_meshes_ex19.py
-  modifying_meshes_ex20.py
-  modifying_meshes_ex21.py
-  modifying_meshes_ex22.py
-  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
-  quality_controls_ex03.py
-  quality_controls_ex04.py
-  quality_controls_ex05.py
-  quality_controls_ex07.py
-  quality_controls_ex08.py
-  quality_controls_ex09.py
-  quality_controls_ex10.py
-  quality_controls_ex11.py
-  quality_controls_ex12.py
-  quality_controls_ex13.py
-  quality_controls_ex14.py
-  quality_controls_ex15.py
-  quality_controls_ex16.py
-  quality_controls_ex17.py
-  quality_controls_ex18.py
-  quality_controls_ex19.py
-  quality_controls_defl.py
-  transforming_meshes_ex01.py
-  transforming_meshes_ex02.py
-  transforming_meshes_ex03.py
-  transforming_meshes_ex04.py
-  transforming_meshes_ex05.py
-  transforming_meshes_ex06.py
-  transforming_meshes_ex07.py
-  transforming_meshes_ex08.py
-  transforming_meshes_ex09.py
-  transforming_meshes_ex10.py
-  transforming_meshes_ex11.py
-  transforming_meshes_ex12.py
-  transforming_meshes_ex13.py
-  use_existing_faces.py
-  viewing_meshes_ex02.py
-  split_biquad.py
-  quad_medial_axis_algo.py
-  defining_hypotheses_len_near_vertex.py
-)
-
-SET(EXAMPLES_TESTS ${BAD_TESTS} ${GOOD_TESTS} testme.py)
diff --git a/doc/salome/examples/transforming_meshes_ex01.py b/doc/salome/examples/transforming_meshes_ex01.py
deleted file mode 100644 (file)
index 93f5196..0000000
+++ /dev/null
@@ -1,11 +0,0 @@
-# Translation
-
-import SMESH_mechanic
-
-mesh = SMESH_mechanic.mesh 
-
-# define translation vector
-vector = [-150., -150., 0.]
-
-# make a translated copy of all elements of the mesh
-mesh.TranslateObject(mesh, vector, Copy=True)
diff --git a/doc/salome/examples/transforming_meshes_ex02.py b/doc/salome/examples/transforming_meshes_ex02.py
deleted file mode 100644 (file)
index 5b3ff28..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-# Rotation
-
-import math
-
-import SMESH_mechanic
-import SMESH
-
-smesh = SMESH_mechanic.smesh
-mesh = SMESH_mechanic.mesh 
-
-# define rotation axis and angle
-axisXYZ = SMESH.AxisStruct(0., 0., 0., 5., 5., 20.)
-angle270 = 1.5 * math.pi
-
-# rotate a mesh
-mesh.Rotate([], axisXYZ, angle270, 1)  
diff --git a/doc/salome/examples/transforming_meshes_ex03.py b/doc/salome/examples/transforming_meshes_ex03.py
deleted file mode 100644 (file)
index cf0999c..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-# Scale
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-Box = geompy.MakeBoxDXDYDZ(200, 200, 200)
-f = geompy.SubShapeAllSorted(Box, geompy.ShapeType["FACE"])
-
-Mesh1 = smesh.Mesh(f[0])
-Regular_1D = Mesh1.Segment()
-Nb_Segments_1 = Regular_1D.NumberOfSegments(3)
-Nb_Segments_1.SetDistrType( 0 )
-Quadrangle_2D = Mesh1.Quadrangle()
-isDone = Mesh1.Compute()
-
-#Perform scale operation for the whole mesh and creation of a new mesh
-newMesh = Mesh1.ScaleMakeMesh(Mesh1,SMESH.PointStruct(100,100,200),[0.5,0.3,0.7],True,"ScaledMesh")
-
-#Perform scale operation for the whole mesh and copy elements
-Mesh1.Scale(Mesh1,SMESH.PointStruct(200,100,100),[0.5,0.5,0.5],True,True)
-
-#Perform scale operation for two edges and move elements
-Mesh1.Scale([1,2],SMESH.PointStruct(-100,100,100),[0.8,1.0,0.7],False)
-
-#Perform scale operation for one face and move elements
-Mesh1.Scale([21],SMESH.PointStruct(0,200,200),[0.7,0.7,0.7],False)
diff --git a/doc/salome/examples/transforming_meshes_ex04.py b/doc/salome/examples/transforming_meshes_ex04.py
deleted file mode 100644 (file)
index 9100355..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-# Symmetry
-
-import math
-
-import SMESH_mechanic
-import SMESH
-
-smesh = SMESH_mechanic.smesh
-mesh = SMESH_mechanic.mesh 
-
-# create a symmetrical copy of the mesh mirrored through a point
-axis = SMESH.AxisStruct(0, 0, 0, 0, 0, 0)
-
-mesh.Mirror([], axis, smesh.POINT, 1)
diff --git a/doc/salome/examples/transforming_meshes_ex05.py b/doc/salome/examples/transforming_meshes_ex05.py
deleted file mode 100644 (file)
index 0adf024..0000000
+++ /dev/null
@@ -1,24 +0,0 @@
-# Merging Nodes
-
-import SMESH_mechanic, SMESH
-mesh  = SMESH_mechanic.mesh
-smesh = SMESH_mechanic.smesh
-
-# criterion of coincidence
-Tolerance = 4.0
-
-# find close nodes of triangle elements only
-triangleFilter = smesh.GetFilter( SMESH.FACE, SMESH.FT_ElemGeomType,'=', SMESH.Geom_TRIANGLE )
-GroupsOfNodesOfTriangles = mesh.FindCoincidentNodesOnPart([triangleFilter],Tolerance)
-
-# prevent nodes located on geom edges from removal during merge:
-# create a group including all nodes on edges
-allSegs = mesh.MakeGroup( "all segments", SMESH.EDGE, SMESH.FT_ElemGeomType,'=', SMESH.Geom_EDGE )
-
-mesh.MergeNodes(GroupsOfNodesOfTriangles, NodesToKeep=allSegs)
-
-
-# find close nodes in the whole mesh
-GroupsOfNodes = mesh.FindCoincidentNodes(Tolerance)
-
-mesh.MergeNodes(GroupsOfNodes, NodesToKeep=allSegs)
diff --git a/doc/salome/examples/transforming_meshes_ex06.py b/doc/salome/examples/transforming_meshes_ex06.py
deleted file mode 100644 (file)
index 433ae19..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-# Merging Elements
-
-
-import salome
-salome.salome_init()
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create a face to be meshed
-px = geompy.MakeVertex(100., 0.  , 0.  )
-py = geompy.MakeVertex(0.  , 100., 0.  )
-pz = geompy.MakeVertex(0.  , 0.  , 100.)
-
-vxy = geompy.MakeVector(px, py)
-arc = geompy.MakeArc(py, pz, px)
-
-wire = geompy.MakeWire([vxy, arc])
-isPlanarFace = 1
-
-face1 = geompy.MakeFace(wire, isPlanarFace)
-id_face1 = geompy.addToStudy(face1, "Face1")
-
-# create a circle to be an extrusion path
-px1 = geompy.MakeVertex( 100.,  100.,  0.)
-py1 = geompy.MakeVertex(-100., -100.,  0.)
-pz1 = geompy.MakeVertex(   0.,    0., 50.)
-
-circle = geompy.MakeCircleThreePnt(py1, pz1, px1)
-id_circle = geompy.addToStudy(circle, "Path")
-# create a 2D mesh on the face
-trias = smesh.Mesh(face1, "Face : 2D mesh")
-
-algo1D = trias.Segment()
-algo1D.NumberOfSegments(6)
-algo2D = trias.Triangle()
-algo2D.LengthFromEdges()
-
-trias.Compute()
-
-# create a group of all triangles currently present in the mesh
-faceTriGroup = trias.Group( face1, "face triangles" )
-
-# create a path mesh
-circlemesh = smesh.Mesh(circle, "Path mesh")
-algo = circlemesh.Segment()
-algo.NumberOfSegments(10)
-circlemesh.Compute()
-
-# extrusion of the mesh
-trias.ExtrusionAlongPath([], circlemesh, circle, 1, MakeGroups=True )
-
-# get a group "opposite" to faceTriGroup within the generated prismatic mesh
-oppositeGroup = trias.GetGroupByName( faceTriGroup.GetName() + "_top" )[0]
-
-# get edges of the groups
-edgeGroup = trias.CreateDimGroup([ faceTriGroup, oppositeGroup ], SMESH.EDGE, "face edges")
-
-# merge nodes of the groups only
-print("Number of nodes before MergeNodes:", end=' ') 
-trias.NbNodes()
-tolerance = 0.001
-array_of_nodes_groups = trias.FindCoincidentNodesOnPart([faceTriGroup, oppositeGroup], tolerance)
-
-trias.MergeNodes(array_of_nodes_groups)
-
-print("Number of nodes after MergeNodes:", trias.NbNodes())
-print("")
-print("Number of elements before MergeEqualElements:")
-print("Edges      : ", trias.NbEdges())
-print("Faces      : ", trias.NbFaces())
-print("Volumes    : ", trias.NbVolumes())
-
-# merge elements of the groups
-equalFaces = trias.FindEqualElements( [faceTriGroup, oppositeGroup, edgeGroup] )
-trias.MergeElements( equalFaces )
-print("Number of elements after MergeEqualElements:")
-print("Edges      : ", trias.NbEdges())
-print("Faces      : ", trias.NbFaces())
-print("Volumes    : ", trias.NbVolumes())
-
-salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/transforming_meshes_ex07.py b/doc/salome/examples/transforming_meshes_ex07.py
deleted file mode 100644 (file)
index f14c2ca..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-# Sew Meshes Border to Side
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create two faces of a box
-box1 = geompy.MakeBox(0., 0., -10., 30., 20., 25.)
-facesList1 = geompy.SubShapeAll(box1, geompy.ShapeType["FACE"])
-face1 = facesList1[2]
-
-box2 = geompy.MakeBox(0., 5., 0., 20., 20., 15.)
-facesList2 = geompy.SubShapeAll(box2, geompy.ShapeType["FACE"])
-face2 = facesList2[1]
-
-edgesList = geompy.SubShapeAll(face2, geompy.ShapeType["EDGE"])
-edge1 = edgesList[2]
-
-aComp = geompy.MakeCompound([face1, face2])
-geompy.addToStudy(aComp, "Two faces")
-
-# create a mesh on two faces
-mesh = smesh.Mesh(aComp, "Two faces : quadrangle mesh")
-
-algo1D = mesh.Segment()
-algo1D.NumberOfSegments(9)
-algo2D = mesh.Quadrangle()
-
-algo_local = mesh.Segment(edge1)
-algo_local.Arithmetic1D(1, 4)
-algo_local.Propagation()
-
-mesh.Compute()
-
-# sew border to side
-# FirstNodeIDOnFreeBorder, SecondNodeIDOnFreeBorder, LastNodeIDOnFreeBorder,
-# FirstNodeIDOnSide, LastNodeIDOnSide,
-# CreatePolygons, CreatePolyedrs
-mesh.SewBorderToSide(5, 45, 6, 113, 109, 0, 0)
diff --git a/doc/salome/examples/transforming_meshes_ex08.py b/doc/salome/examples/transforming_meshes_ex08.py
deleted file mode 100644 (file)
index b593e0e..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-# Sew Conform Free Borders
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-import salome_notebook
-
-
-# create two faces of the box
-box1 = geompy.MakeBox(0., 0., -10., 20., 20., 15.)
-facesList1 = geompy.SubShapeAll(box1, geompy.ShapeType["FACE"])
-face1 = facesList1[2]
-
-box2 = geompy.MakeBox(0., 5., 0., 20., 20., 15.)
-facesList2 = geompy.SubShapeAll(box2, geompy.ShapeType["FACE"])
-face2 = facesList2[1]
-
-edgesList = geompy.SubShapeAll(face2, geompy.ShapeType["EDGE"])
-edge1 = edgesList[2]
-
-aComp = geompy.MakeCompound([face1, face2])
-geompy.addToStudy(aComp, "Two faces")
-
-# create a mesh on two faces
-mesh = smesh.Mesh(aComp, "Two faces : quadrangle mesh")
-
-algo1D = mesh.Segment()
-algo1D.NumberOfSegments(9)
-algo2D = mesh.Quadrangle()
-
-algo_local = mesh.Segment(edge1)
-algo_local.Arithmetic1D(1, 4)
-algo_local.Propagation()
-
-mesh.Compute()
-
-# sew conform free borders
-# FirstNodeID1, SecondNodeID1, LastNodeID1, FirstNodeID2, SecondNodeID2
-mesh.SewConformFreeBorders(5, 45, 6, 3, 24) 
diff --git a/doc/salome/examples/transforming_meshes_ex09.py b/doc/salome/examples/transforming_meshes_ex09.py
deleted file mode 100644 (file)
index 59403f7..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-# Sew Free Borders
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# make two not sewed quadranges
-OY0 = geompy.MakeVectorDXDYDZ(0, 1, 0)
-OY1 = geompy.MakeTranslation( OY0, 1, 0, 0, theName="OY1" )
-OY2 = geompy.MakeTranslation( OY0, 1.01, 0, 0, theName="OY2" )
-OY3 = geompy.MakeTranslation( OY0, 2, 0, 0 )
-q1  = geompy.MakeQuad2Edges( OY0, OY1 )
-q2  = geompy.MakeQuad2Edges( OY2, OY3 )
-
-shape = geompy.MakeCompound( [q1,q2], theName='shape' )
-
-# make a non-uniform quadrangle mesh on two faces
-mesh = smesh.Mesh(shape, "Two faces : quadrangle mesh")
-mesh.Segment().Arithmetic1D( 0.1, 0.4 )
-mesh.Segment(q1).NumberOfSegments( 5 )
-mesh.Quadrangle()
-mesh.Compute()
-
-# sew free borders
-
-segs1 = mesh.GetSubMeshElementsId( OY1 ) # mesh segments generated on borders
-segs2 = mesh.GetSubMeshElementsId( OY2 )
-
-FirstNodeID1  = mesh.GetElemNode( segs1[0], 0 )
-SecondNodeID1 = mesh.GetElemNode( segs1[0], 1 )
-LastNodeID1   = mesh.GetElemNode( segs1[-1], 1 )
-FirstNodeID2  = mesh.GetElemNode( segs2[0], 0 )
-SecondNodeID2 = mesh.GetElemNode( segs2[0], 1 )
-LastNodeID2   = mesh.GetElemNode( segs2[-1], 1 )
-CreatePolygons = True
-CreatePolyedrs = False
-
-res = mesh.SewFreeBorders(FirstNodeID1, SecondNodeID1, LastNodeID1,
-                          FirstNodeID2, SecondNodeID2, LastNodeID2,
-                          CreatePolygons, CreatePolyedrs )
-print(res)
-print("nb polygons:", mesh.NbPolygons())
-
diff --git a/doc/salome/examples/transforming_meshes_ex10.py b/doc/salome/examples/transforming_meshes_ex10.py
deleted file mode 100644 (file)
index af3d9ff..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-# Sew Side Elements
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create two boxes
-box1 = geompy.MakeBox(0.,  0., 0., 10., 10., 10.)
-box2 = geompy.MakeBox(0., 15., 0., 20., 25., 10.)
-
-EdgesList = geompy.SubShapeAll(box2, geompy.ShapeType["EDGE"])
-
-aComp = geompy.MakeCompound([box1, box2])
-geompy.addToStudy(aComp, "Two boxes")
-
-# create a mesh on two boxes
-mesh = smesh.Mesh(aComp, "Sew Side Elements")
-
-algo1D = mesh.Segment()
-algo1D.NumberOfSegments(2)
-algo2D = mesh.Quadrangle()
-
-algo_local = mesh.Segment(EdgesList[8])
-algo_local.NumberOfSegments(4)
-algo_local.Propagation()
-
-mesh.Compute()
-
-# sew side elements
-
-# find elements to sew
-face1 = geompy.GetFaceNearPoint( aComp, geompy.MakeVertex( 5, 10, 5 ))
-IDsOfSide1Elements = mesh.GetSubMeshElementsId( face1 )
-print("side faces 1:",IDsOfSide1Elements)
-
-face1Translated = geompy.MakeTranslation( face1, 0,5,0 )
-faceFilter = smesh.GetFilter( SMESH.FACE, SMESH.FT_BelongToGeom,'=', face1Translated )
-IDsOfSide2Elements = mesh.GetIdsFromFilter( faceFilter )
-print("side faces 2:",IDsOfSide2Elements)
-
-# find corresponding nodes on sides
-edge1 = geompy.GetEdgeNearPoint( aComp, geompy.MakeVertex( 0, 10, 5 ))
-segs1 = mesh.GetSubMeshElementsId( edge1 ) # mesh segments generated on edge1
-NodeID1OfSide1ToMerge = mesh.GetElemNode( segs1[0], 0 )
-NodeID2OfSide1ToMerge = mesh.GetElemNode( segs1[0], 1 )
-print("nodes of side1:", [NodeID1OfSide1ToMerge,NodeID2OfSide1ToMerge])
-
-edge2 = geompy.GetEdgeNearPoint( aComp, geompy.MakeVertex( 0, 15, 5 ))
-segs2 = mesh.GetSubMeshElementsId( edge2 ) # mesh segments generated on edge2
-NodeID1OfSide2ToMerge = mesh.GetElemNode( segs2[0], 0 )
-NodeID2OfSide2ToMerge = mesh.GetElemNode( segs2[0], 1 )
-print("nodes of side2:", [NodeID1OfSide2ToMerge,NodeID2OfSide2ToMerge])
-
-res = mesh.SewSideElements(IDsOfSide1Elements, IDsOfSide2Elements,
-                           NodeID1OfSide1ToMerge, NodeID1OfSide2ToMerge,
-                           NodeID2OfSide1ToMerge, NodeID2OfSide2ToMerge)
-print(res)
diff --git a/doc/salome/examples/transforming_meshes_ex11.py b/doc/salome/examples/transforming_meshes_ex11.py
deleted file mode 100644 (file)
index 2e6a8c6..0000000
+++ /dev/null
@@ -1,95 +0,0 @@
-# Duplicate nodes or/and elements
-
-
-import salome
-salome.salome_init()
-
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Create a box
-
-box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
-
-# Define hexa mesh on a box
-mesh = smesh.Mesh(box, "Mesh")
-mesh.Segment().NumberOfSegments(7)
-mesh.Quadrangle()
-mesh.Hexahedron()
-
-# Compute mesh
-mesh.Compute()
-
-# Duplicate nodes only
-
-# Nodes to duplicate
-nodes1 = mesh.CreateEmptyGroup( SMESH.NODE, 'nodes1' )
-nodes1.Add( [ 119, 125, 131, 137 ] )
-
-# Group of faces to replace nodes with new ones 
-faces1 = mesh.CreateEmptyGroup( SMESH.FACE, 'faces1' )
-faces1.Add( [ 144, 151, 158 ] )
-
-# Duplicate nodes
-print("\nMesh before the first nodes duplication:")
-print("Nodes       : ", mesh.NbNodes())
-print("Edges       : ", mesh.NbEdges())
-print("Quadrangles : ", mesh.NbQuadrangles())
-
-groupOfCreatedNodes = mesh.DoubleNodeGroup(nodes1, faces1, theMakeGroup=True)
-print("New nodes:", groupOfCreatedNodes.GetIDs())
-
-print("\nMesh after the first nodes duplication:")
-print("Nodes       : ", mesh.NbNodes())
-print("Edges       : ", mesh.NbEdges())
-print("Quadrangles : ", mesh.NbQuadrangles())
-
-# Duplicate nodes and border elements
-
-# Edges to duplicate
-edges = mesh.CreateEmptyGroup( SMESH.EDGE, 'edges' )
-edges.Add( [ 32, 33, 34 ] )
-
-# Nodes not to duplicate
-nodes2 = mesh.CreateEmptyGroup( SMESH.NODE, 'nodes2' )
-nodes2.Add( [ 35, 38 ] )
-
-# Group of faces to replace nodes with new ones 
-faces2 = mesh.CreateEmptyGroup( SMESH.FACE, 'faces2' )
-faces2.Add( [ 141, 148, 155 ] )
-
-# Duplicate nodes
-print("\nMesh before the second nodes duplication:")
-print("Nodes       : ", mesh.NbNodes())
-print("Edges       : ", mesh.NbEdges())
-print("Quadrangles : ", mesh.NbQuadrangles())
-
-groupOfNewEdges = mesh.DoubleNodeElemGroup( edges, nodes2, faces2, theMakeGroup=True )
-print("New edges:", groupOfNewEdges.GetIDs())
-
-print("\nMesh after the second nodes duplication:")
-print("Nodes       : ", mesh.NbNodes())
-print("Edges       : ", mesh.NbEdges())
-print("Quadrangles : ", mesh.NbQuadrangles())
-
-
-# Duplicate elements only
-
-# Duplicate all faces and make a group of new faces.
-# If a mesh is given to DoubleElements(), all elements of the greatest dimension are duplicated
-newFacesGroup = mesh.DoubleElements( mesh, "newFacesGroup" )
-
-# Duplicate edges contained in the group "edges" and add new edges to this group
-mesh.DoubleElements( edges, edges.GetName() )
-
-# Duplicate two first edges of the mesh
-mesh.DoubleElements([ 1, 2 ])
-
-# Update object browser
-if salome.sg.hasDesktop():
-    salome.sg.updateObjBrowser()
diff --git a/doc/salome/examples/transforming_meshes_ex12.py b/doc/salome/examples/transforming_meshes_ex12.py
deleted file mode 100644 (file)
index 072fc3c..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-# Create boundary elements
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-import salome_notebook
-
-
-box = geompy.MakeBoxDXDYDZ(100, 100, 100)
-gFaces = geompy.SubShapeAllSorted(box, geompy.ShapeType["FACE"])
-f1,f2 = gFaces[0],gFaces[1]
-geompy.addToStudy(box,"box")
-geompy.addToStudyInFather(box,f1,"face1")
-geompy.addToStudyInFather(box,f2,"face2")
-
-twoFaces = geompy.MakeCompound([f1,f2])
-
-## -----------
-##
-## 2D from 3D
-##
-## -----------
-dim = SMESH.BND_2DFROM3D
-
-init_mesh = smesh.Mesh(box, "box")
-init_mesh.AutomaticHexahedralization() # it makes 3 x 3 x 3 hexahedrons
-
-# remove some faces
-faces = init_mesh.GetElementsByType( SMESH.FACE )
-nb_faces = len( faces )
-rm_face = faces[ : nb_faces // 2]
-init_mesh.RemoveElements( rm_face )
-
-# restore boundary in this mesh
-mesh = smesh.CopyMesh( init_mesh, "2D from 3D")
-groupName = "bnd 2D"
-nb, new_mesh, new_group = mesh.MakeBoundaryElements(dim, groupName)
-
-# restore boundary (only) in other mesh
-meshName = "2D boundary of " + init_mesh.GetName()
-nb, new_mesh, new_group = init_mesh.MakeBoundaryElements(dim, groupName, meshName)
-
-# restore boundary in mesh copy
-meshName = init_mesh.GetName() + " + boundary"
-nb, new_mesh, new_group = init_mesh.MakeBoundaryElements(dim, groupName, meshName, toCopyAll=True)
-
-
-## -----------
-##
-## 1D from 2D
-##
-## -----------
-dim = SMESH.BND_1DFROM2D
-
-init_mesh = smesh.Mesh(f1, "2D mesh")
-init_mesh.AutomaticHexahedralization()
-
-# remove some edges
-edges = init_mesh.GetElementsByType( SMESH.EDGE )
-nb_edges = len( edges )
-rm_edge = edges[ : nb_edges // 2]
-init_mesh.RemoveElements( rm_edge )
-
-
-# restore boundary edges in this mesh
-mesh = smesh.CopyMesh( init_mesh, "1D from 2D")
-groupName = "bnd 1D"
-nb, new_mesh, new_group = mesh.MakeBoundaryElements(dim, groupName)
-
-# restore boundary edges (only) in other mesh
-meshName = "1D boundary of " + init_mesh.GetName()
-nb, new_mesh, new_group = init_mesh.MakeBoundaryElements(dim, groupName, meshName)
-
-# restore boundary edges in mesh copy
-meshName = init_mesh.GetName() + " + boundary"
-nb, new_mesh, new_group = init_mesh.MakeBoundaryElements(dim, groupName, meshName, toCopyAll=True)
-
-
-
-## ------------------
-##
-## 1D from 2D GROUPS
-##
-## ------------------
-dim = SMESH.BND_1DFROM3D
-
-init_mesh = smesh.Mesh(box, "box")
-init_mesh.AutomaticHexahedralization() # it makes 3 x 3 x 3 hexahedrons
-# remove all edges
-rm_edges = init_mesh.GetElementsByType( SMESH.EDGE )
-init_mesh.RemoveElements( rm_edges )
-
-# make groups of faces
-fGroup1 = init_mesh.Group( f1, "f1" )
-fGroup2 = init_mesh.Group( f2, "f2" )
-
-# make 1D boundary around groups in this mesh
-mesh = smesh.CopyMesh( init_mesh, "1D from 2D groups", toCopyGroups=True)
-groups = mesh.GetGroups()
-nb, new_mesh, new_group = mesh.MakeBoundaryElements(dim, groupName,groups=groups)
-
-# make 1D boundary (only) in other mesh
-meshName =  "boundary from groups of " + init_mesh.GetName()
-groups = init_mesh.GetGroups()
-nb, new_mesh, new_group = init_mesh.MakeBoundaryElements(dim, groupName, meshName,groups=groups)
-
-# make 1D boundary in mesh copy
-meshName = init_mesh.GetName() + " + boundary from groups"
-nb, new_mesh, new_group = init_mesh.MakeBoundaryElements(dim, groupName, meshName,
-                                                         groups=groups, toCopyAll=True)
-
diff --git a/doc/salome/examples/transforming_meshes_ex13.py b/doc/salome/examples/transforming_meshes_ex13.py
deleted file mode 100644 (file)
index 12d0389..0000000
+++ /dev/null
@@ -1,71 +0,0 @@
-# Reorient faces
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-import salome_notebook
-
-
-# create a geometry consisting of two faces
-box = geompy.MakeBoxDXDYDZ( 10, 10, 10 )
-faces = geompy.SubShapeAllSorted( box, geompy.ShapeType["FACE"])
-
-shape = geompy.MakeCompound( faces[:2] )
-faces = geompy.SubShapeAll( shape, geompy.ShapeType["FACE"] )
-geompy.addToStudy( shape, "shape")
-geompy.addToStudyInFather( shape, faces[0], "faces[0]")
-geompy.addToStudyInFather( shape, faces[1], "faces[1]")
-
-# create a 2D mesh
-mesh = smesh.Mesh( shape, "test_Reorient2D")
-mesh.AutomaticHexahedralization(0.5)
-localAlgo = mesh.Segment(faces[0])
-localAlgo.NumberOfSegments( 11 )
-mesh.Compute()
-group = mesh.Group( faces[1] )
-
-vec = geompy.MakeVectorDXDYDZ( 1, 1, 1 )
-
-# Each of arguments of Reorient2D() function can be of different types:
-#
-# 2DObject    - the whole mesh
-# Direction   - a GEOM object (vector)
-# FaceOrPoint - an ID of face
-mesh.Reorient2D( mesh, vec, mesh.NbElements() )
-#
-# 2DObject    - a sub-mesh
-# Direction   - components of a vector
-# FaceOrPoint - a GEOM object (vertex)
-mesh.Reorient2D( localAlgo.GetSubMesh(), [ 1, -1, 1 ], geompy.GetFirstVertex( vec ))
-#
-# 2DObject    - a group of faces
-# Direction   - a SMESH.DirStruct structure
-# FaceOrPoint - coordinates of a point
-mesh.Reorient2D( group, smesh.MakeDirStruct( -10, 1, 10 ), [0,0,0])
-#
-# FaceOrPoint - a SMESH.PointStruct structure
-mesh.Reorient2D( localAlgo.GetSubMesh().GetIDs(), [10,1,0], SMESH.PointStruct(0,0,0))
-
-
-# Use Reorient2DBy3D() to orient faces of 2 geom faces to have their normal pointing inside volumes
-
-mesh3D = smesh.Mesh( box, '3D mesh')
-mesh3D.AutomaticHexahedralization(0.5)
-group0 = mesh3D.Group( faces[0] )
-group1 = mesh3D.Group( faces[1] )
-
-# pass group0 and ids of faces of group1 to inverse
-nbRev = mesh3D.Reorient2DBy3D([ group0, group1.GetIDs() ], mesh3D, theOutsideNormal=False)
-print("Nb reoriented faces:", nbRev)
-
-# orient the reversed faces back
-nbRev = mesh3D.Reorient2DBy3D( mesh3D, mesh3D, theOutsideNormal=True)
-print("Nb re-reoriented faces:", nbRev)
-
diff --git a/doc/salome/examples/use_existing_faces.py b/doc/salome/examples/use_existing_faces.py
deleted file mode 100644 (file)
index 0ef132b..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-# Usage of "Use Faces to be Created Manually" algorithm
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-import salome_notebook
-
-# define my 2D algorithm
-def my2DMeshing(geomFace, geom_builder, smesh_builder):
-    import numpy as np
-
-    # find gravity center of geomFace
-    gcXYZ = geom_builder.PointCoordinates( geom_builder.MakeCDG( geomFace ))
-
-    # define order and orientation of edges
-    sortedEdges = []
-    geomEdges = geom_builder.SubShapeAll( geomFace, geom_builder.ShapeType["EDGE"])
-    sortedEdges.append(( geomEdges.pop(0), True ))
-    while geomEdges:
-        prevEdge_rev = sortedEdges[ -1 ]
-        prevVV = geom_builder.SubShapeAll( prevEdge_rev[0], geom_builder.ShapeType["VERTEX"])
-        prevV2 = prevVV[ prevEdge_rev[1] ]
-        found = False
-        for iE in range( len( geomEdges )):
-            v1,v2 = geom_builder.SubShapeAll( geomEdges[ iE ], geom_builder.ShapeType["VERTEX"])
-            same1,same2 = [( geom_builder.MinDistance( prevV2, v ) < 1e-7 ) for v in [v1,v2] ]
-            if not same1 and not same2: continue
-            sortedEdges.append(( geomEdges.pop( iE ), same1 ))
-            found = True
-            break
-        assert found
-    sortedEdges.reverse()
-
-    # put nodes on edges in a right order
-    nodes = []
-    for edge, isForward in sortedEdges:
-        v1,v2 = geom_builder.SubShapeAll( edge, geom_builder.ShapeType["VERTEX"])
-        edgeNodes = smesh_builder.GetSubMeshNodesId( v2,   all=False ) + \
-                    smesh_builder.GetSubMeshNodesId( edge, all=False ) + \
-                    smesh_builder.GetSubMeshNodesId( v1,   all=False )
-        if not isForward: edgeNodes.reverse()
-        nodes.extend( edgeNodes[:-1] )
-
-    # create nodes inside the geomFace
-    r1 = 0.6
-    r2 = 1 - r1
-    nodesInside = []
-    for n in nodes:
-        nXYZ = smesh_builder.GetNodeXYZ( n )
-        newXYZ = np.add( np.multiply( r1, gcXYZ ), np.multiply( r2, nXYZ ))
-        nodesInside.append( smesh_builder.AddNode( newXYZ[0], newXYZ[1], newXYZ[2] ))
-        smesh_builder.SetNodeOnFace( nodesInside[-1], geomFace, 0, 0 )
-
-    # find out orientation of faces to create
-    #    geomFace normal
-    faceNorm = geom_builder.GetNormal( geomFace )
-    v1,v2 = [ geom_builder.PointCoordinates( v ) \
-              for v in geom_builder.SubShapeAll( faceNorm, geom_builder.ShapeType["VERTEX"]) ]
-    faceNormXYZ = np.subtract( v2, v1 )
-    outDirXYZ   = np.subtract( v1, [ 50, 50, 50 ] )
-    if np.dot( faceNormXYZ, outDirXYZ ) < 0: # reversed face
-        faceNormXYZ = np.multiply( -1., faceNormXYZ )
-    #   mesh face normal
-    e1 = np.subtract( smesh_builder.GetNodeXYZ( nodes[0] ), smesh_builder.GetNodeXYZ( nodes[1] ))
-    e2 = np.subtract( smesh_builder.GetNodeXYZ( nodes[0] ), smesh_builder.GetNodeXYZ( nodesInside[0] ))
-    meshNorm = np.cross( e1, e2 )
-    #   faces orientation
-    reverse = ( np.dot( faceNormXYZ, meshNorm ) < 0 )
-
-    # create mesh faces
-    iN = len( nodes )
-    while iN:
-        n1, n2, n3, n4 = nodes[iN-1], nodes[iN-2], nodesInside[iN-2], nodesInside[iN-1]
-        iN -= 1
-        if reverse:
-            f = smesh_builder.AddFace( [n1, n2, n3, n4] )
-        else:
-            f = smesh_builder.AddFace( [n4, n3, n2, n1] )
-        # new faces must be assigned to geometry to allow 3D algorithm finding them
-        smesh_builder.SetMeshElementOnShape( f, geomFace )
-
-    if reverse:
-        nodesInside.reverse()
-    polygon = smesh_builder.AddPolygonalFace( nodesInside )
-    smesh_builder.SetMeshElementOnShape( polygon, geomFace )
-
-    return
-
-# create geometry and get faces to mesh with my2DMeshing()
-box = geompy.MakeBoxDXDYDZ( 100, 100, 100 )
-f1 = geompy.SubShapeAll( box, geompy.ShapeType["FACE"])[0]
-f2 = geompy.GetOppositeFace( box, f1 )
-geompy.addToStudy( box, "box" )
-geompy.addToStudy( f1, "f1" )
-geompy.addToStudy( f2, "f2" )
-
-# compute 1D mesh
-mesh = smesh.Mesh( box )
-mesh.Segment().NumberOfSegments( 5 )
-mesh.Compute()
-
-# compute 2D mesh
-mesh.Quadrangle()
-mesh.UseExistingFaces(f1) # UseExistingFaces() allows using my2DMeshing();
-mesh.UseExistingFaces(f2) # assign UseExistingFaces() BEFORE calling my2DMeshing()!
-my2DMeshing(f1, geom_builder=geompy, smesh_builder=mesh)
-my2DMeshing(f2, geom_builder=geompy, smesh_builder=mesh)
-assert mesh.Compute()
-
-# compute 3D mesh
-mesh.Prism()
-assert mesh.Compute()
diff --git a/doc/salome/examples/viewing_meshes_ex01.py b/doc/salome/examples/viewing_meshes_ex01.py
deleted file mode 100644 (file)
index d90d24a..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-# Viewing Mesh Infos
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# create a box
-box = geompy.MakeBox(0., 0., 0., 20., 20., 20.)
-geompy.addToStudy(box, "box")
-[Face_1,Face_2,Face_3,Face_4,Face_5,Face_5] = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
-
-# create a mesh
-tetra = smesh.Mesh(box, "MeshBox")
-
-algo1D = tetra.Segment()
-algo1D.NumberOfSegments(3)
-
-algo2D = tetra.Triangle()
-algo2D.MaxElementArea(10.)
-
-algo3D = tetra.Tetrahedron()
-algo3D.MaxElementVolume(900.)
-
-# Creation of SubMesh
-Regular_1D_1_1 = tetra.Segment(geom=Face_1)
-Nb_Segments_1 = Regular_1D_1_1.NumberOfSegments(5)
-Nb_Segments_1.SetDistrType( 0 )
-Quadrangle_2D = tetra.Quadrangle(geom=Face_1)
-isDone = tetra.Compute()
-submesh = Regular_1D_1_1.GetSubMesh()
-
-# compute the mesh
-tetra.Compute()
-
-# Creation of group
-group = tetra.CreateEmptyGroup( SMESH.FACE, 'Group' )
-nbAdd = group.Add( [ 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76 ] )
-
-# Print information about the mesh
-print("Information about mesh:") 
-print("Number of nodes       : ", tetra.NbNodes())
-print("Number of edges       : ", tetra.NbEdges())
-print("Number of faces       : ", tetra.NbFaces())
-print("          triangles   : ", tetra.NbTriangles())
-print("          quadrangles : ", tetra.NbQuadrangles())
-print("          polygons    : ", tetra.NbPolygons())
-print("Number of volumes     : ", tetra.NbVolumes())
-print("          tetrahedrons: ", tetra.NbTetras())
-print("          hexahedrons : ", tetra.NbHexas())
-print("          prisms      : ", tetra.NbPrisms())
-print("          pyramids    : ", tetra.NbPyramids())
-print("          polyhedrons : ", tetra.NbPolyhedrons()) 
-
-# Get Information About Mesh by GetMeshInfo
-print("\nInformation about mesh by GetMeshInfo:")
-info = smesh.GetMeshInfo(tetra)
-keys = list(info.keys()); keys.sort()
-for i in keys:
-  print("  %s   :  %d" % ( i, info[i] ))
-  pass
-
-# Get Information About Group by GetMeshInfo
-print("\nInformation about group by GetMeshInfo:")
-info = smesh.GetMeshInfo(group)
-keys = list(info.keys()); keys.sort()
-for i in keys:
-  print("  %s  :  %d" % ( i, info[i] ))
-  pass
-
-# Get Information About SubMesh by GetMeshInfo
-print("\nInformation about Submesh by GetMeshInfo:")
-info = smesh.GetMeshInfo(submesh)
-keys = list(info.keys()); keys.sort()
-for i in keys:
-  print("  %s  :  %d" % ( i, info[i] ))
-  pass
diff --git a/doc/salome/examples/viewing_meshes_ex02.py b/doc/salome/examples/viewing_meshes_ex02.py
deleted file mode 100644 (file)
index 0dfa09a..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-# Find Element by Point
-
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Create a geometry to mesh
-box = geompy.MakeBoxDXDYDZ(100,100,100)
-
-# Create a mesh
-mesh = smesh.Mesh(box,"Mesh")
-mesh.AutomaticHexahedralization()
-mesh.Compute()
-
-# Create a point
-x,y,z = 0, 0, 1
-
-# Find all elements (except 0D ones) located at the point
-all_elems_except_0D = mesh.FindElementsByPoint(x,y,z)
-assert( len(all_elems_except_0D) == 4)
-
-# Find nodes at the point
-nodes = mesh.FindElementsByPoint(x,y,z, SMESH.NODE )
-assert( len(nodes) == 0)
-assert( len( mesh.FindElementsByPoint(x,y,0, SMESH.NODE)) == 1)
-
-# Find an edge at the point
-edges = mesh.FindElementsByPoint(x,y,z, SMESH.EDGE )
-assert( len(edges) == 1)
-
-# Find faces at the point
-edges = mesh.FindElementsByPoint(x,y,z, SMESH.FACE )
-assert( len(edges) == 2)
-
-# Find a volume at the point
-vols = mesh.FindElementsByPoint(x,y,z, SMESH.VOLUME )
-assert( len(vols) == 1)
-
-# Find 0D elements at the point
-elems0d = mesh.FindElementsByPoint(x,y,z, SMESH.ELEM0D )
-assert( len(elems0d) == 0)
-
-# Find edges within a group
-group1D = mesh.MakeGroupByIds("1D", SMESH.EDGE, [1,2] )
-edges = mesh.FindElementsByPoint(x,y,z, SMESH.EDGE, group1D )
diff --git a/doc/salome/gui/CMakeLists.txt b/doc/salome/gui/CMakeLists.txt
deleted file mode 100644 (file)
index 88b460d..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-# Copyright (C) 2007-2020  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
-#
-
-ADD_SUBDIRECTORY(SMESH)
diff --git a/doc/salome/gui/SMESH/CMakeLists.txt b/doc/salome/gui/SMESH/CMakeLists.txt
deleted file mode 100644 (file)
index 644a69b..0000000
+++ /dev/null
@@ -1,89 +0,0 @@
-# Copyright (C) 2012-2020  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(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(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)
-
-SET(ADD_VAR)
-LIST(APPEND ADD_VAR SMESH_MeshersList=StdMeshers)
-LIST(APPEND ADD_VAR PYTHONPATH=${CMAKE_CURRENT_BINARY_DIR}/tmp1)
-LIST(APPEND ADD_VAR PYTHONPATH=${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 ADDITIONAL_ENVIRONMENT ${ADD_VAR})
-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 ADDITIONAL_ENVIRONMENT ${ADD_VAR})
-ENDIF()
-
-# 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}" CONTEXT "SMESH_DOC" ADDITIONAL_VARIABLES ${ADD_VAR})
-
-# 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}" CONTEXT "SMESH_DOC" ADDITIONAL_VARIABLES ${ADD_VAR})
-
-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
-
-  # 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)
-IF(SALOME_SMESH_BUILD_FRENCH_DOC)
-  INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/SMESH_fr DESTINATION ${SALOME_INSTALL_DOC}/gui)
-ENDIF()
-
-SET(make_clean_files tmp1 tmp2)
-SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${make_clean_files}")
diff --git a/doc/salome/gui/SMESH/collect_mesh_methods.py b/doc/salome/gui/SMESH/collect_mesh_methods.py
deleted file mode 100755 (executable)
index 5d47130..0000000
+++ /dev/null
@@ -1,199 +0,0 @@
-#!/usr/bin/env python3
-# Copyright (C) 2012-2020  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:   collect_mesh_methods.py
-# Author: Vadim SANDLER, Open CASCADE S.A.S (vadim.sandler@opencascade.com)
-#
-#################################################################################
-#
-# Extraction of the meshing algorithm classes
-# dynamically added by the plug-in to the Mesh
-# class.
-# 
-# This script is intended for internal usage - only
-# for generation of the extra developer documentation for
-# the meshing plug-in(s).
-# 
-# Usage:
-#       collect_mesh_methods.py <plugin_name>
-# where
-#   <plugin_name> is a name of the plug-in module
-#
-# Notes:
-# - the script is supposed to be run in correct environment
-# i.e. PYTHONPATH, SMESH_MeshersList and other important
-# variables are set properly; otherwise the script will fail.
-#
-################################################################################
-
-import inspect
-import sys
-
-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:
-        exec("from salome.smesh.smeshBuilder import *", globals())
-        exec("import %s" % plugin_module, globals())
-        exec("mod = %s" % plugin_module , globals())
-        methods = {}
-        for attr in dir( mod ):
-            if attr.startswith( '_' ): continue
-            algo = getattr( mod, attr )
-            if inspect.isclass(algo) and hasattr(algo, "meshMethod"):
-                method = getattr( algo, "meshMethod" )
-                if method not in methods: methods[ method ] = []
-                methods[ method ].append( algo )
-                pass
-            pass
-        if methods:
-            output = []
-            if dummymeshhelp:
-                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
-            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
-                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
-                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
-            if format == "doxygen":
-                output.append( "class Mesh:" )
-            for method in methods:
-                docHelper = ""
-                for algo in methods[ method ]:
-                    if hasattr( algo, "docHelper" ): docHelper = getattr( algo, "docHelper" )
-                    if docHelper: break
-                    pass
-                if not docHelper: docHelper = "Create new algorithm."
-                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))
-            pass
-        pass
-    except Exception as e:
-        print(e)
-        pass
-    pass
-    
-if __name__ == "__main__":
-    import argparse
-    parser = argparse.ArgumentParser()
-    h  = "Output file (smesh.py by default)"
-    parser.add_argument("-o", "--output", dest="output",
-                      action="store", default='smesh.py', metavar="file",
-                      help=h)
-    h  = "If this option is True, dummy help for Mesh class is added. "
-    h += "This option should be False (default) when building documentation for SMESH module "
-    h += "and True when building documentation for meshing plug-ins."
-    parser.add_argument("-d", "--dummy-mesh-help", dest="dummymeshhelp",
-                      action="store_true", default=False,
-                      help=h)
-    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 definition."
-    h+= "'sphinx' - documentation strings are generated in the sphinx format, after a method definition."
-    parser.add_argument("-f", "--format", dest="format",
-                      action="store", default="doxygen", help=h)
-
-    parser.add_argument("plugin_name")
-
-
-    args = parser.parse_args()
-
-    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
deleted file mode 100644 (file)
index 66efe32..0000000
+++ /dev/null
@@ -1,244 +0,0 @@
-# -*- 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
-import sphinx
-
-# 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
-try:
-  import sphinx_rtd_theme
-  extensions += ['sphinx_rtd_theme']
-  use_rtd_theme = True
-except:
-  use_rtd_theme = False
-#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'.
-if use_rtd_theme:
-  html_theme = 'sphinx_rtd_theme'
-else:
-  html_theme = 'default' if sphinx.version_info[:2] < (1,3) else 'classic'
-
-themes_options = {}
-themes_options['classic'] = {
-  'body_max_width':'none',
-  'body_min_width':0,
-}
-html_theme_options = themes_options.get(html_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/images/2d_from_3d_dlg.png b/doc/salome/gui/SMESH/images/2d_from_3d_dlg.png
deleted file mode 100644 (file)
index e0c8ca5..0000000
Binary files a/doc/salome/gui/SMESH/images/2d_from_3d_dlg.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/2d_from_3d_example.png b/doc/salome/gui/SMESH/images/2d_from_3d_example.png
deleted file mode 100644 (file)
index d01efd5..0000000
Binary files a/doc/salome/gui/SMESH/images/2d_from_3d_example.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/2d_from_3d_ico.png b/doc/salome/gui/SMESH/images/2d_from_3d_ico.png
deleted file mode 100644 (file)
index b0842d3..0000000
Binary files a/doc/salome/gui/SMESH/images/2d_from_3d_ico.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/2d_from_3d_menu.png b/doc/salome/gui/SMESH/images/2d_from_3d_menu.png
deleted file mode 100644 (file)
index acb7b34..0000000
Binary files a/doc/salome/gui/SMESH/images/2d_from_3d_menu.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/Clipping_Absolute.png b/doc/salome/gui/SMESH/images/Clipping_Absolute.png
deleted file mode 100644 (file)
index 9657d81..0000000
Binary files a/doc/salome/gui/SMESH/images/Clipping_Absolute.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/Clipping_Relative.png b/doc/salome/gui/SMESH/images/Clipping_Relative.png
deleted file mode 100644 (file)
index 4fd7dbe..0000000
Binary files a/doc/salome/gui/SMESH/images/Clipping_Relative.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/Nut_sharp_edges.png b/doc/salome/gui/SMESH/images/Nut_sharp_edges.png
deleted file mode 100644 (file)
index 754710b..0000000
Binary files a/doc/salome/gui/SMESH/images/Nut_sharp_edges.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-arithmetic1d.png b/doc/salome/gui/SMESH/images/a-arithmetic1d.png
deleted file mode 100644 (file)
index 9bc67b0..0000000
Binary files a/doc/salome/gui/SMESH/images/a-arithmetic1d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-averagelength.png b/doc/salome/gui/SMESH/images/a-averagelength.png
deleted file mode 100755 (executable)
index c8ca5ac..0000000
Binary files a/doc/salome/gui/SMESH/images/a-averagelength.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-clipping2.png b/doc/salome/gui/SMESH/images/a-clipping2.png
deleted file mode 100755 (executable)
index 9d1249c..0000000
Binary files a/doc/salome/gui/SMESH/images/a-clipping2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-creategroup.png b/doc/salome/gui/SMESH/images/a-creategroup.png
deleted file mode 100644 (file)
index 553fb98..0000000
Binary files a/doc/salome/gui/SMESH/images/a-creategroup.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-createpolyhedralvolume.png b/doc/salome/gui/SMESH/images/a-createpolyhedralvolume.png
deleted file mode 100755 (executable)
index 6c6bb61..0000000
Binary files a/doc/salome/gui/SMESH/images/a-createpolyhedralvolume.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-cuttingofquadrangles.png b/doc/salome/gui/SMESH/images/a-cuttingofquadrangles.png
deleted file mode 100755 (executable)
index 1e533e6..0000000
Binary files a/doc/salome/gui/SMESH/images/a-cuttingofquadrangles.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-deflection1d.png b/doc/salome/gui/SMESH/images/a-deflection1d.png
deleted file mode 100755 (executable)
index 57fd859..0000000
Binary files a/doc/salome/gui/SMESH/images/a-deflection1d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-filteronfaces.png b/doc/salome/gui/SMESH/images/a-filteronfaces.png
deleted file mode 100644 (file)
index 93014f9..0000000
Binary files a/doc/salome/gui/SMESH/images/a-filteronfaces.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-geometric1d.png b/doc/salome/gui/SMESH/images/a-geometric1d.png
deleted file mode 100644 (file)
index cb5b9cc..0000000
Binary files a/doc/salome/gui/SMESH/images/a-geometric1d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-maxelarea.png b/doc/salome/gui/SMESH/images/a-maxelarea.png
deleted file mode 100755 (executable)
index 4306ed5..0000000
Binary files a/doc/salome/gui/SMESH/images/a-maxelarea.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-maxelvolume.png b/doc/salome/gui/SMESH/images/a-maxelvolume.png
deleted file mode 100755 (executable)
index 033e700..0000000
Binary files a/doc/salome/gui/SMESH/images/a-maxelvolume.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-maxsize1d.png b/doc/salome/gui/SMESH/images/a-maxsize1d.png
deleted file mode 100644 (file)
index c2ddd0c..0000000
Binary files a/doc/salome/gui/SMESH/images/a-maxsize1d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-nbsegments1.png b/doc/salome/gui/SMESH/images/a-nbsegments1.png
deleted file mode 100755 (executable)
index 0cd778f..0000000
Binary files a/doc/salome/gui/SMESH/images/a-nbsegments1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-nbsegments2.png b/doc/salome/gui/SMESH/images/a-nbsegments2.png
deleted file mode 100644 (file)
index d9f9c56..0000000
Binary files a/doc/salome/gui/SMESH/images/a-nbsegments2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-patterntype.png b/doc/salome/gui/SMESH/images/a-patterntype.png
deleted file mode 100755 (executable)
index 82c6efb..0000000
Binary files a/doc/salome/gui/SMESH/images/a-patterntype.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-patterntype1.png b/doc/salome/gui/SMESH/images/a-patterntype1.png
deleted file mode 100755 (executable)
index b84257e..0000000
Binary files a/doc/salome/gui/SMESH/images/a-patterntype1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-standmeshinfo.png b/doc/salome/gui/SMESH/images/a-standmeshinfo.png
deleted file mode 100755 (executable)
index dc037ef..0000000
Binary files a/doc/salome/gui/SMESH/images/a-standmeshinfo.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-startendlength.png b/doc/salome/gui/SMESH/images/a-startendlength.png
deleted file mode 100644 (file)
index 33293d3..0000000
Binary files a/doc/salome/gui/SMESH/images/a-startendlength.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-transparency.png b/doc/salome/gui/SMESH/images/a-transparency.png
deleted file mode 100755 (executable)
index df10f7a..0000000
Binary files a/doc/salome/gui/SMESH/images/a-transparency.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-unionoftriangles.png b/doc/salome/gui/SMESH/images/a-unionoftriangles.png
deleted file mode 100755 (executable)
index 24e9a8b..0000000
Binary files a/doc/salome/gui/SMESH/images/a-unionoftriangles.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/a-viewgeneral.png b/doc/salome/gui/SMESH/images/a-viewgeneral.png
deleted file mode 100755 (executable)
index 638870e..0000000
Binary files a/doc/salome/gui/SMESH/images/a-viewgeneral.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/adaptive1d.png b/doc/salome/gui/SMESH/images/adaptive1d.png
deleted file mode 100644 (file)
index 8091c8d..0000000
Binary files a/doc/salome/gui/SMESH/images/adaptive1d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/adaptive1d_sample_mesh.png b/doc/salome/gui/SMESH/images/adaptive1d_sample_mesh.png
deleted file mode 100644 (file)
index 034207f..0000000
Binary files a/doc/salome/gui/SMESH/images/adaptive1d_sample_mesh.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/add.gif b/doc/salome/gui/SMESH/images/add.gif
deleted file mode 100644 (file)
index 26350e4..0000000
Binary files a/doc/salome/gui/SMESH/images/add.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/add.png b/doc/salome/gui/SMESH/images/add.png
deleted file mode 100755 (executable)
index 87995aa..0000000
Binary files a/doc/salome/gui/SMESH/images/add.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/add0delement.png b/doc/salome/gui/SMESH/images/add0delement.png
deleted file mode 100644 (file)
index 06621cc..0000000
Binary files a/doc/salome/gui/SMESH/images/add0delement.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/add_0delement.png b/doc/salome/gui/SMESH/images/add_0delement.png
deleted file mode 100644 (file)
index fa1075b..0000000
Binary files a/doc/salome/gui/SMESH/images/add_0delement.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/add_ball.png b/doc/salome/gui/SMESH/images/add_ball.png
deleted file mode 100644 (file)
index 1fe4f64..0000000
Binary files a/doc/salome/gui/SMESH/images/add_ball.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/add_edge.png b/doc/salome/gui/SMESH/images/add_edge.png
deleted file mode 100755 (executable)
index 8a532e1..0000000
Binary files a/doc/salome/gui/SMESH/images/add_edge.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/add_node.png b/doc/salome/gui/SMESH/images/add_node.png
deleted file mode 100755 (executable)
index cb50bf6..0000000
Binary files a/doc/salome/gui/SMESH/images/add_node.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/add_polygone.png b/doc/salome/gui/SMESH/images/add_polygone.png
deleted file mode 100755 (executable)
index a76bace..0000000
Binary files a/doc/salome/gui/SMESH/images/add_polygone.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/add_polyhedron.png b/doc/salome/gui/SMESH/images/add_polyhedron.png
deleted file mode 100755 (executable)
index 2e23634..0000000
Binary files a/doc/salome/gui/SMESH/images/add_polyhedron.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/add_quadrangle.png b/doc/salome/gui/SMESH/images/add_quadrangle.png
deleted file mode 100755 (executable)
index f25b94d..0000000
Binary files a/doc/salome/gui/SMESH/images/add_quadrangle.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/add_triangle.png b/doc/salome/gui/SMESH/images/add_triangle.png
deleted file mode 100755 (executable)
index 41c3359..0000000
Binary files a/doc/salome/gui/SMESH/images/add_triangle.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/addball.png b/doc/salome/gui/SMESH/images/addball.png
deleted file mode 100644 (file)
index c38c9fa..0000000
Binary files a/doc/salome/gui/SMESH/images/addball.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/addedge.png b/doc/salome/gui/SMESH/images/addedge.png
deleted file mode 100755 (executable)
index 7a5a030..0000000
Binary files a/doc/salome/gui/SMESH/images/addedge.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/addhexahedron.png b/doc/salome/gui/SMESH/images/addhexahedron.png
deleted file mode 100755 (executable)
index 0cf7fe8..0000000
Binary files a/doc/salome/gui/SMESH/images/addhexahedron.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/addinfo_group.png b/doc/salome/gui/SMESH/images/addinfo_group.png
deleted file mode 100644 (file)
index 7dfcdf0..0000000
Binary files a/doc/salome/gui/SMESH/images/addinfo_group.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/addinfo_mesh.png b/doc/salome/gui/SMESH/images/addinfo_mesh.png
deleted file mode 100644 (file)
index 75215b3..0000000
Binary files a/doc/salome/gui/SMESH/images/addinfo_mesh.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/addinfo_submesh.png b/doc/salome/gui/SMESH/images/addinfo_submesh.png
deleted file mode 100644 (file)
index 44b1dda..0000000
Binary files a/doc/salome/gui/SMESH/images/addinfo_submesh.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/addnode.png b/doc/salome/gui/SMESH/images/addnode.png
deleted file mode 100755 (executable)
index 1fd9a9f..0000000
Binary files a/doc/salome/gui/SMESH/images/addnode.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/addnode_notebook.png b/doc/salome/gui/SMESH/images/addnode_notebook.png
deleted file mode 100755 (executable)
index 804f806..0000000
Binary files a/doc/salome/gui/SMESH/images/addnode_notebook.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/addpolygon.png b/doc/salome/gui/SMESH/images/addpolygon.png
deleted file mode 100755 (executable)
index 200999d..0000000
Binary files a/doc/salome/gui/SMESH/images/addpolygon.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/addquadrangle.png b/doc/salome/gui/SMESH/images/addquadrangle.png
deleted file mode 100755 (executable)
index bd24622..0000000
Binary files a/doc/salome/gui/SMESH/images/addquadrangle.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/addtetrahedron.png b/doc/salome/gui/SMESH/images/addtetrahedron.png
deleted file mode 100755 (executable)
index 0a6a740..0000000
Binary files a/doc/salome/gui/SMESH/images/addtetrahedron.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/addtriangle.png b/doc/salome/gui/SMESH/images/addtriangle.png
deleted file mode 100755 (executable)
index 67682c8..0000000
Binary files a/doc/salome/gui/SMESH/images/addtriangle.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/advanced_mesh_infos.png b/doc/salome/gui/SMESH/images/advanced_mesh_infos.png
deleted file mode 100755 (executable)
index c3585ea..0000000
Binary files a/doc/salome/gui/SMESH/images/advanced_mesh_infos.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/analyticdensity.png b/doc/salome/gui/SMESH/images/analyticdensity.png
deleted file mode 100644 (file)
index b1c9972..0000000
Binary files a/doc/salome/gui/SMESH/images/analyticdensity.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/angle_measure.png b/doc/salome/gui/SMESH/images/angle_measure.png
deleted file mode 100644 (file)
index 80a2116..0000000
Binary files a/doc/salome/gui/SMESH/images/angle_measure.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/aqt.png b/doc/salome/gui/SMESH/images/aqt.png
deleted file mode 100755 (executable)
index 46ee94d..0000000
Binary files a/doc/salome/gui/SMESH/images/aqt.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/automaticlength.png b/doc/salome/gui/SMESH/images/automaticlength.png
deleted file mode 100755 (executable)
index 15fb8b3..0000000
Binary files a/doc/salome/gui/SMESH/images/automaticlength.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/b-art_end_length.png b/doc/salome/gui/SMESH/images/b-art_end_length.png
deleted file mode 100755 (executable)
index 26da5fa..0000000
Binary files a/doc/salome/gui/SMESH/images/b-art_end_length.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/b-erage_length.png b/doc/salome/gui/SMESH/images/b-erage_length.png
deleted file mode 100755 (executable)
index f64077c..0000000
Binary files a/doc/salome/gui/SMESH/images/b-erage_length.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/b-flection1d.png b/doc/salome/gui/SMESH/images/b-flection1d.png
deleted file mode 100644 (file)
index b0e366b..0000000
Binary files a/doc/salome/gui/SMESH/images/b-flection1d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/b-ithmetic1d.png b/doc/salome/gui/SMESH/images/b-ithmetic1d.png
deleted file mode 100755 (executable)
index 72f76b9..0000000
Binary files a/doc/salome/gui/SMESH/images/b-ithmetic1d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/b-mberofsegments.png b/doc/salome/gui/SMESH/images/b-mberofsegments.png
deleted file mode 100755 (executable)
index 27f6868..0000000
Binary files a/doc/salome/gui/SMESH/images/b-mberofsegments.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/b-mesh_infos.png b/doc/salome/gui/SMESH/images/b-mesh_infos.png
deleted file mode 100755 (executable)
index 6abd3c1..0000000
Binary files a/doc/salome/gui/SMESH/images/b-mesh_infos.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/bare_border_faces_smpl.png b/doc/salome/gui/SMESH/images/bare_border_faces_smpl.png
deleted file mode 100644 (file)
index 6b7ead8..0000000
Binary files a/doc/salome/gui/SMESH/images/bare_border_faces_smpl.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/bare_border_volumes_smpl.png b/doc/salome/gui/SMESH/images/bare_border_volumes_smpl.png
deleted file mode 100644 (file)
index 3508518..0000000
Binary files a/doc/salome/gui/SMESH/images/bare_border_volumes_smpl.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/basic_props.png b/doc/salome/gui/SMESH/images/basic_props.png
deleted file mode 100644 (file)
index abf3aa3..0000000
Binary files a/doc/salome/gui/SMESH/images/basic_props.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/before_clipping.png b/doc/salome/gui/SMESH/images/before_clipping.png
deleted file mode 100644 (file)
index 41e14d2..0000000
Binary files a/doc/salome/gui/SMESH/images/before_clipping.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/before_clipping_preview.png b/doc/salome/gui/SMESH/images/before_clipping_preview.png
deleted file mode 100644 (file)
index f0740cf..0000000
Binary files a/doc/salome/gui/SMESH/images/before_clipping_preview.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/block_renumber_hyp.png b/doc/salome/gui/SMESH/images/block_renumber_hyp.png
deleted file mode 100644 (file)
index 4c610f7..0000000
Binary files a/doc/salome/gui/SMESH/images/block_renumber_hyp.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/bnd_box.png b/doc/salome/gui/SMESH/images/bnd_box.png
deleted file mode 100644 (file)
index 4c0bbd3..0000000
Binary files a/doc/salome/gui/SMESH/images/bnd_box.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/bnd_box_preview.png b/doc/salome/gui/SMESH/images/bnd_box_preview.png
deleted file mode 100644 (file)
index 902101c..0000000
Binary files a/doc/salome/gui/SMESH/images/bnd_box_preview.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/buildcompound.png b/doc/salome/gui/SMESH/images/buildcompound.png
deleted file mode 100644 (file)
index d1f4801..0000000
Binary files a/doc/salome/gui/SMESH/images/buildcompound.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/buildcompound_groups.png b/doc/salome/gui/SMESH/images/buildcompound_groups.png
deleted file mode 100644 (file)
index ee12892..0000000
Binary files a/doc/salome/gui/SMESH/images/buildcompound_groups.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/cartesian3D_hyp.png b/doc/salome/gui/SMESH/images/cartesian3D_hyp.png
deleted file mode 100644 (file)
index 9f4c59a..0000000
Binary files a/doc/salome/gui/SMESH/images/cartesian3D_hyp.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/cartesian3D_sphere.png b/doc/salome/gui/SMESH/images/cartesian3D_sphere.png
deleted file mode 100644 (file)
index 45bffda..0000000
Binary files a/doc/salome/gui/SMESH/images/cartesian3D_sphere.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/cartesian_implement_edge.png b/doc/salome/gui/SMESH/images/cartesian_implement_edge.png
deleted file mode 100644 (file)
index 59ac9ba..0000000
Binary files a/doc/salome/gui/SMESH/images/cartesian_implement_edge.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/choose_geom_selection_way.png b/doc/salome/gui/SMESH/images/choose_geom_selection_way.png
deleted file mode 100644 (file)
index ffee00d..0000000
Binary files a/doc/salome/gui/SMESH/images/choose_geom_selection_way.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/circle_angles_after.png b/doc/salome/gui/SMESH/images/circle_angles_after.png
deleted file mode 100644 (file)
index f4c606b..0000000
Binary files a/doc/salome/gui/SMESH/images/circle_angles_after.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/circle_simple_after.png b/doc/salome/gui/SMESH/images/circle_simple_after.png
deleted file mode 100644 (file)
index 99f65b5..0000000
Binary files a/doc/salome/gui/SMESH/images/circle_simple_after.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/circle_simple_before.png b/doc/salome/gui/SMESH/images/circle_simple_before.png
deleted file mode 100644 (file)
index 95b9037..0000000
Binary files a/doc/salome/gui/SMESH/images/circle_simple_before.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/colors_size.png b/doc/salome/gui/SMESH/images/colors_size.png
deleted file mode 100755 (executable)
index 0b1d3e5..0000000
Binary files a/doc/salome/gui/SMESH/images/colors_size.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/connectivity_edge.png b/doc/salome/gui/SMESH/images/connectivity_edge.png
deleted file mode 100644 (file)
index 9d7af87..0000000
Binary files a/doc/salome/gui/SMESH/images/connectivity_edge.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/connectivity_hex_prism.png b/doc/salome/gui/SMESH/images/connectivity_hex_prism.png
deleted file mode 100644 (file)
index d5cbfcd..0000000
Binary files a/doc/salome/gui/SMESH/images/connectivity_hex_prism.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/connectivity_hexa.png b/doc/salome/gui/SMESH/images/connectivity_hexa.png
deleted file mode 100644 (file)
index 326b3ef..0000000
Binary files a/doc/salome/gui/SMESH/images/connectivity_hexa.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/connectivity_penta.png b/doc/salome/gui/SMESH/images/connectivity_penta.png
deleted file mode 100644 (file)
index 1990a1d..0000000
Binary files a/doc/salome/gui/SMESH/images/connectivity_penta.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/connectivity_polygon.png b/doc/salome/gui/SMESH/images/connectivity_polygon.png
deleted file mode 100644 (file)
index 3594178..0000000
Binary files a/doc/salome/gui/SMESH/images/connectivity_polygon.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/connectivity_polyhedron.png b/doc/salome/gui/SMESH/images/connectivity_polyhedron.png
deleted file mode 100644 (file)
index c59506f..0000000
Binary files a/doc/salome/gui/SMESH/images/connectivity_polyhedron.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/connectivity_pyramid.png b/doc/salome/gui/SMESH/images/connectivity_pyramid.png
deleted file mode 100644 (file)
index 40cc35a..0000000
Binary files a/doc/salome/gui/SMESH/images/connectivity_pyramid.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/connectivity_quad.png b/doc/salome/gui/SMESH/images/connectivity_quad.png
deleted file mode 100644 (file)
index 0b7cdd3..0000000
Binary files a/doc/salome/gui/SMESH/images/connectivity_quad.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/connectivity_tetra.png b/doc/salome/gui/SMESH/images/connectivity_tetra.png
deleted file mode 100644 (file)
index cd86363..0000000
Binary files a/doc/salome/gui/SMESH/images/connectivity_tetra.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/connectivity_tria.png b/doc/salome/gui/SMESH/images/connectivity_tria.png
deleted file mode 100644 (file)
index 593ff05..0000000
Binary files a/doc/salome/gui/SMESH/images/connectivity_tria.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/controls_popup.png b/doc/salome/gui/SMESH/images/controls_popup.png
deleted file mode 100755 (executable)
index c32f9ea..0000000
Binary files a/doc/salome/gui/SMESH/images/controls_popup.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/convert.png b/doc/salome/gui/SMESH/images/convert.png
deleted file mode 100644 (file)
index 9139f60..0000000
Binary files a/doc/salome/gui/SMESH/images/convert.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/copy_mesh_dlg.png b/doc/salome/gui/SMESH/images/copy_mesh_dlg.png
deleted file mode 100644 (file)
index 97ca1ca..0000000
Binary files a/doc/salome/gui/SMESH/images/copy_mesh_dlg.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/copy_mesh_icon.png b/doc/salome/gui/SMESH/images/copy_mesh_icon.png
deleted file mode 100644 (file)
index 263479f..0000000
Binary files a/doc/salome/gui/SMESH/images/copy_mesh_icon.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/crack_emulation_double_nodes.png b/doc/salome/gui/SMESH/images/crack_emulation_double_nodes.png
deleted file mode 100644 (file)
index 032d9d6..0000000
Binary files a/doc/salome/gui/SMESH/images/crack_emulation_double_nodes.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/crack_emulation_double_nodes_with_elems.png b/doc/salome/gui/SMESH/images/crack_emulation_double_nodes_with_elems.png
deleted file mode 100644 (file)
index 9a0fd5e..0000000
Binary files a/doc/salome/gui/SMESH/images/crack_emulation_double_nodes_with_elems.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/create_group.png b/doc/salome/gui/SMESH/images/create_group.png
deleted file mode 100644 (file)
index 82e8f86..0000000
Binary files a/doc/salome/gui/SMESH/images/create_group.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/create_groups_from_geometry.png b/doc/salome/gui/SMESH/images/create_groups_from_geometry.png
deleted file mode 100644 (file)
index 7da08fc..0000000
Binary files a/doc/salome/gui/SMESH/images/create_groups_from_geometry.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/creategroup.png b/doc/salome/gui/SMESH/images/creategroup.png
deleted file mode 100755 (executable)
index 710064b..0000000
Binary files a/doc/salome/gui/SMESH/images/creategroup.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/creategroup_on_filter.png b/doc/salome/gui/SMESH/images/creategroup_on_filter.png
deleted file mode 100644 (file)
index 98e5a58..0000000
Binary files a/doc/salome/gui/SMESH/images/creategroup_on_filter.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/createmesh-inv.png b/doc/salome/gui/SMESH/images/createmesh-inv.png
deleted file mode 100644 (file)
index d17ce53..0000000
Binary files a/doc/salome/gui/SMESH/images/createmesh-inv.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/createmesh-inv2.png b/doc/salome/gui/SMESH/images/createmesh-inv2.png
deleted file mode 100644 (file)
index 30e6248..0000000
Binary files a/doc/salome/gui/SMESH/images/createmesh-inv2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/createmesh-inv3.png b/doc/salome/gui/SMESH/images/createmesh-inv3.png
deleted file mode 100644 (file)
index f53ab0a..0000000
Binary files a/doc/salome/gui/SMESH/images/createmesh-inv3.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/ctrlinfo.png b/doc/salome/gui/SMESH/images/ctrlinfo.png
deleted file mode 100644 (file)
index 497adcd..0000000
Binary files a/doc/salome/gui/SMESH/images/ctrlinfo.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/curvi_angles_after.png b/doc/salome/gui/SMESH/images/curvi_angles_after.png
deleted file mode 100644 (file)
index 9d06262..0000000
Binary files a/doc/salome/gui/SMESH/images/curvi_angles_after.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/curvi_simple_after.png b/doc/salome/gui/SMESH/images/curvi_simple_after.png
deleted file mode 100644 (file)
index ae1d98f..0000000
Binary files a/doc/salome/gui/SMESH/images/curvi_simple_after.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/curvi_simple_before.png b/doc/salome/gui/SMESH/images/curvi_simple_before.png
deleted file mode 100644 (file)
index a0bbf73..0000000
Binary files a/doc/salome/gui/SMESH/images/curvi_simple_before.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/custom_point_marker.png b/doc/salome/gui/SMESH/images/custom_point_marker.png
deleted file mode 100755 (executable)
index a46e33e..0000000
Binary files a/doc/salome/gui/SMESH/images/custom_point_marker.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/cut_groups1.png b/doc/salome/gui/SMESH/images/cut_groups1.png
deleted file mode 100644 (file)
index d78c4fe..0000000
Binary files a/doc/salome/gui/SMESH/images/cut_groups1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/cutgroups.png b/doc/salome/gui/SMESH/images/cutgroups.png
deleted file mode 100755 (executable)
index 213a52a..0000000
Binary files a/doc/salome/gui/SMESH/images/cutgroups.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/dataset_clipping.png b/doc/salome/gui/SMESH/images/dataset_clipping.png
deleted file mode 100644 (file)
index b50e38a..0000000
Binary files a/doc/salome/gui/SMESH/images/dataset_clipping.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/deflection_2d.png b/doc/salome/gui/SMESH/images/deflection_2d.png
deleted file mode 100644 (file)
index f815962..0000000
Binary files a/doc/salome/gui/SMESH/images/deflection_2d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/deletegroups.png b/doc/salome/gui/SMESH/images/deletegroups.png
deleted file mode 100755 (executable)
index 52494c8..0000000
Binary files a/doc/salome/gui/SMESH/images/deletegroups.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/diagonalinversion.png b/doc/salome/gui/SMESH/images/diagonalinversion.png
deleted file mode 100755 (executable)
index 1329ebe..0000000
Binary files a/doc/salome/gui/SMESH/images/diagonalinversion.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/dialog.png b/doc/salome/gui/SMESH/images/dialog.png
deleted file mode 100755 (executable)
index c9cc22c..0000000
Binary files a/doc/salome/gui/SMESH/images/dialog.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/dimgroup_0d.png b/doc/salome/gui/SMESH/images/dimgroup_0d.png
deleted file mode 100644 (file)
index caabdc4..0000000
Binary files a/doc/salome/gui/SMESH/images/dimgroup_0d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/dimgroup_1d.png b/doc/salome/gui/SMESH/images/dimgroup_1d.png
deleted file mode 100644 (file)
index 23af4a7..0000000
Binary files a/doc/salome/gui/SMESH/images/dimgroup_1d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/dimgroup_2d.png b/doc/salome/gui/SMESH/images/dimgroup_2d.png
deleted file mode 100644 (file)
index bbfa059..0000000
Binary files a/doc/salome/gui/SMESH/images/dimgroup_2d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/dimgroup_dlg.png b/doc/salome/gui/SMESH/images/dimgroup_dlg.png
deleted file mode 100644 (file)
index 22bdbc6..0000000
Binary files a/doc/salome/gui/SMESH/images/dimgroup_dlg.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/dimgroup_src.png b/doc/salome/gui/SMESH/images/dimgroup_src.png
deleted file mode 100644 (file)
index 93606a8..0000000
Binary files a/doc/salome/gui/SMESH/images/dimgroup_src.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/dimgroup_tui1.png b/doc/salome/gui/SMESH/images/dimgroup_tui1.png
deleted file mode 100644 (file)
index 91617ce..0000000
Binary files a/doc/salome/gui/SMESH/images/dimgroup_tui1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/display_entity_choose_item.png b/doc/salome/gui/SMESH/images/display_entity_choose_item.png
deleted file mode 100644 (file)
index d099618..0000000
Binary files a/doc/salome/gui/SMESH/images/display_entity_choose_item.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/display_entity_dlg.png b/doc/salome/gui/SMESH/images/display_entity_dlg.png
deleted file mode 100644 (file)
index d0f4fa0..0000000
Binary files a/doc/salome/gui/SMESH/images/display_entity_dlg.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/distribution_of_layers.png b/doc/salome/gui/SMESH/images/distribution_of_layers.png
deleted file mode 100644 (file)
index 02975ef..0000000
Binary files a/doc/salome/gui/SMESH/images/distribution_of_layers.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/distributionwithanalyticdensity.png b/doc/salome/gui/SMESH/images/distributionwithanalyticdensity.png
deleted file mode 100644 (file)
index 53c618c..0000000
Binary files a/doc/salome/gui/SMESH/images/distributionwithanalyticdensity.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/distributionwithtabledensity.png b/doc/salome/gui/SMESH/images/distributionwithtabledensity.png
deleted file mode 100644 (file)
index 75bd698..0000000
Binary files a/doc/salome/gui/SMESH/images/distributionwithtabledensity.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/dlg_0D_on_all_nodes.png b/doc/salome/gui/SMESH/images/dlg_0D_on_all_nodes.png
deleted file mode 100644 (file)
index 78ac7c8..0000000
Binary files a/doc/salome/gui/SMESH/images/dlg_0D_on_all_nodes.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/double_faces.png b/doc/salome/gui/SMESH/images/double_faces.png
deleted file mode 100644 (file)
index 47bed1f..0000000
Binary files a/doc/salome/gui/SMESH/images/double_faces.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/double_nodes.png b/doc/salome/gui/SMESH/images/double_nodes.png
deleted file mode 100644 (file)
index 27a209b..0000000
Binary files a/doc/salome/gui/SMESH/images/double_nodes.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/duplicate01.png b/doc/salome/gui/SMESH/images/duplicate01.png
deleted file mode 100644 (file)
index af668e1..0000000
Binary files a/doc/salome/gui/SMESH/images/duplicate01.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/duplicate02.png b/doc/salome/gui/SMESH/images/duplicate02.png
deleted file mode 100644 (file)
index e8a6a8c..0000000
Binary files a/doc/salome/gui/SMESH/images/duplicate02.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/duplicate03.png b/doc/salome/gui/SMESH/images/duplicate03.png
deleted file mode 100644 (file)
index 0291103..0000000
Binary files a/doc/salome/gui/SMESH/images/duplicate03.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/duplicate04.png b/doc/salome/gui/SMESH/images/duplicate04.png
deleted file mode 100644 (file)
index 7bab0da..0000000
Binary files a/doc/salome/gui/SMESH/images/duplicate04.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/duplicate_nodes.png b/doc/salome/gui/SMESH/images/duplicate_nodes.png
deleted file mode 100644 (file)
index 61ff32b..0000000
Binary files a/doc/salome/gui/SMESH/images/duplicate_nodes.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/edge_wire_3d_after.png b/doc/salome/gui/SMESH/images/edge_wire_3d_after.png
deleted file mode 100644 (file)
index 3fab598..0000000
Binary files a/doc/salome/gui/SMESH/images/edge_wire_3d_after.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/edge_wire_3d_before.png b/doc/salome/gui/SMESH/images/edge_wire_3d_before.png
deleted file mode 100644 (file)
index 28f9868..0000000
Binary files a/doc/salome/gui/SMESH/images/edge_wire_3d_before.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/edge_wire_after.png b/doc/salome/gui/SMESH/images/edge_wire_after.png
deleted file mode 100644 (file)
index 408480e..0000000
Binary files a/doc/salome/gui/SMESH/images/edge_wire_after.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/edge_wire_before.png b/doc/salome/gui/SMESH/images/edge_wire_before.png
deleted file mode 100644 (file)
index 186528e..0000000
Binary files a/doc/salome/gui/SMESH/images/edge_wire_before.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/edit_mesh1.png b/doc/salome/gui/SMESH/images/edit_mesh1.png
deleted file mode 100755 (executable)
index 4369e51..0000000
Binary files a/doc/salome/gui/SMESH/images/edit_mesh1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/edit_mesh_change_value_hyp.png b/doc/salome/gui/SMESH/images/edit_mesh_change_value_hyp.png
deleted file mode 100755 (executable)
index 7dee01f..0000000
Binary files a/doc/salome/gui/SMESH/images/edit_mesh_change_value_hyp.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/edit_mesh_remove_hyp.png b/doc/salome/gui/SMESH/images/edit_mesh_remove_hyp.png
deleted file mode 100755 (executable)
index 0a45639..0000000
Binary files a/doc/salome/gui/SMESH/images/edit_mesh_remove_hyp.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/editgroup.png b/doc/salome/gui/SMESH/images/editgroup.png
deleted file mode 100755 (executable)
index 1a9db08..0000000
Binary files a/doc/salome/gui/SMESH/images/editgroup.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/editing_groups1.png b/doc/salome/gui/SMESH/images/editing_groups1.png
deleted file mode 100644 (file)
index a565ed3..0000000
Binary files a/doc/salome/gui/SMESH/images/editing_groups1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/elem_info.png b/doc/salome/gui/SMESH/images/elem_info.png
deleted file mode 100644 (file)
index 9937d6d..0000000
Binary files a/doc/salome/gui/SMESH/images/elem_info.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/eleminfo1.png b/doc/salome/gui/SMESH/images/eleminfo1.png
deleted file mode 100644 (file)
index 9f9e03a..0000000
Binary files a/doc/salome/gui/SMESH/images/eleminfo1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/eleminfo2.png b/doc/salome/gui/SMESH/images/eleminfo2.png
deleted file mode 100644 (file)
index 34061d9..0000000
Binary files a/doc/salome/gui/SMESH/images/eleminfo2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/extr_along_wire_after.png b/doc/salome/gui/SMESH/images/extr_along_wire_after.png
deleted file mode 100644 (file)
index eb39bdd..0000000
Binary files a/doc/salome/gui/SMESH/images/extr_along_wire_after.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/extr_along_wire_before.png b/doc/salome/gui/SMESH/images/extr_along_wire_before.png
deleted file mode 100644 (file)
index 2f30cee..0000000
Binary files a/doc/salome/gui/SMESH/images/extr_along_wire_before.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/extru_rib_segs.png b/doc/salome/gui/SMESH/images/extru_rib_segs.png
deleted file mode 100644 (file)
index 24f04cf..0000000
Binary files a/doc/salome/gui/SMESH/images/extru_rib_segs.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/extrusion_along_path_dlg.png b/doc/salome/gui/SMESH/images/extrusion_along_path_dlg.png
deleted file mode 100644 (file)
index 98e362f..0000000
Binary files a/doc/salome/gui/SMESH/images/extrusion_along_path_dlg.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/extrusion_box.png b/doc/salome/gui/SMESH/images/extrusion_box.png
deleted file mode 100644 (file)
index fb08486..0000000
Binary files a/doc/salome/gui/SMESH/images/extrusion_box.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/extrusion_groups.png b/doc/salome/gui/SMESH/images/extrusion_groups.png
deleted file mode 100644 (file)
index c58e397..0000000
Binary files a/doc/salome/gui/SMESH/images/extrusion_groups.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/extrusion_groups_res.png b/doc/salome/gui/SMESH/images/extrusion_groups_res.png
deleted file mode 100644 (file)
index 7063c82..0000000
Binary files a/doc/salome/gui/SMESH/images/extrusion_groups_res.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/extrusionalongaline1.png b/doc/salome/gui/SMESH/images/extrusionalongaline1.png
deleted file mode 100644 (file)
index 761f09b..0000000
Binary files a/doc/salome/gui/SMESH/images/extrusionalongaline1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/extrusionalongaline2.png b/doc/salome/gui/SMESH/images/extrusionalongaline2.png
deleted file mode 100644 (file)
index f0e6d9e..0000000
Binary files a/doc/salome/gui/SMESH/images/extrusionalongaline2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/extrusionalongaline3.png b/doc/salome/gui/SMESH/images/extrusionalongaline3.png
deleted file mode 100644 (file)
index 75c359b..0000000
Binary files a/doc/salome/gui/SMESH/images/extrusionalongaline3.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/extrusionbynormal_alongavgnorm.png b/doc/salome/gui/SMESH/images/extrusionbynormal_alongavgnorm.png
deleted file mode 100644 (file)
index ecb550e..0000000
Binary files a/doc/salome/gui/SMESH/images/extrusionbynormal_alongavgnorm.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/extrusionbynormal_useonly.png b/doc/salome/gui/SMESH/images/extrusionbynormal_useonly.png
deleted file mode 100644 (file)
index 1c63a2b..0000000
Binary files a/doc/salome/gui/SMESH/images/extrusionbynormal_useonly.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/failed_computation.png b/doc/salome/gui/SMESH/images/failed_computation.png
deleted file mode 100644 (file)
index e44a538..0000000
Binary files a/doc/salome/gui/SMESH/images/failed_computation.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/find_geom_by_mesh_elem.png b/doc/salome/gui/SMESH/images/find_geom_by_mesh_elem.png
deleted file mode 100644 (file)
index d71495e..0000000
Binary files a/doc/salome/gui/SMESH/images/find_geom_by_mesh_elem.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/findelement1.png b/doc/salome/gui/SMESH/images/findelement1.png
deleted file mode 100644 (file)
index 1c11a03..0000000
Binary files a/doc/salome/gui/SMESH/images/findelement1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/findelement2.png b/doc/salome/gui/SMESH/images/findelement2.png
deleted file mode 100644 (file)
index c9898b5..0000000
Binary files a/doc/salome/gui/SMESH/images/findelement2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/findelement3.png b/doc/salome/gui/SMESH/images/findelement3.png
deleted file mode 100644 (file)
index 26cfff2..0000000
Binary files a/doc/salome/gui/SMESH/images/findelement3.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/formula1.png b/doc/salome/gui/SMESH/images/formula1.png
deleted file mode 100644 (file)
index b3468a1..0000000
Binary files a/doc/salome/gui/SMESH/images/formula1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/formula2.png b/doc/salome/gui/SMESH/images/formula2.png
deleted file mode 100644 (file)
index dd45fbf..0000000
Binary files a/doc/salome/gui/SMESH/images/formula2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/formula4.png b/doc/salome/gui/SMESH/images/formula4.png
deleted file mode 100644 (file)
index 3a5d31f..0000000
Binary files a/doc/salome/gui/SMESH/images/formula4.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/formula5.png b/doc/salome/gui/SMESH/images/formula5.png
deleted file mode 100644 (file)
index 8cd035f..0000000
Binary files a/doc/salome/gui/SMESH/images/formula5.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/free_borders1.png b/doc/salome/gui/SMESH/images/free_borders1.png
deleted file mode 100644 (file)
index 871beba..0000000
Binary files a/doc/salome/gui/SMESH/images/free_borders1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/free_edges.png b/doc/salome/gui/SMESH/images/free_edges.png
deleted file mode 100755 (executable)
index 6f1100c..0000000
Binary files a/doc/salome/gui/SMESH/images/free_edges.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/free_faces.png b/doc/salome/gui/SMESH/images/free_faces.png
deleted file mode 100644 (file)
index 8b5bee4..0000000
Binary files a/doc/salome/gui/SMESH/images/free_faces.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/free_nodes.png b/doc/salome/gui/SMESH/images/free_nodes.png
deleted file mode 100644 (file)
index ea043ea..0000000
Binary files a/doc/salome/gui/SMESH/images/free_nodes.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/ghs3dprl_parameters_basic.png b/doc/salome/gui/SMESH/images/ghs3dprl_parameters_basic.png
deleted file mode 100644 (file)
index 0628058..0000000
Binary files a/doc/salome/gui/SMESH/images/ghs3dprl_parameters_basic.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/groups_by_sharp_edges_dlg.png b/doc/salome/gui/SMESH/images/groups_by_sharp_edges_dlg.png
deleted file mode 100644 (file)
index 936d0ba..0000000
Binary files a/doc/salome/gui/SMESH/images/groups_by_sharp_edges_dlg.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/groups_in_OB.png b/doc/salome/gui/SMESH/images/groups_in_OB.png
deleted file mode 100644 (file)
index 1ffb96a..0000000
Binary files a/doc/salome/gui/SMESH/images/groups_in_OB.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/head.png b/doc/salome/gui/SMESH/images/head.png
deleted file mode 100755 (executable)
index 307d9ef..0000000
Binary files a/doc/salome/gui/SMESH/images/head.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/hexa_ijk_mesh.png b/doc/salome/gui/SMESH/images/hexa_ijk_mesh.png
deleted file mode 100644 (file)
index 577ee8e..0000000
Binary files a/doc/salome/gui/SMESH/images/hexa_ijk_mesh.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/hyp_source_edges.png b/doc/salome/gui/SMESH/images/hyp_source_edges.png
deleted file mode 100644 (file)
index 2305e17..0000000
Binary files a/doc/salome/gui/SMESH/images/hyp_source_edges.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/hyp_source_faces.png b/doc/salome/gui/SMESH/images/hyp_source_faces.png
deleted file mode 100644 (file)
index fe9e6c6..0000000
Binary files a/doc/salome/gui/SMESH/images/hyp_source_faces.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/hypo_fixedpnt_dlg.png b/doc/salome/gui/SMESH/images/hypo_fixedpnt_dlg.png
deleted file mode 100644 (file)
index d1c131a..0000000
Binary files a/doc/salome/gui/SMESH/images/hypo_fixedpnt_dlg.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/hypo_quad_params_1.png b/doc/salome/gui/SMESH/images/hypo_quad_params_1.png
deleted file mode 100644 (file)
index eca8767..0000000
Binary files a/doc/salome/gui/SMESH/images/hypo_quad_params_1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/hypo_quad_params_2.png b/doc/salome/gui/SMESH/images/hypo_quad_params_2.png
deleted file mode 100644 (file)
index 4102a76..0000000
Binary files a/doc/salome/gui/SMESH/images/hypo_quad_params_2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/hypo_quad_params_dialog.png b/doc/salome/gui/SMESH/images/hypo_quad_params_dialog.png
deleted file mode 100644 (file)
index f0c381a..0000000
Binary files a/doc/salome/gui/SMESH/images/hypo_quad_params_dialog.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/hypo_quad_params_dialog_corners.png b/doc/salome/gui/SMESH/images/hypo_quad_params_dialog_corners.png
deleted file mode 100644 (file)
index 4f30c07..0000000
Binary files a/doc/salome/gui/SMESH/images/hypo_quad_params_dialog_corners.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/hypo_quad_params_dialog_enf.png b/doc/salome/gui/SMESH/images/hypo_quad_params_dialog_enf.png
deleted file mode 100644 (file)
index cc1be66..0000000
Binary files a/doc/salome/gui/SMESH/images/hypo_quad_params_dialog_enf.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/hypo_quad_params_dialog_vert.png b/doc/salome/gui/SMESH/images/hypo_quad_params_dialog_vert.png
deleted file mode 100644 (file)
index c819144..0000000
Binary files a/doc/salome/gui/SMESH/images/hypo_quad_params_dialog_vert.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/hypo_quad_params_enfnodes_algo1.png b/doc/salome/gui/SMESH/images/hypo_quad_params_enfnodes_algo1.png
deleted file mode 100644 (file)
index 3040015..0000000
Binary files a/doc/salome/gui/SMESH/images/hypo_quad_params_enfnodes_algo1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/hypo_quad_params_enfnodes_algo2.png b/doc/salome/gui/SMESH/images/hypo_quad_params_enfnodes_algo2.png
deleted file mode 100644 (file)
index f0a4c62..0000000
Binary files a/doc/salome/gui/SMESH/images/hypo_quad_params_enfnodes_algo2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/hypo_quad_params_enfnodes_algo3.png b/doc/salome/gui/SMESH/images/hypo_quad_params_enfnodes_algo3.png
deleted file mode 100644 (file)
index f6db339..0000000
Binary files a/doc/salome/gui/SMESH/images/hypo_quad_params_enfnodes_algo3.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/hypo_quad_params_res.png b/doc/salome/gui/SMESH/images/hypo_quad_params_res.png
deleted file mode 100644 (file)
index 8aae276..0000000
Binary files a/doc/salome/gui/SMESH/images/hypo_quad_params_res.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/hypo_quad_params_res_2.png b/doc/salome/gui/SMESH/images/hypo_quad_params_res_2.png
deleted file mode 100644 (file)
index 6dc37e2..0000000
Binary files a/doc/salome/gui/SMESH/images/hypo_quad_params_res_2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/hypo_radquad_dlg.png b/doc/salome/gui/SMESH/images/hypo_radquad_dlg.png
deleted file mode 100755 (executable)
index e658a68..0000000
Binary files a/doc/salome/gui/SMESH/images/hypo_radquad_dlg.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/hypo_sets.png b/doc/salome/gui/SMESH/images/hypo_sets.png
deleted file mode 100644 (file)
index 14af9af..0000000
Binary files a/doc/salome/gui/SMESH/images/hypo_sets.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image10.jpg b/doc/salome/gui/SMESH/images/image10.jpg
deleted file mode 100644 (file)
index c52d80c..0000000
Binary files a/doc/salome/gui/SMESH/images/image10.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image101.png b/doc/salome/gui/SMESH/images/image101.png
deleted file mode 100755 (executable)
index 0e2c966..0000000
Binary files a/doc/salome/gui/SMESH/images/image101.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image105.gif b/doc/salome/gui/SMESH/images/image105.gif
deleted file mode 100755 (executable)
index 0f74545..0000000
Binary files a/doc/salome/gui/SMESH/images/image105.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image106.gif b/doc/salome/gui/SMESH/images/image106.gif
deleted file mode 100755 (executable)
index 71bda2e..0000000
Binary files a/doc/salome/gui/SMESH/images/image106.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image120.png b/doc/salome/gui/SMESH/images/image120.png
deleted file mode 100755 (executable)
index 65318de..0000000
Binary files a/doc/salome/gui/SMESH/images/image120.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image121.png b/doc/salome/gui/SMESH/images/image121.png
deleted file mode 100755 (executable)
index 16ed2a4..0000000
Binary files a/doc/salome/gui/SMESH/images/image121.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image122.png b/doc/salome/gui/SMESH/images/image122.png
deleted file mode 100755 (executable)
index 7fa491b..0000000
Binary files a/doc/salome/gui/SMESH/images/image122.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image123.gif b/doc/salome/gui/SMESH/images/image123.gif
deleted file mode 100755 (executable)
index 2780e70..0000000
Binary files a/doc/salome/gui/SMESH/images/image123.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image124.gif b/doc/salome/gui/SMESH/images/image124.gif
deleted file mode 100755 (executable)
index 98f0c40..0000000
Binary files a/doc/salome/gui/SMESH/images/image124.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image125.gif b/doc/salome/gui/SMESH/images/image125.gif
deleted file mode 100755 (executable)
index 1983513..0000000
Binary files a/doc/salome/gui/SMESH/images/image125.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image126.gif b/doc/salome/gui/SMESH/images/image126.gif
deleted file mode 100755 (executable)
index e2e6955..0000000
Binary files a/doc/salome/gui/SMESH/images/image126.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image127.gif b/doc/salome/gui/SMESH/images/image127.gif
deleted file mode 100755 (executable)
index 79bccc6..0000000
Binary files a/doc/salome/gui/SMESH/images/image127.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image130.gif b/doc/salome/gui/SMESH/images/image130.gif
deleted file mode 100755 (executable)
index cc8c3a5..0000000
Binary files a/doc/salome/gui/SMESH/images/image130.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image131.gif b/doc/salome/gui/SMESH/images/image131.gif
deleted file mode 100755 (executable)
index 8ca3453..0000000
Binary files a/doc/salome/gui/SMESH/images/image131.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image132.gif b/doc/salome/gui/SMESH/images/image132.gif
deleted file mode 100755 (executable)
index e7577ea..0000000
Binary files a/doc/salome/gui/SMESH/images/image132.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image133.gif b/doc/salome/gui/SMESH/images/image133.gif
deleted file mode 100755 (executable)
index 60a4b96..0000000
Binary files a/doc/salome/gui/SMESH/images/image133.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image134.gif b/doc/salome/gui/SMESH/images/image134.gif
deleted file mode 100755 (executable)
index 60148ba..0000000
Binary files a/doc/salome/gui/SMESH/images/image134.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image135.gif b/doc/salome/gui/SMESH/images/image135.gif
deleted file mode 100755 (executable)
index 13b7b08..0000000
Binary files a/doc/salome/gui/SMESH/images/image135.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image136.gif b/doc/salome/gui/SMESH/images/image136.gif
deleted file mode 100755 (executable)
index 9b17450..0000000
Binary files a/doc/salome/gui/SMESH/images/image136.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image137.gif b/doc/salome/gui/SMESH/images/image137.gif
deleted file mode 100755 (executable)
index 7f4cd13..0000000
Binary files a/doc/salome/gui/SMESH/images/image137.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image138.gif b/doc/salome/gui/SMESH/images/image138.gif
deleted file mode 100644 (file)
index 1659aab..0000000
Binary files a/doc/salome/gui/SMESH/images/image138.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image143.gif b/doc/salome/gui/SMESH/images/image143.gif
deleted file mode 100755 (executable)
index de9df14..0000000
Binary files a/doc/salome/gui/SMESH/images/image143.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image144.png b/doc/salome/gui/SMESH/images/image144.png
deleted file mode 100755 (executable)
index 75219e9..0000000
Binary files a/doc/salome/gui/SMESH/images/image144.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image145.png b/doc/salome/gui/SMESH/images/image145.png
deleted file mode 100755 (executable)
index 52b21ca..0000000
Binary files a/doc/salome/gui/SMESH/images/image145.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image146.png b/doc/salome/gui/SMESH/images/image146.png
deleted file mode 100755 (executable)
index 06c1c03..0000000
Binary files a/doc/salome/gui/SMESH/images/image146.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image147.gif b/doc/salome/gui/SMESH/images/image147.gif
deleted file mode 100755 (executable)
index 7b9a354..0000000
Binary files a/doc/salome/gui/SMESH/images/image147.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image148.gif b/doc/salome/gui/SMESH/images/image148.gif
deleted file mode 100755 (executable)
index 0ef4147..0000000
Binary files a/doc/salome/gui/SMESH/images/image148.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image15.jpg b/doc/salome/gui/SMESH/images/image15.jpg
deleted file mode 100755 (executable)
index 15edee5..0000000
Binary files a/doc/salome/gui/SMESH/images/image15.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image151.gif b/doc/salome/gui/SMESH/images/image151.gif
deleted file mode 100755 (executable)
index 5c4a20e..0000000
Binary files a/doc/salome/gui/SMESH/images/image151.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image152.png b/doc/salome/gui/SMESH/images/image152.png
deleted file mode 100644 (file)
index d30ae67..0000000
Binary files a/doc/salome/gui/SMESH/images/image152.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image154.png b/doc/salome/gui/SMESH/images/image154.png
deleted file mode 100755 (executable)
index 72421a4..0000000
Binary files a/doc/salome/gui/SMESH/images/image154.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image155.gif b/doc/salome/gui/SMESH/images/image155.gif
deleted file mode 100644 (file)
index fe03093..0000000
Binary files a/doc/salome/gui/SMESH/images/image155.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image156.gif b/doc/salome/gui/SMESH/images/image156.gif
deleted file mode 100644 (file)
index 36b37c8..0000000
Binary files a/doc/salome/gui/SMESH/images/image156.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image157.gif b/doc/salome/gui/SMESH/images/image157.gif
deleted file mode 100644 (file)
index 4592151..0000000
Binary files a/doc/salome/gui/SMESH/images/image157.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image160.gif b/doc/salome/gui/SMESH/images/image160.gif
deleted file mode 100644 (file)
index 5aff389..0000000
Binary files a/doc/salome/gui/SMESH/images/image160.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image161.png b/doc/salome/gui/SMESH/images/image161.png
deleted file mode 100755 (executable)
index 5b1aed2..0000000
Binary files a/doc/salome/gui/SMESH/images/image161.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image22.jpg b/doc/salome/gui/SMESH/images/image22.jpg
deleted file mode 100755 (executable)
index b6a5e8d..0000000
Binary files a/doc/salome/gui/SMESH/images/image22.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image23.jpg b/doc/salome/gui/SMESH/images/image23.jpg
deleted file mode 100755 (executable)
index 74f899b..0000000
Binary files a/doc/salome/gui/SMESH/images/image23.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image24.gif b/doc/salome/gui/SMESH/images/image24.gif
deleted file mode 100755 (executable)
index 3d8032b..0000000
Binary files a/doc/salome/gui/SMESH/images/image24.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image25.jpg b/doc/salome/gui/SMESH/images/image25.jpg
deleted file mode 100755 (executable)
index 79ddf05..0000000
Binary files a/doc/salome/gui/SMESH/images/image25.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image25.png b/doc/salome/gui/SMESH/images/image25.png
deleted file mode 100755 (executable)
index aeef930..0000000
Binary files a/doc/salome/gui/SMESH/images/image25.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image27.jpg b/doc/salome/gui/SMESH/images/image27.jpg
deleted file mode 100755 (executable)
index d2f32b1..0000000
Binary files a/doc/salome/gui/SMESH/images/image27.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image28.png b/doc/salome/gui/SMESH/images/image28.png
deleted file mode 100755 (executable)
index 7c16b0c..0000000
Binary files a/doc/salome/gui/SMESH/images/image28.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image30.jpg b/doc/salome/gui/SMESH/images/image30.jpg
deleted file mode 100755 (executable)
index 997a36e..0000000
Binary files a/doc/salome/gui/SMESH/images/image30.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image31.jpg b/doc/salome/gui/SMESH/images/image31.jpg
deleted file mode 100755 (executable)
index aa00403..0000000
Binary files a/doc/salome/gui/SMESH/images/image31.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image32.jpg b/doc/salome/gui/SMESH/images/image32.jpg
deleted file mode 100755 (executable)
index 77d595d..0000000
Binary files a/doc/salome/gui/SMESH/images/image32.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image32.png b/doc/salome/gui/SMESH/images/image32.png
deleted file mode 100755 (executable)
index cad35fd..0000000
Binary files a/doc/salome/gui/SMESH/images/image32.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image33.gif b/doc/salome/gui/SMESH/images/image33.gif
deleted file mode 100755 (executable)
index 6613182..0000000
Binary files a/doc/salome/gui/SMESH/images/image33.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image34.png b/doc/salome/gui/SMESH/images/image34.png
deleted file mode 100755 (executable)
index eb7ca81..0000000
Binary files a/doc/salome/gui/SMESH/images/image34.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image35.png b/doc/salome/gui/SMESH/images/image35.png
deleted file mode 100755 (executable)
index 00031d3..0000000
Binary files a/doc/salome/gui/SMESH/images/image35.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image36.jpg b/doc/salome/gui/SMESH/images/image36.jpg
deleted file mode 100755 (executable)
index 9b44dc7..0000000
Binary files a/doc/salome/gui/SMESH/images/image36.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image36.png b/doc/salome/gui/SMESH/images/image36.png
deleted file mode 100755 (executable)
index 6a250d0..0000000
Binary files a/doc/salome/gui/SMESH/images/image36.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image37.jpg b/doc/salome/gui/SMESH/images/image37.jpg
deleted file mode 100755 (executable)
index 5fba91a..0000000
Binary files a/doc/salome/gui/SMESH/images/image37.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image37.png b/doc/salome/gui/SMESH/images/image37.png
deleted file mode 100755 (executable)
index 266cef9..0000000
Binary files a/doc/salome/gui/SMESH/images/image37.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image38.jpg b/doc/salome/gui/SMESH/images/image38.jpg
deleted file mode 100755 (executable)
index 29d5e71..0000000
Binary files a/doc/salome/gui/SMESH/images/image38.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image38.png b/doc/salome/gui/SMESH/images/image38.png
deleted file mode 100755 (executable)
index fb8a690..0000000
Binary files a/doc/salome/gui/SMESH/images/image38.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image39.png b/doc/salome/gui/SMESH/images/image39.png
deleted file mode 100755 (executable)
index 54729b8..0000000
Binary files a/doc/salome/gui/SMESH/images/image39.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image40.png b/doc/salome/gui/SMESH/images/image40.png
deleted file mode 100755 (executable)
index bbde0d4..0000000
Binary files a/doc/salome/gui/SMESH/images/image40.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image41.gif b/doc/salome/gui/SMESH/images/image41.gif
deleted file mode 100755 (executable)
index 2e132c2..0000000
Binary files a/doc/salome/gui/SMESH/images/image41.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image42.png b/doc/salome/gui/SMESH/images/image42.png
deleted file mode 100755 (executable)
index d0120fa..0000000
Binary files a/doc/salome/gui/SMESH/images/image42.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image43.png b/doc/salome/gui/SMESH/images/image43.png
deleted file mode 100755 (executable)
index 7b6b895..0000000
Binary files a/doc/salome/gui/SMESH/images/image43.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image46.gif b/doc/salome/gui/SMESH/images/image46.gif
deleted file mode 100755 (executable)
index 0f00ea7..0000000
Binary files a/doc/salome/gui/SMESH/images/image46.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image49.png b/doc/salome/gui/SMESH/images/image49.png
deleted file mode 100755 (executable)
index 6e5b317..0000000
Binary files a/doc/salome/gui/SMESH/images/image49.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image5.jpg b/doc/salome/gui/SMESH/images/image5.jpg
deleted file mode 100755 (executable)
index f195ac8..0000000
Binary files a/doc/salome/gui/SMESH/images/image5.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image50.gif b/doc/salome/gui/SMESH/images/image50.gif
deleted file mode 100755 (executable)
index 22bdf55..0000000
Binary files a/doc/salome/gui/SMESH/images/image50.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image51.jpg b/doc/salome/gui/SMESH/images/image51.jpg
deleted file mode 100755 (executable)
index dfe3bc6..0000000
Binary files a/doc/salome/gui/SMESH/images/image51.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image52.jpg b/doc/salome/gui/SMESH/images/image52.jpg
deleted file mode 100755 (executable)
index 1c83b35..0000000
Binary files a/doc/salome/gui/SMESH/images/image52.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image53.gif b/doc/salome/gui/SMESH/images/image53.gif
deleted file mode 100755 (executable)
index 8f72820..0000000
Binary files a/doc/salome/gui/SMESH/images/image53.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image55.gif b/doc/salome/gui/SMESH/images/image55.gif
deleted file mode 100755 (executable)
index cc1b80e..0000000
Binary files a/doc/salome/gui/SMESH/images/image55.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image56.gif b/doc/salome/gui/SMESH/images/image56.gif
deleted file mode 100755 (executable)
index ffe1e95..0000000
Binary files a/doc/salome/gui/SMESH/images/image56.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image56.jpg b/doc/salome/gui/SMESH/images/image56.jpg
deleted file mode 100755 (executable)
index 6f19970..0000000
Binary files a/doc/salome/gui/SMESH/images/image56.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image58.png b/doc/salome/gui/SMESH/images/image58.png
deleted file mode 100644 (file)
index a496170..0000000
Binary files a/doc/salome/gui/SMESH/images/image58.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image59.png b/doc/salome/gui/SMESH/images/image59.png
deleted file mode 100644 (file)
index 5b8106e..0000000
Binary files a/doc/salome/gui/SMESH/images/image59.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image63.png b/doc/salome/gui/SMESH/images/image63.png
deleted file mode 100755 (executable)
index b9e65be..0000000
Binary files a/doc/salome/gui/SMESH/images/image63.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image64.png b/doc/salome/gui/SMESH/images/image64.png
deleted file mode 100755 (executable)
index 554959b..0000000
Binary files a/doc/salome/gui/SMESH/images/image64.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image67.png b/doc/salome/gui/SMESH/images/image67.png
deleted file mode 100755 (executable)
index 0d456ba..0000000
Binary files a/doc/salome/gui/SMESH/images/image67.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image7.jpg b/doc/salome/gui/SMESH/images/image7.jpg
deleted file mode 100644 (file)
index cbd6170..0000000
Binary files a/doc/salome/gui/SMESH/images/image7.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image70.jpg b/doc/salome/gui/SMESH/images/image70.jpg
deleted file mode 100755 (executable)
index 0df360f..0000000
Binary files a/doc/salome/gui/SMESH/images/image70.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image70.png b/doc/salome/gui/SMESH/images/image70.png
deleted file mode 100755 (executable)
index 30a2d92..0000000
Binary files a/doc/salome/gui/SMESH/images/image70.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image71.jpg b/doc/salome/gui/SMESH/images/image71.jpg
deleted file mode 100755 (executable)
index cb1223d..0000000
Binary files a/doc/salome/gui/SMESH/images/image71.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image71.png b/doc/salome/gui/SMESH/images/image71.png
deleted file mode 100755 (executable)
index ef9407a..0000000
Binary files a/doc/salome/gui/SMESH/images/image71.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image74.gif b/doc/salome/gui/SMESH/images/image74.gif
deleted file mode 100755 (executable)
index c66029e..0000000
Binary files a/doc/salome/gui/SMESH/images/image74.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image75.jpg b/doc/salome/gui/SMESH/images/image75.jpg
deleted file mode 100644 (file)
index 54718d4..0000000
Binary files a/doc/salome/gui/SMESH/images/image75.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image76.jpg b/doc/salome/gui/SMESH/images/image76.jpg
deleted file mode 100644 (file)
index cdeb880..0000000
Binary files a/doc/salome/gui/SMESH/images/image76.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image77.jpg b/doc/salome/gui/SMESH/images/image77.jpg
deleted file mode 100644 (file)
index 9205644..0000000
Binary files a/doc/salome/gui/SMESH/images/image77.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image78.jpg b/doc/salome/gui/SMESH/images/image78.jpg
deleted file mode 100755 (executable)
index 80c2a16..0000000
Binary files a/doc/salome/gui/SMESH/images/image78.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image79.jpg b/doc/salome/gui/SMESH/images/image79.jpg
deleted file mode 100755 (executable)
index 0efc736..0000000
Binary files a/doc/salome/gui/SMESH/images/image79.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image79.png b/doc/salome/gui/SMESH/images/image79.png
deleted file mode 100755 (executable)
index e8d648c..0000000
Binary files a/doc/salome/gui/SMESH/images/image79.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image80.png b/doc/salome/gui/SMESH/images/image80.png
deleted file mode 100755 (executable)
index 114b38d..0000000
Binary files a/doc/salome/gui/SMESH/images/image80.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image82.png b/doc/salome/gui/SMESH/images/image82.png
deleted file mode 100755 (executable)
index c37c5fb..0000000
Binary files a/doc/salome/gui/SMESH/images/image82.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image83.gif b/doc/salome/gui/SMESH/images/image83.gif
deleted file mode 100755 (executable)
index 331b64a..0000000
Binary files a/doc/salome/gui/SMESH/images/image83.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image84.png b/doc/salome/gui/SMESH/images/image84.png
deleted file mode 100755 (executable)
index 2c0b285..0000000
Binary files a/doc/salome/gui/SMESH/images/image84.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image86.jpg b/doc/salome/gui/SMESH/images/image86.jpg
deleted file mode 100644 (file)
index 168b43e..0000000
Binary files a/doc/salome/gui/SMESH/images/image86.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image88.gif b/doc/salome/gui/SMESH/images/image88.gif
deleted file mode 100755 (executable)
index 553656d..0000000
Binary files a/doc/salome/gui/SMESH/images/image88.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image88.jpg b/doc/salome/gui/SMESH/images/image88.jpg
deleted file mode 100644 (file)
index 9499ab2..0000000
Binary files a/doc/salome/gui/SMESH/images/image88.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image90.jpg b/doc/salome/gui/SMESH/images/image90.jpg
deleted file mode 100644 (file)
index a78c439..0000000
Binary files a/doc/salome/gui/SMESH/images/image90.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image91.png b/doc/salome/gui/SMESH/images/image91.png
deleted file mode 100755 (executable)
index 64fcc31..0000000
Binary files a/doc/salome/gui/SMESH/images/image91.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image92.jpg b/doc/salome/gui/SMESH/images/image92.jpg
deleted file mode 100755 (executable)
index bf6e610..0000000
Binary files a/doc/salome/gui/SMESH/images/image92.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image92.png b/doc/salome/gui/SMESH/images/image92.png
deleted file mode 100755 (executable)
index 3068b0f..0000000
Binary files a/doc/salome/gui/SMESH/images/image92.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image93.jpg b/doc/salome/gui/SMESH/images/image93.jpg
deleted file mode 100755 (executable)
index f9780b4..0000000
Binary files a/doc/salome/gui/SMESH/images/image93.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image94.gif b/doc/salome/gui/SMESH/images/image94.gif
deleted file mode 100755 (executable)
index 7313f5d..0000000
Binary files a/doc/salome/gui/SMESH/images/image94.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image94.jpg b/doc/salome/gui/SMESH/images/image94.jpg
deleted file mode 100644 (file)
index 7891667..0000000
Binary files a/doc/salome/gui/SMESH/images/image94.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image95.gif b/doc/salome/gui/SMESH/images/image95.gif
deleted file mode 100755 (executable)
index 6491f27..0000000
Binary files a/doc/salome/gui/SMESH/images/image95.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image95.jpg b/doc/salome/gui/SMESH/images/image95.jpg
deleted file mode 100755 (executable)
index 047dccf..0000000
Binary files a/doc/salome/gui/SMESH/images/image95.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image96.gif b/doc/salome/gui/SMESH/images/image96.gif
deleted file mode 100755 (executable)
index 1392ee7..0000000
Binary files a/doc/salome/gui/SMESH/images/image96.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image96.jpg b/doc/salome/gui/SMESH/images/image96.jpg
deleted file mode 100755 (executable)
index 5f3128e..0000000
Binary files a/doc/salome/gui/SMESH/images/image96.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image97.gif b/doc/salome/gui/SMESH/images/image97.gif
deleted file mode 100755 (executable)
index 480b584..0000000
Binary files a/doc/salome/gui/SMESH/images/image97.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image97.jpg b/doc/salome/gui/SMESH/images/image97.jpg
deleted file mode 100755 (executable)
index 275f2e3..0000000
Binary files a/doc/salome/gui/SMESH/images/image97.jpg and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image98.png b/doc/salome/gui/SMESH/images/image98.png
deleted file mode 100755 (executable)
index a2c131d..0000000
Binary files a/doc/salome/gui/SMESH/images/image98.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image99.gif b/doc/salome/gui/SMESH/images/image99.gif
deleted file mode 100755 (executable)
index 2672e99..0000000
Binary files a/doc/salome/gui/SMESH/images/image99.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/image_octa12.png b/doc/salome/gui/SMESH/images/image_octa12.png
deleted file mode 100644 (file)
index 1a5ed8c..0000000
Binary files a/doc/salome/gui/SMESH/images/image_octa12.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/intersect_groups1.png b/doc/salome/gui/SMESH/images/intersect_groups1.png
deleted file mode 100644 (file)
index ad2ff52..0000000
Binary files a/doc/salome/gui/SMESH/images/intersect_groups1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/intersectgroups.png b/doc/salome/gui/SMESH/images/intersectgroups.png
deleted file mode 100755 (executable)
index 8114b10..0000000
Binary files a/doc/salome/gui/SMESH/images/intersectgroups.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/length-crit.png b/doc/salome/gui/SMESH/images/length-crit.png
deleted file mode 100755 (executable)
index 96836cd..0000000
Binary files a/doc/salome/gui/SMESH/images/length-crit.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/length2d.png b/doc/salome/gui/SMESH/images/length2d.png
deleted file mode 100755 (executable)
index 9a5264a..0000000
Binary files a/doc/salome/gui/SMESH/images/length2d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/lengthnearvertex.png b/doc/salome/gui/SMESH/images/lengthnearvertex.png
deleted file mode 100755 (executable)
index 4a59c7b..0000000
Binary files a/doc/salome/gui/SMESH/images/lengthnearvertex.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/max_el_area.png b/doc/salome/gui/SMESH/images/max_el_area.png
deleted file mode 100755 (executable)
index 88db3d6..0000000
Binary files a/doc/salome/gui/SMESH/images/max_el_area.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/max_element_length_2d.png b/doc/salome/gui/SMESH/images/max_element_length_2d.png
deleted file mode 100755 (executable)
index 012d552..0000000
Binary files a/doc/salome/gui/SMESH/images/max_element_length_2d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/max_element_length_3d.png b/doc/salome/gui/SMESH/images/max_element_length_3d.png
deleted file mode 100755 (executable)
index fdf1b76..0000000
Binary files a/doc/salome/gui/SMESH/images/max_element_length_3d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mergeelems.png b/doc/salome/gui/SMESH/images/mergeelems.png
deleted file mode 100644 (file)
index f35955a..0000000
Binary files a/doc/salome/gui/SMESH/images/mergeelems.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mergeelems_auto.png b/doc/salome/gui/SMESH/images/mergeelems_auto.png
deleted file mode 100644 (file)
index ffbb092..0000000
Binary files a/doc/salome/gui/SMESH/images/mergeelems_auto.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mergeelems_ico.png b/doc/salome/gui/SMESH/images/mergeelems_ico.png
deleted file mode 100755 (executable)
index 1342fe8..0000000
Binary files a/doc/salome/gui/SMESH/images/mergeelems_ico.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mergenodes.png b/doc/salome/gui/SMESH/images/mergenodes.png
deleted file mode 100644 (file)
index 2676025..0000000
Binary files a/doc/salome/gui/SMESH/images/mergenodes.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mergenodes_auto.png b/doc/salome/gui/SMESH/images/mergenodes_auto.png
deleted file mode 100644 (file)
index e01aacc..0000000
Binary files a/doc/salome/gui/SMESH/images/mergenodes_auto.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mergenodes_ico.png b/doc/salome/gui/SMESH/images/mergenodes_ico.png
deleted file mode 100755 (executable)
index a0c1146..0000000
Binary files a/doc/salome/gui/SMESH/images/mergenodes_ico.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/merging_nodes1.png b/doc/salome/gui/SMESH/images/merging_nodes1.png
deleted file mode 100644 (file)
index 05c8175..0000000
Binary files a/doc/salome/gui/SMESH/images/merging_nodes1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/merging_nodes2.png b/doc/salome/gui/SMESH/images/merging_nodes2.png
deleted file mode 100644 (file)
index 862ed17..0000000
Binary files a/doc/salome/gui/SMESH/images/merging_nodes2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mesh_clear.png b/doc/salome/gui/SMESH/images/mesh_clear.png
deleted file mode 100644 (file)
index 956e903..0000000
Binary files a/doc/salome/gui/SMESH/images/mesh_clear.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mesh_cylinder_hexa.png b/doc/salome/gui/SMESH/images/mesh_cylinder_hexa.png
deleted file mode 100644 (file)
index f95dc67..0000000
Binary files a/doc/salome/gui/SMESH/images/mesh_cylinder_hexa.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mesh_evaluation_succeed.png b/doc/salome/gui/SMESH/images/mesh_evaluation_succeed.png
deleted file mode 100755 (executable)
index b9aeb52..0000000
Binary files a/doc/salome/gui/SMESH/images/mesh_evaluation_succeed.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mesh_fixedpnt.png b/doc/salome/gui/SMESH/images/mesh_fixedpnt.png
deleted file mode 100755 (executable)
index 5d044ab..0000000
Binary files a/doc/salome/gui/SMESH/images/mesh_fixedpnt.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mesh_for_extr_along_path.png b/doc/salome/gui/SMESH/images/mesh_for_extr_along_path.png
deleted file mode 100644 (file)
index 4ee52eb..0000000
Binary files a/doc/salome/gui/SMESH/images/mesh_for_extr_along_path.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mesh_node_to_point.png b/doc/salome/gui/SMESH/images/mesh_node_to_point.png
deleted file mode 100644 (file)
index e7e2866..0000000
Binary files a/doc/salome/gui/SMESH/images/mesh_node_to_point.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mesh_order_123.png b/doc/salome/gui/SMESH/images/mesh_order_123.png
deleted file mode 100644 (file)
index 952f207..0000000
Binary files a/doc/salome/gui/SMESH/images/mesh_order_123.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mesh_order_123_res.png b/doc/salome/gui/SMESH/images/mesh_order_123_res.png
deleted file mode 100644 (file)
index 02208a0..0000000
Binary files a/doc/salome/gui/SMESH/images/mesh_order_123_res.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mesh_order_213.png b/doc/salome/gui/SMESH/images/mesh_order_213.png
deleted file mode 100644 (file)
index 959ca38..0000000
Binary files a/doc/salome/gui/SMESH/images/mesh_order_213.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mesh_order_213_res.png b/doc/salome/gui/SMESH/images/mesh_order_213_res.png
deleted file mode 100644 (file)
index 8706fb4..0000000
Binary files a/doc/salome/gui/SMESH/images/mesh_order_213_res.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mesh_order_321.png b/doc/salome/gui/SMESH/images/mesh_order_321.png
deleted file mode 100644 (file)
index 7ad61fa..0000000
Binary files a/doc/salome/gui/SMESH/images/mesh_order_321.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mesh_order_321_res.png b/doc/salome/gui/SMESH/images/mesh_order_321_res.png
deleted file mode 100644 (file)
index 7a5f017..0000000
Binary files a/doc/salome/gui/SMESH/images/mesh_order_321_res.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mesh_order_no_concurrent.png b/doc/salome/gui/SMESH/images/mesh_order_no_concurrent.png
deleted file mode 100644 (file)
index 6df59a1..0000000
Binary files a/doc/salome/gui/SMESH/images/mesh_order_no_concurrent.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mesh_order_preview.png b/doc/salome/gui/SMESH/images/mesh_order_preview.png
deleted file mode 100644 (file)
index f4b5e3b..0000000
Binary files a/doc/salome/gui/SMESH/images/mesh_order_preview.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mesh_precompute.png b/doc/salome/gui/SMESH/images/mesh_precompute.png
deleted file mode 100644 (file)
index dd90498..0000000
Binary files a/doc/salome/gui/SMESH/images/mesh_precompute.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mesh_radquad_01.png b/doc/salome/gui/SMESH/images/mesh_radquad_01.png
deleted file mode 100755 (executable)
index dfd8eb5..0000000
Binary files a/doc/salome/gui/SMESH/images/mesh_radquad_01.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/mesh_radquad_02.png b/doc/salome/gui/SMESH/images/mesh_radquad_02.png
deleted file mode 100755 (executable)
index 63432eb..0000000
Binary files a/doc/salome/gui/SMESH/images/mesh_radquad_02.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/meshcomputationfail.png b/doc/salome/gui/SMESH/images/meshcomputationfail.png
deleted file mode 100644 (file)
index 8d09dba..0000000
Binary files a/doc/salome/gui/SMESH/images/meshcomputationfail.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/meshcomputationsucceed.png b/doc/salome/gui/SMESH/images/meshcomputationsucceed.png
deleted file mode 100644 (file)
index 943387c..0000000
Binary files a/doc/salome/gui/SMESH/images/meshcomputationsucceed.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/meshcut_plugin.png b/doc/salome/gui/SMESH/images/meshcut_plugin.png
deleted file mode 100644 (file)
index 305e920..0000000
Binary files a/doc/salome/gui/SMESH/images/meshcut_plugin.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/meshexportgroupwarning.png b/doc/salome/gui/SMESH/images/meshexportgroupwarning.png
deleted file mode 100644 (file)
index 613cd46..0000000
Binary files a/doc/salome/gui/SMESH/images/meshexportgroupwarning.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/meshexportmesh.png b/doc/salome/gui/SMESH/images/meshexportmesh.png
deleted file mode 100644 (file)
index f60679e..0000000
Binary files a/doc/salome/gui/SMESH/images/meshexportmesh.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/meshimportmesh.png b/doc/salome/gui/SMESH/images/meshimportmesh.png
deleted file mode 100755 (executable)
index 9190987..0000000
Binary files a/doc/salome/gui/SMESH/images/meshimportmesh.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/meshtopass1.png b/doc/salome/gui/SMESH/images/meshtopass1.png
deleted file mode 100644 (file)
index 8ea8af7..0000000
Binary files a/doc/salome/gui/SMESH/images/meshtopass1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/meshtopass2.png b/doc/salome/gui/SMESH/images/meshtopass2.png
deleted file mode 100644 (file)
index b0bd28a..0000000
Binary files a/doc/salome/gui/SMESH/images/meshtopass2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/meshtrianglemergeelem1.png b/doc/salome/gui/SMESH/images/meshtrianglemergeelem1.png
deleted file mode 100755 (executable)
index 0f9bd52..0000000
Binary files a/doc/salome/gui/SMESH/images/meshtrianglemergeelem1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/min_distance.png b/doc/salome/gui/SMESH/images/min_distance.png
deleted file mode 100644 (file)
index 294178f..0000000
Binary files a/doc/salome/gui/SMESH/images/min_distance.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/min_distance_preview.png b/doc/salome/gui/SMESH/images/min_distance_preview.png
deleted file mode 100644 (file)
index c5373d9..0000000
Binary files a/doc/salome/gui/SMESH/images/min_distance_preview.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/movenodes.png b/doc/salome/gui/SMESH/images/movenodes.png
deleted file mode 100755 (executable)
index 3027c76..0000000
Binary files a/doc/salome/gui/SMESH/images/movenodes.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/moving_nodes1.png b/doc/salome/gui/SMESH/images/moving_nodes1.png
deleted file mode 100755 (executable)
index 295b3a3..0000000
Binary files a/doc/salome/gui/SMESH/images/moving_nodes1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/moving_nodes2.png b/doc/salome/gui/SMESH/images/moving_nodes2.png
deleted file mode 100755 (executable)
index a89e8b3..0000000
Binary files a/doc/salome/gui/SMESH/images/moving_nodes2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/number_of_layers.png b/doc/salome/gui/SMESH/images/number_of_layers.png
deleted file mode 100644 (file)
index 8baa821..0000000
Binary files a/doc/salome/gui/SMESH/images/number_of_layers.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/opengl_clipping.png b/doc/salome/gui/SMESH/images/opengl_clipping.png
deleted file mode 100644 (file)
index 475151a..0000000
Binary files a/doc/salome/gui/SMESH/images/opengl_clipping.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/orientaation1.png b/doc/salome/gui/SMESH/images/orientaation1.png
deleted file mode 100755 (executable)
index b1c2ec0..0000000
Binary files a/doc/salome/gui/SMESH/images/orientaation1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/over_constrained_faces.png b/doc/salome/gui/SMESH/images/over_constrained_faces.png
deleted file mode 100644 (file)
index 9d584e8..0000000
Binary files a/doc/salome/gui/SMESH/images/over_constrained_faces.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/over_constrained_volumes.png b/doc/salome/gui/SMESH/images/over_constrained_volumes.png
deleted file mode 100644 (file)
index 7611443..0000000
Binary files a/doc/salome/gui/SMESH/images/over_constrained_volumes.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/pattern2d.png b/doc/salome/gui/SMESH/images/pattern2d.png
deleted file mode 100644 (file)
index ff488eb..0000000
Binary files a/doc/salome/gui/SMESH/images/pattern2d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/patternmapping1.png b/doc/salome/gui/SMESH/images/patternmapping1.png
deleted file mode 100755 (executable)
index e0eb867..0000000
Binary files a/doc/salome/gui/SMESH/images/patternmapping1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/patternmapping2.png b/doc/salome/gui/SMESH/images/patternmapping2.png
deleted file mode 100755 (executable)
index 5c8c520..0000000
Binary files a/doc/salome/gui/SMESH/images/patternmapping2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/point_marker_widget1.png b/doc/salome/gui/SMESH/images/point_marker_widget1.png
deleted file mode 100755 (executable)
index 3d788cd..0000000
Binary files a/doc/salome/gui/SMESH/images/point_marker_widget1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/point_marker_widget2.png b/doc/salome/gui/SMESH/images/point_marker_widget2.png
deleted file mode 100755 (executable)
index d44f388..0000000
Binary files a/doc/salome/gui/SMESH/images/point_marker_widget2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/pref21.png b/doc/salome/gui/SMESH/images/pref21.png
deleted file mode 100644 (file)
index b0d756f..0000000
Binary files a/doc/salome/gui/SMESH/images/pref21.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/pref22.png b/doc/salome/gui/SMESH/images/pref22.png
deleted file mode 100755 (executable)
index cf08621..0000000
Binary files a/doc/salome/gui/SMESH/images/pref22.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/pref23.png b/doc/salome/gui/SMESH/images/pref23.png
deleted file mode 100755 (executable)
index 23d804b..0000000
Binary files a/doc/salome/gui/SMESH/images/pref23.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/pref24.png b/doc/salome/gui/SMESH/images/pref24.png
deleted file mode 100755 (executable)
index 9a7a5a8..0000000
Binary files a/doc/salome/gui/SMESH/images/pref24.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/preview_mesh_1D.png b/doc/salome/gui/SMESH/images/preview_mesh_1D.png
deleted file mode 100644 (file)
index 3922a19..0000000
Binary files a/doc/salome/gui/SMESH/images/preview_mesh_1D.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/preview_mesh_2D.png b/doc/salome/gui/SMESH/images/preview_mesh_2D.png
deleted file mode 100644 (file)
index 55ec7b8..0000000
Binary files a/doc/salome/gui/SMESH/images/preview_mesh_2D.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/preview_tmp_data.png b/doc/salome/gui/SMESH/images/preview_tmp_data.png
deleted file mode 100644 (file)
index 6f9fb31..0000000
Binary files a/doc/salome/gui/SMESH/images/preview_tmp_data.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/prism_mesh.png b/doc/salome/gui/SMESH/images/prism_mesh.png
deleted file mode 100644 (file)
index 95a3121..0000000
Binary files a/doc/salome/gui/SMESH/images/prism_mesh.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/prism_needs_hyps.png b/doc/salome/gui/SMESH/images/prism_needs_hyps.png
deleted file mode 100644 (file)
index d56d430..0000000
Binary files a/doc/salome/gui/SMESH/images/prism_needs_hyps.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/prism_ok_ko.png b/doc/salome/gui/SMESH/images/prism_ok_ko.png
deleted file mode 100644 (file)
index 0394985..0000000
Binary files a/doc/salome/gui/SMESH/images/prism_ok_ko.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/prism_stack.png b/doc/salome/gui/SMESH/images/prism_stack.png
deleted file mode 100644 (file)
index bba6334..0000000
Binary files a/doc/salome/gui/SMESH/images/prism_stack.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/prism_tui_sample.png b/doc/salome/gui/SMESH/images/prism_tui_sample.png
deleted file mode 100644 (file)
index 0df7e48..0000000
Binary files a/doc/salome/gui/SMESH/images/prism_tui_sample.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/projection_1d.png b/doc/salome/gui/SMESH/images/projection_1d.png
deleted file mode 100644 (file)
index 6115327..0000000
Binary files a/doc/salome/gui/SMESH/images/projection_1d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/projection_2d.png b/doc/salome/gui/SMESH/images/projection_2d.png
deleted file mode 100644 (file)
index e137309..0000000
Binary files a/doc/salome/gui/SMESH/images/projection_2d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/projection_3d.png b/doc/salome/gui/SMESH/images/projection_3d.png
deleted file mode 100644 (file)
index 03eedc3..0000000
Binary files a/doc/salome/gui/SMESH/images/projection_3d.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/propagation_chain.png b/doc/salome/gui/SMESH/images/propagation_chain.png
deleted file mode 100644 (file)
index 420dee0..0000000
Binary files a/doc/salome/gui/SMESH/images/propagation_chain.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/quad_from_ma_medial_axis.png b/doc/salome/gui/SMESH/images/quad_from_ma_medial_axis.png
deleted file mode 100644 (file)
index b02ceab..0000000
Binary files a/doc/salome/gui/SMESH/images/quad_from_ma_medial_axis.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/quad_from_ma_mesh.png b/doc/salome/gui/SMESH/images/quad_from_ma_mesh.png
deleted file mode 100644 (file)
index 3e3c63b..0000000
Binary files a/doc/salome/gui/SMESH/images/quad_from_ma_mesh.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/quad_from_ma_ring_mesh.png b/doc/salome/gui/SMESH/images/quad_from_ma_ring_mesh.png
deleted file mode 100644 (file)
index 9a43e6d..0000000
Binary files a/doc/salome/gui/SMESH/images/quad_from_ma_ring_mesh.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/quad_mesh_invalid.png b/doc/salome/gui/SMESH/images/quad_mesh_invalid.png
deleted file mode 100644 (file)
index cce9980..0000000
Binary files a/doc/salome/gui/SMESH/images/quad_mesh_invalid.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/quad_meshes.png b/doc/salome/gui/SMESH/images/quad_meshes.png
deleted file mode 100644 (file)
index c6cbd0c..0000000
Binary files a/doc/salome/gui/SMESH/images/quad_meshes.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/radial_prism_mesh.png b/doc/salome/gui/SMESH/images/radial_prism_mesh.png
deleted file mode 100644 (file)
index 6d9a986..0000000
Binary files a/doc/salome/gui/SMESH/images/radial_prism_mesh.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/reduce_three_to_one.png b/doc/salome/gui/SMESH/images/reduce_three_to_one.png
deleted file mode 100644 (file)
index d5f4a38..0000000
Binary files a/doc/salome/gui/SMESH/images/reduce_three_to_one.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/remove.gif b/doc/salome/gui/SMESH/images/remove.gif
deleted file mode 100644 (file)
index 8b81cb2..0000000
Binary files a/doc/salome/gui/SMESH/images/remove.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/remove.png b/doc/salome/gui/SMESH/images/remove.png
deleted file mode 100755 (executable)
index cbf4069..0000000
Binary files a/doc/salome/gui/SMESH/images/remove.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/remove_elements1.png b/doc/salome/gui/SMESH/images/remove_elements1.png
deleted file mode 100755 (executable)
index 538460f..0000000
Binary files a/doc/salome/gui/SMESH/images/remove_elements1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/remove_elements2.png b/doc/salome/gui/SMESH/images/remove_elements2.png
deleted file mode 100755 (executable)
index 888188c..0000000
Binary files a/doc/salome/gui/SMESH/images/remove_elements2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/remove_elements_icon.png b/doc/salome/gui/SMESH/images/remove_elements_icon.png
deleted file mode 100644 (file)
index 2a31c3e..0000000
Binary files a/doc/salome/gui/SMESH/images/remove_elements_icon.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/remove_nodes1.png b/doc/salome/gui/SMESH/images/remove_nodes1.png
deleted file mode 100755 (executable)
index 94caae6..0000000
Binary files a/doc/salome/gui/SMESH/images/remove_nodes1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/remove_nodes2.png b/doc/salome/gui/SMESH/images/remove_nodes2.png
deleted file mode 100755 (executable)
index e9f8064..0000000
Binary files a/doc/salome/gui/SMESH/images/remove_nodes2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/remove_nodes_icon.png b/doc/salome/gui/SMESH/images/remove_nodes_icon.png
deleted file mode 100644 (file)
index 0818837..0000000
Binary files a/doc/salome/gui/SMESH/images/remove_nodes_icon.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/remove_orphan_nodes_icon.png b/doc/salome/gui/SMESH/images/remove_orphan_nodes_icon.png
deleted file mode 100644 (file)
index 16df2e5..0000000
Binary files a/doc/salome/gui/SMESH/images/remove_orphan_nodes_icon.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/removeelements.png b/doc/salome/gui/SMESH/images/removeelements.png
deleted file mode 100755 (executable)
index 78e4959..0000000
Binary files a/doc/salome/gui/SMESH/images/removeelements.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/removenodes.png b/doc/salome/gui/SMESH/images/removenodes.png
deleted file mode 100755 (executable)
index 52a5ac6..0000000
Binary files a/doc/salome/gui/SMESH/images/removenodes.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/removeorphannodes.png b/doc/salome/gui/SMESH/images/removeorphannodes.png
deleted file mode 100644 (file)
index fdf8395..0000000
Binary files a/doc/salome/gui/SMESH/images/removeorphannodes.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/renumberelements.png b/doc/salome/gui/SMESH/images/renumberelements.png
deleted file mode 100755 (executable)
index 0f09c6a..0000000
Binary files a/doc/salome/gui/SMESH/images/renumberelements.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/renumbernodes.png b/doc/salome/gui/SMESH/images/renumbernodes.png
deleted file mode 100755 (executable)
index 46fe28b..0000000
Binary files a/doc/salome/gui/SMESH/images/renumbernodes.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/reorient_2d_face.png b/doc/salome/gui/SMESH/images/reorient_2d_face.png
deleted file mode 100644 (file)
index 0407faf..0000000
Binary files a/doc/salome/gui/SMESH/images/reorient_2d_face.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/reorient_2d_point.png b/doc/salome/gui/SMESH/images/reorient_2d_point.png
deleted file mode 100644 (file)
index 8440c91..0000000
Binary files a/doc/salome/gui/SMESH/images/reorient_2d_point.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/reorient_2d_volume.png b/doc/salome/gui/SMESH/images/reorient_2d_volume.png
deleted file mode 100644 (file)
index 1d04de0..0000000
Binary files a/doc/salome/gui/SMESH/images/reorient_2d_volume.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/reorient_faces_face.png b/doc/salome/gui/SMESH/images/reorient_faces_face.png
deleted file mode 100644 (file)
index 23c241f..0000000
Binary files a/doc/salome/gui/SMESH/images/reorient_faces_face.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/rev_edges_helper_dlg.png b/doc/salome/gui/SMESH/images/rev_edges_helper_dlg.png
deleted file mode 100644 (file)
index e8790a1..0000000
Binary files a/doc/salome/gui/SMESH/images/rev_edges_helper_dlg.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/revolution1.png b/doc/salome/gui/SMESH/images/revolution1.png
deleted file mode 100644 (file)
index 5f75d5d..0000000
Binary files a/doc/salome/gui/SMESH/images/revolution1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/revolutionsn1.png b/doc/salome/gui/SMESH/images/revolutionsn1.png
deleted file mode 100644 (file)
index 3e7a7a1..0000000
Binary files a/doc/salome/gui/SMESH/images/revolutionsn1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/revolutionsn2.png b/doc/salome/gui/SMESH/images/revolutionsn2.png
deleted file mode 100644 (file)
index 064dd6c..0000000
Binary files a/doc/salome/gui/SMESH/images/revolutionsn2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/rotation.png b/doc/salome/gui/SMESH/images/rotation.png
deleted file mode 100755 (executable)
index c8f11e6..0000000
Binary files a/doc/salome/gui/SMESH/images/rotation.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/rotation1.png b/doc/salome/gui/SMESH/images/rotation1.png
deleted file mode 100755 (executable)
index 5a4ad99..0000000
Binary files a/doc/salome/gui/SMESH/images/rotation1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/rotation2.png b/doc/salome/gui/SMESH/images/rotation2.png
deleted file mode 100755 (executable)
index 366771a..0000000
Binary files a/doc/salome/gui/SMESH/images/rotation2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/rotation_ico.png b/doc/salome/gui/SMESH/images/rotation_ico.png
deleted file mode 100755 (executable)
index 8f3d4bf..0000000
Binary files a/doc/salome/gui/SMESH/images/rotation_ico.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/scalar_bar_dlg.png b/doc/salome/gui/SMESH/images/scalar_bar_dlg.png
deleted file mode 100755 (executable)
index 564689a..0000000
Binary files a/doc/salome/gui/SMESH/images/scalar_bar_dlg.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/scale01.png b/doc/salome/gui/SMESH/images/scale01.png
deleted file mode 100644 (file)
index 685bbc1..0000000
Binary files a/doc/salome/gui/SMESH/images/scale01.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/scale02.png b/doc/salome/gui/SMESH/images/scale02.png
deleted file mode 100644 (file)
index 982f468..0000000
Binary files a/doc/salome/gui/SMESH/images/scale02.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/scale03.png b/doc/salome/gui/SMESH/images/scale03.png
deleted file mode 100644 (file)
index 891ae8d..0000000
Binary files a/doc/salome/gui/SMESH/images/scale03.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/scale04.png b/doc/salome/gui/SMESH/images/scale04.png
deleted file mode 100644 (file)
index a042834..0000000
Binary files a/doc/salome/gui/SMESH/images/scale04.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/scale06.png b/doc/salome/gui/SMESH/images/scale06.png
deleted file mode 100644 (file)
index 2bd8219..0000000
Binary files a/doc/salome/gui/SMESH/images/scale06.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/scale07.png b/doc/salome/gui/SMESH/images/scale07.png
deleted file mode 100644 (file)
index 8ee0923..0000000
Binary files a/doc/salome/gui/SMESH/images/scale07.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/scale09.png b/doc/salome/gui/SMESH/images/scale09.png
deleted file mode 100644 (file)
index 2816bac..0000000
Binary files a/doc/salome/gui/SMESH/images/scale09.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/scaleinit01.png b/doc/salome/gui/SMESH/images/scaleinit01.png
deleted file mode 100644 (file)
index 97990a8..0000000
Binary files a/doc/salome/gui/SMESH/images/scaleinit01.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/scaleinit02.png b/doc/salome/gui/SMESH/images/scaleinit02.png
deleted file mode 100644 (file)
index 008d2e3..0000000
Binary files a/doc/salome/gui/SMESH/images/scaleinit02.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/scaleres03.png b/doc/salome/gui/SMESH/images/scaleres03.png
deleted file mode 100644 (file)
index 99b65d7..0000000
Binary files a/doc/salome/gui/SMESH/images/scaleres03.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/scaleres04.png b/doc/salome/gui/SMESH/images/scaleres04.png
deleted file mode 100644 (file)
index 0880989..0000000
Binary files a/doc/salome/gui/SMESH/images/scaleres04.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/scaleres06.png b/doc/salome/gui/SMESH/images/scaleres06.png
deleted file mode 100644 (file)
index 059fa97..0000000
Binary files a/doc/salome/gui/SMESH/images/scaleres06.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/scaleres07.png b/doc/salome/gui/SMESH/images/scaleres07.png
deleted file mode 100644 (file)
index b75f83c..0000000
Binary files a/doc/salome/gui/SMESH/images/scaleres07.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/scaleres09.png b/doc/salome/gui/SMESH/images/scaleres09.png
deleted file mode 100644 (file)
index 4708be5..0000000
Binary files a/doc/salome/gui/SMESH/images/scaleres09.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/selectionfilterlibrary.png b/doc/salome/gui/SMESH/images/selectionfilterlibrary.png
deleted file mode 100755 (executable)
index 38f297b..0000000
Binary files a/doc/salome/gui/SMESH/images/selectionfilterlibrary.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/sew_after_merge.png b/doc/salome/gui/SMESH/images/sew_after_merge.png
deleted file mode 100644 (file)
index 43d6869..0000000
Binary files a/doc/salome/gui/SMESH/images/sew_after_merge.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/sew_using_merge.png b/doc/salome/gui/SMESH/images/sew_using_merge.png
deleted file mode 100644 (file)
index 80cc44c..0000000
Binary files a/doc/salome/gui/SMESH/images/sew_using_merge.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/sewing.png b/doc/salome/gui/SMESH/images/sewing.png
deleted file mode 100755 (executable)
index fcd2dfd..0000000
Binary files a/doc/salome/gui/SMESH/images/sewing.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/sewing1.png b/doc/salome/gui/SMESH/images/sewing1.png
deleted file mode 100644 (file)
index 55e0d83..0000000
Binary files a/doc/salome/gui/SMESH/images/sewing1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/sewing2.png b/doc/salome/gui/SMESH/images/sewing2.png
deleted file mode 100644 (file)
index 2ba3e43..0000000
Binary files a/doc/salome/gui/SMESH/images/sewing2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/sewing3.png b/doc/salome/gui/SMESH/images/sewing3.png
deleted file mode 100644 (file)
index d2d97d5..0000000
Binary files a/doc/salome/gui/SMESH/images/sewing3.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/sewing4.png b/doc/salome/gui/SMESH/images/sewing4.png
deleted file mode 100644 (file)
index ad66682..0000000
Binary files a/doc/salome/gui/SMESH/images/sewing4.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/sewing_auto.png b/doc/salome/gui/SMESH/images/sewing_auto.png
deleted file mode 100644 (file)
index f81cfe2..0000000
Binary files a/doc/salome/gui/SMESH/images/sewing_auto.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/sewing_manual.png b/doc/salome/gui/SMESH/images/sewing_manual.png
deleted file mode 100644 (file)
index ff125bc..0000000
Binary files a/doc/salome/gui/SMESH/images/sewing_manual.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/show_bad_mesh.png b/doc/salome/gui/SMESH/images/show_bad_mesh.png
deleted file mode 100644 (file)
index 9c17681..0000000
Binary files a/doc/salome/gui/SMESH/images/show_bad_mesh.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/smesh_sort.png b/doc/salome/gui/SMESH/images/smesh_sort.png
deleted file mode 100644 (file)
index 0b00568..0000000
Binary files a/doc/salome/gui/SMESH/images/smesh_sort.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/smesh_sort_groups.png b/doc/salome/gui/SMESH/images/smesh_sort_groups.png
deleted file mode 100644 (file)
index 0176a30..0000000
Binary files a/doc/salome/gui/SMESH/images/smesh_sort_groups.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/smoothing.png b/doc/salome/gui/SMESH/images/smoothing.png
deleted file mode 100755 (executable)
index 26a427e..0000000
Binary files a/doc/salome/gui/SMESH/images/smoothing.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/smoothing1.png b/doc/salome/gui/SMESH/images/smoothing1.png
deleted file mode 100644 (file)
index 567bab5..0000000
Binary files a/doc/salome/gui/SMESH/images/smoothing1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/smoothing2.png b/doc/salome/gui/SMESH/images/smoothing2.png
deleted file mode 100644 (file)
index 45ce704..0000000
Binary files a/doc/salome/gui/SMESH/images/smoothing2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/sort.gif b/doc/salome/gui/SMESH/images/sort.gif
deleted file mode 100644 (file)
index 28a5dff..0000000
Binary files a/doc/salome/gui/SMESH/images/sort.gif and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/sort.png b/doc/salome/gui/SMESH/images/sort.png
deleted file mode 100755 (executable)
index 1dcf44a..0000000
Binary files a/doc/salome/gui/SMESH/images/sort.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/split_biquad_to_linear_dlg.png b/doc/salome/gui/SMESH/images/split_biquad_to_linear_dlg.png
deleted file mode 100644 (file)
index c3df009..0000000
Binary files a/doc/salome/gui/SMESH/images/split_biquad_to_linear_dlg.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/split_biquad_to_linear_icon.png b/doc/salome/gui/SMESH/images/split_biquad_to_linear_icon.png
deleted file mode 100644 (file)
index 0b9b7a0..0000000
Binary files a/doc/salome/gui/SMESH/images/split_biquad_to_linear_icon.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/split_biquad_to_linear_mesh.png b/doc/salome/gui/SMESH/images/split_biquad_to_linear_mesh.png
deleted file mode 100644 (file)
index 4a25e8f..0000000
Binary files a/doc/salome/gui/SMESH/images/split_biquad_to_linear_mesh.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/split_into_prisms.png b/doc/salome/gui/SMESH/images/split_into_prisms.png
deleted file mode 100644 (file)
index 6d48e69..0000000
Binary files a/doc/salome/gui/SMESH/images/split_into_prisms.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/split_into_tetra.png b/doc/salome/gui/SMESH/images/split_into_tetra.png
deleted file mode 100644 (file)
index a54f445..0000000
Binary files a/doc/salome/gui/SMESH/images/split_into_tetra.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/split_into_tetra_icon.png b/doc/salome/gui/SMESH/images/split_into_tetra_icon.png
deleted file mode 100644 (file)
index c9ea7b4..0000000
Binary files a/doc/salome/gui/SMESH/images/split_into_tetra_icon.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/std_point_marker.png b/doc/salome/gui/SMESH/images/std_point_marker.png
deleted file mode 100755 (executable)
index 2a62693..0000000
Binary files a/doc/salome/gui/SMESH/images/std_point_marker.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/straight_after.png b/doc/salome/gui/SMESH/images/straight_after.png
deleted file mode 100644 (file)
index 4572fea..0000000
Binary files a/doc/salome/gui/SMESH/images/straight_after.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/straight_before.png b/doc/salome/gui/SMESH/images/straight_before.png
deleted file mode 100644 (file)
index 200aad8..0000000
Binary files a/doc/salome/gui/SMESH/images/straight_before.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/swap.png b/doc/salome/gui/SMESH/images/swap.png
deleted file mode 100644 (file)
index 6470710..0000000
Binary files a/doc/salome/gui/SMESH/images/swap.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/symmetry.png b/doc/salome/gui/SMESH/images/symmetry.png
deleted file mode 100755 (executable)
index 64fd26c..0000000
Binary files a/doc/salome/gui/SMESH/images/symmetry.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/symmetry1.png b/doc/salome/gui/SMESH/images/symmetry1.png
deleted file mode 100755 (executable)
index 879a41d..0000000
Binary files a/doc/salome/gui/SMESH/images/symmetry1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/symmetry2.png b/doc/salome/gui/SMESH/images/symmetry2.png
deleted file mode 100755 (executable)
index 83d2338..0000000
Binary files a/doc/salome/gui/SMESH/images/symmetry2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/symmetry3.png b/doc/salome/gui/SMESH/images/symmetry3.png
deleted file mode 100755 (executable)
index 8654659..0000000
Binary files a/doc/salome/gui/SMESH/images/symmetry3.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/topo_equality.png b/doc/salome/gui/SMESH/images/topo_equality.png
deleted file mode 100644 (file)
index 119251a..0000000
Binary files a/doc/salome/gui/SMESH/images/topo_equality.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/translation.png b/doc/salome/gui/SMESH/images/translation.png
deleted file mode 100755 (executable)
index 2362d79..0000000
Binary files a/doc/salome/gui/SMESH/images/translation.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/translation1.png b/doc/salome/gui/SMESH/images/translation1.png
deleted file mode 100755 (executable)
index 790e365..0000000
Binary files a/doc/salome/gui/SMESH/images/translation1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/translation2.png b/doc/salome/gui/SMESH/images/translation2.png
deleted file mode 100755 (executable)
index 5df23cc..0000000
Binary files a/doc/salome/gui/SMESH/images/translation2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/union_groups1.png b/doc/salome/gui/SMESH/images/union_groups1.png
deleted file mode 100644 (file)
index 598c33d..0000000
Binary files a/doc/salome/gui/SMESH/images/union_groups1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/uniongroups.png b/doc/salome/gui/SMESH/images/uniongroups.png
deleted file mode 100755 (executable)
index 831f3cf..0000000
Binary files a/doc/salome/gui/SMESH/images/uniongroups.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/unionoftwotriangles.png b/doc/salome/gui/SMESH/images/unionoftwotriangles.png
deleted file mode 100755 (executable)
index e897cfa..0000000
Binary files a/doc/salome/gui/SMESH/images/unionoftwotriangles.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/uniting_a_set_of_triangles1.png b/doc/salome/gui/SMESH/images/uniting_a_set_of_triangles1.png
deleted file mode 100755 (executable)
index fb00167..0000000
Binary files a/doc/salome/gui/SMESH/images/uniting_a_set_of_triangles1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/uniting_a_set_of_triangles2.png b/doc/salome/gui/SMESH/images/uniting_a_set_of_triangles2.png
deleted file mode 100755 (executable)
index 16d1351..0000000
Binary files a/doc/salome/gui/SMESH/images/uniting_a_set_of_triangles2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/uniting_two_triangles1.png b/doc/salome/gui/SMESH/images/uniting_two_triangles1.png
deleted file mode 100755 (executable)
index e94be3a..0000000
Binary files a/doc/salome/gui/SMESH/images/uniting_two_triangles1.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/uniting_two_triangles2.png b/doc/salome/gui/SMESH/images/uniting_two_triangles2.png
deleted file mode 100755 (executable)
index 5cac5f5..0000000
Binary files a/doc/salome/gui/SMESH/images/uniting_two_triangles2.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/use_existing_face_sample_mesh.png b/doc/salome/gui/SMESH/images/use_existing_face_sample_mesh.png
deleted file mode 100644 (file)
index 2110540..0000000
Binary files a/doc/salome/gui/SMESH/images/use_existing_face_sample_mesh.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/using_notebook_smesh.png b/doc/salome/gui/SMESH/images/using_notebook_smesh.png
deleted file mode 100644 (file)
index 0946bff..0000000
Binary files a/doc/salome/gui/SMESH/images/using_notebook_smesh.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/viscous_layers_2d_hyp.png b/doc/salome/gui/SMESH/images/viscous_layers_2d_hyp.png
deleted file mode 100644 (file)
index f9b952f..0000000
Binary files a/doc/salome/gui/SMESH/images/viscous_layers_2d_hyp.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/viscous_layers_extrusion_method.png b/doc/salome/gui/SMESH/images/viscous_layers_extrusion_method.png
deleted file mode 100644 (file)
index cf6fe21..0000000
Binary files a/doc/salome/gui/SMESH/images/viscous_layers_extrusion_method.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/viscous_layers_hyp.png b/doc/salome/gui/SMESH/images/viscous_layers_hyp.png
deleted file mode 100644 (file)
index b7bbffb..0000000
Binary files a/doc/salome/gui/SMESH/images/viscous_layers_hyp.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/viscous_layers_mesh.png b/doc/salome/gui/SMESH/images/viscous_layers_mesh.png
deleted file mode 100644 (file)
index 9373a5e..0000000
Binary files a/doc/salome/gui/SMESH/images/viscous_layers_mesh.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/images/viscous_layers_on_submesh.png b/doc/salome/gui/SMESH/images/viscous_layers_on_submesh.png
deleted file mode 100644 (file)
index 3897baa..0000000
Binary files a/doc/salome/gui/SMESH/images/viscous_layers_on_submesh.png and /dev/null differ
diff --git a/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst b/doc/salome/gui/SMESH/input/1d_meshing_hypo.rst
deleted file mode 100644 (file)
index 4fc4c2d..0000000
+++ /dev/null
@@ -1,303 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/2d_meshing_hypo.rst
deleted file mode 100644 (file)
index f3987d7..0000000
+++ /dev/null
@@ -1,175 +0,0 @@
-.. _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
-#####################
-
-**Quadrangle parameters** is a hypothesis for :ref:`quad_ijk_algo_page`.
-
-Quadrangle parameters dialog includes four tab pages:
-
-- :ref:`Transition <transition_anchor>`
-- :ref:`Base vertex <base_vertex_anchor>`
-- :ref:`Corner Vertices <corner_vertices_anchor>`
-- :ref:`Enforced nodes <enforced_nodes_anchor>`
-
-.. _transition_anchor:
-
-Transition tab
---------------
-
-.. image:: ../images/ hypo_quad_params_dialog.png 
-       :align: center
-
-.. centered::
-       Quadrangle parameters: Transition
-
-**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_anchor:
-
-Base vertex tab
----------------
-
-.. image:: ../images/ hypo_quad_params_dialog_vert.png 
-       :align: center
-
-.. centered::
-       Quadrangle parameters: Base Vertex
-
-**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_1.png 
-       :align: center
-
-.. centered::
-       A face built from 3 edges and 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). 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_2.png 
-       :align: center
-
-.. centered:: 
-       3/4 of a circular face and the resulting meshes
-
-
-.. _corner_vertices_anchor:
-
-Corner Vertices tab
--------------------
-
-.. image:: ../images/hypo_quad_params_dialog_corners.png 
-       :align: center
-
-.. centered::
-       Quadrangle parameters: Corner Vertices
-
-**Corner Vertices** tab page allows specifying vertices that should be used as quadrangle corners. This can be useful for faces with more than four vertices, since in some cases Quadrangle Mapping algorithm chooses corner vertices differently than it is desired. **Quadrangle parameters** hypothesis can be global and define corners for all CAD faces that require it, but be sure that each specified vertex is a corner in all faces the hypothesis will be applied to.
-
-
-.. _enforced_nodes_anchor:
-
-Enforced nodes tab
-------------------
-
-.. 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/3d_meshing_hypo.rst b/doc/salome/gui/SMESH/input/3d_meshing_hypo.rst
deleted file mode 100644 (file)
index bef317c..0000000
+++ /dev/null
@@ -1,42 +0,0 @@
-.. _a3d_meshing_hypo_page:
-
-*********************
-3D Meshing Hypotheses
-*********************
-
-.. _max_element_volume_hypo:
-
-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.  
-
-.. _block_renumber_hypo:
-
-Renumber hypothesis
-###################
-
-**Renumber** hypothesis is applied for meshing of 3D objects along with **Hexahedron (i,j,k)** algorithm.
-
-Order and hence numbering of hexahedral elements in the structured mesh generated by **Hexahedron (ijk)** algorithm depends on the order of faces in a block geometry. Nodes are not in a structured order, since geometrical edges and faces are discretized before construction of hexahedra. **Renumber** hypothesis allows for getting hexahedra and nodes ordered like in a structured grid.
-
-.. image:: ../images/block_renumber_hyp.png
-       :align: center
-
-**Renumber** hypothesis allows to define direction of **i, j** and **k** axes of a block. For that you specify two vertices of the block
-
-* **Vertex (0,0,0)** located at the origin of the block local coordinate system.
-* **Vertex (0,0,1)** located at the end of **k** axis of the block.
-
-Axes **i** and **j** are found automatically using the right-hand rule.
-
-For blocks with edges parallel to the axes of global coordinate system, their local coordinate system by default is defined as having axes parallel to the global ones. So, for such blocks specification of vertices is optional, it is enough just to assign **Renumber** hypothesis.
-
-**See Also** a sample TUI Script of a :ref:`tui_block_renumber` operation.  
-
-
diff --git a/doc/salome/gui/SMESH/input/StdMeshersBuilder.rst b/doc/salome/gui/SMESH/input/StdMeshersBuilder.rst
deleted file mode 100644 (file)
index a1bf1d4..0000000
+++ /dev/null
@@ -1,9 +0,0 @@
-smesh_algorithm module
-======================
-.. automodule:: smesh_algorithm
-   :members:
-
-StdMeshersBuilder module
-========================
-.. automodule:: StdMeshersBuilder
-   :members:
diff --git a/doc/salome/gui/SMESH/input/about_filters.rst b/doc/salome/gui/SMESH/input/about_filters.rst
deleted file mode 100644 (file)
index c2cfce9..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-.. _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 functionality 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.rst b/doc/salome/gui/SMESH/input/about_hypo.rst
deleted file mode 100644 (file)
index a4609d9..0000000
+++ /dev/null
@@ -1,31 +0,0 @@
-.. _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:`a3d_meshing_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_meshing_hypo.rst
-   additional_hypo.rst 
-
diff --git a/doc/salome/gui/SMESH/input/about_meshes.rst b/doc/salome/gui/SMESH/input/about_meshes.rst
deleted file mode 100644 (file)
index abb8067..0000000
+++ /dev/null
@@ -1,85 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/about_quality_controls.rst
deleted file mode 100644 (file)
index 63b20dd..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/adding_nodes_and_elements.rst
deleted file mode 100644 (file)
index d2df5f2..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/adding_quadratic_elements.rst
deleted file mode 100644 (file)
index 2bcba51..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-                                    
-.. _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.rst b/doc/salome/gui/SMESH/input/additional_hypo.rst
deleted file mode 100644 (file)
index 6fa98f9..0000000
+++ /dev/null
@@ -1,169 +0,0 @@
-.. _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.
-
-* **Create groups from layers** - activates creation of a group containing elements of the layers.
-
-  .. 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.rst b/doc/salome/gui/SMESH/input/area.rst
deleted file mode 100644 (file)
index 11bbddd..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-
-.. _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.rst b/doc/salome/gui/SMESH/input/aspect_ratio.rst
deleted file mode 100644 (file)
index 2199d5b..0000000
+++ /dev/null
@@ -1,33 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/aspect_ratio_3d.rst
deleted file mode 100644 (file)
index dd1ac91..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/bare_border_face.rst
deleted file mode 100644 (file)
index fd50742..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/bare_border_volumes.rst
deleted file mode 100644 (file)
index d58673d..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/basic_meshing_algos.rst
deleted file mode 100644 (file)
index d636b15..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-.. _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 (menu **Help / User's Guide / Mesh module / Plugins**).
-
-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.
-   * **Polyhedron per Solid** meshing algorithm - generates one mesh volume (of a classical type or a polyhedron) per a geometrical solid using all faces of the solid boundary. It does not require that 2D mesh is generated on geometrical faces. It creates one mesh edge per geometrical edges and applies **Polygon per Face** to faces if they are not meshed by optional algorithms of lower dimensions.
-   * :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.rst b/doc/salome/gui/SMESH/input/borders_at_multi_connection.rst
deleted file mode 100644 (file)
index b7dce97..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/borders_at_multi_connection_2d.rst
deleted file mode 100644 (file)
index 7494952..0000000
+++ /dev/null
@@ -1,12 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/building_compounds.rst
deleted file mode 100644 (file)
index f7d41d1..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-.. _building_compounds_page:
-
-************************
-Building Compound Meshes
-************************
-
-Compound Mesh is a combination of several mesh objects (meshes, groups, submeshes). 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 mesh objects.
-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.
-
-There are two modes of building a compound:
-
-* joining selected mesh objects into a new mesh.
-* appending selected mesh objects to an existing 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
-
-* **Result** group allows selecting a mode of operation
-
-  * Activating **Create new mesh named** enables typing the name of the resulting compound mesh.
-  * Activating **Append to mesh** enables selection of a mesh to append other selected objects to.
-   
-* **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.rst b/doc/salome/gui/SMESH/input/cartesian_algo.rst
deleted file mode 100644 (file)
index 76b150e..0000000
+++ /dev/null
@@ -1,83 +0,0 @@
-.. _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
-
-.. note:: The algorithm creates only 3D elements. To add 2D elements use :ref:`Generate boundary elements <make_2dmesh_from_3d_page>` operation.
-
-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
-
-* **Create Faces** check-box activates creation on mesh faces.
-* **Consider Shared and Internal Faces** check-box activates treatment of faces shared by solids and internal. By default the algorithm considers only outer boundaries of the geometry.
-* **Apply Threshold to Shared / Internal Faces** check-box activates application of **Threshold** to cells cut by shared and internal faces, that can cause appearance of holes inside the mesh.
-* **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.
-
-.. note:: The actual grid spacing can slightly differ from the defined one. This is done for the best fitting of polyhedrons and for a better mesh quality on the interval boundaries. For example, if a constant **Spacing** is defined along an axis, the actual grid will fill the shape's dimension L along this axis with round number of equal cells: Spacing_actual = L / round( L / Spacing_defined ).
-  
-* **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.rst b/doc/salome/gui/SMESH/input/changing_orientation_of_elements.rst
deleted file mode 100644 (file)
index 61f979c..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/clipping.rst
deleted file mode 100644 (file)
index 6cafd29..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/colors_size.rst
deleted file mode 100644 (file)
index 56a9ab1..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/connectivity.rst
deleted file mode 100644 (file)
index c487d71..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/constructing_meshes.rst
deleted file mode 100644 (file)
index 05c4c0d..0000000
+++ /dev/null
@@ -1,408 +0,0 @@
-.. _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::
-      * 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 their :ref:`default priority <submesh_priority>`. Changing priority works in two ways:
-
-* For sub-meshes with assigned algorithms of same dimension generating mesh of *several dimensions*, it sets the order in which the sub-meshes are computed.
-* For the rest sub-meshes, it sets the order in which the sub-meshes are checked when looking for  meshing parameters to apply to a sub-shape. Examples below present this way. To impose the order in which sub-meshes with uni-dimensional algorithms are computed, invoke **Compute Sub-mesh** command on sub-meshes in a desired order.
-
-
-*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.rst b/doc/salome/gui/SMESH/input/constructing_submeshes.rst
deleted file mode 100644 (file)
index a2a6dd2..0000000
+++ /dev/null
@@ -1,147 +0,0 @@
-.. _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. Elements generated on a sub-shape can be retrieved without
-explicit creation of a sub-mesh by creating a *Group on Geometry* using
-:ref:`Create Groups from Geometry <create_groups_from_geometry_page>` dialog.
-
-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 Object 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.rst b/doc/salome/gui/SMESH/input/convert_to_from_quadratic_mesh.rst
deleted file mode 100644 (file)
index cd2a3e8..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/copy_mesh.rst
deleted file mode 100644 (file)
index 1d1b975..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-.. _copy_mesh_page:
-
-*********
-Copy Mesh
-*********
-
-A mesh can be created by copying a part of or the whole other mesh. There are two modes of the operation:
-
-* copy mesh elements only;
-* copy mesh definition to another geometry. This mode can be used only if the source mesh is based on geometry. It is supposed that the new geometry is a modified geometry of the source 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:
-
-* select the mode of the operation.
-* 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**;
-* select the **New Geometry**;
-* specify the conditions of copying:
-
-  * activate **Generate groups** check-box to copy the groups of the source mesh to the newly created mesh. In the mode of copying to new geometry, standalone groups are copied only if **Copy Mesh Elements** is activated.
-  * activate **Reuse hypotheses** check-box to use hypotheses applied to the source mesh in the new mesh. Hypotheses having parameters defined as sub-shapes will be copied independently of this check-box state.
-  * activate **Copy Mesh Element** to copy mesh elements of sub-shapes that are not modified.
-
-* Click **Apply** or **Apply and Close** button to confirm the operation.
-
----------------------------------------------------
-Limitations of copying the mesh to the new geometry
----------------------------------------------------
-
-It can happen that a sub-shape used to define a sub-mesh, group or hypotheses is not found in the new geometry. In this case a new object depending on the not found sub-shape is marked with red color in the Object Browser in order to allow identifying such objects and to fix them, either by modifying their definition or by removing. If a depending object is a group on geometry, a standalone group is created instead. You can't transform it to a group on geometry, it can only be removed and re-created anew.
-
-Empty standalone groups are not constructed.
-
-**See Also** a sample script of :ref:`tui_copy_mesh`.
-
diff --git a/doc/salome/gui/SMESH/input/create_groups_from_geometry.rst b/doc/salome/gui/SMESH/input/create_groups_from_geometry.rst
deleted file mode 100644 (file)
index 70f3a58..0000000
+++ /dev/null
@@ -1,20 +0,0 @@
-.. _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.
-
-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.rst b/doc/salome/gui/SMESH/input/creating_groups.rst
deleted file mode 100644 (file)
index a66df15..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-.. _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 Object 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.rst b/doc/salome/gui/SMESH/input/cut_mesh_by_plane.rst
deleted file mode 100644 (file)
index d0a482e..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/cutting_quadrangles.rst
deleted file mode 100644 (file)
index 21c3311..0000000
+++ /dev/null
@@ -1,57 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/define_mesh_by_script.rst
deleted file mode 100644 (file)
index 43d7f89..0000000
+++ /dev/null
@@ -1,28 +0,0 @@
-.. _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.
-     * Nodes and elements created in your script must be assigned to geometry entities by calling *SetMeshElementOnShape*, *SetNodeOnVertex*, *SetNodeOnEdge* etc. in order to be used by an algorithm of upper dimension.
-
-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/deleting_groups.rst b/doc/salome/gui/SMESH/input/deleting_groups.rst
deleted file mode 100644 (file)
index 8b2038c..0000000
+++ /dev/null
@@ -1,17 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/diagonal_inversion_of_elements.rst
deleted file mode 100644 (file)
index 71302bb..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/display_entity.rst
deleted file mode 100644 (file)
index 09eb03a..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/display_mode.rst
deleted file mode 100644 (file)
index 8414ebf..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/double_elements_control.rst
deleted file mode 100644 (file)
index 1286bcc..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/double_nodes_control.rst
deleted file mode 100644 (file)
index 816f29d..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/double_nodes_page.rst
deleted file mode 100644 (file)
index 104efb1..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/editing_groups.rst
deleted file mode 100644 (file)
index b00f956..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/editing_meshes.rst
deleted file mode 100644 (file)
index 09f63fb..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/extrusion.rst
deleted file mode 100644 (file)
index 3cee68e..0000000
+++ /dev/null
@@ -1,167 +0,0 @@
-.. _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 factors** is checked, is which case the scale factors are spread over all extrusion steps.
-               * **Base point** serving as a scaling canter 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.
-
-        * The elements can also be rotated around the **Base point** to get the resulting mesh in a helical fashion. You can set the values of **Rotation angles** to the list by pressing the *"Add"* button |add| and remove them from the list by pressing the *"Remove"* button |rm|.
-
-          **Linear variation of 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 )*.
-
-       * 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.rst b/doc/salome/gui/SMESH/input/extrusion_along_path.rst
deleted file mode 100644 (file)
index ce226f8..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-.. _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 with rotation center at the **Base point** to get the resulting mesh in a helical fashion. You can set the values of angles at the right, add them to **Rotation angles** list at the left by pressing the *"Add"* button |add| and remove them from the list by pressing the *"Remove"* button |rem|.
-
-     **Linear variation of 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 )*.
-
-   * Each of optional **Scale factors** in the list is applied to nodes of a corresponding extrusion step unless **Linear variation of factors** is checked, is which case the scale factors are spread over all extrusion steps. **Base point** serves as a scaling canter.
-       * *"Add"* button |add| adds a scale factor to the list.   
-       * *"Remove"* button |rem| removes selected scale factors from the list.
-
-
-#. 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/face_groups_by_sharp_edges.rst b/doc/salome/gui/SMESH/input/face_groups_by_sharp_edges.rst
deleted file mode 100644 (file)
index eed6996..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-************************************
-Face Groups Separated By Sharp Edges
-************************************
-
-**Face groups separated by sharp edges** operation distributes all faces of the mesh among groups using sharp edges and optionally existing 1D elements as group boundaries. Edges where more than two faces meet are always considered as a group boundary. The operation is available in **Mesh** menu.
-
-The operation dialog looks as follows:
-
-.. image:: ../images/groups_by_sharp_edges_dlg.png
-       :align: center
-
-In this dialog box specify
-
-       * **Mesh** including the faces to distribute among groups.
-        * **Sharp angle** in degrees, by which edges used as group boundaries are detected. An edge is considered as a group boundary if an angle between normals of adjacent faces is more than this angle.
-       * Activate **Create edges** option if you wish that 1D elements to be created (if not yet exist) on the edges that served as group boundaries.
-       * Activate **Use existing edges** option if you wish that existing 1D elements to be used as group boundaries.
-       * Activate **Preview** to see the edges that will be used as group boundaries highlighted in the Viewer.
-
-
-.. image:: ../images/Nut_sharp_edges.png
-       :align: center
-
-.. centered:: 
-       **Preview of boundary edges detected at Sharp Angle = 10 degrees**
-
-**See Also** a sample TUI Script of a :ref:`tui_groups_by_sharp_edges` 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
deleted file mode 100644 (file)
index 1fd4ba7..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/free_borders.rst
deleted file mode 100644 (file)
index fc076f3..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/free_edges.rst
deleted file mode 100644 (file)
index feeb58e..0000000
+++ /dev/null
@@ -1,15 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/free_faces.rst
deleted file mode 100644 (file)
index cd8ca05..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/free_nodes.rst
deleted file mode 100644 (file)
index 451699c..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/generate_flat_elements.rst
deleted file mode 100644 (file)
index 7308111..0000000
+++ /dev/null
@@ -1,14 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/group_of_underlying_elements.rst
deleted file mode 100644 (file)
index a660030..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/grouping_elements.rst
deleted file mode 100644 (file)
index 2846fa9..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-.. _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.
-* :doc:`face_groups_by_sharp_edges` operation distributes all faces of the mesh among groups using sharp edges and/or existing 1D elements as group boundaries.
-* 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`.
-
-**See Also** sample TUI Scripts of :doc:`tui_grouping_elements` operations.
-
-
-**Table of Contents**
-
-.. toctree::
-       :maxdepth: 2
-
-       creating_groups.rst
-       create_groups_from_geometry.rst
-       face_groups_by_sharp_edges.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.rst b/doc/salome/gui/SMESH/input/importing_exporting_meshes.rst
deleted file mode 100644 (file)
index a11e36d..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-
-.. _importing_exporting_meshes_page:
-
-******************************
-Importing and exporting meshes
-******************************
-
-In MESH there is a functionality allowing import/export of meshes in the following formats:
-
-* **MED**,
-* **SAUV** (format of the CASTEM code),
-* **UNV** (I-DEAS 10),
-* **STL**, 
-* **CGNS**,
-* **GMF** (internal format of DISTENE products from the MeshGems suite),
-* **DAT** (simple ascii format).
-
-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>`.
-
-Only MED format supports all types of elements that can be created in the module. If you export a mesh or group that includes elements of types that are not supported by chosen format, you will be warned about that.
-
-There are additional parameters available at export to MED and SAUV format files.
-
-.. _export_auto_groups:
-
-* **Z tolerance** field if enabled specifies distance of nodes from the XOY plane below which the nodes snap to this plane. A default value can be set in :ref:`Preferences <medexport_z_tolerance_pref>`.
-* **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.rst b/doc/salome/gui/SMESH/input/index.rst
deleted file mode 100644 (file)
index c6a2ade..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-.. 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.rst b/doc/salome/gui/SMESH/input/length.rst
deleted file mode 100644 (file)
index a873984..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/length_2d.rst
deleted file mode 100644 (file)
index 7a1f811..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/make_2dmesh_from_3d.rst
deleted file mode 100644 (file)
index a88c20f..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/max_element_length_2d.rst
deleted file mode 100644 (file)
index 6e2fa03..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/max_element_length_3d.rst
deleted file mode 100644 (file)
index 9e2adb8..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-.. _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/measurements.rst b/doc/salome/gui/SMESH/input/measurements.rst
deleted file mode 100644 (file)
index 9fb3cac..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-.. _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 coordinate 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.
-
-.. _angle_anchor:
-
-Angle
-#####
-
-This operation measures angle defined by three nodes. The second of the specified nodes is a vertex of angle. 
-
-You can specify nodes either by clicking them in the Viewer or by typing their IDs in **Tree nodes** field. If the nodes are correctly specified, upon pressing **Compute** button the angle measure will be displayed and the angle will be shown in the Viewer.
-
-.. image:: ../images/angle_measure.png
-       :align: center
-
-
-**See Also** a sample TUI Script of :ref:`tui_measurements_page`.
diff --git a/doc/salome/gui/SMESH/input/merging_elements.rst b/doc/salome/gui/SMESH/input/merging_elements.rst
deleted file mode 100644 (file)
index 628e364..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-.. _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
-
-.. |ad| image:: ../images/add.png
-.. |rm| image:: ../images/remove.png
-.. |mv| image:: ../images/sort.png
-
-In this dialog:
-
-       * **Names** contains names of the selected mesh objects 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.
-       * **Exclude groups from detection** group allows to ignore the elements which belong to the specified mesh groups. This control is active provided that the mesh includes groups.
-       * **Elements to keep during the merge** group allows to specify elements to keep in the mesh. (By default an element being the first in a group of coincident elements is kept.) It is possible to either select elements in the Viewer or select groups whose elements will be kept.
-  
-               * *Selection* button activates selection of elements to keep.
-               * **Elements** button activates selection of elements in the Viewer.
-               * **Groups and sub-meshes** button activates selection of groups and sub-meshes.
-               * **Add** button adds selected elements or groups to the list.
-               * Elements or groups selected in the list can be removed using **Remove** button.
-
-
-         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:
-    
-                       * |ad| adds to the group the elements selected in the viewer.
-                       * |rm| removes the selected elements from the group.
-                       * |mv| 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.rst b/doc/salome/gui/SMESH/input/merging_nodes.rst
deleted file mode 100644 (file)
index 18096ba..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-.. _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
-
-.. |ad| image:: ../images/add.png
-.. |rm| image:: ../images/remove.png
-.. |mv| image:: ../images/sort.png
-
-*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
-        
-       * **Names** contains names of the selected mesh objects 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:
-    
-         * |ad| adds to the group the nodes selected in the viewer.
-         * |rm| removes from the group the selected nodes.
-         * |mv| 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.rst b/doc/salome/gui/SMESH/input/mesh_infos.rst
deleted file mode 100644 (file)
index a93830d..0000000
+++ /dev/null
@@ -1,186 +0,0 @@
-.. _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 reasons, 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.rst b/doc/salome/gui/SMESH/input/mesh_preferences.rst
deleted file mode 100644 (file)
index 027518e..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-.. _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**
-
-  * **Fit All upon Show Only** - if activated, *Show Only* command additionally performs *Fit All* command.
-
-  * **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.
-
-.. _medexport_z_tolerance_pref:
-
-  * **Z tolerance for MED export** - defines Z tolerance in :ref:`MED Export <export_auto_groups>` dialog.
-
-.. _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.
-
-.. _use_meshgems_pref:
-
-  * **Use MeshGems meshers when assigning set of hypotheses** - if activated, commercial meshers of MeshGems suite are used instead of a free mesher NETGEN when assigning a set of hypotheses in Create Mesh/Sub-mesh dialog.
-  
-* **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.rst b/doc/salome/gui/SMESH/input/mesh_through_point.rst
deleted file mode 100644 (file)
index 0065e24..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/minimum_angle.rst
deleted file mode 100644 (file)
index 9eb9ae1..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/modifying_meshes.rst
deleted file mode 100644 (file)
index 3c9b7d1..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-.. _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 existing mesh elements and nodes.
-* :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:`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.
-* :ref:`Merge Nodes<merging_nodes_page>` coincident within the indicated tolerance.
-* :ref:`Merge Elements <merging_elements_page>` based on the same 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.
-* :ref:`Move Nodes <mesh_through_point_page>` to an arbitrary location with consequent transformation of all adjacent elements.
-* :ref:`Change orientation <changing_orientation_of_elements_page>` of the selected elements.
-* :ref:`Orient faces <reorient_faces_page>` by several means.
-* Unite meshes by :ref:`sewing <sewing_meshes_page>` free borders, border to side or side 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:`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.
-* Apply :ref:`pattern mapping <pattern_mapping_page>`.
-* :ref:`generate_flat_elements_page`.
-* :ref:`cut_mesh_by_plane_page`.
-
-
-.. note::
-       You can use these operations 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
deleted file mode 100644 (file)
index 88d2d2d..0000000
+++ /dev/null
@@ -1,531 +0,0 @@
-########################
-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.HasShapeToMesh
-   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.FaceGroupsSeparatedByEdges
-   Mesh.CreateDimGroup
-   Mesh.ConvertToStandalone
-   Mesh.GetGroups
-   Mesh.NbGroups
-   Mesh.GetGroupNames
-   Mesh.GetGroupByName
-
-
-Operations on groups
-====================
-
-.. autosummary::
-
-   Mesh.UnionGroups
-   Mesh.UnionListOfGroups
-   Mesh.IntersectGroups
-   Mesh.IntersectListOfGroups
-   Mesh.CutGroups
-   Mesh.CutListOfGroups
-
-Deleting Groups
-===============
-
-.. autosummary::
-
-   Mesh.RemoveGroup
-   Mesh.RemoveGroupWithContents
-
-****************
-Mesh Information
-****************
-
-.. autosummary::
-
-   smeshBuilder.GetMeshInfo
-   Mesh.GetEngine
-   Mesh.GetGeomEngine
-   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.Get1DBranches
-   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
-   smeshBuilder.GetAngle
-   Mesh.GetFreeBorders
-   Mesh.MinDistance
-   Mesh.GetMinDistance
-   Mesh.BoundingBox
-   Mesh.GetBoundingBox
-   Mesh.GetFunctor
-   Mesh.FunctorValue
-   Mesh.GetLength
-   Mesh.GetArea
-   Mesh.GetVolume
-   Mesh.GetAngle
-
-****************
-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.Append
-   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.rst b/doc/salome/gui/SMESH/input/numbering.rst
deleted file mode 100644 (file)
index 16cc06f..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/over_constrained_faces.rst
deleted file mode 100644 (file)
index 2ff5bac..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/over_constrained_volumes.rst
deleted file mode 100644 (file)
index 29c9416..0000000
+++ /dev/null
@@ -1,19 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/pattern_mapping.rst
deleted file mode 100644 (file)
index e88a291..0000000
+++ /dev/null
@@ -1,197 +0,0 @@
-.. _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 linear 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.rst b/doc/salome/gui/SMESH/input/point_marker.rst
deleted file mode 100644 (file)
index 2110fe3..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/prism_3d_algo.rst
deleted file mode 100644 (file)
index 03dd68a..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/projection_algos.rst
deleted file mode 100644 (file)
index ff0cbbb..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/quad_from_ma_algo.rst
deleted file mode 100644 (file)
index 0cc1979..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-.. _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
-
-
-**See Also** a sample TUI Script of a :ref:`tui_quad_ma_proj_algo`.
-
diff --git a/doc/salome/gui/SMESH/input/quad_ijk_algo.rst b/doc/salome/gui/SMESH/input/quad_ijk_algo.rst
deleted file mode 100644 (file)
index fdc6101..0000000
+++ /dev/null
@@ -1,55 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/radial_prism_algo.rst
deleted file mode 100644 (file)
index 7e2c148..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-.. _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 most 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.rst b/doc/salome/gui/SMESH/input/radial_quadrangle_1D2D_algo.rst
deleted file mode 100644 (file)
index 817695b..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/removing_nodes_and_elements.rst
deleted file mode 100644 (file)
index bfbb16d..0000000
+++ /dev/null
@@ -1,124 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/reorient_faces.rst
deleted file mode 100644 (file)
index 82982dd..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-
-.. _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.rst b/doc/salome/gui/SMESH/input/revolution.rst
deleted file mode 100644 (file)
index ef70b40..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/rotation.rst
deleted file mode 100644 (file)
index 4d38cae..0000000
+++ /dev/null
@@ -1,59 +0,0 @@
-.. _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 coordinates 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.rst b/doc/salome/gui/SMESH/input/scalar_bar.rst
deleted file mode 100644 (file)
index fa1961e..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/scale.rst
deleted file mode 100644 (file)
index 9ff8b37..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/segments_around_vertex_algo.rst
deleted file mode 100644 (file)
index e70c160..0000000
+++ /dev/null
@@ -1,25 +0,0 @@
-.. _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.
-
-.. _note: To create 0D elements, use :ref:`adding_nodes_and_elements_page` operation.
-
-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                                                 
-
-**See also** a sample :ref:`TUI Script <tui_segments_around_vertex>`.
diff --git a/doc/salome/gui/SMESH/input/selection_filter_library.rst b/doc/salome/gui/SMESH/input/selection_filter_library.rst
deleted file mode 100644 (file)
index 928678c..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/sewing_meshes.rst
deleted file mode 100644 (file)
index 26e7a14..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/skew.rst
deleted file mode 100644 (file)
index ed9dfa2..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-.. _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
deleted file mode 100644 (file)
index 5631ecd..0000000
+++ /dev/null
@@ -1,21 +0,0 @@
-
-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.rst b/doc/salome/gui/SMESH/input/smesh_migration.rst
deleted file mode 100644 (file)
index dad99f4..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-.. _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.
-
-See also *"Modifying Geometry Python scripts from SALOME 6 and before"* page in the Geometry module's
-User Guide.
-
-* **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
deleted file mode 100644 (file)
index 831452e..0000000
+++ /dev/null
@@ -1,962 +0,0 @@
-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 applying 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 of 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>`. 
-   Base class of :class:`standalone group <SMESH_Group>`, 
-   :class:`group on geometry <SMESH_GroupOnGeom>` and 
-   :class:`group on filter <SMESH_GroupOnFilter>`.
-   Inherit all methods from :class:`SMESH_IDSource`.
-
-   .. 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.rst b/doc/salome/gui/SMESH/input/smeshpy_interface.rst
deleted file mode 100644 (file)
index a08cb2d..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-.. _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` Python module.
-
-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
-
-               from salome.smesh import smeshBuilder
-               smesh = smeshBuilder.New()
-
-#. Create a :class:`smeshBuilder.Mesh` object:
-
-       .. code-block:: python
-
-               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
-
-               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
-
-               segLen10 = regular1D.LocalLength( 10. )
-               maxArea  = mefisto.LocalLength( 100. )
-               netgen.SetMaxSize( 20. )
-               netgen.SetFineness( smeshBuilder.VeryCoarse )
-  
-#. :ref:`Compute the mesh <compute_anchor>` (generate mesh nodes and elements):
-       .. code-block:: python
-
-               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 :class:`Mesh Group <SMESH.SMESH_GroupBase>` 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 basic information on mesh nodes, elements and groups.
-
-.. _example_3d_mesh:
-
-Example of 3d mesh generation:
-##############################
-
-.. literalinclude:: ../../../examples/3dmesh.py
-    :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
-
-.. 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
deleted file mode 100644 (file)
index 288b721..0000000
+++ /dev/null
@@ -1,5 +0,0 @@
-smeshstudytools module
-======================
-.. automodule:: smeshstudytools
-   :members:
-
diff --git a/doc/salome/gui/SMESH/input/smoothing.rst b/doc/salome/gui/SMESH/input/smoothing.rst
deleted file mode 100644 (file)
index 79041ad..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/split_biquad_to_linear.rst
deleted file mode 100644 (file)
index 4778ec4..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-.. _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 linear 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.rst b/doc/salome/gui/SMESH/input/split_to_tetra.rst
deleted file mode 100644 (file)
index 775ade4..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/symmetry.rst
deleted file mode 100644 (file)
index c80b489..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-.. _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 coordinates 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.rst b/doc/salome/gui/SMESH/input/taper.rst
deleted file mode 100644 (file)
index db6d75f..0000000
+++ /dev/null
@@ -1,29 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/tools.rst
deleted file mode 100644 (file)
index f9b53c0..0000000
+++ /dev/null
@@ -1,18 +0,0 @@
-.. _tools_page:
-
-*******
-Plugins
-*******
-
-The following plugins are accessible via **Mesh > SMESH plugins** 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.rst b/doc/salome/gui/SMESH/input/translation.rst
deleted file mode 100644 (file)
index ff477ac..0000000
+++ /dev/null
@@ -1,52 +0,0 @@
-.. _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 coordinates 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.rst b/doc/salome/gui/SMESH/input/transparency.rst
deleted file mode 100644 (file)
index 5990033..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-.. _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_creating_meshes.rst b/doc/salome/gui/SMESH/input/tui_creating_meshes.rst
deleted file mode 100644 (file)
index d4c1c8f..0000000
+++ /dev/null
@@ -1,109 +0,0 @@
-.. _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
-    :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
-    :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
-    :language: python
-
-:download:`Download this script <../../../examples/creating_meshes_ex03.py>`
-
-.. _tui_editing_while_meshing:
-
-Intermediate edition while meshing
-==================================
-
-.. literalinclude:: ../../../examples/a3DmeshOnModified2Dmesh.py
-    :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
-    :language: python
-
-:download:`Download this script <../../../examples/creating_meshes_ex04.py>`
-
-.. _tui_export_mesh:
-
-Export of a Mesh
-================
-
-.. literalinclude:: ../../../examples/creating_meshes_ex05.py
-    :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
-    :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
-    :language: python
-
-:download:`Download this script <../../../examples/creating_meshes_ex07.py>`
-
-.. _tui_copy_mesh:
-
-Mesh Copying
-============
-
-.. literalinclude:: ../../../examples/creating_meshes_ex08.py
-    :language: python
-
-:download:`Download this script <../../../examples/creating_meshes_ex08.py>`
-
diff --git a/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst b/doc/salome/gui/SMESH/input/tui_defining_hypotheses.rst
deleted file mode 100644 (file)
index fd676a3..0000000
+++ /dev/null
@@ -1,330 +0,0 @@
-.. _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:`Arithmetic 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 
-  
-* Quadrangle: Mapping 2D algorithm
-  
-    * :ref:`Quadrangle Parameters <tui_quadrangle_parameters>` hypothesis 
-
-* :ref:`Radial Quadrangle 1D-2D <tui_radial_quadrangle>` algorithm
-* NETGEN 3D algorithm
-  
-    *  :ref:`tui_max_element_volume` hypothesis 
-    *  :ref:`Viscous layers <tui_viscous_layers>` hypotheses
-
-* Hexahedron (i,j,k) 3D algorithm
-
-   *   :ref:`tui_block_renumber`
-
-* :ref:`tui_projection`
-* :ref:`Extrusion 3D <tui_prism_3d_algo>` algorithm
-* :ref:`Radial Prism <tui_radial_prism>` algorithm
-* :ref:`Body Fitting <tui_cartesian_algo>` algorithm
-* :ref:`Import 1D-2D Elements from Another Mesh <tui_import>` algorithm
-* :ref:`Use Faces to be Created Manually <tui_use_existing_faces>` algorithm
-* :ref:`Segments around Vertex <tui_segments_around_vertex>` algorithm
-
-
-
-Defining 1D Hypotheses
-######################
-
-.. _tui_1d_arithmetic:
-
-Arithmetic Progression and Geometric Progression
-================================================
-
-.. literalinclude:: ../../../examples/defining_hypotheses_ex01.py
-    :language: python
-
-:download:`Download this script <../../../examples/defining_hypotheses_ex01.py>`
-
-.. _tui_1d_adaptive:
-
-Adaptive
-========
-
-.. literalinclude:: ../../../examples/defining_hypotheses_adaptive1d.py
-    :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
-    :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
-    :language: python
-
-:download:`Download this script <../../../examples/defining_hypotheses_ex03.py>`
-
-
-.. _tui_average_length:
-
-Local Length
-============
-
-.. literalinclude:: ../../../examples/defining_hypotheses_ex04.py
-    :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
-    :language: python
-
-:download:`Download this script <../../../examples/defining_hypotheses_ex05.py>`
-
-
-.. _tui_max_element_volume:
-
-Maximum Element Volume
-======================
-
-.. literalinclude:: ../../../examples/defining_hypotheses_ex06.py
-    :language: python
-
-:download:`Download this script <../../../examples/defining_hypotheses_ex06.py>`
-
-
-.. _tui_length_from_edges:
-
-Length from Edges
-=================
-
-.. literalinclude:: ../../../examples/defining_hypotheses_ex07.py
-    :language: python
-
-:download:`Download this script <../../../examples/defining_hypotheses_ex07.py>`
-
-.. _tui_block_renumber:
-
-Renumber 3D hypothesis
-======================
-
-.. literalinclude:: ../../../examples/filters_ex39.py
-    :language: python
-
-:download:`Download this script <../../../examples/filters_ex39.py>`
-
-Defining Additional Hypotheses
-##############################
-
-.. _tui_propagation:
-
-Propagation
-===========
-
-.. literalinclude:: ../../../examples/defining_hypotheses_ex08.py
-    :language: python
-
-:download:`Download this script <../../../examples/defining_hypotheses_ex08.py>`
-
-
-.. _tui_defining_meshing_algos:
-
-Defining Meshing Algorithms
-###########################
-
-.. literalinclude:: ../../../examples/defining_hypotheses_ex09.py
-    :language: python
-
-:download:`Download this script <../../../examples/defining_hypotheses_ex09.py>`
-
-
-.. _tui_projection:
-
-Projection Algorithms
-=====================
-
-.. literalinclude:: ../../../examples/defining_hypotheses_ex10.py
-    :language: python
-
-:download:`Download this script <../../../examples/defining_hypotheses_ex10.py>`
-
-Projection 1D2D
-===============
-
-.. literalinclude:: ../../../examples/defining_hypotheses_ex11.py
-    :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
-    :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
-    :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
-    :language: python
-
-:download:`Download this script <../../../examples/defining_hypotheses_ex14.py>`
-
-Quadrangle Parameters example 2 (using different types)
-#######################################################
-
-.. literalinclude:: ../../../examples/defining_hypotheses_ex15.py
-    :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
-    :language: python
-
-:download:`Download this script <../../../examples/defining_hypotheses_ex16.py>`
-
-.. _tui_viscous_layers:
-
-Viscous layers construction
-###########################
-
-.. literalinclude:: ../../../examples/defining_hypotheses_ex17.py
-    :language: python
-
-:download:`Download this script <../../../examples/defining_hypotheses_ex17.py>`
-
-.. _tui_radial_prism:
-
-Radial Prism example
-####################
-
-.. literalinclude:: ../../../examples/radial_prism_3d_algo.py
-    :language: python
-
-:download:`Download this script <../../../examples/radial_prism_3d_algo.py>`
-
-.. _tui_cartesian_algo:
-
-Usage of Body Fitting algorithm
-###############################
-
-.. literalinclude:: ../../../examples/cartesian_algo.py
-    :language: python
-
-:download:`Download this script <../../../examples/cartesian_algo.py>`
-
-.. _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
-    :language: python
-
-:download:`Download this script <../../../examples/use_existing_faces.py>`
-
-Resulting mesh:
-
-.. image:: ../images/use_existing_face_sample_mesh.png
-       :align: center
-
-
-.. _tui_prism_3d_algo:
-
-Usage of Extrusion 3D meshing algorithm
-########################################
-
-.. literalinclude:: ../../../examples/prism_3d_algo.py
-    :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
-
-
-.. _tui_quad_ma_proj_algo:
-
-Usage of Medial Axis Projection algorithm
-#########################################
-
-.. literalinclude:: ../../../examples/quad_medial_axis_algo.py
-    :language: python
-
-:download:`Download this script <../../../examples/quad_medial_axis_algo.py>`
-
-
-.. _tui_segments_around_vertex:
-
-Usage of Segments around Vertex algorithm
-#########################################
-
-.. literalinclude:: ../../../examples/defining_hypotheses_len_near_vertex.py
-    :language: python
-
-:download:`Download this script <../../../examples/defining_hypotheses_len_near_vertex.py>`
-
diff --git a/doc/salome/gui/SMESH/input/tui_filters.rst b/doc/salome/gui/SMESH/input/tui_filters.rst
deleted file mode 100644 (file)
index 35ecd8c..0000000
+++ /dev/null
@@ -1,749 +0,0 @@
-.. _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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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.EDGE*, *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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :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
-    :language: python
-
-:download:`Download this script <../../../examples/filters_ex36.py>`
diff --git a/doc/salome/gui/SMESH/input/tui_grouping_elements.rst b/doc/salome/gui/SMESH/input/tui_grouping_elements.rst
deleted file mode 100644 (file)
index 01bcf9b..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-*****************
-Grouping Elements
-*****************
-
-.. contents:: `Table of contents`
-
-
-.. _tui_create_standalone_group: 
-
-Create a Standalone Group
-=========================
-
-.. literalinclude:: ../../../examples/grouping_elements_ex01.py
-    :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
-    :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
-    :language: python
-
-:download:`Download this script <../../../examples/grouping_elements_ex03.py>`
-
-.. _tui_edit_group: 
-
-Edit a Group
-============
-
-.. literalinclude:: ../../../examples/grouping_elements_ex04.py
-    :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
-    :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
-    :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
-    :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
-    :language: python
-
-:download:`Download this script <../../../examples/grouping_elements_ex08.py>`
-
-.. image:: ../images/dimgroup_tui1.png
-       :align: center
-
-
-.. _tui_groups_by_sharp_edges: 
-
-Creating face groups separated by sharp edges
-=============================================
-
-.. literalinclude:: ../../../examples/grouping_elements_ex09.py
-    :language: python
-
-:download:`Download this script <../../../examples/grouping_elements_ex09.py>`
-
diff --git a/doc/salome/gui/SMESH/input/tui_measurements.rst b/doc/salome/gui/SMESH/input/tui_measurements.rst
deleted file mode 100644 (file)
index a4e0565..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-.. _tui_measurements_page: 
-
-************
-Measurements
-************
-
-.. _tui_min_distance: 
-
-Minimum Distance
-================
-
-.. literalinclude:: ../../../examples/measurements_ex01.py
-    :language: python
-
-:download:`Download this script <../../../examples/measurements_ex01.py>`
-
-.. _tui_bounding_box: 
-
-Bounding Box
-============
-
-.. literalinclude:: ../../../examples/measurements_ex02.py
-    :language: python
-
-:download:`Download this script <../../../examples/measurements_ex02.py>`
-
-.. _tui_basic_properties: 
-
-Basic Properties
-================
-
-.. literalinclude:: ../../../examples/measurements_ex03.py
-    :language: python
-
-:download:`Download this script <../../../examples/measurements_ex03.py>`
-
-Angle
-=====
-
-.. literalinclude:: ../../../examples/measurements_ex04.py
-    :language: python
-
-:download:`Download this script <../../../examples/measurements_ex04.py>`
diff --git a/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst b/doc/salome/gui/SMESH/input/tui_modifying_meshes.rst
deleted file mode 100644 (file)
index 1509e8d..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-.. _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
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_ex01.py>`
-
-.. _tui_add_0DElement:
-
-Add 0D Element
-**************
-
-.. literalinclude:: ../../../examples/modifying_meshes_ex02.py
-    :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
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_ex03.py>`
-
-.. _tui_add_edge:
-
-Add Edge
-********
-
-.. literalinclude:: ../../../examples/modifying_meshes_ex04.py
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_ex04.py>`
-
-.. _tui_add_triangle:
-
-Add Triangle
-************
-
-.. literalinclude:: ../../../examples/modifying_meshes_ex05.py
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_ex05.py>`
-
-.. _tui_add_quadrangle:
-
-Add Quadrangle
-**************
-
-.. literalinclude:: ../../../examples/modifying_meshes_ex06.py
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_ex06.py>`
-
-.. _tui_add_tetrahedron:
-
-Add Tetrahedron
-***************
-
-.. literalinclude:: ../../../examples/modifying_meshes_ex07.py
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_ex07.py>`
-
-.. _tui_add_hexahedron:
-
-Add Hexahedron
-**************
-
-.. literalinclude:: ../../../examples/modifying_meshes_ex08.py
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_ex08.py>`
-
-.. _tui_add_polygon:
-
-Add Polygon
-***********
-
-.. literalinclude:: ../../../examples/modifying_meshes_ex09.py
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_ex09.py>`
-
-.. _tui_add_polyhedron:
-
-Add Polyhedron
-**************
-
-.. literalinclude:: ../../../examples/modifying_meshes_ex10.py
-    :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
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_ex11.py>`
-
-.. _tui_removing_elements:
-
-Removing Elements
-*****************
-
-.. literalinclude:: ../../../examples/modifying_meshes_ex12.py
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_ex12.py>`
-
-.. _tui_removing_orphan_nodes:
-
-Removing Orphan Nodes
-*********************
-
-.. literalinclude:: ../../../examples/modifying_meshes_ex13.py
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_ex13.py>`
-
-.. _tui_moving_nodes: 
-
-Moving Nodes
-============
-
-.. literalinclude:: ../../../examples/modifying_meshes_ex15.py
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_ex15.py>`
-
-.. _tui_diagonal_inversion: 
-
-Diagonal Inversion
-==================
-
-.. literalinclude:: ../../../examples/modifying_meshes_ex16.py
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_ex16.py>`
-
-.. _tui_uniting_two_triangles:
-
-Uniting two Triangles
-=====================
-
-.. literalinclude:: ../../../examples/modifying_meshes_ex17.py
-    :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
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_ex18.py>`
-
-.. _tui_orientation: 
-
-Orientation
-===========
-
-.. literalinclude:: ../../../examples/modifying_meshes_ex19.py
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_ex19.py>`
-
-.. _tui_cutting_quadrangles: 
-
-Cutting Quadrangles
-===================
-
-.. literalinclude:: ../../../examples/modifying_meshes_ex20.py
-    :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
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_split_vol.py>`
-
-.. _tui_smoothing: 
-
-Smoothing
-=========
-
-.. literalinclude:: ../../../examples/modifying_meshes_ex21.py
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_ex21.py>`
-
-.. _tui_extrusion: 
-
-Extrusion
-=========
-
-.. literalinclude:: ../../../examples/modifying_meshes_ex22.py
-    :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
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_ex23.py>`
-
-.. _tui_revolution: 
-
-Revolution
-==========
-
-.. literalinclude:: ../../../examples/modifying_meshes_ex24.py
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_ex24.py>`
-
-.. _tui_pattern_mapping: 
-
-Pattern Mapping
-===============
-
-.. literalinclude:: ../../../examples/modifying_meshes_ex25.py
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_ex25.py>`
-
-.. _tui_quadratic: 
-
-Convert mesh to/from quadratic
-==============================
-
-.. literalinclude:: ../../../examples/modifying_meshes_ex26.py
-    :language: python
-
-:download:`Download this script <../../../examples/modifying_meshes_ex26.py>`
-
-.. _tui_split_biquad: 
-
-Split bi-quadratic into linear
-==============================
-
-.. literalinclude:: ../../../examples/split_biquad.py
-    :language: python
-
-:download:`Download this script <../../../examples/split_biquad.py>`
-
-.. _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 block (a big cylinder).
-The big cylinder is defined by two geometric volumes.
-
-.. literalinclude:: ../../../examples/generate_flat_elements.py
-    :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_notebook_smesh.rst b/doc/salome/gui/SMESH/input/tui_notebook_smesh.rst
deleted file mode 100644 (file)
index e05865b..0000000
+++ /dev/null
@@ -1,16 +0,0 @@
-.. _tui_notebook_smesh_page: 
-
-
-*********************
-Using SALOME NoteBook
-*********************
-
-.. _tui_notebook_smesh:
-
-Notebook Smesh
-==============
-
-.. literalinclude:: ../../../examples/notebook_smesh.py
-    :language: python
-
-:download:`Download this script <../../../examples/notebook_smesh.py>`
diff --git a/doc/salome/gui/SMESH/input/tui_quality_controls.rst b/doc/salome/gui/SMESH/input/tui_quality_controls.rst
deleted file mode 100644 (file)
index 566d69b..0000000
+++ /dev/null
@@ -1,231 +0,0 @@
-.. _tui_quality_controls_page: 
-
-****************
-Quality Controls
-****************
-
-.. contents:: `Table of contents`
-
-
-.. _tui_free_borders: 
-
-Free Borders
-============
-
-.. literalinclude:: ../../../examples/quality_controls_ex01.py
-    :language: python
-
-:download:`Download this script <../../../examples/quality_controls_ex01.py>`
-
-
-.. _tui_borders_at_multiconnection: 
-
-Borders at Multiconnection
-==========================
-
-.. literalinclude:: ../../../examples/quality_controls_ex02.py
-    :language: python
-
-:download:`Download this script <../../../examples/quality_controls_ex02.py>`
-
-
-.. _tui_length_1d: 
-
-Length 1D
-=========
-
-.. literalinclude:: ../../../examples/quality_controls_ex03.py
-    :language: python
-
-:download:`Download this script <../../../examples/quality_controls_ex03.py>`
-
-.. _tui_free_edges: 
-
-Free Edges
-==========
-
-.. literalinclude:: ../../../examples/quality_controls_ex04.py
-    :language: python
-
-:download:`Download this script <../../../examples/quality_controls_ex04.py>`
-
-.. _tui_free_nodes: 
-
-Free Nodes
-==========
-
-.. literalinclude:: ../../../examples/quality_controls_ex05.py
-    :language: python
-
-:download:`Download this script <../../../examples/quality_controls_ex05.py>`
-
-.. _tui_free_faces: 
-
-Free Faces
-==========
-
-.. literalinclude:: ../../../examples/quality_controls_ex06.py
-    :language: python
-
-:download:`Download this script <../../../examples/quality_controls_ex06.py>`
-
-.. _tui_bare_border_faces: 
-
-Bare border faces
-=================
-
-.. literalinclude:: ../../../examples/quality_controls_ex07.py
-    :language: python
-
-:download:`Download this script <../../../examples/quality_controls_ex07.py>`
-
-.. _tui_bare_border_volumes: 
-
-Bare border volumes
-===================
-
-.. literalinclude:: ../../../examples/quality_controls_ex08.py
-    :language: python
-
-:download:`Download this script <../../../examples/quality_controls_ex08.py>`
-
-.. _tui_over_constrained_faces: 
-
-Over-constrained faces
-======================
-
-.. literalinclude:: ../../../examples/quality_controls_ex09.py
-    :language: python
-
-:download:`Download this script <../../../examples/quality_controls_ex09.py>`
-
-.. _tui_over_constrained_volumes: 
-
-Over-constrained volumes
-========================
-
-.. literalinclude:: ../../../examples/quality_controls_ex10.py
-    :language: python
-
-:download:`Download this script <../../../examples/quality_controls_ex10.py>`
-
-.. _tui_length_2d: 
-
-Length 2D
-=========
-
-.. literalinclude:: ../../../examples/quality_controls_ex11.py
-    :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
-    :language: python
-
-:download:`Download this script <../../../examples/quality_controls_ex12.py>`
-
-.. _tui_area: 
-
-Area
-====
-
-.. literalinclude:: ../../../examples/quality_controls_ex13.py
-    :language: python
-
-:download:`Download this script <../../../examples/quality_controls_ex13.py>`
-
-.. _tui_taper: 
-
-Taper
-=====
-
-.. literalinclude:: ../../../examples/quality_controls_ex14.py
-    :language: python
-
-:download:`Download this script <../../../examples/quality_controls_ex14.py>`
-
-.. _tui_aspect_ratio: 
-
-Aspect Ratio
-============
-
-.. literalinclude:: ../../../examples/quality_controls_ex15.py
-    :language: python
-
-:download:`Download this script <../../../examples/quality_controls_ex15.py>`
-
-.. _tui_minimum_angle: 
-
-Minimum Angle
-=============
-
-.. literalinclude:: ../../../examples/quality_controls_ex16.py
-    :language: python
-
-:download:`Download this script <../../../examples/quality_controls_ex16.py>`
-
-.. _tui_warping: 
-
-Warping
-=======
-
-.. literalinclude:: ../../../examples/quality_controls_ex17.py
-    :language: python
-
-:download:`Download this script <../../../examples/quality_controls_ex17.py>`
-
-.. _tui_skew: 
-
-Skew
-====
-
-.. literalinclude:: ../../../examples/quality_controls_ex18.py
-    :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
-    :language: python
-
-:download:`Download this script <../../../examples/quality_controls_ex19.py>`
-
-.. _tui_aspect_ratio_3d: 
-
-Aspect Ratio 3D
-===============
-
-.. literalinclude:: ../../../examples/quality_controls_ex20.py
-    :language: python
-
-:download:`Download this script <../../../examples/quality_controls_ex20.py>`
-
-.. _tui_volume: 
-
-Volume
-======
-
-.. literalinclude:: ../../../examples/quality_controls_ex21.py
-    :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
-    :language: python
-
-:download:`Download this script <../../../examples/quality_controls_ex22.py>`
diff --git a/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst b/doc/salome/gui/SMESH/input/tui_transforming_meshes.rst
deleted file mode 100644 (file)
index 23b755f..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-.. _tui_transforming_meshes_page: 
-
-*******************
-Transforming Meshes
-*******************
-
-.. contents:: `Table of contents`
-
-
-.. _tui_translation: 
-
-Translation
-===========
-
-.. literalinclude:: ../../../examples/transforming_meshes_ex01.py
-    :language: python
-
-:download:`Download this script <../../../examples/transforming_meshes_ex01.py>`
-
-.. _tui_rotation: 
-
-Rotation
-========
-
-.. literalinclude:: ../../../examples/transforming_meshes_ex02.py
-    :language: python
-
-:download:`Download this script <../../../examples/transforming_meshes_ex02.py>`
-
-.. _tui_scale: 
-
-Scale
-=====
-
-.. literalinclude:: ../../../examples/transforming_meshes_ex03.py
-    :language: python
-
-:download:`Download this script <../../../examples/transforming_meshes_ex03.py>`
-
-.. _tui_symmetry: 
-
-Symmetry
-========
-
-.. literalinclude:: ../../../examples/transforming_meshes_ex04.py
-    :language: python
-
-:download:`Download this script <../../../examples/transforming_meshes_ex04.py>`
-
-.. _tui_merging_nodes: 
-
-Merging Nodes
-=============
-
-.. literalinclude:: ../../../examples/transforming_meshes_ex05.py
-    :language: python
-
-:download:`Download this script <../../../examples/transforming_meshes_ex05.py>`
-
-.. _tui_merging_elements: 
-
-Merging Elements
-================
-
-.. literalinclude:: ../../../examples/transforming_meshes_ex06.py
-    :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
-    :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
-    :language: python
-
-:download:`Download this script <../../../examples/transforming_meshes_ex08.py>`
-
-.. _tui_sew_free_borders: 
-
-Sew Free Borders
-================
-
-.. literalinclude:: ../../../examples/transforming_meshes_ex09.py
-    :language: python
-
-:download:`Download this script <../../../examples/transforming_meshes_ex09.py>`
-
-.. _tui_sew_side_elements: 
-
-Sew Side Elements
-=================
-
-.. literalinclude:: ../../../examples/transforming_meshes_ex10.py
-    :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
-    :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
-    :language: python
-
-:download:`Download this script <../../../examples/transforming_meshes_ex12.py>`
-
-.. _tui_reorient_faces: 
-
-Reorient faces
-==============
-
-.. literalinclude:: ../../../examples/transforming_meshes_ex13.py
-    :language: python
-
-:download:`Download this script <../../../examples/transforming_meshes_ex13.py>`
diff --git a/doc/salome/gui/SMESH/input/tui_viewing_meshes.rst b/doc/salome/gui/SMESH/input/tui_viewing_meshes.rst
deleted file mode 100644 (file)
index d1320ec..0000000
+++ /dev/null
@@ -1,27 +0,0 @@
-
-.. _tui_viewing_meshes_page: 
-
-**************
-Viewing Meshes
-**************
-
-.. _tui_viewing_mesh_infos:
-
-Viewing Mesh Infos
-##################
-
-.. literalinclude:: ../../../examples/viewing_meshes_ex01.py
-    :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
-    :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.rst b/doc/salome/gui/SMESH/input/tui_work_on_objects_from_gui.rst
deleted file mode 100644 (file)
index d908627..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-
-.. _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.rst b/doc/salome/gui/SMESH/input/uniting_set_of_triangles.rst
deleted file mode 100644 (file)
index 53a0322..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/uniting_two_triangles.rst
deleted file mode 100644 (file)
index dfc4236..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/use_existing_algos.rst
deleted file mode 100644 (file)
index d362c70..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-.. _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 algorithms import elements whose all nodes lye on the geometry
-being meshed.
-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. The algorithm imports a mesh face provided that all its nodes lye on the geometrical face.
-
-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.rst b/doc/salome/gui/SMESH/input/using_notebook_smesh_page.rst
deleted file mode 100644 (file)
index 71eea1b..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/using_operations_on_groups.rst
deleted file mode 100644 (file)
index 717901d..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/viewing_meshes_overview.rst
deleted file mode 100644 (file)
index 06c9197..0000000
+++ /dev/null
@@ -1,70 +0,0 @@
-.. _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 3D Viewer, 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. If :ref:`Fit All upon Show Only <display_mode_pref>` Preference option is active, *Fit All* command is additionally performed.
-* :doc:`clipping` - allows to create cross-sections of the displayed objects.
-* **Dump view** - exports an object from the viewer in bmp, png or jpeg image format.
-* **Change background** - allows to redefine the background color. By default it is black.
-* **View Operations** - 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.rst b/doc/salome/gui/SMESH/input/volume.rst
deleted file mode 100644 (file)
index f49b3bd..0000000
+++ /dev/null
@@ -1,22 +0,0 @@
-.. _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.rst b/doc/salome/gui/SMESH/input/warping.rst
deleted file mode 100644 (file)
index 3cb47f7..0000000
+++ /dev/null
@@ -1,37 +0,0 @@
-.. _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
deleted file mode 100644 (file)
index 118250f..0000000
+++ /dev/null
@@ -1,565 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 8a6985d..0000000
+++ /dev/null
@@ -1,258 +0,0 @@
-# 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
deleted file mode 100644 (file)
index e0d9eac..0000000
+++ /dev/null
@@ -1,75 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 1d1b3e0..0000000
+++ /dev/null
@@ -1,176 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 99a6cf7..0000000
+++ /dev/null
@@ -1,265 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 20d0a90..0000000
+++ /dev/null
@@ -1,252 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 1444e9c..0000000
+++ /dev/null
@@ -1,394 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 285271f..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 02ed335..0000000
+++ /dev/null
@@ -1,328 +0,0 @@
-# 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
deleted file mode 100644 (file)
index d5d8081..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 2c3e7a2..0000000
+++ /dev/null
@@ -1,76 +0,0 @@
-# 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
deleted file mode 100644 (file)
index e401227..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 54bc35a..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 1f74abb..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 2654e3a..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 0879902..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 88b74f9..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-# 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
deleted file mode 100644 (file)
index c4aad8f..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-# 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
deleted file mode 100644 (file)
index a0b6377..0000000
+++ /dev/null
@@ -1,223 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 5105c8a..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-# 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
deleted file mode 100644 (file)
index a2e56f8..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 2e863e0..0000000
+++ /dev/null
@@ -1,189 +0,0 @@
-# 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
deleted file mode 100644 (file)
index d5bc250..0000000
+++ /dev/null
@@ -1,117 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 6664de1..0000000
+++ /dev/null
@@ -1,819 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 85b7b52..0000000
+++ /dev/null
@@ -1,321 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 0582e24..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-# 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
deleted file mode 100644 (file)
index f434c5c..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-# 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
deleted file mode 100644 (file)
index fab7c45..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-# 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
deleted file mode 100644 (file)
index f9830e7..0000000
+++ /dev/null
@@ -1,305 +0,0 @@
-# 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
deleted file mode 100644 (file)
index d602662..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 607e69e..0000000
+++ /dev/null
@@ -1,180 +0,0 @@
-# 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
deleted file mode 100644 (file)
index f1b4594..0000000
+++ /dev/null
@@ -1,86 +0,0 @@
-# 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
deleted file mode 100644 (file)
index f834bde..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-# 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
deleted file mode 100644 (file)
index fd6f7af..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 49ac7d9..0000000
+++ /dev/null
@@ -1,51 +0,0 @@
-# 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
deleted file mode 100644 (file)
index e60fd7c..0000000
+++ /dev/null
@@ -1,45 +0,0 @@
-# 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
deleted file mode 100644 (file)
index c1d03ed..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 537c955..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 4fd023e..0000000
+++ /dev/null
@@ -1,341 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 1fb937b..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-# 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
deleted file mode 100644 (file)
index adffa52..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-# 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
deleted file mode 100644 (file)
index f6cb477..0000000
+++ /dev/null
@@ -1,346 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 525e613..0000000
+++ /dev/null
@@ -1,250 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 6081c19..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 49ea459..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-# 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
deleted file mode 100644 (file)
index a435d5f..0000000
+++ /dev/null
@@ -1,36 +0,0 @@
-# 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
deleted file mode 100644 (file)
index e420c8a..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 9817126..0000000
+++ /dev/null
@@ -1,43 +0,0 @@
-# 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
deleted file mode 100644 (file)
index a3e6f44..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-# 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
deleted file mode 100644 (file)
index f4296a1..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 20e0abd..0000000
+++ /dev/null
@@ -1,185 +0,0 @@
-# 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
deleted file mode 100644 (file)
index e17bbf6..0000000
+++ /dev/null
@@ -1,146 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 524e83f..0000000
+++ /dev/null
@@ -1,23 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 0d247e3..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 35a06b7..0000000
+++ /dev/null
@@ -1,34 +0,0 @@
-# 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
deleted file mode 100644 (file)
index d622f98..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 3aa6219..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 3aa1829..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 67d5734..0000000
+++ /dev/null
@@ -1,63 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 6d79654..0000000
+++ /dev/null
@@ -1,41 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 2379bf1..0000000
+++ /dev/null
@@ -1,229 +0,0 @@
-# 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
deleted file mode 100644 (file)
index b6f95a7..0000000
+++ /dev/null
@@ -1,130 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 1c76c47..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 5db2f81..0000000
+++ /dev/null
@@ -1,436 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 4cda6ac..0000000
+++ /dev/null
@@ -1,792 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 6ba529d..0000000
+++ /dev/null
@@ -1,88 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 18eb025..0000000
+++ /dev/null
@@ -1,61 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 58ad3e3..0000000
+++ /dev/null
@@ -1,216 +0,0 @@
-# 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
deleted file mode 100644 (file)
index afadf65..0000000
+++ /dev/null
@@ -1,2262 +0,0 @@
-# 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
deleted file mode 100644 (file)
index f991868..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 90891f6..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-# 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
deleted file mode 100644 (file)
index dec1720..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 124763f..0000000
+++ /dev/null
@@ -1,355 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 78e3ba8..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-# 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
deleted file mode 100644 (file)
index e9bbc69..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 2c81855..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 35fcb88..0000000
+++ /dev/null
@@ -1,8132 +0,0 @@
-# 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
deleted file mode 100644 (file)
index dad657b..0000000
+++ /dev/null
@@ -1,67 +0,0 @@
-# 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
deleted file mode 100644 (file)
index ebdbbda..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 6aae274..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 302d65b..0000000
+++ /dev/null
@@ -1,65 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 56e97c4..0000000
+++ /dev/null
@@ -1,251 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 3b40b49..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-# 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
deleted file mode 100644 (file)
index efaa17e..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 7ccf99c..0000000
+++ /dev/null
@@ -1,160 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 448ac93..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 0cdcf0c..0000000
+++ /dev/null
@@ -1,211 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 14a9b3d..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 37e910d..0000000
+++ /dev/null
@@ -1,517 +0,0 @@
-# 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
deleted file mode 100644 (file)
index d431b08..0000000
+++ /dev/null
@@ -1,404 +0,0 @@
-# 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
deleted file mode 100644 (file)
index dde0462..0000000
+++ /dev/null
@@ -1,58 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 6ed8d5b..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-# 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
deleted file mode 100644 (file)
index d2b333e..0000000
+++ /dev/null
@@ -1,295 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 4860f73..0000000
+++ /dev/null
@@ -1,171 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 57f12ba..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-# 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
deleted file mode 100644 (file)
index bb182de..0000000
+++ /dev/null
@@ -1,174 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 8b8bae5..0000000
+++ /dev/null
@@ -1,194 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 40c5433..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-# 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
deleted file mode 100644 (file)
index c6d0a56..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 98a8065..0000000
+++ /dev/null
@@ -1,164 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 66ad5fd..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 614e24c..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-# 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
deleted file mode 100644 (file)
index df01cf8..0000000
+++ /dev/null
@@ -1,179 +0,0 @@
-# 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
deleted file mode 100644 (file)
index bbf304e..0000000
+++ /dev/null
@@ -1,411 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 40d486c..0000000
+++ /dev/null
@@ -1,1577 +0,0 @@
-# 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
deleted file mode 100644 (file)
index cd89253..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-# 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
deleted file mode 100644 (file)
index f240ae7..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-# 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
deleted file mode 100644 (file)
index c531f05..0000000
+++ /dev/null
@@ -1,69 +0,0 @@
-# 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
deleted file mode 100644 (file)
index b6afe1b..0000000
+++ /dev/null
@@ -1,429 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 61a6348..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-# 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
deleted file mode 100644 (file)
index af7456b..0000000
+++ /dev/null
@@ -1,39 +0,0 @@
-# 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
deleted file mode 100644 (file)
index af13b95..0000000
+++ /dev/null
@@ -1,359 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 0edf784..0000000
+++ /dev/null
@@ -1,224 +0,0 @@
-# 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
deleted file mode 100644 (file)
index f5b434b..0000000
+++ /dev/null
@@ -1,47 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 58095de..0000000
+++ /dev/null
@@ -1,54 +0,0 @@
-# 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
deleted file mode 100644 (file)
index eac8cc8..0000000
+++ /dev/null
@@ -1,53 +0,0 @@
-# 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
deleted file mode 100644 (file)
index b51f6c9..0000000
+++ /dev/null
@@ -1,114 +0,0 @@
-# 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
deleted file mode 100644 (file)
index e70b866..0000000
+++ /dev/null
@@ -1,68 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 81481e6..0000000
+++ /dev/null
@@ -1,140 +0,0 @@
-# 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
deleted file mode 100644 (file)
index d5d707b..0000000
+++ /dev/null
@@ -1,108 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 00de27c..0000000
+++ /dev/null
@@ -1,196 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 750956d..0000000
+++ /dev/null
@@ -1,226 +0,0 @@
-# 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
deleted file mode 100644 (file)
index 9a80a7f..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-# 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
deleted file mode 100644 (file)
index da4831a..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-# 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
deleted file mode 100755 (executable)
index 9c8aa4b..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-#!/usr/bin/env python3
-# Copyright (C) 2017-2020  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
-#
-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 )
-        origin_module = locals()[ 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 )
-        dynanmic_module = locals()[ 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+=locals()['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/switchers.js.in b/doc/salome/gui/SMESH/static/switchers.js.in
deleted file mode 100644 (file)
index 8595b5c..0000000
+++ /dev/null
@@ -1,72 +0,0 @@
-(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
deleted file mode 100644 (file)
index 77cbbd1..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-{% 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">
-         Copyright &copy; 2007-2020  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.
- </div>
- {{ super() }}
-{%- endblock %}
diff --git a/doc/salome/tui/CMakeLists.txt b/doc/salome/tui/CMakeLists.txt
deleted file mode 100644 (file)
index 6084bd0..0000000
+++ /dev/null
@@ -1,35 +0,0 @@
-# Copyright (C) 2007-2020  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
-#
-
-SALOME_CONFIGURE_FILE(doxyfile.in doxyfile)
-SALOME_CONFIGURE_FILE(static/header.html.in static/header.html)
-
-ADD_CUSTOM_TARGET(dev_docs ${DOXYGEN_EXECUTABLE})
-
-INSTALL(CODE "FILE(MAKE_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/SMESH)")
-INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/SMESH 
-        DESTINATION ${SALOME_INSTALL_DOC}/tui
-        PATTERN "*.md5" EXCLUDE
-        PATTERN "*.map" EXCLUDE)
-INSTALL(FILES images/head.png DESTINATION ${SALOME_INSTALL_DOC}/tui/SMESH) 
-
-SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES SMESH)
diff --git a/doc/salome/tui/doxyfile.in b/doc/salome/tui/doxyfile.in
deleted file mode 100644 (file)
index 561246e..0000000
+++ /dev/null
@@ -1,245 +0,0 @@
-#---------------------------------------------------------------------------
-# Project related configuration options
-#---------------------------------------------------------------------------
-PROJECT_NAME           = "SALOME Mesh Module Developer"
-PROJECT_NUMBER         = 
-OUTPUT_DIRECTORY       = SMESH
-CREATE_SUBDIRS         = NO
-OUTPUT_LANGUAGE        = English
-USE_WINDOWS_ENCODING   = NO
-BRIEF_MEMBER_DESC      = YES
-REPEAT_BRIEF           = YES
-ABBREVIATE_BRIEF       = 
-ALWAYS_DETAILED_SEC    = YES
-INLINE_INHERITED_MEMB  = YES
-FULL_PATH_NAMES        = YES
-STRIP_FROM_PATH        = @PROJECT_SOURCE_DIR@ @PROJECT_BINARY_DIR@
-STRIP_FROM_INC_PATH    = 
-SHORT_NAMES            = NO
-JAVADOC_AUTOBRIEF      = YES
-QT_AUTOBRIEF           = YES
-MULTILINE_CPP_IS_BRIEF = NO
-DETAILS_AT_TOP         = NO
-INHERIT_DOCS           = YES
-SEPARATE_MEMBER_PAGES  = NO
-TAB_SIZE               = 5
-ALIASES                = 
-OPTIMIZE_OUTPUT_FOR_C  = YES
-OPTIMIZE_OUTPUT_JAVA   = YES
-BUILTIN_STL_SUPPORT    = @DOXYGEN_SUPPORT_STL@
-DISTRIBUTE_GROUP_DOC   = NO
-SUBGROUPING            = YES
-
-#---------------------------------------------------------------------------
-# Build related configuration options
-#---------------------------------------------------------------------------
-EXTRACT_ALL            = YES
-EXTRACT_PRIVATE        = YES
-EXTRACT_STATIC         = YES
-EXTRACT_LOCAL_CLASSES  = YES
-EXTRACT_LOCAL_METHODS  = YES
-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       = NO
-SHOW_INCLUDE_FILES     = YES
-INLINE_INFO            = YES
-SORT_MEMBER_DOCS       = YES
-SORT_BRIEF_DOCS        = NO
-SORT_BY_SCOPE_NAME     = NO
-GENERATE_TODOLIST      = YES
-GENERATE_TESTLIST      = YES
-GENERATE_BUGLIST       = YES
-GENERATE_DEPRECATEDLIST= YES
-ENABLED_SECTIONS       = 
-MAX_INITIALIZER_LINES  = 25
-SHOW_USED_FILES        = NO
-SHOW_DIRECTORIES       = NO
-FILE_VERSION_FILTER    = 
-
-#---------------------------------------------------------------------------
-# 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
-WARN_FORMAT            = "$file:$line: $text"
-WARN_LOGFILE           = log.txt
-
-#---------------------------------------------------------------------------
-# configuration options related to the input files
-#---------------------------------------------------------------------------
-INPUT                  = @PROJECT_SOURCE_DIR@/src \
-                        @PROJECT_SOURCE_DIR@/bin \
-                        @PROJECT_SOURCE_DIR@/idl \
-                        @PROJECT_SOURCE_DIR@/bin \
-                        @CMAKE_CURRENT_SOURCE_DIR@/input
-FILE_PATTERNS          = *.idl *.hxx *.cxx *.h *.c *.hh *.cc @DOXYGEN_PYTHON_EXTENSION@ *.doc
-RECURSIVE              = YES
-EXCLUDE                = 
-EXCLUDE_SYMLINKS       = NO
-EXCLUDE_PATTERNS       = 
-EXAMPLE_PATH           = 
-EXAMPLE_PATTERNS       = 
-EXAMPLE_RECURSIVE      = NO
-IMAGE_PATH             = @CMAKE_CURRENT_SOURCE_DIR@/images
-INPUT_FILTER           = 
-FILTER_PATTERNS        = 
-FILTER_SOURCE_FILES    = YES
-
-#---------------------------------------------------------------------------
-# configuration options related to source browsing
-#---------------------------------------------------------------------------
-SOURCE_BROWSER         = NO
-INLINE_SOURCES         = NO
-STRIP_CODE_COMMENTS    = YES
-REFERENCED_BY_RELATION = YES
-REFERENCES_RELATION    = YES
-#USE_HTAGS              = NO
-VERBATIM_HEADERS       = YES
-
-#---------------------------------------------------------------------------
-# configuration options related to the alphabetical class index
-#---------------------------------------------------------------------------
-ALPHABETICAL_INDEX     = YES
-COLS_IN_ALPHA_INDEX    = 2
-IGNORE_PREFIX          = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the HTML output
-#---------------------------------------------------------------------------
-GENERATE_HTML          = YES
-HTML_OUTPUT            = .
-HTML_FILE_EXTENSION    = .html
-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
-HTML_ALIGN_MEMBERS     = YES
-GENERATE_HTMLHELP      = NO
-CHM_FILE               = 
-HHC_LOCATION           = 
-GENERATE_CHI           = NO
-BINARY_TOC             = NO
-TOC_EXPAND             = NO
-DISABLE_INDEX          = NO
-ENUM_VALUES_PER_LINE   = 4
-GENERATE_TREEVIEW      = YES
-TREEVIEW_WIDTH         = 250
-
-#---------------------------------------------------------------------------
-# configuration options related to the LaTeX output
-#---------------------------------------------------------------------------
-GENERATE_LATEX         = NO
-LATEX_OUTPUT           = latex
-LATEX_CMD_NAME         = latex
-MAKEINDEX_CMD_NAME     = makeindex
-COMPACT_LATEX          = NO
-PAPER_TYPE             = a4wide
-EXTRA_PACKAGES         = 
-LATEX_HEADER           = 
-PDF_HYPERLINKS         = NO
-USE_PDFLATEX           = NO
-LATEX_BATCHMODE        = NO
-LATEX_HIDE_INDICES     = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the RTF output
-#---------------------------------------------------------------------------
-GENERATE_RTF           = NO
-RTF_OUTPUT             = rtf
-COMPACT_RTF            = NO
-RTF_HYPERLINKS         = NO
-RTF_STYLESHEET_FILE    = 
-RTF_EXTENSIONS_FILE    = 
-
-#---------------------------------------------------------------------------
-# configuration options related to the man page output
-#---------------------------------------------------------------------------
-GENERATE_MAN           = NO
-MAN_OUTPUT             = man
-MAN_EXTENSION          = .3
-MAN_LINKS              = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the XML output
-#---------------------------------------------------------------------------
-GENERATE_XML           = NO
-XML_OUTPUT             = xml
-XML_SCHEMA             = 
-XML_DTD                = 
-XML_PROGRAMLISTING     = YES
-
-#---------------------------------------------------------------------------
-# configuration options for the AutoGen Definitions output
-#---------------------------------------------------------------------------
-GENERATE_AUTOGEN_DEF   = NO
-
-#---------------------------------------------------------------------------
-# configuration options related to the Perl module output
-#---------------------------------------------------------------------------
-GENERATE_PERLMOD       = NO
-PERLMOD_LATEX          = NO
-PERLMOD_PRETTY         = YES
-PERLMOD_MAKEVAR_PREFIX = 
-
-#---------------------------------------------------------------------------
-# Configuration options related to the preprocessor   
-#---------------------------------------------------------------------------
-ENABLE_PREPROCESSING   = YES
-MACRO_EXPANSION        = YES
-EXPAND_ONLY_PREDEF     = NO
-SEARCH_INCLUDES        = YES
-INCLUDE_PATH           = 
-INCLUDE_FILE_PATTERNS  = 
-PREDEFINED             = 
-EXPAND_AS_DEFINED      = 
-SKIP_FUNCTION_MACROS   = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to external references   
-#---------------------------------------------------------------------------
-TAGFILES               = 
-GENERATE_TAGFILE       = 
-ALLEXTERNALS           = NO
-EXTERNAL_GROUPS        = YES
-PERL_PATH              = /usr/bin/perl
-
-#---------------------------------------------------------------------------
-# Configuration options related to the dot tool   
-#---------------------------------------------------------------------------
-CLASS_DIAGRAMS         = YES
-HIDE_UNDOC_RELATIONS   = NO
-HAVE_DOT               = YES
-CLASS_GRAPH            = YES
-COLLABORATION_GRAPH    = NO
-GROUP_GRAPHS           = YES
-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        = YES
-DOT_CLEANUP            = YES
-
-#---------------------------------------------------------------------------
-# Configuration::additions related to the search engine   
-#---------------------------------------------------------------------------
-SEARCHENGINE           = NO
-
-
diff --git a/doc/salome/tui/images/application.gif b/doc/salome/tui/images/application.gif
deleted file mode 100644 (file)
index 0b05d5c..0000000
Binary files a/doc/salome/tui/images/application.gif and /dev/null differ
diff --git a/doc/salome/tui/images/head.png b/doc/salome/tui/images/head.png
deleted file mode 100755 (executable)
index 307d9ef..0000000
Binary files a/doc/salome/tui/images/head.png and /dev/null differ
diff --git a/doc/salome/tui/images/logocorp.gif b/doc/salome/tui/images/logocorp.gif
deleted file mode 100755 (executable)
index 7697e08..0000000
Binary files a/doc/salome/tui/images/logocorp.gif and /dev/null differ
diff --git a/doc/salome/tui/images/smeshscreen.png b/doc/salome/tui/images/smeshscreen.png
deleted file mode 100755 (executable)
index 638870e..0000000
Binary files a/doc/salome/tui/images/smeshscreen.png and /dev/null differ
diff --git a/doc/salome/tui/input/index.doc b/doc/salome/tui/input/index.doc
deleted file mode 100644 (file)
index 7464ac6..0000000
+++ /dev/null
@@ -1,13 +0,0 @@
-/*! \mainpage
-
-\image html smeshscreen.png
-
-To browse the \b SALOME Mesh module Developer Documentation, follow the links below or use navigation menu at the top of the page:
-<ul>
-<!-- <li> <a href="modules.html">Modules</a> - documentation of TUI functionality.</li> -->
-<li> <a href="namespaces.html">Name Spaces</a> - list of TUI packages and scripts.</li>
-<li> <a href="annotated.html">Data Structures</a> - list of all data structures and classes with brief descriptions.</li>
-<li> <a href="files.html">Files</a> - list of all files with brief descriptions.</li>
-</ul>
-
-*/
\ No newline at end of file
diff --git a/doc/salome/tui/static/footer.html b/doc/salome/tui/static/footer.html
deleted file mode 100644 (file)
index 0abc788..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-2020  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/tui/static/header.html.in b/doc/salome/tui/static/header.html.in
deleted file mode 100644 (file)
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/tui/static/salome_extra.css b/doc/salome/tui/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/tui/CMakeLists.txt b/doc/tui/CMakeLists.txt
new file mode 100644 (file)
index 0000000..73e9be0
--- /dev/null
@@ -0,0 +1,34 @@
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+SALOME_CONFIGURE_FILE(doxyfile.in doxyfile)
+SALOME_CONFIGURE_FILE(static/header.html.in static/header.html)
+
+ADD_CUSTOM_TARGET(dev_docs ${DOXYGEN_EXECUTABLE})
+
+INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/SMESH
+        OPTIONAL
+        DESTINATION ${SALOME_INSTALL_DOC}/tui
+        PATTERN "*.md5" EXCLUDE
+        PATTERN "*.map" EXCLUDE)
+
+SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES SMESH)
diff --git a/doc/tui/doxyfile.in b/doc/tui/doxyfile.in
new file mode 100644 (file)
index 0000000..18b0894
--- /dev/null
@@ -0,0 +1,246 @@
+#---------------------------------------------------------------------------
+# Project related configuration options
+#---------------------------------------------------------------------------
+PROJECT_NAME           = "SALOME Mesh Module Developer"
+PROJECT_NUMBER         =
+OUTPUT_DIRECTORY       = SMESH
+CREATE_SUBDIRS         = NO
+OUTPUT_LANGUAGE        = English
+USE_WINDOWS_ENCODING   = NO
+BRIEF_MEMBER_DESC      = YES
+REPEAT_BRIEF           = YES
+ABBREVIATE_BRIEF       =
+ALWAYS_DETAILED_SEC    = YES
+INLINE_INHERITED_MEMB  = YES
+FULL_PATH_NAMES        = YES
+STRIP_FROM_PATH        = @PROJECT_SOURCE_DIR@ @PROJECT_BINARY_DIR@
+STRIP_FROM_INC_PATH    =
+SHORT_NAMES            = NO
+JAVADOC_AUTOBRIEF      = YES
+QT_AUTOBRIEF           = YES
+MULTILINE_CPP_IS_BRIEF = NO
+DETAILS_AT_TOP         = NO
+INHERIT_DOCS           = YES
+SEPARATE_MEMBER_PAGES  = NO
+TAB_SIZE               = 5
+ALIASES                =
+OPTIMIZE_OUTPUT_FOR_C  = YES
+OPTIMIZE_OUTPUT_JAVA   = YES
+BUILTIN_STL_SUPPORT    = @DOXYGEN_SUPPORT_STL@
+DISTRIBUTE_GROUP_DOC   = NO
+SUBGROUPING            = YES
+
+#---------------------------------------------------------------------------
+# Build related configuration options
+#---------------------------------------------------------------------------
+EXTRACT_ALL            = YES
+EXTRACT_PRIVATE        = YES
+EXTRACT_STATIC         = YES
+EXTRACT_LOCAL_CLASSES  = YES
+EXTRACT_LOCAL_METHODS  = YES
+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       = NO
+SHOW_INCLUDE_FILES     = YES
+INLINE_INFO            = YES
+SORT_MEMBER_DOCS       = YES
+SORT_BRIEF_DOCS        = NO
+SORT_BY_SCOPE_NAME     = NO
+GENERATE_TODOLIST      = YES
+GENERATE_TESTLIST      = YES
+GENERATE_BUGLIST       = YES
+GENERATE_DEPRECATEDLIST= YES
+ENABLED_SECTIONS       =
+MAX_INITIALIZER_LINES  = 25
+SHOW_USED_FILES        = NO
+SHOW_DIRECTORIES       = NO
+FILE_VERSION_FILTER    =
+
+#---------------------------------------------------------------------------
+# 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
+WARN_FORMAT            = "$file:$line: $text"
+WARN_LOGFILE           = log.txt
+
+#---------------------------------------------------------------------------
+# configuration options related to the input files
+#---------------------------------------------------------------------------
+INPUT                  = @PROJECT_SOURCE_DIR@/src \
+                        @PROJECT_SOURCE_DIR@/bin \
+                        @PROJECT_SOURCE_DIR@/idl \
+                        @PROJECT_SOURCE_DIR@/bin \
+                        @CMAKE_CURRENT_SOURCE_DIR@/input
+FILE_PATTERNS          = *.idl *.hxx *.cxx *.h *.c *.hh *.cc @DOXYGEN_PYTHON_EXTENSION@ *.doc
+RECURSIVE              = YES
+EXCLUDE                =
+EXCLUDE_SYMLINKS       = NO
+EXCLUDE_PATTERNS       =
+EXAMPLE_PATH           =
+EXAMPLE_PATTERNS       =
+EXAMPLE_RECURSIVE      = NO
+IMAGE_PATH             = @CMAKE_CURRENT_SOURCE_DIR@/images
+INPUT_FILTER           =
+FILTER_PATTERNS        =
+FILTER_SOURCE_FILES    = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to source browsing
+#---------------------------------------------------------------------------
+SOURCE_BROWSER         = NO
+INLINE_SOURCES         = NO
+STRIP_CODE_COMMENTS    = YES
+REFERENCED_BY_RELATION = YES
+REFERENCES_RELATION    = YES
+#USE_HTAGS              = NO
+VERBATIM_HEADERS       = YES
+
+#---------------------------------------------------------------------------
+# configuration options related to the alphabetical class index
+#---------------------------------------------------------------------------
+ALPHABETICAL_INDEX     = YES
+COLS_IN_ALPHA_INDEX    = 2
+IGNORE_PREFIX          =
+
+#---------------------------------------------------------------------------
+# configuration options related to the HTML output
+#---------------------------------------------------------------------------
+GENERATE_HTML          = YES
+HTML_OUTPUT            = .
+HTML_FILE_EXTENSION    = .html
+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
+HTML_EXTRA_FILES       = @CMAKE_CURRENT_SOURCE_DIR@/images/head.png
+HTML_ALIGN_MEMBERS     = YES
+GENERATE_HTMLHELP      = NO
+CHM_FILE               =
+HHC_LOCATION           =
+GENERATE_CHI           = NO
+BINARY_TOC             = NO
+TOC_EXPAND             = NO
+DISABLE_INDEX          = NO
+ENUM_VALUES_PER_LINE   = 4
+GENERATE_TREEVIEW      = YES
+TREEVIEW_WIDTH         = 250
+
+#---------------------------------------------------------------------------
+# configuration options related to the LaTeX output
+#---------------------------------------------------------------------------
+GENERATE_LATEX         = NO
+LATEX_OUTPUT           = latex
+LATEX_CMD_NAME         = latex
+MAKEINDEX_CMD_NAME     = makeindex
+COMPACT_LATEX          = NO
+PAPER_TYPE             = a4wide
+EXTRA_PACKAGES         =
+LATEX_HEADER           =
+PDF_HYPERLINKS         = NO
+USE_PDFLATEX           = NO
+LATEX_BATCHMODE        = NO
+LATEX_HIDE_INDICES     = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the RTF output
+#---------------------------------------------------------------------------
+GENERATE_RTF           = NO
+RTF_OUTPUT             = rtf
+COMPACT_RTF            = NO
+RTF_HYPERLINKS         = NO
+RTF_STYLESHEET_FILE    =
+RTF_EXTENSIONS_FILE    =
+
+#---------------------------------------------------------------------------
+# configuration options related to the man page output
+#---------------------------------------------------------------------------
+GENERATE_MAN           = NO
+MAN_OUTPUT             = man
+MAN_EXTENSION          = .3
+MAN_LINKS              = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the XML output
+#---------------------------------------------------------------------------
+GENERATE_XML           = NO
+XML_OUTPUT             = xml
+XML_SCHEMA             =
+XML_DTD                =
+XML_PROGRAMLISTING     = YES
+
+#---------------------------------------------------------------------------
+# configuration options for the AutoGen Definitions output
+#---------------------------------------------------------------------------
+GENERATE_AUTOGEN_DEF   = NO
+
+#---------------------------------------------------------------------------
+# configuration options related to the Perl module output
+#---------------------------------------------------------------------------
+GENERATE_PERLMOD       = NO
+PERLMOD_LATEX          = NO
+PERLMOD_PRETTY         = YES
+PERLMOD_MAKEVAR_PREFIX =
+
+#---------------------------------------------------------------------------
+# Configuration options related to the preprocessor
+#---------------------------------------------------------------------------
+ENABLE_PREPROCESSING   = YES
+MACRO_EXPANSION        = YES
+EXPAND_ONLY_PREDEF     = NO
+SEARCH_INCLUDES        = YES
+INCLUDE_PATH           =
+INCLUDE_FILE_PATTERNS  =
+PREDEFINED             =
+EXPAND_AS_DEFINED      =
+SKIP_FUNCTION_MACROS   = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to external references
+#---------------------------------------------------------------------------
+TAGFILES               =
+GENERATE_TAGFILE       =
+ALLEXTERNALS           = NO
+EXTERNAL_GROUPS        = YES
+PERL_PATH              = /usr/bin/perl
+
+#---------------------------------------------------------------------------
+# Configuration options related to the dot tool
+#---------------------------------------------------------------------------
+CLASS_DIAGRAMS         = YES
+HIDE_UNDOC_RELATIONS   = NO
+HAVE_DOT               = YES
+CLASS_GRAPH            = YES
+COLLABORATION_GRAPH    = NO
+GROUP_GRAPHS           = YES
+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        = YES
+DOT_CLEANUP            = YES
+
+#---------------------------------------------------------------------------
+# Configuration::additions related to the search engine
+#---------------------------------------------------------------------------
+SEARCHENGINE           = YES
+
+
diff --git a/doc/tui/images/application.gif b/doc/tui/images/application.gif
new file mode 100644 (file)
index 0000000..0b05d5c
Binary files /dev/null and b/doc/tui/images/application.gif differ
diff --git a/doc/tui/images/head.png b/doc/tui/images/head.png
new file mode 100755 (executable)
index 0000000..307d9ef
Binary files /dev/null and b/doc/tui/images/head.png differ
diff --git a/doc/tui/images/logocorp.gif b/doc/tui/images/logocorp.gif
new file mode 100755 (executable)
index 0000000..7697e08
Binary files /dev/null and b/doc/tui/images/logocorp.gif differ
diff --git a/doc/tui/images/smeshscreen.png b/doc/tui/images/smeshscreen.png
new file mode 100755 (executable)
index 0000000..638870e
Binary files /dev/null and b/doc/tui/images/smeshscreen.png differ
diff --git a/doc/tui/input/index.doc b/doc/tui/input/index.doc
new file mode 100644 (file)
index 0000000..7464ac6
--- /dev/null
@@ -0,0 +1,13 @@
+/*! \mainpage
+
+\image html smeshscreen.png
+
+To browse the \b SALOME Mesh module Developer Documentation, follow the links below or use navigation menu at the top of the page:
+<ul>
+<!-- <li> <a href="modules.html">Modules</a> - documentation of TUI functionality.</li> -->
+<li> <a href="namespaces.html">Name Spaces</a> - list of TUI packages and scripts.</li>
+<li> <a href="annotated.html">Data Structures</a> - list of all data structures and classes with brief descriptions.</li>
+<li> <a href="files.html">Files</a> - list of all files with brief descriptions.</li>
+</ul>
+
+*/
\ No newline at end of file
diff --git a/doc/tui/static/footer.html b/doc/tui/static/footer.html
new file mode 100644 (file)
index 0000000..c75cc75
--- /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-2024  CEA, EDF, 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/tui/static/header.html.in b/doc/tui/static/header.html.in
new file mode 100644 (file)
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/doc/tui/static/salome_extra.css b/doc/tui/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 7ab17aef9e3072621894161b00327c97cacf4eff..5e97c628665698e5a24202339373088b29de08dd 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -26,6 +26,8 @@ INCLUDE_DIRECTORIES(
   ${PROJECT_BINARY_DIR}/idl
 )
 
+SALOME_CONFIGURE_FILE(SMESH_smIdType.idl.in SMESH_smIdType.idl)
+
 SET(SalomeIDLSMESH_IDLSOURCES
   SMESH_Gen.idl
   SMESH_Mesh.idl
@@ -36,11 +38,15 @@ SET(SalomeIDLSMESH_IDLSOURCES
   SMESH_Pattern.idl
   SMESH_MeshEditor.idl
   SMESH_Measurements.idl
+  ${CMAKE_CURRENT_BINARY_DIR}/SMESH_smIdType.idl
+  MG_ADAPT.idl
+  SMESH_Homard.idl
 )
 
 SET(_idl_include_dirs
   ${KERNEL_ROOT_DIR}/idl/salome
   ${GEOM_ROOT_DIR}/idl/salome
+  ${PROJECT_BINARY_DIR}/idl
 )
 
 SET(_idl_link_flags
diff --git a/idl/MG_ADAPT.idl b/idl/MG_ADAPT.idl
new file mode 100644 (file)
index 0000000..a303952
--- /dev/null
@@ -0,0 +1,148 @@
+// Copyright (C) 2020-2024  CEA, EDF
+//
+// 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 MG_ADAPT_IDL
+#define MG_ADAPT_IDL
+
+#include "SALOME_Component.idl"
+#include "SALOME_Exception.idl"
+#include "SALOME_GenericObj.idl"
+#include "SALOMEDS.idl"
+#include "SMESH_Mesh.idl"
+
+module SMESH
+{
+  struct MgAdaptHypothesisData
+  {
+    string  myFileInDir, myMeshFileIn, myInMeshName, myMeshFileBackground, myOutMeshName,
+            myMeshFileOut, myFileOutDir, myFileSizeMapDir, myFieldName;
+    boolean fromMedFile;
+    boolean myPublish, myMeshOutMed;
+    boolean myUseLocalMap, myUseBackgroundMap, myUseConstantValue;
+    double  myConstantValue;
+    long    myRank, myTimeStep;
+    boolean myUseNoTimeStep, myUseLastTimeStep, myUseChosenTimeStep;
+    string  myWorkingDir, myLogFile;
+    boolean myPrintLogInFile, myKeepFiles, myRemoveLogOnSuccess;
+    long    myVerboseLevel;
+  };
+
+  interface MG_ADAPT : SALOME::GenericObj
+  {
+    void setData(inout MgAdaptHypothesisData data);
+
+    void setMedFileIn(in string MedFileIn);
+    string getMedFileIn();
+
+    void setMedFileOut(in string MedFileOut);
+    string getMedFileOut();
+
+    void setMeshName(in string s);
+    string getMeshName();
+
+    void setMeshNameOut(in string s);
+    string getMeshNameOut();
+
+    void setMeshOutMed(in boolean b);
+    boolean getMeshOutMed();
+
+    void setPublish(in boolean b);
+    boolean getPublish();
+
+    void setSizeMapFieldName(in string s);
+    string getSizeMapFieldName();
+
+    void setTimeStep(in long s);
+    long getTimeStep();
+
+    void setTimeStepRank(in long s, in long f);
+    long getRank();
+
+    void setTimeStepRankLast();
+    void setNoTimeStep();
+
+    void setLogFile(in string f);
+    string getLogFile();
+
+    void setVerbosityLevel(in long f);
+    long getVerbosityLevel();
+
+    void setRemoveOnSuccess(in boolean f);
+    boolean getRemoveOnSuccess();
+
+    MgAdaptHypothesisData getData();
+
+    void setUseLocalMap(in boolean f);
+    boolean getUseLocalMap();
+
+    void setUseBackgroundMap(in boolean f);
+    boolean getUseBackgroundMap();
+
+    void setUseConstantValue(in boolean f);
+    boolean getUseConstantValue();
+
+    void setConstantSize(in double f);
+    double getConstantSize();
+
+    void setSizeMapFile(in string f);
+    string getSizeMapFile();
+
+    void setFromMedFile(in boolean f);
+    boolean isFromMedFile();
+
+    void setKeepWorkingFiles(in boolean f);
+    boolean getKeepWorkingFiles();
+
+    void setPrintLogInFile(in boolean f);
+    boolean getPrintLogInFile();
+
+    void setWorkingDir(in string f);
+    string getWorkingDir();
+
+    void setSizeMapType(in string f);
+    boolean setAll();
+    string getCommandToRun();
+    void compute() raises(SALOME::SALOME_Exception);
+    string getErrMsg();
+    string getFileName();
+    string getExeName();
+    void copyMgAdaptHypothesisData(in MgAdaptHypothesisData f);
+
+    //void checkDirPath(inout string f);
+
+    boolean hasOptionDefined(in string optionName);
+    void setOptionValue(in string optionName, in string optionValue) raises (SALOME::SALOME_Exception);
+    string getOptionValue(in string optionName, inout boolean isDefault) raises (SALOME::SALOME_Exception);
+    SMESH::string_array getCustomOptionValuesStrVec();
+    SMESH::string_array getOptionValuesStrVec();
+  };
+
+  typedef MG_ADAPT MG_ADAPT_HYPOTHESIS;
+  interface MG_ADAPT_OBJECT : SALOME::GenericObj
+  {
+    void setMeshIn(in SMESH_Mesh theMesh)    raises (SALOME::SALOME_Exception);
+    void setMEDFileIn(in string f)           raises (SALOME::SALOME_Exception);
+    void setMEDFileOut(in string f)          raises (SALOME::SALOME_Exception);
+    void setMEDFileBackground(in string f)   raises (SALOME::SALOME_Exception);
+    void AddHypothesis(in MG_ADAPT mg)       raises (SALOME::SALOME_Exception);
+    long Compute(in boolean Publish)         raises (SALOME::SALOME_Exception);
+  };
+};
+
+#endif // MG_ADAPT_IDL
index a6b6882ccc99a9fbd7802f857b1fd105ca3cfd4d..eb46c3c788bbe3b947224249daf112153538f72e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #ifndef _SMESH_BASICHYPOTHESIS_IDL_
 #define _SMESH_BASICHYPOTHESIS_IDL_
 
+#include "GEOM_Gen.idl"
+
 #include "SALOME_Exception.idl"
 #include "SMESH_Hypothesis.idl"
 #include "SMESH_Mesh.idl"
-
 /*!
  * StdMeshers: interfaces to standard hypotheses and algorithms
  */
@@ -161,32 +162,32 @@ module StdMeshers
     /*!
      * Builds and returns point distribution according to passed density function
      */
-    SMESH::double_array BuildDistributionExpr( in string func, in long nbSeg, in long conv )
+    SMESH::double_array BuildDistributionExpr( in string func, in long nbSeg, in long  conv )
       raises (SALOME::SALOME_Exception);
-    SMESH::double_array BuildDistributionTab( in SMESH::double_array func, in long nbSeg, in long conv )
+    SMESH::double_array BuildDistributionTab( in SMESH::double_array func, in long  nbSeg, in long  conv )
       raises (SALOME::SALOME_Exception);
   
     /*!
      * Sets <number of segments> parameter value
      */
-    void SetNumberOfSegments(in long segmentsNumber)
+    void SetNumberOfSegments(in SMESH::smIdType  segmentsNumber)
       raises (SALOME::SALOME_Exception);
 
     /*!
      * Returns <number of segments> parameter value
      */
-    long GetNumberOfSegments();
+    long  GetNumberOfSegments();
 
     /*!
      * Sets <distribution type> parameter value
      */
-    void SetDistrType(in long typ)
+    void SetDistrType(in long  typ)
       raises (SALOME::SALOME_Exception);
 
     /*!
      * Returns <distribution type> parameter value
      */
-    long GetDistrType();
+    long  GetDistrType();
 
     /*!
      * Sets <scale factor> parameter value
@@ -227,13 +228,13 @@ module StdMeshers
     /*!
      * Sets <conversion mode> parameter value for functional distributions
      */
-    void SetConversionMode(in long conv )
+    void SetConversionMode(in long  conv )
       raises (SALOME::SALOME_Exception);
 
     /*!
      * Returns <conversion mode> parameter value for functional distributions
      */
-    long ConversionMode()
+    long  ConversionMode()
       raises (SALOME::SALOME_Exception);
   };
 
@@ -323,13 +324,13 @@ module StdMeshers
     /*!
      * Sets <mode> parameter value
      */
-    void SetMode(in long mode) 
+    void SetMode(in long  mode) 
       raises (SALOME::SALOME_Exception);
 
     /*!
      * Returns <mode> parameter value
      */
-    long GetMode();
+    long  GetMode();
   };
 
   /*!
@@ -395,7 +396,7 @@ module StdMeshers
      */
     void SetPoints(in SMESH::double_array listParams) 
       raises (SALOME::SALOME_Exception);
-    void SetNbSegments(in SMESH::long_array listNbSeg) 
+    void SetNbSegments(in SMESH::smIdType_array listNbSeg)
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -406,7 +407,7 @@ module StdMeshers
     /*!
      * Returns list of numbers of segments
      */
-    SMESH::long_array GetNbSegments();
+    SMESH::smIdType_array GetNbSegments();
 
   };
 
@@ -519,13 +520,13 @@ module StdMeshers
     /*!
      * Sets <number of segments> parameter value
      */
-    void SetNumberOfLayers(in long numberOfLayers) 
+    void SetNumberOfLayers(in long  numberOfLayers) 
       raises (SALOME::SALOME_Exception);
 
     /*!
      * Returns <number of layers> parameter value
      */
-    long GetNumberOfLayers();
+    long  GetNumberOfLayers();
 
   };
 
@@ -665,7 +666,7 @@ module StdMeshers
      * Result may be nil if association not set.
      * Valid indices are 1 and 2
      */
-    GEOM::GEOM_Object  GetSourceVertex(in long i)
+    GEOM::GEOM_Object  GetSourceVertex(in long  i)
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -673,7 +674,7 @@ module StdMeshers
      * Result may be nil if association not set.
      * Valid indices are 1 and 2
      */
-    GEOM::GEOM_Object  GetTargetVertex(in long i)
+    GEOM::GEOM_Object  GetTargetVertex(in long  i)
       raises (SALOME::SALOME_Exception);
   };
 
@@ -722,7 +723,7 @@ module StdMeshers
      * Result may be nil if association not set.
      * Valid indices are 1 and 2
      */
-    GEOM::GEOM_Object  GetSourceVertex(in long i)
+    GEOM::GEOM_Object  GetSourceVertex(in long  i)
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -730,7 +731,7 @@ module StdMeshers
      * Result may be nil if association not set.
      * Valid indices are 1 and 2
      */
-    GEOM::GEOM_Object  GetTargetVertex(in long i)
+    GEOM::GEOM_Object  GetTargetVertex(in long  i)
       raises (SALOME::SALOME_Exception);
   };
 
@@ -771,12 +772,12 @@ module StdMeshers
     /*!
      * Set base vertex for triangles
      */
-    void SetTriaVertex( in long vertID );
+    void SetTriaVertex( in long  vertID );
     
     /*!
      * Returns base vertex for triangles
      */
-    long GetTriaVertex();
+    long  GetTriaVertex();
     
     /*!
      * Set entry of the main object
@@ -933,7 +934,7 @@ module StdMeshers
    * interface of "Viscous Layers 2D" hypothesis.
    * This hypothesis specifies parameters of layers of quadrilaterals to build
    * near mesh boundary. This hypothesis can be used by several 2D algorithms:
-   * Mefisto, Quadrangle (mapping), NETGEN, BLSURF
+   * Quadrangle (mapping), NETGEN, BLSURF
    */
   interface StdMeshers_ViscousLayers2D : SMESH::SMESH_Hypothesis
   {
@@ -1061,6 +1062,15 @@ module StdMeshers
      */
     void SetToCreateFaces(in boolean toCreate);
     boolean GetToCreateFaces();
+    
+    /*!
+     * Enable creation of mesh faces.
+     */
+    void SetToUseQuanta(in boolean toUseQuanta);
+    boolean GetToUseQuanta();
+
+    void SetQuanta(in double quanta) raises (SALOME::SALOME_Exception);
+    double GetQuanta();
 
     /*!
      * Return axes at which a number of generated hexahedra is maximal
@@ -1129,13 +1139,6 @@ module StdMeshers
   {
   };
 
-  /*!
-   * StdMeshers_MEFISTO_2D: interface of "Triangle (Mefisto)" algorithm
-   */
-  interface StdMeshers_MEFISTO_2D : SMESH::SMESH_2D_Algo
-  {
-  };
-
   /*!
    * StdMeshers_Quadrangle_2D: interface of "Quadrangle (Mapping)" algorithm
    */
@@ -1254,6 +1257,39 @@ module StdMeshers
   interface StdMeshers_Cartesian_3D : SMESH::SMESH_3D_Algo
   {
   };
+  /*!
+   * StdMeshers_Cartesian_3D: interface of "ViscousLayerBuilder" algorithm
+   */
+  interface StdMeshers_ViscousLayerBuilder : SMESH::SMESH_2D_Algo
+  {
+    /*!
+     * Set faces to exclude from the definition of face to shrink
+     */
+    void SetIgnoreFaces(in SMESH::long_array faceIDs) raises (SALOME::SALOME_Exception);
+    // SMESH::long_array GetIgnoreFaces();
+
+    /*!
+     * Set faces either to exclude from treatment or to make the offset geometry on.
+     */
+    void SetFaces(in SMESH::long_array faceIDs,
+                  in boolean           toIgnore) raises (SALOME::SALOME_Exception);
+    // SMESH::long_array GetFaces();
+    // boolean           GetIsToIgnoreFaces();
+
+    void SetTotalThickness(in double thickness) raises (SALOME::SALOME_Exception);
+    void SetNumberLayers(in short numberOfLayers ) raises (SALOME::SALOME_Exception);
+    void SetStretchFactor(in double strechFactor ) raises (SALOME::SALOME_Exception);
+    void SetMethod( in VLExtrusionMethod how ) raises (SALOME::SALOME_Exception);
+    void SetGroupName(in string name) raises (SALOME::SALOME_Exception);
+
+    GEOM::GEOM_Object GetShrinkGeometry( in SMESH::SMESH_Mesh finalMesh, in GEOM::GEOM_Object theObject ) raises (SALOME::SALOME_Exception);
+
+    /*!
+     * Build the prismatic layer from the shrink mesh
+     */
+    boolean AddLayers( in SMESH::SMESH_Mesh sourceMesh, in SMESH::SMESH_Mesh finalMesh, in GEOM::GEOM_Object theObject ) raises (SALOME::SALOME_Exception);
+
+  };
 
 };
 
index 1d3e0f18739148e68532c082cae2b25bd4b15460..05cfa6dc43a1c3e7f6d193944f233abdff67f5d1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -30,6 +30,7 @@
 #include "SALOME_GenericObj.idl"
 #include "GEOM_Gen.idl"
 #include "SMESH_Mesh.idl"
+#include "SMESH_smIdType.idl"
 
 module SMESH
 {
@@ -41,12 +42,14 @@ module SMESH
   {
     FT_AspectRatio,
     FT_AspectRatio3D,
-    FT_Warping,   
+    FT_Warping,
+    FT_Warping3D,
     FT_MinimumAngle,
     FT_Taper,       
     FT_Skew,         
     FT_Area,          
-    FT_Volume3D,          
+    FT_Volume3D,   
+    FT_ScaledJacobian,       
     FT_MaxElementLength2D,
     FT_MaxElementLength3D,
     FT_FreeBorders,
@@ -119,8 +122,8 @@ module SMESH
   */
   interface NumericalFunctor: Functor
   {
-    double  GetValue    ( in long theElementId );
-    boolean IsApplicable( in long theElementId );
+    double  GetValue    ( in smIdType theElementId );
+    boolean IsApplicable( in smIdType theElementId );
 
     Histogram GetHistogram     ( in short nbIntervals, in boolean isLogarithmic );
     Histogram GetLocalHistogram( in short nbIntervals, in boolean isLogarithmic,
@@ -136,6 +139,7 @@ module SMESH
   interface AspectRatio     : NumericalFunctor{};
   interface AspectRatio3D   : NumericalFunctor{};
   interface Warping         : NumericalFunctor{};
+  interface Warping3D       : NumericalFunctor {};
   interface Taper           : NumericalFunctor{};
   interface Skew            : NumericalFunctor{};
   interface Area            : NumericalFunctor{};
@@ -169,6 +173,7 @@ module SMESH
   };
   interface BallDiameter    : NumericalFunctor{};
   interface NodeConnectivityNumber : NumericalFunctor{};
+  interface ScaledJacobian  : NumericalFunctor{};
   
 
   /*!
@@ -374,7 +379,7 @@ module SMESH
   */
   interface RangeOfIds: Predicate
   {
-    void            SetRange( in long_array theIds );
+    void            SetRange( in smIdType_array theIds );
     boolean         SetRangeStr( in string theRange );
     string          GetRangeStr();
 
@@ -474,7 +479,7 @@ module SMESH
     void            SetElementType( in ElementType type );
     void            SetPoint      ( in double x, in double y, in double z );
     void            SetVertex     ( in GEOM::GEOM_Object vertex );
-    void            SetNode       ( in long nodeID );
+    void            SetNode       ( in smIdType nodeID );
     string          GetThreshold  ( out ThresholdType type );
     void            SetThreshold  ( in string threshold, in ThresholdType type ) 
       raises (SALOME::SALOME_Exception);
@@ -522,16 +527,16 @@ module SMESH
 
     typedef sequence<Criterion> Criteria;
 
-    void          SetPredicate( in Predicate thePredicate );
-    void          SetMesh( in SMESH_Mesh theMesh );
+    void           SetPredicate( in Predicate thePredicate );
+    void           SetMesh( in SMESH_Mesh theMesh );
 
-    long_array    GetElementsId( in SMESH_Mesh theMesh );
-    long_array    GetElementsIdFromParts( in ListOfIDSources theParts );
-    ElementType   GetElementType();
-    Predicate     GetPredicate();
+    smIdType_array GetElementsId( in SMESH_Mesh theMesh );
+    smIdType_array GetElementsIdFromParts( in ListOfIDSources theParts );
+    ElementType    GetElementType();
+    Predicate      GetPredicate();
 
-    boolean       GetCriteria( out Criteria theCriteria );
-    boolean       SetCriteria( in Criteria theCriteria );
+    boolean        GetCriteria( out Criteria theCriteria );
+    boolean        SetCriteria( in Criteria theCriteria );
   };
 
 
@@ -583,6 +588,7 @@ module SMESH
     AspectRatio        CreateAspectRatio();
     AspectRatio3D      CreateAspectRatio3D();
     Warping            CreateWarping();
+    Warping3D          CreateWarping3D();
     Taper              CreateTaper();
     Skew               CreateSkew();
     Area               CreateArea();
@@ -597,6 +603,7 @@ module SMESH
     MultiConnection2D  CreateMultiConnection2D();
     BallDiameter       CreateBallDiameter();
     NodeConnectivityNumber CreateNodeConnectivityNumber();
+    ScaledJacobian     CreateScaledJacobian();
     /*!
      *  Create logical functors ( predicates )
      */
index a7e4c50940d535482525235f37ca4fb35c27e86c..2368039752816c4ebbe2d57a4462a5d598b936c9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 
 #include "SMESH_Mesh.idl"
 #include "SMESH_Hypothesis.idl"
+#include "SMESH_smIdType.idl"
+
+module SMESHHOMARD
+{
+  interface HOMARD_Gen;
+};
 
 module SMESH
 {
@@ -43,6 +49,8 @@ module SMESH
   interface FilterManager;
   interface SMESH_Pattern;
   interface Measurements;
+  interface MG_ADAPT;
+  interface MG_ADAPT_OBJECT;
 
   /*!
    * Tags definition
@@ -111,7 +119,7 @@ module SMESH
     short   code;       // ComputeErrorName or, if negative, algo specific code
     string  comment;    // textual problem description
     string  algoName;
-    short   subShapeID; // id of sub-shape of a shape to mesh
+    long    subShapeID; // id of sub-shape of a shape to mesh
     boolean hasBadMesh; // there are elements preventing computation available for visualization
   };
   typedef sequence<ComputeError> compute_error_array;
@@ -151,12 +159,12 @@ module SMESH
       Update the study
      */
     void UpdateStudy();
-    
+
     /*!
       Set enable publishing in the study
      */
     void SetEnablePublish( in boolean theIsEnablePublish );
-    
+
     /*!
       Get enable publishing in the study
      */
@@ -234,6 +242,16 @@ module SMESH
     SMESH_Mesh CreateMesh( in GEOM::GEOM_Object theObject )
       raises ( SALOME::SALOME_Exception );
 
+    /*!
+     * Create a Mesh object, given a geometry shape.
+     * Mesh is created empty (no points, no elements).
+     * Shape is explored via GEOM_Client to create local copies.
+     * of TopoDS_Shapes and bind CORBA references of shape & subshapes
+     * with TopoDS_Shapes
+     * The mesh is a parallel one
+     */
+    SMESH_ParallelMesh CreateParallelMesh( in GEOM::GEOM_Object theObject )
+      raises ( SALOME::SALOME_Exception );
     /*!
      * Create an empty mesh object
      */
@@ -250,16 +268,9 @@ module SMESH
     /*!
      * Create Mesh object(s) importing data from given MED file
      */
-     mesh_array CreateMeshesFromMED( in string theFileName,
-                                     out SMESH::DriverMED_ReadStatus theStatus )
-       raises ( SALOME::SALOME_Exception );
-
-    /*!
-     * Create Mesh object(s) importing data from given MED file
-     */
-     mesh_array CreateMeshesFromSAUV( in string theFileName,
-                                     out SMESH::DriverMED_ReadStatus theStatus )
-       raises ( SALOME::SALOME_Exception );
+    mesh_array CreateMeshesFromMED( in string theFileName,
+                                    out SMESH::DriverMED_ReadStatus theStatus )
+      raises ( SALOME::SALOME_Exception );
 
     /*!
      * Create Mesh object importing data from given STL file
@@ -283,6 +294,16 @@ module SMESH
                                     in boolean              theMakeRequiredGroups,
                                     out SMESH::ComputeError theError)
       raises ( SALOME::SALOME_Exception );
+    /*!
+     * Create a dual mesh of a Tetrahedron mesh
+     *  \param mesh - TetraHedron mesh to create dual from
+     *  \param meshName - a name of the new mesh
+     *  \param adaptToShape - if True project boundary point on shape
+     */
+    SMESH_Mesh CreateDualMesh(in SMESH_IDSource mesh,
+                              in string         meshName,
+                              in boolean        adaptToShape)
+      raises ( SALOME::SALOME_Exception );
 
     /*!
      * Create a mesh by copying a part of another mesh
@@ -304,7 +325,7 @@ module SMESH
      *  \param newGeometry - a new geometry
      *  \param meshName - a name of the new mesh
      *  \param toCopyGroups - to create groups in the new mesh
-     *  \param toReuseHypotheses - if True, existing hypothesis will be used by the new mesh, 
+     *  \param toReuseHypotheses - if True, existing hypothesis will be used by the new mesh,
      *         otherwise new hypotheses with the same parameters will be created for the new mesh.
      *  \param toCopyElements - to copy mesh elements of same sub-shapes of the two geometries
      *  \param newMesh - return a new mesh
@@ -385,8 +406,8 @@ module SMESH
     /*!
      * Evaluates size of prospective mesh on a shape
      */
-    long_array  Evaluate(in SMESH_Mesh        theMesh,
-                         in GEOM::GEOM_Object theSubObject)
+    smIdType_array  Evaluate(in SMESH_Mesh        theMesh,
+                             in GEOM::GEOM_Object theSubObject)
       raises ( SALOME::SALOME_Exception );
 
     /*!
@@ -444,17 +465,17 @@ module SMESH
      * The returned geometrical object, if not nil, is either found in the
      * study or is published by this method with the given name
      */
-    GEOM::GEOM_Object GetGeometryByMeshElement( in SMESH_Mesh  theMesh,
-                                                in long        theElementID,
-                                                in string      theGeomName)
+    GEOM::GEOM_Object GetGeometryByMeshElement( in SMESH_Mesh theMesh,
+                                                in smIdType   theElementID,
+                                                in string     theGeomName)
       raises ( SALOME::SALOME_Exception );
 
     /*!
      * Return geometrical object the given element is built on.
      * The returned geometrical object not published in study by this method.
      */
-    GEOM::GEOM_Object FindGeometryByMeshElement( in SMESH_Mesh  theMesh,
-                                                 in long        theElementID)
+    GEOM::GEOM_Object FindGeometryByMeshElement( in SMESH_Mesh theMesh,
+                                                 in smIdType   theElementID)
       raises ( SALOME::SALOME_Exception );
 
     /*!
@@ -525,10 +546,10 @@ module SMESH
      */
     long_array GetInsideSphere( in SMESH_IDSource theSource,
                                in ElementType    theElemType,
-                               in double theX, 
-                               in double theY, 
+                               in double theX,
+                               in double theY,
                                in double theZ,
-                               in double theR );    
+                               in double theR );
 
     /*!
      * Return indices of elements, which are located inside the box
@@ -543,12 +564,12 @@ module SMESH
      */
     long_array GetInsideBox( in SMESH_IDSource theSource,
                             in ElementType    theElemType,
-                            in double theX1, 
-                            in double theY1, 
+                            in double theX1,
+                            in double theY1,
                             in double theZ1,
                             in double theX2,
                             in double theY2,
-                            in double theZ2);    
+                            in double theZ2);
     /*!
      * Return indices of elements, which are located inside the box
      *  \param theSource - mesh, sub-mesh or group
@@ -564,14 +585,14 @@ module SMESH
      */
     long_array GetInsideCylinder( in SMESH_IDSource theSource,
                                  in ElementType    theElemType,
-                                 in double theX, 
-                                 in double theY, 
+                                 in double theX,
+                                 in double theY,
                                  in double theZ,
                                  in double theDX,
                                  in double theDY,
                                  in double theDZ,
                                  in double theH,
-                                 in double theR );    
+                                 in double theR );
     /*!
      * Return indices of elements, which are located inside the geometry
      *  \param theSource - mesh, sub-mesh or group
@@ -582,9 +603,13 @@ module SMESH
     long_array GetInside( in SMESH_IDSource theSource,
                          in ElementType    theElemType,
                          in GEOM::GEOM_Object theGeom,
-                         in double theTolerance );    
-
+                         in double theTolerance );
 
+    MG_ADAPT CreateMG_ADAPT();
+    SMESHHOMARD::HOMARD_Gen CreateHOMARD_ADAPT() raises ( SALOME::SALOME_Exception );
+    //MG_ADAPT_OBJECT Adaptation(in string adaptType);
+    SALOME::GenericObj Adaptation(in string adaptType) raises ( SALOME::SALOME_Exception );
+    MG_ADAPT CreateAdaptationHypothesis();
   };
 
 };
index b22fa7b1fe388bc1dc3bac27bc12f22743f19f13..7be7c98177a89bc46dc62d17b185c45324ecb456 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -32,6 +32,7 @@
 #include "SALOMEDS_Attributes.idl"
 
 #include "SMESH_Mesh.idl"
+#include "SMESH_smIdType.idl"
 
 module SMESH
 {
@@ -61,7 +62,7 @@ module SMESH
     /*!
      * Returns the number of elements in the group
      */
-    long Size();
+    smIdType Size();
 
     /*!
      * Returns true if the group does not contain any elements
@@ -71,29 +72,29 @@ module SMESH
     /*!
      * returns true if the group contains an element with ID == <elem_id> 
      */
-    boolean Contains( in long elem_id );
+    boolean Contains( in smIdType elem_id );
 
     /*!
      * Returns ID of an element at position <elem_index> counted from 1
      */
-    long GetID( in long elem_index );
+    smIdType GetID( in smIdType elem_index );
 
     /*!
      * Returns a sequence of all element IDs in the group
      */
-    long_array GetListOfID();
+    smIdType_array GetListOfID();
 
     /*!
      * Get the number of nodes of cells included to the group
      * For a nodal group returns the same value as Size() function
      */
-    long GetNumberOfNodes();
+    smIdType GetNumberOfNodes();
 
     /*!
      * Get IDs of nodes of cells included to the group
      * For a nodal group returns result of GetListOfID() function
      */
-    long_array GetNodeIDs();
+    smIdType_array GetNodeIDs();
 
     /*!
      * Return true if GetNumberOfNodes() won't take a long time for computation
@@ -142,24 +143,24 @@ module SMESH
     /*!
      * Adds elements or nodes with specified identifiers to the group
      */
-    long Add( in long_array elem_ids );
+    smIdType Add( in smIdType_array elem_ids );
     /*!
      * Adds elements or nodes that match specified predicate to the group
      */
-    long AddByPredicate( in Predicate thePredicate );
+    smIdType AddByPredicate( in Predicate thePredicate );
     /*!
      * Add all elements or nodes from the specified source to the group
      */
-    long AddFrom( in SMESH_IDSource theSource );
+    smIdType AddFrom( in SMESH_IDSource theSource );
 
     /*!
      * Removes elements or nodes with specified identifiers from the group
      */
-    long Remove( in long_array elem_ids );
+    smIdType Remove( in smIdType_array elem_ids );
     /*!
      * Removes elements or nodes that match specified predicate from the group
      */
-    long RemoveByPredicate( in Predicate thePredicate );
+    smIdType RemoveByPredicate( in Predicate thePredicate );
 
   };
 
diff --git a/idl/SMESH_Homard.idl b/idl/SMESH_Homard.idl
new file mode 100644 (file)
index 0000000..c4e8c6d
--- /dev/null
@@ -0,0 +1,183 @@
+// Copyright (C) 2011-2024  CEA, EDF
+//
+// 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 _SMESH_HOMARD_IDL
+#define _SMESH_HOMARD_IDL
+
+#include "SMESH_Mesh.idl"
+
+#include "SALOME_Exception.idl"
+#include "SALOMEDS.idl"
+
+module SMESHHOMARD
+{
+  typedef sequence<double> double_array;
+  typedef sequence<double> extrema;
+  typedef sequence<string> ListGroupType;
+  typedef sequence<string> ListBoundaryGroupType;
+  typedef sequence<string> listeBoundarys;
+
+  interface HOMARD_Boundary : SALOME::GenericObj
+  {
+    // Generalites
+    void     SetName(in string Name)         raises (SALOME::SALOME_Exception);
+    string   GetName()                       raises (SALOME::SALOME_Exception);
+
+    // Caracteristiques
+    void     SetType (in long Type)          raises (SALOME::SALOME_Exception);
+    long     GetType()                       raises (SALOME::SALOME_Exception);
+
+    void     SetDataFile(in string DataFile) raises (SALOME::SALOME_Exception);
+    string   GetDataFile()                   raises (SALOME::SALOME_Exception);
+
+    void     SetMeshName(in string MeshName) raises (SALOME::SALOME_Exception);
+    string   GetMeshName()                   raises (SALOME::SALOME_Exception);
+
+    void     SetCylinder (in double Xcentre, in double Ycentre, in double Zcentre,
+                          in double Xaxe, in double Yaxe, in double Zaxe, in double rayon)
+      raises (SALOME::SALOME_Exception);
+
+    void     SetSphere (in double Xcentre, in double Ycentre, in double Zcentre, in double rayon)
+      raises (SALOME::SALOME_Exception);
+
+    void     SetConeR (in double Xcentre1, in double Ycentre1, in double Zcentre1,
+                       in double Rayon1,
+                       in double Xcentre2, in double Ycentre2, in double Zcentre2,
+                       in double Rayon2) raises (SALOME::SALOME_Exception);
+
+    void     SetConeA(in double Xaxe, in double Yaxe, in double Zaxe, in double Angle,
+                      in double Xcentre, in double Ycentre, in double ZCentre)
+      raises (SALOME::SALOME_Exception);
+
+    void     SetTorus (in double Xcentre, in double Ycentre, in double Zcentre,
+                       in double Xaxe, in double Yaxe, in double Zaxe,
+                       in double rayonRev, in double rayonPri)
+      raises (SALOME::SALOME_Exception);
+
+    SMESHHOMARD::double_array GetCoords() raises (SALOME::SALOME_Exception);
+
+    void     SetLimit (in double Xincr, in double Yincr, in double Zincr)
+      raises (SALOME::SALOME_Exception);
+    SMESHHOMARD::double_array GetLimit() raises (SALOME::SALOME_Exception);
+
+    void       AddGroup(in string LeGroupe)                raises (SALOME::SALOME_Exception);
+    void       SetGroups(in ListGroupType ListGroup)       raises (SALOME::SALOME_Exception);
+    ListGroupType GetGroups()                              raises (SALOME::SALOME_Exception);
+
+    string   GetDumpPython()                 raises (SALOME::SALOME_Exception);
+  };
+
+  interface HOMARD_Cas : SALOME::GenericObj
+  {
+    void     SetDirName(in string NomDir) raises (SALOME::SALOME_Exception);
+    string   GetDirName()                 raises (SALOME::SALOME_Exception);
+
+    void     SetBoundingBox(in extrema LesExtremes)        raises (SALOME::SALOME_Exception);
+    extrema  GetBoundingBox()                              raises (SALOME::SALOME_Exception);
+
+    void     AddGroup(in string Group)                     raises (SALOME::SALOME_Exception);
+    void     SetGroups(in ListGroupType ListGroup)         raises (SALOME::SALOME_Exception);
+    ListGroupType GetGroups()                              raises (SALOME::SALOME_Exception);
+
+    void     AddBoundary(in string BoundaryName) raises (SALOME::SALOME_Exception);
+    void     AddBoundaryGroup(in string BoundaryName,
+                              in string Group) raises (SALOME::SALOME_Exception);
+    ListBoundaryGroupType GetBoundaryGroup() raises (SALOME::SALOME_Exception);
+    void SupprBoundaryGroup() raises (SALOME::SALOME_Exception);
+
+    string GetDumpPython() raises (SALOME::SALOME_Exception);
+  };
+
+  interface HOMARD_Gen : SALOME::GenericObj
+  {
+    // Create boundaries
+    HOMARD_Boundary CreateBoundaryCAO (in string BoundaryName, in string FileName)
+      raises(SALOME::SALOME_Exception);
+    HOMARD_Boundary CreateBoundaryDi (in string BoundaryName, in string MeshName,
+                                      in string FileName)
+      raises(SALOME::SALOME_Exception);
+    HOMARD_Boundary CreateBoundaryCylinder (in string BoundaryName,
+                                            in double Xcentre, in double Ycentre, in double Zcentre,
+                                            in double Xaxis, in double Yaxis, in double Zaxis,
+                                            in double Radius)
+      raises (SALOME::SALOME_Exception);
+    HOMARD_Boundary CreateBoundarySphere (in string BoundaryName,
+                                          in double Xcentre, in double Ycentre, in double Zcentre,
+                                          in double Radius)
+      raises(SALOME::SALOME_Exception);
+    HOMARD_Boundary CreateBoundaryConeR (in string BoundaryName,
+                                         in double Xcentre1, in double Ycentre1, in double Zcentre1,
+                                         in double Radius1,
+                                         in double Xcentre2, in double Ycentre2, in double Zcentre2,
+                                         in double Radius2)
+      raises(SALOME::SALOME_Exception);
+    HOMARD_Boundary CreateBoundaryConeA (in string BoundaryName,
+                                         in double Xaxis, in double Yaxis, in double Zaxis,
+                                         in double Angle,
+                                         in double Xcentre, in double Ycentre, in double Zcentre)
+      raises(SALOME::SALOME_Exception);
+    HOMARD_Boundary CreateBoundaryTorus (in string BoundaryName,
+                                         in double Xcentre, in double Ycentre, in double Zcentre,
+                                         in double Xaxis, in double Yaxis, in double Zaxis,
+                                         in double RadiusRev, in double RadiusPri)
+      raises (SALOME::SALOME_Exception);
+
+    // Set mesh (SMESH_Mesh object or MED file) and working directory
+    HOMARD_Cas CreateCaseOnMesh(in string MeshName,
+                                in SMESH::SMESH_Mesh smeshMesh,
+                                in string theWorkingDir) raises(SALOME::SALOME_Exception);
+    HOMARD_Cas CreateCase(in string MeshName,
+                          in string FileName,
+                          in string theWorkingDir) raises(SALOME::SALOME_Exception);
+
+    // Associate boundaries to groups
+    void AddBoundary(in string BoundaryName) raises (SALOME::SALOME_Exception);
+    void AddBoundaryGroup(in string BoundaryName,
+                          in string Group) raises (SALOME::SALOME_Exception);
+
+    // Information
+    HOMARD_Boundary  GetBoundary(in string BoundaryName) raises (SALOME::SALOME_Exception);
+    HOMARD_Cas       GetCase() raises (SALOME::SALOME_Exception);
+    listeBoundarys   GetAllBoundarysName()  raises (SALOME::SALOME_Exception);
+
+    //  Preferences
+    void SetConfType(in long ConfType) raises (SALOME::SALOME_Exception);
+    void SetKeepMedOUT (in boolean theKeepMedOUT);
+    void SetPublishMeshOUT (in boolean thePublishMeshOUT);
+    void SetMeshNameOUT (in string theMeshName) raises (SALOME::SALOME_Exception);
+    void SetMeshFileOUT (in string theFileName) raises (SALOME::SALOME_Exception);
+
+    void SetVerboseLevel (in long theLevel);
+    void SetKeepWorkingFiles (in boolean theKeepWorkingFiles);
+    void SetLogInFile (in boolean theLogInFile);
+    void SetLogFile (in string theFileName) raises (SALOME::SALOME_Exception);
+    void SetRemoveLogOnSuccess (in boolean theRemoveLogOnSuccess);
+
+    // Computation
+    long Compute() raises (SALOME::SALOME_Exception);
+
+    // Clean data
+    void InvalideBoundary (in string BoundaryName) raises (SALOME::SALOME_Exception);
+    long DeleteBoundary (in string BoundaryName) raises (SALOME::SALOME_Exception);
+    void DeleteCase() raises (SALOME::SALOME_Exception);
+  };
+
+}; // module SMESHHOMARD
+
+#endif
index d955b7113b7bfe59422ce7c41641b4828abc6599..c493f9dd4e531d512ea2a7cdb53df266e4d24623 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -57,7 +57,7 @@ module SMESH
     /*!
      * Get the internal Id 
      */
-    long GetId();
+    short GetId();
 
     /*!
      *  Set the variable parameter
index 726f543ec1e8cfa97a929ba85fbc29b96dc4dba2..192aa342bb2aaacf9efd75419efdb1cab375c224 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -28,6 +28,7 @@
 
 #include "SALOME_GenericObj.idl"
 #include "SMESH_Mesh.idl"
+#include "SMESH_smIdType.idl"
 
 module SMESH
 {
@@ -37,8 +38,8 @@ module SMESH
   struct Measure {
     double minX, minY, minZ;
     double maxX, maxY, maxZ;
-    long node1, node2;
-    long elem1, elem2;
+    smIdType node1, node2;
+    smIdType elem1, elem2;
     double value;
   };
 
index 9fdde321ff58874b5ff198ccf35681e4679bf41e..fabf323432f2c69feac607a4d34e25e88411fae8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -29,6 +29,7 @@
 #include "SALOME_Exception.idl"
 #include "SALOME_GenericObj.idl"
 #include "GEOM_Gen.idl"
+#include "SMESH_smIdType.idl"
 
 module SMESH
 {
@@ -41,6 +42,7 @@ module SMESH
 
   typedef sequence<double    > double_array ;
   typedef sequence<long      > long_array ;
+  typedef sequence<smIdType  > smIdType_array ;
   typedef sequence<string    > string_array ;
   typedef sequence<long_array> array_of_long_array ;
 
@@ -154,7 +156,7 @@ module SMESH
     Geom_BALL,
     Geom_LAST
   };
-  
+
   /*!
    * ElementOrder points out entities of what order are requested
    */
@@ -228,15 +230,15 @@ module SMESH
   enum DriverMED_ReadStatus // in the order of severity
   {
     DRS_OK,
-    DRS_EMPTY,          // a file contains no mesh with the given name
-    DRS_WARN_RENUMBER,  // a MED file has overlapped ranges of element numbers,
-                        // so the numbers from the file are ignored
-    DRS_WARN_SKIP_ELEM, // some elements were skipped due to incorrect file data
+    DRS_EMPTY,           // a file contains no mesh with the given name
+    DRS_WARN_RENUMBER,   // a MED file has overlapped ranges of element numbers,
+                         // so the numbers from the file are ignored
+    DRS_WARN_SKIP_ELEM,  // some elements were skipped due to incorrect file data
     DRS_WARN_DESCENDING, // some elements were skipped due to descending connectivity
-    DRS_FAIL            // general failure (exception etc.)
+    DRS_FAIL             // general failure (exception etc.)
   };
 
-  /*! 
+  /*!
    * \brief A structure containing information about MED file
    */
   struct MedFileInfo
@@ -261,13 +263,13 @@ module SMESH
    */
   const long EXTRUSION_FLAG_BOUNDARY = 1;
   const long EXTRUSION_FLAG_SEW = 2;
-  
+
   /*!
    * Structure used in mesh edit preview data (MeshPreviewStruct)
    */
   struct ElementSubType { ElementType SMDS_ElementType;
                           boolean     isPoly;
-                          long        nbNodesInElement; };
+                          short       nbNodesInElement; };
 
   typedef sequence<ElementSubType> types_array;
 
@@ -285,19 +287,19 @@ module SMESH
     /*!
      * Returns a sequence of all element IDs
      */
-    long_array GetIDs();
+    smIdType_array GetIDs();
 
     /*!
      * Returns number of mesh elements of each \a EntityType
      * @return array of number of elements per \a EntityType
      */
-    long_array GetMeshInfo();
+    smIdType_array GetMeshInfo();
 
     /*!
      * Returns number of mesh elements of each \a ElementType
      * @return array of number of elements per \a ElementType
      */
-    long_array GetNbElementsByType();
+    smIdType_array GetNbElementsByType();
 
     /*!
      * Returns types of elements it contains.
@@ -342,7 +344,7 @@ module SMESH
 
     /*!
      * Get geom shape to mesh. A result should not be nil. Use HasShapeToMesh()
-     * to know if a returned shape 
+     * to know if a returned shape
      */
     GEOM::GEOM_Object GetShapeToMesh()
       raises (SALOME::SALOME_Exception);
@@ -434,6 +436,12 @@ module SMESH
     void RemoveGroupWithContents( in SMESH_GroupBase aGroup )
       raises (SALOME::SALOME_Exception);
 
+    /*!
+    *   Return True if all the submeshes are computed
+    */
+    boolean IsComputedOK()
+      raises (SALOME::SALOME_Exception);
+
     /*!
      *  Get the list of groups existing in the mesh
      */
@@ -455,7 +463,7 @@ module SMESH
                              in SMESH_GroupBase aGroup2,
                              in string          name )
       raises (SALOME::SALOME_Exception);
-      
+
     /*!
      * Union of list of groups
      * New group is created. All mesh elements that are
@@ -474,7 +482,7 @@ module SMESH
                                  in SMESH_GroupBase aGroup2,
                                  in string          name )
       raises (SALOME::SALOME_Exception);
-      
+
     /*!
      *  Intersection of list of groups
      *  New group is created. All mesh elements that are
@@ -493,7 +501,7 @@ module SMESH
                            in SMESH_GroupBase aToolGroup,
                            in string          name )
       raises (SALOME::SALOME_Exception);
-      
+
     /*!
      *  Cut of lists of groups
      *  New group is created. All mesh elements that are present in
@@ -503,14 +511,14 @@ module SMESH
                                  in ListOfGroups aToolGroups,
                                  in string       name)
       raises (SALOME::SALOME_Exception);
-      
+
     /*!
      *  Create a group of entities basing on nodes of other groups.
      *  \param [in] aListOfGroups - list of either groups, sub-meshes or filters.
      *  \param [in] anElemType - a type of elements to include to the new group.
      *  \param [in] name - a name of the new group.
      *  \param [in] nbCommonNodes - criterion of inclusion of an element to the new group.
-     *  \param [in] underlyingOnly - if \c True, an element is included to the 
+     *  \param [in] underlyingOnly - if \c True, an element is included to the
      *         new group provided that it is based on nodes of an element of
      *         \a aListOfGroups
      *  \return SMESH_Group - the created group
@@ -655,11 +663,14 @@ module SMESH
      *         - 3D in the rest cases.
      *         If @a autoDimension is @c false, the space dimension is always 3.
      */
-    void ExportMED( in string      fileName, 
-                   in boolean     auto_groups, 
-                   in long        version,
-                   in boolean     overwrite,
-                   in boolean     autoDimension) raises (SALOME::SALOME_Exception);
+    void ExportMED( in string  fileName,
+                   in boolean auto_groups,
+                   in long    version,
+                   in boolean overwrite,
+                   in boolean autoDimension) raises (SALOME::SALOME_Exception);
+
+    long long ExportMEDCoupling(in boolean auto_groups,
+                                in boolean autoDimension) raises (SALOME::SALOME_Exception);
 
     /*!
      * Export a [part of] Mesh into a MED file
@@ -674,12 +685,12 @@ module SMESH
      *           med files in 4.0.0 (default format) or 3.2.1 or 3.3.1 formats.
      *           The minor must be between 0 and the current minor version of MED file library.
      *           If version is equal to -1, the version is not changed (default).
-     * - autoDimension : if @c True, a space dimension for export is defined by mesh 
+     * - autoDimension : if @c True, a space dimension for export is defined by mesh
      *                 configuration; for example a planar mesh lying on XOY plane
-     *                 will be exported as a mesh in 2D space. 
+     *                 will be exported as a mesh in 2D space.
      *                 If @a autoDimension == @c False, the space dimension is 3.
      * - fields : list of GEOM fields defined on the shape to mesh.
-     * - geomAssocFields : each character of this string means a need to export a 
+     * - 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;
@@ -688,6 +699,7 @@ module SMESH
      * - ZTolerance : tolerance in Z direction. If Z coordinate of a node is close to zero
      *                within a given tolerance, the coordinate is set to zero.
      *                If @a ZTolerance is negative, the node coordinates are kept as is.
+     * - saveNumbers : enable saving numbers of nodes and cells.
      */
     void ExportPartToMED( in SMESH_IDSource     meshPart,
                           in string             fileName,
@@ -697,45 +709,51 @@ module SMESH
                           in boolean            autoDimension,
                           in GEOM::ListOfFields fields,
                           in string             geomAssocFields,
-                          in double             ZTolerance) raises (SALOME::SALOME_Exception);
+                          in double             ZTolerance,
+                          in boolean            saveNumbers) raises (SALOME::SALOME_Exception);
+
+    long long ExportPartToMEDCoupling( in SMESH_IDSource     meshPart,
+                                       in boolean            auto_groups,
+                                       in boolean            autoDimension,
+                                       in GEOM::ListOfFields fields,
+                                       in string             geomAssocFields,
+                                       in double             ZTolerance,
+                                       in boolean            saveNumbers) raises (SALOME::SALOME_Exception);
 
-    /*!
-     * Export Mesh to SAUV formatted file
-     * Write a temporary med file and use med2sauv
-     */
-    void ExportSAUV( in string file, in boolean auto_groups )
-      raises (SALOME::SALOME_Exception);
-    
     /*!
      * Return string representation of a MED file version comprising nbDigits
      */
     string GetVersionString(in long minor, in short nbDigits);
-    
+
     /*!
      *  Return the list of med versions compatibles for write/append,
      *  encoded in 10*major+minor (for instance, code for med 3.2.1 is 32)
      */
     long_array GetMEDVersionsCompatibleForAppend();
-    
+
     /*!
      * Export Mesh to different Formats
      * (UNV supported version is I-DEAS 10)
      */
-    void ExportDAT( in string file ) raises (SALOME::SALOME_Exception);
-    void ExportUNV( in string file ) raises (SALOME::SALOME_Exception);
+    void ExportDAT( in string  file,
+                    in boolean renumer) raises (SALOME::SALOME_Exception);
+    void ExportUNV( in string  file,
+                    in boolean renumer ) raises (SALOME::SALOME_Exception);
     void ExportSTL( in string  file,
                     in boolean isascii ) raises (SALOME::SALOME_Exception);
-    void ExportCGNS( in SMESH_IDSource meshPart, 
+    void ExportCGNS( in SMESH_IDSource meshPart,
                      in string         file,
                      in boolean        overwrite,
                      in boolean        groupElemsByType) raises (SALOME::SALOME_Exception);
-    void ExportGMF( in SMESH_IDSource  meshPart, 
+    void ExportGMF( in SMESH_IDSource  meshPart,
                     in string          file,
                     in boolean         withRequiredGroups) raises (SALOME::SALOME_Exception);
-    void ExportPartToDAT( in SMESH_IDSource meshPart, 
-                          in string         file ) raises (SALOME::SALOME_Exception);
-    void ExportPartToUNV( in SMESH_IDSource meshPart, 
-                          in string         file ) raises (SALOME::SALOME_Exception);
+    void ExportPartToDAT( in SMESH_IDSource meshPart,
+                          in string         file,
+                          in boolean        renumer ) raises (SALOME::SALOME_Exception);
+    void ExportPartToUNV( in SMESH_IDSource meshPart,
+                          in string         file,
+                          in boolean        renumer ) raises (SALOME::SALOME_Exception);
     void ExportPartToSTL( in SMESH_IDSource meshPart,
                           in string         file,
                           in boolean        isascii ) raises (SALOME::SALOME_Exception);
@@ -747,123 +765,123 @@ module SMESH
     /*!
      * Get information about mesh contents
      */
-    long NbNodes()
+    smIdType NbNodes()
       raises (SALOME::SALOME_Exception);
 
-    long NbElements()
+    smIdType NbElements()
       raises (SALOME::SALOME_Exception);
 
-    long Nb0DElements()
+    smIdType Nb0DElements()
       raises (SALOME::SALOME_Exception);
 
-    long NbBalls()
+    smIdType NbBalls()
       raises (SALOME::SALOME_Exception);
 
-    long NbEdges()
+    smIdType NbEdges()
       raises (SALOME::SALOME_Exception);
 
-    long NbEdgesOfOrder(in ElementOrder order)
+    smIdType NbEdgesOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
-    long NbFaces()
+    smIdType NbFaces()
       raises (SALOME::SALOME_Exception);
 
-    long NbFacesOfOrder(in ElementOrder order)
+    smIdType NbFacesOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
-    long NbTriangles()
+    smIdType NbTriangles()
       raises (SALOME::SALOME_Exception);
 
-    long NbTrianglesOfOrder(in ElementOrder order)
+    smIdType NbTrianglesOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
-    long NbBiQuadTriangles()
+    smIdType NbBiQuadTriangles()
       raises (SALOME::SALOME_Exception);
 
-    long NbQuadrangles()
+    smIdType NbQuadrangles()
       raises (SALOME::SALOME_Exception);
 
-    long NbQuadranglesOfOrder(in ElementOrder order)
+    smIdType NbQuadranglesOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
-    long NbBiQuadQuadrangles()
+    smIdType NbBiQuadQuadrangles()
       raises (SALOME::SALOME_Exception);
 
-    long NbPolygons()
+    smIdType NbPolygons()
       raises (SALOME::SALOME_Exception);
 
-    long NbPolygonsOfOrder(in ElementOrder order)
+    smIdType NbPolygonsOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
-    long NbVolumes()
+    smIdType NbVolumes()
       raises (SALOME::SALOME_Exception);
 
-    long NbVolumesOfOrder(in ElementOrder order)
+    smIdType NbVolumesOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
-    long NbTetras()
+    smIdType NbTetras()
       raises (SALOME::SALOME_Exception);
 
-    long NbTetrasOfOrder(in ElementOrder order)
+    smIdType NbTetrasOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
-    long NbHexas()
+    smIdType NbHexas()
       raises (SALOME::SALOME_Exception);
 
-    long NbHexasOfOrder(in ElementOrder order)
+    smIdType NbHexasOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
-    long NbTriQuadraticHexas()
+    smIdType NbTriQuadraticHexas()
       raises (SALOME::SALOME_Exception);
 
-    long NbPyramids()
+    smIdType NbPyramids()
       raises (SALOME::SALOME_Exception);
 
-    long NbPyramidsOfOrder(in ElementOrder order)
+    smIdType NbPyramidsOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
-    long NbPrisms()
+    smIdType NbPrisms()
       raises (SALOME::SALOME_Exception);
 
-    long NbPrismsOfOrder(in ElementOrder order)
+    smIdType NbPrismsOfOrder(in ElementOrder order)
       raises (SALOME::SALOME_Exception);
 
-    long NbHexagonalPrisms()
+    smIdType NbHexagonalPrisms()
       raises (SALOME::SALOME_Exception);
 
-    long NbPolyhedrons()
+    smIdType NbPolyhedrons()
       raises (SALOME::SALOME_Exception);
 
-    long NbSubMesh()
+    smIdType NbSubMesh()
       raises (SALOME::SALOME_Exception);
 
-    long_array GetElementsId()
+    smIdType_array GetElementsId()
       raises (SALOME::SALOME_Exception);
 
-    long_array GetElementsByType( in ElementType theType )
+    smIdType_array GetElementsByType( in ElementType theType )
       raises (SALOME::SALOME_Exception);
 
-    long_array GetNodesId()
+    smIdType_array GetNodesId()
       raises (SALOME::SALOME_Exception);
-    
+
     /*!
      * Returns type of mesh element
-     */    
-    ElementType GetElementType( in long id, in boolean iselem )
+     */
+    ElementType GetElementType( in smIdType id, in boolean iselem )
       raises (SALOME::SALOME_Exception);
 
-    EntityType GetElementGeomType( in long id )
+    EntityType GetElementGeomType( in smIdType id )
       raises (SALOME::SALOME_Exception);
 
-    GeometryType GetElementShape( in long id )
+    GeometryType GetElementShape( in smIdType id )
       raises (SALOME::SALOME_Exception);
 
-    long_array GetSubMeshElementsId(in long ShapeID)
+    smIdType_array GetSubMeshElementsId(in long ShapeID)
       raises (SALOME::SALOME_Exception);
 
-    long_array GetSubMeshNodesId(in long ShapeID, in boolean all )
+    smIdType_array GetSubMeshNodesId(in long ShapeID, in boolean all )
       raises (SALOME::SALOME_Exception);
-    
+
     ElementType GetSubMeshElementType(in long ShapeID)
       raises (SALOME::SALOME_Exception);
 
@@ -887,7 +905,6 @@ module SMESH
      */
     boolean SetMeshOrder(in submesh_array_array theSubMeshArray);
 
-
     /*!
      * Get mesh description
      */
@@ -902,81 +919,81 @@ module SMESH
      * Get XYZ coordinates of node as list of double
      * If there is not node for given ID - returns empty list
      */
-    double_array GetNodeXYZ(in long id);
+    double_array GetNodeXYZ(in smIdType id);
 
     /*!
      * For given node returns list of IDs of inverse elements
      * If there is not node for given ID - returns empty list
      */
-    long_array GetNodeInverseElements(in long id, in ElementType elemType);
+    smIdType_array GetNodeInverseElements(in smIdType id, in ElementType elemType);
 
     /*!
      * \brief Return position of a node on shape
      */
-    NodePosition GetNodePosition(in long NodeID);
+    NodePosition GetNodePosition(in smIdType NodeID);
 
     /*!
      * \brief Return position of an element on shape
      */
-    ElementPosition GetElementPosition(in long ElemID);
+    ElementPosition GetElementPosition(in smIdType ElemID);
 
     /*!
      * If given element is node returns IDs of shape from position
      * If there is not node for given ID - returns -1
      */
-    long GetShapeID(in long id);
+    long GetShapeID(in smIdType id);
 
     /*!
-     * For given element returns ID of result shape after 
+     * For given element returns ID of result shape after
      * ::FindShape() from SMESH_MeshEditor
      * If there is not element for given ID - returns -1
      */
-    long GetShapeIDForElem(in long id);
+    long GetShapeIDForElem(in smIdType id);
 
     /*!
      * Returns number of nodes for given element
      * If there is not element for given ID - returns -1
      */
-    long GetElemNbNodes(in long id);
+    short GetElemNbNodes(in smIdType id);
 
     /*!
      * Returns IDs of nodes of given element
      */
-    long_array GetElemNodes(in long id);
+    smIdType_array GetElemNodes(in smIdType id);
 
     /*!
      * Returns ID of node by given index for given element
      * If there is not element for given ID - returns -1
      * If there is not node for given index - returns -2
      */
-    long GetElemNode(in long id, in long index);
+    smIdType GetElemNode(in smIdType id, in short index);
 
     /*!
      * Returns true if given node is medium node
      * in given quadratic element
      */
-    boolean IsMediumNode(in long ide, in long idn);
+    boolean IsMediumNode(in smIdType ide, in smIdType idn);
 
     /*!
      * Returns true if given node is medium node
      * in one of quadratic elements
      */
-    boolean IsMediumNodeOfAnyElem(in long idn, in ElementType elem_type);
+    boolean IsMediumNodeOfAnyElem(in smIdType idn, in ElementType elem_type);
 
     /*!
      * Returns number of edges for given element
      */
-    long ElemNbEdges(in long id);
+    long ElemNbEdges(in smIdType id);
 
     /*!
      * Returns number of faces for given element
      */
-    long ElemNbFaces(in long id);
+    long ElemNbFaces(in smIdType id);
 
     /*!
      * Returns nodes of given face (counted from zero) for given volumic element.
      */
-    long_array GetElemFaceNodes(in long elemId, in short faceIndex);
+    smIdType_array GetElemFaceNodes(in smIdType elemId, in short faceIndex);
 
     /*!
      * Returns three components of normal of given mesh face (or an empty array in KO case)
@@ -986,34 +1003,34 @@ module SMESH
     /*!
      * Returns an element based on all given nodes.
      */
-    long FindElementByNodes(in long_array nodes);
+    smIdType FindElementByNodes(in smIdType_array nodes);
 
     /*!
      * Return elements including all given nodes.
      */
-    long_array GetElementsByNodes(in long_array nodes, in ElementType elem_type);
+    smIdType_array GetElementsByNodes(in smIdType_array nodes, in ElementType elem_type);
 
     /*!
      * Returns true if given element is polygon
      */
-    boolean IsPoly(in long id);
+    boolean IsPoly(in smIdType id);
 
     /*!
      * Returns true if given element is quadratic
      */
-    boolean IsQuadratic(in long id);
+    boolean IsQuadratic(in smIdType id);
 
     /*!
      * Returns diameter of a ball discrete element or zero in case of an invalid \a id
      */
-    double GetBallDiameter(in long id);
+    double GetBallDiameter(in smIdType id);
 
     /*!
      * Returns XYZ coordinates of bary center for given element
      * as list of double
      * If there is not element for given ID - returns empty list
      */
-    double_array BaryCenter(in long id);
+    double_array BaryCenter(in smIdType id);
 
     /*! Gets information about imported MED file */
     MedFileInfo GetMEDFileInfo();
@@ -1040,37 +1057,37 @@ module SMESH
     /*!
      *
      */
-    long GetNumberOfElements()
+    smIdType GetNumberOfElements()
       raises (SALOME::SALOME_Exception);
 
     /*!
      *
      */
-    long GetNumberOfNodes( in boolean all )
+    smIdType GetNumberOfNodes( in boolean all )
       raises (SALOME::SALOME_Exception);
 
     /*!
      *
      */
-    long_array GetElementsId()
+    smIdType_array GetElementsId()
       raises (SALOME::SALOME_Exception);
 
     /*!
      *
      */
-    long_array GetElementsByType( in ElementType theType )
+    smIdType_array GetElementsByType( in ElementType theType )
       raises (SALOME::SALOME_Exception);
-    
+
     /*!
      * Returns type of mesh element (same as SMESH_Mesh::GetElementType() )
      */
-    ElementType GetElementType( in long id, in boolean iselem )
+    ElementType GetElementType( in smIdType id, in boolean iselem )
       raises (SALOME::SALOME_Exception);
 
     /*!
      *
      */
-    long_array GetNodesId()
+    smIdType_array GetNodesId()
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -1086,11 +1103,45 @@ module SMESH
       raises (SALOME::SALOME_Exception);
 
     /*!
-     * Get the internal Id
+     * Get the internal persisten Id
      */
     long GetId();
   };
 
+  interface SMESH_SequentialMesh:SMESH_Mesh{};
+  interface SMESH_ParallelMesh:SMESH_Mesh{
+
+    // Parallism method
+    long GetParallelismMethod();
+    void SetParallelismMethod(in long aMethod);
+
+    long GetParallelismDimension();
+    void SetParallelismDimension(in long aDim);
+
+    // Parameters for MutliThreading
+    long GetNbThreads();
+    void SetNbThreads(in long nbThreads);
+
+    // Parameters for MultiNode
+    string GetResource();
+    void SetResource(in string aResource);
+
+    long GetNbProc();
+    void SetNbProc(in long nbProc);
+
+    long GetNbProcPerNode();
+    void SetNbProcPerNode(in long nbProcPerNode);
+
+    long GetNbNode();
+    void SetNbNode(in long nbNode);
+
+    string GetWcKey();
+    void SetWcKey(in string wcKey);
+
+    string GetWalltime();
+    void SetWalltime(in string walltime);
+  };
+
 };
 
 #endif
index 7b8775a7bb3feebc082a5b06fa7cde6263fc4172..44366e66de28f8338098435d53bea6d20d085618 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -26,6 +26,7 @@
 
 #include "SMESH_Mesh.idl"
 #include "SMESH_Gen.idl"
+#include "SMESH_smIdType.idl"
 
 module SMESH
 {
@@ -36,7 +37,7 @@ module SMESH
 
   struct FreeBorder
   {
-    SMESH::long_array nodeIDs; // all nodes defining a free border
+    SMESH::smIdType_array nodeIDs; // all nodes defining a free border
     // 1st and last node is same in a closed border
   };
   struct FreeBorderPart
@@ -66,13 +67,13 @@ module SMESH
     // else                             ==> point is at xyz*
 
     // point 1
-    long node1ID1;
-    long node1ID2;
+    smIdType node1ID1;
+    smIdType node1ID2;
     PointStruct xyz1;
 
     // point 2
-    long node2ID1;
-    long node2ID2;
+    smIdType node2ID1;
+    smIdType node2ID2;
     PointStruct xyz2;
 
     // vector on the plane; to use a default plane set vector = (0,0,0)
@@ -83,9 +84,9 @@ module SMESH
   // face edge defined by two nodes + optional medium node
   struct FaceEdge
   {
-    long node1;
-    long node2;
-    long medium;
+    smIdType node1;
+    smIdType node2;
+    smIdType medium;
   };
   typedef sequence<FaceEdge> ListOfEdges;
 
@@ -112,14 +113,14 @@ module SMESH
     * created, this method returns list of their IDs, if new nodes
     * not created - returns empty list
     */
-    long_array GetLastCreatedNodes() raises (SALOME::SALOME_Exception);
+    smIdType_array GetLastCreatedNodes() raises (SALOME::SALOME_Exception);
 
    /*!
     * If during last operation of MeshEditor some elements were
     * created, this method returns list of their IDs, if new elements
     * not created - returns empty list
     */
-    long_array GetLastCreatedElems() raises (SALOME::SALOME_Exception);
+    smIdType_array GetLastCreatedElems() raises (SALOME::SALOME_Exception);
 
     /*!
      * \brief Clears sequences of last created elements and nodes 
@@ -136,27 +137,34 @@ module SMESH
      * \param IDsOfElements list of mesh elements identifiers
      * \return new ID source object
      */
-    SMESH_IDSource MakeIDSource(in long_array IDsOfElements, in ElementType type);
+    SMESH_IDSource MakeIDSource(in smIdType_array IDsOfElements, in ElementType type);
 
     /*!
      * \brief Remove mesh elements specified by their identifiers.
      * \param IDsOfElements list of mesh elements identifiers
      * \return \c true if elements are correctly removed or \c false otherwise
      */
-    boolean RemoveElements(in long_array IDsOfElements) raises (SALOME::SALOME_Exception);
+    boolean RemoveElements(in smIdType_array IDsOfElements) raises (SALOME::SALOME_Exception);
 
     /*!
      * \brief Remove mesh nodes specified by their identifiers.
      * \param IDsOfNodes list of mesh nodes identifiers
      * \return \c true if nodes are correctly removed or \c false otherwise
      */
-    boolean RemoveNodes(in long_array IDsOfNodes) raises (SALOME::SALOME_Exception);
+    boolean RemoveNodes(in smIdType_array IDsOfNodes) raises (SALOME::SALOME_Exception);
 
     /*!
      * \brief Remove all orphan nodes.
      * \return number of removed nodes
      */
-    long RemoveOrphanNodes() raises (SALOME::SALOME_Exception);
+    smIdType RemoveOrphanNodes() raises (SALOME::SALOME_Exception);
+
+    /*!
+     * \brief Remove a mesh node and change surrounding faces to close a hole
+     * \param nodeID node identifier
+     * \throw if mesh is not a triangle one
+     */
+    void RemoveNodeWithReconnection(in smIdType nodeID) raises (SALOME::SALOME_Exception);
 
     /*!
      * \brief Add a new node.
@@ -165,21 +173,21 @@ module SMESH
      * \param z Z coordinate of new node
      * \return integer identifier of new node
      */
-    long AddNode(in double x, in double y, in double z) raises (SALOME::SALOME_Exception);
+    smIdType AddNode(in double x, in double y, in double z) raises (SALOME::SALOME_Exception);
 
     /*!
      *  Create a 0D element on the given node.
      *  \param IdOfNode Node IDs for creation of element.
      *  \param DuplicateElements to add one more 0D element to a node or not
      */
-    long Add0DElement(in long    IDOfNode,
-                      in boolean DuplicateElements) raises (SALOME::SALOME_Exception);
+    smIdType Add0DElement(in smIdType    IDOfNode,
+                          in boolean DuplicateElements) raises (SALOME::SALOME_Exception);
 
     /*!
      *  Create a ball element on the given node.
      *  \param IdOfNode Node IDs for creation of element.
      */
-    long AddBall(in long IDOfNode, in double diameter) raises (SALOME::SALOME_Exception);
+    smIdType AddBall(in smIdType IDOfNode, in double diameter) raises (SALOME::SALOME_Exception);
 
     /*!
      *  Create an edge, either linear and quadratic (this is determed
@@ -189,7 +197,7 @@ module SMESH
      *  of MED. This description is located by the following link:
      *   http://www.salome-platform.org/salome2/web_med_internet/logiciels/medV2.2.2_doc_html/html/modele_de_donnees.html#3.
      */
-    long AddEdge(in long_array IDsOfNodes) raises (SALOME::SALOME_Exception);
+    smIdType AddEdge(in smIdType_array IDsOfNodes) raises (SALOME::SALOME_Exception);
 
     /*!
      *  Create face, either linear and quadratic (this is determed
@@ -199,16 +207,16 @@ module SMESH
      *  of MED. This description is located by the following link:
      *   http://www.salome-platform.org/salome2/web_med_internet/logiciels/medV2.2.2_doc_html/html/modele_de_donnees.html#3.
      */
-    long AddFace(in long_array IDsOfNodes) raises (SALOME::SALOME_Exception);
+    smIdType AddFace(in smIdType_array IDsOfNodes) raises (SALOME::SALOME_Exception);
 
-    long AddPolygonalFace(in long_array IdsOfNodes) raises (SALOME::SALOME_Exception);
+    smIdType AddPolygonalFace(in smIdType_array IdsOfNodes) raises (SALOME::SALOME_Exception);
 
     /*!
      * Create a quadratic polygonal face
      *  \param IdsOfNodes - nodes of the polygon; corner nodes follow first
-     *  \return long - ID of a new polygon
+     *  \return smIdType- ID of a new polygon
      */
-    long AddQuadPolygonalFace(in long_array IdsOfNodes) raises (SALOME::SALOME_Exception);
+    smIdType AddQuadPolygonalFace(in smIdType_array IdsOfNodes) raises (SALOME::SALOME_Exception);
 
     /*!
      *  Create volume, either linear and quadratic (this is determed
@@ -218,7 +226,7 @@ module SMESH
      *  of MED. This description is located by the following link:
      *   http://www.salome-platform.org/salome2/web_med_internet/logiciels/medV2.2.2_doc_html/html/modele_de_donnees.html#3.
      */
-    long AddVolume(in long_array IDsOfNodes) raises (SALOME::SALOME_Exception);
+    smIdType AddVolume(in smIdType_array IDsOfNodes) raises (SALOME::SALOME_Exception);
 
     /*!
      *  Create volume of many faces, giving nodes for each face.
@@ -226,15 +234,15 @@ module SMESH
      *  \param Quantities List of integer values, Quantities[i]
      *         gives quantity of nodes in face number i.
      */
-    long AddPolyhedralVolume (in long_array IdsOfNodes,
-                              in long_array Quantities) raises (SALOME::SALOME_Exception);
+    smIdType AddPolyhedralVolume (in smIdType_array IdsOfNodes,
+                                  in long_array Quantities) raises (SALOME::SALOME_Exception);
     /*!
      *  Create volume of many faces, giving IDs of existing faces.
      *  \param IdsOfFaces List of face IDs for volume creation.
      *  \note The created volume will refer only to nodes
      *        of the given faces, not to the faces itself.
      */
-    long AddPolyhedralVolumeByFaces (in long_array IdsOfFaces) raises (SALOME::SALOME_Exception);
+    smIdType AddPolyhedralVolumeByFaces (in smIdType_array IdsOfFaces) raises (SALOME::SALOME_Exception);
 
     /*!
      * Create 0D elements on all nodes of the given object.
@@ -255,7 +263,7 @@ module SMESH
       * \param NodeID - node ID
       * \param VertexID - vertex ID available through GEOM_Object.GetSubShapeIndices()[0]
      */
-    void SetNodeOnVertex(in long NodeID, in long VertexID)
+    void SetNodeOnVertex(in smIdType NodeID, in long VertexID)
       raises (SALOME::SALOME_Exception);
     /*!
      * \brief Store node position on an edge
@@ -263,7 +271,7 @@ module SMESH
       * \param EdgeID - edge ID available through GEOM_Object.GetSubShapeIndices()[0]
       * \param paramOnEdge - parameter on edge where the node is located
      */
-    void SetNodeOnEdge(in long NodeID, in long EdgeID, in double paramOnEdge)
+    void SetNodeOnEdge(in smIdType NodeID, in long EdgeID, in double paramOnEdge)
       raises (SALOME::SALOME_Exception);
     /*!
      * \brief Store node position on a face
@@ -272,36 +280,62 @@ module SMESH
       * \param u - U parameter on face where the node is located
       * \param v - V parameter on face where the node is located
      */
-    void SetNodeOnFace(in long NodeID, in long FaceID, in double u, in double v)
+    void SetNodeOnFace(in smIdType NodeID, in long FaceID, in double u, in double v)
       raises (SALOME::SALOME_Exception);
     /*!
      * \brief Bind a node to a solid
       * \param NodeID - node ID
       * \param SolidID - vertex ID available through GEOM_Object.GetSubShapeIndices()[0]
      */
-    void SetNodeInVolume(in long NodeID, in long SolidID)
+    void SetNodeInVolume(in smIdType NodeID, in long SolidID)
       raises (SALOME::SALOME_Exception);
     /*!
      * \brief Bind an element to a shape
       * \param ElementID - element ID
       * \param ShapeID - shape ID available through GEOM_Object.GetSubShapeIndices()[0]
      */
-    void SetMeshElementOnShape(in long ElementID, in long ShapeID)
+    void SetMeshElementOnShape(in smIdType ElementID, in long ShapeID)
       raises (SALOME::SALOME_Exception);
 
 
-    boolean MoveNode(in long NodeID, in double x, in double y, in double z)
+    /*!
+     * \brief Change node location
+     */
+    boolean MoveNode(in smIdType NodeID, in double x, in double y, in double z)
       raises (SALOME::SALOME_Exception);
 
-    boolean InverseDiag(in long NodeID1, in long NodeID2) 
+    /*!
+     * \brief Swap a diagonal of a quadrangle formed by two adjacent triangles
+     */
+    boolean InverseDiag(in smIdType NodeID1, in smIdType NodeID2) 
       raises (SALOME::SALOME_Exception);
-
-    boolean DeleteDiag(in long NodeID1, in long NodeID2) 
+    /*!
+     * \brief Delete a diagonal of a quadrangle formed by two adjacent triangles
+     *        so that a new quadrangle appears in place of the triangles
+     */
+    boolean DeleteDiag(in smIdType NodeID1, in smIdType NodeID2) 
       raises (SALOME::SALOME_Exception);
-
-    boolean Reorient(in long_array IDsOfElements) 
+    /*!
+     * \brief Replace each triangle bound by Node1-Node2 segment with
+     *        two triangles by connecting a node made on the segment with a node opposite
+     *        to the segment.
+     */
+    void AddNodeOnSegment(in smIdType Node1, in smIdType Node2, in double position)
       raises (SALOME::SALOME_Exception);
+    /*!
+     * \brief Split a face into triangles by adding a new node onto the face
+     *        and connecting the new node with face nodes
+     */
+    void AddNodeOnFace(in smIdType triangle, in double x, in double y, in double z);
 
+    /*!
+     * \brief Change orientation of cells
+     */
+    boolean Reorient(in smIdType_array IDsOfElements) 
+      raises (SALOME::SALOME_Exception);
+    /*!
+     * \brief Change orientation of cells
+     */
     boolean ReorientObject(in SMESH_IDSource theObject) 
       raises (SALOME::SALOME_Exception);
     /*!
@@ -317,6 +351,19 @@ module SMESH
                     in DirStruct      theDirection,
                     in long           theFace,
                     in PointStruct    thePoint) raises (SALOME::SALOME_Exception);
+    /*!
+     * \brief Reorient faces contained in a list of \a objectFaces
+     *        equally to faces contained in a list of \a referenceFaces.
+     * \param objectFaces - faces to reorient in a list including either
+     *        the whole mesh or groups and/or sub-meshes.
+     * \param referenceFaces  - correctly oriented faces in a list of groups and/or sub-meshes.
+     *        It can be empty, then the 1st face in \a objectFaces is used as the reference.
+     * \return number of reoriented faces.
+     */
+    long Reorient2DByNeighbours(in SMESH::ListOfIDSources objectFaces,
+                                in SMESH::ListOfIDSources referenceFaces)
+      raises (SALOME::SALOME_Exception);
+
     /*!
      * \brief Reorient faces basing on orientation of adjacent volumes.
      * \param faces - a list of objects containing face to reorient
@@ -337,7 +384,8 @@ module SMESH
      *                     is still performed; theMaxAngle is measured in radians.
      * \return \c true in case of success, FALSE otherwise.
      */
-    boolean TriToQuad (in long_array       IDsOfElements,
+
+    boolean TriToQuad (in smIdType_array   IDsOfElements,
                        in NumericalFunctor Criterion,
                        in double           MaxAngle) raises (SALOME::SALOME_Exception);
     /*!
@@ -355,7 +403,7 @@ module SMESH
      * \param theCriterion Is used to choose a diagonal for splitting.
      * \return TRUE in case of success, FALSE otherwise.
      */
-    boolean QuadToTri (in long_array       IDsOfElements,
+    boolean QuadToTri (in smIdType_array   IDsOfElements,
                        in NumericalFunctor Criterion) raises (SALOME::SALOME_Exception);
     /*!
      * \brief Split quadrangles into triangles.
@@ -376,8 +424,8 @@ module SMESH
      * \param the13Diag Is used to choose a diagonal for splitting.
      * \return TRUE in case of success, FALSE otherwise.
      */
-    boolean SplitQuad (in long_array IDsOfElements,
-                       in boolean    Diag13) raises (SALOME::SALOME_Exception);
+    boolean SplitQuad (in smIdType_array IDsOfElements,
+                       in boolean        Diag13) raises (SALOME::SALOME_Exception);
     /*!
      * \brief Split quadrangles into triangles.
      *
@@ -393,8 +441,8 @@ module SMESH
      *  \return 1 if 1-3 diagonal is better, 2 if 2-4
      *          diagonal is better, 0 if error occurs.
      */
-    long BestSplit (in long             IDOfQuad,
-                    in NumericalFunctor Criterion) raises (SALOME::SALOME_Exception);
+    short BestSplit (in smIdType         IDOfQuad,
+                     in NumericalFunctor Criterion) raises (SALOME::SALOME_Exception);
 
     /*!
      * \brief Split volumic elements into tetrahedrons
@@ -443,29 +491,29 @@ module SMESH
 
     enum Smooth_Method { LAPLACIAN_SMOOTH, CENTROIDAL_SMOOTH };
 
-    boolean Smooth(in long_array    IDsOfElements,
-                   in long_array    IDsOfFixedNodes,
-                   in long          MaxNbOfIterations,
-                   in double        MaxAspectRatio,
-                   in Smooth_Method Method) raises (SALOME::SALOME_Exception);
-
-    boolean SmoothObject(in SMESH_IDSource  theObject,
-                         in long_array      IDsOfFixedNodes,
-                         in long            MaxNbOfIterations,
-                         in double          MaxAspectRatio,
-                         in Smooth_Method   Method) raises (SALOME::SALOME_Exception);
-
-    boolean SmoothParametric(in long_array    IDsOfElements,
-                             in long_array    IDsOfFixedNodes,
-                             in long          MaxNbOfIterations,
-                             in double        MaxAspectRatio,
-                             in Smooth_Method Method) raises (SALOME::SALOME_Exception);
-
-    boolean SmoothParametricObject(in SMESH_IDSource  theObject,
-                                   in long_array      IDsOfFixedNodes,
-                                   in long            MaxNbOfIterations,
-                                   in double          MaxAspectRatio,
-                                   in Smooth_Method   Method) raises (SALOME::SALOME_Exception);
+    boolean Smooth(in smIdType_array IDsOfElements,
+                   in smIdType_array IDsOfFixedNodes,
+                   in short          MaxNbOfIterations,
+                   in double         MaxAspectRatio,
+                   in Smooth_Method  Method) raises (SALOME::SALOME_Exception);
+
+    boolean SmoothObject(in SMESH_IDSource theObject,
+                         in smIdType_array IDsOfFixedNodes,
+                         in short          MaxNbOfIterations,
+                         in double         MaxAspectRatio,
+                         in Smooth_Method  Method) raises (SALOME::SALOME_Exception);
+
+    boolean SmoothParametric(in smIdType_array IDsOfElements,
+                             in smIdType_array IDsOfFixedNodes,
+                             in short          MaxNbOfIterations,
+                             in double         MaxAspectRatio,
+                             in Smooth_Method  Method) raises (SALOME::SALOME_Exception);
+
+    boolean SmoothParametricObject(in SMESH_IDSource theObject,
+                                   in smIdType_array IDsOfFixedNodes,
+                                   in short          MaxNbOfIterations,
+                                   in double         MaxAspectRatio,
+                                   in Smooth_Method  Method) raises (SALOME::SALOME_Exception);
 
     void ConvertToQuadratic(in boolean theForce3d) 
       raises (SALOME::SALOME_Exception);
@@ -561,12 +609,12 @@ module SMESH
      *         corresponding to groups the input elements included in.
      *  \return ListOfGroups - new groups created if \a ToMakeGroups is true
      */
-    ListOfGroups AdvancedExtrusion(in long_array IDsOfElements,
-                                   in DirStruct  StepVector,
-                                   in long       NbOfSteps,
-                                   in long       ExtrFlags,
-                                   in double     SewTolerance,
-                                   in boolean    ToMakeGroups)
+    ListOfGroups AdvancedExtrusion(in smIdType_array IDsOfElements,
+                                   in DirStruct      StepVector,
+                                   in long           NbOfSteps,
+                                   in long           ExtrFlags,
+                                   in double         SewTolerance,
+                                   in boolean        ToMakeGroups)
       raises (SALOME::SALOME_Exception);
 
     enum Extrusion_Error {
@@ -584,7 +632,7 @@ module SMESH
                                            in ListOfIDSources   Faces,
                                            in SMESH_IDSource    Path,
                                            in GEOM::GEOM_Object PathShape,
-                                           in long              NodeStart,
+                                           in smIdType          NodeStart,
                                            in boolean           HasAngles,
                                            in double_array      Angles,
                                            in boolean           AnglesVariation,
@@ -610,20 +658,20 @@ module SMESH
 
     enum MirrorType { POINT, AXIS, PLANE };
 
-    void Mirror (in long_array IDsOfElements,
-                 in AxisStruct Mirror,
-                 in MirrorType Type,
-                 in boolean    Copy) 
+    void Mirror (in smIdType_array IDsOfElements,
+                 in AxisStruct     Mirror,
+                 in MirrorType     Type,
+                 in boolean        Copy) 
       raises (SALOME::SALOME_Exception);
-    ListOfGroups MirrorMakeGroups (in long_array IDsOfElements,
-                                   in AxisStruct Mirror,
-                                   in MirrorType Type) 
+    ListOfGroups MirrorMakeGroups (in smIdType_array IDsOfElements,
+                                   in AxisStruct     Mirror,
+                                   in MirrorType     Type) 
       raises (SALOME::SALOME_Exception);
-    SMESH_Mesh MirrorMakeMesh (in long_array IDsOfElements,
-                               in AxisStruct Mirror,
-                               in MirrorType Type,
-                               in boolean    CopyGroups,
-                               in string     MeshName) 
+    SMESH_Mesh MirrorMakeMesh (in smIdType_array IDsOfElements,
+                               in AxisStruct     Mirror,
+                               in MirrorType     Type,
+                               in boolean        CopyGroups,
+                               in string         MeshName) 
       raises (SALOME::SALOME_Exception);
 
     void MirrorObject (in SMESH_IDSource theObject,
@@ -642,17 +690,17 @@ module SMESH
                                      in string         MeshName) 
       raises (SALOME::SALOME_Exception);
 
-    void Translate (in long_array IDsOfElements,
-                    in DirStruct  Vector,
-                    in boolean    Copy) 
+    void Translate (in smIdType_array IDsOfElements,
+                    in DirStruct      Vector,
+                    in boolean        Copy) 
       raises (SALOME::SALOME_Exception);
-    ListOfGroups TranslateMakeGroups (in long_array IDsOfElements,
-                                      in DirStruct  Vector) 
+    ListOfGroups TranslateMakeGroups (in smIdType_array IDsOfElements,
+                                      in DirStruct       Vector) 
       raises (SALOME::SALOME_Exception);
-    SMESH_Mesh TranslateMakeMesh (in long_array IDsOfElements,
-                                  in DirStruct  Vector,
-                                  in boolean    CopyGroups,
-                                  in string     MeshName) 
+    SMESH_Mesh TranslateMakeMesh (in smIdType_array IDsOfElements,
+                                  in DirStruct      Vector,
+                                  in boolean        CopyGroups,
+                                  in string         MeshName) 
       raises (SALOME::SALOME_Exception);
 
     void TranslateObject (in SMESH_IDSource theObject,
@@ -684,20 +732,20 @@ module SMESH
                               in string         MeshName) 
       raises (SALOME::SALOME_Exception);
 
-    void Rotate (in long_array IDsOfElements,
-                 in AxisStruct Axis,
-                 in double     AngleInRadians,
-                 in boolean    Copy) 
+    void Rotate (in smIdType_array IDsOfElements,
+                 in AxisStruct     Axis,
+                 in double         AngleInRadians,
+                 in boolean        Copy) 
       raises (SALOME::SALOME_Exception);
-    ListOfGroups RotateMakeGroups (in long_array IDsOfElements,
-                                   in AxisStruct Axis,
-                                   in double     AngleInRadians) 
+    ListOfGroups RotateMakeGroups (in smIdType_array IDsOfElements,
+                                   in AxisStruct     Axis,
+                                   in double         AngleInRadians) 
       raises (SALOME::SALOME_Exception);
-    SMESH_Mesh RotateMakeMesh (in long_array IDsOfElements,
-                               in AxisStruct Axis,
-                               in double     AngleInRadians,
-                               in boolean    CopyGroups,
-                               in string     MeshName)
+    SMESH_Mesh RotateMakeMesh (in smIdType_array IDsOfElements,
+                               in AxisStruct     Axis,
+                               in double         AngleInRadians,
+                               in boolean        CopyGroups,
+                               in string         MeshName)
       raises (SALOME::SALOME_Exception);
 
     void RotateObject (in SMESH_IDSource theObject,
@@ -775,13 +823,13 @@ module SMESH
      * If the given ID is a valid node ID (nodeID > 0), just move this node, else
      * move the node closest to the point to point's location and return ID of the node
      */
-    long MoveClosestNodeToPoint(in double x, in double y, in double z, in long nodeID) 
+    smIdType MoveClosestNodeToPoint(in double x, in double y, in double z, in smIdType nodeID) 
       raises (SALOME::SALOME_Exception);
 
     /*!
      * Return ID of node closest to a given point
      */
-    long FindNodeClosestTo(in double x, in double y, in double z) 
+    smIdType FindNodeClosestTo(in double x, in double y, in double z) 
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -789,7 +837,7 @@ module SMESH
      *
      * 'ALL' type means elements of any type excluding nodes and 0D elements
      */
-    long_array FindElementsByPoint(in double x, in double y, in double z, in ElementType type) 
+    smIdType_array FindElementsByPoint(in double x, in double y, in double z, in ElementType type) 
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -798,9 +846,9 @@ module SMESH
      *
      * 'ALL' type means elements of any type excluding nodes and 0D elements
      */
-    long_array FindAmongElementsByPoint(in SMESH_IDSource elements,
-                                        in double x, in double y, in double z, 
-                                        in ElementType type) 
+    smIdType_array FindAmongElementsByPoint(in SMESH_IDSource elements,
+                                            in double x, in double y, in double z,
+                                            in ElementType type)
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -809,12 +857,12 @@ module SMESH
      * and coordinates of the projection point.
      * In the case if nothing found, return -1 and []
      */
-    long ProjectPoint(in double         x,
-                      in double         y,
-                      in double         z,
-                      in ElementType    type,
-                      in SMESH_IDSource meshObject,
-                      out double_array  projecton)
+    smIdType ProjectPoint(in double         x,
+                          in double         y,
+                          in double         z,
+                          in ElementType    type,
+                          in SMESH_IDSource meshObject,
+                          out double_array  projecton)
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -844,7 +892,7 @@ module SMESH
      *         If a group is closed, the first and last nodes of the group are same.
      */
     array_of_long_array Get1DBranches( in SMESH_IDSource       edges,
-                                       in long                 startNode,
+                                       in smIdType             startNode,
                                        out array_of_long_array nodeGroups)
       raises (SALOME::SALOME_Exception);
 
@@ -898,38 +946,38 @@ module SMESH
       SEW_INTERNAL_ERROR
     };
 
-    Sew_Error SewFreeBorders (in long FirstNodeID1,
-                              in long SecondNodeID1,
-                              in long LastNodeID1,
-                              in long FirstNodeID2,
-                              in long SecondNodeID2,
-                              in long LastNodeID2,
-                              in boolean CreatePolygons,
-                              in boolean CreatePolyedrs) 
+    Sew_Error SewFreeBorders (in smIdType FirstNodeID1,
+                              in smIdType SecondNodeID1,
+                              in smIdType LastNodeID1,
+                              in smIdType FirstNodeID2,
+                              in smIdType SecondNodeID2,
+                              in smIdType LastNodeID2,
+                              in boolean  CreatePolygons,
+                              in boolean  CreatePolyedrs) 
       raises (SALOME::SALOME_Exception);
 
-    Sew_Error SewConformFreeBorders (in long FirstNodeID1,
-                                     in long SecondNodeID1,
-                                     in long LastNodeID1,
-                                     in long FirstNodeID2,
-                                     in long SecondNodeID2) 
+    Sew_Error SewConformFreeBorders (in smIdType FirstNodeID1,
+                                     in smIdType SecondNodeID1,
+                                     in smIdType LastNodeID1,
+                                     in smIdType FirstNodeID2,
+                                     in smIdType SecondNodeID2) 
       raises (SALOME::SALOME_Exception);
 
-    Sew_Error SewBorderToSide (in long FirstNodeIDOnFreeBorder,
-                               in long SecondNodeIDOnFreeBorder,
-                               in long LastNodeIDOnFreeBorder,
-                               in long FirstNodeIDOnSide,
-                               in long LastNodeIDOnSide,
-                               in boolean CreatePolygons,
-                               in boolean CreatePolyedrs) 
+    Sew_Error SewBorderToSide (in smIdType FirstNodeIDOnFreeBorder,
+                               in smIdType SecondNodeIDOnFreeBorder,
+                               in smIdType LastNodeIDOnFreeBorder,
+                               in smIdType FirstNodeIDOnSide,
+                               in smIdType LastNodeIDOnSide,
+                               in boolean  CreatePolygons,
+                               in boolean  CreatePolyedrs) 
       raises (SALOME::SALOME_Exception);
 
-    Sew_Error SewSideElements (in long_array IDsOfSide1Elements,
-                               in long_array IDsOfSide2Elements,
-                               in long       NodeID1OfSide1ToMerge,
-                               in long       NodeID1OfSide2ToMerge,
-                               in long       NodeID2OfSide1ToMerge,
-                               in long       NodeID2OfSide2ToMerge) 
+    Sew_Error SewSideElements (in smIdType_array IDsOfSide1Elements,
+                               in smIdType_array IDsOfSide2Elements,
+                               in smIdType       NodeID1OfSide1ToMerge,
+                               in smIdType       NodeID1OfSide2ToMerge,
+                               in smIdType       NodeID2OfSide1ToMerge,
+                               in smIdType       NodeID2OfSide2ToMerge) 
       raises (SALOME::SALOME_Exception);
 
    /*!
@@ -937,7 +985,7 @@ module SMESH
     * If number of nodes is not corresponded to type of
     * element - returns false
     */
-    boolean ChangeElemNodes(in long ide, in long_array newIDs) 
+    boolean ChangeElemNodes(in smIdType id, in smIdType_array newIDs) 
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -965,7 +1013,7 @@ module SMESH
      * \return TRUE if operation has been completed successfully, FALSE otherwise
      * \sa DoubleNode(), DoubleNodeGroup(), DoubleNodeGroups()
      */
-    boolean DoubleNodes( in long_array theNodes, in long_array theModifiedElems ) 
+    boolean DoubleNodes( in smIdType_array theNodes, in smIdType_array theModifiedElems ) 
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -976,7 +1024,7 @@ module SMESH
      * \return TRUE if operation has been completed successfully, FALSE otherwise
      * \sa DoubleNodes(), DoubleNodeGroup(), DoubleNodeGroups()
      */
-    boolean DoubleNode( in long theNodeId, in long_array theModifiedElems ) 
+    boolean DoubleNode( in smIdType theNodeId, in smIdType_array theModifiedElems ) 
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -1037,9 +1085,9 @@ module SMESH
      * \return TRUE if operation has been completed successfully, FALSE otherwise
      * \sa DoubleNodeGroup(), DoubleNodeGroups()
      */
-    boolean DoubleNodeElem( in long_array theElems,
-                            in long_array theNodesNot,
-                            in long_array theAffectedElems ) 
+    boolean DoubleNodeElem( in smIdType_array theElems,
+                            in smIdType_array theNodesNot,
+                            in smIdType_array theAffectedElems ) 
       raises (SALOME::SALOME_Exception);
 
     /*!
@@ -1053,8 +1101,8 @@ module SMESH
      * \return TRUE if operation has been completed successfully, FALSE otherwise
      * \sa DoubleNodeGroupInRegion(), DoubleNodeGroupsInRegion()
      */
-    boolean DoubleNodeElemInRegion( in long_array theElems,
-                                    in long_array theNodesNot,
+    boolean DoubleNodeElemInRegion( in smIdType_array    theElems,
+                                    in smIdType_array    theNodesNot,
                                     in GEOM::GEOM_Object theShape ) 
       raises (SALOME::SALOME_Exception);
 
@@ -1243,7 +1291,9 @@ module SMESH
      *  \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
+     *    the new mesh else only the new elements will be copied into the new mesh
+     *  \param toCreateAllElements - if true, all the boundary elements of the mesh 
+     *    are computed. 
      *  \param groups - optional groups of 2D elements to make boundary around
      *  \param mesh - returns the mesh where elements were added to
      *  \param group - returns the created group, if any
@@ -1253,6 +1303,7 @@ module SMESH
                               in string          groupName,
                               in string          meshName,
                               in boolean         toCopyAll,
+                              in boolean         toCreateAllElements,
                               in ListOfIDSources groups,
                               out SMESH_Mesh     mesh,
                               out SMESH_Group    group) raises (SALOME::SALOME_Exception);
index 5fdc7d37dac9e742346953928c041731c79c5cd2..c77a96b3cc28f26236f44f0528878491ba4b07bc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -29,6 +29,7 @@
 #define _SMESH_PATTERN_IDL_
 
 #include "SMESH_Mesh.idl"
+#include "SMESH_smIdType.idl"
 
 module SMESH
 {
@@ -85,10 +86,10 @@ module SMESH
      * the loaded pattern to mesh faces. The first key-point
      * will be mapped into <theNodeIndexOnKeyPoint1>-th node of each face
      */
-    point_array  ApplyToMeshFaces(in SMESH_Mesh theMesh,
-                                  in long_array theFacesIDs,
-                                  in long       theNodeIndexOnKeyPoint1,
-                                  in boolean    theReverse);
+    point_array  ApplyToMeshFaces(in SMESH_Mesh     theMesh,
+                                  in smIdType_array theFacesIDs,
+                                  in short          theNodeIndexOnKeyPoint1,
+                                  in boolean        theReverse);
 
     /*!
      * Compute nodes coordinates applying
@@ -97,10 +98,10 @@ module SMESH
      * The (0,0,1) key-point will be mapped into <theNode001Index>-th
      * node of each volume.
      */
-    point_array  ApplyToHexahedrons(in SMESH_Mesh theMesh,
-                                    in long_array theVolumesIDs,
-                                    in long       theNode000Index,
-                                    in long       theNode001Index);
+    point_array  ApplyToHexahedrons(in SMESH_Mesh     theMesh,
+                                    in smIdType_array theVolumesIDs,
+                                    in short          theNode000Index,
+                                    in short          theNode001Index);
 
     /*!
      * Create nodes and elements in <theMesh> using nodes
diff --git a/idl/SMESH_smIdType.idl.in b/idl/SMESH_smIdType.idl.in
new file mode 100644 (file)
index 0000000..c999b34
--- /dev/null
@@ -0,0 +1,28 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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 __SMESH_SMIDTYPE_IDL__
+#define __SMESH_SMIDTYPE_IDL__
+
+module SMESH
+{
+  typedef @SMESH_ID_TYPE@ smIdType;
+};
+
+#endif
\ No newline at end of file
index 1a5619a10d4baf262bff2e3f5fec2e8b53d7d632..a968755b65cffd01950e53232d5ea6cb50e526fe 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 #
 # Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -22,6 +22,8 @@
 
 SET(SMESH_RESOURCES_FILES
   ModuleMesh.png
+  adapt_mg_adapt.png
+  adapt_homard.png
   advanced_mesh_info.png
   bare_border_face.png
   bare_border_volume.png
@@ -32,10 +34,11 @@ SET(SMESH_RESOURCES_FILES
   mesh_0D_elem.png
   mesh_0D_on_all_nodes.png
   mesh_2d_from_3d.png
+  mesh_2d_from_3d_elements.png
   mesh_add.png
   mesh_add_sub.png
   mesh_algo_hexa.png
-  mesh_algo_mefisto.png
+  mesh_algo_tri.png
   mesh_algo_quad.png
   mesh_algo_regular.png
   mesh_algo_tetra.png
@@ -58,6 +61,7 @@ SET(SMESH_RESOURCES_FILES
   mesh_conv_to_quad.png
   mesh_cutGroups.png
   mesh_cutquad.png
+  mesh_create_dual_mesh.png
   mesh_deflection.png
   mesh_deleteGroups.png
   mesh_diagonal.png
@@ -120,6 +124,9 @@ SET(SMESH_RESOURCES_FILES
   mesh_minus.png
   mesh_move_node.png
   mesh_move_without_node.png
+  mesh_move_node_interactive.png
+  mesh_split_diag_interactive.png
+  mesh_split_face_interactive.png
   mesh_multi_edges.png
   mesh_multi_edges_2d.png
   mesh_node_to_point.png
@@ -156,11 +163,13 @@ SET(SMESH_RESOURCES_FILES
   mesh_rem_element.png
   mesh_rem_node.png
   mesh_rem_orphan_nodes.png
+  mesh_rem_node_recon.png
   mesh_remove.png
   mesh_renumbering_elements.png
   mesh_renumbering_nodes.png
   mesh_revolution.png
   mesh_rotation.png
+  mesh_scaled_jacobian.png
   mesh_sew_bordertoside.png
   mesh_sew_conform_freeborders.png
   mesh_sew_freeborders.png
@@ -181,7 +190,7 @@ SET(SMESH_RESOURCES_FILES
   mesh_tree_algo_0D.png
   mesh_tree_algo_existing_2D.png
   mesh_tree_algo_hexa.png
-  mesh_tree_algo_mefisto.png
+  mesh_tree_algo_tri.png
   mesh_tree_algo_polygon.png
   mesh_tree_algo_prism.png
   mesh_tree_algo_projection_2d.png
@@ -235,6 +244,7 @@ SET(SMESH_RESOURCES_FILES
   pattern_sample_3D.png
   reorient_faces_face.png
   reorient_faces_point.png
+  reorient_faces_ref_groups.png
   reorient_faces_volume.png
   scale.png
   scale_along_axes.png
@@ -247,5 +257,6 @@ SET(SMESH_RESOURCES_FILES
 INSTALL(FILES ${SMESH_RESOURCES_FILES} DESTINATION ${SALOME_SMESH_INSTALL_RES_DATA})
 
 SALOME_CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/SalomeApp.xml.in ${CMAKE_CURRENT_BINARY_DIR}/SalomeApp.xml INSTALL ${SALOME_SMESH_INSTALL_RES_DATA})
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/SalomeApp.xml RENAME SalomeAppSL.xml DESTINATION ${SALOME_SMESH_INSTALL_RES_DATA})
 SALOME_CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/StdMeshers.xml.in ${CMAKE_CURRENT_BINARY_DIR}/StdMeshers.xml INSTALL ${SALOME_SMESH_INSTALL_RES_DATA})
 SALOME_CONFIGURE_FILE(${CMAKE_CURRENT_SOURCE_DIR}/SMESHCatalog.xml.in ${CMAKE_CURRENT_BINARY_DIR}/SMESHCatalog.xml INSTALL ${SALOME_SMESH_INSTALL_RES_DATA})
index c69c4b5782fdb4102e22be6873db430e3bee96ef..6c359bd51c3a3ec21d748000ef96ba3e70161599 100644 (file)
@@ -66,6 +66,7 @@
     <parameter name="auto_groups"                  value="false"/>
     <parameter name="med_ztolerance"               value="0.0"/>
     <parameter name="show_warning"                 value="true"/>
+    <parameter name="med_save_numbers"             value="true"/>
     <parameter name="show_result_notification"     value="2"/>
     <parameter name="mesh_elem_info"               value="1"/>
     <parameter name="elem_info_grp_details"        value="false"/>
     <parameter name="vol_precision"                value="-6"  />
     <parameter name="selection_increment"          value="0"  />
     <parameter name="controls_increment"           value="2"  />
+    <!-- Adaptation -->
+    <parameter name="mg_adapt_file_mesh_out"       value="true"  />
+    <parameter name="mg_adapt_publish_mesh_out"    value="false"  />
+    <parameter name="mg_adapt_size_map"            value="Local"  />
+    <parameter name="mg_adapt_time_step"           value="None"  />
   </section>
   <section name="smesh_help" >
     <parameter name="User's Guide/Mesh module/User's Guide"      value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/index.html;;http://docs.salome-platform.org/latest/gui/SMESH/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;;http://docs.salome-platform.org/latest/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;;http://docs.salome-platform.org/latest/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;;http://docs.salome-platform.org/latest/gui/SMESH/padder/index.html"/>
+    <parameter name="User's Guide/Mesh module/MG-Adapt plugin/User's Guide" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/index.html#adaptation;;http://docs.salome-platform.org/latest/gui/SMESH/index.html#adaptation"/>
+    <parameter name="User's Guide/Mesh module/MG-Adapt plugin/Reference"    value="%MESHGEMS_ROOT_DIR%/Docs/mg-adapt_api_manual.pdf"/>
+    <parameter name="User's Guide/Mesh module/MG-Adapt plugin/Manual"       value="%MESHGEMS_ROOT_DIR%/Docs/mg-adapt_user_manual.pdf"/>
     <parameter name="User's Guide/Mesh module/MGCleaner plugin/User's Guide" value="%SMESH_ROOT_DIR%/share/doc/salome/gui/SMESH/MGCleaner/index.html;;http://docs.salome-platform.org/latest/gui/SMESH/MGCleaner/index.html"/>
     <parameter name="User's Guide/Mesh module/MGCleaner plugin/Reference"    value="%MESHGEMS_ROOT_DIR%/Docs/mg-cleaner_api_manual.pdf"/>
     <parameter name="User's Guide/Mesh module/MGCleaner plugin/Manual"       value="%MESHGEMS_ROOT_DIR%/Docs/mg-cleaner_user_manual.pdf"/>
  <section name="windows_visibility">
   <parameter name="SMESH" value="#00 #00 #00 #00 #3A #FF #FF #FF #FF #00 #00 #00 #02 #00 #00 #00 #00 #00 #00 #01 #00 #00 #00 #02 #44 #FC #02 #00 #00 #00 #01 #FC #00 #00 #00 #7B #00 #00 #02 #44 #00 #00 #00 #97 #01 #00 #00 #14 #FA #00 #00 #00 #00 #01 #00 #00 #00 #02 #FB #00 #00 #00 #10 #00 #77 #00 #69 #00 #6E #00 #64 #00 #6F #00 #77 #00 #5F #00 #30 #01 #00 #00 #00 #00 #FF #FF #FF #FF #00 #00 #00 #46 #00 #FF #FF #FF #FB #00 #00 #00 #10 #00 #77 #00 #69 #00 #6E #00 #64 #00 #6F #00 #77 #00 #5F #00 #33 #01 #00 #00 #00 #00 #00 #00 #01 #00 #00 #00 #00 #C0 #00 #FF #FF #FF #00 #00 #00 #03 #00 #00 #05 #40 #00 #00 #00 #53 #FC #01 #00 #00 #00 #01 #FB #00 #00 #00 #10 #00 #77 #00 #69 #00 #6E #00 #64 #00 #6F #00 #77 #00 #5F #00 #31 #01 #00 #00 #00 #00 #00 #00 #05 #40 #00 #00 #00 #46 #00 #FF #FF #FF #00 #00 #04 #38 #00 #00 #02 #44 #00 #00 #00 #04 #00 #00 #00 #04 #00 #00 #00 #08 #00 #00 #00 #08 #FC #00 #00 #00 #05 #00 #00 #00 #02 #00 #00 #00 #02 #00 #00 #00 #10 #00 #53 #00 #74 #00 #61 #00 #6E #00 #64 #00 #61 #00 #72 #00 #64 #01 #00 #00 #00 #00 #FF #FF #FF #FF #00 #00 #00 #00 #00 #00 #00 #00 #00 #00 #00 #0E #00 #4D #00 #6F #00 #64 #00 #75 #00 #6C #00 #65 #00 #73 #01 #00 #00 #00 #CE #FF #FF #FF #FF #00 #00 #00 #00 #00 #00 #00 #00 #00 #00 #00 #02 #00 #00 #00 #07 #00 #00 #00 #2A #00 #4E #00 #6F #00 #64 #00 #65 #00 #20 #00 #43 #00 #6F #00 #6E #00 #74 #00 #72 #00 #6F #00 #6C #00 #73 #00 #20 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #00 #00 #00 #02 #01 #FF #FF #FF #FF #00 #00 #00 #00 #00 #00 #00 #00 #00 #00 #00 #2A #00 #45 #00 #64 #00 #67 #00 #65 #00 #20 #00 #43 #00 #6F #00 #6E #00 #74 #00 #72 #00 #6F #00 #6C #00 #73 #00 #20 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #00 #00 #00 #02 #4D #FF #FF #FF #FF #00 #00 #00 #00 #00 #00 #00 #00 #00 #00 #00 #2A #00 #46 #00 #61 #00 #63 #00 #65 #00 #20 #00 #43 #00 #6F #00 #6E #00 #74 #00 #72 #00 #6F #00 #6C #00 #73 #00 #20 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #00 #00 #00 #02 #F6 #00 #00 #02 #4A #00 #00 #00 #00 #00 #00 #00 #00 #00 #00 #00 #18 #00 #4D #00 #65 #00 #73 #00 #68 #00 #20 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #00 #00 #26 #00 #41 #00 #64 #00 #64 #00 #20 #00 #45 #00 #6C #00 #65 #00 #6D #00 #65 #00 #6E #00 #74 #00 #20 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #3C #00 #41 #00 #64 #00 #64 #00 #20 #00 #4E #00 #6F #00 #6E #00 #20 #00 #4C #00 #69 #00 #6E #00 #65 #00 #61 #00 #72 #00 #20 #00 #45 #00 #6C #00 #65 #00 #6D #00 #65 #00 #6E #00 #74 #00 #20 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #10 #00 #41 #00 #64 #00 #76 #00 #61 #00 #6E #00 #63 #00 #65 #00 #64 #01 #00 #00 #00 #0C #00 #42 #00 #6C #00 #6F #00 #63 #00 #6B #00 #73 #01 #00 #00 #00 #28 #00 #44 #00 #69 #00 #73 #00 #70 #00 #6C #00 #61 #00 #79 #00 #20 #00 #4D #00 #6F #00 #64 #00 #65 #00 #20 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #2A #00 #45 #00 #64 #00 #67 #00 #65 #00 #20 #00 #43 #00 #6F #00 #6E #00 #74 #00 #72 #00 #6F #00 #6C #00 #73 #00 #20 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #00 #00 #00 #00 #2A #00 #46 #00 #61 #00 #63 #00 #65 #00 #20 #00 #43 #00 #6F #00 #6E #00 #74 #00 #72 #00 #6F #00 #6C #00 #73 #00 #20 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #00 #00 #00 #00 #12 #00 #47 #00 #45 #00 #4F #00 #4D #00 #42 #00 #61 #00 #73 #00 #69 #00 #63 #00 #00 #00 #00 #2A #00 #47 #00 #45 #00 #4F #00 #4D #00 #42 #00 #6F #00 #6F #00 #6C #00 #65 #00 #61 #00 #6E #00 #4F #00 #70 #00 #65 #00 #72 #00 #61 #00 #74 #00 #69 #00 #6F #00 #6E #00 #73 #00 #00 #00 #00 #12 #00 #47 #00 #45 #00 #4F #00 #4D #00 #42 #00 #75 #00 #69 #00 #6C #00 #64 #00 #00 #00 #00 #1C #00 #47 #00 #45 #00 #4F #00 #4D #00 #47 #00 #65 #00 #6E #00 #65 #00 #72 #00 #61 #00 #74 #00 #69 #00 #6F #00 #6E #00 #00 #00 #00 #26 #00 #47 #00 #45 #00 #4F #00 #4D #00 #49 #00 #6D #00 #70 #00 #6F #00 #72 #00 #74 #00 #45 #00 #78 #00 #70 #00 #6F #00 #72 #00 #74 #00 #58 #00 #41 #00 #4F #01 #00 #00 #00 #18 #00 #47 #00 #45 #00 #4F #00 #4D #00 #4D #00 #65 #00 #61 #00 #73 #00 #75 #00 #72 #00 #65 #00 #73 #00 #00 #00 #00 #20 #00 #47 #00 #45 #00 #4F #00 #4D #00 #4D #00 #6F #00 #64 #00 #69 #00 #66 #00 #69 #00 #63 #00 #61 #00 #74 #00 #69 #00 #6F #00 #6E #00 #00 #00 #00 #1C #00 #47 #00 #45 #00 #4F #00 #4D #00 #4F #00 #70 #00 #65 #00 #72 #00 #61 #00 #74 #00 #69 #00 #6F #00 #6E #00 #73 #00 #00 #00 #00 #18 #00 #47 #00 #45 #00 #4F #00 #4D #00 #50 #00 #69 #00 #63 #00 #74 #00 #75 #00 #72 #00 #65 #00 #73 #00 #00 #00 #00 #1C #00 #47 #00 #45 #00 #4F #00 #4D #00 #50 #00 #72 #00 #69 #00 #6D #00 #69 #00 #74 #00 #69 #00 #76 #00 #65 #00 #73 #00 #00 #00 #00 #24 #00 #47 #00 #45 #00 #4F #00 #4D #00 #54 #00 #72 #00 #61 #00 #6E #00 #73 #00 #66 #00 #6F #00 #72 #00 #6D #00 #61 #00 #74 #00 #69 #00 #6F #00 #6E #00 #00 #00 #00 #1A #00 #47 #00 #72 #00 #6F #00 #75 #00 #70 #00 #20 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #26 #00 #49 #00 #6E #00 #66 #00 #6F #00 #72 #00 #6D #00 #61 #00 #74 #00 #69 #00 #6F #00 #6E #00 #20 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #28 #00 #4D #00 #65 #00 #61 #00 #73 #00 #75 #00 #72 #00 #65 #00 #6D #00 #65 #00 #6E #00 #74 #00 #73 #00 #20 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #18 #00 #4D #00 #65 #00 #73 #00 #68 #00 #20 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #28 #00 #4D #00 #6F #00 #64 #00 #69 #00 #66 #00 #69 #00 #63 #00 #61 #00 #74 #00 #69 #00 #6F #00 #6E #00 #20 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #0E #00 #4D #00 #6F #00 #64 #00 #75 #00 #6C #00 #65 #00 #73 #01 #00 #00 #00 #2A #00 #4E #00 #6F #00 #64 #00 #65 #00 #20 #00 #43 #00 #6F #00 #6E #00 #74 #00 #72 #00 #6F #00 #6C #00 #73 #00 #20 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #00 #00 #00 #00 #32 #00 #4F #00 #43 #00 #43 #00 #56 #00 #69 #00 #65 #00 #77 #00 #65 #00 #72 #00 #33 #00 #44 #00 #56 #00 #69 #00 #65 #00 #77 #00 #4F #00 #70 #00 #65 #00 #72 #00 #61 #00 #74 #00 #69 #00 #6F #00 #6E #00 #73 #01 #00 #00 #00 #0E #00 #50 #00 #6C #00 #75 #00 #67 #00 #69 #00 #6E #00 #73 #00 #00 #00 #00 #1C #00 #50 #00 #79 #00 #74 #00 #68 #00 #6F #00 #6E #00 #20 #00 #50 #00 #6C #00 #75 #00 #67 #00 #69 #00 #6E #00 #73 #00 #00 #00 #00 #28 #00 #52 #00 #65 #00 #63 #00 #6F #00 #72 #00 #64 #00 #69 #00 #6E #00 #67 #00 #20 #00 #4F #00 #70 #00 #65 #00 #72 #00 #61 #00 #74 #00 #69 #00 #6F #00 #6E #00 #73 #01 #00 #00 #00 #1C #00 #52 #00 #65 #00 #6D #00 #6F #00 #76 #00 #65 #00 #20 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #26 #00 #52 #00 #65 #00 #6E #00 #75 #00 #6D #00 #62 #00 #65 #00 #72 #00 #69 #00 #6E #00 #67 #00 #20 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #1A #00 #53 #00 #4D #00 #45 #00 #53 #00 #48 #00 #20 #00 #70 #00 #6C #00 #75 #00 #67 #00 #69 #00 #6E #00 #73 #01 #00 #00 #00 #2C #00 #53 #00 #4D #00 #45 #00 #53 #00 #48 #00 #41 #00 #64 #00 #64 #00 #45 #00 #6C #00 #65 #00 #6D #00 #65 #00 #6E #00 #74 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #2E #00 #53 #00 #4D #00 #45 #00 #53 #00 #48 #00 #44 #00 #69 #00 #73 #00 #70 #00 #6C #00 #61 #00 #79 #00 #4D #00 #6F #00 #64 #00 #65 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #30 #00 #53 #00 #4D #00 #45 #00 #53 #00 #48 #00 #45 #00 #64 #00 #67 #00 #65 #00 #43 #00 #6F #00 #6E #00 #74 #00 #72 #00 #6F #00 #6C #00 #73 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #00 #00 #00 #00 #30 #00 #53 #00 #4D #00 #45 #00 #53 #00 #48 #00 #46 #00 #61 #00 #63 #00 #65 #00 #43 #00 #6F #00 #6E #00 #74 #00 #72 #00 #6F #00 #6C #00 #73 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #00 #00 #00 #00 #22 #00 #53 #00 #4D #00 #45 #00 #53 #00 #48 #00 #47 #00 #72 #00 #6F #00 #75 #00 #70 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #2E #00 #53 #00 #4D #00 #45 #00 #53 #00 #48 #00 #49 #00 #6E #00 #66 #00 #6F #00 #72 #00 #6D #00 #61 #00 #74 #00 #69 #00 #6F #00 #6E #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #30 #00 #53 #00 #4D #00 #45 #00 #53 #00 #48 #00 #4D #00 #65 #00 #61 #00 #73 #00 #75 #00 #72 #00 #65 #00 #6D #00 #65 #00 #6E #00 #74 #00 #73 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #20 #00 #53 #00 #4D #00 #45 #00 #53 #00 #48 #00 #4D #00 #65 #00 #73 #00 #68 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #30 #00 #53 #00 #4D #00 #45 #00 #53 #00 #48 #00 #4D #00 #6F #00 #64 #00 #69 #00 #66 #00 #69 #00 #63 #00 #61 #00 #74 #00 #69 #00 #6F #00 #6E #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #30 #00 #53 #00 #4D #00 #45 #00 #53 #00 #48 #00 #4E #00 #6F #00 #64 #00 #65 #00 #43 #00 #6F #00 #6E #00 #74 #00 #72 #00 #6F #00 #6C #00 #73 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #00 #00 #00 #00 #24 #00 #53 #00 #4D #00 #45 #00 #53 #00 #48 #00 #52 #00 #65 #00 #6D #00 #6F #00 #76 #00 #65 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #2E #00 #53 #00 #4D #00 #45 #00 #53 #00 #48 #00 #52 #00 #65 #00 #6E #00 #75 #00 #6D #00 #62 #00 #65 #00 #72 #00 #69 #00 #6E #00 #67 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #34 #00 #53 #00 #4D #00 #45 #00 #53 #00 #48 #00 #54 #00 #72 #00 #61 #00 #6E #00 #73 #00 #66 #00 #6F #00 #72 #00 #6D #00 #61 #00 #74 #00 #69 #00 #6F #00 #6E #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #34 #00 #53 #00 #4D #00 #45 #00 #53 #00 #48 #00 #56 #00 #6F #00 #6C #00 #75 #00 #6D #00 #65 #00 #43 #00 #6F #00 #6E #00 #74 #00 #72 #00 #6F #00 #6C #00 #73 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #00 #00 #00 #00 #1A #00 #53 #00 #61 #00 #6C #00 #6F #00 #6D #00 #65 #00 #4D #00 #6F #00 #64 #00 #75 #00 #6C #00 #65 #00 #73 #01 #00 #00 #00 #1C #00 #53 #00 #61 #00 #6C #00 #6F #00 #6D #00 #65 #00 #53 #00 #74 #00 #61 #00 #6E #00 #64 #00 #61 #00 #72 #00 #64 #01 #00 #00 #00 #10 #00 #53 #00 #74 #00 #61 #00 #6E #00 #64 #00 #61 #00 #72 #00 #64 #01 #00 #00 #00 #1A #00 #54 #00 #4F #00 #4F #00 #4C #00 #5F #00 #41 #00 #44 #00 #56 #00 #41 #00 #4E #00 #43 #00 #45 #00 #44 #01 #00 #00 #00 #16 #00 #54 #00 #4F #00 #4F #00 #4C #00 #5F #00 #42 #00 #4C #00 #4F #00 #43 #00 #4B #00 #53 #01 #00 #00 #00 #2C #00 #54 #00 #72 #00 #61 #00 #6E #00 #73 #00 #66 #00 #6F #00 #72 #00 #6D #00 #61 #00 #74 #00 #69 #00 #6F #00 #6E #00 #20 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #01 #00 #00 #00 #2C #00 #56 #00 #54 #00 #4B #00 #52 #00 #65 #00 #63 #00 #6F #00 #72 #00 #64 #00 #69 #00 #6E #00 #67 #00 #4F #00 #70 #00 #65 #00 #72 #00 #61 #00 #74 #00 #69 #00 #6F #00 #6E #00 #73 #01 #00 #00 #00 #2E #00 #56 #00 #54 #00 #4B #00 #56 #00 #69 #00 #65 #00 #77 #00 #65 #00 #72 #00 #56 #00 #69 #00 #65 #00 #77 #00 #4F #00 #70 #00 #65 #00 #72 #00 #61 #00 #74 #00 #69 #00 #6F #00 #6E #00 #73 #01 #00 #00 #00 #1E #00 #56 #00 #69 #00 #65 #00 #77 #00 #20 #00 #4F #00 #70 #00 #65 #00 #72 #00 #61 #00 #74 #00 #69 #00 #6F #00 #6E #00 #73 #01 #00 #00 #00 #2E #00 #56 #00 #6F #00 #6C #00 #75 #00 #6D #00 #65 #00 #20 #00 #43 #00 #6F #00 #6E #00 #74 #00 #72 #00 #6F #00 #6C #00 #73 #00 #20 #00 #54 #00 #6F #00 #6F #00 #6C #00 #62 #00 #61 #00 #72 #00 #01 #00 #00 #00 #07 #00 #00 #00 #1A #00 #69 #00 #6E #00 #66 #00 #6F #00 #50 #00 #61 #00 #6E #00 #65 #00 #6C #00 #44 #00 #6F #00 #63 #00 #6B #01 #00 #00 #00 #18 #00 #6E #00 #6F #00 #74 #00 #65 #00 #42 #00 #6F #00 #6F #00 #6B #00 #44 #00 #6F #00 #63 #00 #6B #01 #00 #00 #00 #22 #00 #6F #00 #62 #00 #6A #00 #65 #00 #63 #00 #74 #00 #42 #00 #72 #00 #6F #00 #77 #00 #73 #00 #65 #00 #72 #00 #44 #00 #6F #00 #63 #00 #6B #01 #00 #00 #00 #22 #00 #70 #00 #79 #00 #74 #00 #68 #00 #6F #00 #6E #00 #43 #00 #6F #00 #6E #00 #73 #00 #6F #00 #6C #00 #65 #00 #44 #00 #6F #00 #63 #00 #6B #01 #00 #00 #00 #10 #00 #77 #00 #69 #00 #6E #00 #64 #00 #6F #00 #77 #00 #5F #00 #30 #01 #00 #00 #00 #10 #00 #77 #00 #69 #00 #6E #00 #64 #00 #6F #00 #77 #00 #5F #00 #31 #01 #00 #00 #00 #10 #00 #77 #00 #69 #00 #6E #00 #64 #00 #6F #00 #77 #00 #5F #00 #33 #01"/>
  </section>
+  <section name="pythonpath">
+    <parameter name="SMESH" value="%SMESH_ROOT_DIR%/bin/salome/test/other;;%SMESH_ROOT_DIR%/share/doc/salome/examples/SMESH"/>
+ </section>
 </document>
index 8baf92e0af5eff02e15c683882642a7663bd2f9a..53899c8f37e596345fd8c4eaba2928a787d7fbd5 100644 (file)
       </python-wrap>
     </algorithm>
 
-    <algorithm type      ="@MEFISTO2D_NAME@"
-              label-id  ="Triangle: Mefisto"
-              icon-id   ="mesh_algo_mefisto.png"
-               group-id ="1"
-               priority ="40"
-               hypos     ="LengthFromEdges,MaxElementArea"
-               opt-hypos ="ViscousLayers2D"
-               input     ="EDGE"
-               output    ="TRIA"
-               dim       ="2">
-      <python-wrap>
-        <algo>MEFISTO_2D=Triangle(algo=smeshBuilder.MEFISTO)</algo>
-        <hypo>LengthFromEdges=LengthFromEdges()</hypo>
-        <hypo>MaxElementArea=MaxElementArea(SetMaxElementArea())</hypo>
-        <hypo>ViscousLayers2D=ViscousLayers2D(SetTotalThickness(),SetNumberLayers(),SetStretchFactor(),SetEdges(1),SetEdges(2),SetGroupName())</hypo>
-      </python-wrap>
-    </algorithm>
-
     <algorithm type     ="Quadrangle_2D"
                label-id ="Quadrangle: Mapping"
                icon-id  ="mesh_algo_quad.png"
                group-id         ="0"
                priority         ="20"
                hypos            ="CartesianParameters3D"
+               opt-hypos        ="ViscousLayers"
                support-submeshes="false"
                output           ="HEXA"
                need-hyp         ="true"
                dim              ="3">
       <python-wrap>
         <algo>Cartesian_3D=BodyFitted()</algo>
+        <hypo>ViscousLayers=ViscousLayers(SetTotalThickness(),SetNumberLayers(),SetStretchFactor(),SetFaces(1),SetFaces(2),SetMethod(),SetGroupName())</hypo>
       </python-wrap>
     </algorithm>
 
diff --git a/resources/adapt_homard.png b/resources/adapt_homard.png
new file mode 100644 (file)
index 0000000..95b4c13
Binary files /dev/null and b/resources/adapt_homard.png differ
diff --git a/resources/adapt_mg_adapt.png b/resources/adapt_mg_adapt.png
new file mode 100755 (executable)
index 0000000..f2c1a93
Binary files /dev/null and b/resources/adapt_mg_adapt.png differ
index 1993f2087f86b35ee09a9f1fdb7530e0785a0ae1..bb8e80fddc87594c79e219f9940bd1d6bfee1b21 100644 (file)
Binary files a/resources/bare_border_face.png and b/resources/bare_border_face.png differ
index 3ef6e6a462c653c05e5694a08ed5ece6decf422e..58e179af6ed3511db89b259dec9d17e33d240dfb 100644 (file)
Binary files a/resources/bare_border_volume.png and b/resources/bare_border_volume.png differ
diff --git a/resources/mesh_2d_from_3d_elements.png b/resources/mesh_2d_from_3d_elements.png
new file mode 100644 (file)
index 0000000..d347d2e
Binary files /dev/null and b/resources/mesh_2d_from_3d_elements.png differ
diff --git a/resources/mesh_algo_mefisto.png b/resources/mesh_algo_mefisto.png
deleted file mode 100644 (file)
index 018cf4e..0000000
Binary files a/resources/mesh_algo_mefisto.png and /dev/null differ
diff --git a/resources/mesh_algo_tri.png b/resources/mesh_algo_tri.png
new file mode 100644 (file)
index 0000000..018cf4e
Binary files /dev/null and b/resources/mesh_algo_tri.png differ
old mode 100755 (executable)
new mode 100644 (file)
index f01bae8..27ce4b3
Binary files a/resources/mesh_bounding_box.png and b/resources/mesh_bounding_box.png differ
diff --git a/resources/mesh_create_dual_mesh.png b/resources/mesh_create_dual_mesh.png
new file mode 100644 (file)
index 0000000..d7a7be3
Binary files /dev/null and b/resources/mesh_create_dual_mesh.png differ
old mode 100755 (executable)
new mode 100644 (file)
index 6713caf..003084e
Binary files a/resources/mesh_min_dist.png and b/resources/mesh_min_dist.png differ
diff --git a/resources/mesh_move_node_interactive.png b/resources/mesh_move_node_interactive.png
new file mode 100644 (file)
index 0000000..b219e24
Binary files /dev/null and b/resources/mesh_move_node_interactive.png differ
diff --git a/resources/mesh_rem_node_recon.png b/resources/mesh_rem_node_recon.png
new file mode 100644 (file)
index 0000000..af5fa62
Binary files /dev/null and b/resources/mesh_rem_node_recon.png differ
diff --git a/resources/mesh_scaled_jacobian.png b/resources/mesh_scaled_jacobian.png
new file mode 100644 (file)
index 0000000..e25a7fa
Binary files /dev/null and b/resources/mesh_scaled_jacobian.png differ
index 61ebe47036fe9f0e6e168a97fe16b733ba28f178..3209cc79d6e4bd727e21251c4ef55580c8523db5 100644 (file)
Binary files a/resources/mesh_show.png and b/resources/mesh_show.png differ
diff --git a/resources/mesh_split_diag_interactive.png b/resources/mesh_split_diag_interactive.png
new file mode 100644 (file)
index 0000000..7998788
Binary files /dev/null and b/resources/mesh_split_diag_interactive.png differ
diff --git a/resources/mesh_split_face_interactive.png b/resources/mesh_split_face_interactive.png
new file mode 100644 (file)
index 0000000..2afb098
Binary files /dev/null and b/resources/mesh_split_face_interactive.png differ
diff --git a/resources/mesh_tree_algo_mefisto.png b/resources/mesh_tree_algo_mefisto.png
deleted file mode 100644 (file)
index de69b87..0000000
Binary files a/resources/mesh_tree_algo_mefisto.png and /dev/null differ
diff --git a/resources/mesh_tree_algo_tri.png b/resources/mesh_tree_algo_tri.png
new file mode 100644 (file)
index 0000000..de69b87
Binary files /dev/null and b/resources/mesh_tree_algo_tri.png differ
index a19574b0bb7a019c7090cb6165e843c6ab3a99b7..dc5daa51f31c12a573e5bad0039617a55b1e1e38 100644 (file)
Binary files a/resources/mesh_tree_mesh_geom_modif.png and b/resources/mesh_tree_mesh_geom_modif.png differ
index 22b61bbed60d150c22bde0c23b1e9bd96b503cf7..c1a42ebe506e43b6b465021ac9b826a8b1a4a204 100644 (file)
Binary files a/resources/over_constrained_face.png and b/resources/over_constrained_face.png differ
index 0e2da263fc8d6a08e7d1634fd589703529a3a5b8..74ec0e296df012691dbc6500677a7f0712190760 100644 (file)
Binary files a/resources/over_constrained_volume.png and b/resources/over_constrained_volume.png differ
diff --git a/resources/reorient_faces_ref_groups.png b/resources/reorient_faces_ref_groups.png
new file mode 100644 (file)
index 0000000..4525828
Binary files /dev/null and b/resources/reorient_faces_ref_groups.png differ
index 88405aed6f70d1ed6db27d7b125912182e8fe55b..7fb5fc413ae49b0aa9916d25012ce02e7ef25ff4 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -42,15 +42,11 @@ SET(SUBDIRS_COMMON
   Tools
 )
 
-IF(SALOME_SMESH_ENABLE_MEFISTO)
-  SET(SUBDIRS_MEFISTO2 MEFISTO2)
-ENDIF(SALOME_SMESH_ENABLE_MEFISTO)
-
 ##
 # CGNS
 ##
 IF(SALOME_SMESH_USE_CGNS)
-  SET(SUBDIRS_CGNS 
+  SET(SUBDIRS_CGNS
     DriverCGNS
   )
 ENDIF(SALOME_SMESH_USE_CGNS)
@@ -59,9 +55,9 @@ ENDIF(SALOME_SMESH_USE_CGNS)
 # GUI
 ##
 IF(SALOME_BUILD_GUI)
-  SET(SUBDIRS_GUI OBJECT 
-                  SMESHFiltersSelection 
-                  SMESHGUI 
+  SET(SUBDIRS_GUI OBJECT
+                  SMESHFiltersSelection
+                  SMESHGUI
                   PluginUtils
                  SMESH_SWIG_WITHIHM
                  StdMeshersGUI
@@ -70,7 +66,6 @@ ENDIF(SALOME_BUILD_GUI)
 
 SET(SUBDIRS
   ${SUBDIRS_COMMON}
-  ${SUBDIRS_MEFISTO2}
   ${SUBDIRS_CGNS}
   ${SUBDIRS_GUI}
 )
index ac2f02a070e596be6b2f998725d210d4b346eabb..edf0955ba1769b1fd62a86be656279a958d62d4b 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index e45fc29368722a6ed773874d365512cd312c7e77..57855777584e688899d0d94b68d9c5e5086ef901 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -34,6 +34,7 @@
 #include "SMESHDS_Mesh.hxx"
 #include "SMESH_MeshAlgos.hxx"
 #include "SMESH_OctreeNode.hxx"
+#include "SMESH_Comment.hxx"
 
 #include <GEOMUtils.hxx>
 #include <Basics_Utils.hxx>
@@ -127,7 +128,7 @@ namespace {
     return aDist;
   }
 
-  int getNbMultiConnection( const SMDS_Mesh* theMesh, const int theId )
+  int getNbMultiConnection( const SMDS_Mesh* theMesh, const smIdType theId )
   {
     if ( theMesh == 0 )
       return 0;
@@ -225,7 +226,7 @@ void NumericalFunctor::SetMesh( const SMDS_Mesh* theMesh )
   myMesh = theMesh;
 }
 
-bool NumericalFunctor::GetPoints(const int       theId,
+bool NumericalFunctor::GetPoints(const smIdType       theId,
                                  TSequenceOfXYZ& theRes ) const
 {
   theRes.clear();
@@ -322,12 +323,12 @@ bool NumericalFunctor::IsApplicable( long theElementId ) const
  */
 //================================================================================
 
-void NumericalFunctor::GetHistogram(int                     nbIntervals,
-                                    std::vector<int>&       nbEvents,
-                                    std::vector<double>&    funValues,
-                                    const std::vector<int>& elements,
-                                    const double*           minmax,
-                                    const bool              isLogarithmic)
+void NumericalFunctor::GetHistogram(int                          nbIntervals,
+                                    std::vector<int>&            nbEvents,
+                                    std::vector<double>&         funValues,
+                                    const std::vector<smIdType>& elements,
+                                    const double*                minmax,
+                                    const bool                   isLogarithmic)
 {
   if ( nbIntervals < 1 ||
        !myMesh ||
@@ -346,7 +347,7 @@ void NumericalFunctor::GetHistogram(int                     nbIntervals,
   }
   else
   {
-    std::vector<int>::const_iterator id = elements.begin();
+    std::vector<smIdType>::const_iterator id = elements.begin();
     for ( ; id != elements.end(); ++id )
       values.insert( GetValue( *id ));
   }
@@ -997,6 +998,102 @@ namespace{
     return aHeight;
   }
 
+  //================================================================================
+  /*!
+   * \brief Standard quality of a tetrahedron but not normalized
+   */
+  //================================================================================
+
+  double tetQualityByHomardMethod( const gp_XYZ & p1,
+                                   const gp_XYZ & p2,
+                                   const gp_XYZ & p3,
+                                   const gp_XYZ & p4 )
+  {
+    gp_XYZ edgeVec[6];
+    edgeVec[0] = ( p1 - p2 );
+    edgeVec[1] = ( p2 - p3 );
+    edgeVec[2] = ( p3 - p1 );
+    edgeVec[3] = ( p4 - p1 );
+    edgeVec[4] = ( p4 - p2 );
+    edgeVec[5] = ( p4 - p3 );
+
+    double maxEdgeLen2            = edgeVec[0].SquareModulus();
+    maxEdgeLen2 = Max( maxEdgeLen2, edgeVec[1].SquareModulus() );
+    maxEdgeLen2 = Max( maxEdgeLen2, edgeVec[2].SquareModulus() );
+    maxEdgeLen2 = Max( maxEdgeLen2, edgeVec[3].SquareModulus() );
+    maxEdgeLen2 = Max( maxEdgeLen2, edgeVec[4].SquareModulus() );
+    maxEdgeLen2 = Max( maxEdgeLen2, edgeVec[5].SquareModulus() );
+    double maxEdgeLen = Sqrt( maxEdgeLen2 );
+
+    gp_XYZ cross01 = edgeVec[0] ^ edgeVec[1];
+    double sumArea = ( cross01                 ).Modulus(); // actually double area
+    sumArea       += ( edgeVec[0] ^ edgeVec[3] ).Modulus();
+    sumArea       += ( edgeVec[1] ^ edgeVec[4] ).Modulus();
+    sumArea       += ( edgeVec[2] ^ edgeVec[5] ).Modulus();
+
+    double sixVolume = Abs( cross01 * edgeVec[4] ); // 6 * volume
+    double quality   = maxEdgeLen * sumArea / sixVolume; // not normalized!!!
+    return quality;
+  }
+
+  //================================================================================
+  /*!
+   * \brief HOMARD method of hexahedron quality
+   * 1. Decompose the hexa into 24 tetra: each face is splitted into 4 triangles by
+   *    adding the diagonals and every triangle is connected to the center of the hexa.
+   * 2. Compute the quality of every tetra with the same formula as for the standard quality,
+   *    except that the factor for the normalization is not the same because the final goal
+   *    is to have a quality equal to 1 for a perfect cube. So the formula is:
+   *    qual = max(lengthes of 6 edges) * (sum of surfaces of 4 faces) / (7.6569*6*volume)
+   * 3. The quality of the hexa is the highest value of the qualities of the 24 tetra
+   */
+  //================================================================================
+
+  double hexQualityByHomardMethod( const TSequenceOfXYZ& P )
+  {
+    gp_XYZ quadCenter[6];
+    quadCenter[0] = ( P(1) + P(2) + P(3) + P(4) ) / 4.;
+    quadCenter[1] = ( P(5) + P(6) + P(7) + P(8) ) / 4.;
+    quadCenter[2] = ( P(1) + P(2) + P(6) + P(5) ) / 4.;
+    quadCenter[3] = ( P(2) + P(3) + P(7) + P(6) ) / 4.;
+    quadCenter[4] = ( P(3) + P(4) + P(8) + P(7) ) / 4.;
+    quadCenter[5] = ( P(1) + P(4) + P(8) + P(5) ) / 4.;
+
+    gp_XYZ hexCenter = ( P(1) + P(2) + P(3) + P(4) + P(5) + P(6) + P(7) + P(8) ) / 8.;
+
+    // quad 1 ( 1 2 3 4 )
+    double quality =        tetQualityByHomardMethod( P(1), P(2), quadCenter[0], hexCenter );
+    quality = Max( quality, tetQualityByHomardMethod( P(2), P(3), quadCenter[0], hexCenter ));
+    quality = Max( quality, tetQualityByHomardMethod( P(3), P(4), quadCenter[0], hexCenter ));
+    quality = Max( quality, tetQualityByHomardMethod( P(4), P(1), quadCenter[0], hexCenter ));
+    // quad 2 ( 5 6 7 8 )
+    quality = Max( quality, tetQualityByHomardMethod( P(5), P(6), quadCenter[1], hexCenter ));
+    quality = Max( quality, tetQualityByHomardMethod( P(6), P(7), quadCenter[1], hexCenter ));
+    quality = Max( quality, tetQualityByHomardMethod( P(7), P(8), quadCenter[1], hexCenter ));
+    quality = Max( quality, tetQualityByHomardMethod( P(8), P(5), quadCenter[1], hexCenter ));
+    // quad 3 ( 1 2 6 5 )
+    quality = Max( quality, tetQualityByHomardMethod( P(1), P(2), quadCenter[2], hexCenter ));
+    quality = Max( quality, tetQualityByHomardMethod( P(2), P(6), quadCenter[2], hexCenter ));
+    quality = Max( quality, tetQualityByHomardMethod( P(6), P(5), quadCenter[2], hexCenter ));
+    quality = Max( quality, tetQualityByHomardMethod( P(5), P(1), quadCenter[2], hexCenter ));
+    // quad 4 ( 2 3 7 6 )
+    quality = Max( quality, tetQualityByHomardMethod( P(2), P(3), quadCenter[3], hexCenter ));
+    quality = Max( quality, tetQualityByHomardMethod( P(3), P(7), quadCenter[3], hexCenter ));
+    quality = Max( quality, tetQualityByHomardMethod( P(7), P(6), quadCenter[3], hexCenter ));
+    quality = Max( quality, tetQualityByHomardMethod( P(6), P(2), quadCenter[3], hexCenter ));
+    // quad 5 ( 3 4 8 7 )
+    quality = Max( quality, tetQualityByHomardMethod( P(3), P(4), quadCenter[4], hexCenter ));
+    quality = Max( quality, tetQualityByHomardMethod( P(4), P(8), quadCenter[4], hexCenter ));
+    quality = Max( quality, tetQualityByHomardMethod( P(8), P(7), quadCenter[4], hexCenter ));
+    quality = Max( quality, tetQualityByHomardMethod( P(7), P(3), quadCenter[4], hexCenter ));
+    // quad 6 ( 1 4 8 5 )
+    quality = Max( quality, tetQualityByHomardMethod( P(1), P(4), quadCenter[5], hexCenter ));
+    quality = Max( quality, tetQualityByHomardMethod( P(4), P(8), quadCenter[5], hexCenter ));
+    quality = Max( quality, tetQualityByHomardMethod( P(8), P(5), quadCenter[5], hexCenter ));
+    quality = Max( quality, tetQualityByHomardMethod( P(5), P(1), quadCenter[5], hexCenter ));
+
+    return quality / 7.65685424949;
+  }
 }
 
 double AspectRatio3D::GetValue( long theId )
@@ -1126,6 +1223,10 @@ double AspectRatio3D::GetValue( const TSequenceOfXYZ& P )
     break;
   }
   case 8:{
+
+    return hexQualityByHomardMethod( P ); // bos #23982
+
+
     {
       gp_XYZ aXYZ[4] = {P( 1 ),P( 2 ),P( 5 ),P( 3 )};
       aQuality = GetValue(TSequenceOfXYZ(&aXYZ[0],&aXYZ[4]));
@@ -1322,21 +1423,7 @@ bool Warping::IsApplicable( const SMDS_MeshElement* element ) const
 
 double Warping::GetValue( const TSequenceOfXYZ& P )
 {
-  if ( P.size() != 4 )
-    return 0;
-
-  gp_XYZ G = ( P( 1 ) + P( 2 ) + P( 3 ) + P( 4 ) ) / 4.;
-
-  double A1 = ComputeA( P( 1 ), P( 2 ), P( 3 ), G );
-  double A2 = ComputeA( P( 2 ), P( 3 ), P( 4 ), G );
-  double A3 = ComputeA( P( 3 ), P( 4 ), P( 1 ), G );
-  double A4 = ComputeA( P( 4 ), P( 1 ), P( 2 ), G );
-
-  double val = Max( Max( A1, A2 ), Max( A3, A4 ) );
-
-  const double eps = 0.1; // val is in degrees
-
-  return val < eps ? 0. : val;
+  return ComputeValue(P);
 }
 
 double Warping::ComputeA( const gp_XYZ& thePnt1,
@@ -1363,6 +1450,25 @@ double Warping::ComputeA( const gp_XYZ& thePnt1,
   return asin( fabs( H / L ) ) * 180. / M_PI;
 }
 
+double Warping::ComputeValue(const TSequenceOfXYZ& thePoints) const
+{
+  if (thePoints.size() != 4)
+    return 0;
+
+  gp_XYZ G = (thePoints(1) + thePoints(2) + thePoints(3) + thePoints(4)) / 4.;
+
+  double A1 = ComputeA(thePoints(1), thePoints(2), thePoints(3), G);
+  double A2 = ComputeA(thePoints(2), thePoints(3), thePoints(4), G);
+  double A3 = ComputeA(thePoints(3), thePoints(4), thePoints(1), G);
+  double A4 = ComputeA(thePoints(4), thePoints(1), thePoints(2), G);
+
+  double val = Max(Max(A1, A2), Max(A3, A4));
+
+  const double eps = 0.1; // val is in degrees
+
+  return val < eps ? 0. : val;
+}
+
 double Warping::GetBadRate( double Value, int /*nbNodes*/ ) const
 {
   // the warp is in the range [0.0,PI/2]
@@ -1377,6 +1483,93 @@ SMDSAbs_ElementType Warping::GetType() const
 }
 
 
+//================================================================================
+/*
+  Class       : Warping3D
+  Description : Functor for calculating warping
+*/
+//================================================================================
+
+bool Warping3D::IsApplicable(const SMDS_MeshElement* element) const
+{
+  return NumericalFunctor::IsApplicable(element);//&& element->NbNodes() == 4;
+}
+
+double Warping3D::GetValue(long theId)
+{
+  double aVal = 0;
+  myCurrElement = myMesh->FindElement(theId);
+  if (myCurrElement)
+  {
+    WValues aValues;
+    ProcessVolumeELement(aValues);
+    for (const auto& aValue: aValues)
+    {
+      aVal = Max(aVal, aValue.myWarp);
+    }
+  }
+  return aVal;
+}
+
+double Warping3D::GetValue(const TSequenceOfXYZ& P)
+{
+  return ComputeValue(P);
+}
+
+SMDSAbs_ElementType Warping3D::GetType() const
+{
+  return SMDSAbs_Volume;
+}
+
+bool Warping3D::Value::operator<(const Warping3D::Value& x) const
+{
+  if (myPntIds.size() != x.myPntIds.size())
+    return myPntIds.size() < x.myPntIds.size();
+
+  for (int anInd = 0; anInd < myPntIds.size(); ++anInd)
+    if (myPntIds[anInd] != x.myPntIds[anInd])
+      return myPntIds[anInd] != x.myPntIds[anInd];
+
+  return false;
+}
+
+// Compute value on each face of volume
+void Warping3D::ProcessVolumeELement(WValues& theValues)
+{
+  SMDS_VolumeTool aVTool(myCurrElement);
+  double aCoord[3];
+  for (int aFaceID = 0; aFaceID < aVTool.NbFaces(); ++aFaceID)
+  {
+    TSequenceOfXYZ aPoints;
+    std::set<const SMDS_MeshNode*> aNodes;
+    std::vector<long> aNodeIds;
+    const SMDS_MeshNode** aNodesPtr = aVTool.GetFaceNodes(aFaceID);
+
+    if (aNodesPtr)
+    {
+      for (int i = 0; i < aVTool.NbFaceNodes(aFaceID); ++i)
+      {
+        aNodesPtr[i]->GetXYZ(aCoord);
+        aPoints.push_back(gp_XYZ{ aCoord[0], aCoord[1], aCoord[2] });
+        aNodeIds.push_back(aNodesPtr[i]->GetID());
+      }
+      double aWarp = GetValue(aPoints);
+      Value aVal{ aWarp, aNodeIds };
+
+      theValues.push_back(aVal);
+    }
+  }
+}
+
+void Warping3D::GetValues(WValues& theValues)
+{
+  for (SMDS_VolumeIteratorPtr anIter = myMesh->volumesIterator(); anIter->more(); )
+  {
+    myCurrElement = anIter->next();
+    ProcessVolumeELement(theValues);
+  }
+}
+
 //================================================================================
 /*
   Class       : Taper
@@ -1871,7 +2064,7 @@ void Length2D::GetValues(TValues& theValues)
       {
         // use special nodes iterator
         SMDS_NodeIteratorPtr anIter = anElem->interlacedNodesIterator();
-        long aNodeId[4] = { 0,0,0,0 };
+        smIdType aNodeId[4] = { 0,0,0,0 };
         gp_Pnt P[4];
 
         double aLength = 0;
@@ -1908,7 +2101,7 @@ void Length2D::GetValues(TValues& theValues)
       }
       else {
         SMDS_NodeIteratorPtr aNodesIter = anElem->nodeIterator();
-        long aNodeId[2] = {0,0};
+        smIdType aNodeId[2] = {0,0};
         gp_Pnt P[3];
 
         double aLength;
@@ -1923,7 +2116,7 @@ void Length2D::GetValues(TValues& theValues)
         for( ; aNodesIter->more(); )
         {
           aNode = aNodesIter->next();
-          long anId = aNode->GetID();
+          smIdType anId = aNode->GetID();
 
           P[2] = SMESH_NodeXYZ( aNode );
 
@@ -2092,7 +2285,7 @@ double MultiConnection2D::GetValue( long theElementId )
       if (!anIter) break;
 
       const SMDS_MeshNode *aNode, *aNode0 = 0;
-      TColStd_MapOfInteger aMap, aMapPrev;
+      NCollection_Map< smIdType, smIdHasher > aMap, aMapPrev;
 
       for (i = 0; i <= len; i++) {
         aMapPrev = aMap;
@@ -2114,7 +2307,7 @@ double MultiConnection2D::GetValue( long theElementId )
         while (anElemIter->more()) {
           const SMDS_MeshElement* anElem = anElemIter->next();
           if (anElem != 0 && anElem->GetType() == SMDSAbs_Face) {
-            int anId = anElem->GetID();
+            smIdType anId = anElem->GetID();
 
             aMap.Add(anId);
             if (aMapPrev.Contains(anId)) {
@@ -2250,6 +2443,70 @@ SMDSAbs_ElementType NodeConnectivityNumber::GetType() const
   return SMDSAbs_Node;
 }
 
+//================================================================================
+/*
+  Class       : ScaledJacobian
+  Description : Functor returning the ScaledJacobian for volumetric elements
+*/
+//================================================================================
+
+double ScaledJacobian::GetValue( long theElementId )
+{  
+  if ( theElementId && myMesh ) {
+    SMDS_VolumeTool aVolumeTool;
+    if ( aVolumeTool.Set( myMesh->FindElement( theElementId )))
+      return aVolumeTool.GetScaledJacobian();
+  }
+  return 0;
+
+  /* 
+  //VTK version not used because lack of implementation for HEXAGONAL_PRISM. 
+  //Several mesh quality measures implemented in vtkMeshQuality can be accessed left here as reference
+  double aVal = 0;
+  myCurrElement = myMesh->FindElement( theElementId );
+  if ( myCurrElement )
+  {
+    VTKCellType cellType      = myCurrElement->GetVtkType();
+    vtkUnstructuredGrid* grid = const_cast<SMDS_Mesh*>( myMesh )->GetGrid();
+    vtkCell* avtkCell         = grid->GetCell( myCurrElement->GetVtkID() );
+    switch ( cellType )
+    {
+      case VTK_QUADRATIC_TETRA:      
+      case VTK_TETRA:
+        aVal = Round( vtkMeshQuality::TetScaledJacobian( avtkCell ));
+        break;
+      case VTK_QUADRATIC_HEXAHEDRON:
+      case VTK_HEXAHEDRON:
+        aVal = Round( vtkMeshQuality::HexScaledJacobian( avtkCell ));
+        break;
+      case VTK_QUADRATIC_WEDGE:
+      case VTK_WEDGE: //Pentahedron
+        aVal = Round( vtkMeshQuality::WedgeScaledJacobian( avtkCell ));
+        break;
+      case VTK_QUADRATIC_PYRAMID:
+      case VTK_PYRAMID:
+        aVal = Round( vtkMeshQuality::PyramidScaledJacobian( avtkCell ));
+        break;
+      case VTK_HEXAGONAL_PRISM:
+      case VTK_POLYHEDRON:
+      default:
+        break;
+    }          
+  }
+  return aVal;
+  */
+}
+
+double ScaledJacobian::GetBadRate( double Value, int /*nbNodes*/ ) const
+{
+  return Value;
+}
+
+SMDSAbs_ElementType ScaledJacobian::GetType() const
+{
+  return SMDSAbs_Volume;
+}
+
 /*
                             PREDICATES
 */
@@ -2368,16 +2625,22 @@ bool BareBorderFace::IsSatisfy(long theElementId )
 
 bool OverConstrainedVolume::IsSatisfy(long theElementId )
 {
-  // An element is over-constrained if it has N-1 free borders where
-  // N is the number of edges/faces for a 2D/3D element.
-  SMDS_VolumeTool  myTool;
-  if ( myTool.Set( myMesh->FindElement(theElementId)))
+  // An element is over-constrained if all its nodes are on the boundary.
+  // A node is on the boundary if it is connected to one or more faces.
+  SMDS_VolumeTool myTool;
+  if (myTool.Set(myMesh->FindElement(theElementId)))
   {
-    int nbSharedFaces = 0;
-    for ( int iF = 0; iF < myTool.NbFaces(); ++iF )
-      if ( !myTool.IsFreeFace( iF ) && ++nbSharedFaces > 1 )
-        break;
-    return ( nbSharedFaces == 1 );
+    auto nodes = myTool.GetNodes();
+
+    for (int i = 0; i < myTool.NbNodes(); ++i)
+    {
+      auto node = nodes[i];
+      if (node->NbInverseElements(SMDSAbs_Face) == 0)
+      {
+        return false;
+      }
+    }
+    return true;
   }
   return false;
 }
@@ -2390,29 +2653,19 @@ bool OverConstrainedVolume::IsSatisfy(long theElementId )
 
 bool OverConstrainedFace::IsSatisfy(long theElementId )
 {
-  // An element is over-constrained if it has N-1 free borders where
-  // N is the number of edges/faces for a 2D/3D element.
-  if ( const SMDS_MeshElement* face = myMesh->FindElement(theElementId))
-    if ( face->GetType() == SMDSAbs_Face )
+  // An element is over-constrained if all its nodes are on the boundary.
+  // A node is on the boundary if it is connected to one or more faces.
+  if (const SMDS_MeshElement *face = myMesh->FindElement(theElementId))
+    if (face->GetType() == SMDSAbs_Face)
     {
-      int nbSharedBorders = 0;
       int nbN = face->NbCornerNodes();
-      for ( int i = 0; i < nbN; ++i )
+      for (int i = 0; i < nbN; ++i)
       {
-        // check if a link is shared by another face
-        const SMDS_MeshNode* n1 = face->GetNode( i );
-        const SMDS_MeshNode* n2 = face->GetNode( (i+1)%nbN );
-        SMDS_ElemIteratorPtr fIt = n1->GetInverseElementIterator( SMDSAbs_Face );
-        bool isShared = false;
-        while ( !isShared && fIt->more() )
-        {
-          const SMDS_MeshElement* f = fIt->next();
-          isShared = ( f != face && f->GetNodeIndex(n2) != -1 );
-        }
-        if ( isShared && ++nbSharedBorders > 1 )
-          break;
+        const SMDS_MeshNode *n1 = face->GetNode(i);
+        if (n1->NbInverseElements(SMDSAbs_Edge) == 0)
+          return false;
       }
-      return ( nbSharedBorders == 1 );
+      return true;
     }
   return false;
 }
@@ -2575,14 +2828,14 @@ void FreeEdges::SetMesh( const SMDS_Mesh* theMesh )
   myMesh = theMesh;
 }
 
-bool FreeEdges::IsFreeEdge( const SMDS_MeshNode** theNodes, const int theFaceId  )
+bool FreeEdges::IsFreeEdge( const SMDS_MeshNode** theNodes, const smIdType theFaceId  )
 {
   SMDS_ElemIteratorPtr anElemIter = theNodes[ 0 ]->GetInverseElementIterator(SMDSAbs_Face);
   while( anElemIter->more() )
   {
     if ( const SMDS_MeshElement* anElem = anElemIter->next())
     {
-      const int anId = anElem->GetID();
+      const smIdType anId = anElem->GetID();
       if ( anId != theFaceId && anElem->GetNodeIndex( theNodes[1] ) >= 0 )
         return false;
     }
@@ -2867,8 +3120,8 @@ void GroupColor::SetMesh( const SMDS_Mesh* theMesh )
     SMDSAbs_ElementType aGrpElType = (SMDSAbs_ElementType)aGrp->GetType();
     if ( myType == aGrpElType || (myType == SMDSAbs_All && aGrpElType != SMDSAbs_Node) ) {
       // add elements IDS into control
-      int aSize = aGrp->Extent();
-      for (int i = 0; i < aSize; i++)
+      smIdType aSize = aGrp->Extent();
+      for (smIdType i = 0; i < aSize; i++)
         myIDs.insert( aGrp->GetID(i+1) );
     }
   }
@@ -3019,7 +3272,7 @@ ConnectedElements::ConnectedElements():
 SMDSAbs_ElementType ConnectedElements::GetType() const
 { return myType; }
 
-int ConnectedElements::GetNode() const
+smIdType ConnectedElements::GetNode() const
 { return myXYZ.empty() ? myNodeID : 0; } // myNodeID can be found by myXYZ
 
 std::vector<double> ConnectedElements::GetPoint() const
@@ -3046,7 +3299,7 @@ void ConnectedElements::SetMesh( const SMDS_Mesh* theMesh )
   }
 }
 
-void ConnectedElements::SetNode( int nodeID )
+void ConnectedElements::SetNode( smIdType nodeID )
 {
   myNodeID = nodeID;
   myXYZ.clear();
@@ -3106,7 +3359,7 @@ bool ConnectedElements::IsSatisfy( long theElementId )
       return false;
 
     std::list< const SMDS_MeshNode* > nodeQueue( 1, node0 );
-    std::set< int > checkedNodeIDs;
+    std::set< smIdType > checkedNodeIDs;
     // algo:
     // foreach node in nodeQueue:
     //   foreach element sharing a node:
@@ -3131,7 +3384,7 @@ bool ConnectedElements::IsSatisfy( long theElementId )
         while ( nIt->more() )
         {
           const SMDS_MeshNode* n = static_cast< const SMDS_MeshNode* >( nIt->next() );
-          if ( checkedNodeIDs.insert( n->GetID() ).second )
+          if ( checkedNodeIDs.insert( n->GetID()).second )
             nodeQueue.push_back( n );
         }
       }
@@ -3278,56 +3531,56 @@ void RangeOfIds::GetRangeStr( TCollection_AsciiString& theResStr )
 {
   theResStr.Clear();
 
-  TColStd_SequenceOfInteger     anIntSeq;
-  TColStd_SequenceOfAsciiString aStrSeq;
+  TIDsSeq                             anIntSeq;
+  NCollection_Sequence< std::string > aStrSeq;
 
-  TColStd_MapIteratorOfMapOfInteger anIter( myIds );
+  TIDsMap::Iterator anIter( myIds );
   for ( ; anIter.More(); anIter.Next() )
   {
-    int anId = anIter.Key();
-    TCollection_AsciiString aStr( anId );
+    smIdType anId = anIter.Key();
+    SMESH_Comment aStr( anId );
     anIntSeq.Append( anId );
     aStrSeq.Append( aStr );
   }
 
-  for ( int i = 1, n = myMin.Length(); i <= n; i++ )
+  for ( smIdType i = 1, n = myMin.size(); i <= n; i++ )
   {
-    int aMinId = myMin( i );
-    int aMaxId = myMax( i );
+    smIdType aMinId = myMin[i];
+    smIdType aMaxId = myMax[i];
 
-    TCollection_AsciiString aStr;
+    SMESH_Comment aStr;
     if ( aMinId != IntegerFirst() )
-      aStr += aMinId;
+      aStr << aMinId;
 
-    aStr += "-";
+    aStr << "-";
 
-    if ( aMaxId != IntegerLast() )
-      aStr += aMaxId;
+    if ( aMaxId != std::numeric_limits<smIdType>::max() )
+      aStr << aMaxId;
 
     // find position of the string in result sequence and insert string in it
     if ( anIntSeq.Length() == 0 )
     {
       anIntSeq.Append( aMinId );
-      aStrSeq.Append( aStr );
+      aStrSeq.Append( (const char*)aStr );
     }
     else
     {
       if ( aMinId < anIntSeq.First() )
       {
         anIntSeq.Prepend( aMinId );
-        aStrSeq.Prepend( aStr );
+        aStrSeq.Prepend( (const char*)aStr );
       }
       else if ( aMinId > anIntSeq.Last() )
       {
         anIntSeq.Append( aMinId );
-        aStrSeq.Append( aStr );
+        aStrSeq.Append( (const char*)aStr );
       }
       else
         for ( int j = 1, k = anIntSeq.Length(); j <= k; j++ )
           if ( aMinId < anIntSeq( j ) )
           {
             anIntSeq.InsertBefore( j, aMinId );
-            aStrSeq.InsertBefore( j, aStr );
+            aStrSeq.InsertBefore( j, (const char*)aStr );
             break;
           }
     }
@@ -3335,13 +3588,14 @@ void RangeOfIds::GetRangeStr( TCollection_AsciiString& theResStr )
 
   if ( aStrSeq.Length() == 0 )
     return;
-
-  theResStr = aStrSeq( 1 );
+  std::string aResStr;
+  aResStr = aStrSeq( 1 );
   for ( int j = 2, k = aStrSeq.Length(); j <= k; j++  )
   {
-    theResStr += ",";
-    theResStr += aStrSeq( j );
+    aResStr += ",";
+    aResStr += aStrSeq( j );
   }
+  theResStr = aResStr.c_str();
 }
 
 //=======================================================================
@@ -3351,8 +3605,8 @@ void RangeOfIds::GetRangeStr( TCollection_AsciiString& theResStr )
 //=======================================================================
 bool RangeOfIds::SetRangeStr( const TCollection_AsciiString& theStr )
 {
-  myMin.Clear();
-  myMax.Clear();
+  myMin.clear();
+  myMax.clear();
   myIds.Clear();
 
   TCollection_AsciiString aStr = theStr;
@@ -3390,8 +3644,8 @@ bool RangeOfIds::SetRangeStr( const TCollection_AsciiString& theStr )
            (!aMaxStr.IsEmpty() && !aMaxStr.IsIntegerValue()) )
         return false;
 
-      myMin.Append( aMinStr.IsEmpty() ? IntegerFirst() : aMinStr.IntegerValue() );
-      myMax.Append( aMaxStr.IsEmpty() ? IntegerLast()  : aMaxStr.IntegerValue() );
+      myMin.push_back( aMinStr.IsEmpty() ? IntegerFirst() : aMinStr.IntegerValue() );
+      myMax.push_back( aMaxStr.IsEmpty() ? IntegerLast()  : aMaxStr.IntegerValue() );
     }
   }
 
@@ -3440,8 +3694,8 @@ bool RangeOfIds::IsSatisfy( long theId )
   if ( myIds.Contains( theId ) )
     return true;
 
-  for ( int i = 1, n = myMin.Length(); i <= n; i++ )
-    if ( theId >= myMin( i ) && theId <= myMax( i ) )
+  for ( size_t i = 0; i < myMin.size(); i++ )
+    if ( theId >= myMin[i] && theId <= myMax[i] )
       return true;
 
   return false;
@@ -3817,7 +4071,7 @@ bool ManifoldPart::process()
 
   // the map of non manifold links and bad geometry
   TMapOfLink aMapOfNonManifold;
-  TColStd_MapOfInteger aMapOfTreated;
+  TIDsMap    aMapOfTreated;
 
   // begin cycle on faces from start index and run on vector till the end
   //  and from begin to start index to cover whole vector
@@ -3830,18 +4084,18 @@ bool ManifoldPart::process()
     // as result next time when fi will be equal to aStartIndx
 
     SMDS_MeshFace* aFacePtr = myAllFacePtr[ fi ];
-    if ( aMapOfTreated.Contains( aFacePtr->GetID() ) )
+    if ( aMapOfTreated.Contains( aFacePtr->GetID()) )
       continue;
 
     aMapOfTreated.Add( aFacePtr->GetID() );
-    TColStd_MapOfInteger aResFaces;
+    TIDsMap aResFaces;
     if ( !findConnected( myAllFacePtrIntDMap, aFacePtr,
                          aMapOfNonManifold, aResFaces ) )
       continue;
-    TColStd_MapIteratorOfMapOfInteger anItr( aResFaces );
+    TIDsMap::Iterator anItr( aResFaces );
     for ( ; anItr.More(); anItr.Next() )
     {
-      int aFaceId = anItr.Key();
+      smIdType aFaceId = anItr.Key();
       aMapOfTreated.Add( aFaceId );
       myMapIds.Add( aFaceId );
     }
@@ -3877,7 +4131,7 @@ bool ManifoldPart::findConnected
                  ( const ManifoldPart::TDataMapFacePtrInt& theAllFacePtrInt,
                   SMDS_MeshFace*                           theStartFace,
                   ManifoldPart::TMapOfLink&                theNonManifold,
-                  TColStd_MapOfInteger&                    theResFaces )
+                  TIDsMap&                                 theResFaces )
 {
   theResFaces.Clear();
   if ( !theAllFacePtrInt.size() )
@@ -3945,7 +4199,7 @@ bool ManifoldPart::findConnected
         SMDS_MeshFace* aNextFace = *pFace;
         if ( aPrevFace == aNextFace )
           continue;
-        int anNextFaceID = aNextFace->GetID();
+        smIdType anNextFaceID = aNextFace->GetID();
         if ( myIsOnlyManifold && theResFaces.Contains( anNextFaceID ) )
          // should not be with non manifold restriction. probably bad topology
           continue;
@@ -4176,7 +4430,9 @@ void ElementsOnSurface::process()
   if ( !myMeshModifTracer.GetMesh() )
     return;
 
-  myIds.ReSize( myMeshModifTracer.GetMesh()->GetMeshInfo().NbElements( myType ));
+  int nbElems = FromSmIdType<int>( myMeshModifTracer.GetMesh()->GetMeshInfo().NbElements( myType ));
+  if ( nbElems > 0 )
+    myIds.ReSize( nbElems );
 
   SMDS_ElemIteratorPtr anIter = myMeshModifTracer.GetMesh()->elementsIterator( myType );
   for(; anIter->more(); )
@@ -4243,7 +4499,7 @@ namespace {
 
 struct ElementsOnShape::Classifier
 {
-  Classifier() { mySolidClfr = 0; myFlags = 0; }
+  Classifier(): mySolidClfr(0), myProjFace(0), myProjEdge(0), myFlags(0) { myU = myV = 1e100; }
   ~Classifier();
   void Init(const TopoDS_Shape& s, double tol, const Bnd_B3d* box = 0 );
   bool IsOut(const gp_Pnt& p)        { return SetChecked( true ), (this->*myIsOutFun)( p ); }
@@ -4256,6 +4512,7 @@ struct ElementsOnShape::Classifier
   void SetChecked( bool is ) { is ? SetFlag( theIsCheckedFlag ) : UnsetFlag( theIsCheckedFlag ); }
   void SetFlag  ( int flag ) { myFlags |= flag; }
   void UnsetFlag( int flag ) { myFlags &= ~flag; }
+  void GetParams( double & u, double & v ) const { u = myU; v = myV; }
 
 private:
   bool isOutOfSolid (const gp_Pnt& p);
@@ -4269,13 +4526,14 @@ private:
   TopoDS_Shape prepareSolid( const TopoDS_Shape& theSolid );
 
   bool (Classifier::*          myIsOutFun)(const gp_Pnt& p);
-  BRepClass3d_SolidClassifier* mySolidClfr; // ptr because of a run-time forbidden copy-constructor
+  BRepClass3d_SolidClassifier* mySolidClfr;
   Bnd_B3d                      myBox;
-  GeomAPI_ProjectPointOnSurf   myProjFace;
-  GeomAPI_ProjectPointOnCurve  myProjEdge;
+  GeomAPI_ProjectPointOnSurf*  myProjFace;
+  GeomAPI_ProjectPointOnCurve* myProjEdge;
   gp_Pnt                       myVertexXYZ;
   TopoDS_Shape                 myShape;
   double                       myTol;
+  double                       myU, myV; // result of isOutOfFace() and isOutOfEdge()
   int                          myFlags;
 };
 
@@ -4323,9 +4581,10 @@ Predicate* ElementsOnShape::clone() const
     size += sizeof( myWorkClassifiers[0] ) * myWorkClassifiers.size();
   if ( size > 1e+9 ) // 1G
   {
-#ifdef _DEBUG_
+
+  if (SALOME::VerbosityActivated())
     std::cout << "Avoid ElementsOnShape::clone(), too large: " << size << " bytes " << std::endl;
-#endif
+
     return 0;
   }
 
@@ -4353,9 +4612,12 @@ SMDSAbs_ElementType ElementsOnShape::GetType() const
 
 void ElementsOnShape::SetTolerance (const double theToler)
 {
-  if (myToler != theToler) {
+  if (myToler != theToler)
+  {
     myToler = theToler;
-    SetShape(myShape, myType);
+    TopoDS_Shape s = myShape;
+    myShape.Nullify();
+    SetShape( s, myType );
   }
 }
 
@@ -4583,6 +4845,7 @@ bool ElementsOnShape::IsSatisfy (const SMDS_MeshNode* node,
           isNodeOut = false;
           if ( okShape )
             *okShape = myWorkClassifiers[i]->Shape();
+          myWorkClassifiers[i]->GetParams( myU, myV );
           break;
         }
     }
@@ -4594,6 +4857,7 @@ bool ElementsOnShape::IsSatisfy (const SMDS_MeshNode* node,
           isNodeOut = false;
           if ( okShape )
             *okShape = myClassifiers[i].Shape();
+          myClassifiers[i].GetParams( myU, myV );
           break;
         }
     }
@@ -4636,7 +4900,8 @@ void ElementsOnShape::Classifier::Init( const TopoDS_Shape& theShape,
     else
     {
       surf->Bounds( u1,u2,v1,v2 );
-      myProjFace.Init(surf, u1,u2, v1,v2, myTol );
+      myProjFace = new GeomAPI_ProjectPointOnSurf;
+      myProjFace->Init( surf, u1,u2, v1,v2, myTol );
       myIsOutFun = & ElementsOnShape::Classifier::isOutOfFace;
     }
     break;
@@ -4649,7 +4914,8 @@ void ElementsOnShape::Classifier::Init( const TopoDS_Shape& theShape,
       myIsOutFun = & ElementsOnShape::Classifier::isOutOfNone;
     else
     {
-      myProjEdge.Init(curve, u1, u2);
+      myProjEdge = new GeomAPI_ProjectPointOnCurve;
+      myProjEdge->Init( curve, u1, u2 );
       myIsOutFun = & ElementsOnShape::Classifier::isOutOfEdge;
     }
     break;
@@ -4699,6 +4965,8 @@ void ElementsOnShape::Classifier::Init( const TopoDS_Shape& theShape,
 ElementsOnShape::Classifier::~Classifier()
 {
   delete mySolidClfr; mySolidClfr = 0;
+  delete myProjFace;  myProjFace = 0;
+  delete myProjEdge;  myProjEdge = 0;
 }
 
 TopoDS_Shape ElementsOnShape::Classifier::prepareSolid( const TopoDS_Shape& theSolid )
@@ -4735,13 +5003,12 @@ bool ElementsOnShape::Classifier::isOutOfBox( const gp_Pnt& p )
 bool ElementsOnShape::Classifier::isOutOfFace( const gp_Pnt& p )
 {
   if ( isOutOfBox( p )) return true;
-  myProjFace.Perform( p );
-  if ( myProjFace.IsDone() && myProjFace.LowerDistance() <= myTol )
+  myProjFace->Perform( p );
+  if ( myProjFace->IsDone() && myProjFace->LowerDistance() <= myTol )
   {
     // check relatively to the face
-    Standard_Real u, v;
-    myProjFace.LowerDistanceParameters(u, v);
-    gp_Pnt2d aProjPnt (u, v);
+    myProjFace->LowerDistanceParameters( myU, myV );
+    gp_Pnt2d aProjPnt( myU, myV );
     BRepClass_FaceClassifier aClsf ( TopoDS::Face( myShape ), aProjPnt, myTol );
     if ( aClsf.State() == TopAbs_IN || aClsf.State() == TopAbs_ON )
       return false;
@@ -4752,8 +5019,11 @@ bool ElementsOnShape::Classifier::isOutOfFace( const gp_Pnt& p )
 bool ElementsOnShape::Classifier::isOutOfEdge( const gp_Pnt& p )
 {
   if ( isOutOfBox( p )) return true;
-  myProjEdge.Perform( p );
-  return ! ( myProjEdge.NbPoints() > 0 && myProjEdge.LowerDistance() <= myTol );
+  myProjEdge->Perform( p );
+  bool isOn = ( myProjEdge->NbPoints() > 0 && myProjEdge->LowerDistance() <= myTol );
+  if ( isOn )
+    myU = myProjEdge->LowerDistanceParameter();
+  return !isOn;
 }
 
 bool ElementsOnShape::Classifier::isOutOfVertex( const gp_Pnt& p )
index 7d25f1dca9b27dfc95ad1653e34e42b92824fd41..456f4b30a8237473853594b5fff070764367d0e6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -32,8 +32,8 @@
 #include <GeomAPI_ProjectPointOnSurf.hxx>
 #include <Quantity_Color.hxx>
 #include <TColStd_MapOfInteger.hxx>
-#include <TColStd_SequenceOfInteger.hxx>
 #include <TCollection_AsciiString.hxx>
+#include <NCollection_Map.hxx>
 #include <TopAbs.hxx>
 #include <TopoDS_Face.hxx>
 #include <gp_XYZ.hxx>
@@ -58,6 +58,9 @@ class ShapeAnalysis_Surface;
 class gp_Pln;
 class gp_Pnt;
 
+typedef NCollection_Map< smIdType, smIdHasher > TIDsMap;
+typedef NCollection_Sequence<smIdType> TIDsSeq;
+
 namespace SMESH{
   namespace Controls{
 
@@ -130,12 +133,12 @@ namespace SMESH{
       virtual void SetMesh( const SMDS_Mesh* theMesh );
       virtual double GetValue( long theElementId );
       virtual double GetValue(const TSequenceOfXYZ& /*thePoints*/) { return -1.0;};
-      void GetHistogram(int                     nbIntervals,
-                        std::vector<int>&       nbEvents,
-                        std::vector<double>&    funValues,
-                        const std::vector<int>& elements,
-                        const double*           minmax=0,
-                        const bool              isLogarithmic = false);
+      void GetHistogram(int                            nbIntervals,
+                        std::vector<int>&              nbEvents,
+                        std::vector<double>&           funValues,
+                        const std::vector<::smIdType>& elements,
+                        const double*                  minmax=0,
+                        const bool                     isLogarithmic = false);
       bool IsApplicable( long theElementId ) const;
       virtual bool IsApplicable( const SMDS_MeshElement* element ) const;
       virtual SMDSAbs_ElementType GetType() const = 0;
@@ -144,7 +147,7 @@ namespace SMESH{
       void  SetPrecision( const long thePrecision );
       double Round( const double & value );
       
-      bool GetPoints(const int theId, TSequenceOfXYZ& theRes) const;
+      bool GetPoints(const ::smIdType theId, TSequenceOfXYZ& theRes) const;
       static bool GetPoints(const SMDS_MeshElement* theElem, TSequenceOfXYZ& theRes);
     protected:
       const SMDS_Mesh*        myMesh;
@@ -243,9 +246,35 @@ namespace SMESH{
       virtual SMDSAbs_ElementType GetType() const;
       virtual bool IsApplicable( const SMDS_MeshElement* element ) const;
 
-    private:
+    protected:
       double ComputeA( const gp_XYZ&, const gp_XYZ&, const gp_XYZ&, const gp_XYZ& ) const;
+      double ComputeValue( const TSequenceOfXYZ& thePoints ) const;
     };
+
+    /*
+      Class       : Warping3D
+      Description : Functor for calculating warping
+    */
+    class SMESHCONTROLS_EXPORT Warping3D: public virtual Warping {
+    public:
+      virtual bool IsApplicable(const SMDS_MeshElement* element) const;
+      virtual double GetValue(const TSequenceOfXYZ& thePoints);
+      virtual double GetValue(long theId);
+      virtual SMDSAbs_ElementType GetType() const;
+      
+      struct Value {
+        double myWarp;
+        std::vector<long> myPntIds;
+        bool operator<(const Value& x) const;
+      };
+
+      typedef std::vector<Value> WValues;
+      void GetValues(WValues& theValues);
+
+    private:
+      void ProcessVolumeELement(WValues& theValues);
+    };
+    typedef boost::shared_ptr<Warping3D> Warping3DPtr;
   
   
     /*
@@ -401,6 +430,17 @@ namespace SMESH{
       virtual double GetBadRate( double Value, int nbNodes ) const;
       virtual SMDSAbs_ElementType GetType() const;
     };
+    
+    /*
+      Class       : ScaledJacobian
+      Description : Functor returning the ScaledJacobian as implemeted in VTK for volumetric elements
+    */
+    class SMESHCONTROLS_EXPORT ScaledJacobian: public virtual NumericalFunctor{
+    public:
+      virtual double GetValue( long theNodeId );
+      virtual double GetBadRate( double Value, int nbNodes ) const;
+      virtual SMDSAbs_ElementType GetType() const;
+    };
 
 
     /*
@@ -423,9 +463,9 @@ namespace SMESH{
       double GetTolerance () const { return myToler; }
 
     private:
-      double               myToler;
-      TColStd_MapOfInteger myCoincidentIDs;
-      TMeshModifTracer     myMeshModifTracer;
+      double           myToler;
+      TIDsMap          myCoincidentIDs;
+      TMeshModifTracer myMeshModifTracer;
     };
     typedef boost::shared_ptr<CoincidentNodes> CoincidentNodesPtr;
    
@@ -591,7 +631,7 @@ namespace SMESH{
       virtual void SetMesh( const SMDS_Mesh* theMesh );
       virtual bool IsSatisfy( long theElementId );
       virtual SMDSAbs_ElementType GetType() const;
-      static bool IsFreeEdge( const SMDS_MeshNode** theNodes, const int theFaceId  );
+      static bool IsFreeEdge( const SMDS_MeshNode** theNodes, const ::smIdType theFaceId  );
       typedef long TElemId;
       struct Border{
         TElemId myElemId;
@@ -650,9 +690,9 @@ namespace SMESH{
     protected:
       const SMDS_Mesh*              myMesh;
 
-      TColStd_SequenceOfInteger     myMin;
-      TColStd_SequenceOfInteger     myMax;
-      TColStd_MapOfInteger          myIds;
+      std::vector< ::smIdType >       myMin;
+      std::vector< ::smIdType >       myMax;
+      TIDsMap                       myIds;
 
       SMDSAbs_ElementType           myType;
     };
@@ -833,7 +873,7 @@ namespace SMESH{
       bool    findConnected( const TDataMapFacePtrInt& theAllFacePtrInt,
                              SMDS_MeshFace*            theStartFace,
                              TMapOfLink&               theNonManifold,
-                             TColStd_MapOfInteger&     theResFaces );
+                             TIDsMap&                  theResFaces );
       bool    isInPlane( const SMDS_MeshFace* theFace1,
                           const SMDS_MeshFace* theFace2 );
       void    expandBoundary( TMapOfLink&            theMapOfBoundary,
@@ -847,8 +887,8 @@ namespace SMESH{
 
     private:
       const SMDS_Mesh*      myMesh;
-      TColStd_MapOfInteger  myMapIds;
-      TColStd_MapOfInteger  myMapBadGeomIds;
+      TIDsMap               myMapIds;
+      TIDsMap               myMapBadGeomIds;
       TVectorOfFacePtr      myAllFacePtr;
       TDataMapFacePtrInt    myAllFacePtrIntDMap;
       double                myAngToler;
@@ -909,7 +949,7 @@ namespace SMESH{
 
     private:
       TMeshModifTracer      myMeshModifTracer;
-      TColStd_MapOfInteger  myIds;
+      TIDsMap               myIds;
       SMDSAbs_ElementType   myType;
       TopoDS_Face           mySurf;
       double                myToler;
@@ -944,6 +984,7 @@ namespace SMESH{
                         const SMDSAbs_ElementType theType);
       bool    IsSatisfy (const SMDS_MeshElement* elem);
       bool    IsSatisfy (const SMDS_MeshNode* node, TopoDS_Shape* okShape=0);
+      void    GetParams( double & u, double & v ) const { u = myU; v = myV; }
 
     private:
 
@@ -960,6 +1001,7 @@ namespace SMESH{
       SMDSAbs_ElementType        myType;
       TopoDS_Shape               myShape;
       double                     myToler;
+      double                     myU, myV; // result of node projection on EDGE or FACE
       bool                       myAllNodesFlag;
 
       TMeshModifTracer           myMeshModifTracer;
@@ -1149,7 +1191,7 @@ namespace SMESH{
       TMeshModifTracer     myMeshModifTracer;
       long                 myFaceID;
       double               myToler;
-      TColStd_MapOfInteger myCoplanarIDs;
+      TIDsMap              myCoplanarIDs;
     };
     typedef boost::shared_ptr<CoplanarFaces> CoplanarFacesPtr;
 
@@ -1162,9 +1204,9 @@ namespace SMESH{
     public:
       ConnectedElements();
       //virtual Predicate*   clone() const { return new ConnectedElements( *this ); }
-      void                 SetNode( int nodeID );
+      void                 SetNode( ::smIdType nodeID );
       void                 SetPoint( double x, double y, double z );
-      int                  GetNode() const;
+      ::smIdType           GetNode() const;
       std::vector<double>  GetPoint() const;
 
       void                 SetType( SMDSAbs_ElementType theType );
@@ -1176,14 +1218,14 @@ namespace SMESH{
       //const std::set<long>& GetDomainIDs() const { return myOkIDs; }
 
     private:
-      int                 myNodeID;
-      std::vector<double> myXYZ;
-      SMDSAbs_ElementType myType;
-      TMeshModifTracer    myMeshModifTracer;
+      ::smIdType            myNodeID;
+      std::vector<double>   myXYZ;
+      SMDSAbs_ElementType   myType;
+      TMeshModifTracer      myMeshModifTracer;
 
-      void                clearOkIDs();
-      bool                myOkIDsReady;
-      std::set< int >     myOkIDs; // empty means that there is one domain
+      void                  clearOkIDs();
+      bool                  myOkIDsReady;
+      std::set<::smIdType>  myOkIDs; // empty means that there is one domain
     };
     typedef boost::shared_ptr<ConnectedElements> ConnectedElementsPtr;
 
index 62c1f0c44c36923e2ea19dda6c84a415047931be..0e9153f53b60d8f5df4a999bf6fc41826f335945 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 9552c7469c4a89613ab6ced488dcdb259d1dce4d..b1f43062612e7304ef538e0b86d5e37a7becadf1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -28,7 +28,6 @@
 
 #include "SMESH_Comment.hxx"
 
-//#define _DEBUG_
 #include <utilities.h>
 
 using namespace std;
@@ -79,9 +78,7 @@ Driver_Mesh::Status Driver_Mesh::addMessage(const std::string& msg,
   myErrorMessages.push_back( msg );
 
   MESSAGE(msg);
-#ifdef _DEBUG_
-  cout << msg << endl;
-#endif
+
   return ( myStatus = isFatal ? DRS_FAIL : DRS_WARN_SKIP_ELEM );
 }
 
index bd6a714065390919aff1b4eea5d91de3bc4552d7..7293e22846dc7831018d93500d5f0747f1d42c54 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #define _INCLUDE_DRIVER_MESH
 
 #include "SMESH_ComputeError.hxx"
+#include "SMDS_Mesh.hxx"
 
 #include <string>
 #include <vector>
+#include <smIdType.hxx>
 
 #ifdef WIN32
  #if defined MESHDRIVER_EXPORTS || defined MeshDriver_EXPORTS
@@ -50,12 +52,13 @@ class MESHDRIVER_EXPORT Driver_Mesh
 
   enum Status {
     DRS_OK,
-    DRS_EMPTY,          // a file contains no mesh with the given name
-    DRS_WARN_RENUMBER,  // a file has overlapped ranges of element numbers,
-                        // so the numbers from the file are ignored
-    DRS_WARN_SKIP_ELEM, // some elements were skipped due to incorrect file data
+    DRS_EMPTY,           // a file contains no mesh with the given name
+    DRS_WARN_RENUMBER,   // a file has overlapped ranges of element numbers,
+                         // so the numbers from the file are ignored
+    DRS_WARN_SKIP_ELEM,  // some elements were skipped due to incorrect file data
     DRS_WARN_DESCENDING, // some elements were skipped due to descending connectivity
-    DRS_FAIL            // general failure (exception etc.)
+    DRS_FAIL,            // general failure (exception etc.)
+    DRS_TOO_LARGE_MESH   // mesh is too large for export
   };
 
   void                SetMeshId(int theMeshId);
@@ -70,6 +73,20 @@ class MESHDRIVER_EXPORT Driver_Mesh
 
   virtual SMESH_ComputeErrorPtr GetError();
 
+  // check if a mesh is too large to export it using IDTYPE;
+  // check either max ID or number of elements
+  template< typename IDTYPE >
+    static bool IsMeshTooLarge( const SMDS_Mesh* mesh, bool checkIDs )
+  {
+    if ( sizeof( IDTYPE ) < sizeof( smIdType ))
+    {
+      const smIdType maxNB = ToSmIdType( std::numeric_limits< IDTYPE >::max() );
+      return (( checkIDs ? mesh->MaxNodeID()    : mesh->NbNodes() )  > maxNB ||
+              ( checkIDs ? mesh->MaxElementID() : mesh->NbElements() > maxNB ));
+    }
+    return false;
+  }
+
  protected:
   std::string myFile;
   std::string myMeshName;
index f54b570dc4239ec33018beaf973cdcfd6c873980..2baa2917fbc58da8823eb5fd7f33667bf6fbfe2b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 240322fd6ad7d67f73bb52a1d2f038c17ce0bc46..7b590ce4f226deace834887bff3b947830d8ccaa 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index f8814338362b4facce799d5532a13279ca0c0525..35eecba9b4e78e511b4d6145cbed10be37ff3550 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 5d02d7c2caee96a71c4f1a35b3159e9a1aa7a9f5..46e3e419a790b2efa6c9ddeffd6bff6732fd28fb 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index ee3afeba9e6bb7dac5a4c314b9f29672820b8d16..0380176e4a412bde2f79b9035c9e1a1897c5a903 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index dc6192470071bfe2b4b6dbfc6199128c47fe2fa6..22514d36c0ad300aa339b2e6f9038003b27f4b7b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -22,7 +22,7 @@
 // File      : DriverCGNS_Read.cxx
 // Created   : Thu Jun 30 10:33:31 2011
 // Author    : Edward AGAPOV (eap)
-//#define _DEBUG_
+
 #include <utilities.h>
 
 #include "DriverCGNS_Read.hxx"
@@ -33,6 +33,8 @@
 #include "SMESH_Comment.hxx"
 #include "SMESH_TypeDefs.hxx"
 
+#include <smIdType.hxx>
+
 #include <gp_XYZ.hxx>
 
 #include <cgnslib.h>
@@ -59,9 +61,9 @@ namespace
   struct TZoneData
   {
     int                    _id;
-    int                    _nodeIdShift; // nb nodes in previously read zones
-    int                    _elemIdShift; // nb faces in previously read zones
-    int                    _nbNodes, _nbElems;
+    smIdType               _nodeIdShift; // nb nodes in previously read zones
+    smIdType               _elemIdShift; // nb faces in previously read zones
+    smIdType               _nbNodes, _nbElems;
     int                    _meshDim;
     int                    _sizeX, _sizeY, _sizeZ, _nbCells; // structured
     cgsize_t               _sizes[NB_ZONE_SIZE_VAL];
@@ -215,7 +217,8 @@ namespace
    */
   //================================================================================
 
-  bool isEqualNodes( const int* nIds1, const int* nIds2, int nbNodes, SMESHDS_Mesh* mesh )
+  bool isEqualNodes( const cgsize_t* nIds1, const cgsize_t* nIds2, size_t nbNodes,
+                     SMESHDS_Mesh* mesh )
   {
     if ( nbNodes > 0 )
     {
@@ -315,7 +318,7 @@ namespace
             }
             // check if range and donorRange describe the same nodes
             {
-              int ids1[2], ids2[2], nbN = 0;
+              cgsize_t ids1[2], ids2[2], nbN = 0;
               TPointRangeIterator rangeIt1bis( range, _meshDim );
               index1 = rangeIt1bis.Next();
               index2 = T * ( index1 - begin1 ) + begin2;
@@ -544,12 +547,16 @@ namespace
                                   ids[14],ids[13],ids[19],ids[18],ids[17],ids[16],
                                   ids[20],ids[24],ids[23],ids[22],ids[21],ids[25],ids[26], ID );
   }
-  SMDS_MeshElement* add_NGON(cgsize_t* ids, SMESHDS_Mesh* mesh, int ID)
+  SMDS_MeshElement* add_NGON(cgsize_t* ids, int nbNodes, SMESHDS_Mesh* mesh, int ID)
   {
-    vector<int> idVec( ids[0] );
-    for ( int i = 0; i < ids[0]; ++i )
-      idVec[ i ] = (int) ids[ i + 1];
-    return mesh->AddPolygonalFaceWithID( idVec, ID );
+#if CGNS_VERSION < 4000
+    nbNodes = ids[0];
+    ++ids;
+#endif
+    vector<smIdType> idVec( nbNodes );
+    for ( int i = 0; i < nbNodes; ++i )
+      idVec[ i ] = ToSmIdType( ids[ i ]);
+    return mesh->AddPolygonalFaceWithID( idVec, ToSmIdType(ID) );
   }
 
   typedef SMDS_MeshElement* (* PAddElemFun) (cgsize_t* ids, SMESHDS_Mesh* mesh, int ID);
@@ -585,7 +592,7 @@ namespace
       funVec[ CGNS_ENUMV( HEXA_8   )] = add_HEXA_8  ;
       funVec[ CGNS_ENUMV( HEXA_20  )] = add_HEXA_20 ;
       funVec[ CGNS_ENUMV( HEXA_27  )] = add_HEXA_27 ;
-      funVec[ CGNS_ENUMV( NGON_n   )] = add_NGON    ;
+      //funVec[ CGNS_ENUMV( NGON_n   )] = add_NGON    ;
     }
     return &funVec[0];
   }
@@ -854,20 +861,40 @@ Driver_Mesh::Status DriverCGNS_Read::Perform()
           addMessage( cg_get_error() );
           continue;
         }
-        vector< cgsize_t > elemData( eDataSize );
-        if ( cg_elements_read( _fn, cgnsBase, iZone, iSec, &elemData[0], NULL ) != CG_OK )
+        vector< cgsize_t > elemData( eDataSize ), polyOffset;
+#if CGNS_VERSION >= 4000
+        if ( elemType == CGNS_ENUMV( MIXED ) ||
+             elemType == CGNS_ENUMV( NGON_n ) ||
+             elemType == CGNS_ENUMV( NFACE_n ))
         {
-          addMessage( cg_get_error() );
-          continue;
+          polyOffset.resize( end - start + 2 );
+          if ( cg_poly_elements_read( _fn, cgnsBase, iZone, iSec,
+                                      elemData.data(), polyOffset.data(), NULL ) != CG_OK )
+          {
+            addMessage( cg_get_error() );
+            continue;
+          }
+        }
+        else
+#endif
+        {
+          if ( cg_elements_read( _fn, cgnsBase, iZone, iSec, elemData.data(), NULL ) != CG_OK )
+          {
+            addMessage( cg_get_error() );
+            continue;
+          }
         }
         // store elements
 
         MESSAGE("   store elements");
         int pos = 0, cgnsNbNodes = 0, elemID = start + zone._elemIdShift;
+        size_t iElem = 0;
         cg_npe( elemType, &cgnsNbNodes ); // get nb nodes by element type
         curAddElemFun = addElemFuns[ elemType ];
         SMDS_MeshElement* newElem = 0;
         const SMDS_MeshElement* face;
+        vector<int> quantities;
+        vector<const SMDS_MeshNode*> nodes, faceNodes;
 
         while ( pos < eDataSize )
         {
@@ -885,17 +912,25 @@ Driver_Mesh::Status DriverCGNS_Read::Perform()
           {
             if ( currentType == CGNS_ENUMV( NFACE_n )) // polyhedron
             {
-              //ElementConnectivity = Nfaces1, Face11, Face21, ... FaceN1,
-              //                      Nfaces2, Face12, Face22, ... FaceN2,
-              //                      ...
-              //                      NfacesM, Face1M, Face2M, ... FaceNM
-              const int nbFaces = elemData[ pos++ ];
-              vector<int> quantities( nbFaces );
-              vector<const SMDS_MeshNode*> nodes, faceNodes;
-              nodes.reserve( nbFaces * 4 );
+              int nbFaces = 0;
+              if ( polyOffset.empty() )
+                //ElementConnectivity = Nfaces1, Face11, Face21, ... FaceN1,
+                //                      Nfaces2, Face12, Face22, ... FaceN2,
+                //                      ...
+                //                      NfacesM, Face1M, Face2M, ... FaceNM
+                nbFaces = elemData[ pos++ ];
+              else // CGNS_VERSION >= 4000
+                // ElementConnectivity = Face11, Face21, ... FaceN1,
+                //                       Face12, Face22, ... FaceN2,
+                //                       ...
+                //                       Face1M, Face2M, ... FaceNM
+                nbFaces = polyOffset[ iElem + 1 ] - polyOffset[ iElem ];
+
+              quantities.resize( nbFaces ); quantities.back() = 0;
+              nodes.clear();                nodes.reserve( nbFaces * 4 );
               for ( int iF = 0; iF < nbFaces; ++iF )
               {
-                const int faceID = std::abs( elemData[ pos++ ]) + zone._elemIdShift; 
+                const int faceID = std::abs( elemData[ pos++ ]) + zone._elemIdShift;
                 if (( face = myMesh->FindElement( faceID )) && face->GetType() == SMDSAbs_Face )
                 {
                   const bool reverse = ( elemData[ pos-1 ] < 0 );
@@ -914,6 +949,7 @@ Driver_Mesh::Status DriverCGNS_Read::Perform()
                 }
                 else {
                   polyhedError = true;
+                  pos += nbFaces - iF - 1;
                   break;
                 }
               }
@@ -924,14 +960,23 @@ Driver_Mesh::Status DriverCGNS_Read::Perform()
             }
             else if ( currentType == CGNS_ENUMV( NGON_n )) // polygon
             {
-              // ElementConnectivity = Nnodes1, Node11, Node21, ... NodeN1,
-              //                       Nnodes2, Node12, Node22, ... NodeN2,
-              //                       ...
-              //                       NnodesM, Node1M, Node2M, ... NodeNM
-              const int nbNodes = elemData[ pos ];
-              zone.ReplaceNodes( &elemData[pos+1], nbNodes, zone._nodeIdShift );
-              newElem = add_NGON( &elemData[pos  ], myMesh, elemID );
-              pos += nbNodes + 1;
+              int nbNodes;
+              if ( polyOffset.empty() )
+                // ElementConnectivity = Nnodes1, Node11, Node21, ... NodeN1,
+                //                       Nnodes2, Node12, Node22, ... NodeN2,
+                //                       ...
+                //                       NnodesM, Node1M, Node2M, ... NodeNM
+                nbNodes = elemData[ pos ];
+              else // CGNS_VERSION >= 4000
+                // ElementConnectivity = Node11, Node21, ... NodeN1,
+                //                       Node12, Node22, ... NodeN2,
+                //                       ...
+                //                       Node1M, Node2M, ... NodeNM
+                nbNodes = polyOffset[ iElem + 1 ] - polyOffset[ iElem ];
+
+              zone.ReplaceNodes( &elemData[ pos + polyOffset.empty()], nbNodes, zone._nodeIdShift );
+              newElem = add_NGON( &elemData[ pos ], nbNodes, myMesh, elemID );
+              pos += nbNodes + polyOffset.empty();
             }
           }
           else // standard elements
@@ -942,6 +987,7 @@ Driver_Mesh::Status DriverCGNS_Read::Perform()
             nbNotSuppElem += int( newElem && newElem->NbNodes() != cgnsNbNodes );
           }
           elemID++;
+          iElem++;
 
         } // loop on elemData
       } // loop on cgns sections
@@ -960,7 +1006,7 @@ Driver_Mesh::Status DriverCGNS_Read::Perform()
     // -------------------------------------------
     // Read Boundary Conditions into SMESH groups
     // -------------------------------------------
-    
+
     MESSAGE("  read Boundary Conditions");
     int nbBC = 0;
     if ( cg_nbocos( _fn, cgnsBase, iZone, &nbBC) == CG_OK )
@@ -1131,7 +1177,7 @@ Driver_Mesh::Status DriverCGNS_Read::Perform()
             case 2: addElemFun = & add_QUAD_4; break;
             case 3: addElemFun = & add_HEXA_8; break;
             }
-            int elemID = meshInfo.NbElements();
+            smIdType elemID = meshInfo.NbElements();
             const SMDS_MeshElement* elem = 0;
             for ( size_t i = 0; i < ids.size(); i += nbElemNodes )
             {
index 9b7dac92f28db7bea84d22294ec02457f747373e..30543ed425253b071cc391f1e2fe6b5273117886 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 6cbeae2fe9124f9b80e3b7c3aae677755c4783cf..e713a66b5fc64561e4030a93ae080207f2453f42 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -201,17 +201,17 @@ namespace
    */
   struct TPolyhedFace
   {
-    int _id; // id of NGON_n
-    vector< int > _nodes; // lowest node IDs used for sorting
+    smIdType _id; // id of NGON_n
+    vector< smIdType > _nodes; // lowest node IDs used for sorting
 
-    TPolyhedFace( const SMDS_MeshNode** nodes, const int nbNodes, int ID):_id(ID)
+    TPolyhedFace( const SMDS_MeshNode** nodes, const smIdType nbNodes, smIdType ID):_id(ID)
     {
-      set< int > ids;
-      for ( int i = 0; i < nbNodes; ++i )
+      set< smIdType > ids;
+      for ( smIdType i = 0; i < nbNodes; ++i )
         ids.insert( nodes[i]->GetID() );
 
       _nodes.resize( 3 ); // std::min( nbNodes, 4 )); hope 3 nodes is enough
-      set< int >::iterator idIt = ids.begin();
+      set< smIdType >::iterator idIt = ids.begin();
       for ( size_t j = 0; j < _nodes.size(); ++j, ++idIt )
         _nodes[j] = *idIt;
     }
@@ -233,6 +233,25 @@ namespace
     return ( e2id == elem2cgID.end() ? elem->GetID() : e2id->second );
   }
 
+  //================================================================================
+  /*!
+   * \brief save nb nodes of a polygon
+   */
+  //================================================================================
+
+  void addPolySize( const cgsize_t            nbNodes,
+                    std::vector< cgsize_t >& elemData,
+                    std::vector< cgsize_t >& polyOffset )
+  {
+#if CGNS_VERSION < 4100
+    elemData.push_back( nbNodes );
+    polyOffset.clear(); // just avoid warning: unused parameter
+#else
+    polyOffset.push_back((cgsize_t) elemData.size() );
+    (void)nbNodes; // avoid warning: unused parameter
+#endif
+  }
+
 } // namespace
 
 //================================================================================
@@ -248,6 +267,9 @@ Driver_Mesh::Status DriverCGNS_Write::Perform()
   if ( !myMesh || myMesh->GetMeshInfo().NbElements() < 1 )
     return addMessage( !myMesh ? "NULL mesh" : "Empty mesh (no elements)", /*fatal = */true );
 
+  if ( Driver_Mesh::IsMeshTooLarge< cgsize_t >( myMesh, /*checkIDs =*/ false))
+    return DRS_TOO_LARGE_MESH;
+
   // open the file
   if ( cg_open(myFile.c_str(), CG_MODE_MODIFY, &_fn) != CG_OK &&
        cg_open(myFile.c_str(), CG_MODE_WRITE,  &_fn) != CG_OK )
@@ -276,13 +298,15 @@ Driver_Mesh::Status DriverCGNS_Write::Perform()
   // create a Zone
   // --------------
 
-  int nbCells = myMesh->NbEdges();
+  smIdType nbCells = myMesh->NbEdges();
   if ( meshDim == 3 )
     nbCells = myMesh->NbVolumes();
   else if ( meshDim == 2 )
     nbCells = myMesh->NbFaces();
 
-  cgsize_t size[9] = { myMesh->NbNodes(), nbCells, /*NBoundVertex=*/0, 0,0,0,0,0,0 };
+  cgsize_t size[9] = { FromSmIdType<cgsize_t>( myMesh->NbNodes() ),
+                       FromSmIdType<cgsize_t>( nbCells ),
+                       /*NBoundVertex=*/0, 0,0,0,0,0,0 };
   int iZone;
   if ( cg_zone_write( _fn, iBase, "SMESH_Mesh", size,
                       CGNS_ENUMV( Unstructured ), &iZone) != CG_OK )
@@ -335,7 +359,7 @@ Driver_Mesh::Status DriverCGNS_Write::Perform()
 
   // write into a section all successive elements of one geom type
   int iSec;
-  vector< cgsize_t > elemData;
+  vector< cgsize_t > elemData, polyOffset;
   SMDS_ElemIteratorPtr elemIt = myMesh->elementsIterator();
   vector< SMDS_ElemIteratorPtr > elemItVec;
   if ( _elementsByType )
@@ -384,7 +408,7 @@ Driver_Mesh::Status DriverCGNS_Write::Perform()
     else if ( elemType == SMDSEntity_Polygon ) // POLYGONS
       do
       {
-        elemData.push_back( elem->NbNodes() );
+        addPolySize( elem->NbNodes(), elemData, polyOffset );
         for ( int i = 0, nb = elem->NbNodes(); i < nb; ++i )
           elemData.push_back( cgnsID( elem->GetNode(i), n2cgID ));
         if ( elem->GetID() != cgID )
@@ -397,7 +421,7 @@ Driver_Mesh::Status DriverCGNS_Write::Perform()
     else if ( elemType == SMDSEntity_Quad_Polygon ) // QUADRATIC POLYGONS
       do // write as linear NGON_n
       {
-        elemData.push_back( elem->NbNodes() );
+        addPolySize( elem->NbNodes(), elemData, polyOffset );
         interlace = & SMDS_MeshCell::interlacedSmdsOrder( SMDSEntity_Quad_Polygon,
                                                           elem->NbNodes() )[0];
         for ( int i = 0, nb = elem->NbNodes(); i < nb; ++i )
@@ -433,10 +457,24 @@ Driver_Mesh::Status DriverCGNS_Write::Perform()
     SMESH_Comment sectionName( cg_ElementTypeName( cgType ));
     sectionName << " " << startID << " - " << cgID-1;
 
-    if ( cg_section_write(_fn, iBase, iZone, sectionName.c_str(), cgType, startID,
-                          cgID-1, /*nbndry=*/0, &elemData[0], &iSec) != CG_OK )
-      return addMessage( cg_get_error(), /*fatal = */true );
-  }
+
+#if CGNS_VERSION >= 4000
+    if ( !polyOffset.empty() )
+    {
+      polyOffset.push_back((cgsize_t) elemData.size() );
+      if ( cg_poly_section_write(_fn, iBase, iZone, sectionName.c_str(), cgType, startID,
+                                 cgID-1, /*nbndry=*/0,
+                                 elemData.data(), polyOffset.data(), &iSec) != CG_OK )
+        return addMessage( cg_get_error(), /*fatal = */true );
+    }
+    else
+#endif
+    {
+      if ( cg_section_write(_fn, iBase, iZone, sectionName.c_str(), cgType, startID,
+                            cgID-1, /*nbndry=*/0, elemData.data(), &iSec) != CG_OK )
+        return addMessage( cg_get_error(), /*fatal = */true );
+    }
+  } // while ( elem )
 
   // Write polyhedral volumes
   // -------------------------
@@ -450,11 +488,13 @@ Driver_Mesh::Status DriverCGNS_Write::Perform()
     set< TPolyhedFace > faces;
     set< TPolyhedFace >::iterator faceInSet;
     vector<const SMDS_MeshNode *> faceNodesVec;
+    vector< cgsize_t > faceOffset;
     int nbPolygones = 0, faceID;
 
     SMDS_VolumeTool vol;
 
     elemData.clear();
+    polyOffset.clear();
 
     int nbPolyhTreated = 0;
 
@@ -473,7 +513,7 @@ Driver_Mesh::Status DriverCGNS_Write::Perform()
         vol.Set( elem );
         vol.SetExternalNormal();
         const int nbFaces = vol.NbFaces();
-        elemData.push_back( nbFaces );
+        addPolySize( nbFaces, elemData, polyOffset );
         for ( int iF = 0; iF < nbFaces; ++iF )
         {
           const int nbNodes = vol.NbFaceNodes( iF );
@@ -489,7 +529,7 @@ Driver_Mesh::Status DriverCGNS_Write::Perform()
             // the face is not shared by volumes
             faceID = cgID++;
             ++nbPolygones;
-            faceData.push_back( nbNodes );
+            addPolySize( nbNodes, faceData, faceOffset );
             for ( int i = 0; i < nbNodes; ++i )
               faceData.push_back( cgnsID( faceNodes[i], n2cgID ));
           }
@@ -501,7 +541,7 @@ Driver_Mesh::Status DriverCGNS_Write::Perform()
             {
               faceID = cgID++;
               ++nbPolygones;
-              faceData.push_back( nbNodes );
+              addPolySize( nbNodes, faceData, faceOffset );
               for ( int i = 0; i < nbNodes; ++i )
                 faceData.push_back( cgnsID( faceNodes[i], n2cgID ));
             }
@@ -518,18 +558,35 @@ Driver_Mesh::Status DriverCGNS_Write::Perform()
       }
     }
 
+#if CGNS_VERSION >= 4000
+    if ( nbPolygones > 0 )
+    {
+      faceOffset.push_back((cgsize_t) faceData.size() );
+      if ( cg_poly_section_write(_fn, iBase, iZone, "Faces of Polyhedrons", CGNS_ENUMV( NGON_n ),
+                                 cgID - nbPolygones, cgID-1, /*nbndry=*/0,
+                                 faceData.data(), faceOffset.data(), &iSec) != CG_OK )
+        return addMessage( cg_get_error(), /*fatal = */true );
+    }
+
+    polyOffset.push_back((cgsize_t) elemData.size() );
+    if ( cg_poly_section_write(_fn, iBase, iZone, "Polyhedrons",
+                               CGNS_ENUMV( NFACE_n ), cgID, cgID+nbPolyhTreated-1,
+                               /*nbndry=*/0, &elemData[0], polyOffset.data(), &iSec) != CG_OK )
+      return addMessage( cg_get_error(), /*fatal = */true );
+#else
     if ( nbPolygones > 0 )
     {
       if ( cg_section_write(_fn, iBase, iZone, "Faces of Polyhedrons",
-                             CGNS_ENUMV( NGON_n ), cgID - nbPolygones, cgID-1,
-                             /*nbndry=*/0, &faceData[0], &iSec) != CG_OK )
+                            CGNS_ENUMV( NGON_n ), cgID - nbPolygones, cgID-1,
+                            /*nbndry=*/0, &faceData[0], &iSec) != CG_OK )
         return addMessage( cg_get_error(), /*fatal = */true );
     }
-    
-    if ( cg_section_write(_fn, iBase, iZone, "Polyhedrons", 
-                             CGNS_ENUMV( NFACE_n ), cgID, cgID+nbPolyhTreated-1,
-                           /*nbndry=*/0, &elemData[0], &iSec) != CG_OK )
+
+    if ( cg_section_write(_fn, iBase, iZone, "Polyhedrons",
+                          CGNS_ENUMV( NFACE_n ), cgID, cgID+nbPolyhTreated-1,
+                          /*nbndry=*/0, &elemData[0], &iSec) != CG_OK )
       return addMessage( cg_get_error(), /*fatal = */true );
+#endif
 
     if ( !myMesh->GetGroups().empty() )
     {
index 6000b58ee202b90f1c7af8881c667e68b3ac8d34..0530a34e03289d0be5ad0cc9bcf5363cb017015a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 39d7250caa0d1d51f9d9c7ae3ce0ab6d6d596567..3f49b837dce738cfa11ce02df724d38b5126bece 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 9a018682b623edb59f19116bbe1a377496c656bb..c8cb8285fff072deefd59d8760c5dc4d19c41878 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index da022e6386ef1658149efaefe607ef8da81eaf84..9b2e67e7c2652bdc9cc0361d16fed986ee97b4a2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -76,7 +76,7 @@ Driver_Mesh::Status DriverDAT_R_SMDS_Mesh::Perform()
     myMesh->AddNodeWithID(coordX, coordY, coordZ, intNumPoint);
   }
   
-  fprintf(stdout, "%d noeuds\n", myMesh->NbNodes());
+  fprintf(stdout, "%ld noeuds\n", static_cast< long >( myMesh->NbNodes() ));
   /****************************************************************************
    *                       LECTURE DES ELEMENTS                                *
    ****************************************************************************/
index 48c9a66a539fc6f58ca094afa5b068f9a371878a..f9a00256aabb384617f456be9b884cd917e5cd06 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 3440ee09a3e0e192475a6dff13d401e92550e46b..0de907c80e39722e1da9bb6a04163ef3cd7d739b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 
 using namespace std;
 
+//================================================================================
+/*!
+ * \brief Write mesh data to a file
+ *  \param [in] renumber - if true, renumber nodes and cell starting from 1
+ *  \return Driver_Mesh::Status - Ok or not
+ */
+//================================================================================
+
 Driver_Mesh::Status DriverDAT_W_SMDS_Mesh::Perform()
 {
   Kernel_Utils::Localizer loc;
   Status aResult = DRS_OK;
 
-  int nbNodes, nbCells;
+  smIdType nbNodes, nbCells;
 #if defined(WIN32) && defined(UNICODE)
   std::wstring file2Read = Kernel_Utils::utf8_decode_s(myFile);
   FILE* aFileId = _wfopen(file2Read.c_str(), L"w+");
@@ -60,7 +68,7 @@ Driver_Mesh::Status DriverDAT_W_SMDS_Mesh::Perform()
   nbNodes = myMesh->NbNodes();
 
   /* Combien de mailles, faces ou aretes ? */
-  int nb_of_edges, nb_of_faces, nb_of_volumes;
+  smIdType nb_of_edges, nb_of_faces, nb_of_volumes;
   nb_of_edges = myMesh->NbEdges();
   nb_of_faces = myMesh->NbFaces();
   nb_of_volumes = myMesh->NbVolumes();
@@ -70,21 +78,24 @@ Driver_Mesh::Status DriverDAT_W_SMDS_Mesh::Perform()
   SCRUTE(nb_of_volumes);
 
   //fprintf(stdout, "%d %d\n", nbNodes, nbCells);
-  fprintf(aFileId, "%d %d\n", nbNodes, nbCells);
+  fprintf(aFileId, "%ld %ld\n", static_cast< long >( nbNodes ), static_cast< long >( nbCells ));
 
   /****************************************************************************
    *                       ECRITURE DES NOEUDS                                 *
    ****************************************************************************/
 
   std::vector< size_t > nodeNumByID;
-  if ( myMesh->HasNumerationHoles() )
+  if ( myRenumber && myMesh->HasNumerationHoles() )
     nodeNumByID.resize( myMesh->MaxNodeID() + 1 );
 
-  int num;
+  smIdType num;
   SMDS_NodeIteratorPtr itNodes=myMesh->nodesIterator();
   for ( num = 1; itNodes->more(); ++num )
   {
     const SMDS_MeshNode * node = itNodes->next();
+    if ( !myRenumber )
+      num = node->GetID();
+
     fprintf(aFileId, "%d %.14e %.14e %.14e\n", num, node->X(), node->Y(), node->Z());
 
     if ( !nodeNumByID.empty() )
@@ -100,14 +111,17 @@ Driver_Mesh::Status DriverDAT_W_SMDS_Mesh::Perform()
   for ( SMDS_EdgeIteratorPtr itEdges = myMesh->edgesIterator(); itEdges->more(); ++num )
   {
     const SMDS_MeshElement * elem = itEdges->next();
+    if ( !myRenumber )
+      num = elem->GetID();
+
     fprintf(aFileId, "%d %d ", num, 100 + elem->NbNodes());
 
     for ( SMDS_ElemIteratorPtr it = elem->nodesIterator(); it->more(); )
     {
-      int nodeID = it->next()->GetID();
+      smIdType nodeID = it->next()->GetID();
       if ( !nodeNumByID.empty() )
         nodeID = nodeNumByID[ nodeID ];
-      fprintf(aFileId, "%d ", nodeID );
+      fprintf(aFileId, "%ld ", static_cast< long >( nodeID ));
     }
     fprintf(aFileId, "\n");
   }
@@ -115,15 +129,17 @@ Driver_Mesh::Status DriverDAT_W_SMDS_Mesh::Perform()
   for ( SMDS_FaceIteratorPtr itFaces = myMesh->facesIterator(); itFaces->more(); ++num )
   {
     const SMDS_MeshElement * elem = itFaces->next();
+    if ( !myRenumber )
+      num = elem->GetID();
 
     fprintf(aFileId, "%d %d ", num, (elem->IsPoly() ? 400 : 200 ) + elem->NbNodes() );
 
     for( SMDS_ElemIteratorPtr it = elem->nodesIterator(); it->more(); )
     {
-      int nodeID = it->next()->GetID();
+      smIdType nodeID = it->next()->GetID();
       if ( !nodeNumByID.empty() )
         nodeID = nodeNumByID[ nodeID ];
-      fprintf(aFileId, "%d ", nodeID );
+      fprintf(aFileId, "%ld ", static_cast< long >( nodeID ));
     }
     fprintf(aFileId, "\n");
   }
@@ -133,6 +149,9 @@ Driver_Mesh::Status DriverDAT_W_SMDS_Mesh::Perform()
   for ( SMDS_VolumeIteratorPtr itVolumes=myMesh->volumesIterator(); itVolumes->more(); ++num )
   {
     const SMDS_MeshElement * elem = itVolumes->next();
+    if ( !myRenumber )
+      num = elem->GetID();
+
     if ( elem->IsPoly() )
     {
       fprintf(aFileId, "%d %d ", num, 500 + elem->NbNodes());
@@ -155,10 +174,10 @@ Driver_Mesh::Status DriverDAT_W_SMDS_Mesh::Perform()
 
     for( SMDS_ElemIteratorPtr it = elem->nodesIterator(); it->more(); )
     {
-      int nodeID = it->next()->GetID();
+      smIdType nodeID = it->next()->GetID();
       if ( !nodeNumByID.empty() )
         nodeID = nodeNumByID[ nodeID ];
-      fprintf(aFileId, "%d ", nodeID );
+      fprintf(aFileId, "%ld ", static_cast< long >( nodeID ));
     }
 
     fprintf(aFileId, "\n");
index aa88e9f177e4bbe1b687b7ca9aef9ebcb01c6196..0207c721e8ad509d5db7aed511de133ede5c1eaa 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 class MESHDRIVERDAT_EXPORT DriverDAT_W_SMDS_Mesh: public Driver_SMDS_Mesh
 {
  public:
-  virtual Status Perform();
+  virtual Status Perform() override;
+  void           SetRenumber(  bool renumber ) { myRenumber = renumber; }
+
+ private:
+
+  bool myRenumber;
 };
 
 #endif
index a4645d525bc30ca604174d41c39328325e25cbec..592b529ed50c1da2cce66e98af553723dd7d6cf0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 2562f4f4950c4a4a32ce7fe1a2f38a16a804c5d9..30b1f3da4a89d350f716c3ce0abc82df9cf1c249 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index b6deb9e3c3c70980dd61b2a93e04f1b3d23dfe38..84d4f3a2f5b2e26f363e18ee15e57bfed1423ac6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 6841dbdb0736d9747316c739d25712911d335ef1..ab9ee32cf527306075ddabc826471015f8b1b7ec 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 9ce4ff94dddb6819299afb7f19d63eab3d083519..9e654ea18e0be317688fe32bfce07dbf8ab2a0a8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -89,7 +89,7 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
 
   int ref;
 
-  const int nodeIDShift = myMesh->GetMeshInfo().NbNodes();
+  const smIdType nodeIDShift = myMesh->GetMeshInfo().NbNodes();
   if ( version != GmfFloat )
   {
     double x, y, z;
@@ -114,7 +114,7 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
   int iN[28]; // 28 - nb nodes in HEX27 (+ 1 for safety :)
 
   /* Read edges */
-  const int edgeIDShift = myMesh->GetMeshInfo().NbElements();
+  const smIdType edgeIDShift = myMesh->GetMeshInfo().NbElements();
   if ( int nbEdges = GmfStatKwd(meshID, GmfEdges))
   {
     // read extra vertices for quadratic edges
@@ -150,7 +150,7 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
   }
 
   /* Read triangles */
-  const int triaIDShift = myMesh->GetMeshInfo().NbElements();
+  const smIdType triaIDShift = myMesh->GetMeshInfo().NbElements();
   if ( int nbTria = GmfStatKwd(meshID, GmfTriangles))
   {
     // read extra vertices for quadratic triangles
@@ -194,7 +194,7 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
   }
 
   /* Read quadrangles */
-  const int quadIDShift = myMesh->GetMeshInfo().NbElements();
+  const smIdType quadIDShift = myMesh->GetMeshInfo().NbElements();
   if ( int nbQuad = GmfStatKwd(meshID, GmfQuadrilaterals))
   {
     // read extra vertices for quadratic quadrangles
@@ -248,7 +248,7 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
   }
 
   /* Read terahedra */
-  const int tetIDShift = myMesh->GetMeshInfo().NbElements();
+  const smIdType tetIDShift = myMesh->GetMeshInfo().NbElements();
   if ( int nbTet = GmfStatKwd( meshID, GmfTetrahedra ))
   {
     // read extra vertices for quadratic tetrahedra
@@ -273,14 +273,14 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
     for ( int i = 1; i <= nbTet; ++i )
     {
       GmfGetLin(meshID, GmfTetrahedra, &iN[0], &iN[1], &iN[2], &iN[3], &ref);
-      std::vector<int>& midN = quadNodesAtTetrahedra[ i ];  
+      std::vector<int>& midN = quadNodesAtTetrahedra[ i ];
       if ( midN.size() >= 10-4 ) // TETRA10
       {
-        if ( !myMesh->AddVolumeWithID( iN[0], iN[2], iN[1], iN[3], 
+        if ( !myMesh->AddVolumeWithID( iN[0], iN[2], iN[1], iN[3],
                                        midN[2], midN[1], midN[0], midN[3], midN[5], midN[4],
                                        tetIDShift + i ))
           status = storeBadNodeIds( "GmfTetrahedra + GmfExtraVerticesAtTetrahedra",i, 10,
-                                    iN[0], iN[2], iN[1], iN[3], 
+                                    iN[0], iN[2], iN[1], iN[3],
                                     midN[2], midN[1], midN[0], midN[3], midN[5], midN[4] );
       }
       else // TETRA4
@@ -293,7 +293,7 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
   }
 
   /* Read pyramids */
-  const int pyrIDShift = myMesh->GetMeshInfo().NbElements();
+  const smIdType pyrIDShift = myMesh->GetMeshInfo().NbElements();
   if ( int nbPyr = GmfStatKwd(meshID, GmfPyramids))
   {
     GmfGotoKwd(meshID, GmfPyramids);
@@ -306,7 +306,7 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
   }
 
   /* Read hexahedra */
-  const int hexIDShift = myMesh->GetMeshInfo().NbElements();
+  const smIdType hexIDShift = myMesh->GetMeshInfo().NbElements();
   if ( int nbHex = GmfStatKwd(meshID, GmfHexahedra))
   {
     // read extra vertices for quadratic hexahedra
@@ -321,7 +321,7 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
                   &iN[6], &iN[7], &iN[8], &iN[9],
                   &iN[10], &iN[11], &iN[12], &iN[13], // HEXA20
                   &iN[14],
-                  &iN[15], &iN[16], &iN[17], &iN[18], 
+                  &iN[15], &iN[16], &iN[17], &iN[18],
                   &iN[19],
                   &iN[20]);                          // HEXA27
         if ( iN[0] <= nbHex )
@@ -347,7 +347,7 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
                                        midN[7], midN[6], midN[5], midN[4],
                                        midN[8], midN[11], midN[10], midN[9],
                                        hexIDShift + i ))
-          status = storeBadNodeIds( "GmfHexahedra + GmfExtraVerticesAtHexahedra",i, 20, 
+          status = storeBadNodeIds( "GmfHexahedra + GmfExtraVerticesAtHexahedra",i, 20,
                                     iN[0], iN[3], iN[2], iN[1],
                                     iN[4], iN[7], iN[6], iN[5],
                                     midN[3], midN[2], midN[1], midN[0],
@@ -366,7 +366,7 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
                                        midN[17],
                                        midN[18],
                                        hexIDShift + i ))
-          status = storeBadNodeIds( "GmfHexahedra + GmfExtraVerticesAtHexahedra",i, 27, 
+          status = storeBadNodeIds( "GmfHexahedra + GmfExtraVerticesAtHexahedra",i, 27,
                                     iN[0], iN[3], iN[2], iN[1],
                                     iN[4], iN[7], iN[6], iN[5],
                                     midN[3], midN[2], midN[1], midN[0],
@@ -389,7 +389,7 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
   }
 
   /* Read prism */
-  const int prismIDShift = myMesh->GetMeshInfo().NbElements();
+  const smIdType prismIDShift = myMesh->GetMeshInfo().NbElements();
   if ( int nbPrism = GmfStatKwd(meshID, GmfPrisms))
   {
     GmfGotoKwd(meshID, GmfPrisms);
@@ -405,33 +405,33 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
   // Read some entities into groups
   // see MeshGems/Docs/meshgems_formats_description.pdf
 
-    // get ids of existing groups
-    std::set< int > groupIDs;
-    const std::set<SMESHDS_GroupBase*>&          groups = myMesh->GetGroups();
-    std::set<SMESHDS_GroupBase*>::const_iterator grIter = groups.begin();
-    for ( ; grIter != groups.end(); ++grIter )
-      groupIDs.insert( (*grIter)->GetID() );
-    if ( groupIDs.empty() ) groupIDs.insert( 0 );
+  // get ids of existing groups
+  std::set< int > groupIDs;
+  const std::set<SMESHDS_GroupBase*>&          groups = myMesh->GetGroups();
+  std::set<SMESHDS_GroupBase*>::const_iterator grIter = groups.begin();
+  for ( ; grIter != groups.end(); ++grIter )
+    groupIDs.insert( (*grIter)->GetID() );
+  if ( groupIDs.empty() ) groupIDs.insert( 0 );
 
   // Read required entities into groups
   if ( _makeRequiredGroups )
   {
 
-    const int kes[4][3] = { { GmfRequiredVertices,      SMDSAbs_Node, nodeIDShift },
-                            { GmfRequiredEdges,         SMDSAbs_Edge, edgeIDShift },
-                            { GmfRequiredTriangles,     SMDSAbs_Face, triaIDShift },
-                            { GmfRequiredQuadrilaterals,SMDSAbs_Face, quadIDShift }
-                          };
+    const smIdType kes[4][3] = { { GmfRequiredVertices,      SMDSAbs_Node, nodeIDShift },
+                                 { GmfRequiredEdges,         SMDSAbs_Edge, edgeIDShift },
+                                 { GmfRequiredTriangles,     SMDSAbs_Face, triaIDShift },
+                                 { GmfRequiredQuadrilaterals,SMDSAbs_Face, quadIDShift }
+    };
     const char* names[4] = { "_required_Vertices"      ,
                              "_required_Edges"         ,
                              "_required_Triangles"     ,
-                             "_required_Quadrilaterals" 
-                           };
+                             "_required_Quadrilaterals"
+    };
     for ( int i = 0; i < 4; ++i )
     {
-      int                 gmfKwd = kes[i][0];
+      int                 gmfKwd = FromSmIdType<int>( kes[i][0] );
       SMDSAbs_ElementType entity = (SMDSAbs_ElementType) kes[i][1];
-      int                 shift  = kes[i][2];
+      smIdType            shift  = kes[i][2];
       if ( int nb = GmfStatKwd(meshID, gmfKwd))
       {
         const int newID = *groupIDs.rbegin() + 1;
@@ -454,27 +454,27 @@ Driver_Mesh::Status DriverGMF_Read::Perform()
   if ( _makeFaultGroups )
   {
 
-    const int kes[7][3] = { { GmfFault_SmallTri,     SMDSAbs_Face, triaIDShift },
-                            { GmfFault_BadShape,     SMDSAbs_Face, triaIDShift },
-                            { GmfFault_Overlap,      SMDSAbs_Face, triaIDShift },
-                            { GmfFault_Inter,        SMDSAbs_Face, triaIDShift },
-                            { GmfFault_NearTri,      SMDSAbs_Face, triaIDShift },
-                            { GmfFault_FreeEdge,     SMDSAbs_Face, triaIDShift },
-                            { GmfFault_MultipleEdge, SMDSAbs_Face, triaIDShift }
-                          };
+    const smIdType kes[7][3] = { { GmfFault_SmallTri,     SMDSAbs_Face, triaIDShift },
+                                 { GmfFault_BadShape,     SMDSAbs_Face, triaIDShift },
+                                 { GmfFault_Overlap,      SMDSAbs_Face, triaIDShift },
+                                 { GmfFault_Inter,        SMDSAbs_Face, triaIDShift },
+                                 { GmfFault_NearTri,      SMDSAbs_Face, triaIDShift },
+                                 { GmfFault_FreeEdge,     SMDSAbs_Face, triaIDShift },
+                                 { GmfFault_MultipleEdge, SMDSAbs_Face, triaIDShift }
+    };
     const char* names[7] = { "Fault_SmallTri",
                              "Fault_BadShape",
                              "Fault_Overlap",
-                             "Fault_Inter", 
+                             "Fault_Inter",
                              "Fault_NearTri",
                              "Fault_FreeEdge",
                              "Fault_MultipleEdge"
-                           };
+    };
     for ( int i = 0; i < 7; ++i )
     {
-      int                 gmfKwd = kes[i][0];
+      int                 gmfKwd = FromSmIdType<int>( kes[i][0] );
       SMDSAbs_ElementType entity = (SMDSAbs_ElementType) kes[i][1];
-      int                 shift  = kes[i][2];
+      smIdType            shift  = kes[i][2];
       if ( int nb = GmfStatKwd(meshID, gmfKwd))
       {
         const int newID = *groupIDs.rbegin() + 1;
@@ -537,3 +537,37 @@ Driver_Mesh::Status DriverGMF_Read::storeBadNodeIds(const char* gmfKwd, int elem
   }
   return DRS_OK;
 }
+
+//================================================================================
+/*!
+ * \brief Return number of mesh entities in a file
+ */
+//================================================================================
+
+bool DriverGMF_Read::GetMeshInfo(smIdType & nbNodes,
+                                 smIdType & nbEdges,
+                                 smIdType & nbFaces,
+                                 smIdType & nbVols)
+{
+  nbNodes = nbEdges = nbFaces = nbVols = 0;
+
+  Kernel_Utils::Localizer loc;
+
+  int dim, version;
+  int meshID = GmfOpenMesh( myFile.c_str(), GmfRead, &version, &dim );
+  if ( !meshID )
+    return false;
+
+  DriverGMF::MeshCloser aMeshCloser( meshID ); // An object closing GMF mesh at destruction
+
+  nbNodes =   GmfStatKwd(meshID, GmfVertices       );
+  nbEdges =   GmfStatKwd(meshID, GmfEdges          );
+  nbFaces = ( GmfStatKwd(meshID, GmfTriangles      ) +
+              GmfStatKwd(meshID, GmfQuadrilaterals ));
+  nbVols  = ( GmfStatKwd(meshID, GmfTetrahedra     ) +
+              GmfStatKwd(meshID, GmfPyramids       ) +
+              GmfStatKwd(meshID, GmfHexahedra      ) +
+              GmfStatKwd(meshID, GmfPrisms         ));
+
+  return true;
+}
index fbcb3c871ec40764ce6ab5c10659884a605817e7..81f7cc4a355f704ef97c4165268ebd6ba059887d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -57,6 +57,11 @@ public:
 
   virtual Status Perform();
 
+  bool GetMeshInfo(smIdType & nbVertex,
+                   smIdType & nbEdge,
+                   smIdType & nbFace,
+                   smIdType & nbVol);
+
  private:
 
   Status storeBadNodeIds(const char* gmfKwd, int elemNb, int nb, ...);
index 510585a5634f7c597243284b357d5506b38290e4..1877f42b57799c29d034e45121c7cad1b10a876c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -57,8 +57,8 @@ extern "C"
   elemIt = elementIterator( SMDSGeom );                                 \
   if ( elemIt->more() )                                                 \
   {                                                                     \
-  int totalNbElems  = myMesh->GetMeshInfo().NbElements( SMDSGeom );     \
-  int nbLinearElems = myMesh->GetMeshInfo().NbElements( LinType );      \
+  smIdType totalNbElems  = myMesh->GetMeshInfo().NbElements( SMDSGeom );\
+  smIdType nbLinearElems = myMesh->GetMeshInfo().NbElements( LinType ); \
   if ( totalNbElems - nbLinearElems > 0 )                               \
   {                                                                     \
   GmfSetKwd(meshID, GmfKwd, totalNbElems - nbLinearElems);              \
@@ -100,6 +100,9 @@ Driver_Mesh::Status DriverGMF_Write::Perform()
 {
   Kernel_Utils::Localizer loc;
 
+  if ( Driver_Mesh::IsMeshTooLarge< int >( myMesh, /*checkIDs =*/ false))
+    return DRS_TOO_LARGE_MESH;
+
   const int dim = 3, version = sizeof(double) < 8 ? 1 : 2;
 
   int meshID = GmfOpenMesh( myFile.c_str(), GmfWrite, version, dim );
@@ -115,7 +118,7 @@ Driver_Mesh::Status DriverGMF_Write::Perform()
 
   // nodes
   std::map< const SMDS_MeshNode* , int > node2IdMap;
-  int iN = 0, nbNodes = myMesh->NbNodes();
+  smIdType iN = 0, nbNodes = myMesh->NbNodes();
   GmfSetKwd( meshID, GmfVertices, nbNodes );
   double xyz[3];
   SMDS_NodeIteratorPtr nodeIt = myMesh->nodesIterator();
index f27e821c914d2c41ccf957a4de7d7f98a05011e8..db121f945819b981418f5d1e9c0fbc3b2fa4b014 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 3d8b14f42ca53f2363c62276927501128e75a0c2..dee167c234c7fa1f0e9f24840b4a760697a8e6ca 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 49ad5770dc53a9248943ed31d4534a02df9c5011..9a977d854e43ce1969c22fa772188b87139c262e 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -20,6 +20,7 @@
 # --- options ---
 # additional include directories
 INCLUDE_DIRECTORIES(
+  ${MEDCOUPLING_INCLUDE_DIRS}
   ${MEDFILE_INCLUDE_DIRS}
   ${HDF5_INCLUDE_DIRS}
   ${KERNEL_INCLUDE_DIRS}
index 0fba8b796dd0a2683a21d2768e44966ce2cfbf53..41968b6678dc7ee7eead07326b9084f6e774a712 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index c62787c724cbe0fde383ad6164bfeaa0774018a3..6e900151bbe25174b565ed7da835bf4f58321842 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -26,7 +26,6 @@
 //  Module : SMESH
 //
 #include "DriverMED_Family.h"
-#include "MED_Factory.hxx"
 
 #include <sstream>      
 
@@ -366,67 +365,6 @@ DriverMED_Family
   return aFamilies;
 }
 
-//=============================================================================
-/*!
- *  Create TFamilyInfo for this family
- */
-//=============================================================================
-MED::PFamilyInfo
-DriverMED_Family::GetFamilyInfo(const MED::PWrapper& theWrapper, 
-                                const MED::PMeshInfo& theMeshInfo) const
-{
-  ostringstream aStr;
-  aStr << "FAM_" << myId;
-  set<string>::const_iterator aGrIter = myGroupNames.begin();
-  for(; aGrIter != myGroupNames.end(); aGrIter++){
-    aStr << "_" << *aGrIter;
-  }
-  string aValue = aStr.str();
-  // PAL19785,0019867 - med forbids whitespace to be the last char in the name
-  int maxSize = MED::GetNOMLength();
-  int lastCharPos = min( maxSize, (int) aValue.size() ) - 1;
-  while ( isspace( aValue[ lastCharPos ] ))
-    aValue.resize( lastCharPos-- );
-
-  MED::PFamilyInfo anInfo;
-  if(myId == 0 || myGroupAttributVal == 0){
-    anInfo = theWrapper->CrFamilyInfo(theMeshInfo,
-                                      aValue,
-                                      myId,
-                                      myGroupNames);
-  }else{
-    MED::TStringVector anAttrDescs (1, "");  // 1 attribute with empty description,
-    MED::TIntVector anAttrIds (1, myId);        // Id=0,
-    MED::TIntVector anAttrVals (1, myGroupAttributVal);
-    anInfo = theWrapper->CrFamilyInfo(theMeshInfo,
-                                      aValue,
-                                      myId,
-                                      myGroupNames,
-                                      anAttrDescs,
-                                      anAttrIds,
-                                      anAttrVals);
-  }
-
-//  cout << endl;
-//  cout << "Groups: ";
-//  set<string>::iterator aGrIter = myGroupNames.begin();
-//  for (; aGrIter != myGroupNames.end(); aGrIter++)
-//  {
-//    cout << " " << *aGrIter;
-//  }
-//  cout << endl;
-//
-//  cout << "Elements: ";
-//  set<const SMDS_MeshElement *>::iterator anIter = myElements.begin();
-//  for (; anIter != myElements.end(); anIter++)
-//  {
-//    cout << " " << (*anIter)->GetID();
-//  }
-//  cout << endl;
-
-  return anInfo;
-}
-
 //=============================================================================
 /*!
  *  Initialize the tool by SMESHDS_GroupBase
index c5b1dba6d94d556691750512c7930fabd19dbdb1..e00f68581ffb3e14e097a72dda6a503c51f4f16e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -91,9 +91,10 @@ class MESHDRIVERMED_EXPORT DriverMED_Family
                 const bool doAllInGroups);
 
   //! Create TFamilyInfo for this family
+  template<class LowLevelWriter>
   MED::PFamilyInfo 
-  GetFamilyInfo (const MED::PWrapper& theWrapper, 
-                 const MED::PMeshInfo& theMeshInfo) const;
+  GetFamilyInfo(const LowLevelWriter& theWrapper, 
+                const MED::PMeshInfo& theMeshInfo) const;
 
   //! Returns elements of this family
   const ElementsSet& GetElements () const;
@@ -154,4 +155,70 @@ class MESHDRIVERMED_EXPORT DriverMED_Family
   ElemTypeSet         myTypes; // Issue 0020576
 };
 
+#include "MED_Factory.hxx"
+
+#include <set>
+#include <string>
+//=============================================================================
+/*!
+ *  Create TFamilyInfo for this family
+ */
+//=============================================================================
+template<class LowLevelWriter>
+MED::PFamilyInfo
+DriverMED_Family::GetFamilyInfo(const LowLevelWriter& theWrapper, 
+                                const MED::PMeshInfo& theMeshInfo) const
+{
+  std::ostringstream aStr;
+  aStr << "FAM_" << myId;
+  std::set<std::string>::const_iterator aGrIter = myGroupNames.begin();
+  for(; aGrIter != myGroupNames.end(); aGrIter++){
+    aStr << "_" << *aGrIter;
+  }
+  std::string aValue = aStr.str();
+  // PAL19785,0019867 - med forbids whitespace to be the last char in the name
+  int maxSize = MED::GetNOMLength();
+  int lastCharPos = std::min( maxSize, (int) aValue.size() ) - 1;
+  while ( isspace( aValue[ lastCharPos ] ))
+    aValue.resize( lastCharPos-- );
+
+  MED::PFamilyInfo anInfo;
+  if(myId == 0 || myGroupAttributVal == 0){
+    anInfo = theWrapper->CrFamilyInfo(theMeshInfo,
+                                      aValue,
+                                      myId,
+                                      myGroupNames);
+  }else{
+    MED::TStringVector anAttrDescs (1, "");  // 1 attribute with empty description,
+    MED::TIntVector anAttrIds (1, myId);        // Id=0,
+    MED::TIntVector anAttrVals (1, myGroupAttributVal);
+    anInfo = theWrapper->CrFamilyInfo(theMeshInfo,
+                                      aValue,
+                                      myId,
+                                      myGroupNames,
+                                      anAttrDescs,
+                                      anAttrIds,
+                                      anAttrVals);
+  }
+
+//  cout << endl;
+//  cout << "Groups: ";
+//  set<string>::iterator aGrIter = myGroupNames.begin();
+//  for (; aGrIter != myGroupNames.end(); aGrIter++)
+//  {
+//    cout << " " << *aGrIter;
+//  }
+//  cout << endl;
+//
+//  cout << "Elements: ";
+//  set<const SMDS_MeshElement *>::iterator anIter = myElements.begin();
+//  for (; anIter != myElements.end(); anIter++)
+//  {
+//    cout << " " << (*anIter)->GetID();
+//  }
+//  cout << endl;
+
+  return anInfo;
+}
+
 #endif
index e2b117cf632a855f5c619cae9716579c19356237..7c6807f9ad140efd5990aa8eaac0093c698972fb 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #include "MED_Utilities.hxx"
 
 #include <NCollection_Map.hxx>
+#include <smIdType.hxx>
 
 #include "utilities.h"
 
 //#include <stdlib.h>
 
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-//#define _DEXCEPT_
-#else
-static int MYDEBUG = 0;
-#endif
-
 #define _EDF_NODE_IDS_
 
 using namespace MED;
@@ -109,7 +103,7 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
   try {
 #endif
     myFamilies.clear();
-    if(MYDEBUG) MESSAGE("Perform - myFile : "<<myFile);
+    MESSAGE("Perform - myFile : "<<myFile);
     PWrapper aMed = CrWrapperR(myFile);
 
     aResult = DRS_EMPTY;
@@ -124,7 +118,7 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
       if (myMeshId != -1) aMeshName = SMESH_Comment( myMeshId );
       else                aMeshName = myMeshName;
 
-      if(MYDEBUG) MESSAGE("Perform - aMeshName : "<<aMeshName<<"; "<<aMeshInfo->GetName());
+      MESSAGE("Perform - aMeshName : "<<aMeshName<<"; "<<aMeshInfo->GetName());
       if ( aMeshName != aMeshInfo->GetName() ) continue;
       aResult = DRS_OK;
 
@@ -132,18 +126,18 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
       //------------------------------------------------
       TErr anErr;
       TInt aNbFams = aMed->GetNbFamilies(aMeshInfo);
-      if(MYDEBUG) MESSAGE("Read " << aNbFams << " families");
+      MESSAGE("Read " << aNbFams << " families");
       for (TInt iFam = 0; iFam < aNbFams; iFam++)
       {
         PFamilyInfo aFamilyInfo = aMed->GetPFamilyInfo(aMeshInfo,iFam+1,&anErr);
         if(anErr >= 0){
           TInt aFamId = aFamilyInfo->GetId();
-          if(MYDEBUG) MESSAGE("Family " << aFamId << " :");
+          MESSAGE("Family " << aFamId << " :");
 
           DriverMED_FamilyPtr aFamily (new DriverMED_Family);
 
           TInt aNbGrp = aFamilyInfo->GetNbGroup();
-          if(MYDEBUG) MESSAGE("belong to " << aNbGrp << " groups");
+          MESSAGE("belong to " << aNbGrp << " groups");
           bool isAttrOk = false;
           if(aFamilyInfo->GetNbAttr() == aNbGrp)
             isAttrOk = true;
@@ -154,7 +148,7 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
               TInt anAttrVal = aFamilyInfo->GetAttrVal(iGr);
               aFamily->SetGroupAttributVal(anAttrVal);
             }
-            if(MYDEBUG) MESSAGE(aGroupName);
+            MESSAGE(aGroupName);
             if ( strncmp( aGroupName.c_str(), NIG_GROUP_PREFIX, strlen(NIG_GROUP_PREFIX) ) != 0 )
               aFamily->AddGroupName( fixUTF8( aGroupName ));
           }
@@ -181,7 +175,7 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
 
       EBooleen anIsNodeNum = aNodeInfo->IsElemNum();
       TInt aNbElems = aNodeInfo->GetNbElem();
-      if(MYDEBUG) MESSAGE("Perform - aNodeInfo->GetNbElem() = "<<aNbElems<<"; anIsNodeNum = "<<anIsNodeNum);
+      MESSAGE("Perform - aNodeInfo->GetNbElem() = "<<aNbElems<<"; anIsNodeNum = "<<anIsNodeNum);
       DriverMED_FamilyPtr aFamily;
       for ( TInt iElem = 0; iElem < aNbElems; iElem++ )
       {
@@ -225,7 +219,7 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
 
       // Reading pre information about all MED cells
       //--------------------------------------------
-      typedef MED::TVector<int> TNodeIds;
+      typedef MED::TVector<smIdType> TNodeIds;
       bool takeNumbers = true;  // initially we trust the numbers from file
       MED::TEntityInfo aEntityInfo = aMed->GetEntityInfo(aMeshInfo, eNOD);
       MED::TEntityInfo::iterator anEntityIter = aEntityInfo.begin();
@@ -269,7 +263,7 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
               aNodeIds.assign( aBallInfo->myConn->begin(), aBallInfo->myConn->end());
 
             // allocate array of diameters
-            vtkIdType maxID = myMesh->MaxElementID() + aNbBalls;
+            vtkIdType maxID = FromSmIdType<vtkIdType>(myMesh->MaxElementID() + aNbBalls);
             if ( anIsElemNum && !aBallInfo->myElemNum->empty() )
               maxID = *std::max_element( aBallInfo->myElemNum->begin(),
                                          aBallInfo->myElemNum->end() );
@@ -318,7 +312,7 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
             EBooleen anIsElemNum = takeNumbers ? aPolygoneInfo->IsElemNum() : eFAUX;
 
             typedef SMDS_MeshFace* (SMESHDS_Mesh::* FAddPolyWithID)
-              (const std::vector<int> & nodes_ids, const int ID);
+              (const std::vector<smIdType> & nodes_ids, const smIdType ID);
             typedef SMDS_MeshFace* (SMESHDS_Mesh::* FAddPolygon)
               (const std::vector<const SMDS_MeshNode*> & nodes);
 
@@ -355,7 +349,7 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
 #endif
                 if ( anIsElemNum ) {
                   TInt anElemId = aPolygoneInfo->GetElemNum( iElem );
-                  anElement = (myMesh->*addPolyWithID)( aNodeIds, anElemId );
+                  anElement = (myMesh->*addPolyWithID)( aNodeIds, ToSmIdType(anElemId) );
                 }
                 if ( !anElement ) {
                   aNodes.resize( aNbConn );
@@ -436,7 +430,7 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
 #endif
                 if(anIsElemNum){
                   TInt anElemId = aPolyedreInfo->GetElemNum(iElem);
-                  anElement = myMesh->AddPolyhedralVolumeWithID(aNodeIds,aQuantities,anElemId);
+                  anElement = myMesh->AddPolyhedralVolumeWithID(aNodeIds,aQuantities,ToSmIdType(anElemId));
                 }
                 if(!anElement){
                   vector<const SMDS_MeshNode*> aNodes(aNbNodes);
@@ -474,8 +468,8 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
             PCellInfo aCellInfo = aMed->GetPCellInfo(aMeshInfo,anEntity,aGeom);
             EBooleen anIsElemNum = takeNumbers ? aCellInfo->IsElemNum() : eFAUX;
             TInt aNbElems = aCellInfo->GetNbElem();
-            if(MYDEBUG) MESSAGE("Perform - anEntity = "<<anEntity<<"; anIsElemNum = "<<anIsElemNum);
-            if(MYDEBUG) MESSAGE("Perform - aGeom = "<<aGeom<<"; aNbElems = "<<aNbElems);
+            MESSAGE("Perform - anEntity = "<<anEntity<<"; anIsElemNum = "<<anIsElemNum);
+            MESSAGE("Perform - aGeom = "<<aGeom<<"; aNbElems = "<<aNbElems);
 
             TInt aNbNodes = -1;
             switch(aGeom){
@@ -502,7 +496,7 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
             default:;
             }
             vector<TInt> aNodeIds(aNbNodes);
-            for ( int iElem = 0; iElem < aNbElems; iElem++ )
+            for ( TInt iElem = 0; iElem < aNbElems; iElem++ )
             {
               bool anIsValidConnect = false;
               TCConnSlice aConnSlice = aCellInfo->GetConnSlice(iElem);
@@ -1045,7 +1039,7 @@ Driver_Mesh::Status DriverMED_R_SMESHDS_Mesh::Perform()
     aResult = DRS_WARN_DESCENDING;
   }
 
-  if(MYDEBUG) MESSAGE("Perform - aResult status = "<<aResult);
+  MESSAGE("Perform - aResult status = "<<aResult);
   return aResult;
 }
 
@@ -1054,7 +1048,7 @@ list<string> DriverMED_R_SMESHDS_Mesh::GetMeshNames(Status& theStatus)
   list<string> aMeshNames;
 
   try {
-    if(MYDEBUG) MESSAGE("GetMeshNames - myFile : " << myFile);
+    MESSAGE("GetMeshNames - myFile : " << myFile);
     theStatus = DRS_OK;
     PWrapper aMed = CrWrapperR(myFile);
 
@@ -1131,7 +1125,7 @@ void DriverMED_R_SMESHDS_Mesh::GetGroup(SMESHDS_Group* theGroup)
   }
 
   const char* aGroupName = theGroup->GetStoreName();
-  if(MYDEBUG) MESSAGE("Get Group " << aGroupName);
+  MESSAGE("Get Group " << aGroupName);
 
   if (( famVecPtr = myGroups2FamiliesMap.ChangeSeek( aGroupName )))
   {
index 86817d3090ef1653ff0f0d63b89d329bc9b597d4..7913b61ca9a1eedc631e8cbf281db5151bbd6d24 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 9bf879f4c09589c5b5d8b37400f9195066946364..65c86a8607da770cc2d94dee824f42c7f4f71a11 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #include "DriverMED.hxx"
 #include "DriverMED_W_SMESHDS_Mesh.h"
 #include "MED_Factory.hxx"
+#include "MED_TFile.hxx"
 #include "MED_Utilities.hxx"
 #include "MED_Wrapper.hxx"
 #include "SMDS_IteratorOnIterators.hxx"
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_SetIterator.hxx"
 #include "SMESHDS_Mesh.hxx"
+#include "SMESH_TypeDefs.hxx"
 
 //================================================================================
 /*!
@@ -90,17 +92,17 @@ bool DriverMED_W_Field::Set(SMESHDS_Mesh *      mesh,
   }
 
   // find out "MED order" of elements - sort elements by geom type
-  int nbElems;
+  smIdType nbElems;
   if ( _nbElemsByGeom.empty() || _elemType != type )
   {
     _elemType = type;
     _nbElemsByGeom.resize( 1, std::make_pair( SMDSEntity_Last, 0 ));
 
     // count nb of elems of each geometry
-    for ( int iG = 0; iG < SMDSEntity_Last; ++iG )
+    SMDSAbs_EntityType geom = SMDSEntity_0D;
+    for ( ; geom < SMDSEntity_Last; SMESHUtils::Increment( geom ))
     {
-      SMDSAbs_EntityType  geom = (SMDSAbs_EntityType) iG;
-      SMDSAbs_ElementType    t = SMDS_MeshCell::ElemType( geom );
+      SMDSAbs_ElementType t = SMDS_MeshCell::ElemType( geom );
       if ( t != _elemType ) continue;
 
       nbElems = mesh->GetMeshInfo().NbElements( geom );
@@ -236,16 +238,8 @@ SMDS_ElemIteratorPtr DriverMED_W_Field::GetOrderedElems()
   return SMDS_ElemIteratorPtr( new TItIterator( iterVec ));
 }
 
-//================================================================================
-/*!
- * Writes a field to the file
- */
-//================================================================================
-
-Driver_Mesh::Status DriverMED_W_Field::Perform()
+Driver_Mesh::Status DriverMED_W_Field::PerformInternal(MED::PWrapper& medFile)
 {
-  if ( myFile.empty() )
-    return addMessage("File name not set", /*isFatal=*/true ); // 'fatal' means 'bug'
   if ( myMeshId < 0 && myMeshName.empty() )
     return addMessage("Mesh in file not specified", /*isFatal=*/true );
   if ( _nbElemsByGeom.size() < 2 )
@@ -253,11 +247,6 @@ Driver_Mesh::Status DriverMED_W_Field::Perform()
   if ( !myMesh )
     return addMessage("Supporting mesh not set", /*isFatal=*/true );
 
-  int version = -1, major, minor, release;
-  if ( MED::GetMEDVersion( myFile, major, minor, release ))
-    version = major * 10 + minor;
-
-  MED::PWrapper medFile = MED::CrWrapperW( myFile, version );
   MED::PMeshInfo meshInfo;
   if ( myMeshId > 0 )
   {
@@ -361,6 +350,44 @@ Driver_Mesh::Status DriverMED_W_Field::Perform()
   return DRS_OK;
 }
 
+/*!
+ * Writes a field to the file
+ */
+Driver_Mesh::Status DriverMED_W_Field::Perform()
+{
+  if ( myFile.empty() )
+    return addMessage("File name not set", /*isFatal=*/true ); // 'fatal' means 'bug'
+  int version = -1, major, minor, release;
+  if ( MED::GetMEDVersion( myFile, major, minor, release ))
+    version = major * 10 + minor;
+
+  MED::PWrapper medFile = MED::CrWrapperW( myFile, version );
+  return this->PerformInternal(medFile);
+}
+
+/*!
+ * Writes a field to a chunck of memory
+ */
+Driver_Mesh::Status DriverMED_W_Field_Mem::Perform()
+{
+  Driver_Mesh::Status status = Driver_Mesh::DRS_OK;
+  bool isClosed(false);
+  void *ptr(_data->getPointer());
+  std::size_t sz(_data->getNumberOfTuples());
+  _data->accessToMemArray().setSpecificDeallocator(nullptr);
+  _data->useArray(nullptr,false,MEDCoupling::DeallocType::C_DEALLOC,0,1);
+  {// let braces to flush (call of MED::PWrapper myMed destructor)
+    MED::TMemFile *tfileInst = new MED::TMemFile(&ptr,&sz,&isClosed);
+    MED::PWrapper myMed = MED::CrWrapperW(myFile, -1, tfileInst);
+    status = this->PerformInternal(myMed);
+  }
+  if(!isClosed)
+    EXCEPTION(std::runtime_error, "TFTMemFile destructor : on destruction file has not been closed properly -> chunk of memory data may be invalid !");
+  _data = MEDCoupling::DataArrayByte::New();
+  _data->useArray(reinterpret_cast<char *>(ptr),true,MEDCoupling::DeallocType::C_DEALLOC,sz,1);
+  return status;
+}
+
 namespace DriverMED // Implementation of functions declared in DriverMED.hxx
 {
   //================================================================================
index 8c03aa11e88de160973207bf587780e30bf83cbc..6e3e536867e1c469596d72f3f6b6fe7231e870ac 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -31,6 +31,7 @@
 #include "Driver_SMESHDS_Mesh.h"
 #include "SMDSAbs_ElementType.hxx"
 #include "SMDS_ElemIterator.hxx"
+#include "MED_Common.hxx"
 
 #include <string>
 #include <vector>
@@ -64,8 +65,12 @@ class MESHDRIVERMED_EXPORT DriverMED_W_Field: public Driver_SMESHDS_Mesh
   /*
    * Add one field to the file
    */
-  virtual Status Perform();
+  Status Perform() override;
 
+ protected:
+
+  Status PerformInternal(MED::PWrapper& medFile);
+  
  private:
 
   std::string                _fieldName;
@@ -80,4 +85,16 @@ class MESHDRIVERMED_EXPORT DriverMED_W_Field: public Driver_SMESHDS_Mesh
   std::vector< std::pair< SMDSAbs_EntityType, int > > _nbElemsByGeom;
 };
 
+#include "MEDCouplingMemArray.hxx"
+
+class MESHDRIVERMED_EXPORT DriverMED_W_Field_Mem : public DriverMED_W_Field
+{
+public:
+  DriverMED_W_Field_Mem(MEDCoupling::MCAuto<MEDCoupling::DataArrayByte> data):_data(data) { }
+  Status Perform() override;
+  MEDCoupling::MCAuto<MEDCoupling::DataArrayByte> getData() const { return _data; }
+private:
+  MEDCoupling::MCAuto<MEDCoupling::DataArrayByte> _data;
+};
+
 #endif
index 052869ab8ee910103acf617fe5663dbb6352ed1a..fda03669496e05472a35873d9cd1becc20585c14 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -35,6 +35,7 @@
 #include "SMDS_SetIterator.hxx"
 #include "SMESHDS_Mesh.hxx"
 #include "MED_Common.hxx"
+#include "MED_TFile.hxx"
 
 #include <med.h>
 
@@ -52,6 +53,12 @@ using namespace std;
 using namespace MED;
 
 
+//================================================================================
+/*!
+ * \brief Constructor
+ */
+//================================================================================
+
 DriverMED_W_SMESHDS_Mesh::DriverMED_W_SMESHDS_Mesh():
   myAllSubMeshes (false),
   myDoGroupOfNodes (false),
@@ -64,19 +71,31 @@ DriverMED_W_SMESHDS_Mesh::DriverMED_W_SMESHDS_Mesh():
   myAddODOnVertices(false),
   myDoAllInGroups(false),
   myVersion(-1),
-  myZTolerance(-1.)
+  myZTolerance(-1.),
+  mySaveNumbers(true)
 {}
 
+//================================================================================
+/*!
+ * \brief Set a file name and a version
+ *  \param [in] theFileName - output file name
+ *  \param [in] theVersion - desired MED file version == major * 10 + minor
+ */
+//================================================================================
+
 void DriverMED_W_SMESHDS_Mesh::SetFile(const std::string& theFileName, int theVersion)
 {
   myVersion = theVersion;
   Driver_SMESHDS_Mesh::SetFile(theFileName);
 }
 
+//================================================================================
 /*!
  * MED version is either the latest available, or with an inferior minor,
  * to ensure backward compatibility on writing med files.
  */
+//================================================================================
+
 string DriverMED_W_SMESHDS_Mesh::GetVersionString(int theMinor, int theNbDigits)
 {
   TInt majeur, mineur, release;
@@ -147,24 +166,15 @@ void DriverMED_W_SMESHDS_Mesh::AddGroupOfBalls()
   myDoGroupOfBalls = true;
 }
 
-//================================================================================
-/*!
- * \brief Set up a flag to add all elements not belonging to any group to
- *        some auxiliary group. This is needed for SMESH -> SAUVE -> SMESH conversion,
- *        which since PAL0023285 reads only SAUVE elements belonging to any group,
- *        and hence can lose some elements. That auxiliary group is ignored while
- *        reading a MED file.
- */
-//================================================================================
-
-void DriverMED_W_SMESHDS_Mesh::AddAllToGroup()
-{
-  myDoAllInGroups = true;
-}
-
 
 namespace
 {
+  //---------------------------------------------
+  /*!
+   * \brief Retrieving node coordinates utilities
+   */
+  //---------------------------------------------
+
   typedef double (SMDS_MeshNode::* TGetCoord)() const;
   typedef const char* TName;
   typedef const char* TUnit;
@@ -246,7 +256,7 @@ namespace
     const SMDS_MeshNode* GetNode(){
       return myCurrentNode;
     }
-    MED::TIntVector::value_type GetID(){
+    MED::TIDVector::value_type GetID(){
       return myCurrentNode->GetID();
     }
     MED::TFloatVector::value_type GetCoord(TInt theCoodId){
@@ -343,12 +353,60 @@ namespace
   }
 }
 
+//================================================================================
+/*!
+ * \brief Write my mesh to a file
+ */
+//================================================================================
+
 Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
+{
+  MED::PWrapper myMed = CrWrapperW(myFile, myVersion);
+  return this->PerformInternal<MED::PWrapper>(myMed);
+}
+
+//================================================================================
+/*!
+ * \brief Write my mesh to a MEDCoupling DS
+ */
+//================================================================================
+
+Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh_Mem::Perform()
+{
+  void *ptr(nullptr);
+  std::size_t sz(0);
+  Driver_Mesh::Status status = Driver_Mesh::DRS_OK;
+  bool isClosed(false);
+  {// let braces to flush (call of MED::PWrapper myMed destructor)
+    TMemFile *tfileInst = new TMemFile(&ptr,&sz,&isClosed);// this new will be destroyed by destructor of myMed
+    MED::PWrapper myMed = CrWrapperW(myFile, -1, tfileInst);
+    status = this->PerformInternal<MED::PWrapper>(myMed);
+  }
+  if(!isClosed)
+    EXCEPTION(std::runtime_error, "TFTMemFile destructor : on destruction file has not been closed properly -> chunk of memory data may be invalid !");
+  _data = MEDCoupling::DataArrayByte::New();
+  _data->useArray(reinterpret_cast<char *>(ptr),true,MEDCoupling::DeallocType::C_DEALLOC,sz,1);
+  if(!isClosed)
+    THROW_SALOME_EXCEPTION("DriverMED_W_SMESHDS_Mesh_Mem::Perform - MED memory file id is supposed to be closed !");
+  return status;
+}
+
+//================================================================================
+/*!
+ * \brief Write my mesh
+ */
+//================================================================================
+
+template<class LowLevelWriter>
+Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::PerformInternal(LowLevelWriter myMed)
 {
   Status aResult = DRS_OK;
   try {
     //MESSAGE("Perform - myFile : "<<myFile);
 
+    if ( Driver_Mesh::IsMeshTooLarge< TInt >( myMesh, /*checkIDs =*/ true ))
+      return DRS_TOO_LARGE_MESH;
+
     // Creating the MED mesh for corresponding SMDS structure
     //-------------------------------------------------------
     string aMeshName;
@@ -462,7 +520,6 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
       }
     }
 
-    MED::PWrapper myMed = CrWrapperW(myFile, myVersion);
     PMeshInfo aMeshInfo = myMed->CrMeshInfo(aMeshDimension,aSpaceDimension,aMeshName);
     //MESSAGE("Add - aMeshName : "<<aMeshName<<"; "<<aMeshInfo->GetName());
     myMed->SetMeshInfo(aMeshInfo);
@@ -475,12 +532,12 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
     int myEdgesDefaultFamilyId      = 0;
     int myFacesDefaultFamilyId      = 0;
     int myVolumesDefaultFamilyId    = 0;
-    int nbNodes      = myMesh->NbNodes();
-    int nb0DElements = myMesh->Nb0DElements();
-    int nbBalls      = myMesh->NbBalls();
-    int nbEdges      = myMesh->NbEdges();
-    int nbFaces      = myMesh->NbFaces();
-    int nbVolumes    = myMesh->NbVolumes();
+    smIdType nbNodes      = myMesh->NbNodes();
+    smIdType nb0DElements = myMesh->Nb0DElements();
+    smIdType nbBalls      = myMesh->NbBalls();
+    smIdType nbEdges      = myMesh->NbEdges();
+    smIdType nbFaces      = myMesh->NbFaces();
+    smIdType nbVolumes    = myMesh->NbVolumes();
     if (myDoGroupOfNodes)   myNodesDefaultFamilyId      = REST_NODES_FAMILY;
     if (myDoGroupOfEdges)   myEdgesDefaultFamilyId      = REST_EDGES_FAMILY;
     if (myDoGroupOfFaces)   myFacesDefaultFamilyId      = REST_FACES_FAMILY;
@@ -523,7 +580,7 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
     list<DriverMED_FamilyPtr>::iterator aFamsIter;
     for (aFamsIter = aFamilies.begin(); aFamsIter != aFamilies.end(); aFamsIter++)
     {
-      PFamilyInfo aFamilyInfo = (*aFamsIter)->GetFamilyInfo(myMed,aMeshInfo);
+      PFamilyInfo aFamilyInfo = (*aFamsIter)->GetFamilyInfo<LowLevelWriter>(myMed,aMeshInfo);
       myMed->SetFamilyInfo(aFamilyInfo);
     }
 
@@ -535,11 +592,11 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
 #endif
     const EModeSwitch   theMode        = eFULL_INTERLACE;
     const ERepere       theSystem      = eCART;
-    const EBooleen      theIsElemNum   = eVRAI;
+    const EBooleen      theIsElemNum   = mySaveNumbers ? eVRAI : eFAUX;
     const EBooleen      theIsElemNames = eFAUX;
     const EConnectivite theConnMode    = eNOD;
 
-    TInt aNbNodes = myMesh->NbNodes();
+    TInt aNbNodes = FromSmIdType<TInt>( myMesh->NbNodes() );
     PNodeInfo aNodeInfo = myMed->CrNodeInfo(aMeshInfo, aNbNodes,
                                             theMode, theSystem, theIsElemNum, theIsElemNames);
 
@@ -559,7 +616,7 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
         aTCoordSlice[2] = 0.;
 
       // node number
-      int aNodeID = aCoordHelperPtr->GetID();
+      TInt aNodeID = FromSmIdType<TInt>( aCoordHelperPtr->GetID() );
       aNodeInfo->SetElemNum( iNode, aNodeID );
 #ifdef _EDF_NODE_IDS_
       aNodeIdMap.insert( aNodeIdMap.end(), make_pair( aNodeID, iNode+1 ));
@@ -625,66 +682,66 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
 #endif
     aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                              eBALL,
-                                             nbElemInfo.NbBalls(),
+                                             FromSmIdType<TInt>(nbElemInfo.NbBalls()),
                                              SMDSAbs_Ball));
 #ifdef _ELEMENTS_BY_DIM_
     anEntity = eARETE;
 #endif
     aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                              eSEG2,
-                                             nbElemInfo.NbEdges( ORDER_LINEAR ),
+                                             FromSmIdType<TInt>(nbElemInfo.NbEdges( ORDER_LINEAR )),
                                              SMDSAbs_Edge));
     aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                              eSEG3,
-                                             nbElemInfo.NbEdges( ORDER_QUADRATIC ),
+                                             FromSmIdType<TInt>(nbElemInfo.NbEdges( ORDER_QUADRATIC )),
                                              SMDSAbs_Edge));
 #ifdef _ELEMENTS_BY_DIM_
     anEntity = eFACE;
 #endif
     aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                              eTRIA3,
-                                             nbElemInfo.NbTriangles( ORDER_LINEAR ),
+                                             FromSmIdType<TInt>(nbElemInfo.NbTriangles( ORDER_LINEAR )),
                                              SMDSAbs_Face));
     aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                              eTRIA6,
-                                             nbElemInfo.NbTriangles( ORDER_QUADRATIC ) -
-                                             nbElemInfo.NbBiQuadTriangles(),
+                                             FromSmIdType<TInt>(nbElemInfo.NbTriangles( ORDER_QUADRATIC ) -
+                                             nbElemInfo.NbBiQuadTriangles()),
                                              SMDSAbs_Face));
     aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                              eTRIA7,
-                                             nbElemInfo.NbBiQuadTriangles(),
+                                             FromSmIdType<TInt>(nbElemInfo.NbBiQuadTriangles()),
                                              SMDSAbs_Face));
     aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                              eQUAD4,
-                                             nbElemInfo.NbQuadrangles( ORDER_LINEAR ),
+                                             FromSmIdType<TInt>(nbElemInfo.NbQuadrangles( ORDER_LINEAR )),
                                              SMDSAbs_Face));
     aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                              eQUAD8,
-                                             nbElemInfo.NbQuadrangles( ORDER_QUADRATIC ) -
-                                             nbElemInfo.NbBiQuadQuadrangles(),
+                                             FromSmIdType<TInt>(nbElemInfo.NbQuadrangles( ORDER_QUADRATIC ) -
+                                             nbElemInfo.NbBiQuadQuadrangles()),
                                              SMDSAbs_Face));
     aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                              eQUAD9,
-                                             nbElemInfo.NbBiQuadQuadrangles(),
+                                             FromSmIdType<TInt>(nbElemInfo.NbBiQuadQuadrangles()),
                                              SMDSAbs_Face));
     if ( polyTypesSupported ) {
       aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                                ePOLYGONE,
-                                               nbElemInfo.NbPolygons( ORDER_LINEAR ),
+                                               FromSmIdType<TInt>(nbElemInfo.NbPolygons( ORDER_LINEAR )),
                                                SMDSAbs_Face));
       // we need one more loop on poly elements to count nb of their nodes
       aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                                ePOLYGONE,
-                                               nbElemInfo.NbPolygons( ORDER_LINEAR ),
+                                               FromSmIdType<TInt>(nbElemInfo.NbPolygons( ORDER_LINEAR )),
                                                SMDSAbs_Face));
       aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                                ePOLYGON2,
-                                               nbElemInfo.NbPolygons( ORDER_QUADRATIC ),
+                                               FromSmIdType<TInt>(nbElemInfo.NbPolygons( ORDER_QUADRATIC )),
                                                SMDSAbs_Face));
       // we need one more loop on QUAD poly elements to count nb of their nodes
       aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                                ePOLYGON2,
-                                               nbElemInfo.NbPolygons( ORDER_QUADRATIC ),
+                                               FromSmIdType<TInt>(nbElemInfo.NbPolygons( ORDER_QUADRATIC )),
                                                SMDSAbs_Face));
     }
 #ifdef _ELEMENTS_BY_DIM_
@@ -692,58 +749,58 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
 #endif
     aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                              eTETRA4,
-                                             nbElemInfo.NbTetras( ORDER_LINEAR ),
+                                             FromSmIdType<TInt>(nbElemInfo.NbTetras( ORDER_LINEAR )),
                                              SMDSAbs_Volume));
     aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                              eTETRA10,
-                                             nbElemInfo.NbTetras( ORDER_QUADRATIC ),
+                                             FromSmIdType<TInt>(nbElemInfo.NbTetras( ORDER_QUADRATIC )),
                                              SMDSAbs_Volume));
     aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                              ePYRA5,
-                                             nbElemInfo.NbPyramids( ORDER_LINEAR ),
+                                             FromSmIdType<TInt>(nbElemInfo.NbPyramids( ORDER_LINEAR )),
                                              SMDSAbs_Volume));
     aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                              ePYRA13,
-                                             nbElemInfo.NbPyramids( ORDER_QUADRATIC ),
+                                             FromSmIdType<TInt>(nbElemInfo.NbPyramids( ORDER_QUADRATIC )),
                                              SMDSAbs_Volume));
     aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                              ePENTA6,
-                                             nbElemInfo.NbPrisms( ORDER_LINEAR ),
+                                             FromSmIdType<TInt>(nbElemInfo.NbPrisms( ORDER_LINEAR )),
                                              SMDSAbs_Volume));
     aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                              ePENTA15,
-                                             nbElemInfo.NbQuadPrisms(),
+                                             FromSmIdType<TInt>(nbElemInfo.NbQuadPrisms()),
                                              SMDSAbs_Volume));
     aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                              ePENTA18,
-                                             nbElemInfo.NbBiQuadPrisms(),
+                                             FromSmIdType<TInt>(nbElemInfo.NbBiQuadPrisms()),
                                              SMDSAbs_Volume));
     aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                              eHEXA8,
-                                             nbElemInfo.NbHexas( ORDER_LINEAR ),
+                                             FromSmIdType<TInt>(nbElemInfo.NbHexas( ORDER_LINEAR )),
                                              SMDSAbs_Volume));
     aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                              eHEXA20,
-                                             nbElemInfo.NbHexas( ORDER_QUADRATIC )-
-                                             nbElemInfo.NbTriQuadHexas(),
+                                             FromSmIdType<TInt>(nbElemInfo.NbHexas( ORDER_QUADRATIC )-
+                                             nbElemInfo.NbTriQuadHexas()),
                                              SMDSAbs_Volume));
     aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                              eHEXA27,
-                                             nbElemInfo.NbTriQuadHexas(),
+                                             FromSmIdType<TInt>(nbElemInfo.NbTriQuadHexas()),
                                              SMDSAbs_Volume));
     aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                              eOCTA12,
-                                             nbElemInfo.NbHexPrisms(),
+                                             FromSmIdType<TInt>(nbElemInfo.NbHexPrisms()),
                                              SMDSAbs_Volume));
     if ( polyTypesSupported ) {
       aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                                ePOLYEDRE,
-                                               nbElemInfo.NbPolyhedrons(),
+                                               FromSmIdType<TInt>(nbElemInfo.NbPolyhedrons()),
                                                SMDSAbs_Volume));
       // we need one more loop on poly elements to count nb of their nodes
       aTElemTypeDatas.push_back( TElemTypeData(anEntity,
                                                ePOLYEDRE,
-                                               nbElemInfo.NbPolyhedrons(),
+                                               FromSmIdType<TInt>(nbElemInfo.NbPolyhedrons()),
                                                SMDSAbs_Volume));
     }
 
@@ -777,7 +834,7 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
 
       // iterator on elements of a current type
       SMDS_ElemIteratorPtr elemIterator;
-      int iElem = 0;
+      TInt iElem = 0;
 
       // Treat POLYGONs
       // ---------------
@@ -822,13 +879,13 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
             for(TInt iNode = 0; iNode < aNbNodes; iNode++) {
               const SMDS_MeshElement* aNode = anElem->GetNode( iNode );
 #ifdef _EDF_NODE_IDS_
-              aTConnSlice[ iNode ] = aNodeIdMap[aNode->GetID()];
+              aTConnSlice[ iNode ] = aNodeIdMap[FromSmIdType<TInt>(aNode->GetID())];
 #else
               aTConnSlice[ iNode ] = aNode->GetID();
 #endif
             }
             // element number
-            aPolygoneInfo->SetElemNum( iElem, anElem->GetID() );
+            aPolygoneInfo->SetElemNum( iElem, FromSmIdType<TInt>(anElem->GetID()) );
 
             // family number
             int famNum = getFamilyId( anElemFamMap, anElem, defaultFamilyId );
@@ -896,14 +953,14 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
             while ( nodeIt->more() ) {
               const SMDS_MeshElement* aNode = nodeIt->next();
 #ifdef _EDF_NODE_IDS_
-              conn[ iNode ] = aNodeIdMap[aNode->GetID()];
+              conn[ iNode ] = aNodeIdMap[FromSmIdType<TInt>(aNode->GetID())];
 #else
               conn[ iNode ] = aNode->GetID();
 #endif
               ++iNode;
             }
             // element number
-            aPolyhInfo->SetElemNum( iElem, anElem->GetID() );
+            aPolyhInfo->SetElemNum( iElem, FromSmIdType<TInt>(anElem->GetID()) );
 
             // family number
             int famNum = getFamilyId( anElemFamMap, anElem, defaultFamilyId );
@@ -930,12 +987,12 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
           // connectivity
           const SMDS_MeshElement* aNode = anElem->GetNode( 0 );
 #ifdef _EDF_NODE_IDS_
-          (*aBallInfo->myConn)[ iElem ] = aNodeIdMap[aNode->GetID()];
+          (*aBallInfo->myConn)[ iElem ] = aNodeIdMap[FromSmIdType<TInt>(aNode->GetID())];
 #else
           (*aBallInfo->myConn)[ iElem ] = aNode->GetID();
 #endif
           // element number
-          aBallInfo->SetElemNum( iElem, anElem->GetID() );
+          aBallInfo->SetElemNum( iElem, FromSmIdType<TInt>(anElem->GetID()) );
 
           // diameter
           aBallInfo->myDiameters[ iElem ] =
@@ -964,9 +1021,11 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
                                                  theIsElemNames);
 
         TInt aNbNodes = MED::GetNbNodes(aElemTypeData->_geomType);
+
         elemIterator = myMesh->elementsIterator( aElemTypeData->_smdsType );
         if ( aElemTypeData->_smdsType == SMDSAbs_0DElement && ! nodesOf0D.empty() )
           elemIterator = iterVecIter;
+
         while ( elemIterator->more() )
         {
           const SMDS_MeshElement* anElem = elemIterator->next();
@@ -978,13 +1037,13 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
           for (TInt iNode = 0; iNode < aNbNodes; iNode++) {
             const SMDS_MeshElement* aNode = anElem->GetNode( iNode );
 #ifdef _EDF_NODE_IDS_
-            aTConnSlice[ iNode ] = aNodeIdMap[aNode->GetID()];
+            aTConnSlice[ iNode ] = aNodeIdMap[FromSmIdType<TInt>(aNode->GetID())];
 #else
             aTConnSlice[ iNode ] = aNode->GetID();
 #endif
           }
           // element number
-          aCellInfo->SetElemNum( iElem, anElem->GetID() );
+          aCellInfo->SetElemNum( iElem, FromSmIdType<TInt>(anElem->GetID()) );
 
           // family number
           int famNum = getFamilyId( anElemFamMap, anElem, defaultFamilyId );
@@ -993,6 +1052,15 @@ Driver_Mesh::Status DriverMED_W_SMESHDS_Mesh::Perform()
           if ( ++iElem == aCellInfo->GetNbElem() )
             break;
         }
+        // fix numbers of added SMDSAbs_0DElement
+        if ( aElemTypeData->_smdsType == SMDSAbs_0DElement && ! nodesOf0D.empty() )
+        {
+          iElem = myMesh->Nb0DElements();
+          TInt elem0DNum = FromSmIdType<TInt>( myMesh->MaxElementID() + 1 );
+          for ( size_t i = 0; i < nodesOf0D.size(); ++i )
+            aCellInfo->SetElemNum( iElem++, elem0DNum++);
+        }
+
         // store data in a file
         myMed->SetCellInfo(aCellInfo);
       }
index 6d8f69e114a638ccb8ef1dc7b8bfb0feeb6ec6e3..c0c7ce4cd5e055d22b63eff104bee86902e42e99 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -42,6 +42,9 @@ class SMESHDS_GroupBase;
 class SMESHDS_SubMesh;
 class SMDS_MeshElement;
 
+/*!
+ * \brief Write a mesh to a MED file
+ */
 class MESHDRIVERMED_EXPORT DriverMED_W_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
 {
   public:
@@ -51,6 +54,7 @@ class MESHDRIVERMED_EXPORT DriverMED_W_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
   void SetFile(const std::string& theFileName, int theVersion=-1);
   void SetAutoDimension(bool toFindOutDimension) { myAutoDimension = toFindOutDimension; }
   void SetZTolerance(double tol) { myZTolerance = tol; }
+  void SetSaveNumbers(bool toSave) { mySaveNumbers = toSave; }
 
   static std::string GetVersionString(int theMinor, int theNbDigits=2);
 
@@ -60,7 +64,6 @@ class MESHDRIVERMED_EXPORT DriverMED_W_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
   void AddGroupOfVolumes();
   void AddGroupOf0DElems();
   void AddGroupOfBalls();
-  void AddAllToGroup();
 
   /*! functions to prepare adding one mesh
    */
@@ -74,24 +77,42 @@ class MESHDRIVERMED_EXPORT DriverMED_W_SMESHDS_Mesh: public Driver_SMESHDS_Mesh
 
   /*! add one mesh
    */
-  virtual Status Perform();
+  Status Perform() override;
+
+  template<class LowLevelWriter>
+  Driver_Mesh::Status PerformInternal(LowLevelWriter myMed);
 
  private:
 
   std::list<SMESHDS_GroupBase*> myGroups;
-  bool myAllSubMeshes;
+  bool                          myAllSubMeshes;
   std::vector<SMESHDS_SubMesh*> mySubMeshes;
-  bool myDoGroupOfNodes;
-  bool myDoGroupOfEdges;
-  bool myDoGroupOfFaces;
-  bool myDoGroupOfVolumes;
-  bool myDoGroupOf0DElems;
-  bool myDoGroupOfBalls;
-  bool myAutoDimension;
-  bool myAddODOnVertices;
-  bool myDoAllInGroups;
-  int  myVersion;
-  double myZTolerance;
+  bool                          myDoGroupOfNodes;
+  bool                          myDoGroupOfEdges;
+  bool                          myDoGroupOfFaces;
+  bool                          myDoGroupOfVolumes;
+  bool                          myDoGroupOf0DElems;
+  bool                          myDoGroupOfBalls;
+  bool                          myAutoDimension;
+  bool                          myAddODOnVertices;
+  bool                          myDoAllInGroups;
+  int                           myVersion;
+  double                        myZTolerance;
+  bool                          mySaveNumbers;
+};
+
+#include "MEDCouplingMemArray.hxx"
+
+/*!
+ * \brief Write a mesh to a MEDCoupling DS
+ */
+class MESHDRIVERMED_EXPORT DriverMED_W_SMESHDS_Mesh_Mem : public DriverMED_W_SMESHDS_Mesh
+{
+public:
+  Status Perform() override;
+  MEDCoupling::MCAuto<MEDCoupling::DataArrayByte> getData() { return _data; }
+private:
+  MEDCoupling::MCAuto<MEDCoupling::DataArrayByte> _data;
 };
 
 #endif
index 58a8dfd005d9e6eb278ff49225e342630c22da89..582718cfeae1463d0b05f5c7fde0284c73918fd3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index ae1e7f79173d5b06b39ba35dbf311df71e0c158b..ef95a3698a62732245d68ea5a6b0e014678c63b1 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 3c2ff5227b58f1316ec4ae4805a79c440d933641..c838ec8065d6e16f07917ed29016c9862558e32b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 288342d852264a5eb63994dfc5e387cb79d2e491..702d4dfce4cde92be51fea6088b63ac33cf0f5db 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 131235a5e357b1cecd22ebd1a22af8e059fdfffe..1dee48d8bee9e3555736e42619eac77ccb363ffb 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index d8bcc84592fccdc8faf8863144a72cb659c7c57e..df47fba2605b43fc7732ee4a827124a4c171711e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 0900003cc7e71e94ae03a9b47a0b0c46dd349ad1..b7db77ca84506eed5196af3a752f559c8d983319 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index aeccf79db69711e2df7fdf4542b6e5dacc9f5a32..58166ef2898e71d3d3171bbfd29e3d7b7a460a85 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 6eb1d66e3917254384a4653d742087d07c1fbf92..a489c4cddecd3884bdcbde013bd322c8ad13840d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 
 using namespace std;
 
-
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-#else
-static int MYDEBUG = 0;
-#endif
-
 namespace
 {
   /*!
@@ -123,7 +116,7 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
       using namespace UNV2411;
       TDataSet aDataSet2411;
       UNV2411::Read(in_stream,aDataSet2411);
-      if(MYDEBUG) MESSAGE("Perform - aDataSet2411.size() = "<<aDataSet2411.size());
+      MESSAGE("Perform - aDataSet2411.size() = "<<aDataSet2411.size());
 
       // Move nodes in a global CS
       if ( !aCoordSysDataSet.empty() )
@@ -168,7 +161,7 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
       TDataSet aDataSet2412;
       UNV2412::Read(in_stream,aDataSet2412);
       TDataSet::const_iterator anIter = aDataSet2412.begin();
-      if(MYDEBUG) MESSAGE("Perform - aDataSet2412.size() = "<<aDataSet2412.size());
+      MESSAGE("Perform - aDataSet2412.size() = "<<aDataSet2412.size());
       for(; anIter != aDataSet2412.end(); anIter++)
       {
         SMDS_MeshElement* anElement = NULL;
@@ -404,7 +397,7 @@ Driver_Mesh::Status DriverUNV_R_SMDS_Mesh::Perform()
       using namespace UNV2417;
       TDataSet aDataSet2417;
       UNV2417::Read(in_stream,aDataSet2417);
-      if(MYDEBUG) MESSAGE("Perform - aDataSet2417.size() = "<<aDataSet2417.size());
+      MESSAGE("Perform - aDataSet2417.size() = "<<aDataSet2417.size());
       if (aDataSet2417.size() > 0)
       {
         TDataSet::const_iterator anIter = aDataSet2417.begin();
index 59e85893b9d8c034816bfdc37800df8d0aedd0d2..45bf1aebe89def3d2bda68a16a3a295cd7ac8dc4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 6b507b00e84a3ec8c0a6ad1c79065cd9c0119431..9ac1bf49dbfada6da2d23a5b668caaa619ac06c3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -45,19 +45,23 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
 {
   Kernel_Utils::Localizer loc;
   Status aResult = DRS_OK;
+
+  if ( Driver_Mesh::IsMeshTooLarge< int >( myMesh, /*checkIDs =*/ false))
+    return DRS_TOO_LARGE_MESH;
+
 #if defined(WIN32) && defined(UNICODE)
   std::wstring aFile = Kernel_Utils::utf8_decode_s(myFile);
   std::ofstream out_stream(aFile.c_str());
 #else
   std::ofstream out_stream(myFile.c_str());
 #endif
-  try{
-
+  try
+  {
     UNV164::Write( out_stream ); // unit system
     UNV2420::Write( out_stream, myMeshName ); // Coordinate system
 
     std::vector< size_t > nodeLabelByID;
-    if ( myMesh->HasNumerationHoles() )
+    if ( myMesh->HasNumerationHoles() && myRenumber )
       nodeLabelByID.resize( myMesh->MaxNodeID() + 1 );
 
     {
@@ -71,7 +75,8 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
       for ( aRec.label = 1; aNodesIter->more(); ++aRec.label )
       {
         const SMDS_MeshNode* aNode = aNodesIter->next();
-        // aRec.label    = aNode->GetID(); -- IPAL54452
+        if ( !myRenumber )
+          aRec.label  = aNode->GetID(); //-- IPAL54452
         if ( !nodeLabelByID.empty() )
           nodeLabelByID[ aNode->GetID() ] = aRec.label;
         aRec.coord[0] = aNode->X();
@@ -101,8 +106,10 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
         while ( anIter->more() )
         {
           const SMDS_MeshEdge* anElem = anIter->next();
-          // aRec.label = anElem->GetID();  -- IPAL54452
-          ++aRec.label;
+          if ( myRenumber ) // -- IPAL54452
+            ++aRec.label;
+          else
+            aRec.label = anElem->GetID();
           if ( !elemLabelByID.empty() )
             elemLabelByID[ anElem->GetID() ] = aRec.label;
 
@@ -113,7 +120,7 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
           {
             const SMDS_MeshNode* aNode = aNodesIter->next();
             if ( nodeLabelByID.empty() )
-              aRec.node_labels.push_back( aNode->GetID() );
+              aRec.node_labels.push_back( FromSmIdType<int>(aNode->GetID()) );
             else
               aRec.node_labels.push_back( nodeLabelByID[ aNode->GetID() ]);
           }
@@ -134,10 +141,11 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
           if ( anElem->IsPoly() ) continue;
 
           SMDS_NodeIteratorPtr aNodesIter = anElem->nodesIteratorToUNV();
-          for ( aRec.node_labels.clear(); aNodesIter->more();  ) {
+          for ( aRec.node_labels.clear(); aNodesIter->more();  )
+          {
             const SMDS_MeshNode* aNode = aNodesIter->next();
             if ( nodeLabelByID.empty() )
-              aRec.node_labels.push_back( aNode->GetID() );
+              aRec.node_labels.push_back( FromSmIdType<int>(aNode->GetID()) );
             else
               aRec.node_labels.push_back( nodeLabelByID[ aNode->GetID() ]);
           }
@@ -151,8 +159,10 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
           default:
             continue;
           }
-          // aRec.label = anElem->GetID(); -- IPAL54452
-          ++aRec.label;
+          if ( myRenumber )
+            ++aRec.label;
+          else
+            aRec.label = anElem->GetID(); // -- IPAL54452
           if ( !elemLabelByID.empty() )
             elemLabelByID[ anElem->GetID() ] = aRec.label;
 
@@ -184,8 +194,10 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
           default:
             continue;
           }
-          // aRec.label = anElem->GetID(); -- IPAL54452
-          ++aRec.label;
+          if ( myRenumber )
+            ++aRec.label; // -- IPAL54452
+          else
+            aRec.label = anElem->GetID();
           if ( !elemLabelByID.empty() )
             elemLabelByID[  anElem->GetID() ] = aRec.label;
 
@@ -195,7 +207,7 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
           {
             const SMDS_MeshElement* aNode = aNodesIter->next();
             if ( nodeLabelByID.empty() )
-              aRec.node_labels.push_back( aNode->GetID() );
+              aRec.node_labels.push_back( FromSmIdType<int>(aNode->GetID()) );
             else
               aRec.node_labels.push_back( nodeLabelByID[ aNode->GetID() ]);
           }
@@ -210,7 +222,8 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
     // --------------------
     {
       using namespace UNV2417;
-      if ( myGroups.size() > 0 ) {
+      if ( myGroups.size() > 0 )
+      {
         TRecord aRec;
         TDataSet aDataSet2417;
         TGroupList::const_iterator aIter = myGroups.begin();
@@ -226,7 +239,7 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
             while ( aIter->more() ) {
               const SMDS_MeshElement* aNode = aIter->next();
               if ( nodeLabelByID.empty() )
-                aRec.NodeList.push_back( aNode->GetID() );
+                aRec.NodeList.push_back( FromSmIdType<int>( aNode->GetID()) );
               else
                 aRec.NodeList.push_back( nodeLabelByID[ aNode->GetID() ]);
             }
@@ -236,7 +249,7 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
             while ( aIter->more() ) {
               const SMDS_MeshElement* aElem = aIter->next();
               if ( elemLabelByID.empty() )
-                aRec.ElementList.push_back( aElem->GetID() );
+                aRec.ElementList.push_back( FromSmIdType<int>(aElem->GetID()) );
               else
                 aRec.ElementList.push_back( elemLabelByID[ aElem->GetID() ]);
             }
@@ -256,11 +269,11 @@ Driver_Mesh::Status DriverUNV_W_SMDS_Mesh::Perform()
       EXCEPTION(runtime_error,"ERROR: Output file not good.");
   }
   catch(const std::exception& exc){
-    INFOS("Follow exception was cought:\n\t"<<exc.what());
+    INFOS("Follow exception was caught:\n\t"<<exc.what());
     throw;
   }
   catch(...){
-    INFOS("Unknown exception was cought !!!");
+    INFOS("Unknown exception was caught !!!");
     throw;
   }
   return aResult;
index 3bfc179dd15ba52d90170fe7c104731156aad29a..080d97eda88d287e0b8548aa4b953690c9e0d2ae 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -35,12 +35,15 @@ typedef std::list<SMESHDS_GroupBase*> TGroupList;
 class MESHDRIVERUNV_EXPORT DriverUNV_W_SMDS_Mesh: public Driver_SMDS_Mesh
 {
  public:
-  virtual Status Perform();
+
+  virtual Status Perform() override;
 
   void AddGroup(SMESHDS_GroupBase* theGroup) { myGroups.push_back(theGroup); }
+  void SetRenumber( bool renumber ) { myRenumber = renumber; }
 
  private:
   TGroupList myGroups;
+  bool       myRenumber;
 };
 
 
index 105685aa519f165987449f1e764a9ebdc0831208..e2ba0af7b096ebbcd5788b61165ba29fcbae386e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 72a307d0dda865a6237adbe1051a1469b448bb28..16f8a83d163d94448123c07abf12c684c36c3cfb 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index d2d4f9f20bc256efcf7e8f6315d11ecd6f63ee50..1e92639a03d4de2cc04aff049a7db04d27647f38 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 5a5dd8ab56fe2f8191c2bcb3f251d78fe1a7593a..a6e8a20dedc2abfc15be55e4b3bcefc06c7a4880 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index f876d3741278391c6f3c3a476477c94ebd7172dd..4a7708b6a1b0b08f72940ef76b2ef521317c1135 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index c70285e8f2a501ec9e6addf543df89d3f23ad8ac..05b3db4f75a02c637e654848423b5948a23e7c7d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 9c5328d2b4038a6789f720139aec05b33d6e6346..2828e135ad55dfa44eeddffbafc5afea293bd82d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 256c13b4c40c606eb9386261b39f8ce6925acc9c..9a29c91b44c2e01ab7f79dfb7dfc9f1f7cfd220b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 9202ba349def62466e93984ae028a0699a0f97c7..619085e166c5a648db9c0b7a5f3048484c1ff5ff 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 07e65e5669ca96f6c7f7c8e8974e1d718f395b32..4136dea2c65dcf1753b0d3106723035a0289ef4f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index dfabe1d9b47786d0f6981e4204d5a8020c10d084..c4b168b53af1875ed15130b3c9aad98e29c1e0f6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 7b2b171a14a5f1a4dcc275b79775b7efdf5b7d51..b7e5c760c1dcf788e6ab881fd2dd209da708f678 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 6792d4f1d90df1a3ae32382cfb70a4f654320edc..3ee8e8a1e247576132bf12399b245a4fcf028c5f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 21de384df7647f5c6246381ac8fbfec0f7977edd..c188ff5b37762e8c1a2a23010566ae135d6bbb25 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -24,6 +24,7 @@ INCLUDE_DIRECTORIES(
   ${HDF5_INCLUDE_DIRS}
   ${MEDFILE_INCLUDE_DIRS}
   ${KERNEL_INCLUDE_DIRS}
+  ${MEDCOUPLING_INCLUDE_DIRS}
 )
 
 # additional preprocessor / compiler flags
@@ -37,6 +38,7 @@ SET(_link_LIBRARIES
   ${HDF5_LIBS}
   ${MEDFILE_C_LIBRARIES}
   ${KERNEL_SALOMELocalTrace}
+  ${MEDCoupling_medloader}
 )
 
 # --- headers ---
index 3e2054d94435fc90fc84d4c67a33c2da2603f546..5598ef8c010dd5101368986c0ae1abaf06387a19 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #include "MED_Wrapper.hxx"
 #include "MED_Utilities.hxx"
 
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-static int MYVALUEDEBUG = 0;
-#else
-// static int MYDEBUG = 0;
-// static int MYVALUEDEBUG = 0;
-#endif
-
 namespace MED
 {
   //---------------------------------------------------------------
@@ -40,7 +32,7 @@ namespace MED
                            const PMeshInfo& theMeshInfo,
                            const MED::TEntityInfo& theEntityInfo)
   {
-    MSG(MYDEBUG,"GetElemsByEntity(...)");
+    MSG("GetElemsByEntity(...)");
     TEntity2TGeom2ElemInfo anEntity2TGeom2ElemInfo;
     MED::TEntityInfo::const_iterator anIter = theEntityInfo.begin();
     PElemInfo anElemInfo;
@@ -61,7 +53,7 @@ namespace MED
         aGeom2ElemInfo[aGeom] = theWrapper->GetPElemInfo(theMeshInfo,anEntity,aGeom,MED::eNOD,&anErr);
       }
     }
-    ADDMSG(MYDEBUG,"\n");
+    ADDMSG("\n");
     return anEntity2TGeom2ElemInfo;
   }
 
@@ -70,17 +62,17 @@ namespace MED
   GetFamilyInfoSet(const PWrapper& theWrapper,
                    const PMeshInfo& theMeshInfo)
   {
-    MSG(MYDEBUG,"GetFamilies(...)");
+    MSG("GetFamilies(...)");
     TErr anErr;
     TFamilyInfoSet aFamilyInfoSet;
     TInt aNbFam = theWrapper->GetNbFamilies(*theMeshInfo);
-    INITMSG(MYDEBUG,"GetNbFamilies() = "<<aNbFam<<"\n");
+    INITMSG("GetNbFamilies() = "<<aNbFam<<"\n");
     for(TInt iFam = 1; iFam <= aNbFam; iFam++){
       PFamilyInfo aFamilyInfo = theWrapper->GetPFamilyInfo(theMeshInfo,iFam,&anErr);
       if(anErr >= 0)
         aFamilyInfoSet.insert(aFamilyInfo);
     }
-    ADDMSG(MYDEBUG,"\n");
+    ADDMSG("\n");
     return aFamilyInfoSet;
   }
 
@@ -88,7 +80,7 @@ namespace MED
   TGroupInfo
   GetGroupInfo(const TFamilyInfoSet& theFamilyInfoSet)
   {
-    MSG(MYDEBUG,"GetFamiliesByGroup(...)");
+    MSG("GetFamiliesByGroup(...)");
     TGroupInfo aGroup;
     TFamilyInfoSet::const_iterator anIter = theFamilyInfoSet.begin();
     for(; anIter != theFamilyInfoSet.end(); anIter++){
@@ -99,22 +91,20 @@ namespace MED
       }
     }
 
-#ifdef _DEBUG_
-    if(MYDEBUG){
+    if(SALOME::VerbosityActivated()){
       TGroupInfo::const_iterator anIter = aGroup.begin();
       for(; anIter != aGroup.end(); anIter++){
         const std::string& aName = anIter->first;
-        INITMSG(MYDEBUG,"aGroupName = '"<<aName<<"'\n");
+        INITMSG("aGroupName = '"<<aName<<"'\n");
         const TFamilyInfoSet& aFamilyInfoSet = anIter->second;
         TFamilyInfoSet::const_iterator anFamIter = aFamilyInfoSet.begin();
         for(; anFamIter != aFamilyInfoSet.end(); anFamIter++){
           const PFamilyInfo& aFamilyInfo = *anFamIter;
-          INITMSG(MYDEBUG,"aFamilyName = '"<<aFamilyInfo->GetName()<<"'\n");
+          INITMSG("aFamilyName = '"<<aFamilyInfo->GetName()<<"'\n");
         }
       }
-      ADDMSG(MYDEBUG,"\n");
+      ADDMSG("\n");
     }
-#endif
 
     return aGroup;
   }
@@ -125,28 +115,26 @@ namespace MED
                                 const PMeshInfo& theMeshInfo,
                                 const MED::TEntityInfo& theEntityInfo)
   {
-    MSG(MYDEBUG,"GetFieldsByEntity(...)");
+    MSG("GetFieldsByEntity(...)");
     TFieldInfo2TimeStampInfoSet aFieldInfo2TimeStampInfoSet;
     TInt aNbFields = theWrapper->GetNbFields();
-    INITMSG(MYDEBUG,"GetNbFields() = "<<aNbFields<<"\n");
+    INITMSG("GetNbFields() = "<<aNbFields<<"\n");
     for(TInt iField = 1; iField <= aNbFields; iField++){
       PFieldInfo aFieldInfo = theWrapper->GetPFieldInfo(theMeshInfo,iField);
-      INITMSG(MYDEBUG,"aFieldName = '"<<aFieldInfo->GetName()<<
+      INITMSG("aFieldName = '"<<aFieldInfo->GetName()<<
               "'; aNbComp = "<<aFieldInfo->GetNbComp()<<"; ");
       TGeom2Size aGeom2Size;
       EEntiteMaillage anEntity = EEntiteMaillage(-1);
       TInt aNbTimeStamps = theWrapper->GetNbTimeStamps(aFieldInfo,theEntityInfo,anEntity,aGeom2Size);
-      ADDMSG(MYDEBUG,"anEntity = "<<anEntity<<"; GetNbTimeStamps = "<<aNbTimeStamps<<"\n");
+      ADDMSG("anEntity = "<<anEntity<<"; GetNbTimeStamps = "<<aNbTimeStamps<<"\n");
       for(TInt iTimeStamp = 1; iTimeStamp <= aNbTimeStamps; iTimeStamp++){
         PTimeStampInfo aTimeStamp =
           theWrapper->GetPTimeStampInfo(aFieldInfo,anEntity,aGeom2Size,iTimeStamp);
         aFieldInfo2TimeStampInfoSet[aFieldInfo].insert(aTimeStamp);
-        INITMSG(MYDEBUG,
-                "aDt = "<<aTimeStamp->GetDt()<<
-                ", Unit = \'"<<aTimeStamp->GetUnitDt()<<"\n");
+        INITMSG("aDt = "<<aTimeStamp->GetDt()<<", Unit = \'"<<aTimeStamp->GetUnitDt()<<"\n");
       }
     }
-    ADDMSG(MYDEBUG,"\n");
+    ADDMSG("\n");
     return aFieldInfo2TimeStampInfoSet;
   }
 
@@ -182,7 +170,7 @@ namespace MED
                       const TEntity2TGeom2ElemInfo& theEntity2TGeom2ElemInfo,
                       const TFamilyInfoSet& theFamilyInfoSet)
   {
-    MSG(MYDEBUG,"GetFamiliesByEntity(...)");
+    MSG("GetFamiliesByEntity(...)");
     TEntity2FamilySet anEntity2FamilySet;
 
     typedef std::map<TInt,PFamilyInfo> TId2Family;
@@ -220,7 +208,7 @@ namespace MED
         TEntity2FamilyID::const_iterator anIter = anEntity2FamilyID.begin();
         for(; anIter != anEntity2FamilyID.end(); anIter++){
           const EEntiteMaillage& anEntity = anIter->first;
-          INITMSG(MYDEBUG,"anEntity = "<<anEntity<<":\n");
+          INITMSG("anEntity = "<<anEntity<<":\n");
           const TFamilyID2Size& aFamilyID2Size = anIter->second;
           TFamilyID2Size::const_iterator anIter2 = aFamilyID2Size.begin();
           for(; anIter2 != aFamilyID2Size.end(); anIter2++){
@@ -230,15 +218,14 @@ namespace MED
             if(anIter3 != anId2Family.end()){
               const PFamilyInfo& aFamilyInfo = anIter3->second;
               anEntity2FamilySet[anEntity].insert(TFamilyTSize(aFamilyInfo,aSize));
-              INITMSG(MYDEBUG,
-                      "aFamilyName = '"<<aFamilyInfo->GetName()<<
+              INITMSG("aFamilyName = '"<<aFamilyInfo->GetName()<<
                       "' anId = "<<aFamilyInfo->GetId()<<"\n");
             }
           }
         }
       }
     }
-    ADDMSG(MYDEBUG,"\n");
+    ADDMSG("\n");
     return anEntity2FamilySet;
   }
 
@@ -248,7 +235,7 @@ namespace MED
                TErr* theErr,
                EModeSwitch theMode)
   {
-    INITMSG(MYDEBUG,"GetKey2Gauss - theMode = "<<theMode<<std::endl);
+    INITMSG("GetKey2Gauss - theMode = "<<theMode<<std::endl);
     TKey2Gauss aKey2Gauss;
     TInt aNbGauss = theWrapper->GetNbGauss(theErr);
     for(TInt anId = 1; anId <= aNbGauss; anId++){
@@ -258,16 +245,14 @@ namespace MED
       TGaussInfo::TKey aKey = boost::get<0>(aPreInfo);
       aKey2Gauss[aKey] = anInfo;
 
-#ifdef _DEBUG_
-      const EGeometrieElement& aGeom = boost::get<0>(aKey);
-      const std::string& aName = boost::get<1>(aKey);
-      INITMSG(MYDEBUG,
-              "- aGeom = "<<aGeom<<
-              "; aName = '"<<aName<<"'"<<
-              std::endl);
-#endif
-
+      if (SALOME::VerbosityActivated())
+      {
+        const EGeometrieElement& aGeom = boost::get<0>(aKey);
+        const std::string& aName = boost::get<1>(aKey);
+        INITMSG("- aGeom = "<<aGeom<<"; aName = '"<<aName<<"'"<<std::endl);
+      }
     }
+    
     return aKey2Gauss;
   }
 
@@ -295,7 +280,7 @@ namespace MED
                   TErr* theErr,
                   EModeProfil theMode)
   {
-    INITMSG(MYDEBUG,"GetMKey2Profile - theMode = "<<theMode<<std::endl);
+    INITMSG("GetMKey2Profile - theMode = "<<theMode<<std::endl);
     TKey2Profile aKey2Profile;
     TInt aNbProfiles = theWrapper->GetNbProfiles(theErr);
     for(TInt anId = 1; anId <= aNbProfiles; anId++){
@@ -304,18 +289,16 @@ namespace MED
       const std::string& aName = boost::get<0>(aPreInfo);
       aKey2Profile[aName] = anInfo;
 
-#ifdef _DEBUG_
-      INITMSG(MYDEBUG,
-              "- aName = '"<<aName<<"'"<<
-              " : "<<
-              std::endl);
-      TInt aNbElem = anInfo->GetSize();
-      for(TInt iElem = 0; iElem < aNbElem; iElem++){
-        ADDMSG(MYVALUEDEBUG,anInfo->GetElemNum(iElem)<<", ");
-      }
-      ADDMSG(MYVALUEDEBUG, std::endl);
-#endif
+      if(SALOME::VerbosityActivated()){
+        INITMSG("- aName = '"<<aName<<"'"<<" : "<<std::endl);
+        TInt aNbElem = anInfo->GetSize();
 
+        for(TInt iElem = 0; iElem < aNbElem; iElem++){
+          ADDMSG(anInfo->GetElemNum(iElem)<<", ");
+        }
+
+        ADDMSG(std::endl);
+      }
     }
     return TMKey2Profile(theMode,aKey2Profile);
   }
index 9f4093a7f676914c44b9ca21cd066a145e4a813a..5fc0b75cd44067045e5384491b986d59afefb64c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index f67ed68b23600e9216561b9534fc0794b187450e..f6dd3d19cdfd215b96f5ba8135eef0915bf76954 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index d9d8253d39f81a78867f2b3e80fbb5db852d67cf..2249e60d77eebb920f35f900452dea43a7037f5b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -32,6 +32,7 @@
 #include <map>
 
 #include <med.h>
+#include <smIdType.hxx>
 
 #ifdef WIN32
 #pragma warning(disable:4099)
@@ -77,6 +78,7 @@ namespace MED
   typedef enum {eCOOR, eCONN, eNOM, eNUM, eFAM, eCOOR_IND1, eCOOR_IND2, eCOOR_IND3} ETable;
 
   typedef TVector<TInt> TIntVector;
+  typedef TVector<smIdType> TIDVector;
   typedef TVector<TFloat> TFloatVector;
   typedef TVector<std::string> TStringVector;
   typedef std::set<std::string> TStringSet;
index a9dc07716c1e0e1fbee9b8c7934055c0ab2a14e5..682f02297dccc241988c0ec7500cfb146513c8cc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 47f98f1f66f4175648c39f94a7ab5d309fd8cc65..b818883ec693493e5cd602ab9cfd7e7df62d9729 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 114cb623e5ce7a7c653159414872fac42bb28df5..093511810167504b3eccdfb160a530932058577e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -183,10 +183,10 @@ namespace MED
     if (!CheckCompatibility(fileName)) {
       EXCEPTION(std::runtime_error, "Cannot open file '"<<fileName<<"'.");
     }
-    return new MED::TWrapper(fileName, false);
+    return new MED::TWrapper(fileName, false, nullptr);
   }
 
-  PWrapper CrWrapperW(const std::string& fileName, int theVersion)
+  PWrapper CrWrapperW(const std::string& fileName, int theVersion, TFileInternal *tfileInst)
   {
     bool isCreated = false;
     if (!CheckCompatibility(fileName, true))
@@ -197,13 +197,13 @@ namespace MED
     med_int wantedMajor = MED_MAJOR_NUM;
     med_int wantedMinor = MED_MINOR_NUM;
     // when non managed version of file is requested : ignore it and take the latest version
-    std::vector<int> versionsOK(GetMEDVersionsAppendCompatible());
-    bool isVersionRequestedOK(std::find(versionsOK.begin(),versionsOK.end(),theVersion)!=versionsOK.end());
+    std::vector<int> versionsOK = GetMEDVersionsAppendCompatible();
+    bool   isVersionRequestedOK = std::find(versionsOK.begin(),versionsOK.end(),theVersion)!=versionsOK.end();
     if (isCreated && isVersionRequestedOK)
     {
-      wantedMajor = theVersion/10;
-      wantedMinor = theVersion%10;
+      wantedMajor = theVersion / 10;
+      wantedMinor = theVersion % 10;
     }
-    return new MED::TWrapper(fileName, true, wantedMajor, wantedMinor);
+    return new MED::TWrapper(fileName, true, tfileInst, wantedMajor, wantedMinor);
   }
 }
index c6ca206618a36f5ebff7b05317a9fff0a6438c7c..c3a5dbe41e28fc4bbd5d539706efad57c1e1e8fe 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -47,7 +47,7 @@ namespace MED
   PWrapper CrWrapperR( const std::string& );
 
   MEDWRAPPER_EXPORT
-  PWrapper CrWrapperW( const std::string&, int theVersion=-1 );
+  PWrapper CrWrapperW( const std::string&, int theVersion=-1 , TFileInternal *tfileInst=nullptr );
 }
 
 #endif // MED_Factory_HeaderFile
index 800977ef36bb011ca9ac3b710de0659f06a9d542..88c01bbe48b64385d78e812a371df5b6c130f16e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index dbdd331ff5d1dd2a5a3399c7bd7dca0fa5526213..4fbd7c18a136306e6e2b249106ebacc011376522 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 2524c81cccd36d3d68e3216c48cb26cf20831c0c..1be619dc8e8b2325db8288eb5340977be7b580d5 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #include "MED_GaussUtils.hxx"
 #include "MED_Utilities.hxx"
 
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-static int MYVALUEDEBUG = 0;
-#else
-// static int MYDEBUG = 0;      // unused in release mode
-// static int MYVALUEDEBUG = 0; // unused in release mode
-#endif
-
 namespace MED
 {
   //---------------------------------------------------------------
@@ -209,7 +201,7 @@ namespace MED
   {
     TInt aNbRef = theRefCoord.size();
     TInt aNbRef2 = GetNbRef();
-    INITMSG(MYDEBUG,"TShapeFun::IsSatisfy "<<
+    INITMSG("TShapeFun::IsSatisfy "<<
             "- aNbRef("<<aNbRef<<")"<<
             "; aNbRef2("<<aNbRef2<<")\n");
     bool anIsSatisfy = (aNbRef == aNbRef2);
@@ -227,27 +219,26 @@ namespace MED
           }
         }
         if(!anIsEqual){
-#ifdef _DEBUG_
-          TCCoordSlice aCoord = GetCoord(aRefId);
-          INITMSG(MYDEBUG,aRefId + 1<<": aCoord = {");
-          TInt aDim = aCoord.size();
-          for(TInt anId = 0; anId < aDim; anId++)
-            ADDMSG(MYDEBUG,"\t"<<aCoord[anId]);
-          const TCCoordSlice& aCoord2 = theRefCoord[aRefId];
-          ADDMSG(MYDEBUG,"}\t!=\taCoord2 = {");
-          for(TInt anId = 0; anId < aDim; anId++)
-            ADDMSG(MYDEBUG,"\t"<<aCoord2[anId]);
-          ADDMSG(MYDEBUG,"}\n");
-#endif
-#ifndef _DEBUG_
-          BEGMSG(MYDEBUG,"anIsSatisfy = "<<anIsSatisfy<<"\n");
+          if(SALOME::VerbosityActivated()){
+            TCCoordSlice aCoord = GetCoord(aRefId);
+            INITMSG(aRefId + 1<<": aCoord = {");
+            TInt aDim = aCoord.size();
+            for(TInt anId = 0; anId < aDim; anId++)
+              ADDMSG("\t"<<aCoord[anId]);
+            const TCCoordSlice& aCoord2 = theRefCoord[aRefId];
+            ADDMSG("}\t!=\taCoord2 = {");
+            for(TInt anId = 0; anId < aDim; anId++)
+              ADDMSG("\t"<<aCoord2[anId]);
+            ADDMSG("}\n");
+          }
+
+          BEGMSG("anIsSatisfy = "<<anIsSatisfy<<"\n");
           return anIsSatisfy;
-#endif
         }
       }
     }
 
-    BEGMSG(MYDEBUG,"anIsSatisfy = "<<anIsSatisfy<<"\n");
+    BEGMSG("anIsSatisfy = "<<anIsSatisfy<<"\n");
     return anIsSatisfy;
   }
 
@@ -260,7 +251,7 @@ namespace MED
                   TGaussCoord&           theGaussCoord,
                   EModeSwitch            theMode)
   {
-    INITMSG(MYDEBUG,"TShapeFun::Eval"<<std::endl);
+    INITMSG("TShapeFun::Eval"<<std::endl);
 
     if(IsSatisfy(theRef)){
       const PMeshInfo& aMeshInfo = theCellInfo.GetMeshInfo();
@@ -280,7 +271,7 @@ namespace MED
       InitFun(theRef,theGauss,aFun);
       TInt aConnDim = theCellInfo.GetConnDim();
 
-      INITMSG(MYDEBUG,"aDim = "<<aDim<<
+      INITMSG("aDim = "<<aDim<<
               "; aNbGauss = "<<aNbGauss<<
               "; aNbElem = "<<aNbElem<<
               "; aNbNodes = "<<theNodeInfo.GetNbElem()<<
@@ -306,33 +297,34 @@ namespace MED
         }
       }
 
-#ifdef _DEBUG_
+      if (SALOME::VerbosityActivated())
       {
-        INITMSG(MYVALUEDEBUG,"theGauss: ");
+        INITMSG("theGauss: ");
         for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
           TCCoordSlice aCoordSlice = theGauss[aGaussId];
-          ADDMSG(MYVALUEDEBUG,"{");
+          ADDMSG("{");
           for(TInt aDimId = 0; aDimId < aDim; aDimId++){
-            ADDMSG(MYVALUEDEBUG,aCoordSlice[aDimId]<<" ");
+            ADDMSG(aCoordSlice[aDimId]<<" ");
           }
-          ADDMSG(MYVALUEDEBUG,"} ");
+          ADDMSG("} ");
         }
-        ADDMSG(MYVALUEDEBUG,std::endl);
-      }
-      for(TInt anElemId = 0; anElemId < aNbElem; anElemId++){
-        TCCoordSliceArr aCoordSliceArr = theGaussCoord.GetCoordSliceArr(anElemId);
-        INITMSG(MYVALUEDEBUG,"");
-        for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-          TCCoordSlice aCoordSlice = aCoordSliceArr[aGaussId];
-          ADDMSG(MYVALUEDEBUG,"{");
-          for(TInt aDimId = 0; aDimId < aDim; aDimId++){
-            ADDMSG(MYVALUEDEBUG,aCoordSlice[aDimId]<<" ");
+        ADDMSG(std::endl);
+
+        for(TInt anElemId = 0; anElemId < aNbElem; anElemId++){
+          TCCoordSliceArr aCoordSliceArr = theGaussCoord.GetCoordSliceArr(anElemId);
+          INITMSG("");
+          for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+            TCCoordSlice aCoordSlice = aCoordSliceArr[aGaussId];
+            ADDMSG("{");
+            for(TInt aDimId = 0; aDimId < aDim; aDimId++){
+              ADDMSG(aCoordSlice[aDimId]<<" ");
+            }
+            ADDMSG("} ");
           }
-          ADDMSG(MYVALUEDEBUG,"} ");
+          ADDMSG(std::endl);
         }
-        ADDMSG(MYVALUEDEBUG,std::endl);
       }
-#endif
+
       return true;
     }
 
@@ -1727,7 +1719,7 @@ namespace MED
                   const TElemNum& theElemNum,
                   EModeSwitch theMode)
   {
-    INITMSG(MYDEBUG,"GetGaussCoord3D\n");
+    INITMSG("GetGaussCoord3D\n");
 
     if(theGaussInfo.myGeom == theCellInfo.myGeom){
       EGeometrieElement aGeom = theGaussInfo.myGeom;
@@ -1744,7 +1736,7 @@ namespace MED
 
       switch(aGeom){
       case eSEG2: {
-        INITMSG(MYDEBUG,"eSEG2"<<std::endl);
+        INITMSG("eSEG2"<<std::endl);
 
         if(TSeg2a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
           return true;
@@ -1752,7 +1744,7 @@ namespace MED
         break;
       }
       case eSEG3: {
-        INITMSG(MYDEBUG,"eSEG3"<<std::endl);
+        INITMSG("eSEG3"<<std::endl);
 
         if(TSeg3a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
           return true;
@@ -1760,7 +1752,7 @@ namespace MED
         break;
       }
       case eTRIA3: {
-        INITMSG(MYDEBUG,"eTRIA3"<<std::endl);
+        INITMSG("eTRIA3"<<std::endl);
 
         if(TTria3a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
           return true;
@@ -1771,7 +1763,7 @@ namespace MED
         break;
       }
       case eTRIA6: {
-        INITMSG(MYDEBUG,"eTRIA6"<<std::endl);
+        INITMSG("eTRIA6"<<std::endl);
 
         if(TTria6a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
           return true;
@@ -1782,7 +1774,7 @@ namespace MED
         break;
       }
       case eQUAD4: {
-        INITMSG(MYDEBUG,"eQUAD4"<<std::endl);
+        INITMSG("eQUAD4"<<std::endl);
 
         if(TQuad4a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
           return true;
@@ -1793,7 +1785,7 @@ namespace MED
         break;
       }
       case eQUAD8: {
-        INITMSG(MYDEBUG,"eQUAD8"<<std::endl);
+        INITMSG("eQUAD8"<<std::endl);
 
         if(TQuad8a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
           return true;
@@ -1804,7 +1796,7 @@ namespace MED
         break;
       }
       case eQUAD9: {
-        INITMSG(MYDEBUG,"eQUAD9"<<std::endl);
+        INITMSG("eQUAD9"<<std::endl);
 
         if(TQuad9a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
           return true;
@@ -1815,7 +1807,7 @@ namespace MED
         break;
       }
       case eTETRA4: {
-        INITMSG(MYDEBUG,"eTETRA4"<<std::endl);
+        INITMSG("eTETRA4"<<std::endl);
 
         if(TTetra4a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
           return true;
@@ -1826,7 +1818,7 @@ namespace MED
         break;
       }
       case ePYRA5: {
-        INITMSG(MYDEBUG,"ePYRA5"<<std::endl);
+        INITMSG("ePYRA5"<<std::endl);
 
         if(TPyra5a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
           return true;
@@ -1837,7 +1829,7 @@ namespace MED
         break;
       }
       case ePENTA6: {
-        INITMSG(MYDEBUG,"ePENTA6"<<std::endl);
+        INITMSG("ePENTA6"<<std::endl);
 
         if(TPenta6a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
           return true;
@@ -1848,7 +1840,7 @@ namespace MED
         break;
       }
       case eHEXA8: {
-        INITMSG(MYDEBUG,"eHEXA8"<<std::endl);
+        INITMSG("eHEXA8"<<std::endl);
 
         if(THexa8a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
           return true;
@@ -1859,7 +1851,7 @@ namespace MED
         break;
       }
       case eTETRA10: {
-        INITMSG(MYDEBUG,"eTETRA10"<<std::endl);
+        INITMSG("eTETRA10"<<std::endl);
 
         if(TTetra10a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
           return true;
@@ -1870,7 +1862,7 @@ namespace MED
         break;
       }
       case ePYRA13: {
-        INITMSG(MYDEBUG,"ePYRA13"<<std::endl);
+        INITMSG("ePYRA13"<<std::endl);
 
         if(TPyra13a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
           return true;
@@ -1881,7 +1873,7 @@ namespace MED
         break;
       }
       case ePENTA15: {
-        INITMSG(MYDEBUG,"ePENTA15"<<std::endl);
+        INITMSG("ePENTA15"<<std::endl);
 
         if(TPenta15a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
           return true;
@@ -1892,7 +1884,7 @@ namespace MED
         break;
       }
       case eHEXA20: {
-        INITMSG(MYDEBUG,"eHEXA20"<<std::endl);
+        INITMSG("eHEXA20"<<std::endl);
 
         if(THexa20a().Eval(theCellInfo,theNodeInfo,theElemNum,aRefSlice,aGaussSlice,theGaussCoord,theMode))
           return true;
@@ -1903,7 +1895,7 @@ namespace MED
         break;
       }
       default:
-        INITMSG(MYDEBUG,"eNONE"<<std::endl);
+        INITMSG("eNONE"<<std::endl);
         return false;
       }
     }
@@ -1919,7 +1911,7 @@ namespace MED
                 const TElemNum& theElemNum,
                 EModeSwitch theMode)
   {
-    INITMSG(MYDEBUG,"GetBaryCenter\n");
+    INITMSG("GetBaryCenter\n");
     const PMeshInfo& aMeshInfo = theCellInfo.GetMeshInfo();
     TInt aDim = aMeshInfo->GetDim();
     static TInt aNbGauss = 1;
@@ -1935,7 +1927,7 @@ namespace MED
 
     TInt aConnDim = theCellInfo.GetConnDim();
 
-    INITMSGA(MYDEBUG,0,
+    INITMSGA(0,
              "- aDim = "<<aDim<<
              "; aNbGauss = "<<aNbGauss<<
              "; aNbElem = "<<aNbElem<<
@@ -1965,21 +1957,22 @@ namespace MED
       }
     }
 
-#ifdef _DEBUG_
-    for(TInt anElemId = 0; anElemId < aNbElem; anElemId++){
-      TCoordSliceArr aCoordSliceArr = theGaussCoord.GetCoordSliceArr(anElemId);
-      INITMSG(MYVALUEDEBUG,"");
-      for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
-        TCoordSlice& aCoordSlice = aCoordSliceArr[aGaussId];
-        ADDMSG(MYVALUEDEBUG,"{");
-        for(TInt aDimId = 0; aDimId < aDim; aDimId++){
-          ADDMSG(MYVALUEDEBUG,aCoordSlice[aDimId]<<" ");
+    if (SALOME::VerbosityActivated())
+    {
+      for(TInt anElemId = 0; anElemId < aNbElem; anElemId++){
+        TCoordSliceArr aCoordSliceArr = theGaussCoord.GetCoordSliceArr(anElemId);
+        INITMSG("");
+        for(TInt aGaussId = 0; aGaussId < aNbGauss; aGaussId++){
+          TCoordSlice& aCoordSlice = aCoordSliceArr[aGaussId];
+          ADDMSG("{");
+          for(TInt aDimId = 0; aDimId < aDim; aDimId++){
+            ADDMSG(aCoordSlice[aDimId]<<" ");
+          }
+          ADDMSG("} ");
         }
-        ADDMSG(MYVALUEDEBUG,"} ");
+        ADDMSG(std::endl);
       }
-      ADDMSG(MYVALUEDEBUG,std::endl);
     }
-#endif
 
     return true;
   }
@@ -1992,7 +1985,7 @@ namespace MED
                 const TElemNum& theElemNum,
                 EModeSwitch theMode)
   {
-    INITMSG(MYDEBUG,"GetBaryCenter\n");
+    INITMSG("GetBaryCenter\n");
     const PMeshInfo& aMeshInfo = thePolygoneInfo.GetMeshInfo();
     TInt aDim = aMeshInfo->GetDim();
     static TInt aNbGauss = 1;
@@ -2006,7 +1999,7 @@ namespace MED
 
     theGaussCoord.Init(aNbElem,aNbGauss,aDim,theMode);
 
-    INITMSGA(MYDEBUG,0,
+    INITMSGA(0,
              "- aDim = "<<aDim<<
              "; aNbGauss = "<<aNbGauss<<
              "; aNbElem = "<<aNbElem<<
@@ -2050,7 +2043,7 @@ namespace MED
                 const TElemNum& theElemNum,
                 EModeSwitch theMode)
   {
-    INITMSG(MYDEBUG,"GetBaryCenter\n");
+    INITMSG("GetBaryCenter\n");
     const PMeshInfo& aMeshInfo = thePolyedreInfo.GetMeshInfo();
     TInt aDim = aMeshInfo->GetDim();
     static TInt aNbGauss = 1;
@@ -2064,7 +2057,7 @@ namespace MED
 
     theGaussCoord.Init(aNbElem,aNbGauss,aDim,theMode);
 
-    INITMSGA(MYDEBUG,0,
+    INITMSGA(0,
              "- aDim = "<<aDim<<
              "; aNbGauss = "<<aNbGauss<<
              "; aNbElem = "<<aNbElem<<
index 21887b7fc3abd9c8326228845e7d308e210dbfef..87ace10afeec225d9c7582708d84727b590aa248 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 9e0d9e39ce8dc00b9f36e879e692ca1f92bc3f3b..e650cd5cb05dc6243f01235181a02d7436f3a866 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index bcf2659da602299f1944d0c020864a4bb6212385..9c52c90ba3816c86744120117962314f81458be4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -31,9 +31,7 @@
 #include <valarray>
 #include <stdexcept>
 
-//#if defined(_DEBUG_)
 #  define MED_TCSLICE_CHECK_RANGE
-//#endif
 
 namespace MED
 {
index 1b0cbd59ef66cc274b99c077a640a109d21bae4a..7bc99345ff11ac92d7c91920ef7f43f42ec793c0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -141,7 +141,8 @@ namespace MED
   TElemInfo
   ::SetElemNum(TInt theId, TInt theVal)
   {
-    (*myElemNum)[theId] = theVal;
+    if ( IsElemNum() )
+      (*myElemNum)[theId] = theVal;
   }
 
   //---------------------------------------------------------------
index e71db48da5069d8984877d0f7d0f86d4f3176f4a..08e51e2bd99ae2986660bc837e0f029cc32e83dc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
diff --git a/src/MEDWrapper/MED_TFile.hxx b/src/MEDWrapper/MED_TFile.hxx
new file mode 100644 (file)
index 0000000..c03b9fa
--- /dev/null
@@ -0,0 +1,97 @@
+// Copyright (C) 2021-2024  CEA, EDF
+//
+// 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
+//
+
+#pragma once
+
+#include "MED_Wrapper.hxx"
+#include "MED_WrapperDef.hxx"
+
+namespace MED
+{
+  class TFileInternal
+  {
+  public:
+    virtual ~TFileInternal() = default;
+    virtual void Open(EModeAcces theMode, TErr* theErr = nullptr) = 0;
+    virtual void Close() = 0;
+    virtual const TIdt& Id() const = 0;
+  };
+
+  class MEDWRAPPER_EXPORT MEDIDTHoder : public TFileInternal
+  {
+  protected:
+    MEDIDTHoder(bool *isClosedStatus = nullptr):_isClosedStatus(isClosedStatus) { }
+    void UnRefFid()
+    {
+      if (--myCount == 0)
+      {
+        MEDfileClose(myFid);
+        myIsClosed = true;
+        if(_isClosedStatus)
+          *_isClosedStatus = true;
+      }
+    }
+  public:
+    const TIdt& Id() const override;
+    ~MEDIDTHoder() { this->UnRefFid(); }
+    void Close() override { this->UnRefFid(); }
+  protected:
+    TInt myCount = 0;
+    TIdt myFid = 0;
+    bool myIsClosed = false;
+    bool *_isClosedStatus = nullptr;
+  };
+
+  class MEDWRAPPER_EXPORT TFileDecorator : public TFileInternal
+  {
+  public:
+    TFileDecorator(TFileInternal *effective):_effective(effective) { }
+    void Open(EModeAcces theMode, TErr* theErr = nullptr) override { if(_effective) _effective->Open(theMode,theErr); }
+    void Close() override { if(_effective) _effective->Close(); }
+    const TIdt& Id() const override { if(_effective) return _effective->Id(); EXCEPTION(std::runtime_error, "TFileDecorator - GetFid() : no effective TFile !"); }
+    ~TFileDecorator() { delete _effective; }
+  private:
+    TFileInternal *_effective = nullptr;
+  };
+
+  class MEDWRAPPER_EXPORT TMemFile : public MEDIDTHoder
+  {
+  public:
+    TMemFile(void **data, std::size_t *sz, bool* isClosedStatus):MEDIDTHoder(isClosedStatus),_data(data),_sz(sz) { memfile.app_image_ptr=*data; memfile.app_image_size=*sz; }
+    ~TMemFile() { UnRefFid(); if(myIsClosed) { *_data = memfile.app_image_ptr; *_sz = memfile.app_image_size; } }
+    void Open(EModeAcces theMode, TErr* theErr = nullptr) override;
+    void *getData() const { return memfile.app_image_ptr; }
+    std::size_t getSize() const { return memfile.app_image_size; }
+  private:
+    void **_data = nullptr;
+    std::size_t * _sz = nullptr;
+    med_memfile memfile = MED_MEMFILE_INIT;
+  };
+
+  class MEDWRAPPER_EXPORT TFile : public MEDIDTHoder
+  {
+  public:
+    TFile(const std::string& theFileName, TInt theMajor=-1, TInt theMinor=-1);
+    void Open(EModeAcces theMode, TErr* theErr = nullptr) override;
+  protected:
+    std::string myFileName;
+    TInt myMajor;
+    TInt myMinor;
+  };
+}
index c2375c546e4489c74e342f4d0affe0ec370b48cf..5ab4bd3d4c5217ef0ddcbaa91b465cd5cded2e39 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -204,10 +204,10 @@ namespace MED
       }
     }
 
-    TTFamilyInfo(const PMeshInfo& theMeshInfo,
-                 TInt theNbGroup, 
-                 TInt theNbAttr,
-                 TInt theId,
+    TTFamilyInfo(const PMeshInfo&   theMeshInfo,
+                 TInt               theNbGroup,
+                 TInt               theNbAttr,
+                 TInt               theId,
                  const std::string& theValue):
       TNameInfoBase(theValue)
     {
@@ -224,13 +224,13 @@ namespace MED
       myAttrDesc.resize(theNbAttr*GetDESCLength()+1);
     }
 
-    TTFamilyInfo(const PMeshInfo& theMeshInfo,
-                 const std::string& theValue,
-                 TInt theId,
-                 const TStringSet& theGroupNames, 
-                 const TStringVector& theAttrDescs, 
-                 const TIntVector& theAttrIds, 
-                 const TIntVector& theAttrVals):
+    TTFamilyInfo(const PMeshInfo&     theMeshInfo,
+                 const std::string&   theValue,
+                 TInt                 theId,
+                 const TStringSet&    theGroupNames,
+                 const TStringVector& theAttrDescs,
+                 const TIntVector&    theAttrIds,
+                 const TIntVector&    theAttrVals):
       TNameInfoBase(theValue)
     {
       myMeshInfo = theMeshInfo;
@@ -262,8 +262,8 @@ namespace MED
 
     virtual
     std::string
-    GetGroupName(TInt theId) const 
-    { 
+    GetGroupName(TInt theId) const
+    {
       return GetString(theId, GetLNOMLength(), myGroupNames);
     }
 
@@ -329,10 +329,10 @@ namespace MED
       }
     }
 
-    TTElemInfo(const PMeshInfo& theMeshInfo, 
-               TInt theNbElem,
-               EBooleen theIsElemNum,
-               EBooleen theIsElemNames)
+    TTElemInfo(const PMeshInfo& theMeshInfo,
+               TInt             theNbElem,
+               EBooleen         theIsElemNum,
+               EBooleen         theIsElemNames)
     {
       myMeshInfo = theMeshInfo;
 
@@ -351,26 +351,26 @@ namespace MED
         myElemNames.reset(new TString(theNbElem*GetPNOMLength() + 1));
       else
         myElemNames.reset(new TString());
-   }
-    
-    TTElemInfo(const PMeshInfo& theMeshInfo, 
-               TInt theNbElem,
-               const TIntVector& theFamilyNums,
-               const TIntVector& theElemNums,
+    }
+
+    TTElemInfo(const PMeshInfo&     theMeshInfo,
+               TInt                 theNbElem,
+               const TIntVector&    theFamilyNums,
+               const TIntVector&    theElemNums,
                const TStringVector& theElemNames)
     {
       myMeshInfo = theMeshInfo;
-      
+
       myNbElem = theNbElem;
       myFamNum.reset(new TElemNum(theNbElem));
       myIsFamNum = eFAUX; // is set to eVRAI in SetFamNum()
-      
+
       myIsElemNum = theElemNums.size()? eVRAI: eFAUX;
       if(myIsElemNum)
         myElemNum.reset(new TElemNum(theNbElem));
       else
         myElemNum.reset(new TElemNum());
-      
+
       myIsElemNames = theElemNames.size()? eVRAI: eFAUX;
       if(myIsElemNames)
         myElemNames.reset(new TString(theNbElem*GetPNOMLength() + 1));
@@ -671,7 +671,7 @@ namespace MED
       myEntity = theInfo->GetEntity();
       myGeom = theInfo->GetGeom();
       myConnMode  = theInfo->GetConnMode();
-      
+
       TInt aConnDim = GetNbNodes(myGeom);
       TInt aNbConn = GetNbConn(myGeom, myEntity, myMeshInfo->myDim);
       myConn.reset(new TElemNum(myNbElem * aNbConn));
@@ -684,14 +684,14 @@ namespace MED
       }
     }
 
-    TTCellInfo(const PMeshInfo& theMeshInfo, 
-               EEntiteMaillage theEntity, 
+    TTCellInfo(const PMeshInfo&  theMeshInfo,
+               EEntiteMaillage   theEntity,
                EGeometrieElement theGeom,
-               TInt theNbElem,
-               EConnectivite theConnMode,
-               EBooleen theIsElemNum,
-               EBooleen theIsElemNames,
-               EModeSwitch theMode):
+               TInt              theNbElem,
+               EConnectivite     theConnMode,
+               EBooleen          theIsElemNum,
+               EBooleen          theIsElemNames,
+               EModeSwitch       theMode):
       TModeSwitchInfo(theMode),
       TElemInfoBase(theMeshInfo,
                     theNbElem,
@@ -705,16 +705,16 @@ namespace MED
       TInt aNbConn = GetNbConn(theGeom, myEntity, theMeshInfo->myDim);
       myConn.reset(new TElemNum(theNbElem * aNbConn));
     }
-    
-    TTCellInfo(const PMeshInfo& theMeshInfo, 
-               EEntiteMaillage theEntity, 
-               EGeometrieElement theGeom,
-               const TIntVector& theConnectivities,
-               EConnectivite theConnMode,
-               const TIntVector& theFamilyNums,
-               const TIntVector& theElemNums,
+
+    TTCellInfo(const PMeshInfo&     theMeshInfo,
+               EEntiteMaillage      theEntity,
+               EGeometrieElement    theGeom,
+               const TIntVector&    theConnectivities,
+               EConnectivite        theConnMode,
+               const TIntVector&    theFamilyNums,
+               const TIntVector&    theElemNums,
                const TStringVector& theElemNames,
-               EModeSwitch theMode):
+               EModeSwitch          theMode):
       TModeSwitchInfo(theMode),
       TElemInfoBase(theMeshInfo,
                     (TInt)theConnectivities.size() / GetNbNodes(theGeom),
@@ -737,10 +737,10 @@ namespace MED
       }
     }
 
-    virtual 
+    virtual
     TInt
-    GetConnDim() const 
-    { 
+    GetConnDim() const
+    {
       return GetNbConn(myGeom, myEntity, myMeshInfo->myDim);
     }
 
@@ -779,7 +779,7 @@ namespace MED
       myDiameters.resize( theNbElem );
     }
 
-    TTBallInfo(const PMeshInfo&  theMeshInfo, 
+    TTBallInfo(const PMeshInfo&  theMeshInfo,
                const TIntVector& theNodes,
                TFloatVector&     theDiameters,
                const TIntVector& theFamilyNums,
@@ -804,8 +804,8 @@ namespace MED
   };
 
   //---------------------------------------------------------------
-  struct TTFieldInfo: 
-    virtual TFieldInfo, 
+  struct TTFieldInfo:
+    virtual TFieldInfo,
     virtual TTNameInfo
   {
     typedef TTNameInfo TNameInfoBase;
@@ -832,12 +832,12 @@ namespace MED
       myNbRef = theInfo->GetNbRef();
     }
 
-    TTFieldInfo(const PMeshInfo& theMeshInfo, 
-                TInt theNbComp,
-                ETypeChamp theType,
+    TTFieldInfo(const PMeshInfo&   theMeshInfo,
+                TInt               theNbComp,
+                ETypeChamp         theType,
                 const std::string& theValue,
-                EBooleen theIsLocal,
-                TInt theNbRef):
+                EBooleen           theIsLocal,
+                TInt               theNbRef):
       TNameInfoBase(theValue)
     {
       myMeshInfo = theMeshInfo;
@@ -925,15 +925,15 @@ namespace MED
       myGeom2Gauss = theInfo->GetGeom2Gauss();
     }
 
-    TTTimeStampInfo(const PFieldInfo& theFieldInfo, 
-                    EEntiteMaillage theEntity,
-                    const TGeom2Size& theGeom2Size,
+    TTTimeStampInfo(const PFieldInfo&    theFieldInfo,
+                    EEntiteMaillage      theEntity,
+                    const TGeom2Size&    theGeom2Size,
                     const TGeom2NbGauss& theGeom2NbGauss,
-                    TInt theNumDt,
-                    TInt /*theNumOrd*/,
-                    TFloat theDt,
-                    const std::string& theUnitDt,
-                    const TGeom2Gauss& theGeom2Gauss)
+                    TInt                 theNumDt,
+                    TInt               /*theNumOrd*/,
+                    TFloat               theDt,
+                    const std::string&   theUnitDt,
+                    const TGeom2Gauss&   theGeom2Gauss)
     {
       myFieldInfo = theFieldInfo;
 
@@ -951,10 +951,10 @@ namespace MED
       myGeom2Gauss = theGeom2Gauss;
     }
 
-    virtual 
+    virtual
     std::string
     GetUnitDt() const
-    { 
+    {
       return GetString(0,GetPNOMLength(),myUnitDt);
     }
 
@@ -974,7 +974,7 @@ namespace MED
     typedef TTNameInfo TNameInfoBase;
 
     TTProfileInfo(const TProfileInfo::TInfo& theInfo,
-                  EModeProfil theMode):
+                  EModeProfil                theMode):
       TNameInfoBase(boost::get<0>(theInfo))
     {
       TInt aSize = boost::get<1>(theInfo);
@@ -987,9 +987,9 @@ namespace MED
   template<class TMeshValueType>
   struct TTTimeStampValue: virtual TTimeStampValue<TMeshValueType>
   {
-    TTTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
+    TTTimeStampValue(const PTimeStampInfo&      theTimeStampInfo,
                      const PTimeStampValueBase& theInfo,
-                     ETypeChamp theTypeChamp)
+                     ETypeChamp                 theTypeChamp)
     {
       typedef TTimeStampValue<TMeshValueType> TCompatible;
       if(TCompatible* aCompatible = dynamic_cast<TCompatible*>(theInfo.get())){
@@ -1003,9 +1003,9 @@ namespace MED
     }
 
     TTTimeStampValue(const PTimeStampInfo& theTimeStampInfo,
-                     ETypeChamp theTypeChamp,
-                     const TGeom2Profile& theGeom2Profile,
-                     EModeSwitch theMode):
+                     ETypeChamp            theTypeChamp,
+                     const TGeom2Profile&  theGeom2Profile,
+                     EModeSwitch           theMode):
       TModeSwitchInfo(theMode)
     {
       this->myTimeStampInfo = theTimeStampInfo;
@@ -1031,44 +1031,44 @@ namespace MED
           aNbElem = aProfileInfo->GetSize();
 
         TInt aNbGauss = theTimeStampInfo->GetNbGauss(aGeom);
-        
+
         this->GetMeshValue(aGeom).Allocate(aNbElem,aNbGauss,aNbComp);
       }
     }
 
-    virtual 
+    virtual
     size_t
     GetValueSize(EGeometrieElement theGeom) const
     {
       return this->GetMeshValue(theGeom).GetSize();
     }
 
-    virtual 
+    virtual
     size_t
     GetNbVal(EGeometrieElement theGeom) const
     {
       return this->GetMeshValue(theGeom).GetNbVal();
     }
 
-    virtual 
+    virtual
     size_t
     GetNbGauss(EGeometrieElement theGeom) const
     {
       return this->GetMeshValue(theGeom).GetNbGauss();
     }
 
-    virtual 
+    virtual
     void
     AllocateValue(EGeometrieElement theGeom,
-                  TInt theNbElem,
-                  TInt theNbGauss,
-                  TInt theNbComp,
-                  EModeSwitch theMode = eFULL_INTERLACE)
+                  TInt              theNbElem,
+                  TInt              theNbGauss,
+                  TInt              theNbComp,
+                  EModeSwitch       theMode = eFULL_INTERLACE)
     {
       this->GetMeshValue(theGeom).Allocate(theNbElem,theNbGauss,theNbComp,theMode);
     }
-    
-    virtual 
+
+    virtual
     unsigned char*
     GetValuePtr(EGeometrieElement theGeom)
     {
@@ -1080,13 +1080,13 @@ namespace MED
   struct TTGrilleInfo:
     virtual TGrilleInfo
   {
-    TTGrilleInfo(const PMeshInfo& theMeshInfo,
+    TTGrilleInfo(const PMeshInfo&   theMeshInfo,
                  const PGrilleInfo& theInfo)
     {
       myMeshInfo        = theMeshInfo;
 
       myCoord           = theInfo->GetNodeCoord();
-      
+
       myGrilleType      = theInfo->GetGrilleType();
 
       myCoordNames      = theInfo->myCoordNames;
@@ -1105,9 +1105,9 @@ namespace MED
       myFamNum      = theInfo->myFamNum;
     }
 
-    TTGrilleInfo(const PMeshInfo& theMeshInfo,
+    TTGrilleInfo(const PMeshInfo&   theMeshInfo,
                  const EGrilleType& type,
-                 const TInt nnoeuds)
+                 const TInt         nnoeuds)
     {
       myMeshInfo        = theMeshInfo;
       TInt aSpaceDim = theMeshInfo->GetSpaceDim();
@@ -1123,7 +1123,7 @@ namespace MED
       myFamNumNode.resize(nnoeuds);
     }
 
-    TTGrilleInfo(const PMeshInfo& theMeshInfo,
+    TTGrilleInfo(const PMeshInfo&   theMeshInfo,
                  const EGrilleType& type)
     {
       myMeshInfo        = theMeshInfo;
@@ -1138,8 +1138,8 @@ namespace MED
       myGrilleStructure.resize(aSpaceDim);
     }
 
-    TTGrilleInfo(const PMeshInfo& theMeshInfo,
-                 const EGrilleType& type,
+    TTGrilleInfo(const PMeshInfo&       theMeshInfo,
+                 const EGrilleType&     type,
                  const MED::TIntVector& nbNodeVec)
     {
       myMeshInfo        = theMeshInfo;
@@ -1175,9 +1175,9 @@ namespace MED
     }
 
     virtual
-    std::string 
-    GetCoordUnit(TInt theId) const 
-    { 
+    std::string
+    GetCoordUnit(TInt theId) const
+    {
       return GetString(theId,GetPNOMLength(),myCoordUnits);
     }
 
index 365d7709156441d65d1ce86798c95eb1a9597ed6..3119dfa745f6cfa8e752a96a37f51ae5cca004f7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #include "MED_Utilities.hxx"
 #include "MED_Common.hxx"
 
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-#else
-//static int MYDEBUG = 0; // unused in release mode
-#endif
-
 int MED::PrefixPrinter::myCounter = 0;
 
 MED::PrefixPrinter::PrefixPrinter(bool theIsActive):
@@ -36,7 +30,8 @@ MED::PrefixPrinter::PrefixPrinter(bool theIsActive):
 {
   if(myIsActive)
     myCounter++;
-  MSG(MYDEBUG,"MED::PrefixPrinter::PrefixPrinter(...)- "<<myCounter);
+    
+  MSG("MED::PrefixPrinter::PrefixPrinter(...)- "<<myCounter);
 }
 
 MED::PrefixPrinter::~PrefixPrinter() noexcept(false)
index 9000713242baa756fb216c18c0833a4bd202bc92..2caff59565a35491e26ce01ba3e83bd41781de67 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -24,6 +24,7 @@
 #define MED_Utilities_HeaderFile
 
 #include "MED_WrapperDef.hxx"
+#include "utilities.h"
 
 #include <iostream>
 #include <sstream>
@@ -45,19 +46,11 @@ namespace MED
   };
 }
 
-#ifdef _DEBUG_
-  #define MSG(deb,msg) if(deb) std::cout<<MED::PrefixPrinter::GetPrefix()<<msg<<" ("<<__FILE__<<" ["<<__LINE__<<"])\n"
-  #define BEGMSG(deb,msg) if(deb) std::cout<<MED::PrefixPrinter::GetPrefix()<<msg
-  #define INITMSGA(deb,lev,msg) MED::PrefixPrinter aPrefixPrinter_##lev(deb); BEGMSG(deb,msg)
-  #define INITMSG(deb,msg) INITMSGA(deb,,msg)
-  #define ADDMSG(deb,msg) if(deb) std::cout<<msg
-#else // _DEBUG_
-  #define MSG(deb,msg)
-  #define BEGMSG(deb,msg)
-  #define INITMSGA(deb,lev,msg)
-  #define INITMSG(deb,msg)
-  #define ADDMSG(deb,msg)
-#endif // _DEBUG_
+#define MSG(msg) if(SALOME::VerbosityActivated()) std::cout<<MED::PrefixPrinter::GetPrefix()<<msg<<" ("<<__FILE__<<" ["<<__LINE__<<"])\n"; else (void)0
+#define BEGMSG(msg) if(SALOME::VerbosityActivated()) std::cout<<MED::PrefixPrinter::GetPrefix()<<msg; else (void)0
+#define INITMSGA(lev,msg) if(SALOME::VerbosityActivated()) { MED::PrefixPrinter aPrefixPrinter_##lev(true); BEGMSG(msg); } else (void)0
+#define INITMSG(msg) INITMSGA(,msg)
+#define ADDMSG(msg) if(SALOME::VerbosityActivated()) std::cout<<msg; else (void)0
 
 #ifndef EXCEPTION
 
index cbf16ac2533d88664d34c1f14d0c9d5935762241..f0b0577fcc0f95760022db667f1627c9874e837c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -26,9 +26,7 @@
 #include <vector>
 #include <stdexcept>
 
-//#if defined(_DEBUG_)
 #  define MED_TVECTOR_CHECK_RANGE
-//#endif
 
 namespace MED
 {
index 5b132c0518a0359f52c8aaf71336c51d440f655b..1510e3c04ebdad1f24f2d35a0175e5a82e64c44d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -23,7 +23,9 @@
 #include "MED_Wrapper.hxx"
 #include "MED_TStructures.hxx"
 #include "MED_Utilities.hxx"
+#include "MED_TFile.hxx"
 
+#include "MEDFileUtilities.hxx"
 #include <med.h>
 #include <med_err.h>
 #include <med_proto.h>
 
 #include <boost/version.hpp>
 
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-static int MYVALUEDEBUG = 0;
-#else
-// static int MYDEBUG = 0;      // unused in release mode
-// static int MYVALUEDEBUG = 0; // unused in release mode
-#endif
-
 namespace MED
 {
   //---------------------------------------------------------------
@@ -54,13 +48,13 @@ namespace MED
 #else
     boost::detail::thread::lock_ops<TWrapper::TMutex>::lock(myWrapper->myMutex);
 #endif
-    INITMSG(MYDEBUG, "TLockProxy() - this -"<<this<<"; myWrapper = "<<myWrapper<<std::endl);
+    INITMSG("TLockProxy() - this -"<<this<<"; myWrapper = "<<myWrapper<<std::endl);
   }
 
   TLockProxy
   ::~TLockProxy()
   {
-    INITMSG(MYDEBUG, "~TLockProxy() - this -"<<this<<"; myWrapper = "<<myWrapper<<std::endl);
+    INITMSG("~TLockProxy() - this -"<<this<<"; myWrapper = "<<myWrapper<<std::endl);
 #if BOOST_VERSION >= 103500
     myWrapper->myMutex.unlock();
 #else
@@ -76,93 +70,78 @@ namespace MED
   }
 
   //---------------------------------------------------------------
-  class TFile
+  const TIdt& MEDIDTHoder::Id() const
   {
-    TFile();
-    TFile(const TFile&);
+    if (myFid < 0)
+      EXCEPTION(std::runtime_error, "TFile - GetFid() < 0");
+    return myFid;
+  }
 
-  public:
-    TFile(const std::string& theFileName, TInt theMajor=-1, TInt theMinor=-1):
-      myCount(0),
-      myFid(0),
-      myFileName(theFileName),
-      myMajor(theMajor),
-      myMinor(theMinor)
+  void TMemFile::Open(EModeAcces theMode, TErr* theErr)
+  {
+    if (this->myCount++ == 0)
     {
-      if ((myMajor < 0) || (myMajor > MED_MAJOR_NUM)) myMajor = MED_MAJOR_NUM;
-      if ((myMinor < 0) || (myMajor == MED_MAJOR_NUM && myMinor > MED_MINOR_NUM)) myMinor = MED_MINOR_NUM;
+      std::string dftFileName = MEDCoupling::MEDFileWritableStandAlone::GenerateUniqueDftFileNameInMem();
+      med_access_mode modeTmp(MED_ACC_CREAT);
+      if(memfile.app_image_ptr)
+        modeTmp = med_access_mode(theMode);
+      myFid = MEDmemFileOpen(dftFileName.c_str(),&memfile,MED_FALSE,modeTmp);
     }
+    if (theErr)
+      *theErr = TErr(myFid);
+    else if (myFid < 0)
+      EXCEPTION(std::runtime_error,"TMemFile - MEDmemFileOpen");
+  }
 
-    ~TFile()
-    {
-      Close();
-    }
+  TFile::TFile(const std::string& theFileName, TInt theMajor, TInt theMinor):
+    myFileName(theFileName),
+    myMajor(theMajor),
+    myMinor(theMinor)
+  {
+    if ((myMajor < 0) || (myMajor > MED_MAJOR_NUM)) myMajor = MED_MAJOR_NUM;
+    if ((myMinor < 0) || (myMajor == MED_MAJOR_NUM && myMinor > MED_MINOR_NUM)) myMinor = MED_MINOR_NUM;
+  }
 
-    void
-    Open(EModeAcces theMode,
-         TErr* theErr = NULL)
-    {
-      if (myCount++ == 0) {
-        const char* aFileName = myFileName.c_str();
+  void TFile::Open(EModeAcces theMode, TErr* theErr)
+  {
+    if (myCount++ == 0) {
+      const char* aFileName = myFileName.c_str();
 #ifdef WIN32
-        if (med_access_mode(theMode) == MED_ACC_RDWR) {
-          // Force removing readonly attribute from a file under Windows, because of a bug in the HDF5
-          std::string aReadOlnyRmCmd = "attrib -r \"" + myFileName + "\"> nul 2>&1";
+      if (med_access_mode(theMode) == MED_ACC_RDWR) {
+        // Force removing readonly attribute from a file under Windows, because of a bug in the HDF5
+        std::string aReadOlnyRmCmd = "attrib -r \"" + myFileName + "\"> nul 2>&1";
 #ifdef UNICODE
-          const char* to_decode = aReadOlnyRmCmd.c_str();
-          int size_needed = MultiByteToWideChar(CP_UTF8, 0, to_decode, strlen(to_decode), NULL, 0);
-          wchar_t* awReadOlnyRmCmd = new wchar_t[size_needed + 1];
-          MultiByteToWideChar(CP_UTF8, 0, to_decode, strlen(to_decode), awReadOlnyRmCmd, size_needed);
-          awReadOlnyRmCmd[size_needed] = '\0';
-          _wsystem(awReadOlnyRmCmd);
-          delete[] awReadOlnyRmCmd;
+        const char* to_decode = aReadOlnyRmCmd.c_str();
+        int size_needed = MultiByteToWideChar(CP_UTF8, 0, to_decode, strlen(to_decode), NULL, 0);
+        wchar_t* awReadOlnyRmCmd = new wchar_t[size_needed + 1];
+        MultiByteToWideChar(CP_UTF8, 0, to_decode, strlen(to_decode), awReadOlnyRmCmd, size_needed);
+        awReadOlnyRmCmd[size_needed] = '\0';
+        _wsystem(awReadOlnyRmCmd);
+        delete[] awReadOlnyRmCmd;
 #else
-          system(aReadOlnyRmCmd.c_str());
-#endif
-        }
+        system(aReadOlnyRmCmd.c_str());
 #endif
-        myFid = MEDfileVersionOpen(aFileName,med_access_mode(theMode), myMajor, myMinor, MED_RELEASE_NUM);
       }
-      if (theErr)
-        *theErr = TErr(myFid);
-      else if (myFid < 0)
-        EXCEPTION(std::runtime_error,"TFile - MEDfileVersionOpen('"<<myFileName<<"',"<<theMode<<"',"<< myMajor <<"',"<< myMinor<<"',"<< MED_RELEASE_NUM<<")");
-    }
-
-    const TIdt&
-    Id() const
-    {
-      if (myFid < 0)
-        EXCEPTION(std::runtime_error, "TFile - GetFid() < 0");
-      return myFid;
-    }
-
-    void
-    Close()
-    {
-      if (--myCount == 0)
-        MEDfileClose(myFid);
+#endif
+      myFid = MEDfileVersionOpen(aFileName,med_access_mode(theMode), myMajor, myMinor, MED_RELEASE_NUM);
     }
-
-  protected:
-    TInt myCount;
-    TIdt myFid;
-    std::string myFileName;
-    TInt myMajor;
-    TInt myMinor;
-  };
+    if (theErr)
+      *theErr = TErr(myFid);
+    else if (myFid < 0)
+      EXCEPTION(std::runtime_error,"TFile - MEDfileVersionOpen('"<<myFileName<<"',"<<theMode<<"',"<< myMajor <<"',"<< myMinor<<"',"<< MED_RELEASE_NUM<<")");
+  }
 
   //---------------------------------------------------------------
   class TFileWrapper
   {
-    PFile myFile;
+    PFileInternal myFile;
     TInt myMinor;
 
   public:
-    TFileWrapper(const PFile& theFile,
-                 EModeAcces theMode,
-                 TErr* theErr = NULL,
-                 TInt theMinor=-1):
+    TFileWrapper(const PFileInternal& theFile,
+                 EModeAcces           theMode,
+                 TErr*                theErr = NULL,
+                 TInt                 theMinor=-1):
       myFile(theFile),
       myMinor(theMinor)
     {
@@ -181,7 +160,7 @@ namespace MED
   void
   Print(SharedPtr<TimeStampValueType> theTimeStampValue)
   {
-    INITMSG(MYDEBUG,"Print - TimeStampValue\n");
+    INITMSG("Print - TimeStampValue\n");
     typename TimeStampValueType::TTGeom2Value& aGeom2Value = theTimeStampValue->myGeom2Value;
     typename TimeStampValueType::TTGeom2Value::const_iterator anIter = aGeom2Value.begin();
     for (; anIter != aGeom2Value.end(); anIter++) {
@@ -190,32 +169,36 @@ namespace MED
       TInt aNbElem = aMeshValue.myNbElem;
       TInt aNbGauss = aMeshValue.myNbGauss;
       TInt aNbComp = aMeshValue.myNbComp;
-      INITMSG(MYDEBUG, "aGeom = "<<aGeom<<" - "<<aNbElem<<": ");
+      INITMSG("aGeom = "<<aGeom<<" - "<<aNbElem<<": ");
       for (TInt iElem = 0; iElem < aNbElem; iElem++) {
         typename TimeStampValueType::TTMeshValue::TCValueSliceArr aValueSliceArr =
           aMeshValue.GetGaussValueSliceArr(iElem);
-        ADDMSG(MYVALUEDEBUG, "{");
+        ADDMSG("{");
         for (TInt iGauss = 0; iGauss < aNbGauss; iGauss++) {
           const typename TimeStampValueType::TTMeshValue::TCValueSlice& aValueSlice =
             aValueSliceArr[iGauss];
           for (TInt iComp = 0; iComp < aNbComp; iComp++) {
-            ADDMSG(MYVALUEDEBUG, aValueSlice[iComp]<<" ");
+            ADDMSG(aValueSlice[iComp]<<" ");
           }
-          ADDMSG(MYVALUEDEBUG, "| ");
+          ADDMSG("| ");
         }
-        ADDMSG(MYVALUEDEBUG, "} ");
+        ADDMSG("} ");
       }
-      ADDMSG(MYDEBUG, "\n");
+      ADDMSG("\n");
     }
   }
 
   //---------------------------------------------------------------
   TWrapper
-  ::TWrapper(const std::string& theFileName, bool write, TInt theMajor, TInt theMinor):
-    myFile(new TFile(theFileName, theMajor, theMinor)),
+  ::TWrapper(const std::string& theFileName, bool write, TFileInternal *tfileInst, TInt theMajor, TInt theMinor):
     myMajor(theMajor),
     myMinor(theMinor)
   {
+    if(!tfileInst)
+      myFile.reset(new TFile(theFileName, theMajor, theMinor) );
+    else
+      myFile.reset(new TFileDecorator(tfileInst) );
+    
     TErr aRet;
     if ( write ) {
       myFile->Open(eLECTURE_ECRITURE, &aRet);
@@ -251,9 +234,9 @@ namespace MED
   //----------------------------------------------------------------------------
   void
   TWrapper
-  ::GetMeshInfo(TInt theMeshId,
+  ::GetMeshInfo(TInt            theMeshId,
                 MED::TMeshInfo& theInfo,
-                TErr* theErr)
+                TErr*           theErr)
   {
     TFileWrapper aFileWrapper(myFile, eLECTURE, theErr, myMinor);
 
@@ -294,7 +277,7 @@ namespace MED
   void
   TWrapper
   ::SetMeshInfo(const MED::TMeshInfo& theInfo,
-                TErr* theErr)
+                TErr*                 theErr)
   {
     TErr aRet;
     SetMeshInfo(theInfo, eLECTURE_ECRITURE, &aRet);
@@ -313,8 +296,8 @@ namespace MED
   void
   TWrapper
   ::SetMeshInfo(const MED::TMeshInfo& theInfo,
-                EModeAcces theMode,
-                TErr* theErr)
+                EModeAcces            theMode,
+                TErr*                 theErr)
   {
     TFileWrapper aFileWrapper(myFile, theMode, theErr, myMinor);
 
@@ -350,7 +333,7 @@ namespace MED
     //if (aRet == 0)
     //  aRet = MEDunvCr(myFile->Id(),&aMeshName);
 
-    INITMSG(MYDEBUG, "TWrapper::SetMeshInfo - MED_MODE_ACCES = "<<theMode<<"; aRet = "<<aRet<<std::endl);
+    INITMSG("TWrapper::SetMeshInfo - MED_MODE_ACCES = "<<theMode<<"; aRet = "<<aRet<<std::endl);
 
     if (theErr)
       *theErr = aRet;
@@ -361,10 +344,10 @@ namespace MED
   //----------------------------------------------------------------------------
   PMeshInfo
   TWrapper
-  ::CrMeshInfo(TInt theDim,
-               TInt theSpaceDim,
+  ::CrMeshInfo(TInt               theDim,
+               TInt               theSpaceDim,
                const std::string& theValue,
-               EMaillage theType,
+               EMaillage          theType,
                const std::string& theDesc)
   {
     return PMeshInfo(new TTMeshInfo
@@ -386,7 +369,7 @@ namespace MED
   //----------------------------------------------------------------------------
   PMeshInfo
   TWrapper
-  ::GetPMeshInfo(TInt theId,
+  ::GetPMeshInfo(TInt  theId,
                  TErr* theErr)
   {
     PMeshInfo anInfo = CrMeshInfo();
@@ -398,7 +381,7 @@ namespace MED
   TInt
   TWrapper
   ::GetNbFamilies(const MED::TMeshInfo& theInfo,
-                  TErr* theErr)
+                  TErr*                 theErr)
   {
     TFileWrapper aFileWrapper(myFile, eLECTURE, theErr, myMinor);
 
@@ -413,9 +396,9 @@ namespace MED
   //----------------------------------------------------------------------------
   TInt
   TWrapper
-  ::GetNbFamAttr(TInt theFamId,
+  ::GetNbFamAttr(TInt                  theFamId,
                  const MED::TMeshInfo& theInfo,
-                 TErr* theErr)
+                 TErr*                 theErr)
   {
     TFileWrapper aFileWrapper(myFile, eLECTURE, theErr, myMinor);
 
@@ -432,9 +415,9 @@ namespace MED
   //----------------------------------------------------------------------------
   TInt
   TWrapper
-  ::GetNbFamGroup(TInt theFamId,
+  ::GetNbFamGroup(TInt                  theFamId,
                   const MED::TMeshInfo& theInfo,
-                  TErr* theErr)
+                  TErr*                 theErr)
   {
     TFileWrapper aFileWrapper(myFile, eLECTURE, theErr, myMinor);
 
@@ -451,9 +434,9 @@ namespace MED
   //----------------------------------------------------------------------------
   void
   TWrapper
-  ::GetFamilyInfo(TInt theFamId,
+  ::GetFamilyInfo(TInt              theFamId,
                   MED::TFamilyInfo& theInfo,
-                  TErr* theErr)
+                  TErr*             theErr)
   {
     TFileWrapper aFileWrapper(myFile, eLECTURE, theErr, myMinor);
 
@@ -494,7 +477,7 @@ namespace MED
   void
   TWrapper
   ::SetFamilyInfo(const MED::TFamilyInfo& theInfo,
-                  TErr* theErr)
+                  TErr*                   theErr)
   {
     TErr aRet;
     SetFamilyInfo(theInfo, eLECTURE_ECRITURE, &aRet);
@@ -510,8 +493,8 @@ namespace MED
   void
   TWrapper
   ::SetFamilyInfo(const MED::TFamilyInfo& theInfo,
-                  EModeAcces theMode,
-                  TErr* theErr)
+                  EModeAcces              theMode,
+                  TErr*                   theErr)
   {
     TFileWrapper aFileWrapper(myFile, theMode, theErr, myMinor);
 
@@ -538,7 +521,7 @@ namespace MED
                             aNbGroup,
                             &aGroupNames);
 
-    INITMSG(MYDEBUG, "TWrapper::SetFamilyInfo - MED_MODE_ACCES = "<<theMode<<"; aRet = "<<aRet<<std::endl);
+    INITMSG("TWrapper::SetFamilyInfo - MED_MODE_ACCES = "<<theMode<<"; aRet = "<<aRet<<std::endl);
 
     if (theErr)
       *theErr = aRet;
@@ -549,10 +532,10 @@ namespace MED
   //----------------------------------------------------------------------------
   PFamilyInfo
   TWrapper
-  ::CrFamilyInfo(const PMeshInfo& theMeshInfo,
-                 TInt theNbGroup,
-                 TInt theNbAttr,
-                 TInt theId,
+  ::CrFamilyInfo(const PMeshInfo&   theMeshInfo,
+                 TInt               theNbGroup,
+                 TInt               theNbAttr,
+                 TInt               theId,
                  const std::string& theValue)
   {
     return PFamilyInfo(new TTFamilyInfo
@@ -566,13 +549,13 @@ namespace MED
   //----------------------------------------------------------------------------
   PFamilyInfo
   TWrapper
-  ::CrFamilyInfo(const PMeshInfo& theMeshInfo,
-                 const std::string& theValue,
-                 TInt theId,
-                 const MED::TStringSet& theGroupNames,
+  ::CrFamilyInfo(const PMeshInfo&          theMeshInfo,
+                 const std::string&        theValue,
+                 TInt                      theId,
+                 const MED::TStringSet&    theGroupNames,
                  const MED::TStringVector& theAttrDescs,
-                 const MED::TIntVector& theAttrIds,
-                 const MED::TIntVector& theAttrVals)
+                 const MED::TIntVector&    theAttrIds,
+                 const MED::TIntVector&    theAttrVals)
   {
     return PFamilyInfo(new TTFamilyInfo
                        (theMeshInfo,
@@ -587,7 +570,7 @@ namespace MED
   //----------------------------------------------------------------------------
   PFamilyInfo
   TWrapper
-  ::CrFamilyInfo(const PMeshInfo& theMeshInfo,
+  ::CrFamilyInfo(const PMeshInfo&   theMeshInfo,
                  const PFamilyInfo& theInfo)
   {
     return PFamilyInfo(new TTFamilyInfo
@@ -599,8 +582,8 @@ namespace MED
   PFamilyInfo
   TWrapper
   ::GetPFamilyInfo(const PMeshInfo& theMeshInfo,
-                   TInt theId,
-                   TErr* theErr)
+                   TInt             theId,
+                   TErr*            theErr)
   {
     // must be reimplemented in connection with mesh type eSTRUCTURE
     //     if (theMeshInfo->GetType() != eNON_STRUCTURE)
@@ -611,17 +594,18 @@ namespace MED
     PFamilyInfo anInfo = CrFamilyInfo(theMeshInfo, aNbGroup, aNbAttr);
     GetFamilyInfo(theId, *anInfo, theErr);
 
-#ifdef _DEBUG_
-    std::string aName = anInfo->GetName();
-    INITMSG(MYDEBUG, "GetPFamilyInfo - aFamilyName = '"<<aName<<
-            "'; andId = "<<anInfo->GetId()<<
-            "; aNbAttr = "<<aNbAttr<<
-            "; aNbGroup = "<<aNbGroup<<"\n");
-    for (TInt iGroup = 0; iGroup < aNbGroup; iGroup++) {
-      aName = anInfo->GetGroupName(iGroup);
-      INITMSG(MYDEBUG, "aGroupName = '"<<aName<<"'\n");
+    if (SALOME::VerbosityActivated())
+    {
+      std::string aName = anInfo->GetName();
+      INITMSG("GetPFamilyInfo - aFamilyName = '"<<aName<<
+              "'; andId = "<<anInfo->GetId()<<
+              "; aNbAttr = "<<aNbAttr<<
+              "; aNbGroup = "<<aNbGroup<<"\n");
+      for (TInt iGroup = 0; iGroup < aNbGroup; iGroup++) {
+        aName = anInfo->GetGroupName(iGroup);
+        INITMSG("aGroupName = '"<<aName<<"'\n");
+      }
     }
-#endif
 
     return anInfo;
   }
@@ -629,11 +613,11 @@ namespace MED
   //----------------------------------------------------------------------------
   void
   TWrapper
-  ::GetNames(TElemInfo& theInfo,
-             TInt /*theNb*/,
-             EEntiteMaillage theEntity,
+  ::GetNames(TElemInfo&        theInfo,
+             TInt            /*theNb*/,
+             EEntiteMaillage   theEntity,
              EGeometrieElement theGeom,
-             TErr* theErr)
+             TErr*             theErr)
   {
     TFileWrapper aFileWrapper(myFile, eLECTURE, theErr, myMinor);
 
@@ -667,10 +651,10 @@ namespace MED
   //----------------------------------------------------------------------------
   void
   TWrapper
-  ::SetNames(const TElemInfo& theInfo,
-             EEntiteMaillage theEntity,
+  ::SetNames(const TElemInfo&  theInfo,
+             EEntiteMaillage   theEntity,
              EGeometrieElement theGeom,
-             TErr* theErr)
+             TErr*             theErr)
   {
     SetNames(theInfo, eLECTURE_ECRITURE, theEntity, theGeom, theErr);
   }
@@ -678,11 +662,11 @@ namespace MED
   //----------------------------------------------------------------------------
   void
   TWrapper
-  ::SetNames(const TElemInfo& theInfo,
-             EModeAcces theMode,
-             EEntiteMaillage theEntity,
+  ::SetNames(const TElemInfo&  theInfo,
+             EModeAcces        theMode,
+             EEntiteMaillage   theEntity,
              EGeometrieElement theGeom,
-             TErr* theErr)
+             TErr*             theErr)
   {
     TFileWrapper aFileWrapper(myFile, theMode, theErr, myMinor);
 
@@ -707,7 +691,7 @@ namespace MED
                                  MED_NO_DT,
                                  MED_NO_IT,
                                  anEntity,
-                                  aGeom,
+                                 aGeom,
                                  (TInt)anInfo.myElemNames->size(),
                                  &anElemNames);
       if (theErr)
@@ -720,11 +704,11 @@ namespace MED
   //----------------------------------------------------------------------------
   void
   TWrapper
-  ::GetNumeration(TElemInfo& theInfo,
-                  TInt /*theNb*/,
-                  EEntiteMaillage theEntity,
+  ::GetNumeration(TElemInfo&        theInfo,
+                  TInt            /*theNb*/,
+                  EEntiteMaillage   theEntity,
                   EGeometrieElement theGeom,
-                  TErr* theErr)
+                  TErr*             theErr)
   {
     TFileWrapper aFileWrapper(myFile, eLECTURE, theErr, myMinor);
 
@@ -758,10 +742,10 @@ namespace MED
   //----------------------------------------------------------------------------
   void
   TWrapper
-  ::SetNumeration(const TElemInfo& theInfo,
-                  EEntiteMaillage theEntity,
+  ::SetNumeration(const TElemInfo&  theInfo,
+                  EEntiteMaillage   theEntity,
                   EGeometrieElement theGeom,
-                  TErr* theErr)
+                  TErr*             theErr)
   {
     SetNumeration(theInfo, eLECTURE_ECRITURE, theEntity, theGeom, theErr);
   }
@@ -769,11 +753,11 @@ namespace MED
   //----------------------------------------------------------------------------
   void
   TWrapper
-  ::SetNumeration(const TElemInfo& theInfo,
-                  EModeAcces theMode,
-                  EEntiteMaillage theEntity,
+  ::SetNumeration(const TElemInfo&  theInfo,
+                  EModeAcces        theMode,
+                  EEntiteMaillage   theEntity,
                   EGeometrieElement theGeom,
-                  TErr* theErr)
+                  TErr*             theErr)
   {
     TFileWrapper aFileWrapper(myFile, theMode, theErr, myMinor);
 
@@ -811,11 +795,11 @@ namespace MED
   //----------------------------------------------------------------------------
   void
   TWrapper
-  ::GetFamilies(TElemInfo& theInfo,
-                TInt /*theNb*/,
-                EEntiteMaillage theEntity,
+  ::GetFamilies(TElemInfo&        theInfo,
+                TInt            /*theNb*/,
+                EEntiteMaillage   theEntity,
                 EGeometrieElement theGeom,
-                TErr* theErr)
+                TErr*             theErr)
   {
     TFileWrapper aFileWrapper(myFile, eLECTURE, theErr, myMinor);
 
@@ -858,10 +842,10 @@ namespace MED
   //----------------------------------------------------------------------------
   void
   TWrapper
-  ::SetFamilies(const TElemInfo& theInfo,
-                EEntiteMaillage theEntity,
+  ::SetFamilies(const TElemInfo&  theInfo,
+                EEntiteMaillage   theEntity,
                 EGeometrieElement theGeom,
-                TErr* theErr)
+                TErr*             theErr)
   {
     SetFamilies(theInfo, eLECTURE_ECRITURE, theEntity, theGeom, theErr);
   }
@@ -869,11 +853,11 @@ namespace MED
   //----------------------------------------------------------------------------
   void
   TWrapper
-  ::SetFamilies(const TElemInfo& theInfo,
-                EModeAcces theMode,
-                EEntiteMaillage theEntity,
+  ::SetFamilies(const TElemInfo&  theInfo,
+                EModeAcces        theMode,
+                EEntiteMaillage   theEntity,
                 EGeometrieElement theGeom,
-                TErr* theErr)
+                TErr*             theErr)
   {
     TFileWrapper aFileWrapper(myFile, theMode, theErr, myMinor);
 
@@ -910,7 +894,7 @@ namespace MED
   TInt
   TWrapper
   ::GetNbNodes(const MED::TMeshInfo& theMeshInfo,
-               TErr* theErr)
+               TErr*                 theErr)
   {
     return GetNbNodes(theMeshInfo, eCOOR, theErr);
   }
@@ -1172,37 +1156,38 @@ namespace MED
     PNodeInfo anInfo = CrNodeInfo(theMeshInfo, aNbElems);
     GetNodeInfo(*anInfo, theErr);
 
-#ifdef _DEBUG_
-    TInt aDim = theMeshInfo->myDim;
-    TInt aNbElem = anInfo->GetNbElem();
-    INITMSG(MYDEBUG, "GetPNodeInfo: ");
+    if (SALOME::VerbosityActivated())
     {
-      INITMSG(MYDEBUG, "aCoords: "<<aNbElem<<": ");
-      TNodeCoord& aCoord = anInfo->myCoord;
-      for (TInt iElem = 0; iElem < aNbElem; iElem++) {
-        for (TInt iDim = 0, anId = iElem*aDim; iDim < aDim; iDim++, anId++) {
-          ADDMSG(MYVALUEDEBUG, aCoord[anId]<<",");
+      TInt aDim = theMeshInfo->myDim;
+      TInt aNbElem = anInfo->GetNbElem();
+      INITMSG("GetPNodeInfo: ");
+      {
+        INITMSG("aCoords: "<<aNbElem<<": ");
+        TNodeCoord& aCoord = anInfo->myCoord;
+        for (TInt iElem = 0; iElem < aNbElem; iElem++) {
+          for (TInt iDim = 0, anId = iElem*aDim; iDim < aDim; iDim++, anId++) {
+            ADDMSG(aCoord[anId]<<",");
+          }
+          ADDMSG(" ");
         }
-        ADDMSG(MYVALUEDEBUG, " ");
-      }
-      ADDMSG(MYDEBUG, std::endl);
+        ADDMSG(std::endl);
 
-      BEGMSG(MYVALUEDEBUG, "GetFamNum: ");
-      for (TInt iElem = 0; iElem < aNbElem; iElem++) {
-        ADDMSG(MYVALUEDEBUG, anInfo->GetFamNum(iElem)<<", ");
-      }
-      ADDMSG(MYVALUEDEBUG, std::endl);
-
-      if (anInfo->IsElemNum()) {
-        BEGMSG(MYVALUEDEBUG, "GetElemNum: ");
+        BEGMSG("GetFamNum: ");
         for (TInt iElem = 0; iElem < aNbElem; iElem++) {
-          ADDMSG(MYVALUEDEBUG, anInfo->GetElemNum(iElem)<<", ");
+          ADDMSG(anInfo->GetFamNum(iElem)<<", ");
+        }
+        ADDMSG(std::endl);
+
+        if (anInfo->IsElemNum()) {
+          BEGMSG("GetElemNum: ");
+          for (TInt iElem = 0; iElem < aNbElem; iElem++) {
+            ADDMSG(anInfo->GetElemNum(iElem)<<", ");
+          }
+          ADDMSG(std::endl);
         }
-        ADDMSG(MYVALUEDEBUG, std::endl);
       }
+      ADDMSG(std::endl);
     }
-    ADDMSG(MYDEBUG, std::endl);
-#endif
 
     return anInfo;
   }
@@ -1557,20 +1542,21 @@ namespace MED
     PPolygoneInfo anInfo = CrPolygoneInfo(theMeshInfo, theEntity, theGeom, aNbElem, aConnSize, theConnMode);
     GetPolygoneInfo(anInfo);
 
-#ifdef _DEBUG_
-    INITMSG(MYDEBUG, "GetPPolygoneInfo"<<
-            " - theGeom = "<<theGeom<<
-            "; aNbElem = "<<aNbElem<<": ");
-    for (TInt iElem = 1; iElem < aNbElem; iElem++) {
-      TCConnSlice aConnSlice = anInfo->GetConnSlice(iElem);
-      TInt aConnDim = aConnSlice.size();
-      for (TInt iConn = 0; iConn < aConnDim; iConn++) {
-        ADDMSG(MYVALUEDEBUG, aConnSlice[iConn]<<",");
+    if (SALOME::VerbosityActivated())
+    {
+      INITMSG("GetPPolygoneInfo"<<
+              " - theGeom = "<<theGeom<<
+              "; aNbElem = "<<aNbElem<<": ");
+      for (TInt iElem = 1; iElem < aNbElem; iElem++) {
+        TCConnSlice aConnSlice = anInfo->GetConnSlice(iElem);
+        TInt aConnDim = aConnSlice.size();
+        for (TInt iConn = 0; iConn < aConnDim; iConn++) {
+          ADDMSG(aConnSlice[iConn]<<",");
+        }
+        ADDMSG(" ");
       }
-      ADDMSG(MYDEBUG, " ");
+      ADDMSG(std::endl);
     }
-    ADDMSG(MYDEBUG, std::endl);
-#endif
 
     return anInfo;
   }
@@ -1867,27 +1853,28 @@ namespace MED
     PPolyedreInfo anInfo = CrPolyedreInfo(theMeshInfo, theEntity, theGeom, aNbElem, aNbFaces, aConnSize, theConnMode);
     GetPolyedreInfo(anInfo);
 
-#ifdef _DEBUG_
-    INITMSG(MYDEBUG, "GetPPolyedreInfo"<<
-            " - theGeom = "<<theGeom<<
-            "; aNbElem = "<<aNbElem<<": ");
-    for (TInt iElem = 0; iElem < aNbElem; iElem++) {
-      TCConnSliceArr aConnSliceArr = anInfo->GetConnSliceArr(iElem);
-      TInt aNbFaces = aConnSliceArr.size();
-      ADDMSG(MYDEBUG, "{");
-      for (TInt iFace = 0; iFace < aNbFaces; iFace++) {
-        TCConnSlice aConnSlice = aConnSliceArr[iFace];
-        TInt aNbConn = aConnSlice.size();
-        ADDMSG(MYDEBUG, "[");
-        for (TInt iConn = 0; iConn < aNbConn; iConn++) {
-          ADDMSG(MYVALUEDEBUG, aConnSlice[iConn]<<",");
+    if (SALOME::VerbosityActivated())
+    {
+      INITMSG("GetPPolyedreInfo"<<
+              " - theGeom = "<<theGeom<<
+              "; aNbElem = "<<aNbElem<<": ");
+      for (TInt iElem = 0; iElem < aNbElem; iElem++) {
+        TCConnSliceArr aConnSliceArr = anInfo->GetConnSliceArr(iElem);
+        TInt aNbFaces = aConnSliceArr.size();
+        ADDMSG("{");
+        for (TInt iFace = 0; iFace < aNbFaces; iFace++) {
+          TCConnSlice aConnSlice = aConnSliceArr[iFace];
+          TInt aNbConn = aConnSlice.size();
+          ADDMSG("[");
+          for (TInt iConn = 0; iConn < aNbConn; iConn++) {
+            ADDMSG(aConnSlice[iConn]<<",");
+          }
+          ADDMSG("] ");
         }
-        ADDMSG(MYDEBUG, "] ");
+        ADDMSG("} ");
       }
-      ADDMSG(MYDEBUG, "} ");
+      ADDMSG(std::endl);
     }
-    ADDMSG(MYDEBUG, std::endl);
-#endif
 
     return anInfo;
   }
@@ -2217,14 +2204,14 @@ namespace MED
   //----------------------------------------------------------------------------
   PCellInfo
   TWrapper
-  ::CrCellInfo(const PMeshInfo& theMeshInfo,
-               EEntiteMaillage theEntity,
+  ::CrCellInfo(const PMeshInfo&  theMeshInfo,
+               EEntiteMaillage   theEntity,
                EGeometrieElement theGeom,
-               TInt theNbElem,
-               EConnectivite theConnMode,
-               EBooleen theIsElemNum,
-               EBooleen theIsElemNames,
-               EModeSwitch theMode)
+               TInt              theNbElem,
+               EConnectivite     theConnMode,
+               EBooleen          theIsElemNum,
+               EBooleen          theIsElemNames,
+               EModeSwitch       theMode)
   {
     return PCellInfo(new TTCellInfo
                      (theMeshInfo,
@@ -2288,34 +2275,35 @@ namespace MED
     PCellInfo anInfo = CrCellInfo(theMeshInfo, theEntity, theGeom, aNbElem, theConnMode);
     GetCellInfo(anInfo, theErr);
 
-#ifdef _DEBUG_
-    TInt aConnDim = anInfo->GetConnDim();
-    INITMSG(MYDEBUG, "GetPCellInfo - theEntity = "<<theEntity<<"; theGeom = "<<theGeom<<"; aConnDim: "<<aConnDim<<"\n");
-    BEGMSG(MYDEBUG, "GetPCellInfo - aNbElem: "<<aNbElem<<": ");
-    for (TInt iElem = 0; iElem < aNbElem; iElem++) {
-      TCConnSlice aConnSlice = anInfo->GetConnSlice(iElem);
-      for (TInt iConn = 0; iConn < aConnDim; iConn++) {
-        ADDMSG(MYVALUEDEBUG, aConnSlice[iConn]<<",");
+    if (SALOME::VerbosityActivated())
+    {
+      TInt aConnDim = anInfo->GetConnDim();
+      INITMSG("GetPCellInfo - theEntity = "<<theEntity<<"; theGeom = "<<theGeom<<"; aConnDim: "<<aConnDim<<"\n");
+      BEGMSG("GetPCellInfo - aNbElem: "<<aNbElem<<": ");
+      for (TInt iElem = 0; iElem < aNbElem; iElem++) {
+        TCConnSlice aConnSlice = anInfo->GetConnSlice(iElem);
+        for (TInt iConn = 0; iConn < aConnDim; iConn++) {
+          ADDMSG(aConnSlice[iConn]<<",");
+        }
+        ADDMSG(" ");
       }
-      ADDMSG(MYVALUEDEBUG, " ");
-    }
-    ADDMSG(MYDEBUG, std::endl);
-
-    BEGMSG(MYVALUEDEBUG, "GetPCellInfo - GetFamNum: ");
-    for (TInt iElem = 0; iElem < aNbElem; iElem++) {
-      ADDMSG(MYVALUEDEBUG, anInfo->GetFamNum(iElem)<<", ");
-    }
-    ADDMSG(MYVALUEDEBUG, std::endl);
+      ADDMSG(std::endl);
 
-    if (anInfo->IsElemNum()) {
-      BEGMSG(MYVALUEDEBUG, "GetPCellInfo - GetElemNum: ");
+      BEGMSG("GetPCellInfo - GetFamNum: ");
       for (TInt iElem = 0; iElem < aNbElem; iElem++) {
-        ADDMSG(MYVALUEDEBUG, anInfo->GetElemNum(iElem)<<", ");
+        ADDMSG(anInfo->GetFamNum(iElem)<<", ");
+      }
+      ADDMSG(std::endl);
+
+      if (anInfo->IsElemNum()) {
+        BEGMSG("GetPCellInfo - GetElemNum: ");
+        for (TInt iElem = 0; iElem < aNbElem; iElem++) {
+          ADDMSG(anInfo->GetElemNum(iElem)<<", ");
+        }
+        ADDMSG(std::endl);
       }
-      ADDMSG(MYVALUEDEBUG, std::endl);
+      ADDMSG(std::endl);
     }
-    ADDMSG(MYDEBUG, std::endl);
-#endif
 
     return anInfo;
   }
@@ -2696,14 +2684,14 @@ namespace MED
     PFieldInfo anInfo = CrFieldInfo(theMeshInfo, aNbComp);
     GetFieldInfo(theId, *anInfo, theErr);
 
-#ifdef _DEBUG_
-    INITMSG(MYDEBUG,
-            "GetPFieldInfo "<<
-            "- aName = '"<<anInfo->GetName()<<"'"<<
-            "; aType = "<<anInfo->GetType()<<
-            "; aNbComp = "<<aNbComp<<
-            std::endl);
-#endif
+    if (SALOME::VerbosityActivated())
+    {
+      INITMSG("GetPFieldInfo "<<
+              "- aName = '"<<anInfo->GetName()<<"'"<<
+              "; aType = "<<anInfo->GetType()<<
+              "; aNbComp = "<<aNbComp<<
+              std::endl);
+    }
 
     return anInfo;
   }
@@ -2905,14 +2893,12 @@ namespace MED
           }
         bool anIsSatisfied =(nval > 0);
         if (anIsSatisfied) {
-          INITMSG(MYDEBUG,
-                  "GetNbTimeStamps aNbTimeStamps = "<<aNbStamps<<
+          INITMSG("GetNbTimeStamps aNbTimeStamps = "<<aNbStamps<<
                   "; aGeom = "<<aGeom<<"; anEntity = "<<anEntity<<"\n");
           if (anIsPerformAdditionalCheck) {
             anIsSatisfied = !strcmp(&aMeshName[0], &aMeshInfo.myName[0]);
             if (!anIsSatisfied) {
-              INITMSG(MYDEBUG,
-                      "GetNbTimeStamps aMeshName = '"<<&aMeshName[0]<<"' != "<<
+              INITMSG("GetNbTimeStamps aMeshName = '"<<&aMeshName[0]<<"' != "<<
                       "; aMeshInfo.myName = '"<<&aMeshInfo.myName[0]<<"'\n");
             }
           }
@@ -3071,15 +3057,16 @@ namespace MED
     PTimeStampInfo anInfo = CrTimeStampInfo(theFieldInfo, theEntity, theGeom2Size);
     GetTimeStampInfo(theId, *anInfo, theErr);
 
-#ifdef _DEBUG_
-    INITMSG(MYDEBUG, "GetPTimeStampInfo - anEntity = "<<anInfo->GetEntity()<<"\n");
-    TGeom2NbGauss& aGeom2NbGauss = anInfo->myGeom2NbGauss;
-    TGeom2NbGauss::const_iterator anIter = aGeom2NbGauss.begin();
-    for (; anIter != aGeom2NbGauss.end(); anIter++) {
-      const EGeometrieElement& aGeom = anIter->first;
-      INITMSG(MYDEBUG, "aGeom = "<<aGeom<<" - "<<aGeom2NbGauss[aGeom]<<";\n");
+    if (SALOME::VerbosityActivated())
+    {
+      INITMSG("GetPTimeStampInfo - anEntity = "<<anInfo->GetEntity()<<"\n");
+      TGeom2NbGauss& aGeom2NbGauss = anInfo->myGeom2NbGauss;
+      TGeom2NbGauss::const_iterator anIter = aGeom2NbGauss.begin();
+      for (; anIter != aGeom2NbGauss.end(); anIter++) {
+        const EGeometrieElement& aGeom = anIter->first;
+        INITMSG("aGeom = "<<aGeom<<" - "<<aGeom2NbGauss[aGeom]<<";\n");
+      }
     }
-#endif
 
     return anInfo;
   }
@@ -3294,8 +3281,7 @@ namespace MED
                                        aNbComp);
       TInt aValueSize = theTimeStampValue->GetValueSize(aGeom);
 
-      INITMSG(MYDEBUG,
-              "TWrapper::GetTimeStampValue - aGeom = "<<aGeom<<
+      INITMSG("TWrapper::GetTimeStampValue - aGeom = "<<aGeom<<
               "; aNbVal = "<<aNbVal<<
               "; aNbValue = "<<aNbValue<<
               "; aNbGauss = "<<aNbGauss<<
@@ -3485,7 +3471,7 @@ namespace MED
 
     }
 
-    INITMSG(MYDEBUG, "TWrapper::SetTimeStampValue - MED_MODE_ACCES = "<<theMode<<"; aRet = "<<aRet<<std::endl);
+    INITMSG("TWrapper::SetTimeStampValue - MED_MODE_ACCES = "<<theMode<<"; aRet = "<<aRet<<std::endl);
   }
 
   //----------------------------------------------------------------------------
@@ -3568,12 +3554,13 @@ namespace MED
                       theMKey2Profile,
                       theKey2Gauss,
                       theErr);
-#ifdef _DEBUG_
-    if (aFieldInfo->GetType() == eFLOAT64)
-      Print<TFloatTimeStampValue>(anInfo);
-    else
-      Print<TIntTimeStampValue>(anInfo);
-#endif
+    if (SALOME::VerbosityActivated())
+    {
+      if (aFieldInfo->GetType() == eFLOAT64)
+        Print<TFloatTimeStampValue>(anInfo);
+      else
+        Print<TIntTimeStampValue>(anInfo);
+    }
     return anInfo;
   }
 
@@ -3703,33 +3690,32 @@ namespace MED
     GetGrilleInfo(anInfo);
     anInfo->SetGrilleType(type);
 
-#ifdef _DEBUG_
-    INITMSG(MYDEBUG, "GetPGrilleInfo: ");
+    if (SALOME::VerbosityActivated())
     {
+      INITMSG("GetPGrilleInfo: ");
+
       TInt aNbElem = anInfo->GetNbNodes();
-      BEGMSG(MYVALUEDEBUG, "GetFamNumNode: ");
+      BEGMSG("GetFamNumNode: ");
       for (TInt iElem = 0; iElem < aNbElem; iElem++) {
-        ADDMSG(MYVALUEDEBUG, anInfo->GetFamNumNode(iElem)<<", ");
+        ADDMSG(anInfo->GetFamNumNode(iElem)<<", ");
       }
       TInt aNbCells = anInfo->GetNbCells();
-      BEGMSG(MYVALUEDEBUG, "GetFamNum: ");
+      BEGMSG("GetFamNum: ");
       for (TInt iElem = 0; iElem < aNbCells; iElem++) {
-        ADDMSG(MYVALUEDEBUG, anInfo->GetFamNum(iElem)<<", ");
+        ADDMSG(anInfo->GetFamNum(iElem)<<", ");
       }
-      ADDMSG(MYVALUEDEBUG, std::endl);
-      BEGMSG(MYVALUEDEBUG, "GetCoordName: ");
+      ADDMSG(std::endl);
+      BEGMSG("GetCoordName: ");
       for (TInt iElem = 0; iElem < theMeshInfo->GetDim(); iElem++) {
-        ADDMSG(MYVALUEDEBUG, anInfo->GetCoordName(iElem)<<", ");
+        ADDMSG(anInfo->GetCoordName(iElem)<<", ");
       }
-      ADDMSG(MYVALUEDEBUG, std::endl);
-      BEGMSG(MYVALUEDEBUG, "GetCoordUnit: ");
+      ADDMSG(std::endl);
+      BEGMSG("GetCoordUnit: ");
       for (TInt iElem = 0; iElem < theMeshInfo->GetDim(); iElem++) {
-        ADDMSG(MYVALUEDEBUG, anInfo->GetCoordUnit(iElem)<<", ");
+        ADDMSG(anInfo->GetCoordUnit(iElem)<<", ");
       }
-      ADDMSG(MYVALUEDEBUG, std::endl);
-
+      ADDMSG(std::endl);
     }
-#endif
 
     return anInfo;
   }
index 24c5e9fd06459ffbbf6058b82cd26b549637e0ce..427c3d196e07fe4d5a5681236d0fa20d5cfc8f1a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -32,8 +32,8 @@
 namespace MED
 {
   //----------------------------------------------------------------------------
-  class TFile;
-  typedef boost::shared_ptr<TFile> PFile;
+  class TFileInternal;
+  typedef std::shared_ptr<TFileInternal> PFileInternal;
 
   typedef enum {eLECTURE, eLECTURE_ECRITURE, eLECTURE_AJOUT, eCREATION} EModeAcces;
 
@@ -52,7 +52,7 @@ namespace MED
     TWrapper& operator=(const TWrapper&);
 
   public:
-    TWrapper(const std::string& theFileName, bool write, TInt theMajor=-1, TInt theVersion=-1);
+    TWrapper(const std::string& theFileName, bool write, TFileInternal *tfileInst = nullptr, TInt theMajor=-1, TInt theVersion=-1);
 
     virtual
     ~TWrapper();
@@ -938,7 +938,7 @@ namespace MED
                     TErr* theErr = NULL);
 
   protected:
-    PFile myFile;
+    PFileInternal myFile;
     TInt myMajor;
     TInt myMinor;
   };
@@ -963,23 +963,23 @@ namespace MED
   //----------------------------------------------------------------------------
   //! Specialization of SharedPtr for TWrapper
   template<>
-  class MEDWRAPPER_EXPORT SharedPtr<TWrapper>: public boost::shared_ptr<TWrapper>
+  class MEDWRAPPER_EXPORT SharedPtr<TWrapper>: public std::shared_ptr<TWrapper>
   {
   public:
     SharedPtr() {}
 
     SharedPtr(TWrapper* p):
-      boost::shared_ptr<TWrapper>(p)
+      std::shared_ptr<TWrapper>(p)
     {}
 
     template<class Y>
     explicit SharedPtr(Y* p):
-      boost::shared_ptr<TWrapper>(p)
+      std::shared_ptr<TWrapper>(p)
     {}
 
     template<class Y>
     SharedPtr(const SharedPtr<Y>& r):
-      boost::shared_ptr<TWrapper>(boost::dynamic_pointer_cast<TWrapper,Y>(r))
+      std::shared_ptr<TWrapper>(boost::dynamic_pointer_cast<TWrapper,Y>(r))
     {}
 
     template<class Y>
@@ -1021,7 +1021,7 @@ namespace MED
     TWrapper*
     get() const // never throws
     {
-      return boost::shared_ptr<TWrapper>::get();
+      return std::shared_ptr<TWrapper>::get();
     }
   };
 }
index 98a27ce484a152e48b90c2effe90821f6fa0cccf..8dfcee23c1cc0ea77516b20eab110dc15707baef 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index d25767ee1bfb1a3043b6d5dd255275e4a1d63f2e..a1f79c4bc396d10ed03b7ae8dd2226c9c4b2a61e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
diff --git a/src/MEFISTO2/CMakeLists.txt b/src/MEFISTO2/CMakeLists.txt
deleted file mode 100644 (file)
index 7387b64..0000000
+++ /dev/null
@@ -1,100 +0,0 @@
-# Copyright (C) 2012-2020  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
-#
-
-# --- options ---
-# additional include directories
-INCLUDE_DIRECTORIES(
-  ${KERNEL_INCLUDE_DIRS}
-  ${OpenCASCADE_INCLUDE_DIR}
-  ${HDF5_INCLUDE_DIRS}
-  ${PLATFORM_INCLUDES}
-)
-
-# additional preprocessor / compiler flags
-ADD_DEFINITIONS(
-  ${OpenCASCADE_DEFINITIONS}
-)
-
-# libraries to link to
-SET(_link_LIBRARIES
-  ${OpenCASCADE_FoundationClasses_LIBRARIES}
-  ${KERNEL_SALOMELocalTrace}
-)
-
-# --- headers ---
-
-# header files / no moc processing
-SET(MEFISTO2D_HEADERS
-  aptrte.h 
-  Rn.h
-)
-
-# --- sources ---
-
-IF(${F2C_FOUND})
-ADD_DEFINITIONS()
-  SET(F2C_INPUT ${CMAKE_CURRENT_SOURCE_DIR}/trte.f)
-  SET(F2C_OUTPUT trte.c)
-
-  # additional include directories
-  INCLUDE_DIRECTORIES(${f2c_INCLUDE_DIRS})
-
-  # additional preprocessor / compiler flags
-  ADD_DEFINITIONS(-DF2C_BUILD)
-
-
-  # libraries to link to
-  SET(_link_LIBRARIES ${_link_LIBRARIES} ${f2c_LIBRARIES})
-
-  # generate C sources from Fortran
-  ADD_CUSTOM_COMMAND(
-    OUTPUT ${F2C_OUTPUT}
-    COMMAND ${f2c_GENERATOR} ${F2C_INPUT}
-    MAIN_DEPENDENCY ${F2C_INPUT}
-    WORKING_DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}
-  )  
-  # sources / static
-  SET(MEFISTO2D_SOURCES
-      aptrte.cxx
-      ${F2C_OUTPUT}
-  )
-ELSE(${F2C_FOUND})
-  # sources / static
-  SET(MEFISTO2D_SOURCES
-    aptrte.cxx
-    trte.f
-  )
-ENDIF(${F2C_FOUND})
-
-# --- rules ---
-
-ADD_LIBRARY(MEFISTO2D ${MEFISTO2D_SOURCES})
-TARGET_LINK_LIBRARIES(MEFISTO2D ${_link_LIBRARIES} )
-
-#Ignore MSVCRT.lib on WINDOWS in case using f2c code generator
-IF(WIN32)
-  IF(CMAKE_BUILD_TYPE STREQUAL Debug)
-    IF(${F2C_FOUND})
-      SET_TARGET_PROPERTIES(MEFISTO2D PROPERTIES LINK_FLAGS "/NODEFAULTLIB:MSVCRT")
-    ENDIF(${F2C_FOUND})
-  ENDIF()
-ENDIF(WIN32)
-
-INSTALL(TARGETS MEFISTO2D EXPORT ${PROJECT_NAME}TargetGroup DESTINATION ${SALOME_INSTALL_LIBS})
-INSTALL(FILES ${MEFISTO2D_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS})
diff --git a/src/MEFISTO2/Rn.h b/src/MEFISTO2/Rn.h
deleted file mode 100644 (file)
index e691a94..0000000
+++ /dev/null
@@ -1,236 +0,0 @@
-// MEFISTO :  library to compute 2D triangulation from segmented boundaries
-//
-// Copyright (C) 2006-2020  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   : Rn.h
-//  Module : SMESH
-//  Authors: Frederic HECHT & Alain PERRONNET
-//  Date   : 13 novembre 2006
-
-#ifndef Rn__h
-#define Rn__h
-
-#include <gp_Pnt.hxx>      //Dans OpenCascade
-#include <gp_Vec.hxx>      //Dans OpenCascade
-#include <gp_Dir.hxx>      //Dans OpenCascade
-
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-// BUT:   Definir les espaces affines R R2 R3 R4 soit Rn pour n=1,2,3,4
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-// AUTEUR : Frederic HECHT      ANALYSE NUMERIQUE UPMC  PARIS   OCTOBRE   2000
-// MODIFS : Alain    PERRONNET  ANALYSE NUMERIQUE UPMC  PARIS   NOVEMBRE  2000
-//...............................................................................
-#include <iostream>
-#include <cmath>
-
-
-template<class T> inline T Abs (const T &a){return a <0 ? -a : a;}
-template<class T> inline void Echange (T& a,T& b) {T c=a;a=b;b=c;}
-
-template<class T> inline T Min (const T &a,const T &b)  {return a < b ? a : b;}
-template<class T> inline T Max (const T &a,const T & b) {return a > b ? a : b;}
-
-template<class T> inline T Max (const T &a,const T & b,const T & c){return Max(Max(a,b),c);}
-template<class T> inline T Min (const T &a,const T & b,const T & c){return Min(Min(a,b),c);}
-
-template<class T> inline T Max (const T &a,const T & b,const T & c,const T & d)
- {return Max(Max(a,b),Max(c,d));}
-template<class T> inline T Min (const T &a,const T & b,const T & c,const T & d)
- {return Min(Min(a,b),Min(c,d));}
-
-//le type Nom des entites geometriques P L S V O
-//===========
-typedef char Nom[1+24];
-
-//le type N des nombres entiers positifs
-//=========
-#ifndef PCLINUX64
-typedef unsigned long int N;
-#else 
-typedef unsigned int N;
-#endif
-
-//le type Z des nombres entiers relatifs
-//=========
-#ifndef PCLINUX64
-typedef long int Z;
-#else
-typedef int Z;
-#endif
-
-//le type R des nombres "reels"
-//=========
-typedef double R;
-
-//le type XPoint  des coordonnees d'un pixel dans une fenetre
-//==============
-//typedef struct { short int x,y } XPoint;  //en fait ce type est defini dans X11-Window
-                                            // #include <X11/Xlib.h>
-//la classe R2
-//============
-class R2 
-{
-  friend std::ostream& operator << (std::ostream& f, const R2 & P)
-  { f << P.x << ' ' << P.y ; return f; }
-  friend std::istream& operator >> (std::istream& f, R2 & P)
-  { f >> P.x >> P.y ; return f; }
-
-  friend std::ostream& operator << (std::ostream& f, const R2 * P)
-  { f << P->x << ' ' << P->y ; return f; }
-  friend std::istream& operator >> (std::istream& f, R2 * P)
-  { f >> P->x >> P->y ; return f; }
-
-public:
-  R x,y;  //les donnees
-
-  R2 () :x(0),y(0) {}              //les constructeurs
-  R2 (R a,R b)   :x(a),y(b)  {}
-  R2 (R2 A,R2 B) :x(B.x-A.x),y(B.y-A.y)  {} //vecteur defini par 2 points
-
-  R2  operator+(R2 P) const {return R2(x+P.x,y+P.y);}     // Q+P possible
-  R2  operator+=(R2 P)  {x += P.x;y += P.y; return *this;}// Q+=P;
-  R2  operator-(R2 P) const {return R2(x-P.x,y-P.y);}     // Q-P
-  R2  operator-=(R2 P) {x -= P.x;y -= P.y; return *this;} // Q-=P;
-  R2  operator-()const  {return R2(-x,-y);}               // -Q
-  R2  operator+()const  {return *this;}                   // +Q
-  R   operator,(R2 P)const {return x*P.x+y*P.y;} // produit scalaire (Q,P)
-  R   operator^(R2 P)const {return x*P.y-y*P.x;} // produit vectoriel Q^P
-  R2  operator*(R c)const {return R2(x*c,y*c);}  // produit a droite  P*c
-  R2  operator*=(R c)  {x *= c; y *= c; return *this;}
-  R2  operator/(R c)const {return R2(x/c,y/c);}  // division par un reel
-  R2  operator/=(R c)  {x /= c; y /= c; return *this;}
-  R & operator[](int i) {return (&x)[i];}        // la coordonnee i
-  R2  orthogonal() {return R2(-y,x);}    //le vecteur orthogonal dans R2
-  friend R2 operator*(R c,R2 P) {return P*c;}    // produit a gauche c*P
-};
-
-
-//la classe R3
-//============
-class R3
-{
-  friend std::ostream& operator << (std::ostream& f, const R3 & P)
-  { f << P.x << ' ' << P.y << ' ' << P.z ; return f; }
-  friend std::istream& operator >> (std::istream& f, R3 & P)
-  { f >> P.x >> P.y >> P.z ; return f; }
-
-  friend std::ostream& operator << (std::ostream& f, const R3 * P)
-  { f << P->x << ' ' << P->y << ' ' << P->z ; return f; }
-  friend std::istream& operator >> (std::istream& f, R3 * P)
-  { f >> P->x >> P->y >> P->z ; return f; }
-
-public:  
-  R  x,y,z;  //les 3 coordonnees
-  R3 () :x(0),y(0),z(0) {}  //les constructeurs
-  R3 (R a,R b,R c):x(a),y(b),z(c)  {}                  //Point ou Vecteur (a,b,c)
-  R3 (R3 A,R3 B):x(B.x-A.x),y(B.y-A.y),z(B.z-A.z)  {}  //Vecteur AB
-
-  R3 (gp_Pnt P) : x(P.X()), y(P.Y()), z(P.Z()) {}      //Point     d'OpenCascade
-  R3 (gp_Vec V) : x(V.X()), y(V.Y()), z(V.Z()) {}      //Vecteur   d'OpenCascade
-  R3 (gp_Dir P) : x(P.X()), y(P.Y()), z(P.Z()) {}      //Direction d'OpenCascade
-
-  R3   operator+(R3 P)const  {return R3(x+P.x,y+P.y,z+P.z);}
-  R3   operator+=(R3 P)  {x += P.x; y += P.y; z += P.z; return *this;}
-  R3   operator-(R3 P)const  {return R3(x-P.x,y-P.y,z-P.z);}
-  R3   operator-=(R3 P)  {x -= P.x; y -= P.y; z -= P.z; return *this;}
-  R3   operator-()const  {return R3(-x,-y,-z);}
-  R3   operator+()const  {return *this;}
-  R    operator,(R3 P)const {return  x*P.x+y*P.y+z*P.z;} // produit scalaire
-  R3   operator^(R3 P)const {return R3(y*P.z-z*P.y ,P.x*z-x*P.z, x*P.y-y*P.x);} // produit vectoriel
-  R3   operator*(R c)const {return R3(x*c,y*c,z*c);}
-  R3   operator*=(R c)  {x *= c; y *= c; z *= c; return *this;}
-  R3   operator/(R c)const {return R3(x/c,y/c,z/c);}
-  R3   operator/=(R c)  {x /= c; y /= c; z /= c; return *this;}
-  R  & operator[](int i) {return (&x)[i];}
-  friend R3 operator*(R c,R3 P) {return P*c;}
-
-  R3   operator=(gp_Pnt P) {return R3(P.X(),P.Y(),P.Z());}
-  R3   operator=(gp_Dir P) {return R3(P.X(),P.Y(),P.Z());}
-
-  friend gp_Pnt gp_pnt(R3 xyz) { return gp_Pnt(xyz.x,xyz.y,xyz.z); }
-  //friend gp_Pnt operator=() { return gp_Pnt(x,y,z); }
-  friend gp_Dir gp_dir(R3 xyz) { return gp_Dir(xyz.x,xyz.y,xyz.z); }
-
-  bool  DansPave( R3 & xyzMin, R3 & xyzMax )
-    { return xyzMin.x<=x && x<=xyzMax.x &&
-             xyzMin.y<=y && y<=xyzMax.y &&
-             xyzMin.z<=z && z<=xyzMax.z; }
-};
-
-//la classe R4
-//============
-class R4: public R3
-{
-  friend std::ostream& operator <<(std::ostream& f, const R4 & P )
-  { f << P.x << ' ' << P.y << ' ' << P.z << ' ' << P.omega; return f; }
-  friend std::istream& operator >>(std::istream& f,  R4 & P)
-  { f >> P.x >>  P.y >>  P.z >> P.omega ; return f; }
-
-  friend std::ostream& operator <<(std::ostream& f, const R4 * P )
-  { f << P->x << ' ' << P->y << ' ' << P->z << ' ' << P->omega; return f; }
-  friend std::istream& operator >>(std::istream& f,  R4 * P)
-  { f >> P->x >>  P->y >>  P->z >> P->omega ; return f; }
-
-public:  
-  R  omega;  //la donnee du poids supplementaire
-  R4 () :omega(1.0) {}  //les constructeurs
-  R4 (R a,R b,R c,R d):R3(a,b,c),omega(d) {}
-  R4 (R4 A,R4 B) :R3(B.x-A.x,B.y-A.y,B.z-A.z),omega(B.omega-A.omega) {}
-
-  R4   operator+(R4 P)const  {return R4(x+P.x,y+P.y,z+P.z,omega+P.omega);}
-  R4   operator+=(R4 P)  {x += P.x;y += P.y;z += P.z;omega += P.omega;return *this;}
-  R4   operator-(R4 P)const  {return R4(x-P.x,y-P.y,z-P.z,omega-P.omega);}
-  R4   operator-=(R4 P) {x -= P.x;y -= P.y;z -= P.z;omega -= P.omega;return *this;}
-  R4   operator-()const  {return R4(-x,-y,-z,-omega);}
-  R4   operator+()const  {return *this;}
-  R    operator,(R4 P)const {return  x*P.x+y*P.y+z*P.z+omega*P.omega;} // produit scalaire
-  R4   operator*(R c)const {return R4(x*c,y*c,z*c,omega*c);}
-  R4   operator*=(R c)  {x *= c; y *= c; z *= c; omega *= c; return *this;}
-  R4   operator/(R c)const {return R4(x/c,y/c,z/c,omega/c);}
-  R4   operator/=(R c)  {x /= c; y /= c; z /= c; omega /= c; return *this;}
-  R  & operator[](int i) {return (&x)[i];}
-  friend R4 operator*(R c,R4 P) {return P*c;}
-};
-
-//quelques fonctions supplementaires sur ces classes
-//==================================================
-inline R Aire2d(const R2 A,const R2 B,const R2 C){return (B-A)^(C-A);} 
-inline R Angle2d(R2 P){ return atan2(P.y,P.x);}
-
-inline R Norme2_2(const R2 & A){ return (A,A);}
-inline R Norme2(const R2 & A){ return sqrt((A,A));}
-inline R NormeInfinie(const R2 & A){return Max(Abs(A.x),Abs(A.y));}
-
-inline R Norme2_2(const R3 & A){ return (A,A);}
-inline R Norme2(const R3 & A){ return sqrt((A,A));}
-inline R NormeInfinie(const R3 & A){return Max(Abs(A.x),Abs(A.y),Abs(A.z));}
-
-inline R Norme2_2(const R4 & A){ return (A,A);}
-inline R Norme2(const R4 & A){ return sqrt((A,A));}
-inline R NormeInfinie(const R4 & A){return Max(Abs(A.x),Abs(A.y),Abs(A.z),Abs(A.omega));}
-
-inline R2 XY(R3 P) {return R2(P.x, P.y);}  //restriction a R2 d'un R3 par perte de z
-inline R3 Min(R3 P, R3 Q) 
-{return R3(P.x<Q.x ? P.x : Q.x, P.y<Q.y ? P.y : Q.y, P.z<Q.z ? P.z : Q.z);} //Pt de xyz Min
-inline R3 Max(R3 P, R3 Q) 
-{return R3(P.x>Q.x ? P.x : Q.x, P.y>Q.y ? P.y : Q.y, P.z>Q.z ? P.z : Q.z);} //Pt de xyz Max
-
-#endif
diff --git a/src/MEFISTO2/aptrte.cxx b/src/MEFISTO2/aptrte.cxx
deleted file mode 100644 (file)
index 54ef885..0000000
+++ /dev/null
@@ -1,869 +0,0 @@
-//  MEFISTO2: a library to compute 2D triangulation from segmented boundaries
-//
-// Copyright (C) 2006-2020  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   : aptrte.cxx   le C++ de l'appel du trianguleur plan
-//  Module : SMESH
-//  Author : Alain PERRONNET
-//  Date   : 13 novembre 2006
-
-#include "Rn.h"
-#include "aptrte.h"
-#include "utilities.h"
-
-using namespace std;
-
-extern "C"
-{
-  R aretemaxface_;
-  MEFISTO2D_EXPORT   
-    R
-  #ifdef WIN32
-  #ifdef F2C_BUILD
-  #else
-      __stdcall
-  #endif
-  #endif
-      areteideale()//( R3 xyz, R3 direction )
-  {
-    return aretemaxface_;
-  }
-}
-//calcul de la longueur ideale de l'arete au sommet xyz (z ici inactif)
-//dans la direction donnee
-//a ajuster pour chaque surface plane et selon l'entier notysu (voir plus bas)
-
-
-static double cpunew, cpuold=0;
-
-void
-#ifdef WIN32
-#ifdef F2C_BUILD
-#else
-              __stdcall
-#endif
-#endif
-tempscpu_( double & tempsec )
-//Retourne le temps CPU utilise en secondes
-{  
-  tempsec = ( (double) clock() ) / CLOCKS_PER_SEC;
-  //MESSAGE( "temps cpu=" << tempsec );
-}
-
-
-void
-#ifdef WIN32
-#ifdef F2C_BUILD
-#else
-              __stdcall
-#endif
-#endif
-deltacpu_( R & dtcpu )
-//Retourne le temps CPU utilise en secondes depuis le precedent appel
-{
-  tempscpu_( cpunew );
-  dtcpu  = R( cpunew - cpuold );
-  cpuold = cpunew;
-  //MESSAGE( "delta temps cpu=" << dtcpu );
-  return;
-}
-
-
-void  aptrte( Z   nutysu, R      aretmx,
-              Z   nblf,   Z  *   nudslf,  R2 * uvslf,
-              Z   nbpti,  R2 *   uvpti,
-              Z & nbst,   R2 * & uvst,
-              Z & nbt,    Z  * & nust,
-              Z & ierr )
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-// but : appel de la triangulation par un arbre-4 recouvrant
-// ----- de triangles equilateraux
-//       le contour du domaine plan est defini par des lignes fermees
-//       la premiere ligne etant l'enveloppe de toutes les autres
-//       la fonction areteideale(s,d) donne la taille d'arete
-//       au point s dans la direction (actuellement inactive) d
-//       des lors toute arete issue d'un sommet s devrait avoir une longueur
-//       comprise entre 0.65 areteideale_(s,d) et 1.3 areteideale_(s,d)
-//
-//Attention:
-//  Les tableaux uvslf et uvpti sont supposes ne pas avoir de sommets identiques!
-//  De meme, un sommet d'une ligne fermee ne peut appartenir a une autre ligne fermee
-//
-// entrees:
-// --------
-// nutysu : numero de traitement de areteideale_(s,d) selon le type de surface
-//          0 pas d'emploi de la fonction areteideale_() et aretmx est active
-//          1 il existe une fonction areteideale_(s,d)
-//            dont seules les 2 premieres composantes de uv sont actives
-//          ... autres options a definir ...
-// aretmx : longueur maximale des aretes de la future triangulation
-// nblf   : nombre de lignes fermees de la surface
-// nudslf : numero du dernier sommet de chacune des nblf lignes fermees
-//          nudslf(0)=0 pour permettre la difference sans test
-//          Attention le dernier sommet de chaque ligne est raccorde au premier
-//          tous les sommets et les points internes ont des coordonnees
-//          UV differentes <=> Pas de point double!
-// uvslf  : uv des nudslf(nblf) sommets des lignes fermees
-// nbpti  : nombre de points internes futurs sommets de la triangulation
-// uvpti  : uv des points internes futurs sommets de la triangulation
-//
-// sorties:
-// --------
-// nbst   : nombre de sommets de la triangulation finale
-// uvst   : coordonnees uv des nbst sommets de la triangulation
-// nbt    : nombre de triangles de la triangulation finale
-// nust   : 4 numeros dans uvst des sommets des nbt triangles
-//          s1, s2, s3, 0: no dans uvst des 3 sommets et 0 car quadrangle!
-// ierr   : 0 si pas d'erreur
-//        > 0 sinon
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-// auteur : Alain Perronnet  Laboratoire J.-L. LIONS Paris UPMC mars 2006
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-{
-  Z  nbsttria=4; //Attention: 4 sommets stockes par triangle
-                 //no st1, st2, st3, 0 (non quadrangle)
-
-  R  d, tcpu=0;
-//  R3 direction=R3(0,0,0);  //direction pour areteideale() inactive ici!
-  Z  nbarfr=nudslf[nblf];  //nombre total d'aretes des lignes fermees
-  Z  mxtrou = Max( 1024, nblf );  //nombre maximal de trous dans la surface
-
-  R3 *mnpxyd=NULL;
-  Z  *mnsoar=NULL, mosoar=7, mxsoar, n1soar; //le hachage des aretes
-  Z  *mnartr=NULL, moartr=3, mxartr, n1artr; //le no des 3 aretes des triangles
-  Z  *mntree=NULL, motree=9, mxtree; //L'arbre 4 de TE et nombre d'entiers par TE
-  Z  *mnqueu=NULL, mxqueu;
-  Z  *mn1arcf=NULL;
-  Z  *mnarcf=NULL, mxarcf;
-  Z  *mnarcf1=NULL;
-  Z  *mnarcf2=NULL;
-  Z  *mnarcf3=NULL;
-  Z  *mntrsu=NULL;
-  Z  *mnslig=NULL;
-  Z  *mnarst=NULL;
-  Z  *mnlftr=NULL;
-
-  R3 comxmi[2];            //coordonnees UV Min et Maximales
-  R  aremin, aremax;       //longueur minimale et maximale des aretes
-  R  airemx;               //aire maximale souhaitee d'un triangle
-  R  quamoy, quamin;
-
-  Z  noar0, noar, na;
-  Z  i, l, n, ns, ns0, ns1, ns2, nosotr[3], nt;
-  Z  mxsomm, nbsomm, nbarpi, nbarli, ndtri0, mn;
-  Z  moins1=-1;
-  Z  nuds = 0;
-
-  // initialisation du temps cpu
-  deltacpu_( d );
-  ierr = 0;
-
-  // quelques reservations de tableaux pour faire les calculs
-  // ========================================================
-  // declaration du tableau des coordonnees des sommets de la frontiere
-  // puis des sommets internes ajoutes
-  // majoration empirique du nombre de sommets de la triangulation
-  i = 4*nbarfr/10;
-  mxsomm = Max( 20000, 64*nbpti+i*i );
-  // MESSAGE( "APTRTE: Debut de la triangulation plane avec " );
-  // MESSAGE( "nutysu=" << nutysu << "  aretmx=" << aretmx
-  //          << "  mxsomm=" << mxsomm );
-  // MESSAGE( nbarfr << " sommets sur la frontiere et " << nbpti << " points internes");
-
- NEWDEPART:
-  //mnpxyd( 3, mxsomm ) les coordonnees UV des sommets et la taille d'arete aux sommets
-  if( mnpxyd!=NULL ) delete [] mnpxyd;
-  mnpxyd = new R3[mxsomm];
-  if( mnpxyd==NULL ) goto ERREUR;
-
-  // le tableau mnsoar des aretes des triangles
-  // 1: sommet 1 dans pxyd,
-  // 2: sommet 2 dans pxyd,
-  // 3: numero de 1 a nblf de la ligne qui supporte l'arete
-  // 4: numero dans mnartr du triangle 1 partageant cette arete,
-  // 5: numero dans mnartr du triangle 2 partageant cette arete,
-  // 6: chainage des aretes frontalieres ou internes ou
-  //    des aretes simples des etoiles de triangles,
-  // 7: chainage du hachage des aretes
-  // nombre d'aretes = 3 ( nombre de sommets - 1 + nombre de trous )
-  // pour le hachage des aretes mxsoar doit etre > 3*mxsomm!
-  // h(ns1,ns2) = min( ns1, ns2 )
-  if( mnsoar!=NULL ) delete [] mnsoar;
-  mxsoar = 3 * ( mxsomm + mxtrou );
-  mnsoar = new Z[mosoar*mxsoar];
-  if( mnsoar==NULL ) goto ERREUR;
-  //initialiser le tableau mnsoar pour le hachage des aretes
-  insoar( mxsomm, mosoar, mxsoar, n1soar, mnsoar );
-
-  // mnarst( mxsomm ) numero mnsoar d'une arete pour chacun des sommets
-  if( mnarst!=NULL ) delete [] mnarst;
-  mnarst = new Z[1+mxsomm];
-  if( mnarst==NULL ) goto ERREUR;
-  n = 1+mxsomm;
-  azeroi( n, mnarst );
-
-  // mnslig( mxsomm ) no de sommet dans sa ligne pour chaque sommet frontalier
-  //               ou no du point si interne forc'e par l'utilisateur
-  //               ou  0 si interne cree par le module
-  if( mnslig!=NULL ) delete [] mnslig;
-  mnslig = new Z[mxsomm];
-  if( mnslig==NULL ) goto ERREUR;
-  azeroi( mxsomm, mnslig );
-
-  // initialisation des aretes frontalieres de la triangulation future
-  // renumerotation des sommets des aretes des lignes pour la triangulation
-  // mise a l'echelle des coordonnees des sommets pour obtenir une
-  // meilleure precision lors des calculs + quelques verifications
-  // boucle sur les lignes fermees qui forment la frontiere
-  // ======================================================================
-  noar = 0;
-  aremin = 1e100;
-  aremax = 0;
-
-  for (n=1; n<=nblf; n++)
-  {
-    //l'initialisation de la premiere arete de la ligne n dans la triangulation
-    //-------------------------------------------------------------------------
-    //le sommet ns0 est le numero de l'origine de la ligne
-    ns0 = nudslf[n-1];
-    mnpxyd[ns0].x = uvslf[ns0].x;
-    mnpxyd[ns0].y = uvslf[ns0].y;
-    mnpxyd[ns0].z = areteideale();//( mnpxyd[ns0], direction );
-//     MESSAGE("Sommet " << ns0 << ": " << mnpxyd[ns0].x
-//       << " " << mnpxyd[ns0].y << " longueur arete=" << mnpxyd[ns0].z);
-
-    //carre de la longueur de l'arete 1 de la ligne fermee n
-    d = pow( uvslf[ns0+1].x - uvslf[ns0].x, 2 ) 
-      + pow( uvslf[ns0+1].y - uvslf[ns0].y, 2 ) ;
-    aremin = Min( aremin, d );
-    aremax = Max( aremax, d );
-
-    //le numero des 2 sommets (ns1,ns2) de la premiere arete de la ligne
-    //initialisation de la 1-ere arete ns1-ns1+1 de cette ligne fermee n
-    //le numero des 2 sommets ns1 ns2 de la 1-ere arete
-    //Attention: les numeros ns debutent a 1 (ils ont >0)
-    //           les tableaux c++ demarrent a zero!
-    //           les tableaux fortran demarrent ou l'on veut!
-    ns0++;
-    ns1 = ns0;
-    ns2 = ns1+1;
-
-     //le numero n de la ligne du sommet et son numero ns1 dans la ligne
-    mnslig[ns0-1] = 1000000 * n + ns1-nudslf[n-1];
-    fasoar( ns1, ns2, moins1, moins1, n,
-             mosoar, mxsoar, n1soar, mnsoar, mnarst,
-             noar0,  ierr );
-    //pas de test sur ierr car pas de saturation possible a ce niveau
-
-    //le pointeur dans le hachage sur la premiere arete de la ligne fermee n
-    //mndalf[n] = noar0;
-
-    //la nouvelle arete est la suivante de l'arete definie juste avant
-    if( noar > 0 )
-      mnsoar[mosoar * noar - mosoar + 5] = noar0;
-
-    //l'initialisation des aretes suivantes de la ligne dans la triangulation
-    //-----------------------------------------------------------------------
-    nbarli = nudslf[n] - nudslf[n-1];  //nombre d'aretes=sommets de la ligne n
-    for (i=2; i<=nbarli; i++)
-    {
-      ns1 = ns2; //le numero de l'arete et le numero du premier sommet de l'arete
-      if( i < nbarli )
-        //nbs+1 est le 2-eme sommet de l'arete i de la ligne fermee n
-        ns2 = ns1+1;
-      else
-        //le 2-eme sommet de la derniere arete est le premier sommet de la ligne
-        ns2 = ns0;
-
-      //l'arete precedente est dotee de sa suivante:celle cree ensuite
-      //les 2 coordonnees du sommet ns2 de la ligne
-      ns = ns1 - 1;
-//debut ajout  5/10/2006  ................................................
-      nuds = Max( nuds, ns );   //le numero du dernier sommet traite
-//fin   ajout  5/10/2006  ................................................
-      mnpxyd[ns].x = uvslf[ns].x;
-      mnpxyd[ns].y = uvslf[ns].y;
-      mnpxyd[ns].z = areteideale();//( mnpxyd[ns], direction );
-//       MESSAGE("Sommet " << ns << ": " << mnpxyd[ns].x
-//         << " " << mnpxyd[ns].y << " longueur arete=" << mnpxyd[ns].z);
-
-      //carre de la longueur de l'arete
-      d = pow( uvslf[ns2-1].x - uvslf[ns1-1].x, 2) 
-        + pow( uvslf[ns2-1].y - uvslf[ns1-1].y, 2);
-      aremin = Min( aremin, d );
-      aremax = Max( aremax, d );
-
-//debut ajout du 5/10/2006  .............................................
-      //la longueur de l'arete ns1-ns2
-      d = sqrt( d );
-      //longueur arete = Min ( aretmx, aretes incidentes )
-      mnpxyd[ns   ].z = Min( mnpxyd[ns   ].z, d );
-      mnpxyd[ns2-1].z = Min( mnpxyd[ns2-1].z, d );
-//fin ajout du 5/10/2006  ...............................................
-
-      //le numero n de la ligne du sommet et son numero ns1 dans la ligne
-      mnslig[ns] = 1000000 * n + ns1-nudslf[n-1];
-
-      //ajout de l'arete dans la liste
-      fasoar( ns1, ns2, moins1, moins1, n,
-               mosoar, mxsoar, n1soar, mnsoar,
-               mnarst, noar, ierr );
-      //pas de test sur ierr car pas de saturation possible a ce niveau
-
-      //chainage des aretes frontalieres en position 6 du tableau mnsoar
-      //la nouvelle arete est la suivante de l'arete definie juste avant
-      mnsoar[ mosoar * noar0 - mosoar + 5 ] = noar;
-      noar0 = noar;
-   }
-    //attention: la derniere arete de la ligne fermee enveloppe
-    //           devient en fait la premiere arete de cette ligne
-    //           dans le chainage des aretes de la frontiere!
-  }
-  if( ierr != 0 ) goto ERREUR;
-
-  aremin = sqrt( aremin );  //longueur minimale d'une arete des lignes fermees
-  aremax = sqrt( aremax );  //longueur maximale d'une arete
-
-//debut ajout  9/11/2006  ................................................
-  // devenu un commentaire aretmx = Min( aretmx, aremax ); //pour homogeneiser
-
-  // protection contre une arete max desiree trop grande ou trop petite
-  if( aretmx > aremax*2.05 ) aretmx = aremax;
-
-  // protection contre une arete max desiree trop petite
-  if( (aremax-aremin) > (aremin+aremax)*0.05 && aretmx < aremin*0.5 )
-    aretmx =(aremin+aremax*2)/3.0;
-
-  if( aretmx < aremin  && aremin > 0 )
-    aretmx = aremin;
-
-  //sauvegarde pour la fonction areteideale_
-  aretemaxface_ = aretmx;
-
-  //aire maximale souhaitee des triangles
-  airemx = aretmx * aretmx * sqrt(3.0) / 2.0;  //Aire triangle equilateral
-
-  for(i=0; i<=nuds; i++ )
-    mnpxyd[i].z = Min( mnpxyd[i].z, aretmx );
-  //MESSAGE("Numero du dernier sommet frontalier=" << nuds+1);
-//fin  ajout 9/11/2006  .................................................
-
-
-  // MESSAGE("Sur  le  bord: arete min=" << aremin << " arete max=" << aremax );
-  // MESSAGE("Triangulation: arete mx=" << aretmx
-  //         << " triangle aire mx=" << airemx );
-
-  //chainage des aretes frontalieres : la derniere arete frontaliere
-  mnsoar[ mosoar * noar - mosoar + 5 ] = 0;
-
-  //tous les sommets et aretes frontaliers sont numerotes de 1 a nbarfr
-  //reservation du tableau des numeros des 3 aretes de chaque triangle
-  //mnartr( moartr, mxartr )
-  //En nombre: Triangles = Aretes Internes + Aretes Frontalieres - Sommets + 1-Trous
-  //          3Triangles = 2 Aretes internes + Aretes frontalieres
-  //       d'ou 3T/2 < AI + AF => T < 3T/2  - Sommets + 1-Trous
-  //nombre de triangles < 2 ( nombre de sommets - 1 + nombre de trous )
-  if( mnartr!=NULL ) delete [] mnartr;
-  mxartr = 2 * ( mxsomm + mxtrou );
-  mnartr = new Z[moartr*mxartr];
-  if( mnartr==NULL ) goto ERREUR;
-
-  //Ajout des points internes
-  ns1 = nudslf[ nblf ];
-  for (i=0; i<nbpti; i++)
-  {
-    //les 2 coordonnees du point i de sommet nbs
-    mnpxyd[ns1].x = uvpti[i].x;
-    mnpxyd[ns1].y = uvpti[i].y;
-    mnpxyd[ns1].z = areteideale();//( mnpxyd[ns1], direction );
-    //le numero i du point interne
-    mnslig[ns1] = i+1;
-    ns1++;
-  }
-
-  //nombre de sommets de la frontiere et internes
-  nbarpi = ns1;
-
-  // creation de l'arbre-4 des te (tableau letree)
-  // ajout dans les te des sommets des lignes et des points internes imposes
-  // =======================================================================
-  // premiere estimation de mxtree
-  mxtree = 2 * mxsomm;
-
- NEWTREE:  //en cas de saturation de l'un des tableaux, on boucle
-  //MESSAGE( "Debut triangulation avec mxsomm=" << mxsomm );
-  if( mntree != NULL ) delete [] mntree;
-  nbsomm = nbarpi;
-  mntree = new Z[motree*(1+mxtree)];
-  if( mntree==NULL ) goto ERREUR;
-
-  //initialisation du tableau letree et ajout dans letree des sommets 1 a nbsomm
-  comxmi[0].x = comxmi[1].x = uvslf[0].x;
-  comxmi[0].y = comxmi[1].y = uvslf[0].y;
-  teajte( mxsomm, nbsomm, mnpxyd, comxmi, aretmx, mxtree, mntree, ierr );
-  comxmi[0].z=0;
-  comxmi[1].z=0;
-
-  if( ierr == 51 )
-  {
-    //saturation de letree => sa taille est augmentee et relance
-    mxtree = mxtree * 2;
-    ierr   = 0;
-    //MESSAGE( "Nouvelle valeur de mxtree=" << mxtree );
-    goto NEWTREE;
-  }
-
-  deltacpu_( d );
-  tcpu += d;
-  //MESSAGE( "Temps de l'ajout arbre-4 des Triangles Equilateraux=" << d << " secondes" );
-  if( ierr != 0 ) goto ERREUR;
-  //ici le tableau mnpxyd contient les sommets des te et les points frontaliers et internes
-
-  // homogeneisation de l'arbre des te a un saut de taille au plus
-  // prise en compte des tailles d'aretes souhaitees autour des sommets initiaux
-  // ===========================================================================
-  // reservation de la queue pour parcourir les te de l'arbre
-  if( mnqueu != NULL ) delete [] mnqueu;
-  mxqueu = mxtree;
-  mnqueu = new Z[mxqueu];
-  if( mnqueu==NULL) goto ERREUR;
-
-  tehote( nutysu, nbarpi, mxsomm, nbsomm, mnpxyd,
-           comxmi, aretmx,
-           mntree, mxqueu, mnqueu,
-           ierr );
-
-  deltacpu_( d );
-  tcpu += d;
-  //MESSAGE("Temps de l'adaptation et l'homogeneisation de l'arbre-4 des TE="
-       // << d << " secondes");
-  if( ierr != 0 )
-  {
-    //destruction du tableau auxiliaire et de l'arbre
-    if( ierr == 51 )
-    {
-      //letree sature
-      mxtree = mxtree * 2;
-      //MESSAGE( "Redemarrage avec la valeur de mxtree=" << mxtree );
-      ierr = 0;
-      goto NEWTREE;
-    }
-    else
-      goto ERREUR;
-  }
-
-  // trianguler les triangles equilateraux feuilles a partir de leurs 3 sommets
-  // et des points de la frontiere, des points internes imposes interieurs
-  // ==========================================================================
-  tetrte( comxmi, aretmx, nbarpi, mxsomm, mnpxyd,
-           mxqueu, mnqueu, mntree, mosoar, mxsoar, n1soar, mnsoar,
-           moartr, mxartr, n1artr, mnartr, mnarst,
-           ierr );
-
-  // destruction de la queue et de l'arbre devenus inutiles
-  delete [] mnqueu;  mnqueu=NULL;
-  delete [] mntree;  mntree=NULL;
-
-  //Temps calcul
-  deltacpu_( d );
-  tcpu += d;
-//MESSAGE( "Temps de la triangulation des TE=" << d << " secondes" );
-
-  // ierr =0 si pas d'erreur
-  //      =1 si le tableau mnsoar est sature
-  //      =2 si le tableau mnartr est sature
-  //      =3 si aucun des triangles ne contient l'un des points internes
-  //      =5 si saturation de la queue de parcours de l'arbre des te
-  if( ierr != 0 ) goto ERREUR;
-
-  //qualites de la triangulation actuelle
-  qualitetrte( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr,
-                nbt, quamoy, quamin );
-
-  // boucle sur les aretes internes (non sur une ligne de la frontiere)
-  // avec echange des 2 diagonales afin de rendre la triangulation delaunay
-  // ======================================================================
-  // formation du chainage 6 des aretes internes a echanger eventuellement
-  aisoar( mosoar, mxsoar, mnsoar, na );
-  tedela( mnpxyd, mnarst,
-           mosoar, mxsoar, n1soar, mnsoar, na,
-           moartr, mxartr, n1artr, mnartr, n );
-
-//MESSAGE( "Nombre d'echanges des diagonales de 2 triangles=" << n );
-  deltacpu_( d );
-  tcpu += d;
-  // MESSAGE("Temps de la triangulation Delaunay par echange des diagonales="
-  //      << d << " secondes");
-
-  //qualites de la triangulation actuelle
-  qualitetrte( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr,
-                nbt, quamoy, quamin );
-
-  // detection des aretes frontalieres initiales perdues
-  // triangulation frontale pour les restaurer
-  // ===================================================
-  mxarcf = mxsomm/5;
-  if( mn1arcf != NULL ) delete [] mn1arcf;
-  if( mnarcf  != NULL ) delete [] mnarcf;
-  if( mnarcf1 != NULL ) delete [] mnarcf1;
-  if( mnarcf2 != NULL ) delete [] mnarcf2;
-  mn1arcf = new Z[1+mxarcf];
-  if( mn1arcf == NULL ) goto ERREUR;
-  mnarcf  = new Z[3*mxarcf];
-  if( mnarcf == NULL ) goto ERREUR;
-  mnarcf1 = new Z[mxarcf];
-  if( mnarcf1 == NULL ) goto ERREUR;
-  mnarcf2 = new Z[mxarcf];
-  if( mnarcf2 == NULL ) goto ERREUR;
-
-  terefr( nbarpi, mnpxyd,
-           mosoar, mxsoar, n1soar, mnsoar,
-           moartr, mxartr, n1artr, mnartr, mnarst,
-           mxarcf, mn1arcf, mnarcf, mnarcf1, mnarcf2,
-           n, ierr );
-
-//MESSAGE( "Restauration de " << n << " aretes perdues de la frontiere  ierr=" << ierr );
-  deltacpu_( d );
-  tcpu += d;
-//MESSAGE("Temps de la recuperation des aretes perdues de la frontiere="
-//     << d << " secondes");
-
-  if( ierr != 0 ) goto ERREUR;
-
-  //qualites de la triangulation actuelle
-  qualitetrte( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr,
-                nbt, quamoy, quamin );
-
-  // fin de la triangulation avec respect des aretes initiales frontalieres
-
-  // suppression des triangles externes a la surface
-  // ===============================================
-  // recherche du dernier triangle utilise
-  mn = mxartr * moartr;
-  for ( ndtri0=mxartr; ndtri0<=1; ndtri0-- )
-  {
-    mn -= moartr;
-    if( mnartr[mn] != 0 ) break;
-  }
-
-  if( mntrsu != NULL ) delete [] mntrsu;
-  mntrsu = new Z[ndtri0];
-  if( mntrsu == NULL ) goto ERREUR;
-
-  if( mnlftr != NULL ) delete [] mnlftr;
-  mnlftr = new Z[nblf];
-  if( mnlftr == NULL ) goto ERREUR;
-
-  for (n=0; n<nblf; n++)  //numero de la ligne fermee de 1 a nblf
-    mnlftr[n] = n+1;
-
-  tesuex( nblf,   mnlftr,
-           ndtri0, nbsomm, mnpxyd, mnslig,
-           mosoar, mxsoar, mnsoar,
-           moartr, mxartr, n1artr, mnartr, mnarst,
-           nbt, mntrsu, ierr );
-
-  delete [] mnlftr; mnlftr=NULL;
-  delete [] mntrsu; mntrsu=NULL;
-
-  deltacpu_( d );
-  tcpu += d;
-//MESSAGE( "Temps de la suppression des triangles externes=" << d << "ierr=" << ierr );
-  if( ierr != 0 ) goto ERREUR;
-
-  //qualites de la triangulation actuelle
-  qualitetrte( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr,
-                nbt, quamoy, quamin );
-
-  // amelioration de la qualite de la triangulation par
-  // barycentrage des sommets internes a la triangulation
-  // suppression des aretes trop longues ou trop courtes
-  // modification de la topologie des groupes de triangles
-  // mise en delaunay de la triangulation
-  // =====================================================
-  mnarcf3 = new Z[mxarcf];
-  if( mnarcf3 == NULL )
-  {
-    MESSAGE ( "aptrte: MC saturee mnarcf3=" << mnarcf3 );
-    goto ERREUR;
-  }
-  teamqt( nutysu,  aretmx,  airemx,
-           mnarst,  mosoar,  mxsoar, n1soar, mnsoar,
-           moartr,  mxartr,  n1artr, mnartr,
-           mxarcf,  mnarcf2, mnarcf3,
-           mn1arcf, mnarcf,  mnarcf1,
-           nbarpi,  nbsomm, mxsomm, mnpxyd, mnslig,
-           ierr );
-  if( mnarcf3 != NULL ) {delete [] mnarcf3; mnarcf3=NULL;}
-  if( mn1arcf != NULL ) {delete [] mn1arcf; mn1arcf=NULL;}
-  if( mnarcf  != NULL ) {delete [] mnarcf;  mnarcf =NULL;}
-  if( mnarcf1 != NULL ) {delete [] mnarcf1; mnarcf1=NULL;}
-  if( mnarcf2 != NULL ) {delete [] mnarcf2; mnarcf2=NULL;}
-
-  deltacpu_( d );
-  tcpu += d;
-//MESSAGE( "Temps de l'amelioration de la qualite de la triangulation=" << d );
-  if( ierr == -13 ) ierr=0; //6/10/2006 arret de l'amelioration apres boucle infinie dans caetoi
-  if( ierr !=   0 ) goto ERREUR;
-
-  //qualites de la triangulation finale
-  qualitetrte( mnpxyd, mosoar, mxsoar, mnsoar, moartr, mxartr, mnartr,
-                nbt, quamoy, quamin );
-
-  // renumerotation des sommets internes: mnarst(i)=numero final du sommet
-  // ===================================
-  for (i=0; i<=nbsomm; i++)
-    mnarst[i] = 0;
-
-  for (nt=1; nt<=mxartr; nt++)
-  {
-    if( mnartr[nt*moartr-moartr] != 0 )
-    {
-      //le numero des 3 sommets du triangle nt
-      nusotr( nt, mosoar, mnsoar, moartr, mnartr, nosotr );
-      //les 3 sommets du triangle sont actifs
-      mnarst[ nosotr[0] ] = 1;
-      mnarst[ nosotr[1] ] = 1;
-      mnarst[ nosotr[2] ] = 1;
-    }
-  }
-  nbst = 0;
-  for (i=1; i<=nbsomm; i++)
-  {
-    if( mnarst[i] >0 )
-      mnarst[i] = ++nbst;
-  }
-
-  // generation du tableau uvst de la surface triangulee
-  // ---------------------------------------------------
-  if( uvst != NULL ) delete [] uvst;
-  uvst = new R2[nbst];
-  if( uvst == NULL ) goto ERREUR;
-
-  nbst=-1;
-  for (i=0; i<nbsomm; i++ )
-  {
-    if( mnarst[i+1]>0 )
-    {
-      nbst++;
-      uvst[nbst].x = mnpxyd[i].x;
-      uvst[nbst].y = mnpxyd[i].y;
-
-      //si le sommet est un point ou appartient a une ligne
-      //ses coordonnees initiales sont restaurees
-      n = mnslig[i];
-      if( n > 0 )
-      {
-        if( n >= 1000000 )
-        {
-          //sommet d'une ligne
-          //retour aux coordonnees initiales dans uvslf
-          l = n / 1000000;
-          n = n - 1000000 * l + nudslf[l-1] - 1;
-          uvst[nbst].x = uvslf[n].x;
-          uvst[nbst].y = uvslf[n].y;
-        }
-        else
-        {
-          //point utilisateur n interne impose
-          //retour aux coordonnees initiales dans uvpti
-          uvst[nbst].x = uvpti[n-1].x;
-          uvst[nbst].y = uvpti[n-1].y;
-        }
-      }
-    }
-  }
-  nbst++;
-
-  // generation du tableau 'nsef' de la surface triangulee
-  // -----------------------------------------------------
-  // boucle sur les triangles occupes (internes et externes)
-  if( nust != NULL ) delete [] nust;
-  nust = new Z[nbsttria*nbt];
-  if( nust == NULL ) goto ERREUR;
-  nbt = 0;
-  for (i=1; i<=mxartr; i++)
-  {
-    //le triangle i de mnartr
-    if( mnartr[i*moartr-moartr] != 0 )
-    {
-      //le triangle i est interne => nosotr numero de ses 3 sommets
-      nusotr( i, mosoar, mnsoar, moartr, mnartr,  nosotr );
-      nust[nbt++] = mnarst[ nosotr[0] ];
-      nust[nbt++] = mnarst[ nosotr[1] ];
-      nust[nbt++] = mnarst[ nosotr[2] ];
-      nust[nbt++] = 0;
-    }
-  }
-  nbt /= nbsttria;  //le nombre final de triangles de la surface
-  // MESSAGE( "APTRTE: Fin de la triangulation plane avec "<<nbst<<" sommets et "
-  //          << nbt << " triangles" );
-  deltacpu_( d );
-  tcpu += d;
-  // MESSAGE( "APTRTE: Temps total de la triangulation plane=" << tcpu << " secondes" );
-
-  // destruction des tableaux auxiliaires
-  // ------------------------------------
- NETTOYAGE:
-  if( mnarst != NULL ) delete [] mnarst;
-  if( mnartr != NULL ) delete [] mnartr;
-  if( mnslig != NULL ) delete [] mnslig;
-  if( mnsoar != NULL ) delete [] mnsoar;
-  if( mnpxyd != NULL ) delete [] mnpxyd;
-  if( mntree != NULL ) delete [] mntree;
-  if( mnqueu != NULL ) delete [] mnqueu;
-  if( mntrsu != NULL ) delete [] mntrsu;
-  if( mnlftr != NULL ) delete [] mnlftr;
-  if( mn1arcf != NULL ) delete [] mn1arcf;
-  if( mnarcf  != NULL ) delete [] mnarcf;
-  if( mnarcf1 != NULL ) delete [] mnarcf1;
-  if( mnarcf2 != NULL ) delete [] mnarcf2;
-  if( mnarcf3 != NULL ) delete [] mnarcf3;
-  return;
-
- ERREUR:
-  if( ierr == 51 || ierr == 52 )
-  {
-    //saturation des sommets => redepart avec 2 fois plus de sommets
-    mxsomm = 2 * mxsomm;
-    ierr   = 0;
-    goto NEWDEPART;
-  }
-  else
-  {
-    MESSAGE( "APTRTE: Triangulation NON REALISEE  avec erreur=" << ierr );
-    if( ierr == 0 ) ierr=1;
-    goto NETTOYAGE;
-  }
-}
-void
-#ifdef WIN32
-#ifdef F2C_BUILD
-#else
-              __stdcall
-#endif
-#endif
- qualitetrte( R3 *mnpxyd,
-                   Z & mosoar, Z & /*mxsoar*/, Z *mnsoar,
-                   Z & moartr, Z & mxartr, Z *mnartr,
-                   Z & nbtria, R & quamoy, R & quamin )
-// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-// but :    calculer la qualite moyenne et minimale de la triangulation
-// -----    actuelle definie par les tableaux mnsoar et mnartr
-// entrees:
-// --------
-// mnpxyd : tableau des coordonnees 2d des points
-//          par point : x  y  distance_souhaitee
-// mosoar : nombre maximal d'entiers par arete et
-//          indice dans mnsoar de l'arete suivante dans le hachage
-// mxsoar : nombre maximal d'aretes stockables dans le tableau mnsoar
-//          attention: mxsoar>3*mxsomm obligatoire!
-// mnsoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-//          chainage des aretes frontalieres, chainage du hachage des aretes
-//          hachage des aretes = mnsoar(1)+mnsoar(2)*2
-//          avec mxsoar>=3*mxsomm
-//          une arete i de mnsoar est vide <=> mnsoar(1,i)=0 et
-//          mnsoar(2,arete vide)=l'arete vide qui precede
-//          mnsoar(3,arete vide)=l'arete vide qui suit
-// moartr : nombre maximal d'entiers par arete du tableau mnartr
-// mxartr : nombre maximal de triangles declarables
-// mnartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-//          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-// sorties:
-// --------
-// nbtria : nombre de triangles internes au domaine
-// quamoy : qualite moyenne  des triangles actuels
-// quamin : qualite minimale des triangles actuels
-// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-{
-  R  d, aire, qualite;
-  Z  nosotr[3], mn, nbtrianeg, nt, ntqmin;
-
-  aire   = 0;
-  quamoy = 0;
-  quamin = 2.0;
-  nbtria = 0;
-  nbtrianeg = 0;
-  ntqmin = 0;
-
-  mn = -moartr;
-  for ( nt=1; nt<=mxartr; nt++ )
-  {
-    mn += moartr;
-    if( mnartr[mn]!=0 )
-    {
-      //un triangle occupe de plus
-      nbtria++;
-
-      //le numero des 3 sommets du triangle nt
-      nusotr( nt, mosoar, mnsoar, moartr, mnartr,  nosotr );
-
-      //la qualite du triangle ns1 ns2 ns3
-      qutr2d( mnpxyd[nosotr[0]-1], mnpxyd[nosotr[1]-1], mnpxyd[nosotr[2]-1],
-               qualite );
-
-      //la qualite moyenne
-      quamoy += qualite;
-
-      //la qualite minimale
-      if( qualite < quamin )
-      {
-         quamin = qualite;
-         ntqmin = nt;
-      }
-
-      //aire signee du triangle nt
-      d = surtd2( mnpxyd[nosotr[0]-1], mnpxyd[nosotr[1]-1], mnpxyd[nosotr[2]-1] );
-      if( d<0 )
-      {
-        //un triangle d'aire negative de plus
-        nbtrianeg++;
-        MESSAGE("ATTENTION: le triangle " << nt << " de sommets:"
-             << nosotr[0] << " " << nosotr[1] << " " << nosotr[2]
-             << " a une aire " << d <<"<=0");
-      }
-
-      //aire des triangles actuels
-      aire += Abs(d);
-    }
-  }
-
-  //les affichages
-  quamoy /= nbtria;
-  // MESSAGE("Qualite moyenne=" << quamoy
-  //      << "  Qualite minimale=" << quamin
-  //      << " des " << nbtria << " triangles de surface plane totale="
-  //      << aire);
-
-  if( quamin<0.3 )
-  {
-    //le numero des 3 sommets du triangle ntqmin de qualite minimale
-    nusotr(ntqmin, mosoar, mnsoar, moartr, mnartr,  nosotr );
-    // MESSAGE("Triangle de qualite minimale "<<quamin<<" de sommets:"
-    //         <<nosotr[0]<<" "<<nosotr[1]<<" "<<nosotr[2]<<" ");
-    // for (int i=0;i<3;i++)
-    //   MESSAGE("Sommet "<<nosotr[i]<<": x="<< mnpxyd[nosotr[i]-1].x
-    //           <<" y="<< mnpxyd[nosotr[i]-1].y);
-  }
-
-  if( nbtrianeg>0 )
-    MESSAGE( "ATTENTION: "<< nbtrianeg << " TRIANGLES d'AIRE NEGATIVE" );
-
-  return;
-}
diff --git a/src/MEFISTO2/aptrte.h b/src/MEFISTO2/aptrte.h
deleted file mode 100644 (file)
index a979f41..0000000
+++ /dev/null
@@ -1,451 +0,0 @@
-// SMESH MEFISTO2 : algorithm for meshing
-//
-// Copyright (C) 2006-2020  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   : aptrte.h
-//  Author : Alain PERRONNET
-//  Module : SMESH
-//  Date   : 13 novembre 2006
-
-#ifndef aptrte__h
-#define aptrte__h
-
-#include <climits>   // limites min max int long real ...
-#ifndef WIN32
-#include <unistd.h>   // gethostname, ...
-#endif
-#include <stdio.h>
-#ifndef WIN32
-#include <iostream> // pour cout cin ...
-#include <iomanip>  // pour le format des io setw, stx, setfill, ...
-#endif
-#include <string.h>   // pour les fonctions sur les chaines de caracteres
-#include <ctype.h>
-#include <stdlib.h>
-#include <math.h>     // pour les fonctions mathematiques
-#include <time.h>
-
-#include <sys/types.h>
-#ifndef WIN32
-#include <sys/time.h>
-#endif
-
-#ifdef WIN32
- #if defined MEFISTO2D_EXPORTS
-  #define MEFISTO2D_EXPORT __declspec( dllexport )
- #else
-  #define MEFISTO2D_EXPORT __declspec( dllimport )
- #endif
-#else
- #define MEFISTO2D_EXPORT
-#endif
-
-
-MEFISTO2D_EXPORT
-  void  aptrte( Z nutysu, R aretmx,
-              Z nblf,   Z *nudslf, R2 *uvslf,
-              Z nbpti,  R2 *uvpti,
-              Z & nbst, R2 * & uvst, Z & nbt, Z * & nust,
-              Z & ierr );
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-// but : appel de la triangulation par un arbre-4 recouvrant
-// ----- de triangles equilateraux
-//       le contour du domaine plan est defini par des lignes fermees
-//       la premiere ligne etant l'enveloppe de toutes les autres
-//       la fonction areteideale_(s,d) donne la taille d'arete
-//       au point s dans la direction d (direction inactive pour l'instant)
-//       des lors toute arete issue d'un sommet s devrait avoir une longueur
-//       comprise entre 0.65 areteideale_(s,d) et 1.3 areteideale_(s,d)
-//
-//Attention:
-//  Les tableaux uvslf et uvpti sont supposes ne pas avoir de sommets identiques!
-//  De meme, un sommet d'une ligne fermee ne peut appartenir a une autre ligne fermee
-//
-// entrees:
-// --------
-// nutysu : numero de traitement de areteideale_() selon le type de surface
-//          0 pas d'emploi de la fonction areteideale_() et aretmx est active
-//          1 il existe une fonction areteideale_(s,d)
-//            dont seules les 2 premieres composantes de uv sont actives
-//          ... autres options a definir ...
-// aretmx : longueur maximale des aretes de la future triangulation
-// nblf   : nombre de lignes fermees de la surface
-// nudslf : numero du dernier sommet de chacune des nblf lignes fermees
-//          nudslf(0)=0 pour permettre la difference sans test
-//          Attention le dernier sommet de chaque ligne est raccorde au premier
-//          tous les sommets et les points internes ont des coordonnees
-//          UV differentes <=> Pas de point double!
-// uvslf  : uv des nudslf(nblf) sommets des lignes fermees
-// nbpti  : nombre de points internes futurs sommets de la triangulation
-// uvpti  : uv des points internes futurs sommets de la triangulation
-//
-// sorties:
-// --------
-// nbst   : nombre de sommets de la triangulation finale
-// uvst   : coordonnees uv des nbst sommets de la triangulation
-// nbt    : nombre de triangles de la triangulation finale
-// nust   : 3 numeros dans uvst des sommets des nbt triangles
-// ierr   : 0 si pas d'erreur
-//        > 0 sinon
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-// auteur : Alain Perronnet  Analyse Numerique Paris UPMC   decembre 2001
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-#if WIN32 & DFORTRAN
-  #define tempscpu TEMPSCPU
-  #define deltacpu DELTACPU
-  #define insoar   INSOAR
-  #define azeroi   AZEROI
-  #define fasoar   FASOAR
-  #define teajte   TEAJTE
-  #define tehote   TEHOTE
-  #define tetrte   TETRTE
-  #define aisoar   AISOAR
-  #define tedela   TEDELA
-  #define terefr   TEREFR
-  #define tesuex   TESUEX
-  #define teamqt   TEAMQT
-  #define nusotr   NUSOTR
-  #define qutr2d   QUTR2D
-  #define surtd2   SURTD2
-  #define qualitetrte   QUALITETRTE
-  
-  #define areteideale ARETEIDEALE
-  
-#else
-  #define tempscpu tempscpu_
-  #define deltacpu deltacpu_
-  #define insoar   insoar_
-  #define azeroi   azeroi_
-  #define fasoar   fasoar_
-  #define teajte   teajte_
-  #define tehote   tehote_
-  #define tetrte   tetrte_
-  #define aisoar   aisoar_
-  #define tedela   tedela_
-  #define terefr   terefr_
-  #define tesuex   tesuex_
-  #define teamqt   teamqt_
-  #define nusotr   nusotr_
-  #define qutr2d   qutr2d_
-  #define surtd2   surtd2_
-  #define qualitetrte   qualitetrte_
-
-  #define areteideale areteideale_
-
-#endif
-
-
-extern "C" { void
-#ifdef WIN32
-#ifdef F2C_BUILD
-#else
-              __stdcall
-#endif
-#endif
-   qualitetrte( R3 *mnpxyd,
-                   Z & mosoar, Z & mxsoar, Z *mnsoar,
-                   Z & moartr, Z & mxartr, Z *mnartr,
-                   Z & nbtria, R & quamoy, R & quamin ); }
-// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-// but :    calculer la qualite moyenne et minimale de la triangulation
-// -----    actuelle definie par les tableaux nosoar et noartr
-// entrees:
-// --------
-// mnpxyd : tableau des coordonnees 2d des points
-//          par point : x  y  distance_souhaitee
-// mosoar : nombre maximal d'entiers par arete et
-//          indice dans nosoar de l'arete suivante dans le hachage
-// mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-//          attention: mxsoar>3*mxsomm obligatoire!
-// nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-//          chainage des aretes frontalieres, chainage du hachage des aretes
-//          hachage des aretes = nosoar(1)+nosoar(2)*2
-//          avec mxsoar>=3*mxsomm
-//          une arete i de nosoar est vide <=> nosoar(1,i)=0 et
-//          nosoar(2,arete vide)=l'arete vide qui precede
-//          nosoar(3,arete vide)=l'arete vide qui suit
-// moartr : nombre maximal d'entiers par arete du tableau noartr
-// mxartr : nombre maximal de triangles declarables
-// noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-//          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-// sorties:
-// --------
-// nbtria : nombre de triangles internes au domaine
-// quamoy : qualite moyenne  des triangles actuels
-// quamin : qualite minimale des triangles actuels
-// +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-extern "C" {  void
-#ifdef WIN32
-#ifdef F2C_BUILD
-#else
-              __stdcall
-#endif
-#endif
-  tempscpu( double & tempsec );
-}
-    
-//Retourne le temps CPU utilise en secondes
-
-extern "C" { void
-#ifdef WIN32
-#ifdef F2C_BUILD
-#else
-              __stdcall
-#endif
-#endif
-  deltacpu( R & dtcpu );
-}
-    
-//Retourne le temps CPU utilise en secondes depuis le precedent appel
-
-//initialiser le tableau mnsoar pour le hachage des aretes
-extern "C" {void
-#ifdef WIN32
-#ifdef F2C_BUILD
-#else
-              __stdcall
-#endif
-#endif
-  insoar( Z & mxsomm, Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar );
-}
-
-//mettre a zero les nb entiers de tab
-extern "C" {void
-#ifdef WIN32
-#ifdef F2C_BUILD
-#else
-              __stdcall
-#endif
-#endif
-  azeroi( Z & nb, Z * tab );
-}
-
-extern "C" {void
-#ifdef WIN32
-#ifdef F2C_BUILD
-#else
-              __stdcall
-#endif
-#endif
-  fasoar( Z & ns1, Z & ns2, Z & nt1, Z & nt2, Z & nolign,
-                          Z & mosoar,  Z & mxsoar,  Z & n1soar,  Z * mnsoar,  Z * mnarst,
-                          Z & noar, Z & ierr );
-}
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-// but :    former l'arete de sommet ns1-ns2 dans le hachage du tableau
-// -----    nosoar des aretes de la triangulation
-// entrees:
-// --------
-// ns1 ns2: numero pxyd des 2 sommets de l'arete
-// nt1    : numero du triangle auquel appartient l'arete
-//          nt1=-1 si numero inconnu
-// nt2    : numero de l'eventuel second triangle de l'arete si connu
-//          nt2=-1 si numero inconnu
-// nolign : numero de la ligne fermee de l'arete
-//          =0 si l'arete n'est une arete de ligne
-//          ce numero est ajoute seulement si l'arete est creee
-// mosoar : nombre maximal d'entiers par arete du tableau nosoar
-// mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-// modifies:
-// ---------
-// n1soar : numero de la premiere arete vide dans le tableau nosoar
-//          une arete i de nosoar est vide  <=>  nosoar(1,i)=0
-//          chainage des aretes vides amont et aval
-//          l'arete vide qui precede=nosoar(4,i)
-//          l'arete vide qui suit   =nosoar(5,i)
-// nosoar : numero des 2 sommets, no ligne, 2 triangles de l'arete,
-//          chainage momentan'e d'aretes, chainage du hachage des aretes
-//          hachage des aretes = min( nosoar(1), nosoar(2) )
-// noarst : noarst(np) numero d'une arete du sommet np
-
-// ierr   : si < 0  en entree pas d'affichage en cas d'erreur du type
-//         "arete appartenant a plus de 2 triangles et a creer!"
-//          si >=0  en entree       affichage de ce type d'erreur
-// sorties:
-// --------
-// noar   : >0 numero de l'arete retrouvee ou ajoutee
-// ierr   : =0 si pas d'erreur
-//          =1 si le tableau nosoar est sature
-//          =2 si arete a creer et appartenant a 2 triangles distincts
-//             des triangles nt1 et nt2
-//          =3 si arete appartenant a 2 triangles distincts
-//             differents des triangles nt1 et nt2
-//          =4 si arete appartenant a 2 triangles distincts
-//             dont le second n'est pas le triangle nt2
-//+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-
-//initialisation du tableau letree et ajout dans letree des sommets 1 a nbsomm
-extern "C" {void
-#ifdef WIN32
-#ifdef F2C_BUILD
-#else
-              __stdcall
-#endif
-#endif
-  teajte( Z & mxsomm, Z &  nbsomm, R3 * mnpxyd,  R3 * comxmi,
-                            R & aretmx,  Z & mxtree, Z * letree,
-                            Z & ierr );
-}
-
-extern "C" {void
-#ifdef WIN32
-#ifdef F2C_BUILD
-#else
-              __stdcall
-#endif
-#endif
-  tehote( Z & nutysu, Z & nbarpi, Z &  mxsomm, Z &  nbsomm, R3 * mnpxyd,
-                            R3 * comxmi, R & aretmx,
-                            Z * letree, Z & mxqueu, Z * mnqueu,
-                            Z & ierr );
-}
-// homogeneisation de l'arbre des te a un saut de taille au plus
-// prise en compte des tailles d'aretes souhaitees autour des sommets initiaux
-
-extern "C" {void
-#ifdef WIN32
-#ifdef F2C_BUILD
-#else
-              __stdcall
-#endif
-#endif
-  tetrte( R3 * comxmi, R & aretmx, Z & nbarpi, Z & mxsomm, R3 * mnpxyd,
-                            Z & mxqueu,  Z * mnqueu,  Z * mntree,
-                            Z & mosoar,  Z & mxsoar,  Z & n1soar, Z * mnsoar,
-                            Z & moartr, Z &  mxartr,  Z & n1artr,  Z * mnartr,  Z * mnarst,
-                            Z & ierr );
-}
-// trianguler les triangles equilateraux feuilles a partir de leurs 3 sommets
-// et des points de la frontiere, des points internes imposes interieurs
-
-extern "C" {void
-#ifdef WIN32
-#ifdef F2C_BUILD
-#else
-              __stdcall
-#endif
-#endif
-  aisoar( Z & mosoar, Z & mxsoar, Z * mnsoar, Z & na );
-}
-// formation du chainage 6 des aretes internes a echanger eventuellement
-
-extern "C" {void
-#ifdef WIN32
-#ifdef F2C_BUILD
-#else
-              __stdcall
-#endif
-#endif
-  tedela( R3 * mnpxyd, Z * mnarst,
-                            Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar, Z & na,
-                            Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr, Z & n );
-}
-// boucle sur les aretes internes (non sur une ligne de la frontiere)
-// avec echange des 2 diagonales afin de rendre la triangulation delaunay
-extern "C" {void
-#ifdef WIN32
-#ifdef F2C_BUILD
-#else
-              __stdcall
-#endif
-#endif
-  terefr( Z & nbarpi, R3 * mnpxyd,
-                            Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar,
-                            Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr, Z * mnarst,
-                            Z & mxarcf, Z * mnarc1, Z * mnarc2,
-                            Z * mnarc3, Z * mnarc4,
-                            Z & n, Z & ierr );
-}
-// detection des aretes frontalieres initiales perdues
-// triangulation frontale pour les restaurer
-
-extern "C" {void
-#ifdef WIN32
-#ifdef F2C_BUILD
-#else
-              __stdcall
-#endif
-#endif
-  tesuex( Z & nblf, Z * nulftr,
-                            Z & ndtri0, Z & nbsomm, R3 * mnpxyd, Z * mnslig,
-                            Z & mosoar, Z & mxsoar, Z * mnsoar,
-                            Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr, Z * mnarst,
-                            Z & nbtria, Z * mntrsu, Z & ierr );
-}
-// suppression des triangles externes a la surface
-
-extern "C" {void
-#ifdef WIN32
-#ifdef F2C_BUILD
-#else
-              __stdcall
-#endif
-#endif
-  teamqt( Z & nutysu, R & aretmx, R & airemx,
-                            Z * mnarst, Z & mosoar, Z & mxsoar, Z & n1soar, Z * mnsoar,
-                            Z & moartr, Z & mxartr, Z & n1artr, Z * mnartr,
-                            Z & mxarcf, Z * mntrcf, Z * mnstbo,
-                            Z * n1arcf, Z * mnarcf, Z * mnarc1,
-                            Z & nbarpi, Z & nbsomm, Z & mxsomm,
-                            R3 * mnpxyd, Z * mnslig,
-                            Z & ierr );
-}
-// amelioration de la qualite de la triangulation par
-// barycentrage des sommets internes a la triangulation
-// suppression des aretes trop longues ou trop courtes
-// modification de la topologie des groupes de triangles
-// mise en delaunay de la triangulation
-extern "C" {void
-#ifdef WIN32
-#ifdef F2C_BUILD
-#else
-              __stdcall
-#endif
-#endif
-  nusotr( Z & nt, Z & mosoar, Z * mnsoar, Z & moartr, Z * mnartr,Z * nosotr );
-}
-//retrouver les numero des 3 sommets du triangle nt
-
-extern "C" {void
-#ifdef WIN32
-#ifdef F2C_BUILD
-#else
-              __stdcall
-#endif
-#endif
-  qutr2d( R3 & p1, R3 & p2, R3 & p3, R & qualite );
-}
-//calculer la qualite d'un triangle de R2 de sommets p1, p2, p3
-
-extern "C" { R
-#ifdef WIN32
-#ifdef F2C_BUILD
-#else
-              __stdcall
-#endif
-#endif
-  surtd2( R3 & p1, R3 & p2, R3 & p3 );
-}
-//calcul de la surface d'un triangle defini par 3 points de r**2
-
-#endif
diff --git a/src/MEFISTO2/areteideale.f b/src/MEFISTO2/areteideale.f
deleted file mode 100644 (file)
index ce7737e..0000000
+++ /dev/null
@@ -1,30 +0,0 @@
-c MEFISTO : library to compute 2D triangulation from segmented boundaries
-c
-c Copyright (C) 2006-2020  CEA/DEN, EDF R&D, OPEN CASCADE
-c
-c This library is free software; you can redistribute it and/or
-c modify it under the terms of the GNU Lesser General Public
-c License as published by the Free Software Foundation; either
-c version 2.1 of the License, or (at your option) any later version.
-c
-c This library is distributed in the hope that it will be useful,
-c but WITHOUT ANY WARRANTY; without even the implied warranty of
-c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-c Lesser General Public License for more details.
-c
-c You should have received a copy of the GNU Lesser General Public
-c License along with this library; if not, write to the Free Software
-c Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-c
-c See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-c
-c  File   : areteideale.f
-c  Module : SMESH
-c  Author : Alain PERRONNET
-c  Date   : 13 novembre 2006
-
-      double precision function areteideale( xyz, direction )
-      double precision xyz(3), direction(3)
-      areteideale = 10
-      return
-      end
diff --git a/src/MEFISTO2/trte.f b/src/MEFISTO2/trte.f
deleted file mode 100644 (file)
index a330beb..0000000
+++ /dev/null
@@ -1,8426 +0,0 @@
-c MEFISTO2: a library to compute 2D triangulation from segmented boundaries
-c
-c Copyright (C) 2006-2020  CEA/DEN, EDF R&D, OPEN CASCADE
-c
-c This library is free software; you can redistribute it and/or
-c modify it under the terms of the GNU Lesser General Public
-c License as published by the Free Software Foundation; either
-c version 2.1 of the License, or (at your option) any later version.
-c
-c This library is distributed in the hope that it will be useful,
-c but WITHOUT ANY WARRANTY; without even the implied warranty of
-c MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
-c Lesser General Public License for more details.
-c
-c You should have received a copy of the GNU Lesser General Public
-c License along with this library; if not, write to the Free Software
-c Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307 USA
-c
-c See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
-c
-c  File   : trte.f    le Fortran du trianguleur plan
-c  Module : SMESH
-c  Author : Alain PERRONNET
-c  Date   : 13 novembre 2006
-
-      double precision  function diptdr( pt , p1dr , p2dr )
-c++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++012
-c but : calculer la distance entre un point et une droite
-c ----- definie par 2 points p1dr et p2dr
-c
-c entrees :
-c ---------
-c pt        : le point de R ** 2
-c p1dr p2dr : les 2 points de R ** 2  de la droite
-c++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++012
-c programmeur : alain perronnet analyse numrique paris  janvier 1986
-c....................................................................012
-      double precision  pt(2),p1dr(2),p2dr(2), a, b, c
-c
-c     les coefficients de la droite a x + by + c =0
-      a = p2dr(2) - p1dr(2)
-      b = p1dr(1) - p2dr(1)
-      c = - a * p1dr(1) - b * p1dr(2)
-c
-c     la distance = | a * x + b * y + c | / sqrt( a*a + b*b )
-      diptdr = abs( a * pt(1) + b * pt(2) + c ) / sqrt( a*a + b*b )
-      end
-
-      subroutine qutr2d( p1, p2, p3, qualite )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :     calculer la qualite d'un triangle de r**2
-c -----     2 coordonnees des 3 sommets en double precision
-c
-c entrees :
-c ---------
-c p1,p2,p3 : les 3 coordonnees des 3 sommets du triangle
-c            sens direct pour une surface et qualite >0
-c sorties :
-c ---------
-c qualite: valeur de la qualite du triangle entre 0 et 1 (equilateral)
-c          1 etant la qualite optimale
-c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet analyse numerique upmc paris     janvier 1995
-c2345x7..............................................................012
-      parameter  ( d2uxr3 = 3.4641016151377544d0 )
-c                  d2uxr3 = 2 * sqrt(3)
-      double precision  p1(2), p2(2), p3(2), qualite, a, b, c, p
-c
-c     la longueur des 3 cotes
-      a = sqrt( (p2(1)-p1(1))**2 + (p2(2)-p1(2))**2 )
-      b = sqrt( (p3(1)-p2(1))**2 + (p3(2)-p2(2))**2 )
-      c = sqrt( (p1(1)-p3(1))**2 + (p1(2)-p3(2))**2 )
-c
-c     demi perimetre
-      p = (a+b+c) * 0.5d0
-c
-      if ( (a*b*c) .ne. 0d0 ) then
-c        critere : 2 racine(3) * rayon_inscrit / plus longue arete
-         qualite = d2uxr3 * sqrt( abs( (p-a) / p * (p-b) * (p-c) ) )
-     %          / max(a,b,c)
-      else
-         qualite = 0d0
-      endif
-c
-c
-c     autres criteres possibles:
-c     critere : 2 * rayon_inscrit / rayon_circonscrit
-c     qualite = 8d0 * (p-a) * (p-b) * (p-c) / (a * b * c)
-c
-c     critere : 3*sqrt(3.) * ray_inscrit / demi perimetre
-c     qualite = 3*sqrt(3.) * sqrt ((p-a)*(p-b)*(p-c) / p**3)
-c
-c     critere : 2*sqrt(3.) * ray_inscrit / max( des aretes )
-c     qualite = 2*sqrt(3.) * sqrt( (p-a)*(p-b)*(p-c) / p ) / max(a,b,c)
-      end
-
-
-      double precision function surtd2( p1 , p2 , p3 )
-c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but : calcul de la surface d'un triangle defini par 3 points de R**2
-c -----
-c parametres d entree :
-c ---------------------
-c p1 p2 p3 : les 3 fois 2 coordonnees des sommets du triangle
-c
-c parametre resultat :
-c --------------------
-c surtd2 : surface du triangle
-c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet analyse numerique upmc paris     fevrier 1992
-c2345x7..............................................................012
-      double precision  p1(2), p2(2), p3(2)
-c
-c     la surface du triangle
-      surtd2 = ( ( p2(1)-p1(1) ) * ( p3(2)-p1(2) )
-     %         - ( p2(2)-p1(2) ) * ( p3(1)-p1(1) ) ) * 0.5d0
-      end
-
-      integer function nopre3( i )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :   numero precedent i dans le sens circulaire  1 2 3 1 ...
-c -----
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc    fevrier 1992
-c2345x7..............................................................012
-      if( i .eq. 1 ) then
-         nopre3 = 3
-      else
-         nopre3 = i - 1
-      endif
-      end
-
-      integer function nosui3( i )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :   numero suivant i dans le sens circulaire  1 2 3 1 ...
-c -----
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc    fevrier 1992
-c2345x7..............................................................012
-      if( i .eq. 3 ) then
-         nosui3 = 1
-      else
-         nosui3 = i + 1
-      endif
-      end
-
-      subroutine provec( v1 , v2 , v3 )
-c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    v3 vecteur = produit vectoriel de 2 vecteurs de r ** 3
-c -----
-c entrees:
-c --------
-c v1, v2 : les 2 vecteurs de 3 composantes
-c
-c sortie :
-c --------
-c v3     : vecteur = v1  produit vectoriel v2
-cc++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : perronnet alain upmc analyse numerique paris        mars 1987
-c2345x7..............................................................012
-      double precision    v1(3), v2(3), v3(3)
-c
-      v3( 1 ) = v1( 2 ) * v2( 3 ) - v1( 3 ) * v2( 2 )
-      v3( 2 ) = v1( 3 ) * v2( 1 ) - v1( 1 ) * v2( 3 )
-      v3( 3 ) = v1( 1 ) * v2( 2 ) - v1( 2 ) * v2( 1 )
-c
-      return
-      end
-
-      subroutine norme1( n, v, ierr )
-c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :   normalisation euclidienne a 1 d un vecteur v de n composantes
-c -----
-c entrees :
-c ---------
-c n       : nombre de composantes du vecteur
-c
-c modifie :
-c ---------
-c v       : le vecteur a normaliser a 1
-c
-c sortie  :
-c ---------
-c ierr    : 1 si la norme de v est egale a 0
-c           0 si pas d'erreur
-c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet analyse numerique paris             mars 1987
-c ......................................................................
-      double precision  v( n ), s, sqrt
-c
-      s = 0.0d0
-      do 10 i=1,n
-         s = s + v( i ) * v( i )
-   10 continue
-c
-c     test de nullite de la norme du vecteur
-c     --------------------------------------
-      if( s .le. 0.0d0 ) then
-c        norme nulle du vecteur non normalisable a 1
-         ierr = 1
-         return
-      endif
-c
-      s = 1.0d0 / sqrt( s )
-      do 20 i=1,n
-         v( i ) = v ( i ) * s
-   20 continue
-c
-      ierr = 0
-      end
-
-
-      subroutine insoar( mxsomm, mosoar, mxsoar, n1soar, nosoar )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    initialiser le tableau nosoar pour le hachage des aretes
-c -----
-c
-c entrees:
-c --------
-c mxsomm : plus grand numero de sommet d'une arete au cours du calcul
-c mosoar : nombre maximal d'entiers par arete du tableau nosoar
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c          avec mxsoar>=3*mxsomm
-c
-c sorties:
-c --------
-c n1soar : numero de la premiere arete vide dans le tableau nosoar
-c          une arete i de nosoar est vide  <=>  nosoar(1,i)=0
-c          chainage des aretes vides amont et aval
-c          l'arete vide qui precede=nosoar(4,i)
-c          l'arete vide qui suit   =nosoar(5,i)
-c nosoar : numero des 2 sommets, no ligne, 2 triangles de l'arete,
-c          chainage momentan'e d'aretes, chainage du hachage des aretes
-c          hachage des aretes = min( nosoar(1), nosoar(2) )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c2345x7..............................................................012
-      integer   nosoar(mosoar,mxsoar)
-c
-c     initialisation des aretes 1 a mxsomm
-      do 10 i=1,mxsomm
-c
-c        sommet 1 = 0 <=> temoin d'arete vide pour le hachage
-         nosoar( 1, i ) = 0
-c
-c        arete sur aucune ligne
-         nosoar( 3, i ) = 0
-c
-c        la position de l'arete interne ou frontaliere est inconnue
-         nosoar( 6, i ) = -2
-c
-c        fin de chainage du hachage pas d'arete suivante
-         nosoar( mosoar, i ) = 0
-c
- 10   continue
-c
-c     la premiere arete vide chainee est la mxsomm+1 du tableau
-c     car ces aretes ne sont pas atteignables par le hachage direct
-      n1soar = mxsomm + 1
-c
-c     initialisation des aretes vides et des chainages
-      do 20 i = n1soar, mxsoar
-c
-c        sommet 1 = 0 <=> temoin d'arete vide pour le hachage
-         nosoar( 1, i ) = 0
-c
-c        arete sur aucune ligne
-         nosoar( 3, i ) = 0
-c
-c        chainage sur l'arete vide qui precede
-c        (si arete occupee cela deviendra le no du triangle 1 de l'arete)
-         nosoar( 4, i ) = i-1
-c
-c        chainage sur l'arete vide qui suit
-c        (si arete occupee cela deviendra le no du triangle 2 de l'arete)
-         nosoar( 5, i ) = i+1
-c
-c        chainages des aretes frontalieres ou internes ou ...
-         nosoar( 6, i ) = -2
-c
-c        fin de chainage du hachage
-         nosoar( mosoar, i ) = 0
-c
- 20   continue
-c
-c     la premiere arete vide n'a pas de precedent
-      nosoar( 4, n1soar ) = 0
-c
-c     la derniere arete vide est mxsoar sans arete vide suivante
-      nosoar( 5, mxsoar ) = 0
-      end
-
-
-      subroutine azeroi ( l , ntab )
-c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but : initialisation a zero d un tableau ntab de l variables entieres
-c -----
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet analyse numerique upmc paris septembre 1988
-c23456---------------------------------------------------------------012
-      integer ntab(l)
-      do 1 i = 1 , l
-         ntab( i ) = 0
-    1 continue
-      end
-
-
-      subroutine fasoar( ns1,    ns2,    nt1,    nt2,    nolign,
-     %                   mosoar, mxsoar, n1soar, nosoar, noarst,
-     %                   noar,   ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    former l'arete de sommet ns1-ns2 dans le hachage du tableau
-c -----    nosoar des aretes de la triangulation
-c
-c entrees:
-c --------
-c ns1 ns2: numero pxyd des 2 sommets de l'arete
-c nt1    : numero du triangle auquel appartient l'arete
-c          nt1=-1 si numero inconnu
-c nt2    : numero de l'eventuel second triangle de l'arete si connu
-c          nt2=-1 si numero inconnu
-c nolign : numero de la ligne de l'arete dans ladefi(wulftr-1+nolign)
-c          =0 si l'arete n'est une arete de ligne
-c          ce numero est ajoute seulement si l'arete est creee
-c mosoar : nombre maximal d'entiers par arete du tableau nosoar
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c
-c modifies:
-c ---------
-c n1soar : numero de la premiere arete vide dans le tableau nosoar
-c          une arete i de nosoar est vide  <=>  nosoar(1,i)=0
-c          chainage des aretes vides amont et aval
-c          l'arete vide qui precede=nosoar(4,i)
-c          l'arete vide qui suit   =nosoar(5,i)
-c nosoar : numero des 2 sommets, no ligne, 2 triangles de l'arete,
-c          chainage momentan'e d'aretes, chainage du hachage des aretes
-c          hachage des aretes = min( nosoar(1), nosoar(2) )
-c noarst : noarst(np) numero d'une arete du sommet np
-c
-c ierr   : si < 0  en entree pas d'affichage en cas d'erreur du type
-c         "arete appartenant a plus de 2 triangles et a creer!"
-c          si >=0  en entree       affichage de ce type d'erreur
-c
-c sorties:
-c --------
-c noar   : >0 numero de l'arete retrouvee ou ajoutee
-c ierr   : =0 si pas d'erreur
-c          =1 si le tableau nosoar est sature
-c          =2 si arete a creer et appartenant a 2 triangles distincts
-c             des triangles nt1 et nt2
-c          =3 si arete appartenant a 2 triangles distincts
-c             differents des triangles nt1 et nt2
-c          =4 si arete appartenant a 2 triangles distincts
-c             dont le second n'est pas le triangle nt2
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c2345x7..............................................................012
-      parameter        (lchain=6)
-      common / unites / lecteu, imprim, nunite(30)
-      integer           nosoar(mosoar,mxsoar), noarst(*)
-      integer           nu2sar(2)
-c
-      ierr = 0
-c
-c     ajout eventuel de l'arete s1 s2 dans nosoar
-      nu2sar(1) = ns1
-      nu2sar(2) = ns2
-c
-c     hachage de l'arete de sommets nu2sar
-      call hasoar( mosoar, mxsoar, n1soar, nosoar, nu2sar, noar )
-c     en sortie: noar>0 => no arete retrouvee
-c                    <0 => no arete ajoutee
-c                    =0 => saturation du tableau nosoar
-c
-      if( noar .eq. 0 ) then
-c
-c        saturation du tableau nosoar
-         write(imprim,*) 'fasoar: tableau nosoar sature'
-         ierr = 1
-         return
-c
-      else if( noar .lt. 0 ) then
-c
-c        l'arete a ete ajoutee. initialisation des autres informations
-         noar = -noar
-c        le numero de la ligne de l'arete
-         nosoar(3,noar) = nolign
-c        le triangle 1 de l'arete => le triangle nt1
-         nosoar(4,noar) = nt1
-c        le triangle 2 de l'arete => le triangle nt2
-         nosoar(5,noar) = nt2
-c        le chainage est mis a -1
-         nosoar(lchain,noar) = -1
-c
-c        le sommet appartient a l'arete noar
-         noarst( nu2sar(1) ) = noar
-         noarst( nu2sar(2) ) = noar
-c
-      else
-c
-c        l'arete a ete retrouvee.
-c        si elle appartient a 2 triangles differents de nt1 et nt2
-c        alors il y a une erreur
-         if( nosoar(4,noar) .gt. 0 .and.
-     %       nosoar(5,noar) .gt. 0 ) then
-             if( nosoar(4,noar) .ne. nt1 .and.
-     %           nosoar(4,noar) .ne. nt2 .or.
-     %           nosoar(5,noar) .ne. nt1 .and.
-     %           nosoar(5,noar) .ne. nt2 ) then
-c                arete appartenant a plus de 2 triangles => erreur
-                 if( ierr .ge. 0 ) then
-                    write(imprim,*) 'erreur fasoar: arete ',noar,
-     %              ' dans 2 triangles',nosoar(4,noar),nosoar(5,noar),
-     %              ' et ajouter',nt1,nt2
-                write(imprim,*)'arete',noar,(nosoar(i,noar),i=1,mosoar)
-                 endif
-c
-c                ERREUR. CORRECTION POUR VOIR ...
-                 nosoar(4,noar) = NT1
-                 nosoar(5,noar) = NT2
-ccc                 ierr = 2
-ccc                 return
-             endif
-         endif
-c
-c        mise a jour du numero des triangles de l'arete noar
-c        le triangle 2 de l'arete => le triangle nt1
-         if( nosoar(4,noar) .le. 0 ) then
-c            pas de triangle connu pour cette arete
-             n = 4
-         else
-c            deja un triangle connu. ce nouveau est le second
-             if( nosoar(5,noar) .gt. 0  .and.  nt1 .gt. 0 .and.
-     %           nosoar(5,noar) .ne. nt1 ) then
-c               arete appartenant a plus de 2 triangles => erreur
-                    write(imprim,*) 'erreur fasoar: arete ',noar,
-     %              ' dans triangles',nosoar(4,noar),nosoar(5,noar),
-     %              ' et ajouter triangle',nt1
-                ierr = 3
-                return
-             endif
-             n = 5
-         endif
-         nosoar(n,noar) = nt1
-c
-c        cas de l'arete frontaliere retrouvee comme diagonale d'un quadrangle
-         if( nt2 .gt. 0 ) then
-c           l'arete appartient a 2 triangles
-            if( nosoar(5,noar) .gt. 0  .and.
-     %          nosoar(5,noar) .ne. nt2 ) then
-c               arete appartenant a plus de 2 triangles => erreur
-                write(imprim,*) 'erreur fasoar: arete ',noar,
-     %         ' de st',nosoar(1,noar),'-',nosoar(2,noar),
-     %         ' dans plus de 2 triangles'
-                ierr = 4
-                return
-            endif
-            nosoar(5,noar) = nt2
-         endif
-c
-      endif
-c
-c     pas d'erreur
-      ierr = 0
-      end
-
-      subroutine fq1inv( x, y, s, xc, yc, ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :   calcul des 2 coordonnees (xc,yc) dans le carre (0,1)
-c -----   image par f:carre unite-->quadrangle appartenant a q1**2
-c         par une resolution directe due a Nicolas Thenault
-c
-c entrees:
-c --------
-c x,y   : coordonnees du point image dans le quadrangle de sommets s
-c s     : les 2 coordonnees des 4 sommets du quadrangle
-c
-c sorties:
-c --------
-c xc,yc : coordonnees dans le carre dont l'image par f vaut (x,y)
-c ierr  : 0 si calcul sans erreur, 1 si quadrangle degenere
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteurs: thenault tulenew  analyse numerique paris        janvier 1998
-c modifs : perronnet alain   analyse numerique paris        janvier 1998
-c234567..............................................................012
-      real             s(1:2,1:4), dist(2)
-      double precision a,b,c,d,alpha,beta,gamma,delta,x0,y0,t(2),u,v,w
-c
-      a = s(1,1)
-      b = s(1,2) - s(1,1)
-      c = s(1,4) - s(1,1)
-      d = s(1,1) - s(1,2) + s(1,3) - s(1,4)
-c
-      alpha = s(2,1)
-      beta  = s(2,2) - s(2,1)
-      gamma = s(2,4) - s(2,1)
-      delta = s(2,1) - s(2,2) + s(2,3) - s(2,4)
-c
-      u = beta  * c - b * gamma
-      if( u .eq. 0 ) then
-c        quadrangle degenere
-         ierr = 1
-         return
-      endif
-      v = delta * c - d * gamma
-      w = b * delta - beta * d
-c
-      x0 = c * (y-alpha) - gamma * (x-a)
-      y0 = b * (y-alpha) - beta  * (x-a)
-c
-      a = v  * w
-      b = u  * u - w * x0 - v * y0
-      c = x0 * y0
-c
-      if( a .ne. 0 ) then
-c
-         delta = sqrt( b*b-4*a*c )
-         if( b .ge. 0.0 ) then
-            t(2) = -b - delta
-         else
-            t(2) = -b + delta
-         endif
-c        la racine de plus grande valeur absolue
-c       (elle donne le plus souvent le point exterieur au carre unite
-c        donc a tester en second pour reduire les calculs)
-         t(2) = t(2) / ( 2 * a )
-c        calcul de la seconde racine a partir de la somme => plus stable
-         t(1) = - b/a - t(2)
-c
-         do 10 i=1,2
-c
-c           la solution i donne t elle un point interne au carre unite?
-            xc = ( x0 - v * t(i) ) / u
-            yc = ( w * t(i) - y0 ) / u
-            if( 0.0 .le. xc .and. xc .le. 1.0 ) then
-               if( 0.0 .le. yc .and. yc .le. 1.0 ) goto 9000
-            endif
-c
-c           le point (xc,yc) n'est pas dans le carre unite
-c           cela peut etre du aux erreurs d'arrondi
-c           => choix par le minimum de la distance aux bords du carre
-            dist(i) = max( 0.0, -xc, xc-1.0, -yc, yc-1.0 )
-c
- 10      continue
-c
-         if( dist(1) .gt. dist(2) ) then
-c           f(xc,yc) pour la racine 2 est plus proche de x,y
-c           xc yc sont deja calcules
-            goto 9000
-         endif
-c
-      else if ( b .ne. 0 ) then
-         t(1) = - c / b
-      else
-         t(1) = 0
-      endif
-c
-c     les 2 coordonnees du point dans le carre unite
-      xc = ( x0 - v * t(1) ) / u
-      yc = ( w * t(1) - y0 ) / u
-c
- 9000 ierr = 0
-      return
-      end
-
-
-      subroutine ptdatr( point, pxyd, nosotr, nsigne )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    le point est il dans le triangle de sommets nosotr
-c -----
-c
-c entrees:
-c --------
-c point  : les 2 coordonnees du point
-c pxyd   : les 2 coordonnees et distance souhaitee des points du maillage
-c nosotr : le numero des 3 sommets du triangle
-c
-c sorties:
-c --------
-c nsigne : >0 si le point est dans le triangle ou sur une des 3 aretes
-c          =0 si le triangle est degenere ou indirect ou ne contient pas le poin
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c....................................................................012
-      integer           nosotr(3)
-      double precision  point(2), pxyd(3,*)
-      double precision  xp,yp, x1,x2,x3, y1,y2,y3, d,dd, cb1,cb2,cb3
-c
-      xp = point( 1 )
-      yp = point( 2 )
-c
-      n1 = nosotr( 1 )
-      x1 = pxyd( 1 , n1 )
-      y1 = pxyd( 2 , n1 )
-c
-      n2 = nosotr( 2 )
-      x2 = pxyd( 1 , n2 )
-      y2 = pxyd( 2 , n2 )
-c
-      n3 = nosotr( 3 )
-      x3 = pxyd( 1 , n3 )
-      y3 = pxyd( 2 , n3 )
-c
-c     2 fois la surface du triangle = determinant de la matrice
-c     de calcul des coordonnees barycentriques du point p
-      d  = ( x2 - x1 ) * ( y3 - y1 ) - ( x3 - x1 ) * ( y2 - y1 )
-c
-      if( d .gt. 0 ) then
-c
-c        triangle non degenere
-c        =====================
-c        calcul des 3 coordonnees barycentriques du
-c        point xp yp dans le triangle
-         cb1 = ( ( x2-xp ) * ( y3-yp ) - ( x3-xp ) * ( y2-yp ) ) / d
-         cb2 = ( ( x3-xp ) * ( y1-yp ) - ( x1-xp ) * ( y3-yp ) ) / d
-         cb3 = 1d0 - cb1 -cb2
-ccc         cb3 = ( ( x1-xp ) * ( y2-yp ) - ( x2-xp ) * ( y1-yp ) ) / d
-c
-ccc         if( cb1 .ge. -0.00005d0 .and. cb1 .le. 1.00005d0 .and.
-         if( cb1 .ge. 0d0 .and. cb1 .le. 1d0 .and.
-     %       cb2 .ge. 0d0 .and. cb2 .le. 1d0 .and.
-     %       cb3 .ge. 0d0 .and. cb3 .le. 1d0 ) then
-c
-c           le triangle nosotr contient le point
-            nsigne = 1
-         else
-            nsigne = 0
-         endif
-c
-      else
-c
-c        triangle degenere
-c        =================
-c        le point est il du meme cote que le sommet oppose de chaque arete?
-         nsigne = 0
-         do 10 i=1,3
-c           le sinus de l'angle p1 p2-p1 point
-            x1  = pxyd(1,n1)
-            y1  = pxyd(2,n1)
-            d   = ( pxyd(1,n2) - x1 ) * ( point(2) - y1 )
-     %          - ( pxyd(2,n2) - y1 ) * ( point(1) - x1 )
-            dd  = ( pxyd(1,n2) - x1 ) * ( pxyd(2,n3) - y1 )
-     %          - ( pxyd(2,n2) - y1 ) * ( pxyd(1,n3) - x1 )
-            cb1 = ( pxyd(1,n2) - x1 ) ** 2
-     %          + ( pxyd(2,n2) - y1 ) ** 2
-            cb2 = ( point(1) - x1 ) ** 2
-     %          + ( point(2) - y1 ) ** 2
-            cb3 = ( pxyd(1,n3) - x1 ) ** 2
-     %          + ( pxyd(2,n3) - y1 ) ** 2
-            if( abs( dd ) .le. 1e-4 * sqrt( cb1 * cb3 ) ) then
-c              le point 3 est sur l'arete 1-2
-c              le point doit y etre aussi
-               if( abs( d ) .le. 1e-4 * sqrt( cb1 * cb2 ) ) then
-c                 point sur l'arete
-                  nsigne = nsigne + 1
-               endif
-            else
-c              le point 3 n'est pas sur l'arete . test des signes
-               if( d * dd .ge. 0 ) then
-                  nsigne = nsigne + 1
-               endif
-            endif
-c           permutation circulaire des 3 sommets et aretes
-            n  = n1
-            n1 = n2
-            n2 = n3
-            n3 = n
- 10      continue
-         if( nsigne .ne. 3 ) nsigne = 0
-      endif
-      end
-
-      integer function nosstr( p, pxyd, nt, letree )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    calculer le numero 0 a 3 du sous-triangle te contenant
-c -----    le point p
-c
-c entrees:
-c --------
-c p      : point de r**2 contenu dans le te nt de letree
-c pxyd   : x y distance des points
-c nt     : numero letree du te de te voisin a calculer
-c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation
-c      letree(0,0)  no du 1-er te vide dans letree
-c      letree(0,1) : maximum du 1-er indice de letree (ici 8)
-c      letree(0,2) : maximum declare du 2-eme indice de letree (ici mxtree)
-c      letree(0:8,1) : racine de l'arbre  (triangle sans sur triangle)
-c      si letree(0,.)>0 alors
-c         letree(0:3,j) : no (>0) letree des 4 sous-triangles du triangle j
-c      sinon
-c         letree(0:3,j) :-no pxyd des 1 \85a 4 points internes au triangle j
-c                         0  si pas de point
-c                       ( j est alors une feuille de l'arbre )
-c      letree(4,j) : no letree du sur-triangle du triangle j
-c      letree(5,j) : 0 1 2 3 no du sous-triangle j pour son sur-triangle
-c      letree(6:8,j) : no pxyd des 3 sommets du triangle j
-c
-c sorties :
-c ---------
-c nosstr : 0 si le sous-triangle central contient p
-c          i =1,2,3 numero du sous-triangle contenant p
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc    fevrier 1992
-c2345x7..............................................................012
-      integer           letree(0:8,0:*)
-      double precision  pxyd(3,*), p(2),
-     %                  x1, y1, x21, y21, x31, y31, d, xe, ye
-c
-c     le numero des 3 sommets du triangle
-      ns1 = letree( 6, nt )
-      ns2 = letree( 7, nt )
-      ns3 = letree( 8, nt )
-c
-c     les coordonnees entre 0 et 1 du point p
-      x1  = pxyd(1,ns1)
-      y1  = pxyd(2,ns1)
-c
-      x21 = pxyd(1,ns2) - x1
-      y21 = pxyd(2,ns2) - y1
-c
-      x31 = pxyd(1,ns3) - x1
-      y31 = pxyd(2,ns3) - y1
-c
-      d   = 1.0 / ( x21 * y31 - x31 * y21 )
-c
-      xe  = ( ( p(1) - x1 ) * y31 - ( p(2) - y1 ) * x31 ) * d
-      ye  = ( ( p(2) - y1 ) * x21 - ( p(1) - x1 ) * y21 ) * d
-c
-      if( xe .gt. 0.5d0 ) then
-c        sous-triangle droit
-         nosstr = 2
-      else if( ye .gt. 0.5d0 ) then
-c        sous-triangle haut
-         nosstr = 3
-      else if( xe+ye .lt. 0.5d0 ) then
-c        sous-triangle gauche
-         nosstr = 1
-      else
-c        sous-triangle central
-         nosstr = 0
-      endif
-      end
-
-
-      integer function notrpt( p, pxyd, notrde, letree )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    calculer le numero letree du sous-triangle feuille contenant
-c -----    le point p a partir du te notrde de letree
-c
-c entrees:
-c --------
-c p      : point de r**2 contenu dans le te nt de letree
-c pxyd   : x y distance des points
-c notrde : numero letree du triangle depart de recherche (1=>racine)
-c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation
-c      letree(0,0)  no du 1-er te vide dans letree
-c      letree(0,1) : maximum du 1-er indice de letree (ici 8)
-c      letree(0,2) : maximum declare du 2-eme indice de letree (ici mxtree)
-c      letree(0:8,1) : racine de l'arbre  (triangle sans sur triangle)
-c      si letree(0,.)>0 alors
-c         letree(0:3,j) : no (>0) letree des 4 sous-triangles du triangle j
-c      sinon
-c         letree(0:3,j) :-no pxyd des 1 \85 4 points internes au triangle j
-c                         0  si pas de point
-c                        ( j est alors une feuille de l'arbre )
-c      letree(4,j) : no letree du sur-triangle du triangle j
-c      letree(5,j) : 0 1 2 3 no du sous-triangle j pour son sur-triangle
-c      letree(6:8,j) : no pxyd des 3 sommets du triangle j
-c
-c sorties :
-c ---------
-c notrpt : numero letree du triangle contenant le point p
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc    fevrier 1992
-c2345x7..............................................................012
-      integer           letree(0:8,0:*)
-      double precision  pxyd(1:3,*), p(2)
-c
-c     la racine depart de la recherche
-      notrpt = notrde
-c
-c     tant que la feuille n'est pas atteinte descendre l'arbre
- 10   if( letree(0,notrpt) .gt. 0 ) then
-c
-c        recherche du sous-triangle contenant p
-         nsot = nosstr( p, pxyd, notrpt, letree )
-c
-c        le numero letree du sous-triangle
-         notrpt = letree( nsot, notrpt )
-         goto 10
-c
-      endif
-      end
-
-
-      subroutine teajpt( ns,   nbsomm, mxsomm, pxyd, letree,
-     &                   ntrp, ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    ajout du point ns de pxyd dans letree
-c -----
-c
-c entrees:
-c --------
-c ns     : numero du point a ajouter dans letree
-c mxsomm : nombre maximal de points declarables dans pxyd
-c pxyd   : tableau des coordonnees des points
-c          par point : x  y  distance_souhaitee
-c
-c modifies :
-c ----------
-c nbsomm : nombre actuel de points dans pxyd
-c
-c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation
-c      letree(0,0) : no du 1-er te vide dans letree
-c      letree(0,1) : maximum du 1-er indice de letree (ici 8)
-c      letree(0,2) : maximum declare du 2-eme indice de letree (ici mxtree)
-c      letree(0:8,1) : racine de l'arbre  (triangle sans sur triangle)
-c      si letree(0,.)>0 alors
-c         letree(0:3,j) : no (>0) letree des 4 sous-triangles du triangle j
-c      sinon
-c         letree(0:3,j) :-no pxyd des 1 \85a 4 points internes au triangle j
-c                         0  si pas de point
-c                        ( j est alors une feuille de l'arbre )
-c      letree(4,j) : no letree du sur-triangle du triangle j
-c      letree(5,j) : 0 1 2 3 no du sous-triangle j pour son sur-triangle
-c      letree(6:8,j) : no pxyd des 3 sommets du triangle j
-c
-c sorties :
-c ---------
-c ntrp    : numero letree du triangle te ou a ete ajoute le point
-c ierr    : 0 si pas d'erreur,  51 saturation letree, 52 saturation pxyd
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc    fevrier 1992
-c2345x7..............................................................012
-      integer           letree(0:8,0:*)
-      double precision  pxyd(3,mxsomm)
-c
-c     depart de la racine
-      ntrp = 1
-c
-c     recherche du triangle contenant le point pxyd(ns)
- 1    ntrp = notrpt( pxyd(1,ns), pxyd, ntrp, letree )
-c
-c     existe t il un point libre
-      do 10 i=0,3
-         if( letree(i,ntrp) .eq. 0 ) then
-c           la place i est libre
-            letree(i,ntrp) = -ns
-            ierr = 0
-            return
-         endif
- 10   continue
-c
-c     pas de place libre => 4 sous-triangles sont crees
-c                           a partir des 3 milieux des aretes
-      call te4ste( nbsomm, mxsomm, pxyd, ntrp, letree, ierr )
-      if( ierr .ne. 0 ) return
-c
-c     ajout du point ns
-      goto 1
-      end
-
-      subroutine n1trva( nt, lar, letree, notrva, lhpile )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    calculer le numero letree du triangle voisin du te nt
-c -----    par l'arete lar (1 a 3 ) de nt
-c          attention : notrva n'est pas forcement minimal
-c
-c entrees:
-c --------
-c nt     : numero letree du te de te voisin a calculer
-c lar    : numero 1 a 3 de l'arete du triangle nt
-c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation
-c   letree(0,0)  no du 1-er te vide dans letree
-c   letree(0,1) : maximum du 1-er indice de letree (ici 8)
-c   letree(0,2) : maximum declare du 2-eme indice de letree (ici mxtree)
-c   letree(0:8,1) : racine de l'arbre  (triangle sans sur-triangle)
-c   si letree(0,.)>0 alors
-c      letree(0:3,j) : no (>0) letree des 4 sous-triangles du triangle j
-c   sinon
-c      letree(0:3,j) :-no pxyd des 1 a 4 points internes au triangle j
-c                      0  si pas de point
-c                     ( j est alors une feuille de l'arbre )
-c   letree(4,j) : no letree du sur-triangle du triangle j
-c   letree(5,j) : 0 1 2 3 no du sous-triangle j pour son sur-triangle
-c   letree(6:8,j) : no pxyd des 3 sommets du triangle j
-c
-c sorties :
-c ---------
-c notrva  : >0 numero letree du te voisin par l'arete lar
-c           =0 si pas de te voisin (racine , ... )
-c lhpile  : =0 si nt et notrva ont meme taille
-c           >0 nt est 4**lhpile fois plus petit que notrva
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc    fevrier 1992
-c2345x7..............................................................012
-      integer   letree(0:8,0:*)
-      integer   lapile(1:64)
-c
-c     initialisation de la pile
-c     le triangle est empile
-      lapile(1) = nt
-      lhpile = 1
-c
-c     tant qu'il existe un sur-triangle
- 10   ntr  = lapile( lhpile )
-      if( ntr .eq. 1 ) then
-c        racine atteinte => pas de triangle voisin
-         notrva = 0
-         lhpile = lhpile - 1
-         return
-      endif
-c
-c     le type du triangle ntr
-      nty  = letree( 5, ntr )
-c     l'eventuel sur-triangle
-      nsut = letree( 4, ntr )
-c
-      if( nty .eq. 0 ) then
-c
-c        triangle de type 0 => triangle voisin de type precedent(lar)
-c                              dans le sur-triangle de ntr
-c                              ce triangle remplace ntr dans lapile
-         lapile( lhpile ) = letree( nopre3(lar), nsut )
-         goto 20
-      endif
-c
-c     triangle ntr de type nty>0
-      if( nosui3(nty) .eq. lar ) then
-c
-c        le triangle voisin par lar est le triangle 0
-         lapile( lhpile ) = letree( 0, nsut )
-         goto 20
-      endif
-c
-c     triangle sans voisin direct => passage par le sur-triangle
-      if( nsut .eq. 0 ) then
-c
-c        ntr est la racine => pas de triangle voisin par cette arete
-         notrva = 0
-         return
-      else
-c
-c        le sur-triangle est empile
-         lhpile = lhpile + 1
-         lapile(lhpile) = nsut
-         goto 10
-      endif
-c
-c     descente aux sous-triangles selon la meme arete
- 20   notrva = lapile( lhpile )
-c
- 30   lhpile = lhpile - 1
-      if( letree(0,notrva) .le. 0 ) then
-c        le triangle est une feuille de l'arbre 0 sous-triangle
-c        lhpile = nombre de differences de niveaux dans l'arbre
-         return
-      else
-c        le triangle a 4 sous-triangles
-         if( lhpile .gt. 0 ) then
-c
-c           bas de pile non atteint
-            nty  = letree( 5, lapile(lhpile) )
-            if( nty .eq. lar ) then
-c              l'oppose est suivant(nty) de notrva
-               notrva = letree( nosui3(nty) , notrva )
-            else
-c              l'oppose est precedent(nty) de notrva
-               notrva = letree( nopre3(nty) , notrva )
-            endif
-            goto 30
-         endif
-      endif
-c
-c     meme niveau dans l'arbre lhpile = 0
-      end
-
-
-      subroutine cenced( xy1, xy2, xy3, cetria, ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but : calcul des coordonnees du centre du cercle circonscrit
-c ----- du triangle defini par ses 3 sommets de coordonnees
-c       xy1 xy2 xy3 ainsi que le carre du rayon de ce cercle
-c
-c entrees :
-c ---------
-c xy1 xy2 xy3 : les 2 coordonnees des 3 sommets du triangle
-c ierr   : <0  => pas d'affichage si triangle degenere
-c          >=0 =>       affichage si triangle degenere
-c
-c sortie :
-c --------
-c cetria : cetria(1)=abcisse  du centre
-c          cetria(2)=ordonnee du centre
-c          cetria(3)=carre du rayon   1d28 si triangle degenere
-c ierr   : 0 si triangle non degenere
-c          1 si triangle degenere
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : perronnet alain upmc analyse numerique paris        juin 1995
-c2345x7..............................................................012
-      parameter        (epsurf=1d-7)
-      common / unites / lecteu,imprim,nunite(30)
-      double precision  x1,y1,x21,y21,x31,y31,
-     %                  aire2,xc,yc,rot,
-     %                  xy1(2),xy2(2),xy3(2),cetria(3)
-c
-c     le calcul de 2 fois l'aire du triangle
-c     attention l'ordre des 3 sommets est direct ou non
-      x1  = xy1(1)
-      x21 = xy2(1) - x1
-      x31 = xy3(1) - x1
-c
-      y1  = xy1(2)
-      y21 = xy2(2) - y1
-      y31 = xy3(2) - y1
-c
-      aire2  = x21 * y31 - x31 * y21
-c
-c     recherche d'un test relatif peu couteux
-c     pour reperer la degenerescence du triangle
-      if( abs(aire2) .le.
-     %    epsurf*(abs(x21)+abs(x31))*(abs(y21)+abs(y31)) ) then
-c        triangle de qualite trop faible
-         if( ierr .ge. 0 ) then
-c            nblgrc(nrerr) = 1
-c            kerr(1) = 'erreur cenced: triangle degenere'
-c            call lereur
-            write(imprim,*) 'erreur cenced: triangle degenere'
-            write(imprim,10000)  xy1,xy2,xy3,aire2
-         endif
-10000 format( 3(' x=',g24.16,' y=',g24.16/),' aire*2=',g24.16)
-         cetria(1) = 0d0
-         cetria(2) = 0d0
-         cetria(3) = 1d28
-         ierr = 1
-         return
-      endif
-c
-c     les 2 coordonnees du centre intersection des 2 mediatrices
-c     x = (x1+x2)/2 + lambda * (y2-y1)
-c     y = (y1+y2)/2 - lambda * (x2-x1)
-c     x = (x1+x3)/2 + rot    * (y3-y1)
-c     y = (y1+y3)/2 - rot    * (x3-x1)
-c     ==========================================================
-      rot = ((xy2(1)-xy3(1))*x21 + (xy2(2)-xy3(2))*y21) / (2 * aire2)
-c
-      xc = ( x1 + xy3(1) ) * 0.5d0 + rot * y31
-      yc = ( y1 + xy3(2) ) * 0.5d0 - rot * x31
-c
-      cetria(1) = xc
-      cetria(2) = yc
-c
-c     le carre du rayon
-      cetria(3) = (x1-xc) ** 2 + (y1-yc) ** 2
-c
-c     pas d'erreur rencontree
-      ierr = 0
-      end
-
-
-      double precision function angled( p1, p2, p3 )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :   calculer l'angle (p1p2,p1p3) en radians
-c -----
-c
-c entrees :
-c ---------
-c p1,p2,p3 : les 2 coordonnees des 3 sommets de l'angle
-c               sens direct pour une surface >0
-c sorties :
-c ---------
-c angled :  angle (p1p2,p1p3) en radians entre [0 et 2pi]
-c           0 si p1=p2 ou p1=p3
-c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet analyse numerique upmc paris     fevrier 1992
-c2345x7..............................................................012
-      double precision  p1(2),p2(2),p3(2),x21,y21,x31,y31,a1,a2,d,c
-c
-c     les cotes
-      x21 = p2(1) - p1(1)
-      y21 = p2(2) - p1(2)
-      x31 = p3(1) - p1(1)
-      y31 = p3(2) - p1(2)
-c
-c     longueur des cotes
-      a1 = x21 * x21 + y21 * y21
-      a2 = x31 * x31 + y31 * y31
-      d  = sqrt( a1 * a2 )
-      if( d .eq. 0 ) then
-         angled = 0
-         return
-      endif
-c
-c     cosinus de l'angle
-      c  = ( x21 * x31 + y21 * y31 ) / d
-      if( c .le. -1.d0 ) then
-c        tilt sur apollo si acos( -1 -eps )
-         angled = atan( 1.d0 ) * 4.d0
-         return
-      else if( c .ge. 1.d0 ) then
-c        tilt sur apollo si acos( 1 + eps )
-         angled = 0
-         return
-      endif
-c
-      angled = acos( c )
-      if( x21 * y31 - x31 * y21 .lt. 0 ) then
-c        demi plan inferieur
-         angled = 8.d0 * atan( 1.d0 ) - angled
-      endif
-      end
-
-
-      subroutine teajte( mxsomm, nbsomm, pxyd,   comxmi,
-     %                   aretmx, mxtree, letree,
-     %                   ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    initialisation des tableaux letree
-c -----    ajout des sommets 1 a nbsomm (valeur en entree) dans letree
-c
-c entrees:
-c --------
-c mxsomm : nombre maximal de sommets permis pour la triangulation
-c mxtree : nombre maximal de triangles equilateraux (te) declarables
-c aretmx : longueur maximale des aretes des triangles equilateraux
-c
-c entrees et sorties :
-c --------------------
-c nbsomm : nombre de sommets apres identification
-c pxyd   : tableau des coordonnees 2d des points
-c          par point : x  y  distance_souhaitee
-c          tableau reel(3,mxsomm)
-c
-c sorties:
-c --------
-c comxmi : coordonnees minimales et maximales des points frontaliers
-c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation
-c          letree(0,0) : no du 1-er te vide dans letree
-c          letree(0,1) : maximum du 1-er indice de letree (ici 8)
-c          letree(0,2) : maximum declare du 2-eme indice de letree (ici mxtree)
-c          letree(0:8,1) : racine de l'arbre  (triangle sans sur triangle)
-c          si letree(0,.)>0 alors
-c             letree(0:3,j) : no (>0) letree des 4 sous-triangles du triangle j
-c          sinon
-c             letree(0:3,j) :-no pxyd des 1 a 4 points internes au triangle j
-c                             0  si pas de point
-c                             ( j est alors une feuille de l'arbre )
-c          letree(4,j) : no letree du sur-triangle du triangle j
-c          letree(5,j) : 0 1 2 3 no du sous-triangle j pour son sur-triangle
-c          letree(6:8,j) : no pxyd des 3 sommets du triangle j
-c
-c ierr   :  0 si pas d'erreur
-c          51 saturation letree
-c          52 saturation pxyd
-c           7 tous les points sont alignes
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc    juillet 1994
-c....................................................................012
-      integer           letree(0:8,0:mxtree)
-      double precision  pxyd(3,mxsomm)
-      double precision  comxmi(3,2)
-      double precision  a(2),s,aretmx,rac3
-c
-c     protection du nombre de sommets avant d'ajouter ceux de tetree
-      ierr   = 0
-      nbsofr = nbsomm
-      do 1 i = 1, nbsomm 
-         comxmi(1,1) = min( comxmi(1,1), pxyd(1,i) )
-         comxmi(1,2) = max( comxmi(1,2), pxyd(1,i) )
-         comxmi(2,1) = min( comxmi(2,1), pxyd(2,i) )
-         comxmi(2,2) = max( comxmi(2,2), pxyd(2,i) )
- 1    continue
-c
-c     creation de l'arbre letree
-c     ==========================
-c     la premiere colonne vide de letree
-      letree(0,0) = 2
-c     chainage des te vides
-      do 4 i = 2 , mxtree
-         letree(0,i) = i+1
- 4    continue
-      letree(0,mxtree) = 0
-c     les maxima des 2 indices de letree
-      letree(1,0) = 8
-      letree(2,0) = mxtree
-c
-c     la racine
-c     aucun point interne au triangle equilateral (te) 1
-      letree(0,1) = 0
-      letree(1,1) = 0
-      letree(2,1) = 0
-      letree(3,1) = 0
-c     pas de sur-triangle
-      letree(4,1) = 0
-      letree(5,1) = 0
-c     le numero pxyd des 3 sommets du te 1
-      letree(6,1) = nbsomm + 1
-      letree(7,1) = nbsomm + 2
-      letree(8,1) = nbsomm + 3
-c
-c     calcul de la largeur et hauteur du rectangle englobant
-c     ======================================================
-      a(1) = comxmi(1,2) - comxmi(1,1)
-      a(2) = comxmi(2,2) - comxmi(2,1)
-c     la longueur de la diagonale
-      s = sqrt( a(1)**2 + a(2)**2 )
-      do 60 k=1,2
-         if( a(k) .lt. 1e-4 * s ) then
-c            nblgrc(nrerr) = 1
-            write(imprim,*) 'tous les points sont alignes'
-c            call lereur
-            ierr = 7
-            return
-         endif
- 60   continue
-c
-c     le maximum des ecarts
-      s = s + s
-c
-c     le triangle equilateral englobant
-c     =================================
-c     ecart du rectangle au triangle equilateral
-      rac3 = sqrt( 3.0d0 )
-      arete = a(1) + 2 * aretmx + 2 * ( a(2) + aretmx ) / rac3
-c
-c     le point nbsomm + 1 en bas a gauche
-      nbsomm = nbsomm + 1
-      pxyd(1,nbsomm) = (comxmi(1,1)+comxmi(1,2))*0.5d0 - arete*0.5d0
-      pxyd(2,nbsomm) =  comxmi(2,1) - aretmx
-      pxyd(3,nbsomm) = s
-c
-c     le point nbsomm + 2 en bas a droite
-      nbsomm = nbsomm + 1
-      pxyd(1,nbsomm) = pxyd(1,nbsomm-1) + arete
-      pxyd(2,nbsomm) = pxyd(2,nbsomm-1)
-      pxyd(3,nbsomm) = s
-c
-c     le point nbsomm + 3 sommet au dessus
-      nbsomm = nbsomm + 1
-      pxyd(1,nbsomm) = pxyd(1,nbsomm-2) + arete * 0.5d0
-      pxyd(2,nbsomm) = pxyd(2,nbsomm-2) + arete * 0.5d0 * rac3
-      pxyd(3,nbsomm) = s
-c
-c     ajout des sommets des lignes pour former letree
-c     ===============================================
-      do 150 i=1,nbsofr
-c        ajout du point i de pxyd a letree
-         call teajpt(  i, nbsomm, mxsomm, pxyd, letree,
-     &                nt, ierr )
-         if( ierr .ne. 0 ) return
- 150  continue
-c
-      return
-      end
-
-
-      subroutine tetaid( nutysu, dx, dy, longai, ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :     calculer la longueur de l'arete ideale longai en dx,dy
-c -----
-c entrees:
-c --------
-c nutysu : numero de traitement de areteideale() selon le type de surface
-c          0 pas d'emploi de la fonction areteideale() => aretmx active
-c          1 il existe une fonction areteideale(xyz,xyzdir)
-c          ... autres options a definir ...
-c dx, dy : abscisse et ordonnee dans le plan du point (reel2!)
-c
-c sorties:
-c --------
-c longai : longueur de l'areteideale(xyz,xyzdir) autour du point xyz
-c ierr   : 0 si pas d'erreur, <>0 sinon
-c          1 calcul incorrect de areteideale(xyz,xyzdir)
-c          2 longueur calculee nulle
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c2345x7..............................................................012
-      common / unites / lecteu, imprim, nunite(30)
-c
-      double precision  areteideale
-      double precision  dx, dy, longai
-      double precision  xyz(3), xyzd(3), d0
-c
-      ierr = 0
-      if( nutysu .gt. 0 ) then
-         d0 = longai
-c        le point ou se calcule la longueur
-         xyz(1) = dx
-         xyz(2) = dy
-c        z pour le calcul de la longueur (inactif ici!)
-         xyz(3) = 0d0
-c        la direction pour le calcul de la longueur (inactif ici!)
-         xyzd(1) = 0d0
-         xyzd(2) = 0d0
-         xyzd(3) = 0d0
-
-         longai = areteideale(xyz,xyzd)
-c         (xyz,xyzd)
-         if( longai .lt. 0d0 ) then
-            write(imprim,10000) xyz
-10000       format('attention: longueur de areteideale(',
-     %              g14.6,',',g14.6,',',g14.6,')<=0! => rendue >0' )
-            longai = -longai
-         endif
-         if( longai .eq. 0d0 ) then
-            write(imprim,10001) xyz
-10001       format('erreur: longueur de areteideale(',
-     %              g14.6,',',g14.6,',',g14.6,')=0!' )
-            ierr = 2
-            longai = d0
-         endif
-      endif
-      end
-
-
-      subroutine tehote( nutysu,
-     %                   nbarpi, mxsomm, nbsomm, pxyd,
-     %                   comxmi, aretmx,
-     %                   letree, mxqueu, laqueu,
-     %                   ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :     homogeneisation de l'arbre des te a un saut de taille au plus
-c -----     prise en compte des distances souhaitees autour des sommets initiaux
-c
-c entrees:
-c --------
-c nutysu : numero de traitement de areteideale() selon le type de surface
-c          0 pas d'emploi de la fonction areteideale() => aretmx active
-c          1 il existe une fonction areteideale()
-c            dont seules les 2 premieres composantes de uv sont actives
-c          autres options a definir...
-c nbarpi : nombre de sommets de la frontiere + nombre de points internes
-c          imposes par l'utilisateur
-c mxsomm : nombre maximal de sommets permis pour la triangulation  et te
-c mxqueu : nombre d'entiers utilisables dans laqueu
-c comxmi : minimum et maximum des coordonnees de l'objet
-c aretmx : longueur maximale des aretes des triangles equilateraux
-c permtr : perimetre de la ligne enveloppe dans le plan
-c          avant mise a l'echelle a 2**20
-c
-c modifies:
-c ---------
-c nbsomm : nombre de sommets apres identification
-c pxyd   : tableau des coordonnees 2d des points
-c          par point : x  y  distance_souhaitee
-c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation
-c          letree(0,0) : no du 1-er te vide dans letree
-c          letree(1,0) : maximum du 1-er indice de letree (ici 8)
-c          letree(2,0) : maximum declare du 2-eme indice de letree (ici mxtree)
-c          letree(0:8,1) : racine de l'arbre  (triangle sans sur triangle)
-c          si letree(0,.)>0 alors
-c             letree(0:3,j) : no (>0) letree des 4 sous-triangles du triangle j
-c          sinon
-c             letree(0:3,j) :-no pxyd des 1 a 4 points internes au triangle j
-c                             0  si pas de point
-c                             ( j est alors une feuille de l'arbre )
-c          letree(4,j) : no letree du sur-triangle du triangle j
-c          letree(5,j) : 0 1 2 3 no du sous-triangle j pour son sur-triangle
-c          letree(6:8,j) : no pxyd des 3 sommets du triangle j
-c
-c auxiliaire :
-c ------------
-c laqueu : mxqueu entiers servant de queue pour le parcours de letree
-c
-c sorties:
-c --------
-c ierr   :  0 si pas d'erreur
-c          51 si saturation letree dans te4ste
-c          52 si saturation pxyd   dans te4ste
-c          >0 si autre erreur
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc      avril 1997
-c2345x7..............................................................012
-      double precision  ampli
-      parameter        (ampli=1.34d0)
-      common / unites / lecteu, imprim, intera, nunite(29)
-c
-      double precision  pxyd(3,mxsomm), d2, aretm2
-      double precision  comxmi(3,2),aretmx,a,s,xrmin,xrmax,yrmin,yrmax
-      double precision  dmin, dmax
-      integer           letree(0:8,0:*)
-c
-      integer           laqueu(1:mxqueu),lequeu
-c                       lequeu : entree dans la queue
-c                       lhqueu : longueur de la queue
-c                       gestion circulaire
-c
-      integer           nuste(3)
-      equivalence      (nuste(1),ns1),(nuste(2),ns2),(nuste(3),ns3)
-c
-      ierr = 0
-c
-c     existence ou non de la fonction 'taille_ideale' des aretes
-c     autour du point.  ici la carte est supposee isotrope
-c     ==========================================================
-c     attention: si la fonction taille_ideale existe
-c                alors pxyd(3,*) est la taille_ideale dans l'espace initial
-c                sinon pxyd(3,*) est la distance calculee dans le plan par
-c                propagation a partir des tailles des aretes de la frontiere
-c
-      if( nutysu .gt. 0 ) then
-c
-c        la fonction taille_ideale(x,y,z) existe
-c        ---------------------------------------
-c        initialisation de la distance souhaitee autour des points 1 a nbsomm
-         do 1 i=1,nbsomm
-c           calcul de pxyzd(3,i)
-            call tetaid( nutysu, pxyd(1,i), pxyd(2,i),
-     %                   pxyd(3,i), ierr )
-            if( ierr .ne. 0 ) goto 9999
- 1       continue
-c
-      else
-c
-c        la fonction taille_ideale(x,y,z) n'existe pas
-c        ---------------------------------------------
-c        prise en compte des distances souhaitees dans le plan
-c        autour des points frontaliers et des points internes imposes
-c        toutes les autres distances souhaitees ont ete mis a aretmx
-c        lors de l'execution du sp teqini
-         do 3 i=1,nbarpi
-c           le sommet i n'est pas un sommet de letree => sommet frontalier
-c           recherche du sous-triangle minimal feuille contenant le point i
-            nte = 1
- 2          nte = notrpt( pxyd(1,i), pxyd, nte, letree )
-c           la distance au sommet le plus eloigne est elle inferieure
-c           a la distance souhaitee?
-            ns1 = letree(6,nte)
-            ns2 = letree(7,nte)
-            ns3 = letree(8,nte)
-            d2  = max( ( pxyd(1,i)-pxyd(1,ns1) )**2 +
-     %                 ( pxyd(2,i)-pxyd(2,ns1) )**2
-     %               , ( pxyd(1,i)-pxyd(1,ns2) )**2 +
-     %                 ( pxyd(2,i)-pxyd(2,ns2) )**2
-     %               , ( pxyd(1,i)-pxyd(1,ns3) )**2 +
-     %                 ( pxyd(2,i)-pxyd(2,ns3) )**2 )
-            if( d2 .gt. pxyd(3,i)**2 ) then
-c              le triangle nte trop grand doit etre subdivise en 4 sous-triangle
-               call te4ste( nbsomm, mxsomm, pxyd, nte, letree,
-     &                      ierr )
-               if( ierr .ne. 0 ) return
-               goto 2
-            endif
- 3       continue
-      endif
-c
-c     le sous-triangle central de la racine est decoupe systematiquement
-c     ==================================================================
-      nte = 2
-      if( letree(0,2) .le. 0 ) then
-c        le sous-triangle central de la racine n'est pas subdivise
-c        il est donc decoupe en 4 soustriangles
-         nbsom0 = nbsomm
-         call te4ste( nbsomm, mxsomm, pxyd, nte, letree,
-     %                ierr )
-         if( ierr .ne. 0 ) return
-         do 4 i=nbsom0+1,nbsomm
-c           mise a jour de taille_ideale des nouveaux sommets de te
-            call tetaid( nutysu, pxyd(1,i), pxyd(2,i),
-     %                   pxyd(3,i), ierr )
-            if( ierr .ne. 0 ) goto 9999
- 4       continue
-      endif
-c
-c     le carre de la longueur de l'arete de triangles equilateraux
-c     souhaitee pour le fond de la triangulation
-      aretm2 = (aretmx*ampli) ** 2
-c
-c     tout te contenu dans le rectangle englobant doit avoir un
-c     cote < aretmx et etre de meme taille que les te voisins
-c     s'il contient un point; sinon un seul saut de taille est permis
-c     ===============================================================
-c     le rectangle englobant pour selectionner les te "internes"
-c     le numero des 3 sommets du te englobant racine de l'arbre des te
-      ns1 = letree(6,1)
-      ns2 = letree(7,1)
-      ns3 = letree(8,1)
-      a   = aretmx * 0.01d0
-c     abscisse du milieu de l'arete gauche du te 1
-      s      = ( pxyd(1,ns1) + pxyd(1,ns3) ) / 2
-      xrmin  = min( s, comxmi(1,1) - aretmx ) - a
-c     abscisse du milieu de l'arete droite du te 1
-      s      = ( pxyd(1,ns2) + pxyd(1,ns3) ) / 2
-      xrmax  = max( s, comxmi(1,2) + aretmx ) + a
-      yrmin  = comxmi(2,1) - aretmx
-c     ordonnee de la droite passant par les milieus des 2 aretes
-c     droite gauche du te 1
-      s      = ( pxyd(2,ns1) + pxyd(2,ns3) ) / 2
-      yrmax  = max( s, comxmi(2,2) + aretmx ) + a
-c
-c     cas particulier de 3 ou 4 ou peu d'aretes frontalieres
-      if( nbarpi .le. 8 ) then
-c        tout le triangle englobant (racine) est a prendre en compte
-         xrmin = pxyd(1,ns1) - a
-         xrmax = pxyd(1,ns2) + a
-         yrmin = pxyd(2,ns1) - a
-         yrmax = pxyd(2,ns3) + a
-      endif
-c
-      nbs0   = nbsomm
-      nbiter = -1
-c
-c     initialisation de la queue
-  5   nbiter = nbiter + 1
-      lequeu = 1
-      lhqueu = 0
-c     la racine de letree initialise la queue
-      laqueu(1) = 1
-c
-c     tant que la longueur de la queue est >=0 traiter le debut de queue
- 10   if( lhqueu .ge. 0 ) then
-c
-c        le triangle te a traiter
-         i   = lequeu - lhqueu
-         if( i .le. 0 ) i = mxqueu + i
-         nte = laqueu( i )
-c        la longueur de la queue est reduite
-         lhqueu = lhqueu - 1
-c
-c        nte est il un sous-triangle feuille minimal ?
- 15      if( letree(0,nte) .gt. 0 ) then
-c
-c           non les 4 sous-triangles sont mis dans la queue
-            if( lhqueu + 4 .ge. mxqueu ) then
-               write(imprim,*) 'tehote: saturation de la queue'
-               ierr = 7
-               return
-            endif
-            do 20 i=3,0,-1
-c              ajout du sous-triangle i
-               lhqueu = lhqueu + 1
-               lequeu = lequeu + 1
-               if( lequeu .gt. mxqueu ) lequeu = lequeu - mxqueu
-               laqueu( lequeu ) = letree( i, nte )
- 20         continue
-            goto 10
-c
-         endif
-c
-c        ici nte est un triangle minimal non subdivise
-c        ---------------------------------------------
-c        le te est il dans le cadre englobant de l'objet ?
-         ns1 = letree(6,nte)
-         ns2 = letree(7,nte)
-         ns3 = letree(8,nte)
-         if( pxyd(1,ns1) .gt. pxyd(1,ns2) ) then
-            dmin = pxyd(1,ns2)
-            dmax = pxyd(1,ns1)
-         else
-            dmin = pxyd(1,ns1)
-            dmax = pxyd(1,ns2)
-         endif
-         if( (xrmin .le. dmin .and. dmin .le. xrmax) .or.
-     %       (xrmin .le. dmax .and. dmax .le. xrmax) ) then
-            if( pxyd(2,ns1) .gt. pxyd(2,ns3) ) then
-               dmin = pxyd(2,ns3)
-               dmax = pxyd(2,ns1)
-            else
-               dmin = pxyd(2,ns1)
-               dmax = pxyd(2,ns3)
-            endif
-            if( (yrmin .le. dmin .and. dmin .le. yrmax) .or.
-     %          (yrmin .le. dmax .and. dmax .le. yrmax) ) then
-c
-c              nte est un te feuille et interne au rectangle englobant
-c              =======================================================
-c              le carre de la longueur de l'arete du te de numero nte
-               d2 = (pxyd(1,ns1)-pxyd(1,ns2)) ** 2 +
-     %              (pxyd(2,ns1)-pxyd(2,ns2)) ** 2
-c
-               if( nutysu .eq. 0 ) then
-c
-c                 il n'existe pas de fonction 'taille_ideale'
-c                 -------------------------------------------
-c                 si la taille effective de l'arete du te est superieure a aretmx
-c                 alors le te est decoupe
-                  if( d2 .gt. aretm2 ) then
-c                    le triangle nte trop grand doit etre subdivise
-c                    en 4 sous-triangles
-                     call te4ste( nbsomm,mxsomm, pxyd,
-     %                            nte, letree, ierr )
-                     if( ierr .ne. 0 ) return
-                     goto 15
-                  endif
-c
-               else
-c
-c                 il existe ici une fonction 'taille_ideale'
-c                 ------------------------------------------
-c                 si la taille effective de l'arete du te est superieure au mini
-c                 des 3 tailles_ideales aux sommets  alors le te est decoupe
-                  do 28 i=1,3
-                     if( d2 .gt. (pxyd(3,nuste(i))*ampli)**2 ) then
-c                       le triangle nte trop grand doit etre subdivise
-c                       en 4 sous-triangles
-                        nbsom0 = nbsomm
-                        call te4ste( nbsomm, mxsomm, pxyd,
-     &                               nte, letree, ierr )
-                        if( ierr .ne. 0 ) return
-                        do 27 j=nbsom0+1,nbsomm
-c                          mise a jour de taille_ideale des nouveaux sommets de
-                           call tetaid( nutysu, pxyd(1,j), pxyd(2,j),
-     %                                  pxyd(3,j), ierr )
-                           if( ierr .ne. 0 ) goto 9999
- 27                     continue
-                        goto 15
-                     endif
- 28               continue
-               endif
-c
-c              recherche du nombre de niveaux entre nte et les te voisins par se
-c              si la difference de subdivisions excede 1 alors le plus grand des
-c              =================================================================
- 29            do 30 i=1,3
-c
-c                 noteva triangle voisin de nte par l'arete i
-                  call n1trva( nte, i, letree, noteva, niveau )
-                  if( noteva .le. 0 ) goto 30
-c                 il existe un te voisin
-                  if( niveau .gt. 0 ) goto 30
-c                 nte a un te voisin plus petit ou egal
-                  if( letree(0,noteva) .le. 0 ) goto 30
-c                 nte a un te voisin noteva subdivise au moins une fois
-c
-                  if( nbiter .gt. 0 ) then
-c                    les 2 sous triangles voisins sont-ils subdivises?
-                     ns2 = letree(i,noteva)
-                     if( letree(0,ns2) .le. 0 ) then
-c                       ns2 n'est pas subdivise
-                        ns2 = letree(nosui3(i),noteva)
-                        if( letree(0,ns2) .le. 0 ) then
-c                          les 2 sous-triangles ne sont pas subdivises
-                           goto 30
-                        endif
-                     endif
-                  endif
-c
-c                 saut>1 => le triangle nte doit etre subdivise en 4 sous-triang
-c                 --------------------------------------------------------------
-                  nbsom0 = nbsomm
-                  call te4ste( nbsomm,mxsomm, pxyd, nte, letree,
-     &                         ierr )
-                  if( ierr .ne. 0 ) return
-                  if( nutysu .gt. 0 ) then
-                     do 32 j=nbsom0+1,nbsomm
-c                       mise a jour de taille_ideale des nouveaux sommets de te
-                        call tetaid( nutysu, pxyd(1,j), pxyd(2,j),
-     %                               pxyd(3,j), ierr )
-                        if( ierr .ne. 0 ) goto 9999
- 32                  continue
-                  endif
-                  goto 15
-c
- 30            continue
-            endif
-         endif
-         goto 10
-      endif
-      if( nbs0 .lt. nbsomm ) then
-         nbs0 = nbsomm
-         goto 5
-      endif
-      return
-c
-c     pb dans le calcul de la fonction taille_ideale
-
- 9999 write(imprim,*) 'pb dans le calcul de taille_ideale'
-c      nblgrc(nrerr) = 1
-c      kerr(1) = 'pb dans le calcul de taille_ideale'
-c      call lereur
-      return
-      end
-
-
-      subroutine tetrte( comxmi, aretmx, nbarpi, mxsomm, pxyd,
-     %                   mxqueu, laqueu, letree,
-     %                   mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, mxartr, n1artr, noartr, noarst,
-     %                   ierr  )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    trianguler les triangles equilateraux feuilles et
-c -----    les points de la frontiere et les points internes imposes
-c
-c attention: la triangulation finale n'est pas de type delaunay!
-c
-c entrees:
-c --------
-c comxmi : minimum et maximum des coordonnees de l'objet
-c aretmx : longueur maximale des aretes des triangles equilateraux
-c nbarpi : nombre de sommets de la frontiere + nombre de points internes
-c          imposes par l'utilisateur
-c mxsomm : nombre maximal de sommets declarables dans pxyd
-c pxyd   : tableau des coordonnees 2d des points
-c          par point : x  y  distance_souhaitee
-c
-c mxqueu : nombre d'entiers utilisables dans laqueu
-c mosoar : nombre maximal d'entiers par arete du tableau nosoar
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c mxartr : nombre maximal de triangles stockables dans le tableau noartr
-c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation
-c          letree(0,0) : no du 1-er te vide dans letree
-c          letree(0,1) : maximum du 1-er indice de letree (ici 8)
-c          letree(0,2) : maximum declare du 2-eme indice de letree (ici mxtree)
-c          letree(0:8,1) : racine de l'arbre  (triangle sans sur triangle)
-c          si letree(0,.)>0 alors
-c             letree(0:3,j) : no (>0) letree des 4 sous-triangles du triangle j
-c          sinon
-c             letree(0:3,j) :-no pxyd des 1 a 4 points internes au triangle j
-c                             0  si pas de point
-c                             ( j est alors une feuille de l'arbre )
-c          letree(4,j) : no letree du sur-triangle du triangle j
-c          letree(5,j) : 0 1 2 3 no du sous-triangle j pour son sur-triangle
-c          letree(6:8,j) : no pxyd des 3 sommets du triangle j
-c
-c modifies:
-c ---------
-c n1soar : numero de la premiere arete vide dans le tableau nosoar
-c          une arete i de nosoar est vide  <=>  nosoar(1,i)=0
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c          hachage des aretes = nosoar(1)+nosoar(2)*2
-c noarst : noarst(i) numero d'une arete de sommet i
-c
-c auxiliaire :
-c ------------
-c laqueu : mxqueu entiers servant de queue pour le parcours de letree
-c
-c sorties:
-c --------
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c ierr   : =0 si pas d'erreur
-c          =1 si le tableau nosoar est sature
-c          =2 si le tableau noartr est sature
-c          =3 si aucun des triangles ne contient l'un des points internes d'un t
-c          =5 si saturation de la queue de parcours de l'arbre des te
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c2345x7..............................................................012
-      common / unites / lecteu, imprim, intera, nunite(29)
-c
-      double precision  pxyd(3,mxsomm)
-      double precision  comxmi(3,2),aretmx,a,s,xrmin,xrmax,yrmin,yrmax
-      double precision  dmin, dmax
-c
-      integer           nosoar(mosoar,mxsoar),
-     %                  noartr(moartr,mxartr),
-     %                  noarst(mxsomm)
-c
-      integer           letree(0:8,0:*)
-      integer           laqueu(1:mxqueu)
-c                       lequeu:entree dans la queue en gestion circulaire
-c                       lhqueu:longueur de la queue en gestion circulaire
-c
-      integer           milieu(3), nutr(1:13)
-c
-c     le rectangle englobant pour selectionner les te "internes"
-c     le numero des 3 sommets du te englobant racine de l'arbre des te
-      ns1 = letree(6,1)
-      ns2 = letree(7,1)
-      ns3 = letree(8,1)
-      a   = aretmx * 0.01d0
-c     abscisse du milieu de l'arete gauche du te 1
-      s      = ( pxyd(1,ns1) + pxyd(1,ns3) ) / 2
-      xrmin  = min( s, comxmi(1,1) - aretmx ) - a
-c     abscisse du milieu de l'arete droite du te 1
-      s      = ( pxyd(1,ns2) + pxyd(1,ns3) ) / 2
-      xrmax  = max( s, comxmi(1,2) + aretmx ) + a
-      yrmin  = comxmi(2,1) - aretmx
-c     ordonnee de la droite passant par les milieus des 2 aretes
-c     droite gauche du te 1
-      s      = ( pxyd(2,ns1) + pxyd(2,ns3) ) / 2
-      yrmax  = max( s, comxmi(2,2) + aretmx ) + a
-c
-c     cas particulier de 3 ou 4 ou peu d'aretes frontalieres
-      if( nbarpi .le. 8 ) then
-c        tout le triangle englobant (racine) est a prendre en compte
-         xrmin = pxyd(1,ns1) - a
-         xrmax = pxyd(1,ns2) + a
-         yrmin = pxyd(2,ns1) - a
-         yrmax = pxyd(2,ns3) + a
-      endif
-c
-c     initialisation du tableau noartr
-      do 5 i=1,mxartr
-c        le numero de l'arete est inconnu
-         noartr(1,i) = 0
-c        le chainage sur le triangle vide suivant
-         noartr(2,i) = i+1
- 5    continue
-      noartr(2,mxartr) = 0
-      n1artr = 1
-c
-c     parcours des te jusqu'a trianguler toutes les feuilles (triangles eq)
-c     =====================================================================
-c     initialisation de la queue sur les te
-      ierr   = 0
-      lequeu = 1
-      lhqueu = 0
-c     la racine de letree initialise la queue
-      laqueu(1) = 1
-c
-c     tant que la longueur de la queue est >=0 traiter le debut de queue
- 10   if( lhqueu .ge. 0 ) then
-c
-c        le triangle te a traiter
-         i   = lequeu - lhqueu
-         if( i .le. 0 ) i = mxqueu + i
-         nte = laqueu( i )
-c        la longueur est reduite
-         lhqueu = lhqueu - 1
-c
-c        nte est il un sous-triangle feuille (minimal) ?
- 15      if( letree(0,nte) .gt. 0 ) then
-c           non les 4 sous-triangles sont mis dans la queue
-            if( lhqueu + 4 .ge. mxqueu ) then
-               write(imprim,*) 'tetrte: saturation de la queue'
-               ierr = 5
-               return
-            endif
-            do 20 i=3,0,-1
-c              ajout du sous-triangle i
-               lhqueu = lhqueu + 1
-               lequeu = lequeu + 1
-               if( lequeu .gt. mxqueu ) lequeu = lequeu - mxqueu
-               laqueu( lequeu ) = letree( i, nte )
- 20         continue
-            goto 10
-         endif
-c
-c        ici nte est un triangle minimal non subdivise
-c        ---------------------------------------------
-c        le te est il dans le cadre englobant de l'objet ?
-         ns1 = letree(6,nte)
-         ns2 = letree(7,nte)
-         ns3 = letree(8,nte)
-         if( pxyd(1,ns1) .gt. pxyd(1,ns2) ) then
-            dmin = pxyd(1,ns2)
-            dmax = pxyd(1,ns1)
-         else
-            dmin = pxyd(1,ns1)
-            dmax = pxyd(1,ns2)
-         endif
-         if( (xrmin .le. dmin .and. dmin .le. xrmax) .or.
-     %       (xrmin .le. dmax .and. dmax .le. xrmax) ) then
-            if( pxyd(2,ns1) .gt. pxyd(2,ns3) ) then
-               dmin = pxyd(2,ns3)
-               dmax = pxyd(2,ns1)
-            else
-               dmin = pxyd(2,ns1)
-               dmax = pxyd(2,ns3)
-            endif
-            if( (yrmin .le. dmin .and. dmin .le. yrmax) .or.
-     %          (yrmin .le. dmax .and. dmax .le. yrmax) ) then
-c
-c              te minimal et interne au rectangle englobant
-c              --------------------------------------------
-c              recherche du nombre de niveaux entre nte et les te voisins
-c              par ses aretes
-               nbmili = 0
-               do 30 i=1,3
-c
-c                 a priori pas de milieu de l'arete i du te nte
-                  milieu(i) = 0
-c
-c                 recherche de noteva te voisin de nte par l'arete i
-                  call n1trva( nte, i, letree, noteva, niveau )
-c                 noteva  : >0 numero letree du te voisin par l'arete i
-c                           =0 si pas de te voisin (racine , ... )
-c                 niveau  : =0 si nte et noteva ont meme taille
-c                           >0 nte est 4**niveau fois plus petit que noteva
-                  if( noteva .gt. 0 ) then
-c                    il existe un te voisin
-                     if( letree(0,noteva) .gt. 0 ) then
-c                       noteva est plus petit que nte
-c                       => recherche du numero du milieu du cote=sommet du te no
-c                       le sous-te 0 du te noteva
-                        nsot = letree(0,noteva)
-c                       le numero dans pxyd du milieu de l'arete i de nte
-                        milieu( i ) = letree( 5+nopre3(i), nsot )
-                        nbmili = nbmili + 1
-                     endif
-                  endif
-c
- 30            continue
-c
-c              triangulation du te nte en fonction du nombre de ses milieux
-               goto( 50, 100, 200, 300 ) , nbmili + 1
-c
-c              0 milieu => 1 triangle = le te nte
-c              ----------------------------------
- 50            call f0trte( letree(0,nte),  pxyd,
-     %                      mosoar, mxsoar, n1soar, nosoar,
-     %                      moartr, mxartr, n1artr, noartr,
-     %                      noarst,
-     %                      nbtr,   nutr,   ierr )
-               if( ierr .ne. 0 ) return
-               goto 10
-c
-c              1 milieu => 2 triangles = 2 demi te
-c              -----------------------------------
- 100           call f1trte( letree(0,nte),  pxyd,   milieu,
-     %                      mosoar, mxsoar, n1soar, nosoar,
-     %                      moartr, mxartr, n1artr, noartr,
-     %                      noarst,
-     %                      nbtr,   nutr,   ierr )
-               if( ierr .ne. 0 ) return
-               goto 10
-c
-c              2 milieux => 3 triangles
-c              -----------------------------------
- 200           call f2trte( letree(0,nte),  pxyd,   milieu,
-     %                      mosoar, mxsoar, n1soar, nosoar,
-     %                      moartr, mxartr, n1artr, noartr,
-     %                      noarst,
-     %                      nbtr,   nutr,   ierr )
-               if( ierr .ne. 0 ) return
-               goto 10
-c
-c              3 milieux => 4 triangles = 4 quart te
-c              -------------------------------------
- 300           call f3trte( letree(0,nte),  pxyd,   milieu,
-     %                      mosoar, mxsoar, n1soar, nosoar,
-     %                      moartr, mxartr, n1artr, noartr,
-     %                      noarst,
-     %                      nbtr,   nutr,   ierr )
-               if( ierr .ne. 0 ) return
-               goto 10
-            endif
-         endif
-         goto 10
-      endif
-      end
-
-
-      subroutine aisoar( mosoar, mxsoar, nosoar, na1 )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    chainer en colonne lchain les aretes non vides et
-c -----    non frontalieres du tableau nosoar
-c
-c entrees:
-c --------
-c mosoar : nombre maximal d'entiers par arete dans le tableau nosoar
-c mxsoar : nombre maximal d'aretes frontalieres declarables
-c
-c modifies :
-c ----------
-c nosoar : numero des 2 sommets , no ligne, 2 triangles, chainages en +
-c          nosoar(lchain,i)=arete interne suivante
-c
-c sortie :
-c --------
-c na1    : numero dans nosoar de la premiere arete interne
-c          les suivantes sont nosoar(lchain,na1), ...
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c....................................................................012
-      parameter (lchain=6)
-      integer    nosoar(mosoar,mxsoar)
-c
-c     formation du chainage des aretes internes a echanger eventuellement
-c     recherche de la premiere arete non vide et non frontaliere
-      do 10 na1=1,mxsoar
-         if( nosoar(1,na1) .gt. 0 .and. nosoar(3,na1) .le. 0 ) goto 15
- 10   continue
-c
-c     protection de la premiere arete non vide et non frontaliere
- 15   na0 = na1
-      do 20 na=na1+1,mxsoar
-         if( nosoar(1,na) .gt. 0 .and. nosoar(3,na) .le. 0 ) then
-c           arete interne => elle est chainee a partir de la precedente
-            nosoar(lchain,na0) = na
-            na0 = na
-         endif
- 20   continue
-c
-c     la derniere arete interne n'a pas de suivante
-      nosoar(lchain,na0) = 0
-      end
-
-
-      subroutine tedela( pxyd,   noarst,
-     %                   mosoar, mxsoar, n1soar, nosoar, n1ardv,
-     %                   moartr, mxartr, n1artr, noartr, modifs )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    pour toutes les aretes chainees dans nosoar(lchain,*)
-c -----    du tableau nosoar
-c          echanger la diagonale des 2 triangles si le sommet oppose
-c          a un triangle ayant en commun une arete appartient au cercle
-c          circonscrit de l'autre (violation boule vide delaunay)
-c
-c entrees:
-c --------
-c pxyd   : tableau des x  y  distance_souhaitee de chaque sommet
-c
-c modifies :
-c ----------
-c noarst : noarst(i) numero d'une arete de sommet i
-c mosoar : nombre maximal d'entiers par arete dans le tableau nosoar
-c mxsoar : nombre maximal d'aretes frontalieres declarables
-c n1soar : numero de la premiere arete vide dans le tableau nosoar
-c nosoar : numero des 2 sommets , no ligne, 2 triangles, chainages en +
-c n1ardv : numero dans nosoar de la premiere arete du chainage
-c          des aretes a rendre delaunay
-c
-c moartr : nombre d'entiers par triangle dans le tableau noartr
-c mxartr : nombre maximal de triangles declarables dans noartr
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c modifs : nombre d'echanges de diagonales pour maximiser la qualite
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c....................................................................012
-      parameter        (lchain=6)
-      common / unites / lecteu, imprim, nunite(30)
-      double precision  pxyd(3,*), surtd2, s123, s142, s143, s234,
-     %                  s12, s34, a12, cetria(3), r0
-      integer           nosoar(mosoar,mxsoar),
-     %                  noartr(moartr,mxartr),
-     %                  noarst(*)
-c
-c     le nombre d'echanges de diagonales pour minimiser l'aire
-      modifs = 0
-      r0     = 0
-c
-c     la premiere arete du chainage des aretes a rendre delaunay
-      na0 = n1ardv
-c
-c     tant que la pile des aretes a echanger eventuellement est non vide
-c     ==================================================================
- 20   if( na0 .gt. 0 ) then
-c
-c        l'arete a traiter
-         na  = na0
-c        la prochaine arete a traiter
-         na0 = nosoar(lchain,na0)
-c
-c        l'arete est marquee traitee avec le numero -1
-         nosoar(lchain,na) = -1
-c
-c        l'arete est elle active?
-         if( nosoar(1,na) .eq. 0 ) goto 20
-c
-c        si arete frontaliere pas d'echange possible
-         if( nosoar(3,na) .gt. 0 ) goto 20
-c
-c        existe-t-il 2 triangles ayant cette arete commune?
-         if( nosoar(4,na) .le. 0 .or. nosoar(5,na) .le. 0 ) goto 20
-c
-c        aucun des 2 triangles est-il desactive?
-         if( noartr(1,nosoar(4,na)) .eq. 0 .or.
-     %       noartr(1,nosoar(5,na)) .eq. 0 ) goto 20
-c
-c        l'arete appartient a deux triangles actifs
-c        le numero des 4 sommets du quadrangle des 2 triangles
-         call mt4sqa( na, moartr, noartr, mosoar, nosoar,
-     %                ns1, ns2, ns3, ns4 )
-         if( ns4 .eq. 0 ) goto 20
-c
-c        carre de la longueur de l'arete ns1 ns2
-         a12 = (pxyd(1,ns2)-pxyd(1,ns1))**2+(pxyd(2,ns2)-pxyd(2,ns1))**2
-c
-c        comparaison de la somme des aires des 2 triangles
-c        -------------------------------------------------
-c        calcul des surfaces des triangles 123 et 142 de cette arete
-         s123=surtd2( pxyd(1,ns1), pxyd(1,ns2), pxyd(1,ns3) )
-         s142=surtd2( pxyd(1,ns1), pxyd(1,ns4), pxyd(1,ns2) )
-         s12 = abs( s123 ) + abs( s142 )
-         if( s12 .le. 0.001*a12 ) goto 20
-c
-c        calcul des surfaces des triangles 143 et 234 de cette arete
-         s143=surtd2( pxyd(1,ns1), pxyd(1,ns4), pxyd(1,ns3) )
-         s234=surtd2( pxyd(1,ns2), pxyd(1,ns3), pxyd(1,ns4) )
-         s34 = abs( s234 ) + abs( s143 )
-c
-         if( abs(s34-s12) .gt. 1d-15*s34 ) goto 20
-c
-c        quadrangle convexe : le critere de delaunay intervient
-c        ------------------   ---------------------------------
-c        calcul du centre et rayon de la boule circonscrite a ns123
-c        pas d'affichage si le triangle est degenere
-         ierr = -1
-         call cenced( pxyd(1,ns1), pxyd(1,ns2), pxyd(1,ns3), cetria,
-     %                ierr )
-         if( ierr .gt. 0 ) then
-c           ierr=1 si triangle degenere  => abandon
-            goto 20
-         endif
-c
-         if( (cetria(1)-pxyd(1,ns4))**2+(cetria(2)-pxyd(2,ns4))**2
-     %       .lt. cetria(3) ) then
-c
-c           protection contre une boucle infinie sur le meme cercle
-            if( r0 .eq. cetria(3) ) goto 20
-c
-c           oui: ns4 est dans le cercle circonscrit a ns1 ns2 ns3
-c           => ns3 est aussi dans le cercle circonscrit de ns1 ns2 ns4
-c           echange de la diagonale 12 par 34 des 2 triangles
-            call te2t2t( na,     mosoar, n1soar, nosoar, noarst,
-     %                   moartr, noartr, na34 )
-            if( na34 .eq. 0 ) goto 20
-            r0 = cetria(3)
-c
-c           l'arete na34 est marquee traitee
-            nosoar(lchain,na34) = -1
-            modifs = modifs + 1
-c
-c           les aretes internes peripheriques des 2 triangles sont enchainees
-            do 60 j=4,5
-               nt = nosoar(j,na34)
-               do 50 i=1,3
-                  n = abs( noartr(i,nt) )
-                  if( n .ne. na34 ) then
-                     if( nosoar(3,n)      .eq.  0  .and.
-     %                   nosoar(lchain,n) .eq. -1 ) then
-c                        cette arete marquee est chainee pour etre traitee
-                         nosoar(lchain,n) = na0
-                         na0 = n
-                     endif
-                  endif
- 50            continue
- 60         continue
-            goto 20
-         endif
-c
-c        retour en haut de la pile des aretes a traiter
-         goto 20
-      endif
-c
-      return
-      end
-
-
-      subroutine terefr( nbarpi, pxyd,
-     %                   mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, mxartr, n1artr, noartr, noarst,
-     %                   mxarcf, n1arcf, noarcf, larmin, notrcf,
-     %                   nbarpe, ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :   recherche des aretes de la frontiere non dans la triangulation
-c -----   triangulation frontale pour les reobtenir
-c
-c         attention: le chainage lchain de nosoar devient celui des cf
-c
-c entrees:
-c --------
-c          le tableau nosoar
-c nbarpi : numero du dernier point interne impose par l'utilisateur
-c pxyd   : tableau des coordonnees 2d des points
-c          par point : x  y  distance_souhaitee
-c mosoar : nombre maximal d'entiers par arete et
-c          indice dans nosoar de l'arete suivante dans le hachage
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c          attention: mxsoar>3*mxsomm obligatoire!
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c mxartr : nombre maximal de triangles declarables dans noartr
-c mxarcf : nombre de variables des tableaux n1arcf, noarcf, larmin, notrcf
-c
-c modifies:
-c ---------
-c n1soar : no de l'eventuelle premiere arete libre dans le tableau nosoar
-c          chainage des vides suivant en 3 et precedant en 2 de nosoar
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c          hachage des aretes = nosoar(1)+nosoar(2)*2
-c          avec mxsoar>=3*mxsomm
-c          une arete i de nosoar est vide <=> nosoar(1,i)=0 et
-c          nosoar(2,arete vide)=l'arete vide qui precede
-c          nosoar(3,arete vide)=l'arete vide qui suit
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c noarst : noarst(i) numero d'une arete de sommet i
-c
-c
-c auxiliaires :
-c -------------
-c n1arcf : tableau (0:mxarcf) auxiliaire d'entiers
-c noarcf : tableau (3,mxarcf) auxiliaire d'entiers
-c larmin : tableau (mxarcf)   auxiliaire d'entiers
-c notrcf : tableau (mxarcf)   auxiliaire d'entiers
-c
-c sortie :
-c --------
-c nbarpe : nombre d'aretes perdues puis retrouvees
-c ierr   : =0 si pas d'erreur
-c          >0 si une erreur est survenue
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c....................................................................012
-      parameter        (lchain=6)
-      common / unites / lecteu,imprim,intera,nunite(29)
-      double precision  pxyd(3,*)
-      integer           nosoar(mosoar,mxsoar),
-     %                  noartr(moartr,mxartr),
-     %                  noarst(*),
-     %                  n1arcf(0:mxarcf),
-     %                  noarcf(3,mxarcf),
-     %                  larmin(mxarcf),
-     %                  notrcf(mxarcf)
-c
-      ierr = 0
-c
-c     le nombre d'aretes de la frontiere non arete de la triangulation
-      nbarpe = 0
-c
-c     initialisation du chainage des aretes des cf => 0 arete de cf
-      do 10 narete=1,mxsoar
-         nosoar( lchain, narete) = -1
- 10   continue
-c
-c     boucle sur l'ensemble des aretes actuelles
-c     ==========================================
-      do 30 narete=1,mxsoar
-c
-         if( nosoar(3,narete) .gt. 0 ) then
-c           arete appartenant a une ligne => frontaliere
-c
-            if(nosoar(4,narete) .le. 0 .or. nosoar(5,narete) .le. 0)then
-c              l'arete narete frontaliere n'appartient pas a 2 triangles
-c              => elle est perdue
-               nbarpe = nbarpe + 1
-c
-c              le numero des 2 sommets de l'arete frontaliere perdue
-               ns1 = nosoar( 1, narete )
-               ns2 = nosoar( 2, narete )
-c               write(imprim,10000) ns1,(pxyd(j,ns1),j=1,2),
-c     %                             ns2,(pxyd(j,ns2),j=1,2)
-10000          format(' arete perdue a forcer',
-     %               (t24,'sommet=',i6,' x=',g13.5,' y=',g13.5))
-c
-c              traitement de cette arete perdue ns1-ns2
-               call tefoar( narete, nbarpi, pxyd,
-     %                      mosoar, mxsoar, n1soar, nosoar,
-     %                      moartr, mxartr, n1artr, noartr, noarst,
-     %                      mxarcf, n1arcf, noarcf, larmin, notrcf,
-     %                      ierr )
-               if( ierr .ne. 0 ) return
-c
-c              fin du traitement de cette arete perdue et retrouvee
-            endif
-         endif
-c
- 30   continue
-      end
-
-
-      subroutine tesuex( nblftr, nulftr,
-     %                   ndtri0, nbsomm, pxyd, nslign,
-     %                   mosoar, mxsoar, nosoar,
-     %                   moartr, mxartr, n1artr, noartr, noarst,
-     %                   nbtria, letrsu, ierr  )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    supprimer du tableau noartr les triangles externes au domaine
-c -----    en annulant le numero de leur 1-ere arete dans noartr
-c          et en les chainant comme triangles vides
-c
-c entrees:
-c --------
-c nblftr : nombre de  lignes fermees definissant la surface
-c nulftr : numero des lignes fermees definissant la surface
-c ndtri0 : plus grand numero dans noartr d'un triangle
-c pxyd   : tableau des coordonnees 2d des points
-c          par point : x  y  distance_souhaitee
-c nslign : tableau du numero de sommet dans sa ligne pour chaque
-c          sommet frontalier
-c          numero du point dans le lexique point si interne impose
-c          0 si le point est interne non impose par l'utilisateur
-c         -1 si le sommet est externe au domaine
-c mosoar : nombre maximal d'entiers par arete et
-c          indice dans nosoar de l'arete suivante dans le hachage
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c          attention: mxsoar>3*mxsomm obligatoire!
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c          hachage des aretes = nosoar(1)+nosoar(2)*2
-c          avec mxsoar>=3*mxsomm
-c          une arete i de nosoar est vide <=> nosoar(1,i)=0 et
-c          nosoar(2,arete vide)=l'arete vide qui precede
-c          nosoar(3,arete vide)=l'arete vide qui suit
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c mxartr : nombre maximal de triangles declarables
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c noarst : noarst(i) numero nosoar d'une arete de sommet i
-c
-c sorties:
-c --------
-c nbtria : nombre de triangles internes au domaine
-c letrsu : letrsu(nt)=numero du triangle interne, 0 sinon
-c noarst : noarst(i) numero nosoar d'une arete du sommet i (modifi'e)
-c ierr   : 0 si pas d'erreur, >0 sinon
-cc++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc        mai 1999
-c2345x7..............................................................012
-      common / unites / lecteu,imprim,intera,nunite(29)
-      double precision  pxyd(3,*)
-      integer           nulftr(nblftr),nslign(nbsomm),
-     %                  nosoar(mosoar,mxsoar),
-     %                  noartr(moartr,mxartr),
-     %                  noarst(*)
-      integer           letrsu(1:ndtri0)
-      double precision  dmin
-c
-c     les triangles sont a priori non marques
-      do 5 nt=1,ndtri0
-         letrsu(nt) = 0
- 5    continue
-c
-c     les aretes sont marquees non chainees
-      do 10 noar1=1,mxsoar
-         nosoar(6,noar1) = -2
- 10   continue
-c
-c     recherche du sommet de la triangulation de plus petite abscisse
-c     ===============================================================
-      ntmin = 0
-      dmin  = 1d38
-      do 20 i=1,nbsomm
-         if( pxyd(1,i) .lt. dmin ) then
-c           le nouveau minimum
-            noar1 = noarst(i)
-            if( noar1 .gt. 0 ) then
-c              le sommet appartient a une arete de triangle
-               if( nosoar(4,noar1) .gt. 0 ) then
-c                 le nouveau minimum
-                  dmin  = pxyd(1,i)
-                  ntmin = i
-               endif
-            endif
-         endif
- 20   continue
-c
-c     une arete de sommet ntmin
-      noar1 = noarst( ntmin )
-c     un triangle d'arete noar1
-      ntmin = nosoar( 4, noar1 )
-      if( ntmin .le. 0 ) then
-c         nblgrc(nrerr) = 1
-c         kerr(1) = 'pas de triangle d''abscisse minimale'
-c         call lereur
-         write(imprim,*) 'pas de triangle d''abscisse minimale'
-         ierr = 2
-         goto 9990
-      endif
-c
-c     chainage des 3 aretes du triangle ntmin
-c     =======================================
-c     la premiere arete du chainage des aretes traitees
-      noar1 = abs( noartr(1,ntmin) )
-      na0   = abs( noartr(2,ntmin) )
-c     elle est chainee sur la seconde arete du triangle ntmin
-      nosoar(6,noar1) = na0
-c     les 2 autres aretes du triangle ntmin sont chainees
-      na1 = abs( noartr(3,ntmin) )
-c     la seconde est chainee sur la troisieme arete
-      nosoar(6,na0) = na1
-c     la troisieme n'a pas de suivante
-      nosoar(6,na1) = 0
-c
-c     le triangle ntmin est a l'exterieur du domaine
-c     tous les triangles externes sont marques -123 456 789
-c     les triangles de l'autre cote d'une arete sur une ligne
-c     sont marques: no de la ligne de l'arete * signe oppose
-c     =======================================================
-      ligne0 = 0
-      ligne  = -123 456 789
-c
- 40   if( noar1 .ne. 0 ) then
-c
-c        l'arete noar1 du tableau nosoar est a traiter
-c        ---------------------------------------------
-         noar = noar1
-c        l'arete suivante devient la premiere a traiter ensuite
-         noar1 = nosoar(6,noar1)
-c        l'arete noar est traitee
-         nosoar(6,noar) = -3
-c
-         do 60 i=4,5
-c
-c           l'un des 2 triangles de l'arete
-            nt = nosoar(i,noar)
-            if( nt .gt. 0 ) then
-c
-c              triangle deja traite pour une ligne anterieure?
-               if(     letrsu(nt)  .ne. 0      .and.
-     %             abs(letrsu(nt)) .ne. ligne ) goto 60
-c
-c              le triangle est marque avec la valeur de ligne
-               letrsu(nt) = ligne
-c
-c              chainage eventuel des autres aretes de ce triangle
-c              si ce n'est pas encore fait
-               do 50 j=1,3
-c
-c                 le numero na de l'arete j du triangle nt dans nosoar
-                  na = abs( noartr(j,nt) )
-                  if( nosoar(6,na) .ne. -2 ) goto 50
-c
-c                 le numero de 1 a nblftr dans nulftr de la ligne de l'arete
-                  nl = nosoar(3,na)
-c
-c                 si l'arete est sur une ligne fermee differente de celle envelo
-c                 et non marquee alors examen du triangle oppose
-                  if( nl .gt. 0 ) then
-c
-                     if( nl .eq. ligne0 ) goto 50
-c
-c                    arete frontaliere de ligne non traitee
-c                    => passage de l'autre cote de la ligne
-c                    le triangle de l'autre cote de la ligne est recherche
-                     if( nt .eq. abs( nosoar(4,na) ) ) then
-                        nt2 = 5
-                     else
-                        nt2 = 4
-                     endif
-                     nt2 = abs( nosoar(nt2,na) )
-                     if( nt2 .gt. 0 ) then
-c
-c                       le triangle nt2 de l'autre cote est marque avec le
-c                       avec le signe oppose de celui de ligne
-                        if( ligne .ge. 0 ) then
-                           lsigne = -1
-                        else
-                           lsigne =  1
-                        endif
-                        letrsu(nt2) = lsigne * nl
-c
-c                       temoin de ligne a traiter ensuite dans nulftr
-                        nulftr(nl) = -abs( nulftr(nl) )
-c
-c                       l'arete est traitee
-                        nosoar(6,na) = -3
-c
-                     endif
-c
-c                    l'arete est traitee
-                     goto 50
-c
-                  endif
-c
-c                 arete non traitee => elle est chainee
-                  nosoar(6,na) = noar1
-                  noar1 = na
-c
- 50            continue
-c
-            endif
- 60      continue
-c
-         goto 40
-      endif
-c     les triangles de la ligne fermee ont tous ete marques
-c     plus d'arete chainee
-c
-c     recherche d'une nouvelle ligne fermee a traiter
-c     ===============================================
- 65   do 70 nl=1,nblftr
-         if( nulftr(nl) .lt. 0 ) goto 80
- 70   continue
-c     plus de ligne fermee a traiter
-      goto 110
-c
-c     tous les triangles de cette composante connexe
-c     entre ligne et ligne0 vont etre marques
-c     ==============================================
-c     remise en etat du numero de ligne
-c     nl est le numero de la ligne dans nulftr a traiter
- 80   nulftr(nl) = -nulftr(nl)
-      do 90 nt2=1,ndtri0
-         if( abs(letrsu(nt2)) .eq. nl ) goto 92
- 90   continue
-c
-c     recherche de l'arete j du triangle nt2 avec ce numero de ligne nl
- 92   do 95 j=1,3
-c
-c        le numero de l'arete j du triangle dans nosoar
-         noar1 = 0
-         na0   = abs( noartr(j,nt2) )
-         if( nl .eq. nosoar(3,na0) ) then
-c
-c           na0 est l'arete de ligne nl
-c           l'arete suivante du triangle nt2
-            i   = mod(j,3) + 1
-c           le numero dans nosoar de l'arete i de nt2
-            na1 = abs( noartr(i,nt2) )
-            if( nosoar(6,na1) .eq. -2 ) then
-c              arete non traitee => elle est la premiere du chainage
-               noar1 = na1
-c              pas de suivante dans ce chainage
-               nosoar(6,na1) = 0
-            else
-               na1 = 0
-            endif
-c
-c           l'eventuelle seconde arete suivante
-            i  = mod(i,3) + 1
-            na = abs( noartr(i,nt2) )
-            if( nosoar(6,na) .eq. -2 ) then
-               if( na1 .eq. 0 ) then
-c                 1 arete non traitee et seule a chainer
-                  noar1 = na
-                  nosoar(6,na) = 0
-               else
-c                 2 aretes a chainer
-                  noar1 = na
-                  nosoar(6,na) = na1
-               endif
-            endif
-c
-            if( noar1 .gt. 0 ) then
-c
-c              il existe au moins une arete a visiter pour ligne
-c              marquage des triangles internes a la ligne nl
-               ligne  = letrsu(nt2)
-               ligne0 = nl
-               goto 40
-c
-            else
-c
-c              nt2 est le seul triangle de la ligne fermee
-               goto 65
-c
-            endif
-         endif
- 95   continue
-c
-c     reperage des sommets internes ou externes dans nslign
-c     nslign(sommet externe au domaine)=-1
-c     nslign(sommet interne au domaine)= 0
-c     =====================================================
- 110  do 170 ns1=1,nbsomm
-c        tout sommet non sur la frontiere ou interne impose
-c        est suppose externe
-         if( nslign(ns1) .eq. 0 ) nslign(ns1) = -1
- 170  continue
-c
-c     les triangles externes sont marques vides dans le tableau noartr
-c     ================================================================
-      nbtria = 0
-      do 200 nt=1,ndtri0
-c
-         if( letrsu(nt) .le. 0 ) then
-c
-c           triangle nt externe
-            if( noartr(1,nt) .ne. 0 ) then
-c              la premiere arete est annulee
-               noartr(1,nt) = 0
-c              le triangle nt est considere comme etant vide
-               noartr(2,nt) = n1artr
-               n1artr = nt
-            endif
-c
-         else
-c
-c           triangle nt interne
-            nbtria = nbtria + 1
-            letrsu(nt) = nbtria
-c
-c           marquage des 3 sommets du triangle nt
-            do 190 i=1,3
-c              le numero nosoar de l'arete i du triangle nt
-               noar = abs( noartr(i,nt) )
-c              le numero des 2 sommets
-               ns1 = nosoar(1,noar)
-               ns2 = nosoar(2,noar)
-c              mise a jour du numero d'une arete des 2 sommets de l'arete
-               noarst( ns1 ) = noar
-               noarst( ns2 ) = noar
-c              ns1 et ns2 sont des sommets de la triangulation du domaine
-               if( nslign(ns1) .lt. 0 ) nslign(ns1)=0
-               if( nslign(ns2) .lt. 0 ) nslign(ns2)=0
- 190        continue
-c
-         endif
-c
- 200  continue
-c     ici tout sommet externe ns verifie nslign(ns)=-1
-c
-c     les triangles externes sont mis a zero dans nosoar
-c     ==================================================
-      do 300 noar=1,mxsoar
-c
-         if( nosoar(1,noar) .gt. 0 ) then
-c
-c           le second triangle de l'arete noar
-            nt = nosoar(5,noar)
-            if( nt .gt. 0 ) then
-c              si le triangle nt est externe
-c              alors il est supprime pour l'arete noar
-               if( letrsu(nt) .le. 0 ) nosoar(5,noar)=0
-            endif
-c
-c           le premier triangle de l'arete noar
-            nt = nosoar(4,noar)
-            if( nt .gt. 0 ) then
-               if( letrsu(nt) .le. 0 ) then
-c                 si le triangle nt est externe
-c                 alors il est supprime pour l'arete noar
-c                 et l'eventuel triangle oppose prend sa place
-c                 en position 4 de nosoar
-                  if( nosoar(5,noar) .gt. 0 ) then
-                     nosoar(4,noar)=nosoar(5,noar)
-                     nosoar(5,noar)=0
-                  else
-                     nosoar(4,noar)=0
-                  endif
-               endif
-            endif
-         endif
-c
- 300  continue
-c
-c     remise en etat pour eviter les modifications de ladefi
- 9990 do 9991 nl=1,nblftr
-         if( nulftr(nl) .lt. 0 ) nulftr(nl)=-nulftr(nl)
- 9991 continue
-      return
-      end
-
-
-      subroutine trp1st( ns,     noarst, mosoar, nosoar,
-     %                   moartr, mxartr, noartr,
-     %                   mxpile, lhpile, lapile )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :   recherche des triangles de noartr partageant le sommet ns
-c -----
-c         limite: un camembert de centre ns entame 2 fois
-c                 ne donne que l'une des parties
-c
-c entrees:
-c --------
-c ns     : numero du sommet
-c noarst : noarst(i) numero d'une arete de sommet i
-c mosoar : nombre maximal d'entiers par arete et
-c          indice dans nosoar de l'arete suivante dans le hachage
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c mxartr : nombre de triangles declares dans noartr
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c mxpile : nombre maximal de triangles empilables
-c
-c sorties :
-c ---------
-c lhpile : >0 nombre de triangles empiles
-c          =0       si impossible de tourner autour du point
-c                   ou zero triangle contenant le sommet ns
-c          =-lhpile si apres butee sur la frontiere il y a a nouveau
-c          butee sur la frontiere . a ce stade on ne peut dire si tous
-c          les triangles ayant ce sommet ont ete recenses
-c          ce cas arrive seulement si le sommet est sur la frontiere
-c          par un balayage de tous les triangles, lhpile donne le
-c          nombre de triangles de sommet ns
-c          remarque: si la pile est saturee recherche de tous les
-c          triangles de sommet ns par balayage de tous les triangles
-c lapile : numero dans noartr des triangles de sommet ns
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur: alain perronnet analyse numerique paris upmc         mars 1997
-c modifs: alain perronnet Laboratoire J-L. Lions UPMC Paris octobre 2006
-c....................................................................012
-      common / unites / lecteu, imprim, nunite(30)
-      integer           noartr(moartr,mxartr),
-     %                  nosoar(mosoar,*),
-     %                  noarst(*)
-      integer           lapile(1:mxpile)
-      integer           nosotr(3)
-c
-      lhpile = 0
-c
-c     la premiere arete de sommet ns
-      nar = noarst( ns )
-      if( nar .le. 0 ) then
-ccc         write(imprim,*) 'trp1st: sommet',ns,' sans arete'
-         goto 100
-      endif
-c
-c     l'arete nar est elle active?
-      if( nosoar(1,nar) .le. 0 ) then
-ccc         write(imprim,*) 'trp1st: arete vide',nar,
-ccc     %                  ' st1:', nosoar(1,nar),' st2:',nosoar(2,nar)
-         goto 100
-      endif
-c
-c     le premier triangle de sommet ns
-      nt0 = abs( nosoar(4,nar) )
-      if( nt0 .le. 0 ) then
-         write(imprim,*) 'trp1st: sommet',ns,' dans aucun triangle'
-         goto 100
-      endif
-c
-c     le triangle est il actif?
-      if( noartr(1,nt0) .eq. 0 ) goto 100
-c
-c     le numero des 3 sommets du triangle nt0 dans le sens direct
-      call nusotr( nt0, mosoar, nosoar, moartr, noartr, nosotr )
-c
-c     reperage du sommet ns dans le triangle nt0
-      do 5 nar=1,3
-         if( nosotr(nar) .eq. ns ) goto 10
- 5    continue
-c     pas de sommet ns dans le triangle nt0
-      goto 100
-c
-c     ns retrouve : le triangle nt0 de sommet ns est empile
- 10   lhpile = 1
-      lapile(1) = nt0
-      nta = nt0
-c
-c     recherche dans le sens des aiguilles d'une montre
-c     (sens indirect) du triangle nt1 de l'autre cote de l'arete
-c     nar du triangle et en tournant autour du sommet ns
-c     ==========================================================
-      noar = abs( noartr(nar,nt0) )
-c     le triangle nt1 oppose du triangle nt0 par l'arete noar
-      if( nosoar(4,noar) .eq. nt0 ) then
-         nt1 = nosoar(5,noar)
-      else if( nosoar(5,noar) .eq. nt0 ) then
-         nt1 = nosoar(4,noar)
-      else
-       write(imprim,*)'trp1st: anomalie arete',noar,' sans triangle',nt0
-         goto 100
-      endif
-c
-c     la boucle sur les triangles nt1 de sommet ns dans le sens indirect
-c     ==================================================================
-      if( nt1 .gt. 0 ) then
-c
-         if( noartr(1,nt1) .eq. 0 ) goto 30
-c
-c        le triangle nt1 n'a pas ete detruit. il est actif
-c        le triangle oppose par l'arete noar existe
-c        le numero des 3 sommets du triangle nt1 dans le sens direct
- 15      call nusotr( nt1, mosoar, nosoar, moartr, noartr, nosotr )
-c
-c        reperage du sommet ns dans nt1
-         do 20 nar=1,3
-            if( nosotr(nar) .eq. ns ) goto 25
- 20      continue
-c        pas de sommet ns dans le triangle nt1
-         goto 100
-c
-c        nt1 est empile
- 25      if( lhpile .ge. mxpile ) goto 100
-         lhpile = lhpile + 1
-         lapile(lhpile) = nt1
-c
-c        le triangle nt1 de l'autre cote de l'arete de sommet ns
-c        sauvegarde du precedent triangle dans nta
-         nta  = nt1
-         noar = abs( noartr(nar,nt1) )
-         if( nosoar(4,noar) .eq. nt1 ) then
-            nt1 = nosoar(5,noar)
-         else if( nosoar(5,noar) .eq. nt1 ) then
-            nt1 = nosoar(4,noar)
-         else
-            write(imprim,*)'trp1st: Anomalie arete',noar,
-     %                     ' sans triangle',nt1
-            goto 100
-         endif
-c
-c        le triangle suivant est il a l'exterieur?
-         if( nt1 .le. 0 ) goto 30
-c
-c        non: est il le premier triangle de sommet ns?
-         if( nt1 .ne. nt0 ) goto 15
-c
-c        oui: recherche terminee par arrivee sur nt0
-c        les triangles forment un "cercle" de "centre" ns
-c        lhpile ressort avec le signe +
-         return
-c
-      endif
-c
-c     pas de triangle voisin a nt1 qui doit etre frontalier
-c     =====================================================
-c     le parcours passe par 1 des triangles exterieurs
-c     le parcours est inverse par l'arete de gauche
-c     le triangle nta est le premier triangle empile
- 30   lhpile = 1
-      lapile(lhpile) = nta
-c
-c     le numero des 3 sommets du triangle nta dans le sens direct
-      call nusotr( nta, mosoar, nosoar, moartr, noartr, nosotr )
-      do 32 nar=1,3
-         if( nosotr(nar) .eq. ns ) goto 33
- 32   continue
-      goto 100
-c
-c     l'arete qui precede (rotation / ns dans le sens direct)
- 33   if( nar .eq. 1 ) then
-         nar = 3
-      else
-         nar = nar - 1
-      endif
-c
-c     le triangle voisin de nta dans le sens direct
-      noar = abs( noartr(nar,nta) )
-      if( nosoar(4,noar) .eq. nta ) then
-         nt1 = nosoar(5,noar)
-      else if( nosoar(5,noar) .eq. nta ) then
-         nt1 = nosoar(4,noar)
-      else
-         write(imprim,*)'trp1st: Anomalie arete',noar,
-     %                  ' SANS triangle',nta
-         goto 100
-      endif
-      if( nt1 .le. 0 ) then
-c        un seul triangle contient ns
-c        parcours de tous les triangles pour lever le doute
-         goto 100
-      endif
-c
-c     boucle sur les triangles de sommet ns dans le sens direct
-c     ==========================================================
- 40   if( noartr(1,nt1) .eq. 0 ) goto 70
-c
-c     le triangle nt1 n'a pas ete detruit. il est actif
-c     le numero des 3 sommets du triangle nt1 dans le sens direct
-      call nusotr( nt1, mosoar, nosoar, moartr, noartr, nosotr )
-c
-c     reperage du sommet ns dans nt1
-      do 50 nar=1,3
-         if( nosotr(nar) .eq. ns ) goto 60
- 50   continue
-      goto 100
-c
-c     nt1 est empile
- 60   if( lhpile .ge. mxpile ) goto 70
-      lhpile = lhpile + 1
-      lapile(lhpile) = nt1
-c
-c     l'arete qui precede dans le sens direct
-      if( nar .eq. 1 ) then
-         nar = 3
-      else
-         nar = nar - 1
-      endif
-c
-c     l'arete de sommet ns dans nosoar
-      noar = abs( noartr(nar,nt1) )
-c
-c     le triangle voisin de nta dans le sens direct
-      nta = nt1
-      if( nosoar(4,noar) .eq. nt1 ) then
-         nt1 = nosoar(5,noar)
-      else if( nosoar(5,noar) .eq. nt1 ) then
-         nt1 = nosoar(4,noar)
-      else
-         write(imprim,*)'trp1st: anomalie arete',noar,
-     %                  ' SANS triangle',nt1
-         goto 100
-      endif
-      if( nt1 .gt. 0 ) goto 40
-c
-c     butee sur le trou => fin des triangles de sommet ns
-c     ----------------------------------------------------
-c     impossible ici de trouver tous les triangles de sommet ns directement
-c     les triangles de sommet ns ne forment pas une boule de centre ns
-c     au moins 1, voire 2 triangles frontaliers de sommet ns
- 70   lhpile = -lhpile
-      return
-c
-c     Balayage de tous les triangles actifs et de sommet ns
-c     methode lourde et couteuse mais a priori tres fiable
-c     -----------------------------------------------------
- 100  lhpile = 0
-      do 120 nt1=1,mxartr
-         if( noartr(1,nt1) .ne. 0 ) then
-c           le numero des 3 sommets du triangle i
-            call nusotr( nt1, mosoar, nosoar, moartr, noartr, nosotr )
-            do 110 j=1,3
-               if( nosotr(j) .eq. ns ) then
-c                 le triangle contient le sommet ns
-                  lhpile = lhpile + 1
-                  if( lhpile .gt. mxpile ) goto 9990
-                  lapile( lhpile ) = nt1
-               endif
- 110        continue
-         endif
- 120  continue
-c     il n'est pas sur que ces triangles forment une boule de centre ns
-      lhpile = -lhpile
-      return
-c
-c     saturation de la pile des triangles
-c     -----------------------------------
- 9990 write(imprim,*)'trp1st: saturation pile des triangles autour du so
-     %mmet',ns
-      write(imprim,*) 'Plus de',mxpile,' triangles de sommet',ns
-      write(imprim,19990) (ii,lapile(ii),ii=1,mxpile)
-19990 format(5(' triangle',i9))
-c
- 9999 lhpile = 0
-      return
-      end
-
-
-
-      subroutine nusotr( nt, mosoar, nosoar, moartr, noartr, nosotr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    calcul du numero des 3 sommets du triangle nt de noartr
-c -----    dans le sens direct (aire>0 si non degenere)
-c
-c entrees:
-c --------
-c nt     : numero du triangle dans le tableau noartr
-c mosoar : nombre maximal d'entiers par arete
-c nosoar : numero des 2 sommets , no ligne, 2 triangles, chainages en +
-c          sommet 1 = 0 si arete vide => sommet 2 = arete vide suivante
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1=0 si triangle vide => arete2=triangle vide suivant
-c
-c sorties:
-c --------
-c nosotr : numero (dans le tableau pxyd) des 3 sommets du triangle
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c2345x7..............................................................012
-      integer     nosoar(mosoar,*), noartr(moartr,*), nosotr(3)
-c
-c     les 2 sommets de l'arete 1 du triangle nt dans le sens direct
-      na = noartr( 1, nt )
-      if( na .gt. 0 ) then
-         nosotr(1) = 1
-         nosotr(2) = 2
-      else
-         nosotr(1) = 2
-         nosotr(2) = 1
-         na = -na
-      endif
-      nosotr(1) = nosoar( nosotr(1), na )
-      nosotr(2) = nosoar( nosotr(2), na )
-c
-c     l'arete suivante
-      na = abs( noartr(2,nt) )
-c
-c     le sommet nosotr(3 du triangle 123
-      nosotr(3) = nosoar( 1, na )
-      if( nosotr(3) .eq. nosotr(1) .or. nosotr(3) .eq. nosotr(2) ) then
-         nosotr(3) = nosoar(2,na)
-      endif
-      end
-
-
-      subroutine tesusp( quamal, nbarpi, pxyd,   noarst,
-     %                   mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, mxartr, n1artr, noartr,
-     %                   mxarcf, n1arcf, noarcf, larmin, notrcf, liarcf,
-     %                   ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :   supprimer de la triangulation les sommets de te trop proches
-c -----   soit d'un sommet frontalier ou point interne impose
-c         soit d'une arete frontaliere si la qualite minimale des triangles
-c         est inferieure a quamal
-c
-c         attention: le chainage lchain de nosoar devient celui des cf
-c
-c entrees:
-c --------
-c quamal : qualite des triangles au dessous de laquelle supprimer des sommets
-c nbarpi : numero du dernier point interne impose par l'utilisateur
-c pxyd   : tableau des coordonnees 2d des points
-c          par point : x  y  distance_souhaitee
-c mosoar : nombre maximal d'entiers par arete et
-c          indice dans nosoar de l'arete suivante dans le hachage
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c          attention: mxsoar>3*mxsomm obligatoire!
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c mxarcf : nombre de variables des tableaux n1arcf, noarcf, larmin, notrcf
-c
-c modifies:
-c ---------
-c noarst : noarst(i) numero d'une arete de sommet i
-c n1soar : no de l'eventuelle premiere arete libre dans le tableau nosoar
-c          chainage des vides suivant en 3 et precedant en 2 de nosoar
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c          hachage des aretes = nosoar(1)+nosoar(2)*2
-c          avec mxsoar>=3*mxsomm
-c          une arete i de nosoar est vide <=> nosoar(1,i)=0 et
-c          nosoar(2,arete vide)=l'arete vide qui precede
-c          nosoar(3,arete vide)=l'arete vide qui suit
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c
-c
-c auxiliaires :
-c -------------
-c n1arcf : tableau (0:mxarcf) auxiliaire d'entiers
-c noarcf : tableau (3,mxarcf) auxiliaire d'entiers
-c larmin : tableau ( mxarcf ) auxiliaire d'entiers
-c notrcf : tableau ( mxarcf ) auxiliaire d'entiers
-c liarcf : tableau ( mxarcf ) auxiliaire d'entiers
-c
-c sortie :
-c --------
-c ierr   : =0 si pas d'erreur
-c          >0 si une erreur est survenue
-c          11 algorithme defaillant
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c....................................................................012
-      parameter       ( lchain=6 )
-      common / unites / lecteu,imprim,intera,nunite(29)
-      double precision  pxyd(3,*), quamal, qualit, quaopt, quamin
-      integer           nosoar(mosoar,mxsoar),
-     %                  noartr(moartr,mxartr),
-     %                  noarst(*),
-     %                  n1arcf(0:mxarcf),
-     %                  noarcf(3,mxarcf),
-     %                  larmin(mxarcf),
-     %                  notrcf(mxarcf),
-     %                  liarcf(mxarcf)
-c
-      integer           nosotr(3)
-      equivalence      (nosotr(1),ns1), (nosotr(2),ns2),
-     %                 (nosotr(3),ns3)
-c
-c     le nombre de sommets de te supprimes
-      nbstsu = 0
-      ierr   = 0
-c
-c     initialisation du chainage des aretes des cf => 0 arete de cf
-      do 10 narete=1,mxsoar
-         nosoar( lchain, narete ) = -1
- 10   continue
-c
-c     boucle sur l'ensemble des sommets frontaliers ou points internes
-c     ================================================================
-      do 100 ns = 1, nbarpi
-c
-c        le nombre de sommets supprimes pour ce sommet ns
-         nbsuns = 0
-c        la qualite minimale au dessous de laquelle le point proche
-c        interne est supprime
-         quaopt = quamal
-c
-c        une arete de sommet ns
- 15      narete = noarst( ns )
-         if( narete .le. 0 ) then
-c           erreur: le point appartient a aucune arete
-            write(imprim,*) 'sommet ',ns,' dans aucune arete'
-            ierr = 11
-            return
-         endif
-c
-c        recherche des triangles de sommet ns
-         call trp1st( ns, noarst, mosoar, nosoar,
-     %                moartr, mxartr, noartr,
-     %                mxarcf, nbtrcf, notrcf )
-         if( nbtrcf .eq. 0 ) goto 100
-         if( nbtrcf .lt. 0 ) then
-c           impossible de trouver tous les triangles de sommet ns
-c           seule une partie est a priori retrouvee ce qui est normal
-c           si ns est un sommet frontalier 
-            nbtrcf = -nbtrcf
-         endif
-c
-c        boucle sur les triangles de l'etoile du sommet ns
-c        recherche du triangle de sommet ns ayant la plus basse qualite
-         quamin = 2.0d0
-         do 20 i=1,nbtrcf
-c           le numero des 3 sommets du triangle nt
-            nt = notrcf(i)
-            call nusotr( nt, mosoar, nosoar, moartr, noartr, nosotr )
-c           nosotr(1:3) est en equivalence avec ns1, ns2, ns3
-c           la qualite du triangle ns1 ns2 ns3
-            call qutr2d( pxyd(1,ns1), pxyd(1,ns2), pxyd(1,ns3), qualit )
-            if( qualit .lt. quamin ) then
-               quamin = qualit
-               ntqmin = nt
-            endif
- 20      continue
-c
-c        bilan sur la qualite des triangles de sommet ns
-         if( quamin .lt. quaopt ) then
-c
-c           recherche du sommet de ntqmin le plus proche et non frontalier
-c           ==============================================================
-c           le numero des 3 sommets du triangle ntqmin
-            call nusotr(ntqmin, mosoar, nosoar, moartr, noartr, nosotr)
-            nste = 0
-            d0   = 1e28
-            do 30 j=1,3
-               nst = nosotr(j)
-               if( nst .ne. ns .and. nst .gt. nbarpi ) then
-                  d = (pxyd(1,nst)-pxyd(1,ns))**2
-     %              + (pxyd(2,nst)-pxyd(2,ns))**2
-                  if( d .lt. d0 ) then
-                     d0   = d
-                     nste = j
-                  endif
-               endif
- 30         continue
-c
-            if( nste .gt. 0 ) then
-c
-c              nste est le sommet le plus proche de ns de ce
-c              triangle de mauvaise qualite et sommet non encore traite
-               nste = nosotr( nste )
-c
-c              nste est un sommet de triangle equilateral
-c              => le sommet nste va etre supprime
-c              ==========================================
-               call te1stm( nste,   nbarpi, pxyd,   noarst,
-     %                      mosoar, mxsoar, n1soar, nosoar,
-     %                      moartr, mxartr, n1artr, noartr,
-     %                      mxarcf, n1arcf, noarcf,
-     %                      larmin, notrcf, liarcf, ierr )
-               if( ierr .eq. 0 ) then
-c                 un sommet de te supprime de plus
-                  nbstsu = nbstsu + 1
-c
-c                 boucle jusqu'a obtenir une qualite suffisante
-c                 si triangulation tres irreguliere =>
-c                 destruction de beaucoup de points internes
-c                 les 2 variables suivantes brident ces destructions massives
-                  nbsuns = nbsuns + 1
-                  quaopt = quaopt * 0.8
-                  if( nbsuns .lt. 5 ) goto 15
-               else
-                  if( ierr .lt. 0 ) then
-c                    le sommet nste est externe donc non supprime
-c                    ou bien le sommet nste est le centre d'un cf dont toutes
-c                    les aretes simples sont frontalieres
-c                    dans les 2 cas le sommet n'est pas supprime
-                     ierr = 0
-                     goto 100
-                  else
-c                    erreur motivant un arret de la triangulation
-                     return
-                  endif
-               endif
-            endif
-         endif
-c
- 100  continue
-c
-      write(imprim,*)'tesusp: suppression de',nbstsu,
-     %               ' sommets de te trop proches de la frontiere'
-      return
-      end
-
-
-      subroutine teamqa( nutysu, airemx,
-     %                   noarst, mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, mxartr, n1artr, noartr,
-     %                   mxtrcf, notrcf, nostbo,
-     %                   n1arcf, noarcf, larmin,
-     %                   nbarpi, nbsomm, mxsomm, pxyd, nslign,
-     %                   ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but:    Boucles sur les aretes actives de la triangulation actuelle
-c ----    si la taille de l'arete moyenne est >ampli*taille souhaitee
-c         alors ajout d'un sommet barycentre du plus grand triangle
-c               de sommet ns
-c         si la taille de l'arete moyenne est <ampli/2*taille souhaitee
-c         alors suppression du sommet ns
-c         sinon le sommet ns devient le barycentre pondere de ses voisins
-c
-c         remarque: ampli est defini dans $mefisto/mail/tehote.f
-c         et doit avoir la meme valeur pour eviter trop de modifications
-c
-c entrees:
-c --------
-c nutysu : numero de traitement de areteideale() selon le type de surface
-c          0 pas d'emploi de la fonction areteideale() => aretmx active
-c          1 il existe une fonction areteideale()
-c            dont seules les 2 premieres composantes de uv sont actives
-c          autres options a definir...
-c airemx : aire maximale d'un triangle
-c noarst : noarst(i) numero d'une arete de sommet i
-c mosoar : nombre maximal d'entiers par arete et
-c          indice dans nosoar de l'arete suivante dans le hachage
-c mxsoar : nombre maximal d'aretes frontalieres declarables
-c n1soar : numero de la premiere arete vide dans le tableau nosoar
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c mxartr : nombre maximal de triangles declarables dans noartr
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c mxtrcf : nombre maximal de triangles empilables
-c nbarpi : numero du dernier sommet frontalier ou interne impose
-c nslign : tableau du numero de sommet dans sa ligne pour chaque
-c          sommet frontalier
-c          numero du point dans le lexique point si interne impose
-c          0 si le point est interne non impose par l'utilisateur
-c         -1 si le sommet est externe au domaine
-c
-c modifies :
-c ----------
-c nbsomm : nombre actuel de sommets de la triangulation
-c          (certains sommets internes ont ete desactives ou ajoutes)
-c pxyd   : tableau des coordonnees 2d des points
-c
-c auxiliaires:
-c ------------
-c notrcf : tableau ( mxtrcf ) auxiliaire d'entiers
-c          numero dans noartr des triangles de sommet ns
-c nostbo : tableau ( mxtrcf ) auxiliaire d'entiers
-c          numero dans pxyd des sommets des aretes simples de la boule
-c n1arcf : tableau (0:mxtrcf) auxiliaire d'entiers
-c noarcf : tableau (3,mxtrcf) auxiliaire d'entiers
-c larmin : tableau ( mxtrcf ) auxiliaire d'entiers
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       juin 1997
-c....................................................................012
-      double precision  ampli,ampli2
-      parameter        (ampli=1.34d0,ampli2=ampli/2d0)
-      parameter        (lchain=6)
-      common / unites / lecteu, imprim, nunite(30)
-      double precision  pxyd(3,*), airemx
-      double precision  ponder, ponde1, xbar, ybar, x, y, surtd2,
-     %                  xns, yns, airetm
-      double precision  d, dmoy, dmax, dmin, dns, xyzns(3), s0, s1
-      integer           noartr(moartr,mxartr),
-     %                  nosoar(mosoar,mxsoar),
-     %                  noarst(*),
-     %                  notrcf(mxtrcf),
-     %                  nslign(*),
-     %                  nostbo(*),
-     %                  n1arcf(0:mxtrcf),
-     %                  noarcf(3,mxtrcf),
-     %                  larmin(mxtrcf)
-      integer           nosotr(3)
-c
-c     initialisation du chainage des aretes des cf => 0 arete de cf
-      do 1 noar=1,mxsoar
-         nosoar( lchain, noar ) = -1
- 1    continue
-      noar0 = 0
-c
-c     le nombre d'iterations pour ameliorer la qualite
-      nbitaq = 5
-      ier    = 0
-c
-c     initialisation du parcours
-      nbs1 = nbsomm
-      nbs2 = nbarpi + 1
-      nbs3 = -1
-c
-      do 5000 iter=1,nbitaq
-c
-cccc        le nombre de barycentres ajoutes
-ccc         nbbaaj = 0
-c
-c        coefficient de ponderation croissant avec les iterations
-         ponder = 0.1d0 + iter * 0.5d0 / nbitaq
-ccc 9 octobre 2006 ponder = min( 1d0, 0.1d0 + iter * 0.9d0 / nbitaq )
-ccc 9 mars    2006 ponder = min( 1d0, ( 50 + (50*iter)/nbitaq ) * 0.01d0 )
-         ponde1 = 1d0 - ponder
-c
-c        l'ordre du parcours dans le sens croissant ou decroissant
-c        alternance du parcours
-         nt   = nbs1
-         nbs1 = nbs2
-         nbs2 = nt
-         nbs3 =-nbs3
-c
-         do 1000 ns = nbs1, nbs2, nbs3
-c
-c           le sommet est il interne au domaine?
-            if( nslign(ns) .ne. 0 ) goto 1000
-c
-c           existe-t-il une arete de sommet ns ?
-            noar = noarst( ns )
-            if( noar .le. 0 ) goto 1000
-            if( nosoar(1,noar) .le. 0 ) goto 1000
-c
-c           le 1-er triangle de l'arete noar
-            nt = nosoar( 4, noar )
-            if( nt .le. 0 ) goto 1000
-c
-c           recherche des triangles de sommet ns
-c           ils doivent former un contour ferme de type etoile
-            call trp1st( ns, noarst, mosoar, nosoar,
-     %                   moartr, mxartr, noartr,
-     %                   mxtrcf, nbtrcf, notrcf )
-            if( nbtrcf .le. 0 ) goto 1000
-c
-c           mise a jour de la distance souhaitee autour de ns
-            xns =  pxyd(1,ns)
-            yns =  pxyd(2,ns)
-            if( nutysu .gt. 0 ) then
-c              la fonction taille_ideale(x,y,z) existe
-               call tetaid( nutysu, xns, yns,
-     %                      pxyd(3,ns), ier )
-            endif
-c
-c           boucle sur les triangles qui forment une etoile autour du sommet ns
-c           chainage des aretes simples de l'etoile formee par ces triangles
-c
-c           remise a zero du lien nosoar des aretes a rendre Delaunay
- 19         if( noar0 .gt. 0 ) then
-               noar = nosoar(lchain,noar0)
-               nosoar(lchain,noar0) = -1
-               noar0 = noar
-               goto 19
-            endif
-c              
-            noar0  = 0
-            nbstbo = 0
-            airetm = 0d0
-            do 40 i=1,nbtrcf
-c              recherche du triangle de plus grande aire
-               nt = notrcf(i)
-               call nusotr( nt, mosoar, nosoar,
-     %                      moartr, noartr, nosotr )
-               d = surtd2( pxyd(1,nosotr(1)),
-     %                     pxyd(1,nosotr(2)),
-     %                     pxyd(1,nosotr(3)) )
-               if( d .gt. airetm ) then
-                  airetm = d
-                  imax   = i
-               else if( d .le. 0 ) then
-                  write(imprim,*)'teamqa: triangle notrcf(',i,')=',
-     %            notrcf(i),' st', nosotr,' AIRE=',d,'<=0'
-                  goto 1000
-               endif
-c
-c              le no de l'arete du triangle nt ne contenant pas le sommet ns
-               do 20 na=1,3
-c                 le numero de l'arete na dans le tableau nosoar
-                  noar = abs( noartr(na,nt) )
-                  if( nosoar(1,noar) .ne. ns   .and.
-     %                nosoar(2,noar) .ne. ns ) goto 25
- 20            continue
-               write(imprim,*)'teamqa: ERREUR triangle',nt,
-     %                        ' SANS sommet',ns
-c
-c              construction de la liste des sommets des aretes simples
-c              de la boule des triangles de sommet ns
-c              -------------------------------------------------------
- 25            do 35 na=1,2
-                  ns1 = nosoar(na,noar)
-                  do 30 j=nbstbo,1,-1
-                     if( ns1 .eq. nostbo(j) ) goto 35
- 30               continue
-c                 ns1 est un nouveau sommet a ajouter a l'etoile
-                  nbstbo = nbstbo + 1
-                  nostbo(nbstbo) = ns1
- 35            continue
-c
-c              noar est une arete potentielle a rendre Delaunay
-               if( nosoar(3,noar) .eq. 0 ) then
-c                 arete non frontaliere
-                  nosoar(lchain,noar) = noar0
-                  noar0 = noar
-               endif
-c
- 40         continue
-c
-c           calcul des 2 coordonnees du barycentre de la boule du sommet ns
-c           calcul de la longueur moyenne des aretes issues du sommet ns
-c           ---------------------------------------------------------------
-            xbar = 0d0
-            ybar = 0d0
-            dmoy = 0d0
-            dmax = 0d0
-            dmin = 1d124
-            dns  = 0d0
-            do 50 i=1,nbstbo
-               nst  = nostbo(i)
-               x    = pxyd(1,nst)
-               y    = pxyd(2,nst)
-               xbar = xbar + x
-               ybar = ybar + y
-               d    = sqrt( (x-xns)**2 + (y-yns)**2 )
-               dmoy = dmoy + d
-               dmax = max( dmax, d )
-               dmin = min( dmin, d )
-               dns  = dns + pxyd(3,nst)
- 50         continue
-            xbar = xbar / nbstbo
-            ybar = ybar / nbstbo
-            dmoy = dmoy / nbstbo
-            dns  = dns  / nbstbo
-c
-c           pas de modification de la topologie lors de la derniere iteration
-c           =================================================================
-            if( iter .eq. nbitaq ) goto 200
-c
-c           si la taille de l'arete maximale est >ampli*taille souhaitee
-c           alors ajout d'un sommet barycentre du plus grand triangle
-c                 de sommet ns
-c           ============================================================
-            if( airetm .gt. airemx .or. dmax .gt. ampli*dns ) then
-c
-c              ajout du barycentre du triangle notrcf(imax)
-               nt = notrcf( imax )
-               call nusotr( nt, mosoar, nosoar,
-     %                      moartr, noartr, nosotr )
-               if( nbsomm .ge. mxsomm ) then
-                  write(imprim,*) 'saturation du tableau pxyd'
-c                 abandon de l'amelioration du sommet ns
-                  goto 9999
-               endif
-               nbsomm = nbsomm + 1
-               do 160 i=1,3
-                  pxyd(i,nbsomm) = ( pxyd(i,nosotr(1))
-     %                             + pxyd(i,nosotr(2))
-     %                             + pxyd(i,nosotr(3)) ) / 3d0
- 160           continue
-               if( nutysu .gt. 0 ) then
-c                 la fonction taille_ideale(x,y,z) existe
-                  call tetaid( nutysu, pxyd(1,nbsomm), pxyd(2,nbsomm),
-     %                         pxyd(3,nbsomm), ier )
-               endif
-c
-c              sommet interne a la triangulation
-               nslign(nbsomm) = 0
-c
-c              les 3 aretes du triangle nt sont a rendre delaunay
-               do 170 i=1,3
-                  noar = abs( noartr(i,nt) )
-                  if( nosoar(3,noar) .eq. 0 ) then
-c                    arete non frontaliere
-                     if( nosoar(lchain,noar) .lt. 0 ) then
-c                       arete non encore chainee
-                        nosoar(lchain,noar) = noar0
-                        noar0 = noar
-                     endif
-                  endif
- 170           continue
-c
-c              triangulation du triangle de barycentre nbsomm
-c              protection a ne pas modifier sinon erreur!
-               call tr3str( nbsomm, nt,
-     %                      mosoar, mxsoar, n1soar, nosoar,
-     %                      moartr, mxartr, n1artr, noartr,
-     %                      noarst, nosotr, ierr )
-               if( ierr .ne. 0 ) goto 9999
-c
-cccc              un barycentre ajoute de plus
-ccc               nbbaaj = nbbaaj + 1
-c
-c              les aretes chainees de la boule sont rendues delaunay
-               goto 900
-c
-            endif
-c
-c           les 2 coordonnees du barycentre des sommets des aretes
-c           simples de la boule du sommet ns
-c           ======================================================
-C DEBUT AJOUT 10 octobre 2006
-C           PONDERATION POUR EVITER LES DEGENERESCENSES AVEC PROTECTION
-C           SI UN TRIANGLE DE SOMMET NS A UNE AIRE NEGATIVE APRES BARYCENTRAGE
-C           ALORS LE SOMMET NS N'EST PAS BOUGE
-c
-c           protection des XY du point initial
- 200        xyzns(1) = pxyd(1,ns)
-            xyzns(2) = pxyd(2,ns)
-            xyzns(3) = pxyd(3,ns)
-c
-c           ponderation pour eviter les degenerescenses
-            pxyd(1,ns) = ponde1 * pxyd(1,ns) + ponder * xbar
-            pxyd(2,ns) = ponde1 * pxyd(2,ns) + ponder * ybar
-            if( nutysu .gt. 0 ) then
-c              la fonction taille_ideale(x,y,z) existe
-               call tetaid( nutysu, pxyd(1,ns), pxyd(2,ns),
-     %                      pxyd(3,ns), ier )
-            endif
-c
-c           calcul des surfaces avant et apres deplacement de ns
-            s0 = 0d0
-            s1 = 0d0
-            do 210 i=1,nbtrcf
-c              le numero de l'arete du triangle nt ne contenant pas le sommet ns
-               nt = notrcf(i)
-               do 204 na=1,3
-c                 le numero de l'arete na dans le tableau nosoar
-                  noar = abs( noartr(na,nt) )
-                  if( nosoar(1,noar) .ne. ns   .and.
-     %                nosoar(2,noar) .ne. ns ) then
-                     ns2 = nosoar(1,noar)
-                     ns3 = nosoar(2,noar)
-                     goto 206
-                  endif
- 204           continue
-c              aire signee des 2 triangles
- 206           s0 = s0 + abs(surtd2(xyzns,     pxyd(1,ns2),pxyd(1,ns3)))
-               s1 = s1 + abs(surtd2(pxyd(1,ns),pxyd(1,ns2),pxyd(1,ns3)))
- 210        continue
-            if( abs(s0-s1) .gt. 1d-10*abs(s0) ) then
-c              retour a la position initiale
-c              car le point est passe au dela d'une arete de son etoile
-               pxyd(1,ns) = xyzns(1)
-               pxyd(2,ns) = xyzns(2)
-               pxyd(3,ns) = xyzns(3)
-c              la ponderation est reduite  10 octobre 2006
-               ponder = max( 0.1d0, ponder*0.5d0 )
-               ponde1 = 1d0 - ponder
-               goto 1000
-            endif
-c
-c           les aretes chainees de la boule sont rendues delaunay
- 900        call tedela( pxyd,   noarst,
-     %                   mosoar, mxsoar, n1soar, nosoar, noar0,
-     %                   moartr, mxartr, n1artr, noartr, modifs )
-c
- 1000    continue
-c
-ccc         write(imprim,11000) iter, nbbaaj
-ccc11000 format('teamqa: iteration',i3,' =>',i6,' barycentres ajoutes')
-c
-c        mise a jour pour ne pas oublier les nouveaux sommets
-         if( nbs1 .gt. nbs2 ) then
-            nbs1 = nbsomm
-         else
-            nbs2 = nbsomm
-         endif
-c
- 5000 continue
-c
- 9999 return
-      end
-
-
-      subroutine teamqt( nutysu, aretmx, airemx,
-     %                   noarst, mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, mxartr, n1artr, noartr,
-     %                   mxarcf, notrcf, nostbo,
-     %                   n1arcf, noarcf, larmin,
-     %                   nbarpi, nbsomm, mxsomm, pxyd, nslign,
-     %                   ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    amelioration de la qualite de la triangulation
-c -----
-c
-c entrees:
-c --------
-c nutysu : numero de traitement de areteideale() selon le type de surface
-c          0 pas d'emploi de la fonction areteideale() => aretmx active
-c          1 il existe une fonction areteideale()
-c            dont seules les 2 premieres composantes de uv sont actives
-c          autres options a definir...
-c aretmx : longueur maximale des aretes de la future triangulation
-c airemx : aire maximale souhaitee des triangles
-c noarst : noarst(i) numero d'une arete de sommet i
-c mosoar : nombre maximal d'entiers par arete et
-c          indice dans nosoar de l'arete suivante dans le hachage
-c mxsoar : nombre maximal d'aretes frontalieres declarables
-c n1soar : numero de la premiere arete vide dans le tableau nosoar
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c mxartr : nombre maximal de triangles declarables dans noartr
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c mxarcf : nombre maximal de triangles empilables
-c nbarpi : numero du dernier sommet frontalier ou interne impose
-c nslign : tableau du numero de sommet dans sa ligne pour chaque
-c          sommet frontalier
-c          numero du point dans le lexique point si interne impose
-c          0 si le point est interne non impose par l'utilisateur
-c         -1 si le sommet est externe au domaine
-c
-c modifies :
-c ----------
-c nbsomm : nombre actuel de sommets de la triangulation
-c          (certains sommets internes ont ete desactives ou ajoutes)
-c pxyd   : tableau des coordonnees 2d des points
-c
-c auxiliaires:
-c ------------
-c notrcf : tableau ( mxarcf ) auxiliaire d'entiers
-c          numero dans noartr des triangles de sommet ns
-c nostbo : tableau ( mxarcf ) auxiliaire d'entiers
-c          numero dans pxyd des sommets des aretes simples de la boule
-c n1arcf : tableau (0:mxarcf) auxiliaire d'entiers
-c noarcf : tableau (3,mxarcf) auxiliaire d'entiers
-c larmin : tableau ( mxarcf ) auxiliaire d'entiers
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       juin 1997
-c....................................................................012
-      double precision  quamal
-c     parameter       ( quamal=0.3d0 ) => ok
-c     parameter       ( quamal=0.4d0 ) => pb pour le test ocean
-c     parameter       ( quamal=0.5d0 ) => pb pour le test ocean
-      parameter       ( quamal=0.1d0 )
-c     quamal=0.1d0 est choisi pour ne pas trop detruire de sommets
-c
-      common / unites / lecteu, imprim, nunite(30)
-      double precision  pxyd(3,*)
-      integer           noartr(moartr,*),
-     %                  nosoar(mosoar,*),
-     %                  noarst(*),
-     %                  notrcf(mxarcf),
-     %                  nslign(*),
-     %                  nostbo(mxarcf),
-     %                  n1arcf(0:mxarcf),
-     %                  noarcf(3,mxarcf),
-     %                  larmin(mxarcf)
-      double precision  aretmx, airemx
-      double precision  quamoy, quamin
-c
-      ierr = 0
-c
-c     supprimer de la triangulation les triangles de qualite
-c     inferieure a quamal
-c     ======================================================
-      call tesuqm( quamal, nbarpi, pxyd,   noarst,
-     %             mosoar, mxsoar, n1soar, nosoar,
-     %             moartr, mxartr, n1artr, noartr,
-     %             mxarcf, n1arcf, noarcf,
-     %             larmin, notrcf, nostbo,
-     %             quamin )
-      call qualitetrte( pxyd,   mosoar, mxsoar, nosoar,
-     %                  moartr, mxartr, noartr,
-     %                  nbtria, quamoy, quamin )
-c
-c     suppression des sommets de triangles equilateraux trop proches
-c     d'un sommet frontalier ou d'un point interne impose par
-c     triangulation frontale de l'etoile et mise en delaunay
-c     ==============================================================
-      if( quamin .le. quamal ) then
-         call tesusp( quamal, nbarpi, pxyd,   noarst,
-     %                mosoar, mxsoar, n1soar, nosoar,
-     %                moartr, mxartr, n1artr, noartr,
-     %                mxarcf, n1arcf, noarcf,
-     %                larmin, notrcf, nostbo,
-     %                ierr )
-         if( ierr .ne. 0 ) goto 9999
-      endif
-c
-c     ajustage des tailles moyennes des aretes avec ampli=1.34d0 entre
-c     ampli/2 x taille_souhaitee et ampli x taille_souhaitee 
-c     + barycentrage des sommets et mise en triangulation delaunay
-c     ================================================================
-      call teamqa( nutysu, airemx,
-     %             noarst, mosoar, mxsoar, n1soar, nosoar,
-     %             moartr, mxartr, n1artr, noartr,
-     %             mxarcf, notrcf, nostbo,
-     %             n1arcf, noarcf, larmin,
-     %             nbarpi, nbsomm, mxsomm, pxyd, nslign,
-     %             ierr )
-      call qualitetrte( pxyd,   mosoar, mxsoar, nosoar,
-     %                  moartr, mxartr, noartr,
-     %                  nbtria, quamoy, quamin )
-      if( ierr .ne. 0 ) goto 9999
-c
- 9999 return
-      end
-
-      subroutine trfrcf( nscent, mosoar, nosoar, moartr, noartr,
-     %                   nbtrcf, notrcf, nbarfr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    calculer le nombre d'aretes simples du contour ferme des
-c -----    nbtrcf triangles de numeros stockes dans le tableau notrcf
-c          ayant tous le sommet nscent
-c
-c entrees:
-c --------
-c nscent : numero du sommet appartenant a tous les triangles notrcf
-c mosoar : nombre maximal d'entiers par arete et
-c          indice dans nosoar de l'arete suivante dans le hachage
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c nbtrcf : >0 nombre de triangles empiles
-c          =0       si impossible de tourner autour du point
-c          =-nbtrcf si apres butee sur la frontiere il y a a nouveau
-c          butee sur la frontiere . a ce stade on ne peut dire si tous
-c          les triangles ayant ce sommet ont ete recenses
-c          ce cas arrive seulement si le sommet est sur la frontiere
-c notrcf : numero dans noartr des triangles de sommet ns
-c
-c sortie :
-c --------
-c nbarfr : nombre d'aretes simples frontalieres
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       juin 1997
-c....................................................................012
-      integer           noartr(moartr,*),
-     %                  nosoar(mosoar,*),
-     %                  notrcf(1:nbtrcf)
-c
-      nbarfr = 0
-      do 50 n=1,nbtrcf
-c        le numero du triangle n dans le tableau noartr
-         nt = notrcf( n )
-c        parcours des 3 aretes du triangle nt
-         do 40 i=1,3
-c           le numero de l'arete i dans le tableau nosoar
-            noar = abs( noartr( i, nt ) )
-            do 30 j=1,2
-c              le numero du sommet j de l'arete noar
-               ns = nosoar( j, noar )
-               if( ns .eq. nscent ) goto 40
- 30         continue
-c           l'arete noar (sans sommet nscent) est elle frontaliere?
-            if( nosoar( 5, noar ) .le. 0 ) then
-c              l'arete appartient au plus a un triangle
-c              une arete simple frontaliere de plus
-               nbarfr = nbarfr + 1
-            endif
-c           le triangle a au plus une arete sans sommet nscent
-            goto 50
- 40      continue
- 50   continue
-      end
-
-      subroutine int2ar( p1, p2, p3, p4, oui )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    les 2 aretes de r**2 p1-p2  p3-p4 s'intersectent elles
-c -----    entre leurs sommets?
-c
-c entrees:
-c --------
-c p1,p2,p3,p4 : les 2 coordonnees reelles des sommets des 2 aretes
-c
-c sortie :
-c --------
-c oui    : .true. si intersection, .false. sinon
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc    octobre 1991
-c2345x7..............................................................012
-      double precision  p1(2),p2(2),p3(2),p4(2)
-      double precision  x21,y21,d21,x43,y43,d43,d,x,y,xx
-      logical  oui
-c
-c     longueur des aretes
-      x21 = p2(1)-p1(1)
-      y21 = p2(2)-p1(2)
-      d21 = x21**2 + y21**2
-c
-      x43 = p4(1)-p3(1)
-      y43 = p4(2)-p3(2)
-      d43 = x43**2 + y43**2
-c
-c     les 2 aretes sont-elles jugees paralleles ?
-      d = x43 * y21 - y43 * x21
-      if( abs(d) .le. 0.001 * sqrt(d21 * d43) ) then
-c        aretes paralleles . pas d'intersection
-         oui = .false.
-         return
-      endif
-c
-c     les 2 coordonnees du point d'intersection
-      x = ( p1(1)*x43*y21 - p3(1)*x21*y43 - (p1(2)-p3(2))*x21*x43 ) / d
-      y =-( p1(2)*y43*x21 - p3(2)*y21*x43 - (p1(1)-p3(1))*y21*y43 ) / d
-c
-c     coordonnees de x,y dans le repere ns1-ns2
-      xx  = ( x - p1(1) ) * x21 + ( y - p1(2) ) * y21
-c     le point est il entre p1 et p2 ?
-      oui = -0.00001d0*d21 .le. xx .and. xx .le. 1.00001d0*d21
-c
-c     coordonnees de x,y dans le repere ns3-ns4
-      xx  = ( x - p3(1) ) * x43 + ( y - p3(2) ) * y43
-c     le point est il entre p3 et p4 ?
-      oui = oui .and. -0.00001d0*d43 .le. xx .and. xx .le. 1.00001d0*d43
-      end
-
-
-      subroutine trchtd( pxyd,   nar00, nar0,  noarcf,
-     %                   namin0, namin, larmin )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    recherche dans le contour ferme du sommet qui joint a la plus
-c -----    courte arete nar00 donne le triangle sans intersection
-c          avec le contour ferme de meilleure qualite
-c
-c entrees:
-c --------
-c pxyd   : tableau des coordonnees des sommets et distance_souhaitee
-c
-c entrees et sorties:
-c -------------------
-c nar00  : numero dans noarcf de l'arete avant nar0
-c nar0   : numero dans noarcf de la plus petite arete du contour ferme
-c          a joindre a noarcf(1,namin) pour former le triangle ideal
-c noarcf : numero du sommet , numero de l'arete suivante
-c          numero du triangle exterieur a l'etoile
-c
-c sortie :
-c --------
-c namin0 : numero dans noarcf de l'arete avant namin
-c namin  : numero dans noarcf du sommet choisi
-c          0 si contour ferme reduit a moins de 3 aretes
-c larmin : tableau auxiliaire pour stocker la liste des numeros des
-c          aretes de meilleure qualite pour faire le choix final
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc    fevrier 1992
-c2345x7..............................................................012
-      double precision dmaxim, precision
-      parameter        (dmaxim=1.7d+308, precision=1d-16)
-c     ATTENTION:variables a ajuster selon la machine!
-c     ATTENTION:dmaxim : le plus grand reel machine
-c     ATTENTION:sur dec-alpha la precision est de 10**-14 seulement
-
-      common / unites / lecteu,imprim,nunite(30)
-      double precision  pxyd(1:3,1:*)
-      integer           noarcf(1:3,1:*),
-     %                  larmin(1:*)
-      double precision  q, dd, dmima,
-     %                  unpeps, rayon, surtd2
-      logical           oui
-      double precision  centre(3)
-c
-c     initialisations
-c     dmaxim : le plus grand reel machine
-      unpeps = 1d0 + 100d0 * precision
-c
-c     recherche de la plus courte arete du contour ferme
-      nbmin = 0
-      na00  = nar00
-      dmima = dmaxim
-      nbar  = 0
-c
- 2    na0  = noarcf( 2, na00 )
-      na1  = noarcf( 2, na0  )
-      nbar = nbar + 1
-c     les 2 sommets de l'arete na0 du cf
-      ns1  = noarcf( 1, na0 )
-      ns2  = noarcf( 1, na1 )
-      dd   = (pxyd(1,ns2)-pxyd(1,ns1))**2 + (pxyd(2,ns2)-pxyd(2,ns1))**2
-      if( dd .lt. dmima ) then
-         dmima = dd
-         larmin(1) = na00
-      endif
-      na00 = na0
-      if( na00 .ne. nar00 ) then
-c        derniere arete non atteinte
-         goto 2
-      endif
-c
-      if( nbar .eq. 3 ) then
-c
-c        contour ferme reduit a un triangle
-c        ----------------------------------
-         namin  = nar00
-         nar0   = noarcf( 2, nar00 )
-         namin0 = noarcf( 2, nar0  )
-         return
-c
-      else if( nbar .le. 2 ) then
-         write(imprim,*) 'erreur trchtd: cf<3 aretes'
-         namin  = 0
-         namin0 = 0
-         return
-      endif
-c
-c     cf non reduit a un triangle
-c     la plus petite arete est nar0 dans noarcf
-      nar00 = larmin( 1 )
-      nar0  = noarcf( 2, nar00 )
-      nar   = noarcf( 2, nar0  )
-c
-      ns1   = noarcf( 1, nar0 )
-      ns2   = noarcf( 1, nar  )
-c
-c     recherche dans cette etoile du sommet offrant la meilleure qualite
-c     du triangle ns1-ns2 ns3 sans intersection avec le contour ferme
-c     ==================================================================
-      nar3  = nar
-      qmima = -1
-c
-c     parcours des sommets possibles ns3
- 10   nar3  = noarcf( 2, nar3 )
-      if( nar3 .ne. nar0 ) then
-c
-c        il existe un sommet ns3 different de ns1 et ns2
-         ns3 = noarcf( 1, nar3 )
-c
-c        les aretes ns1-ns3 et ns2-ns3 intersectent-elles une arete
-c        du contour ferme ?
-c        ----------------------------------------------------------
-c        intersection de l'arete ns2-ns3 et des aretes du cf
-c        jusqu'au sommet ns3
-         nar1 = noarcf( 2, nar )
-c
- 15      if( nar1 .ne. nar3 .and. noarcf( 2, nar1 ) .ne. nar3 ) then
-c           l'arete suivante
-            nar2 = noarcf( 2, nar1 )
-c           le numero des 2 sommets de l'arete
-            np1  = noarcf( 1, nar1 )
-            np2  = noarcf( 1, nar2 )
-            call int2ar( pxyd(1,ns2), pxyd(1,ns3),
-     %                   pxyd(1,np1), pxyd(1,np2), oui )
-            if( oui ) goto 10
-c           les 2 aretes ne s'intersectent pas entre leurs sommets
-            nar1 = nar2
-            goto 15
-         endif
-c
-c        intersection de l'arete ns3-ns1 et des aretes du cf
-c        jusqu'au sommet de l'arete nar0
-         nar1 = noarcf( 2, nar3 )
-c
- 18      if( nar1 .ne. nar0 .and. noarcf( 2, nar1 ) .ne. nar0 ) then
-c           l'arete suivante
-            nar2 = noarcf( 2, nar1 )
-c           le numero des 2 sommets de l'arete
-            np1  = noarcf( 1, nar1 )
-            np2  = noarcf( 1, nar2 )
-            call int2ar( pxyd(1,ns1), pxyd(1,ns3),
-     %                   pxyd(1,np1), pxyd(1,np2), oui )
-            if( oui ) goto 10
-c           les 2 aretes ne s'intersectent pas entre leurs sommets
-            nar1 = nar2
-            goto 18
-         endif
-c
-c        le triangle ns1-ns2-ns3 n'intersecte pas une arete du contour ferme
-c        le calcul de la surface du triangle
-         dd = surtd2( pxyd(1,ns1), pxyd(1,ns2), pxyd(1,ns3) )
-         if( dd .le. 0d0 ) then
-c           surface negative => triangle a rejeter
-            q = 0
-         else
-c           calcul de la qualite du  triangle  ns1-ns2-ns3
-            call qutr2d( pxyd(1,ns1), pxyd(1,ns2), pxyd(1,ns3), q )
-         endif
-c
-         if( q .ge. qmima*1.00001 ) then
-c           q est un vrai maximum de la qualite
-            qmima = q
-            nbmin = 1
-            larmin(1) = nar3
-         else if( q .ge. qmima*0.999998 ) then
-c           q est voisin de qmima
-c           il est empile
-            nbmin = nbmin + 1
-            larmin( nbmin ) = nar3
-         endif
-         goto 10
-      endif
-c
-c     bilan : existe t il plusieurs sommets de meme qualite?
-c     ======================================================
-      if( nbmin .gt. 1 ) then
-c
-c        oui:recherche de ceux de cercle ne contenant pas d'autres sommets
-         do 80 i=1,nbmin
-c           le sommet
-            nar = larmin( i )
-            if( nar .le. 0 ) goto 80
-            ns3 = noarcf(1,nar)
-c           les coordonnees du centre du cercle circonscrit
-c           et son rayon
-            ier = -1
-            call cenced( pxyd(1,ns1), pxyd(1,ns2), pxyd(1,ns3),
-     %                   centre, ier )
-            if( ier .ne. 0 ) then
-c              le sommet ns3 ne convient pas
-               larmin( i ) = 0
-               goto 80
-            endif
-            rayon = centre(3) * unpeps
-            do 70 j=1,nbmin
-               if( j .ne. i ) then
-c                 l'autre sommet
-                  nar1 = larmin(j)
-                  if( nar1 .le. 0 ) goto 70
-                  ns4 = noarcf(1,nar1)
-c                 appartient t il au cercle ns1 ns2 ns3 ?
-                  dd = (centre(1)-pxyd(1,ns4))**2 +
-     %                 (centre(2)-pxyd(2,ns4))**2
-                  if( dd .le. rayon ) then
-c                    ns4 est dans le cercle circonscrit  ns1 ns2 ns3
-c                    le sommet ns3 ne convient pas
-                     larmin( i ) = 0
-                     goto 80
-                  endif
-               endif
- 70         continue
- 80      continue
-c
-c        existe t il plusieurs sommets ?
-         j = 0
-         do 90 i=1,nbmin
-            if( larmin( i ) .gt. 0 ) then
-c              compactage des min
-               j = j + 1
-               larmin(j) = larmin(i)
-            endif
- 90      continue
-c
-         if( j .gt. 1 ) then
-c           oui : choix du plus petit rayon de cercle circonscrit
-            dmima = dmaxim
-            do 120 i=1,nbmin
-               ns3 = noarcf(1,larmin(i))
-c
-c              les coordonnees du centre de cercle circonscrit
-c              au triangle nt et son rayon
-               ier = -1
-               call cenced( pxyd(1,ns1), pxyd(1,ns2), pxyd(1,ns3),
-     %                      centre, ier )
-               if( ier .ne. 0 ) then
-c                 le sommet ns3 ne convient pas
-                  goto 120
-               endif
-               rayon = sqrt( centre(3) )
-               if( rayon .lt. dmima ) then
-                  dmima = rayon
-                  larmin(1) = larmin(i)
-               endif
- 120        continue
-         endif
-      endif
-c
-c     le choix final
-c     ==============
-      namin = larmin(1)
-c
-c     recherche de l'arete avant namin ( nar0 <> namin )
-c     ==================================================
-      nar1 = nar0
- 200  if( nar1 .ne. namin ) then
-         namin0 = nar1
-         nar1   = noarcf( 2, nar1 )
-         goto 200
-      endif
-      end
-
-      subroutine trcf0a( nbcf,   na01,   na1, na2, na3,
-     %                   noar1,  noar2,  noar3,
-     %                   mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, n1artr, noartr, noarst,
-     %                   mxarcf, n1arcf, noarcf, nt )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    modification de la triangulation du contour ferme nbcf
-c -----    par ajout d'un triangle ayant 0 arete sur le contour
-c          creation des 3 aretes dans le tableau nosoar
-c          modification du contour par ajout de la 3-eme arete
-c          creation d'un contour ferme a partir de la seconde arete
-c
-c entrees:
-c --------
-c nbcf    : numero dans n1arcf du cf traite ici
-c na01    : numero noarcf de l'arete precedent l'arete na1 de noarcf
-c na1     : numero noarcf du 1-er sommet du triangle
-c           implicitement l'arete na1 n'est pas une arete du triangle
-c na2     : numero noarcf du 2-eme sommet du triangle
-c           implicitement l'arete na1 n'est pas une arete du triangle
-c na3     : numero noarcf du 3-eme sommet du triangle
-c           implicitement l'arete na1 n'est pas une arete du triangle
-c
-c mosoar : nombre maximal d'entiers par arete et
-c          indice dans nosoar de l'arete suivante dans le hachage
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c          attention: mxsoar>3*mxsomm obligatoire!
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c
-c entrees et sorties :
-c --------------------
-c n1soar : numero de la premiere arete vide dans le tableau nosoar
-c          une arete i de nosoar est vide  <=>  nosoar(1,i)=0
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c          hachage des aretes = nosoar(1)+nosoar(2)*2
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c
-c noarst : noarst(i) numero d'une arete de sommet i
-c n1arcf : numero d'une arete de chaque contour
-c noarcf : numero des aretes de la ligne du contour ferme
-c          attention : chainage circulaire des aretes
-c
-c sortie :
-c --------
-c noar1  : numero dans le tableau nosoar de l'arete 1 du triangle
-c noar2  : numero dans le tableau nosoar de l'arete 2 du triangle
-c noar3  : numero dans le tableau nosoar de l'arete 3 du triangle
-c nt     : numero du triangle ajoute dans noartr
-c          0 si saturation du tableau noartr ou noarcf ou n1arcf
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c2345x7..............................................................012
-      common / unites / lecteu, imprim, nunite(30)
-      integer           nosoar(mosoar,*),
-     %                  noartr(moartr,*),
-     %                  noarst(*),
-     %                  n1arcf(0:*),
-     %                  noarcf(3,*)
-c
-      ierr = 0
-c
-c     2 contours fermes peuvent ils etre ajoutes ?
-      if( nbcf+2 .gt. mxarcf ) goto 9100
-c
-c     creation des 3 aretes du triangle dans le tableau nosoar
-c     ========================================================
-c     la formation de l'arete sommet1-sommet2 dans le tableau nosoar
-      call fasoar( noarcf(1,na1), noarcf(1,na2), -1, -1,  0,
-     %             mosoar, mxsoar, n1soar, nosoar, noarst,
-     %             noar1,  ierr )
-      if( ierr .ne. 0 ) goto 9900
-c
-c     la formation de l'arete sommet2-sommet3 dans le tableau nosoar
-      call fasoar( noarcf(1,na2), noarcf(1,na3), -1, -1,  0,
-     %             mosoar, mxsoar, n1soar, nosoar, noarst,
-     %             noar2,  ierr )
-      if( ierr .ne. 0 ) goto 9900
-c
-c     la formation de l'arete sommet3-sommet1 dans le tableau nosoar
-      call fasoar( noarcf(1,na3), noarcf(1,na1), -1, -1,  0,
-     %             mosoar, mxsoar, n1soar, nosoar, noarst,
-     %             noar3,  ierr )
-      if( ierr .ne. 0 ) goto 9900
-c
-c     ajout dans noartr de ce triangle nt
-c     ===================================
-      call trcf3a( noarcf(1,na1),  noarcf(1,na2), noarcf(1,na3),
-     %             noar1,  noar2,  noar3,
-     %             mosoar, nosoar,
-     %             moartr, n1artr, noartr,
-     %             nt )
-      if( nt .le. 0 ) return
-c
-c     modification du contour nbcf existant
-c     chainage de l'arete na2 vers l'arete na1
-c     ========================================
-c     modification du cf en pointant na2 sur na1
-      na2s = noarcf( 2, na2 )
-      noarcf( 2, na2 ) = na1
-c     le numero de l'arete dans le tableau nosoar
-      noar2s = noarcf( 3, na2 )
-c     le numero de l'arete dans le tableau nosoar
-      noarcf( 3, na2 ) = noar1
-c     debut du cf
-      n1arcf( nbcf ) = na2
-c
-c     creation d'un nouveau contour ferme na2 - na3
-c     =============================================
-      nbcf = nbcf + 1
-c     recherche d'une arete de cf vide
-      nav = n1arcf(0)
-      if( nav .le. 0 ) goto 9100
-c     la 1-ere arete vide est mise a jour
-      n1arcf(0) = noarcf( 2, nav )
-c
-c     ajout de l'arete nav pointant sur na2s
-c     le numero du sommet
-      noarcf( 1, nav ) = noarcf( 1, na2 )
-c     l'arete suivante
-      noarcf( 2, nav ) = na2s
-c     le numero nosoar de cette arete
-      noarcf( 3, nav ) = noar2s
-c
-c     l'arete na3 se referme sur nav
-      na3s = noarcf( 2, na3 )
-      noarcf( 2, na3 ) = nav
-c     le numero de l'arete dans le tableau nosoar
-      noar3s = noarcf( 3, na3 )
-      noarcf( 3, na3 ) = noar2
-c     debut du cf+1
-      n1arcf( nbcf ) = na3
-c
-c     creation d'un nouveau contour ferme na3 - na1
-c     =============================================
-      nbcf = nbcf + 1
-c     recherche d'une arete de cf vide
-      nav = n1arcf(0)
-      if( nav .le. 0 ) goto 9100
-c     la 1-ere arete vide est mise a jour
-      n1arcf(0) = noarcf( 2, nav )
-c
-c     ajout de l'arete nav pointant sur na3s
-c     le numero du sommet
-      noarcf( 1, nav ) = noarcf( 1, na3 )
-c     l'arete suivante
-      noarcf( 2, nav ) = na3s
-c     le numero de l'arete dans le tableau nosoar
-      noarcf( 3, nav ) = noar3s
-c
-c     recherche d'une arete de cf vide
-      nav1 = n1arcf(0)
-      if( nav1 .le. 0 ) goto 9100
-c     la 1-ere arete vide est mise a jour
-      n1arcf(0) = noarcf( 2, nav1 )
-c
-c     l'arete precedente na01 de na1 pointe sur la nouvelle nav1
-      noarcf( 2, na01 ) = nav1
-c
-c     ajout de l'arete nav1 pointant sur nav
-c     le numero du sommet
-      noarcf( 1, nav1 ) = noarcf( 1, na1 )
-c     l'arete suivante
-      noarcf( 2, nav1 ) = nav
-c     le numero de l'arete dans le tableau nosoar
-      noarcf( 3, nav1 ) = noar3
-c
-c     debut du cf+2
-      n1arcf( nbcf ) = nav1
-      return
-c
-c     erreur
- 9100 write(imprim,*) 'saturation du tableau mxarcf'
-      nt = 0
-      return
-c
-c     erreur tableau nosoar sature
- 9900 write(imprim,*) 'saturation du tableau nosoar'
-      nt = 0
-      return
-      end
-
-
-      subroutine trcf1a( nbcf,   na01,   na1,    na2, noar1, noar3,
-     %                   mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, n1artr, noartr, noarst,
-     %                   mxarcf, n1arcf, noarcf, nt )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    modification de la triangulation du contour ferme nbcf
-c -----    par ajout d'un triangle ayant 1 arete sur le contour
-c          modification du contour par ajout de la 3-eme arete
-c          creation d'un contour ferme a partir de la seconde arete
-c
-c entrees:
-c --------
-c nbcf    : numero dans n1arcf du cf traite ici
-c na01    : numero noarcf de l'arete precedant l'arete na1 de noarcf
-c na1     : numero noarcf du 1-er sommet du triangle
-c           implicitement l'arete na1 n'est pas une arete du triangle
-c na2     : numero noarcf du 2-eme sommet du triangle
-c           cette arete est l'arete 2 du triangle a ajouter
-c           son arete suivante dans noarcf n'est pas sur le contour
-c mosoar : nombre maximal d'entiers par arete et
-c          indice dans nosoar de l'arete suivante dans le hachage
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c          attention: mxsoar>3*mxsomm obligatoire!
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c
-c entrees et sorties :
-c --------------------
-c n1soar : numero de la premiere arete vide dans le tableau nosoar
-c          une arete i de nosoar est vide  <=>  nosoar(1,i)=0
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c          hachage des aretes = nosoar(1)+nosoar(2)*2
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c
-c noarst : noarst(i) numero d'une arete de sommet i
-c n1arcf : numero d'une arete de chaque contour
-c noarcf : numero des aretes de la ligne du contour ferme
-c          attention : chainage circulaire des aretes
-c
-c sortie :
-c --------
-c noar1  : numero nosoar de l'arete 1 du triangle cree
-c noar3  : numero nosoar de l'arete 3 du triangle cree
-c nt     : numero du triangle ajoute dans notria
-c          0 si saturation du tableau notria ou noarcf ou n1arcf
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c2345x7..............................................................012
-      common / unites / lecteu, imprim, nunite(30)
-      integer           nosoar(mosoar,mxsoar),
-     %                  noartr(moartr,*),
-     %                  noarst(*),
-     %                  n1arcf(0:*),
-     %                  noarcf(3,*)
-c
-c     un cf supplementaire peut il etre ajoute ?
-      if( nbcf .ge. mxarcf ) then
-         write(imprim,*) 'saturation du tableau noarcf'
-         nt = 0
-         return
-      endif
-c
-      ierr = 0
-c
-c     l' arete suivante du triangle non sur le cf
-      na3 = noarcf( 2, na2 )
-c
-c     creation des 2 nouvelles aretes du triangle dans le tableau nosoar
-c     ==================================================================
-c     la formation de l'arete sommet1-sommet2 dans le tableau nosoar
-      call fasoar( noarcf(1,na1), noarcf(1,na2), -1, -1,  0,
-     %             mosoar, mxsoar, n1soar, nosoar, noarst,
-     %             noar1,  ierr )
-      if( ierr .ne. 0 ) goto 9900
-c
-c     la formation de l'arete sommet1-sommet3 dans le tableau nosoar
-      call fasoar( noarcf(1,na3), noarcf(1,na1), -1, -1,  0,
-     %             mosoar, mxsoar, n1soar, nosoar, noarst,
-     %             noar3,  ierr )
-      if( ierr .ne. 0 ) goto 9900
-c
-c     le triangle nt de noartr a l'arete 2 comme arete du contour na2
-c     ===============================================================
-      call trcf3a( noarcf(1,na1), noarcf(1,na2), noarcf(1,na3),
-     %             noar1, noarcf(3,na2), noar3,
-     %             mosoar, nosoar,
-     %             moartr, n1artr, noartr,
-     %             nt )
-      if( nt .le. 0 ) return
-c
-c     modification du contour ferme existant
-c     suppression de l'arete na2 du cf
-c     ======================================
-c     modification du cf en pointant na2 sur na1
-      noarcf( 2, na2 ) = na1
-      noarcf( 3, na2 ) = noar1
-c     debut du cf
-      n1arcf( nbcf ) = na2
-c
-c     creation d'un nouveau contour ferme na3 - na1
-c     =============================================
-      nbcf = nbcf + 1
-c
-c     recherche d'une arete de cf vide
-      nav = n1arcf(0)
-      if( nav .le. 0 ) then
-         write(imprim,*) 'saturation du tableau noarcf'
-         nt = 0
-         return
-      endif
-c
-c     la 1-ere arete vide est mise a jour
-      n1arcf(0) = noarcf( 2, nav )
-c
-c     ajout de l'arete nav pointant sur na3
-c     le numero du sommet
-      noarcf( 1, nav ) = noarcf( 1, na1 )
-c     l'arete suivante
-      noarcf( 2, nav ) = na3
-c     le numero de l'arete dans le tableau nosoar
-      noarcf( 3, nav ) = noar3
-c
-c     l'arete precedente na01 de na1 pointe sur la nouvelle nav
-      noarcf( 2, na01 ) = nav
-c
-c     debut du cf
-      n1arcf( nbcf ) = nav
-      return
-c
-c     erreur tableau nosoar sature
- 9900 write(imprim,*) 'saturation du tableau nosoar'
-      nt = 0
-      return
-      end
-
-
-      subroutine trcf2a( nbcf,   na1,    noar3,
-     %                   mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, n1artr, noartr, noarst,
-     %                   n1arcf, noarcf, nt )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    modification de la triangulation du contour ferme nbcf
-c -----    par ajout d'un triangle ayant 2 aretes sur le contour
-c          creation d'une arete dans nosoar (sommet3-sommet1)
-c          et modification du contour par ajout de la 3-eme arete
-c
-c entrees:
-c --------
-c nbcf   : numero dans n1arcf du cf traite ici
-c na1    : numero noarcf de la premiere arete sur le contour
-c          implicitement sa suivante est sur le contour
-c          la suivante de la suivante n'est pas sur le contour
-c mosoar : nombre maximal d'entiers par arete et
-c          indice dans nosoar de l'arete suivante dans le hachage
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c          attention: mxsoar>3*mxsomm obligatoire!
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c
-c entrees et sorties :
-c --------------------
-c n1soar : numero de la premiere arete vide dans le tableau nosoar
-c          une arete i de nosoar est vide  <=>  nosoar(1,i)=0
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c          hachage des aretes = nosoar(1)+nosoar(2)*2
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c
-c noarst : noarst(i) numero d'une arete de sommet i
-c n1arcf : numero d'une arete de chaque contour
-c noarcf : numero des aretes de la ligne du contour ferme
-c          attention : chainage circulaire des aretes
-c
-c sortie :
-c --------
-c noar3  : numero de l'arete 3 dans le tableau nosoar
-c nt     : numero du triangle ajoute dans noartr
-c          0 si saturation du tableau noartr ou nosoar
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c2345x7..............................................................012
-      common / unites / lecteu, imprim, nunite(30)
-      integer           nosoar(mosoar,*),
-     %                  noartr(moartr,*),
-     %                  noarst(*)
-      integer           n1arcf(0:*),
-     %                  noarcf(3,*)
-c
-      ierr = 0
-c
-c     l'arete suivante de l'arete na1 dans noarcf
-      na2 = noarcf( 2, na1 )
-c     l'arete suivante de l'arete na2 dans noarcf
-      na3 = noarcf( 2, na2 )
-c
-c     la formation de l'arete sommet3-sommet1 dans le tableau nosoar
-      call fasoar( noarcf(1,na3), noarcf(1,na1), -1, -1,  0,
-     %             mosoar, mxsoar, n1soar, nosoar, noarst,
-     %             noar3,  ierr )
-      if( ierr .ne. 0 ) then
-         if( ierr .eq. 1 ) then
-            write(imprim,*) 'saturation des aretes (tableau nosoar)'
-         endif
-         nt = 0
-         return
-      endif
-c
-c     le triangle a ses 2 aretes na1 na2 sur le contour ferme
-c     ajout dans noartr de ce triangle nt
-      call trcf3a( noarcf(1,na1), noarcf(1,na2), noarcf(1,na3),
-     %             noarcf(3,na1), noarcf(3,na2), noar3,
-     %             mosoar, nosoar,
-     %             moartr, n1artr, noartr,
-     %             nt )
-      if( nt .le. 0 ) return
-c
-c     suppression des 2 aretes (na1 na2) du cf
-c     ces 2 aretes se suivent dans le chainage du cf
-c     ajout de la 3-eme arete  (noar3) dans le cf
-c     l'arete suivante de na1 devient la suivante de na2
-      noarcf(2,na1) = na3
-      noarcf(3,na1) = noar3
-c
-c     l'arete na2 devient vide dans noarcf
-      noarcf(2,na2) = n1arcf( 0 )
-      n1arcf( 0 )   = na2
-c
-c     la premiere pointee dans noarcf est na1
-c     chainage circulaire => ce peut etre n'importe laquelle
-      n1arcf(nbcf) = na1
-      end
-
-
-      subroutine trcf3a( ns1,    ns2,    ns3,
-     %                   noar1,  noar2,  noar3,
-     %                   mosoar, nosoar,
-     %                   moartr, n1artr, noartr,
-     %                   nt )
-c++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    ajouter dans le tableau noartr le triangle
-c -----    de sommets ns1   ns2   ns3
-c          d'aretes   noar1 noar2 noar3 deja existantes
-c                     dans le tableau nosoar des aretes
-c
-c entrees:
-c --------
-c ns1,  ns2,  ns3   : le numero dans pxyd   des 3 sommets du triangle
-c noar1,noar2,noar3 : le numero dans nosoar des 3 aretes  du triangle
-c mosoar : nombre maximal d'entiers par arete et
-c          indice dans nosoar de l'arete suivante dans le hachage
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c          attention: mxsoar>3*mxsomm obligatoire!
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c mxartr : nombre maximal de triangles stockables dans le tableau noartr
-c
-c modifies :
-c ----------
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c          hachage des aretes = nosoar(1)+nosoar(2)*2
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c
-c sorties:
-c --------
-c nt     : numero dans noartr du triangle ajoute
-c          =0 si le tableau noartr est sature
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c....................................................................012
-      common / unites / lecteu,imprim,nunite(30)
-      integer           nosoar(mosoar,*),
-     %                  noartr(moartr,*)
-c
-c     recherche d'un triangle libre dans le tableau noartr
-      if( n1artr .le. 0 ) then
-         write(imprim,*) 'saturation du tableau noartr des aretes'
-         nt = 0
-         return
-      endif
-c
-c     le numero dans noartr du nouveau triangle
-      nt = n1artr
-c
-c     le nouveau premier triangle vide dans le tableau noartr
-      n1artr = noartr(2,n1artr)
-c
-c     arete 1 du triangle nt
-c     ======================
-c     orientation des 3 aretes du triangle pour qu'il soit direct
-      if( ns1 .eq. nosoar(1,noar1) ) then
-         n =  1
-      else
-         n = -1
-      endif
-c     le numero de l'arete 1 du triangle nt
-      noartr(1,nt) = n * noar1
-c
-c     le numero du triangle nt pour l'arete
-      if( nosoar(4,noar1) .le. 0 ) then
-         n = 4
-      else
-         n = 5
-      endif
-      nosoar(n,noar1) = nt
-c
-c     arete 2 du triangle nt
-c     ======================
-c     orientation des 3 aretes du triangle pour qu'il soit direct
-      if( ns2 .eq. nosoar(1,noar2) ) then
-         n =  1
-      else
-         n = -1
-      endif
-c     le numero de l'arete 2 du triangle nt
-      noartr(2,nt) = n * noar2
-c
-c     le numero du triangle nt pour l'arete
-      if( nosoar(4,noar2) .le. 0 ) then
-         n = 4
-      else
-         n = 5
-      endif
-      nosoar(n,noar2) = nt
-c
-c     arete 3 du triangle nt
-c     ======================
-c     orientation des 3 aretes du triangle pour qu'il soit direct
-      if( ns3 .eq. nosoar(1,noar3) ) then
-         n =  1
-      else
-         n = -1
-      endif
-c     le numero de l'arete 3 du triangle nt
-      noartr(3,nt) = n * noar3
-c
-c     le numero du triangle nt pour l'arete
-      if( nosoar(4,noar3) .le. 0 ) then
-         n = 4
-      else
-         n = 5
-      endif
-      nosoar(n,noar3) = nt
-      end
-
-
-
-      subroutine trcf3s( nbcf,   na01,   na1,    na02,  na2, na03, na3,
-     %                   mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, n1artr, noartr, noarst,
-     %                   mxarcf, n1arcf, noarcf, nt )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :     ajout d'un triangle d'aretes na1 2 3 du tableau noarcf
-c -----     a la triangulation d'un contour ferme (cf)
-c
-c entrees:
-c --------
-c nbcf    : numero dans n1arcf du cf traite ici
-c           mais aussi nombre actuel de cf avant ajout du triangle
-c na01    : numero noarcf de l'arete precedent l'arete na1 de noarcf
-c na1     : numero noarcf du 1-er sommet du triangle
-c na02    : numero noarcf de l'arete precedent l'arete na2 de noarcf
-c na2     : numero noarcf du 2-eme sommet du triangle
-c na03    : numero noarcf de l'arete precedent l'arete na3 de noarcf
-c na3     : numero noarcf du 3-eme sommet du triangle
-c
-c mosoar : nombre maximal d'entiers par arete et
-c          indice dans nosoar de l'arete suivante dans le hachage
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c          attention: mxsoar>3*mxsomm obligatoire!
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c mxarcf : nombre maximal d'aretes declarables dans noarcf, n1arcf
-c
-c modifies:
-c ---------
-c n1soar : no de l'eventuelle premiere arete libre dans le tableau nosoar
-c          chainage des vides suivant en 3 et precedant en 2 de nosoar
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c          hachage des aretes = nosoar(1)+nosoar(2)*2
-c          avec mxsoar>=3*mxsomm
-c          une arete i de nosoar est vide <=> nosoar(1,i)=0 et
-c          nosoar(2,arete vide)=l'arete vide qui precede
-c          nosoar(3,arete vide)=l'arete vide qui suit
-c
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c noarst : noarst(i) numero d'une arete de sommet i
-c
-c n1arcf : numero d'une arete de chaque contour ferme
-c noarcf : numero du sommet , numero de l'arete suivante
-c          numero de l'arete dans le tableau nosoar
-c          attention : chainage circulaire des aretes
-c
-c sortie :
-c --------
-c nbcf   : nombre actuel de cf apres ajout du triangle
-c nt     : numero du triangle ajoute dans noartr
-c          0 si saturation du tableau nosoar ou noartr ou noarcf ou n1arcf
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c2345x7..............................................................012
-      integer        nosoar(mosoar,*),
-     %               noartr(moartr,*),
-     %               noarst(*),
-     %               n1arcf(0:mxarcf),
-     %               noarcf(3,mxarcf)
-c
-c     combien y a t il d'aretes nbascf sur le cf ?
-c     ============================================
-c     la premiere arete est elle sur le cf?
-      if( noarcf(2,na1) .eq. na2 ) then
-c        la 1-ere arete est sur le cf
-         na1cf  = 1
-      else
-c        la 1-ere arete n'est pas sur le cf
-         na1cf  = 0
-      endif
-c
-c     la seconde arete est elle sur le cf?
-      if( noarcf(2,na2) .eq. na3 ) then
-c        la 2-eme arete est sur le cf
-         na2cf = 1
-      else
-         na2cf = 0
-      endif
-c
-c     la troisieme arete est elle sur le cf?
-      if( noarcf(2,na3) .eq. na1 ) then
-c        la 3-eme arete est sur le cf
-         na3cf = 1
-      else
-         na3cf = 0
-      endif
-c
-c     le nombre d'aretes sur le cf
-      nbascf = na1cf + na2cf + na3cf
-c
-c     traitement selon le nombre d'aretes sur le cf
-c     =============================================
-      if( nbascf .eq. 3 ) then
-c
-c        le contour ferme se reduit a un triangle avec 3 aretes sur le cf
-c        ----------------------------------------------------------------
-c        ajout dans noartr de ce nouveau triangle
-         call trcf3a( noarcf(1,na1), noarcf(1,na2), noarcf(1,na3),
-     %                noarcf(3,na1), noarcf(3,na2), noarcf(3,na3),
-     %                mosoar, nosoar,
-     %                moartr, n1artr, noartr,
-     %                nt )
-         if( nt .le. 0 ) return
-c
-c        le cf est supprime et chaine vide
-         noarcf(2,na3) = n1arcf(0)
-         n1arcf( 0 )   = na1
-c
-c        ce cf a ete traite => un cf de moins a traiter
-         nbcf = nbcf - 1
-c
-      else if( nbascf .eq. 2 ) then
-c
-c        le triangle a 2 aretes sur le contour
-c        -------------------------------------
-c        les 2 aretes sont la 1-ere et 2-eme du triangle
-         if( na1cf .eq. 0 ) then
-c           l'arete 1 n'est pas sur le cf
-            naa1 = na2
-         else if( na2cf .eq. 0 ) then
-c           l'arete 2 n'est pas sur le cf
-            naa1 = na3
-         else
-c           l'arete 3 n'est pas sur le cf
-            naa1 = na1
-         endif
-c        le triangle oppose a l'arete 3 est inconnu
-c        modification du contour apres integration du
-c        triangle ayant ses 2-eres aretes sur le cf
-         call trcf2a( nbcf,   naa1,   naor3,
-     %                mosoar, mxsoar, n1soar, nosoar,
-     %                moartr, n1artr, noartr, noarst,
-     %                n1arcf, noarcf, nt )
-c
-      else if( nbascf .eq. 1 ) then
-c
-c        le triangle a 1 arete sur le contour
-c        ------------------------------------
-c        cette arete est la seconde du triangle
-         if( na3cf .ne. 0 ) then
-c           l'arete 3 est sur le cf
-            naa01 = na02
-            naa1  = na2
-            naa2  = na3
-         else if( na1cf .ne. 0 ) then
-c           l'arete 1 est sur le cf
-            naa01 = na03
-            naa1  = na3
-            naa2  = na1
-         else
-c           l'arete 2 est sur le cf
-            naa01 = na01
-            naa1  = na1
-            naa2  = na2
-         endif
-c        le triangle oppose a l'arete 1 et 3 est inconnu
-c        modification du contour apres integration du
-c        triangle ayant 1 arete sur le cf avec creation
-c        d'un nouveau contour ferme
-         call trcf1a( nbcf, naa01, naa1, naa2, naor1, naor3,
-     %                mosoar, mxsoar, n1soar, nosoar,
-     %                moartr, n1artr, noartr, noarst,
-     %                mxarcf, n1arcf, noarcf, nt )
-c
-      else
-c
-c        le triangle a 0 arete sur le contour
-c        ------------------------------------
-c        modification du contour apres integration du
-c        triangle ayant 0 arete sur le cf avec creation
-c        de 2 nouveaux contours fermes
-         call trcf0a( nbcf, na01,  na1, na2, na3,
-     %                naa1, naa2, naa01,
-     %                mosoar, mxsoar, n1soar, nosoar,
-     %                moartr, n1artr, noartr, noarst,
-     %                mxarcf, n1arcf, noarcf, nt )
-      endif
-      end
-
-
-      subroutine tridcf( nbcf0,  nbstpe, nostpe, pxyd,   noarst,
-     %                   mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, n1artr, noartr,
-     %                   mxarcf, n1arcf, noarcf, larmin,
-     %                   nbtrcf, notrcf, ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    triangulation directe de nbcf0 contours fermes (cf)
-c -----    definis par la liste circulaire de leurs aretes peripheriques
-c          avec integration de nbstpe sommets isoles a l'un des cf initiaux
-c
-c entrees:
-c --------
-c nbcf0  : nombre initial de cf a trianguler
-c nbstpe : nombre de sommets isoles a l'interieur des cf et
-c          a devenir sommets de la triangulation
-c nostpe : numero dans pxyd des nbstpe sommets isoles
-c pxyd   : tableau des coordonnees 2d des points
-c          par point : x  y  distance_souhaitee
-c mosoar : nombre maximal d'entiers par arete et
-c          indice dans nosoar de l'arete suivante dans le hachage
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c          attention: mxsoar>3*mxsomm obligatoire!
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c mxarcf  : nombre maximal d'aretes declarables dans noarcf, n1arcf, larmin, not
-c
-c modifies:
-c ---------
-c noarst : noarst(i) numero d'une arete de sommet i
-c n1soar : no de l'eventuelle premiere arete libre dans le tableau nosoar
-c          chainage des vides suivant en 3 et precedant en 2 de nosoar
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c          hachage des aretes = nosoar(1)+nosoar(2)*2
-c          avec mxsoar>=3*mxsomm
-c          une arete i de nosoar est vide <=> nosoar(1,i)=0 et
-c          nosoar(2,arete vide)=l'arete vide qui precede
-c          nosoar(3,arete vide)=l'arete vide qui suit
-c
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c
-c n1arcf : numero de la premiere arete de chacun des nbcf0 cf
-c          n1arcf(0)   no de la premiere arete vide du tableau noarcf
-c          noarcf(2,i) no de l'arete suivante
-c noarcf : numero du sommet , numero de l'arete suivante du cf
-c          numero de l'arete dans le tableau nosoar
-c
-c auxiliaires :
-c -------------
-c larmin : tableau (mxarcf)   auxiliaire
-c          stocker la liste des numeros des meilleures aretes
-c          lors de la selection du meilleur sommet du cf a trianguler
-c          cf le sp trchtd
-c
-c sortie :
-c --------
-c nbtrcf : nombre de  triangles des nbcf0 cf
-c notrcf : numero des triangles des nbcf0 cf dans le tableau noartr
-c ierr   : 0 si pas d'erreur
-c          2 saturation de l'un des des tableaux nosoar, noartr, ...
-c          3 si contour ferme reduit a moins de 3 aretes
-c          4 saturation du tableau notrcf
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc    mars    1997
-c modifs : alain perronnet laboratoire jl lions upmc paris  octobre 2006
-c....................................................................012
-      common / unites / lecteu, imprim, nunite(30)
-      double precision  pxyd(3,*)
-      integer           nostpe(nbstpe),
-     %                  noartr(moartr,*),
-     %                  nosoar(mosoar,mxsoar),
-     %                  noarst(*),
-     %                  n1arcf(0:mxarcf),
-     %                  noarcf(3,mxarcf),
-     %                  larmin(mxarcf),
-     %                  notrcf(mxarcf)
-c
-      integer           nosotr(3)
-      double precision  d, diptdr, surtd2, dmin, s
-c
-c     depart avec nbcf0 cf a trianguler
-      nbcf   = nbcf0
-c
-c     le nombre de triangles formes dans l'ensemble des cf
-      nbtrcf = 0
-c
-c     le nombre restant de sommets isoles a integrer au cf
-      nbstp = nbstpe
-c
- 1    if( nbstp .le. 0 ) goto 10
-c
-c     il existe au moins un sommet isole
-c     recherche d'un cf dont la premiere arete forme un triangle
-c     d'aire>0 avec un sommet isole et recherche du sommet isole
-c     le plus proche de cette arete
-c     ==========================================================
-      imin = 0
-      dmin = 1d123
-      do 6 ncf=1,nbcf
-c        le cf en haut de pile a pour arete avant la premiere arete
-         na1 = n1arcf( ncf )
-         na2 = na1
-c        recherche de l'arete qui precede la premiere arete
- 2       if( noarcf( 2, na2 ) .ne. na1 ) then
-            na2 = noarcf( 2, na2 )
-            goto 2
-         endif
-c        l'arete na0 dans noarcf qui precede n1arcf( ncf )
-         na0 = na2
-c        la premiere arete du cf
-         na1   = noarcf( 2, na0 )
-c        son numero dans nosoar
-         noar1 = noarcf( 3, na1 )
-c        l'arete suivante
-         na2   = noarcf( 2, na1 )
-c        le no pxyd des 2 sommets de l'arete na1
-         ns1   = noarcf( 1, na1 )
-         ns2   = noarcf( 1, na2  )
-         do 3 i=1,nbstpe
-c           le sommet isole ns3
-            ns3 = nostpe( i )
-            if( ns3 .le. 0 ) goto 3
-c           aire du triangle arete na1 et sommet ns3
-            d = surtd2( pxyd(1,ns1), pxyd(1,ns2), pxyd(1,ns3) )
-            if( d .gt. 0d0 ) then
-c              distance de ce sommet ns3 a l'arete na1
-               d = diptdr( pxyd(1,ns3),  pxyd(1,ns1), pxyd(1,ns2) )
-               if( d .lt. dmin ) then
-                  dmin = d
-                  imin = i
-               endif
-            endif
- 3       continue
-         if( imin .gt. 0 ) then
-c           le sommet imin de nostpe est a distance minimale de
-c           la premiere arete du cf de numero ncf
-c           la formation de l'arete ns2-ns3 dans le tableau nosoar
-            call fasoar( ns2, ns3, -1, -1,  0,
-     %                   mosoar, mxsoar, n1soar, nosoar, noarst,
-     %                   noar2,  ierr )
-            if( ierr .ne. 0 ) goto 9900
-c           la formation de l'arete ns3-ns1 dans le tableau nosoar
-            call fasoar( ns3, ns1, -1, -1,  0,
-     %                   mosoar, mxsoar, n1soar, nosoar, noarst,
-     %                   noar3,  ierr )
-            if( ierr .ne. 0 ) goto 9900
-c
-c           ajout dans noartr du triangle de sommets ns1 ns2 ns3
-c           et d'aretes na1, noar2, noar3 dans nosoar
-            call trcf3a( ns1,   ns2,   ns3,
-     %                   noar1, noar2, noar3,
-     %                   mosoar, nosoar,
-     %                   moartr, n1artr, noartr,
-     %                   nt )
-            s = surtd2( pxyd(1,ns1), pxyd(1,ns2), pxyd(1,ns3) )
-            if( s .le. 0 ) then
-               write(imprim,*)'tridcf: trcf3a produit tr',nt,' st',
-     %                         ns1,ns2,ns3
-               write(imprim,*)'tridcf: triangle AIRE<0'
-            endif
-            if( nt .le. 0 ) then
-               ierr = 7
-               return
-            endif
-            if( nbtrcf .ge. mxarcf ) then
-               write(imprim,*) 'saturation du tableau notrcf'
-               ierr = 8
-               return
-            endif
-            nbtrcf = nbtrcf + 1
-            notrcf( nbtrcf ) = nt
-c
-c           modification du cf. creation d'une arete dans noarcf
-            na12 = n1arcf(0)
-            if( na12 .le. 0 ) then
-               write(imprim,*) 'saturation du tableau noarcf'
-               ierr = 10
-               return
-            endif
-c           la 1-ere arete vide de noarcf est mise a jour
-            n1arcf(0) = noarcf( 2, na12 )
-c
-c           l'arete suivante de na0
-            noarcf( 1, na1 ) = ns1
-            noarcf( 2, na1 ) = na12
-            noarcf( 3, na1 ) = noar3
-c           l'arete suivante de na1
-            noarcf( 1, na12 ) = ns3
-            noarcf( 2, na12 ) = na2
-            noarcf( 3, na12 ) = noar2
-c
-c           un sommet isole traite
-            nbstp = nbstp - 1
-            nostpe( imin ) = - nostpe( imin )
-            goto 1
-         endif
-c
- 6    continue
-c
-      if( imin .eq. 0 ) then
-         write(imprim,*) 'tridcf: il reste',nbstp,
-     %                   ' sommets isoles non triangules'
-         write(imprim,*) 'ameliorer l''algorithme'
-ccc         pause
-         ierr = 9
-         return
-      endif
-c
-c     tant qu'il existe un cf a trianguler faire
-c     la triangulation directe du cf
-c     ==========================================
- 10   if( nbcf .gt. 0 ) then
-c
-c        le cf en haut de pile a pour premiere arete
-         na01 = n1arcf( nbcf )
-         na1  = noarcf( 2, na01 )
-c
-c        choix du sommet du cf a relier a l'arete na1
-c        --------------------------------------------
-         call trchtd( pxyd, na01, na1, noarcf,
-     %                na03, na3,  larmin )
-         if( na3 .eq. 0 ) then
-            ierr = 3
-            return
-         endif
-c
-c        l'arete suivante de na1
-         na02 = na1
-         na2  = noarcf( 2, na1 )
-c
-c        formation du triangle arete na1 - sommet noarcf(1,na3)
-c        ------------------------------------------------------
-         call trcf3s( nbcf,   na01, na1, na02, na2, na03, na3,
-     %                mosoar, mxsoar, n1soar, nosoar,
-     %                moartr, n1artr, noartr, noarst,
-     %                mxarcf, n1arcf, noarcf, nt )
-         if( nt .le. 0 ) then
-c           saturation du tableau noartr ou noarcf ou n1arcf
-            ierr = 2
-            return
-         endif
-         call nusotr( nt, mosoar, nosoar, moartr, noartr, nosotr)
-         s = surtd2( pxyd(1,nosotr(1)),
-     %               pxyd(1,nosotr(2)),
-     %               pxyd(1,nosotr(3)) )
-         if( s .le. 0 ) then
-            write(imprim,*)'tridcf: trcf3s produit tr',nt,' st',nosotr
-            write(imprim,*)'tridcf: triangle AIRE<0'
-         endif
-c
-c        ajout du triangle cree a sa pile
-         if( nbtrcf .ge. mxarcf ) then
-            write(imprim,*) 'saturation du tableau notrcf'
-            ierr = 4
-            return
-         endif
-         nbtrcf = nbtrcf + 1
-         notrcf( nbtrcf ) = nt
-         goto 10
-      endif
-c
-c     mise a jour du chainage des triangles des aretes
-c     ================================================
-      do 30 ntp0 = 1, nbtrcf
-c
-c        le numero du triangle ajoute dans le tableau noartr
-         nt0 = notrcf( ntp0 )
-c
-c        boucle sur les 3 aretes du triangle nt0
-         do 20 i=1,3
-c
-c           le numero de l'arete i du triangle dans le tableau nosoar
-            noar = abs( noartr(i,nt0) )
-c
-c           ce triangle est il deja chaine dans cette arete?
-            nt1 = nosoar(4,noar)
-            nt2 = nosoar(5,noar)
-            if( nt1 .eq. nt0 .or. nt2 .eq. nt0 ) goto 20
-c
-c           ajout de ce triangle nt0 a l'arete noar
-            if( nt1 .le. 0 ) then
-c               le triangle est ajoute a l'arete
-                nosoar( 4, noar ) = nt0
-            else if( nt2 .le. 0 ) then
-c               le triangle est ajoute a l'arete
-                nosoar( 5, noar ) = nt0
-            else
-c              l'arete appartient a 2 triangles differents de nt0
-c              anomalie. chainage des triangles des aretes defectueux
-c              a corriger
-               write(imprim,*) 'tridcf: erreur 1 arete dans 3 triangles'
-               write(imprim,*) 'tridcf: arete nosoar(',noar,')=',
-     %                          (nosoar(k,noar),k=1,mosoar)
-               call nusotr( nt0, mosoar, nosoar, moartr, noartr, nosotr)
-               write(imprim,*) 'tridcf: triangle nt0=',nt0,' st:',
-     %                          (nosotr(k),k=1,3)
-               call nusotr( nt1, mosoar, nosoar, moartr, noartr, nosotr)
-               write(imprim,*) 'tridcf: triangle nt1=',nt1,' st:',
-     %                          (nosotr(k),k=1,3)
-               call nusotr( nt2, mosoar, nosoar, moartr, noartr, nosotr)
-               write(imprim,*) 'tridcf: triangle nt2=',nt2,' st:',
-     %                          (nosotr(k),k=1,3)
-ccc               pause
-               ierr = 5
-               return
-            endif
-c
- 20      continue
-c
- 30   continue
-      return
-c
-c     erreur tableau nosoar sature
- 9900 write(imprim,*) 'saturation du tableau nosoar'
-      ierr = 6
-      return
-      end
-
-      subroutine te1stm( nsasup, nbarpi, pxyd,   noarst,
-     %                   mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, mxartr, n1artr, noartr,
-     %                   mxarcf, n1arcf, noarcf, larmin, notrcf, liarcf,
-     %                   ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    supprimer de la triangulation le sommet nsasup qui doit
-c -----    etre un sommet interne ("centre" d'une boule de triangles)
-c
-c          attention: le chainage lchain de nosoar devient celui des cf
-c
-c entrees:
-c --------
-c nsasup : numero dans le tableau pxyd du sommet a supprimer
-c nbarpi : numero du dernier sommet frontalier ou interne impose
-c pxyd   : tableau des coordonnees 2d des points
-c          par point : x  y  distance_souhaitee
-c mosoar : nombre maximal d'entiers par arete et
-c          indice dans nosoar de l'arete suivante dans le hachage
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c          attention: mxsoar>3*mxsomm obligatoire!
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c mxarcf : nombre de variables des tableaux n1arcf, noarcf, larmin, notrcf
-c
-c modifies:
-c ---------
-c noarst : noarst(i) numero d'une arete de sommet i
-c n1soar : no de l'eventuelle premiere arete libre dans le tableau nosoar
-c          chainage des vides suivant en 3 et precedant en 2 de nosoar
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c          hachage des aretes = nosoar(1)+nosoar(2)*2
-c          avec mxsoar>=3*mxsomm
-c          une arete i de nosoar est vide <=> nosoar(1,i)=0 et
-c          nosoar(2,arete vide)=l'arete vide qui precede
-c          nosoar(3,arete vide)=l'arete vide qui suit
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c
-c
-c auxiliaires :
-c -------------
-c n1arcf : tableau (0:mxarcf) auxiliaire d'entiers
-c noarcf : tableau (3,mxarcf) auxiliaire d'entiers
-c larmin : tableau ( mxarcf ) auxiliaire d'entiers
-c notrcf : tableau ( mxarcf ) auxiliaire d'entiers
-c liarcf : tableau ( mxarcf ) auxiliaire d'entiers
-c
-c sortie :
-c --------
-c ierr   : =0 si pas d'erreur
-c          -1 le sommet a supprimer n'est pas le centre d'une boule
-c             de triangles. il est suppose externe
-c             ou bien le sommet est centre d'un cf dont toutes les
-c             aretes sont frontalieres
-c             dans les 2 cas => retour sans modifs
-c          >0 si une erreur est survenue
-c          =11 algorithme defaillant
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c....................................................................012
-      parameter       ( lchain=6, mxstpe=512)
-      common / unites / lecteu,imprim,intera,nunite(29)
-      double precision  pxyd(3,*), s0, s1, surtd2, s
-      integer           nosoar(mosoar,mxsoar),
-     %                  noartr(moartr,mxartr),
-     %                  noarst(*),
-     %                  n1arcf(0:mxarcf),
-     %                  noarcf(3,mxarcf),
-     %                  larmin(mxarcf),
-     %                  notrcf(mxarcf),
-     %                  liarcf(mxarcf),
-     %                  nostpe(mxstpe),
-     %                  nosotr(3)
-c
-      if( nsasup .le. nbarpi ) then
-c        sommet frontalier non destructible
-         ierr = -1
-         return
-      endif
-      ierr = 0
-c
-c     nsasup est il un sommet interne, "centre" d'une boule de triangles?
-c     => le sommet nsasup peut etre supprime
-c     ===================================================================
-c     formation du cf de ''centre'' le sommet nsasup
-      call trp1st( nsasup, noarst, mosoar, nosoar,
-     %             moartr, mxartr, noartr,
-     %             mxarcf, nbtrcf, notrcf )
-c
-      if( nbtrcf .le. 2 ) then
-c        erreur: impossible de trouver tous les triangles de sommet nsasup
-c        ou pas assez de triangles de sommet nsasup
-c        le sommet nsasup n'est pas supprime de la triangulation
-         ierr = -1
-         return
-      endif
-c
-      if( nbtrcf*3 .gt. mxarcf ) then
-         write(imprim,*) 'saturation du tableau noarcf'
-         ierr = 10
-         return
-      endif
-c
-c     si toutes les aretes du cf sont frontalieres, alors il est
-c     interdit de detruire le sommet "centre" du cf
-c     calcul du nombre nbarfr des aretes simples des nbtrcf triangles
-      call trfrcf( nsasup, mosoar, nosoar, moartr, noartr,
-     %             nbtrcf, notrcf, nbarfr )
-      if( nbarfr .ge. nbtrcf ) then
-c        toutes les aretes simples sont frontalieres
-c        le sommet nsasup ("centre" de la cavite) n'est pas supprime
-         ierr = -1
-         return
-      endif
-c
-c     calcul des surfaces avant suppression du point
-      s0 = 0d0
-      do 10 i=1,nbtrcf
-         nt = notrcf(i)
-c        les numeros des 3 sommets du triangle nt
-         call nusotr( nt, mosoar, nosoar, moartr, noartr, nosotr )
-         s = surtd2( pxyd(1,nosotr(1)),
-     %               pxyd(1,nosotr(2)),
-     %               pxyd(1,nosotr(3)) )
-         s0 = s0 + abs( s )
- 10   continue
-c
-c     formation du contour ferme (liste chainee des aretes simples)
-c     forme a partir des aretes des triangles de l'etoile du sommet nsasup
-c     les aretes doubles sont detruites
-c     les triangles du cf sont detruits
-      call focftr( nbtrcf, notrcf, nbarpi, pxyd,   noarst,
-     %             mosoar, mxsoar, n1soar, nosoar,
-     %             moartr, n1artr, noartr,
-     %             nbarcf, n1arcf, noarcf, nbstpe, nostpe,
-     %             ierr )
-      if( ierr .ne. 0 ) then
-c        modification de ierr pour continuer le calcul
-         ierr = -543
-         return
-      endif
-c
-c     ici le sommet nsasup n'appartient plus a aucune arete
-      noarst( nsasup ) = 0
-c
-c     chainage des aretes vides dans le tableau noarcf
-      n1arcf(0) = nbarcf+1
-      mmarcf = min(8*nbarcf,mxarcf)
-      do 40 i=nbarcf+1,mmarcf
-         noarcf(2,i) = i+1
- 40   continue
-      noarcf(2,mmarcf) = 0
-c
-c     sauvegarde du chainage des aretes peripheriques
-c     pour la mise en delaunay du maillage
-      nbcf = n1arcf(1)
-      do 50 i=1,nbarcf
-c        le numero de l'arete dans le tableau nosoar
-         liarcf( i ) = noarcf( 3, nbcf )
-c        l'arete suivante dans le cf
-         nbcf = noarcf( 2, nbcf )
- 50   continue
-c
-c     triangulation directe du contour ferme sans le sommet nsasup
-c     ============================================================
-      nbcf = 1
-      call tridcf( nbcf,   nbstpe, nostpe, pxyd,   noarst,
-     %             mosoar, mxsoar, n1soar, nosoar,
-     %             moartr, n1artr, noartr,
-     %             mxarcf, n1arcf, noarcf, larmin,
-     %             nbtrcf, notrcf, ierr )
-      if( ierr .ne. 0 ) return
-c     calcul des surfaces apres suppression du point
-      s1 = 0d0
-      do 55 i=1,nbtrcf
-         nt = notrcf(i)
-c        les numeros des 3 sommets du triangle nt
-         call nusotr( nt, mosoar, nosoar, moartr, noartr, nosotr )
-         s = surtd2( pxyd(1,nosotr(1)),
-     %               pxyd(1,nosotr(2)),
-     %               pxyd(1,nosotr(3)) )
-         if( s .le. 0 ) then
-            write(imprim,*)'te1stm: apres tridcf le triangle',nt,
-     %                     ' st',nosotr,' AIRE<0'
-         endif
-         s1 = s1 + abs( s )
- 55   continue
-c
-      if( abs(s0-s1) .gt. 1d-10*s0 ) then
-      write(imprim,*)
-      write(imprim,*)'te1stm: difference des aires lors suppression st',
-     %   nsasup
-      write(imprim,10055) s0, s1
-10055 format('aire0=',d25.16,' aire1=',d25.16)
-      endif
-c
-c     transformation des triangles du cf en triangles delaunay
-c     ========================================================
-c     construction du chainage lchain dans nosoar
-c     des aretes peripheriques du cf a partir de la sauvegarde liarcf
-      noar0 = liarcf(1)
-      do 60 i=2,nbarcf
-c        le numero de l'arete peripherique du cf dans nosoar
-         noar = liarcf( i )
-         if( nosoar(3,noar) .le. 0 ) then
-c           arete interne => elle est chainee a partir de la precedente
-            nosoar( lchain, noar0 ) = noar
-            noar0 = noar
-         endif
- 60   continue
-c     la derniere arete peripherique n'a pas de suivante
-      nosoar(lchain,noar0) = 0
-c
-c     mise en delaunay des aretes chainees
-      call tedela( pxyd,   noarst,
-     %             mosoar, mxsoar, n1soar, nosoar, liarcf(1),
-     %             moartr, mxartr, n1artr, noartr, modifs )
-      return
-      end
-
-
-      subroutine tr3str( np,     nt,
-     %                   mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, mxartr, n1artr, noartr,
-     %                   noarst, nutr,   ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    former les 3 sous-triangles du triangle nt a partir
-c -----    du point interne np
-c
-c entrees:
-c --------
-c np     : numero dans le tableau pxyd du point
-c nt     : numero dans le tableau noartr du triangle a trianguler
-c mosoar : nombre maximal d'entiers par arete du tableau nosoar
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c mxartr : nombre maximal de triangles stockables dans le tableau noartr
-c
-c modifies:
-c ---------
-c n1soar : numero de la premiere arete vide dans le tableau nosoar
-c          une arete i de nosoar est vide  <=>  nosoar(1,i)=0
-c nosoar : numero des 2 sommets , no ligne, 2 triangles, chainages
-c          sommet 1 = 0 si arete vide => sommet 2 = arete vide suivante
-c          hachage des aretes = (nosoar(1)+nosoar(2)) modulo mxsoar
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c noarst : noarst(i) numero d'une arete de sommet i
-c
-c sorties:
-c --------
-c nutr   : le numero des 3 sous-triangles du triangle nt
-c nt     : en sortie le triangle initial n'est plus actif dans noartr
-c          c'est en fait le premier triangle vide de noartr
-c ierr   : =0 si pas d'erreur
-c          =1 si le tableau nosoar est sature
-c          =2 si le tableau noartr est sature
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c....................................................................012
-      integer    nosoar(mosoar,mxsoar),
-     %           noartr(moartr,mxartr),
-     %           noarst(*),
-     %           nutr(3)
-c
-      integer    nosotr(3), nu2sar(2), nuarco(3)
-c
-c     reservation des 3 nouveaux triangles dans le tableau noartr
-c     ===========================================================
-      do 10 i=1,3
-c        le numero du sous-triangle i dans le tableau noartr
-         if( n1artr .le. 0 ) then
-c           tableau noartr sature
-            ierr = 2
-            return
-         endif
-         nutr(i) = n1artr
-c        le nouveau premier triangle libre dans noartr
-         n1artr = noartr(2,n1artr)
- 10   continue
-c
-c     les numeros des 3 sommets du triangle nt
-      call nusotr( nt, mosoar, nosoar, moartr, noartr, nosotr )
-c
-c     formation des 3 aretes nosotr(i)-np dans le tableau nosoar
-c     ==========================================================
-      nt0 = nutr(3)
-      do 20 i=1,3
-c
-c        le triangle a creer
-         nti = nutr(i)
-c
-c        les 2 sommets du cote i du triangle nosotr
-         nu2sar(1) = nosotr(i)
-         nu2sar(2) = np
-         call hasoar( mosoar, mxsoar, n1soar, nosoar, nu2sar, noar )
-c        en sortie: noar>0 => no arete retrouvee
-c                       <0 => no arete ajoutee
-c                       =0 => saturation du tableau nosoar
-c
-         if( noar .eq. 0 ) then
-c           saturation du tableau nosoar
-            ierr = 1
-            return
-         else if( noar .lt. 0 ) then
-c           l'arete a ete ajoutee. initialisation des autres informations
-            noar = -noar
-c           le numero des 2 sommets a ete initialise par hasoar
-c           et (nosoar(1,noar)<nosoar(2,noar))
-c           le numero de la ligne de l'arete: ici arete interne
-            nosoar(3,noar) = 0
-c        else
-c           l'arete a ete retrouvee
-c           le numero des 2 sommets a ete retrouve par hasoar
-c           et (nosoar(1,noar)<nosoar(2,noar))
-c           le numero de ligne reste inchange
-         endif
-c
-c        le triangle 1 de l'arete noar => le triangle nt0
-         nosoar(4,noar) = nt0
-c        le triangle 2 de l'arete noar => le triangle nti
-         nosoar(5,noar) = nti
-c
-c        le sommet nosotr(i) appartient a l'arete noar
-         noarst( nosotr(i) ) = noar
-c
-c        le numero d'arete nosotr(i)-np
-         nuarco(i) = noar
-c
-c        le triangle qui precede le suivant
-         nt0 = nti
- 20   continue
-c
-c     le numero d'une arete du point np
-      noarst( np ) = noar
-c
-c     les 3 sous-triangles du triangle nt sont formes dans le tableau noartr
-c     ======================================================================
-      do 30 i=1,3
-c
-c        le numero suivant i => i mod 3 + 1
-         if( i .ne. 3 ) then
-            i1 = i + 1
-         else
-            i1 = 1
-         endif
-c
-c        le numero dans noartr du sous-triangle a ajouter
-         nti = nutr( i )
-c
-c        le numero de l'arete i du triangle initial nt
-c        est l'arete 1 du sous-triangle i
-         noar = noartr(i,nt)
-         noartr( 1, nti ) = noar
-c
-c        mise a jour du numero de triangle de cette arete
-         noar = abs( noar )
-         if( nosoar(4,noar) .eq. nt ) then
-c           le sous-triangle nti remplace le triangle nt
-            nosoar(4,noar) = nti
-         else
-c           le sous-triangle nti remplace le triangle nt
-            nosoar(5,noar) = nti
-         endif
-c
-c        l'arete 2 du sous-triangle i est l'arete i1 ajoutee
-         if( nosotr(i1) .eq. nosoar(1,nuarco(i1)) ) then
-c           l'arete ns i1-np dans nosoar est dans le sens direct
-            noartr( 2, nti ) = nuarco(i1)
-         else
-c           l'arete ns i1-np dans nosoar est dans le sens indirect
-            noartr( 2, nti ) = -nuarco(i1)
-         endif
-c
-c        l'arete 3 du sous-triangle i est l'arete i ajoutee
-         if( nosotr(i) .eq. nosoar(1,nuarco(i)) ) then
-c           l'arete ns i1-np dans nosoar est dans le sens indirect
-            noartr( 3, nti ) = -nuarco(i)
-         else
-c           l'arete ns i1-np dans nosoar est dans le sens direct
-            noartr( 3, nti ) = nuarco(i)
-         endif
- 30   continue
-c
-c     le triangle nt est rendu libre
-c     ==============================
-c     il devient n1artr le premier triangle libre
-      noartr( 1, nt ) = 0
-      noartr( 2, nt ) = n1artr
-      n1artr = nt
-      end
-
-
-      subroutine mt4sqa( na,  moartr, noartr, mosoar, nosoar,
-     %                   ns1, ns2, ns3, ns4)
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    calcul du numero des 4 sommets de l'arete na de nosoar
-c -----    formant un quadrangle
-c
-c entrees:
-c --------
-c na     : numero de l'arete dans nosoar a traiter
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1=0 si triangle vide => arete2=triangle vide suivant
-c mosoar : nombre maximal d'entiers par arete
-c nosoar : numero des 2 sommets , no ligne, 2 triangles, chainages en +
-c          sommet 1 = 0 si arete vide => sommet 2 = arete vide suivante
-c
-c sorties:
-c --------
-c ns1,ns2,ns3 : les 3 numeros des sommets du triangle t1 en sens direct
-c ns1,ns4,ns2 : les 3 numeros des sommets du triangle t2 en sens direct
-c
-c si erreur rencontree => ns4 = 0
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c2345x7..............................................................012
-      common / unites / lecteu, imprim, nunite(30)
-      integer           noartr(moartr,*), nosoar(mosoar,*)
-c
-c     le numero de triangle est il correct  ?
-c     a supprimer apres mise au point
-      if( na .le. 0 ) then
-c         nblgrc(nrerr) = 1
-c         write(kerr(mxlger)(1:6),'(i6)') na
-c         kerr(1) = kerr(mxlger)(1:6) //
-c     %           ' no incorrect arete dans nosoar'
-c         call lereur
-          write(imprim,*) na, ' no incorrect arete dans nosoar'
-         ns4 = 0
-         return
-      endif
-c
-      if( nosoar(1,na) .le. 0 ) then
-c         nblgrc(nrerr) = 1
-c         write(kerr(mxlger)(1:6),'(i6)') na
-c         kerr(1) = kerr(mxlger)(1:6) //
-c     %           ' arete non active dans nosoar'
-c         call lereur
-         write(imprim,*) na, ' arete non active dans nosoar'
-         ns4 = 0
-         return
-      endif
-c
-c     recherche de l'arete na dans le premier triangle
-      nt = nosoar(4,na)
-      if( nt .le. 0 ) then
-c         nblgrc(nrerr) = 1
-c         write(kerr(mxlger)(1:6),'(i6)') na
-c         kerr(1) =  'triangle 1 incorrect pour l''arete ' //
-c     %               kerr(mxlger)(1:6)
-c         call lereur
-         write(imprim,*) 'triangle 1 incorrect pour l''arete ', na
-         ns4 = 0
-         return
-      endif
-c
-      do 5 i=1,3
-         if( abs( noartr(i,nt) ) .eq. na ) goto 8
- 5    continue
-c     si arrivee ici => bogue avant
-      write(imprim,*) 'mt4sqa: arete',na,' non dans le triangle',nt
-      ns4 = 0
-      return
-c
-c     les 2 sommets de l'arete na
- 8    if( noartr(i,nt) .gt. 0 ) then
-         ns1 = 1
-         ns2 = 2
-      else
-         ns1 = 2
-         ns2 = 1
-      endif
-      ns1 = nosoar(ns1,na)
-      ns2 = nosoar(ns2,na)
-c
-c     l'arete suivante
-      if( i .lt. 3 ) then
-         i = i + 1
-      else
-         i = 1
-      endif
-      naa = abs( noartr(i,nt) )
-c
-c     le sommet ns3 du triangle 123
-      ns3 = nosoar(1,naa)
-      if( ns3 .eq. ns1 .or. ns3 .eq. ns2 ) then
-         ns3 = nosoar(2,naa)
-      endif
-c
-c     le triangle de l'autre cote de l'arete na
-c     =========================================
-      nt = nosoar(5,na)
-      if( nt .le. 0 ) then
-c         nblgrc(nrerr) = 1
-c         write(kerr(mxlger)(1:6),'(i6)') na
-c         kerr(1) =  'triangle 2 incorrect pour l''arete ' //
-c     %               kerr(mxlger)(1:6)
-c         call lereur
-          write(imprim,*) 'triangle 2 incorrect pour l''arete ',na
-         ns4 = 0
-         return
-      endif
-c
-c     le numero de l'arete naa du triangle nt
-      naa = abs( noartr(1,nt) )
-      if( naa .eq. na ) naa = abs( noartr(2,nt) )
-      ns4 = nosoar(1,naa)
-      if( ns4 .eq. ns1 .or. ns4 .eq. ns2 ) then
-         ns4 = nosoar(2,naa)
-      endif
-      end
-
-
-      subroutine te2t2t( noaret, mosoar, n1soar, nosoar, noarst,
-     %                   moartr, noartr, noar34 )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    echanger la diagonale des 2 triangles ayant en commun
-c -----    l'arete noaret du tableau nosoar si c'est possible
-c
-c entrees:
-c --------
-c noaret : numero de l'arete a echanger entre les 2 triangles
-c mosoar : nombre maximal d'entiers par arete
-c moartr : nombre maximal d'entiers par triangle
-c
-c modifies :
-c ----------
-c n1soar : numero de la premiere arete vide dans le tableau nosoar
-c nosoar : numero des 2 sommets , no ligne, 2 triangles, chainages en +
-c          sommet 1 = 0 si arete vide => sommet 2 = arete vide suivante
-c noarst : noarst(i) numero d'une arete de sommet i
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c
-c sortie :
-c --------
-c noar34 : numero nosoar de la nouvelle arete diagonale
-c          0 si pas d'echange des aretes diagonales
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc      avril 1997
-c....................................................................012
-      common / unites / lecteu,imprim,intera,nunite(29)
-      integer     nosoar(mosoar,*),
-     %            noartr(moartr,*),
-     %            noarst(*)
-c
-c     une arete frontaliere ne peut etre echangee
-      noar34 = 0
-      if( nosoar(3,noaret) .gt. 0 ) return
-c
-c     les 4 sommets des 2 triangles ayant l'arete noaret en commun
-      call mt4sqa( noaret, moartr, noartr, mosoar, nosoar,
-     %             ns1, ns2, ns3, ns4)
-c     ns1,ns2,ns3 : les 3 numeros des sommets du triangle nt1 en sens direct
-c     ns1,ns4,ns2 : les 3 numeros des sommets du triangle nt2 en sens direct
-c
-c     recherche du numero de l'arete noaret dans le triangle nt1
-      nt1 = nosoar(4,noaret)
-      do 10 n1 = 1, 3
-         if( abs(noartr(n1,nt1)) .eq. noaret ) goto 15
- 10   continue
-c     impossible d'arriver ici sans bogue!
-      write(imprim,*) 'anomalie dans te2t2t 1'
-c
-c     l'arete de sommets 2 et 3
- 15   if( n1 .lt. 3 ) then
-         n2 = n1 + 1
-      else
-         n2 = 1
-      endif
-      na23 = noartr(n2,nt1)
-c
-c     l'arete de sommets 3 et 1
-      if( n2 .lt. 3 ) then
-         n3 = n2 + 1
-      else
-         n3 = 1
-      endif
-      na31 = noartr(n3,nt1)
-c
-c     recherche du numero de l'arete noaret dans le triangle nt2
-      nt2 = nosoar(5,noaret)
-      do 20 n1 = 1, 3
-         if( abs(noartr(n1,nt2)) .eq. noaret ) goto 25
- 20   continue
-c     impossible d'arriver ici sans bogue!
-      write(imprim,*) 'Anomalie dans te2t2t 2'
-c
-c     l'arete de sommets 1 et 4
- 25   if( n1 .lt. 3 ) then
-         n2 = n1 + 1
-      else
-         n2 = 1
-      endif
-      na14 = noartr(n2,nt2)
-c
-c     l'arete de sommets 4 et 2
-      if( n2 .lt. 3 ) then
-         n3 = n2 + 1
-      else
-         n3 = 1
-      endif
-      na42 = noartr(n3,nt2)
-c
-c     les triangles 123 142 deviennent 143 234
-c     ========================================
-c     ajout de l'arete ns3-ns4
-c     on evite l'affichage de l'erreur
-      ierr = -1
-      call fasoar( ns3,    ns4,    nt1,    nt2,    0,
-     %             mosoar, mxsoar, n1soar, nosoar, noarst,
-     %             noar34, ierr )
-      if( ierr .gt. 0 ) then
-c        ierr=1 si le tableau nosoar est sature
-c            =2 si arete a creer et appartenant a 2 triangles distincts
-c               des triangles nt1 et nt2
-c            =3 si arete appartenant a 2 triangles distincts
-c               differents des triangles nt1 et nt2
-c            =4 si arete appartenant a 2 triangles distincts
-c               dont le second n'est pas le triangle nt2
-c        => pas d'echange
-         noar34 = 0
-         return
-      endif
-c
-c     suppression de l'arete noaret
-      call sasoar( noaret, mosoar, mxsoar, n1soar, nosoar, noarst )
-c
-c     nt1 = triangle 143
-      noartr(1,nt1) =  na14
-c     sens de stockage de l'arete ns3-ns4 dans nosoar?
-      if( nosoar(1,noar34) .eq. ns3 ) then
-         n1 = -1
-      else
-         n1 =  1
-      endif
-      noartr(2,nt1) = noar34 * n1
-      noartr(3,nt1) = na31
-c
-c     nt2 = triangle 234
-      noartr(1,nt2) =  na23
-      noartr(2,nt2) = -noar34 * n1
-      noartr(3,nt2) =  na42
-c
-c     echange nt1 -> nt2 pour l'arete na23
-      na23 = abs( na23 )
-      if( nosoar(4,na23) .eq. nt1 ) then
-         n1 = 4
-      else
-         n1 = 5
-      endif
-      nosoar(n1,na23) = nt2
-c
-c     echange nt2 -> nt1 pour l'arete na14
-      na14 = abs( na14 )
-      if( nosoar(4,na14) .eq. nt2 ) then
-         n1 = 4
-      else
-         n1 = 5
-      endif
-      nosoar(n1,na14) = nt1
-c
-c     numero d'une arete de chacun des 4 sommets
-      noarst(ns1) = na14
-      noarst(ns2) = na23
-      noarst(ns3) = noar34
-      noarst(ns4) = noar34
-      end
-
-
-      subroutine f0trte( letree, pxyd,
-     %                   mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, mxartr, n1artr, noartr,
-     %                   noarst,
-     %                   nbtr,   nutr,   ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    former le ou les triangles du triangle equilateral letree
-c -----    les points internes au te deviennent des sommets des
-c          sous-triangles du te
-c
-c entrees:
-c --------
-c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation
-c          si letree(0)>0 alors
-c             letree(0:3) : no (>0) letree des 4 sous-triangles du triangle j
-c          sinon
-c             letree(0:3) :-no pxyd des 1 a 4 points internes au triangle j
-c                           0  si pas de point
-c                         ( le te est une feuille de l'arbre )
-c          letree(4) : no letree du sur-triangle du triangle j
-c          letree(5) : 0 1 2 3 no du sous-triangle j pour son sur-triangle
-c          letree(6:8) : no pxyd des 3 sommets du triangle j
-c pxyd   : tableau des x  y  distance_souhaitee de chaque sommet
-c mosoar : nombre maximal d'entiers par arete du tableau nosoar
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c mxartr : nombre maximal de triangles stockables dans le tableau noartr
-c
-c modifies:
-c ---------
-c n1soar : numero de la premiere arete vide dans le tableau nosoar
-c          une arete i de nosoar est vide  <=>  nosoar(1,i)=0
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c          hachage des aretes = (nosoar(1)+nosoar(2)) modulo mxsoar
-c          sommet 1 = 0 si arete vide => sommet 2 = arete vide suivante
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c noarst : noarst(i) numero d'une arete de sommet i
-c
-c sorties:
-c --------
-c nbtr   : nombre de sous-triangles du te, triangulation du te
-c nutr   : numero des nbtr sous-triangles du te dans le tableau noartr
-c ierr   : =0 si pas d'erreur
-c          =1 si le tableau nosoar est sature
-c          =2 si le tableau noartr est sature
-c          =3 si aucun des triangles ne contient l'un des points internes au te
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c....................................................................012
-      common / unites / lecteu, imprim, nunite(30)
-      double precision  pxyd(3,*)
-      integer           letree(0:8),
-     %                  nosoar(mosoar,mxsoar),
-     %                  noartr(moartr,mxartr),
-     %                  noarst(*),
-     %                  nutr(1:nbtr)
-      integer           nuarco(3)
-c
-c     le numero nt du triangle dans le tableau noartr
-      if( n1artr .le. 0 ) then
-c        tableau noartr sature
-         write(imprim,*) 'f0trte: tableau noartr sature'
-         ierr = 2
-         return
-      endif
-      nt = n1artr
-c     le numero du nouveau premier triangle libre dans noartr
-      n1artr = noartr( 2, n1artr )
-c
-c     formation du triangle = le triangle equilateral letree
-      do 10 i=1,3
-         if( i .ne. 3 ) then
-            i1 = i + 1
-         else
-            i1 = 1
-         endif
-c        ajout eventuel de l'arete si si+1 dans le tableau nosoar
-         call fasoar( letree(5+i), letree(5+i1), nt, -1, 0,
-     %                mosoar, mxsoar, n1soar, nosoar, noarst,
-     %                nuarco(i), ierr )
-         if( ierr .ne. 0 ) return
- 10   continue
-c
-c     le triangle nt est forme dans le tableau noartr
-      do 20 i=1,3
-c        letree(5+i) est le numero du sommet 1 de l'arete i du te
-         if( letree(5+i) .eq. nosoar(1,nuarco(i)) ) then
-            lesign =  1
-         else
-            lesign = -1
-         endif
-c        l'arete ns1-ns2 dans nosoar est celle du cote du te
-         noartr( i, nt ) = lesign * nuarco(i)
- 20   continue
-c
-c     triangulation du te=triangle nt par ajout des points internes du te
-      nbtr    = 1
-      nutr(1) = nt
-      call trpite( letree, pxyd,
-     %             mosoar, mxsoar, n1soar, nosoar,
-     %             moartr, mxartr, n1artr, noartr, noarst,
-     %             nbtr,   nutr,   ierr )
-      end
-
-
-      subroutine f1trte( letree, pxyd,   milieu,
-     %                   mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, mxartr, n1artr, noartr,
-     %                   noarst,
-     %                   nbtr,   nutr,   ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    former les triangles du triangle equilateral letree
-c -----    a partir de l'un des 3 milieux des cotes du te
-c          et des points internes au te
-c          ils deviennent tous des sommets des sous-triangles du te
-c
-c entrees:
-c --------
-c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation
-c          si letree(0)>0 alors
-c             letree(0:3) : no (>0) letree des 4 sous-triangles du triangle j
-c          sinon
-c             letree(0:3) :-no pxyd des 1 a 4 points internes au triangle j
-c                           0  si pas de point
-c                         ( le te est une feuille de l'arbre )
-c          letree(4) : no letree du sur-triangle du triangle j
-c          letree(5) : 0 1 2 3 no du sous-triangle j pour son sur-triangle
-c          letree(6:8) : no pxyd des 3 sommets du triangle j
-c pxyd   : tableau des x  y  distance_souhaitee de chaque sommet
-c milieu : milieu(i) numero dans pxyd du milieu de l'arete i du te
-c                    0 si pas de milieu du cote i a ajouter
-c mosoar : nombre maximal d'entiers par arete du tableau nosoar
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c mxartr : nombre maximal de triangles stockables dans le tableau noartr
-c
-c modifies:
-c ---------
-c n1soar : numero de la premiere arete vide dans le tableau nosoar
-c          une arete i de nosoar est vide  <=>  nosoar(1,i)=0
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c          hachage des aretes = (nosoar(1)+nosoar(2)) modulo mxsoar
-c          sommet 1 = 0 si arete vide => sommet 2 = arete vide suivante
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c noarst : noarst(np) numero d'une arete du sommet np
-c
-c sorties:
-c --------
-c nbtr   : nombre de sous-triangles du te, triangulation du te
-c nutr   : numero des nbtr sous-triangles du te dans le tableau noartr
-c ierr   : =0 si pas d'erreur
-c          =1 si le tableau nosoar est sature
-c          =2 si le tableau noartr est sature
-c          =3 si aucun des triangles ne contient l'un des points internes au te
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c....................................................................012
-      double precision  pxyd(3,*)
-      integer           letree(0:8),
-     %                  milieu(3),
-     %                  nosoar(mosoar,mxsoar),
-     %                  noartr(moartr,mxartr),
-     %                  noarst(*),
-     %                  nutr(1:nbtr)
-c
-      integer           nosotr(3), nuarco(5)
-c
-c     le numero des 2 triangles (=2 demi te) a creer dans le tableau noartr
-      do 5 nbtr=1,2
-         if( n1artr .le. 0 ) then
-c           tableau noartr sature
-            ierr = 2
-            return
-         endif
-         nutr(nbtr) = n1artr
-c        le nouveau premier triangle libre dans noartr
-         n1artr = noartr(2,n1artr)
- 5    continue
-      nbtr = 2
-c
-c     recherche du milieu a creer
-      do 7 i=1,3
-         if( milieu(i) .ne. 0 ) goto 9
- 7    continue
-c     le numero pxyd du point milieu du cote i
- 9    nm = milieu( i )
-c
-c     on se ramene au seul cas i=3 c-a-d le milieu est sur le cote 3
-      if( i .eq. 1 ) then
-c        milieu sur le cote 1
-         nosotr(1) = letree(7)
-         nosotr(2) = letree(8)
-         nosotr(3) = letree(6)
-      else if( i .eq. 2 ) then
-c        milieu sur le cote 2
-         nosotr(1) = letree(8)
-         nosotr(2) = letree(6)
-         nosotr(3) = letree(7)
-      else
-c        milieu sur le cote 3
-         nosotr(1) = letree(6)
-         nosotr(2) = letree(7)
-         nosotr(3) = letree(8)
-      endif
-c
-c     formation des 2 aretes s1 s2 et s2 s3
-      do 10 i=1,2
-         if( i .ne. 3 ) then
-            i1 = i + 1
-         else
-            i1 = 1
-         endif
-c        ajout eventuel de l'arete dans nosoar
-         call fasoar( nosotr(i), nosotr(i1), nutr(i), -1, 0,
-     %                mosoar, mxsoar, n1soar, nosoar, noarst,
-     %                nuarco(i), ierr )
-         if( ierr .ne. 0 ) return
- 10   continue
-c
-c     ajout eventuel de l'arete s3 milieu dans nosoar
-      call fasoar( nosotr(3), nm, nutr(2), -1, 0,
-     %             mosoar, mxsoar, n1soar, nosoar, noarst,
-     %             nuarco(3), ierr )
-      if( ierr .ne. 0 ) return
-c
-c     ajout eventuel de l'arete milieu s1 dans nosoar
-      call fasoar( nosotr(1), nm, nutr(1), -1, 0,
-     %             mosoar, mxsoar, n1soar, nosoar, noarst,
-     %             nuarco(4), ierr )
-      if( ierr .ne. 0 ) return
-c
-c     ajout eventuel de l'arete milieu s2 dans nosoar
-      call fasoar( nosotr(2), nm, nutr(1), nutr(2), 0,
-     %             mosoar, mxsoar, n1soar, nosoar, noarst,
-     %             nuarco(5), ierr )
-      if( ierr .ne. 0 ) return
-c
-c     les aretes s1 s2 et s2 s3 dans le tableau noartr
-      do 20 i=1,2
-c        nosotr(i) est le numero du sommet 1 de l'arete i du te
-         if( nosotr(i) .eq. nosoar(1,nuarco(i)) ) then
-            lesign = 1
-         else
-            lesign = -1
-         endif
-c        l'arete ns1-ns2 dans nosoar est celle du cote du te
-         noartr( 1, nutr(i) ) = lesign * nuarco(i)
- 20   continue
-c
-c     l'arete mediane s2 milieu
-      if( nm .eq. nosoar(1,nuarco(5)) ) then
-         lesign = -1
-      else
-         lesign =  1
-      endif
-      noartr( 2, nutr(1) ) =  lesign * nuarco(5)
-      noartr( 3, nutr(2) ) = -lesign * nuarco(5)
-c
-c     l'arete s1 milieu
-      if( nm .eq. nosoar(1,nuarco(4)) ) then
-         lesign =  1
-      else
-         lesign = -1
-      endif
-      noartr( 3, nutr(1) ) = lesign * nuarco(4)
-c
-c     l'arete s3 milieu
-      if( nm .eq. nosoar(1,nuarco(3)) ) then
-         lesign = -1
-      else
-         lesign =  1
-      endif
-      noartr( 2, nutr(2) ) = lesign * nuarco(3)
-c
-c     triangulation des 2 demi te par ajout des points internes du te
-      call trpite( letree, pxyd,
-     %             mosoar, mxsoar, n1soar, nosoar,
-     %             moartr, mxartr, n1artr, noartr, noarst,
-     %             nbtr,   nutr,   ierr )
-      end
-
-
-      subroutine f2trte( letree, pxyd,   milieu,
-     %                   mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, mxartr, n1artr, noartr,
-     %                   noarst,
-     %                   nbtr,   nutr,   ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    former les triangles du triangle equilateral letree
-c -----    a partir de 2 milieux des cotes du te
-c          et des points internes au te
-c          ils deviennent tous des sommets des sous-triangles du te
-c
-c entrees:
-c --------
-c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation
-c          si letree(0)>0 alors
-c             letree(0:3) : no (>0) letree des 4 sous-triangles du triangle j
-c          sinon
-c             letree(0:3) :-no pxyd des 1 a 4 points internes au triangle j
-c                           0  si pas de point
-c                         ( le te est une feuille de l'arbre )
-c          letree(4) : no letree du sur-triangle du triangle j
-c          letree(5) : 0 1 2 3 no du sous-triangle j pour son sur-triangle
-c          letree(6:8) : no pxyd des 3 sommets du triangle j
-c pxyd   : tableau des x  y  distance_souhaitee de chaque sommet
-c milieu : milieu(i) numero dans pxyd du milieu de l'arete i du te
-c                    0 si pas de milieu du cote i a ajouter
-c mosoar : nombre maximal d'entiers par arete du tableau nosoar
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c mxartr : nombre maximal de triangles stockables dans le tableau noartr
-c
-c modifies:
-c ---------
-c n1soar : numero de la premiere arete vide dans le tableau nosoar
-c          une arete i de nosoar est vide  <=>  nosoar(1,i)=0
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c          hachage des aretes = (nosoar(1)+nosoar(2)) modulo mxsoar
-c          sommet 1 = 0 si arete vide => sommet 2 = arete vide suivante
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c noarst : noarst(np) numero d'une arete du sommet np
-c
-c sorties:
-c --------
-c nbtr   : nombre de sous-triangles du te, triangulation du te
-c nutr   : numero des nbtr sous-triangles du te dans le tableau noartr
-c ierr   : =0 si pas d'erreur
-c          =1 si le tableau nosoar est sature
-c          =2 si le tableau noartr est sature
-c          =3 si aucun des triangles ne contient l'un des points internes au te
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c....................................................................012
-      common / unites / lecteu, imprim, nunite(30)
-      double precision  pxyd(3,*)
-      integer           letree(0:8),
-     %                  milieu(3),
-     %                  nosoar(mosoar,mxsoar),
-     %                  noartr(moartr,mxartr),
-     %                  noarst(*),
-     %                  nutr(1:nbtr)
-c
-      integer           nosotr(3), nuarco(7)
-c
-c     le numero des 3 triangles a creer dans le tableau noartr
-      do 5 nbtr=1,3
-         if( n1artr .le. 0 ) then
-c           tableau noartr sature
-            ierr = 2
-            return
-         endif
-         nutr(nbtr) = n1artr
-c        le nouveau premier triangle libre dans noartr
-         n1artr = noartr(2,n1artr)
- 5    continue
-      nbtr = 3
-c
-c     recherche du premier milieu a creer
-      do 7 i=1,3
-         if( milieu(i) .ne. 0 ) goto 9
- 7    continue
-c
-c     on se ramene au seul cas i=2 c-a-d le cote 1 n'a pas de milieu
- 9    if( i .eq. 2 ) then
-c        pas de milieu sur le cote 1
-         nosotr(1) = letree(6)
-         nosotr(2) = letree(7)
-         nosotr(3) = letree(8)
-c        le numero pxyd du milieu du cote 2
-         nm2 = milieu( 2 )
-c        le numero pxyd du milieu du cote 3
-         nm3 = milieu( 3 )
-      else if( milieu(2) .ne. 0 ) then
-c        pas de milieu sur le cote 3
-         nosotr(1) = letree(8)
-         nosotr(2) = letree(6)
-         nosotr(3) = letree(7)
-c        le numero pxyd du milieu du cote 2
-         nm2 = milieu( 1 )
-c        le numero pxyd du milieu du cote 3
-         nm3 = milieu( 2 )
-      else
-c        pas de milieu sur le cote 2
-         nosotr(1) = letree(7)
-         nosotr(2) = letree(8)
-         nosotr(3) = letree(6)
-c        le numero pxyd du milieu du cote 2
-         nm2 = milieu( 3 )
-c        le numero pxyd du milieu du cote 3
-         nm3 = milieu( 1 )
-      endif
-c
-c     ici seul le cote 1 n'a pas de milieu
-c     nm2 est le milieu du cote 2
-c     nm3 est le milieu du cote 3
-c
-c     ajout eventuel de l'arete s1 s2 dans nosoar
-      call fasoar( nosotr(1), nosotr(2), nutr(1), -1, 0,
-     %             mosoar, mxsoar, n1soar, nosoar, noarst,
-     %             nuarco(1), ierr )
-      if( ierr .ne. 0 ) return
-c
-c     ajout eventuel de l'arete s1 s2 dans nosoar
-      call fasoar( nosotr(2), nm2, nutr(1), -1, 0,
-     %             mosoar, mxsoar, n1soar, nosoar, noarst,
-     %             nuarco(2), ierr )
-      if( ierr .ne. 0 ) return
-c
-c     ajout eventuel de l'arete s1 nm2 dans nosoar
-      call fasoar( nosotr(1), nm2, nutr(1), nutr(2), 0,
-     %             mosoar, mxsoar, n1soar, nosoar, noarst,
-     %             nuarco(3), ierr )
-      if( ierr .ne. 0 ) return
-c
-c     ajout eventuel de l'arete nm2 nm3 dans nosoar
-      call fasoar( nm3, nm2, nutr(2), nutr(3), 0,
-     %             mosoar, mxsoar, n1soar, nosoar, noarst,
-     %             nuarco(4), ierr )
-      if( ierr .ne. 0 ) return
-c
-c     ajout eventuel de l'arete s1 nm3 dans nosoar
-      call fasoar( nosotr(1), nm3, nutr(2), -1, 0,
-     %             mosoar, mxsoar, n1soar, nosoar, noarst,
-     %             nuarco(5), ierr )
-      if( ierr .ne. 0 ) return
-c
-c     ajout eventuel de l'arete nm2 s3 dans nosoar
-      call fasoar( nm2, nosotr(3), nutr(3), -1, 0,
-     %             mosoar, mxsoar, n1soar, nosoar, noarst,
-     %             nuarco(6), ierr )
-c
-c     ajout eventuel de l'arete nm3 s3 dans nosoar
-      call fasoar( nosotr(3), nm3, nutr(3), -1, 0,
-     %             mosoar, mxsoar, n1soar, nosoar, noarst,
-     %             nuarco(7), ierr )
-      if( ierr .ne. 0 ) return
-c
-c     le triangle s1 s2 nm2  ou arete1 arete2 arete3
-      do 20 i=1,2
-c        nosotr(i) est le numero du sommet 1 de l'arete i du te
-         if( nosotr(i) .eq. nosoar(1,nuarco(i)) ) then
-            lesign = 1
-         else
-            lesign = -1
-         endif
-c        l'arete ns1-ns2 dans nosoar est celle du cote du te
-         noartr( i, nutr(1) ) = lesign * nuarco(i)
- 20   continue
-      if( nm2 .eq. nosoar(1,nuarco(3)) ) then
-         lesign =  1
-      else
-         lesign = -1
-      endif
-      noartr( 3, nutr(1) ) = lesign * nuarco(3)
-c
-c     le triangle s1 nm2 nm3
-      noartr( 1, nutr(2) ) = -lesign * nuarco(3)
-      if( nm2 .eq. nosoar(1,nuarco(4)) ) then
-         lesign =  1
-      else
-         lesign = -1
-      endif
-      noartr( 2, nutr(2) ) =  lesign * nuarco(4)
-      noartr( 1, nutr(3) ) = -lesign * nuarco(4)
-      if( nm3 .eq. nosoar(1,nuarco(5)) ) then
-         lesign =  1
-      else
-         lesign = -1
-      endif
-      noartr( 3, nutr(2) ) = lesign * nuarco(5)
-c
-c     le triangle nm2 nm3 s3
-      if( nm2 .eq. nosoar(1,nuarco(6)) ) then
-         lesign =  1
-      else
-         lesign = -1
-      endif
-      noartr( 2, nutr(3) ) =  lesign * nuarco(6)
-      if( nm3 .eq. nosoar(1,nuarco(7)) ) then
-         lesign = -1
-      else
-         lesign =  1
-      endif
-      noartr( 3, nutr(3) ) = lesign * nuarco(7)
-c
-c     triangulation des 3 sous-te par ajout des points internes du te
-      call trpite( letree, pxyd,
-     %             mosoar, mxsoar, n1soar, nosoar,
-     %             moartr, mxartr, n1artr, noartr, noarst,
-     %             nbtr,   nutr,   ierr )
-      end
-
-
-      subroutine f3trte( letree, pxyd,   milieu,
-     %                   mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, mxartr, n1artr, noartr,
-     %                   noarst,
-     %                   nbtr,   nutr,   ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    former les triangles du triangle equilateral letree
-c -----    a partir de 3 milieux des cotes du te
-c          et des points internes au te
-c          ils deviennent tous des sommets des sous-triangles du te
-c
-c entrees:
-c --------
-c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation
-c          si letree(0)>0 alors
-c             letree(0:3) : no (>0) letree des 4 sous-triangles du triangle j
-c          sinon
-c             letree(0:3) :-no pxyd des 1 a 4 points internes au triangle j
-c                           0  si pas de point
-c                         ( le te est une feuille de l'arbre )
-c          letree(4) : no letree du sur-triangle du triangle j
-c          letree(5) : 0 1 2 3 no du sous-triangle j pour son sur-triangle
-c          letree(6:8) : no pxyd des 3 sommets du triangle j
-c pxyd   : tableau des x  y  distance_souhaitee de chaque sommet
-c milieu : milieu(i) numero dans pxyd du milieu de l'arete i du te
-c                    0 si pas de milieu du cote i a ajouter
-c mosoar : nombre maximal d'entiers par arete du tableau nosoar
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c mxartr : nombre maximal de triangles stockables dans le tableau noartr
-c
-c modifies:
-c ---------
-c n1soar : numero de la premiere arete vide dans le tableau nosoar
-c          une arete i de nosoar est vide  <=>  nosoar(1,i)=0
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c          hachage des aretes = (nosoar(1)+nosoar(2)) modulo mxsoar
-c          sommet 1 = 0 si arete vide => sommet 2 = arete vide suivante
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c noarst : noarst(np) numero d'une arete du sommet np
-c
-c sorties:
-c --------
-c nbtr   : nombre de sous-triangles du te, triangulation du te
-c nutr   : numero des nbtr sous-triangles du te dans le tableau noartr
-c ierr   : =0 si pas d'erreur
-c          =1 si le tableau nosoar est sature
-c          =2 si le tableau noartr est sature
-c          =3 si aucun des triangles ne contient l'un des points internes au te
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c....................................................................012
-      double precision  pxyd(3,*)
-      integer           letree(0:8),
-     %                  milieu(3),
-     %                  nosoar(mosoar,mxsoar),
-     %                  noartr(moartr,mxartr),
-     %                  noarst(*),
-     %                  nutr(1:nbtr)
-c
-      integer           nuarco(9)
-c
-c     le numero des 4 triangles a creer dans le tableau noartr
-      do 5 nbtr=1,4
-         if( n1artr .le. 0 ) then
-c           tableau noartr sature
-            ierr = 2
-            return
-         endif
-         nutr(nbtr) = n1artr
-c        le nouveau premier triangle libre dans noartr
-         n1artr = noartr(2,n1artr)
- 5    continue
-      nbtr = 4
-c
-      do 10 i=1,3
-c        le sommet suivant
-         if( i .ne. 3 ) then
-            i1 = i + 1
-         else
-            i1 = 1
-         endif
-c        le sommet precedant
-         if( i .ne. 1 ) then
-            i0 = i - 1
-         else
-            i0 = 3
-         endif
-         i3 = 3 * i
-c
-c        ajout eventuel de l'arete si mi dans nosoar
-         call fasoar( letree(5+i), milieu(i), nutr(i), -1, 0,
-     %                mosoar, mxsoar, n1soar, nosoar, noarst,
-     %                nuarco(i3-2), ierr )
-         if( ierr .ne. 0 ) return
-c
-c        ajout eventuel de l'arete mi mi-1 dans nosoar
-         call fasoar( milieu(i), milieu(i0), nutr(i), nutr(4), 0,
-     %                mosoar, mxsoar, n1soar, nosoar, noarst,
-     %                nuarco(i3-1), ierr )
-         if( ierr .ne. 0 ) return
-c
-c        ajout eventuel de l'arete m i-1  si dans nosoar
-         call fasoar( milieu(i0), letree(5+i), nutr(i), -1, 0,
-     %                mosoar, mxsoar, n1soar, nosoar, noarst,
-     %                nuarco(i3), ierr )
-         if( ierr .ne. 0 ) return
-c
- 10   continue
-c
-c     les 3 sous-triangles pres des sommets
-      do 20 i=1,3
-c        le sommet suivant
-         if( i .ne. 3 ) then
-            i1 = i + 1
-         else
-            i1 = 1
-         endif
-c        le sommet precedant
-         if( i .ne. 1 ) then
-            i0 = i - 1
-         else
-            i0 = 3
-         endif
-         i3 = 3 * i
-c
-c        ajout du triangle  arete3i-2 arete3i-1 arete3i
-         if( letree(5+i) .eq. nosoar(1,nuarco(i3-2)) ) then
-            lesign =  1
-         else
-            lesign = -1
-         endif
-         noartr( 1, nutr(i) ) = lesign * nuarco(i3-2)
-c
-         if( milieu(i) .eq. nosoar(1,nuarco(i3-1)) ) then
-            lesign =  1
-         else
-            lesign = -1
-         endif
-         noartr( 2, nutr(i) ) = lesign * nuarco(i3-1)
-c
-         if( milieu(i0) .eq. nosoar(1,nuarco(i3)) ) then
-            lesign =  1
-         else
-            lesign = -1
-         endif
-         noartr( 3, nutr(i) ) = lesign * nuarco(i3)
-c
- 20   continue
-c
-c     le sous triangle central
-      i3 = -1
-      do 30 i=1,3
-         i3 = i3 + 3
-         if( milieu(i) .eq. nosoar(1,nuarco(i3)) ) then
-            lesign = -1
-         else
-            lesign =  1
-         endif
-         noartr( i, nutr(4) ) = lesign * nuarco(i3)
- 30   continue
-c
-c     triangulation des 3 sous-te par ajout des points internes du te
-      call trpite( letree, pxyd,
-     %             mosoar, mxsoar, n1soar, nosoar,
-     %             moartr, mxartr, n1artr, noartr, noarst,
-     %             nbtr,   nutr,   ierr )
-      end
-
-
-
-      subroutine hasoar( mosoar, mxsoar, n1soar, nosoar, nu2sar,
-     %                   noar )
-c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    rechercher le numero des 2 sommets d'une arete parmi
-c -----    les numeros des 2 sommets des aretes du tableau nosoar
-c          s ils n y sont pas stockes les y ajouter
-c          dans tous les cas retourner le numero de l'arete dans nosoar
-c
-c          la methode employee ici est celle du hachage
-c          avec pour fonction d'adressage h(ns1,ns2)=min(ns1,ns2)
-c
-c          remarque: h(ns1,ns2)=ns1 + 2*ns2
-c                    ne marche pas si des aretes sont detruites
-c                    et ajoutees aux aretes vides
-c                    le chainage est commun a plusieurs hachages!
-c                    d'ou ce choix du minimum pour le hachage
-c
-c entrees:
-c --------
-c mosoar : nombre maximal d'entiers par arete et
-c          indice dans nosoar de l'arete suivante dans le hachage
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c          attention: mxsoar>3*mxsomm obligatoire!
-c
-c modifies:
-c ---------
-c n1soar : numero de la premiere arete vide dans le tableau nosoar
-c          une arete i de nosoar est vide  <=>  nosoar(1,i)=0
-c          chainage des aretes vides amont et aval
-c          l'arete vide qui precede=nosoar(4,i)
-c          l'arete vide qui suit   =nosoar(5,i)
-c nosoar : numero des 2 sommets, no ligne, 2 triangles de l'arete,
-c          chainage momentan'e d'aretes, chainage du hachage des aretes
-c          hachage des aretes = min( nosoar(1), nosoar(2) )
-c nu2sar : en entree les 2 numeros des sommets de l'arete
-c          en sortie nu2sar(1)<nu2sar(2) numeros des 2 sommets de l'arete
-c
-c sorties:
-c --------
-c noar   : numero dans nosoar de l'arete apres hachage
-c          =0 si saturation du tableau nosoar
-c          >0 si le tableau nu2sar est l'arete noar retrouvee
-c             dans le tableau nosoar
-c          <0 si le tableau nu2sar a ete ajoute et forme l'arete
-c             -noar du tableau nosoar avec nosoar(1,noar)<nosoar(2,noar)
-c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique upmc paris       mars 1997
-c ...................................................................012
-      integer  nu2sar(2), nosoar(mosoar,mxsoar)
-c
-      if( nu2sar(1) .gt. nu2sar(2) ) then
-c
-c        permutation des numeros des 2 sommets pour
-c        amener le plus petit dans nu2sar(1)
-         i         = nu2sar(1)
-         nu2sar(1) = nu2sar(2)
-         nu2sar(2) = i
-      endif
-c
-c     la fonction d'adressage du hachage des aretes : h(ns1,ns2)=min(ns1,ns2)
-c     ===============================================
-      noar = nu2sar(1)
-c
-c     la recherche de l'arete dans le chainage du hachage
-c     ---------------------------------------------------
- 10   if( nu2sar(1) .eq. nosoar(1,noar) ) then
-         if( nu2sar(2) .eq. nosoar(2,noar) ) then
-c
-c           l'arete est retrouvee
-c           .....................
-            return
-         endif
-      endif
-c
-c     l'arete suivante parmi celles ayant meme fonction d'adressage
-      i = nosoar( mosoar, noar )
-      if( i .gt. 0 ) then
-         noar = i
-         goto 10
-      endif
-c
-c     noar est ici la derniere arete (sans suivante) du chainage
-c     a partir de l'adressage du hachage
-c
-c     l'arete non retrouvee doit etre ajoutee
-c     .......................................
-      if( nosoar( 1, nu2sar(1) ) .eq. 0 ) then
-c
-c        l'adresse de hachage est libre => elle devient la nouvelle arete
-c        retouche des chainages de cette arete noar qui ne sera plus vide
-         noar = nu2sar(1)
-c        l'eventuel chainage du hachage n'est pas modifie
-c
-      else
-c
-c        la premiere arete dans l'adressage du hachage n'est pas libre
-c        => choix quelconque d'une arete vide pour ajouter cette arete
-         if( n1soar .le. 0 ) then
-c
-c           le tableau nosoar est sature avec pour temoin d'erreur
-            noar = 0
-            return
-c
-         else
-c
-c           l'arete n1soar est vide => c'est la nouvelle arete
-c           mise a jour du chainage de la derniere arete noar du chainage
-c           sa suivante est la nouvelle arete n1soar
-            nosoar( mosoar, noar ) = n1soar
-c
-c           l'arete ajoutee est n1soar
-            noar = n1soar
-c
-c           la nouvelle premiere arete vide
-            n1soar = nosoar( 5, n1soar )
-c
-c           la premiere arete vide n1soar n'a pas d'arete vide precedente
-            nosoar( 4, n1soar ) = 0
-c
-c           noar la nouvelle arete est la derniere du chainage du hachage
-            nosoar( mosoar, noar ) = 0
-c
-         endif
-c
-      endif
-c
-c     les 2 sommets de la nouvelle arete noar
-      nosoar( 1, noar ) = nu2sar(1)
-      nosoar( 2, noar ) = nu2sar(2)
-c
-c     le tableau nu2sar a ete ajoute avec l'indice -noar
-      noar = - noar
-      end
-
-
-      subroutine mt3str( nt, moartr, noartr, mosoar, nosoar,
-     %                   ns1, ns2, ns3 )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but : calcul du numero des 3 sommets du triangle nt du tableau noartr
-c -----
-c
-c entrees:
-c --------
-c nt     : numero du triangle de noartr a traiter
-c moartr : nombre maximal d'entiers par triangle
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1=0 si triangle vide => arete2=triangle vide suivant
-c mosoar : nombre maximal d'entiers par arete
-c nosoar : numero des 2 sommets , no ligne, 2 triangles, chainages en +
-c          sommet 1 = 0 si arete vide => sommet 2 = arete vide suivante
-c
-c sorties:
-c --------
-c ns1,ns2,ns3 : les 3 numeros des sommets du triangle en sens direct
-c
-c si erreur rencontree => ns1 = 0
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc    juillet 1995
-c2345x7..............................................................012
-      common / unites / lecteu, imprim, nunite(30)
-      integer    noartr(moartr,*), nosoar(mosoar,*)
-c
-c     le numero de triangle est il correct  ?
-c     a supprimer apres mise au point
-      if( nt .le. 0 ) then
-c         nblgrc(nrerr) = 1
-c         write(kerr(mxlger)(1:6),'(i6)') nt
-c         kerr(1) = kerr(mxlger)(1:6) //
-c     %           ' no triangle dans noartr incorrect'
-c         call lereur
-         write(imprim,*) nt,' no triangle dans noartr incorrect'
-         ns1 = 0
-         return
-      endif
-c
-      na = noartr(1,nt)
-      if( na .gt. 0 ) then
-c        arete dans le sens direct
-         ns1 = nosoar(1,na)
-         ns2 = nosoar(2,na)
-      else
-c        arete dans le sens indirect
-         ns1 = nosoar(2,-na)
-         ns2 = nosoar(1,-na)
-      endif
-c
-      na = noartr(2,nt)
-      if( na .gt. 0 ) then
-c        arete dans le sens direct => ns3 est le second sommet de l'arete
-         ns3 = nosoar(2,na)
-      else
-c        arete dans le sens indirect => ns3 est le premier sommet de l'arete
-         ns3 = nosoar(1,-na)
-      endif
-      end
-
-      subroutine trpite( letree, pxyd,
-     %                   mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, mxartr, n1artr, noartr,
-     %                   noarst,
-     %                   nbtr,   nutr,   ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    former le ou les sous-triangles des nbtr triangles nutr
-c -----    qui forment le triangle equilateral letree par ajout
-c          des points internes au te qui deviennent des sommets des
-c          sous-triangles des nbtr triangles
-c
-c entrees:
-c --------
-c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation
-c          letree(0:3):-no pxyd des 1 a 4 points internes au triangle j
-c                       0  si pas de point
-c                     ( le te est ici une feuille de l'arbre )
-c          letree(4) : no letree du sur-triangle du triangle j
-c          letree(5) : 0 1 2 3 no du sous-triangle j pour son sur-triangle
-c          letree(6:8) : no pxyd des 3 sommets du triangle j
-c pxyd   : tableau des x  y  distance_souhaitee de chaque sommet
-c mosoar : nombre maximal d'entiers par arete du tableau nosoar
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c mxartr : nombre maximal de triangles stockables dans le tableau noartr
-c
-c modifies:
-c ---------
-c n1soar : numero de la premiere arete vide dans le tableau nosoar
-c          une arete i de nosoar est vide  <=>  nosoar(1,i)=0
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c          hachage des aretes = (nosoar(1)+nosoar(2)) modulo mxsoar
-c          sommet 1 = 0 si arete vide => sommet 2 = arete vide suivante
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c noarst : noarst(i) numero d'une arete de sommet i
-c
-c sorties:
-c --------
-c nbtr   : nombre de sous-triangles du te
-c nutr   : numero des nbtr sous-triangles du te dans le tableau noartr
-c ierr   : =0 si pas d'erreur
-c          =1 si le tableau nosoar est sature
-c          =2 si le tableau noartr est sature
-c          =3 si aucun des triangles ne contient l'un des points internes au te
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c....................................................................012
-      common / unites / lecteu, imprim, nunite(30)
-      double precision  pxyd(3,*)
-      integer           letree(0:8),
-     %                  nosoar(mosoar,mxsoar),
-     %                  noartr(moartr,mxartr),
-     %                  noarst(*),
-     %                  nutr(1:nbtr)
-c
-      integer           nosotr(3)
-c
-      ierr = 0
-c
-c     si pas de point interne alors retour
-      if( letree(0) .eq. 0 ) goto 150
-c
-c     il existe au moins un point interne a trianguler
-c     dans les nbtr triangles
-      do 100 k=0,3
-c
-c        le numero du point
-         np = -letree(k)
-         if( np .eq. 0 ) goto 150
-c
-c        le point np dans pxyd est a traiter
-         do 10 n = 1, nbtr
-c
-c           les numeros des 3 sommets du triangle nt=nutr(n)
-            nt = nutr(n)
-            call nusotr( nt, mosoar, nosoar, moartr, noartr,  nosotr )
-c
-c           le triangle nt contient il le point np?
-            call ptdatr( pxyd(1,np), pxyd, nosotr, nsigne )
-c           nsigne>0 si le point est dans le triangle ou sur une des 3 aretes
-c                 =0 si triangle degenere ou indirect ou ne contient pas le poin
-c
-            if( nsigne .gt. 0 ) then
-c
-c              le triangle nt est triangule en 3 sous-triangles
-               call tr3str( np, nt,
-     %                      mosoar, mxsoar, n1soar, nosoar,
-     %                      moartr, mxartr, n1artr, noartr,
-     %                      noarst,
-     %                      nutr(nbtr+1),  ierr )
-               if( ierr .ne. 0 ) return
-c
-c              reamenagement des 3 triangles crees dans nutr
-c              en supprimant le triangle nt
-               nutr( n ) = nutr( nbtr + 3 )
-               nbtr = nbtr + 2
-c              le point np est triangule
-               goto 100
-c
-            endif
- 10      continue
-c
-c        erreur: le point np n'est pas dans l'un des nbtr triangles
-         write(imprim,10010) np
-         ierr = 3
-         return
-c
- 100  continue
-10010 format(' erreur trpite: pas de triangle contenant le point',i7)
-c
- 150  continue
-      end
-
-
-      subroutine sasoar( noar, mosoar, mxsoar, n1soar, nosoar, noarst )
-c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    supprimer l'arete noar du tableau nosoar
-c -----    si celle ci n'est pas une arete des lignes de la fontiere
-c
-c          la methode employee ici est celle du hachage
-c          avec pour fonction d'adressage h = min( nu2sar(1), nu2sar(2) )
-c
-c          attention: il faut mettre a jour le no d'arete des 2 sommets
-c                     de l'arete supprimee dans le tableau noarst!
-c
-c entrees:
-c --------
-c noar   : numero de l'arete de nosoar a supprimer
-c mosoar : nombre maximal d'entiers par arete et
-c          indice dans nosoar de l'arete suivante dans le hachage h
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c          attention: mxsoar>3*mxsomm obligatoire!
-c
-c modifies:
-c ---------
-c n1soar : no de l'eventuelle premiere arete libre dans le tableau nosoar
-c          chainage des vides suivant en 3 et precedant en 2 de nosoar
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c          une arete i de nosoar est vide <=> nosoar(1,i)=0 et
-c          nosoar(4,arete vide)=l'arete vide qui precede
-c          nosoar(5,arete vide)=l'arete vide qui suit
-c noarst : numero d'une arete de nosoar pour chaque sommet
-c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet analyse numerique    upmc paris  mars    1997
-c modifs : alain perronnet laboratoire jl lions upmc paris  octobre 2006
-c ...................................................................012
-      common / unites / lecteu, imprim, nunite(30)
-      integer           nosoar(mosoar,mxsoar), noarst(*), ns(2)
-c
-c     13/10/2006
-c     mise a jour de noarst pour les 2 sommets de l'arete a supprimer
-c     necessaire uniquement pour les sommets frontaliers et internes imposes
-c     le numero des 2 sommets de l'arete noar a supprimer
-      ns(1) = nosoar(1,noar)
-      ns(2) = nosoar(2,noar)
-      do 8 k=1,2
-         if( noarst(ns(k)) .eq. noar ) then
-c           il faut remettre a jour le pointeur sur une arete
-            if(nosoar(1,ns(k)).eq.ns(k) .and. nosoar(2,ns(k)).gt.0
-     %         .and. nosoar(4,ns(k)) .gt. 0 ) then
-c              arete active de sommet ns(k)
-               noarst( ns(k) ) = ns(k)
-            else
-               do 5 i=1,mxsoar
-                  if( nosoar(1,i).gt.0 .and. nosoar(4,i).gt.0 ) then
-c                    arete non vide
-                     if( nosoar(2,i).eq.ns(k) .or.
-     %                  (nosoar(1,i).eq.ns(k).and.nosoar(2,i).gt.0))then
-c                       arete active de sommet ns(k)
-                        noarst( ns(k) ) = i
-                        goto 8
-                     endif
-                  endif
- 5             continue
-            endif
-         endif
- 8    continue
-c     13/10/2006
-c
-      if( nosoar(3,noar) .le. 0 ) then
-c
-c        l'arete n'est pas frontaliere => elle devient une arete vide
-c
-c        recherche de l'arete qui precede dans le chainage du hachage
-         noar1 = nosoar(1,noar)
-c
-c        parcours du chainage du hachage jusqu'a retrouver l'arete noar
- 10      if( noar1 .ne. noar ) then
-c
-c           l'arete suivante parmi celles ayant meme fonction d'adressage
-            noar0 = noar1
-            noar1 = nosoar( mosoar, noar1 )
-            if( noar1 .gt. 0 ) goto 10
-c
-c           l'arete noar n'a pas ete retrouvee dans le chainage => erreur
-            write(imprim,*) 'erreur sasoar:arete non dans le chainage '
-     %                      ,noar
-            write(imprim,*) 'arete de st1=',nosoar(1,noar),
-     %      ' st2=',nosoar(2,noar),' ligne=',nosoar(3,noar),
-     %      ' tr1=',nosoar(4,noar),' tr2=',nosoar(5,noar)
-            write(imprim,*) 'chainages=',(nosoar(i,noar),i=6,mosoar)
-ccc            pause
-c           l'arete n'est pas detruite
-            return
-c
-         endif
-c
-         if( noar .ne. nosoar(1,noar) ) then
-c
-c           saut de l'arete noar dans le chainage du hachage
-c           noar0 initialisee est ici l'arete qui precede noar dans ce chainage
-            nosoar( mosoar, noar0 ) = nosoar( mosoar, noar )
-c
-c           le chainage du hachage n'existe plus pour noar
-c           pas utile car mise a zero faite dans le sp hasoar
-ccc         nosoar( mosoar, noar ) = 0
-c
-c           noar devient la nouvelle premiere arete du chainage des vides
-            nosoar( 4, noar ) = 0
-            nosoar( 5, noar ) = n1soar
-c           la nouvelle precede l'ancienne premiere
-            nosoar( 4, n1soar ) = noar
-            n1soar = noar
-c
-ccc      else
-c
-c           noar est la premiere arete du chainage du hachage h
-c           cette arete ne peut etre consideree dans le chainage des vides
-c           car le chainage du hachage doit etre conserve (sinon perte...)
-c
-         endif
-c
-c        le temoin d'arete vide
-         nosoar( 1, noar ) = 0
-      endif
-      end
-
-
-      subroutine caetoi( noar,   mosoar, mxsoar, n1soar, nosoar, noarst,
-     %                   n1aeoc, nbtrar  )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    ajouter (ou retirer) l'arete noar de nosoar de l'etoile
-c -----    des aretes simples chainees en position lchain de nosoar
-c          detruire du tableau nosoar les aretes doubles
-c
-c          attention: le chainage lchain de nosoar devient celui des cf
-c
-c entree :
-c --------
-c noar   : numero dans le tableau nosoar de l'arete a traiter
-c mosoar : nombre maximal d'entiers par arete et
-c          indice dans nosoar de l'arete suivante dans le hachage
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c          attention: mxsoar>3*mxsomm obligatoire!
-c
-c entrees et sorties:
-c -------------------
-c n1soar : numero de la premiere arete vide dans le tableau nosoar
-c          une arete i de nosoar est vide  <=>  nosoar(1,i)=0
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c n1aeoc : numero dans nosoar de la premiere arete simple de l'etoile
-c
-c sortie :
-c --------
-c nbtrar : 1 si arete ajoutee, 2 si arete double supprimee, 0 si erreur
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc       mars 1997
-c2345x7..............................................................012
-      parameter        (lchain=6)
-      common / unites / lecteu, imprim, nunite(30)
-      integer           nosoar(mosoar,mxsoar), noarst(*)
-c
-c     si    l'arete n'appartient pas aux aretes de l'etoile naetoi
-c     alors elle est ajoutee a l'etoile dans naetoi
-c     sinon elle est empilee dans npile pour etre detruite ensuite
-c           elle est supprimee de l'etoile naetoi
-c
-      if( nosoar( lchain, noar ) .lt. 0 ) then
-c
-c        arete de l'etoile vue pour la premiere fois
-c        elle est ajoutee au chainage
-         nosoar( lchain, noar ) = n1aeoc
-c        elle devient la premiere du chainage
-         n1aeoc = noar
-c        arete simple
-         nbtrar = 1
-c
-      else
-c
-c        arete double de l'etoile. elle est supprimee du chainage
-         na0 = 0
-         na  = n1aeoc
-         nbpass = 0
-c        parcours des aretes chainees jusqu'a trouver l'arete noar
- 10      if( na .ne. noar ) then
-c           passage a la suivante
-            na0 = na
-            na  = nosoar( lchain, na )
-            if( na .le. 0 ) then
-               nbtrar = 0
-               return
-            endif
-            nbpass = nbpass + 1
-            if( nbpass .gt. 512 ) then
-               write(imprim,*)'Pb dans caetoi: boucle infinie evitee'
-               nbtrar = 0
-               return
-            endif
-            goto 10
-         endif
-c
-c        suppression de noar du chainage des aretes simples de l'etoile
-         if( na0 .gt. 0 ) then
-c           il existe une arete qui precede
-            nosoar( lchain, na0 ) = nosoar( lchain, noar )
-         else
-c           noar est en fait n1aeoc la premiere du chainage
-            n1aeoc = nosoar( lchain, noar )
-         endif
-c        noar n'est plus une arete simple de l'etoile
-         nosoar( lchain, noar ) = -1
-c
-c        destruction du tableau nosoar de l'arete double noar
-         call sasoar( noar, mosoar, mxsoar, n1soar, nosoar, noarst )
-c
-c        arete double
-         nbtrar = 2
-      endif
-      end
-
-
-      subroutine focftr( nbtrcf, notrcf, nbarpi, pxyd,   noarst,
-     %                   mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, n1artr, noartr,
-     %                   nbarcf, n1arcf, noarcf, nbstpe, nostpe,
-     %                   ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    former un contour ferme (cf) avec les aretes simples des
-c -----    nbtrcf triangles du tableau notrcf
-c          destruction des nbtrcf triangles du tableau noartr
-c          destruction des aretes doubles   du tableau nosoar
-c
-c          attention: le chainage lchain de nosoar devient celui des cf
-c
-c entrees:
-c --------
-c nbtrcf : nombre de  triangles du cf a former
-c notrcf : numero des triangles dans le tableau noartr
-c nbarpi : numero du dernier sommet frontalier ou interne impose
-c pxyd   : tableau des coordonnees 2d des points
-c          par point : x  y  distance_souhaitee
-c
-c mosoar : nombre maximal d'entiers par arete et
-c          indice dans nosoar de l'arete suivante dans le hachage
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c          attention: mxsoar>3*mxsomm obligatoire!
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c
-c entrees et sorties :
-c --------------------
-c noarst : noarst(i) numero d'une arete de sommet i
-c n1soar : numero de la premiere arete vide dans le tableau nosoar
-c          une arete i de nosoar est vide  <=>  nosoar(1,i)=0
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c          hachage des aretes = nosoar(1)+nosoar(2)*2
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c
-c sorties:
-c --------
-c nbarcf : nombre d'aretes du cf
-c n1arcf : numero d'une arete de chaque contour
-c noarcf : numero des aretes de la ligne du contour ferme
-c attention: chainage circulaire des aretes
-c            les aretes vides pointes par n1arcf(0) ne sont pas chainees
-c nbstpe : nombre de  sommets perdus dans la suppression des triangles
-c nostpe : numero des sommets perdus dans la suppression des triangles 
-c ierr   :  0 si pas d'erreur
-c          14 si les lignes fermees se coupent => donnees a revoir
-c          15 si une seule arete simple frontaliere
-c          16 si boucle infinie car toutes les aretes simples
-c                de la boule sont frontalieres!
-c          17 si boucle infinie dans caetoi
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet analyse numerique    upmc paris  mars    1997
-c modifs : alain perronnet laboratoire jl lions upmc paris  octobre 2006
-c....................................................................012
-      parameter        (lchain=6, mxstpe=512)
-      common / unites / lecteu, imprim, nunite(30)
-      double precision  pxyd(3,*)
-      integer           notrcf(1:nbtrcf)
-      integer           nosoar(mosoar,mxsoar),
-     %                  noartr(moartr,*),
-     %                  n1arcf(0:*),
-     %                  noarcf(3,*),
-     %                  noarst(*),
-     %                  nostpe(mxstpe),
-     %                  nosotr(3)
-c
-c     formation des aretes simples du cf autour de l'arete ns1-ns2
-c     attention: le chainage lchain du tableau nosoar devient actif
-c     ============================================================
-c     ici toutes les aretes du tableau nosoar verifient nosoar(lchain,i) = -1
-c     ce qui equivaut a dire que l'etoile des aretes simples est vide
-c     (initialisation dans le sp insoar puis remise a -1 dans la suite!)
-      n1aeoc = 0
-      ierr   = 0
-c
-c     13/10/2006
-c     nombre de sommets des triangles a supprimer sans repetition
-      nbst = 0
-c     13/10/2006
-c
-c     ajout a l'etoile des aretes simples des 3 aretes des triangles a supprimer
-c     suppression des triangles de l'etoile pour les aretes simples de l'etoile
-      do 10 i=1,nbtrcf
-c
-c        ajout ou retrait des 3 aretes du triangle notrcf(i) de l'etoile
-         nt = notrcf( i )
-c
-c        13/10/2006  ...............................................
-         call nusotr( nt, mosoar, nosoar, moartr, noartr, nosotr )
-c
-c        ajout des numeros de sommets non encore vus dans l'etoile
-         do 3 k=1,3
-            do 2 j=1,nbst
-               if( nosotr(k) .eq. nostpe(j) ) goto 3
- 2          continue
-c           ajout du sommet
-            nbst = nbst + 1
-            nostpe( nbst ) = nosotr(k)
- 3       continue
-c        13/10/2006 ................................................
-c
-         do 5 j=1,3
-c           l'arete de nosoar a traiter
-            noar = abs( noartr(j,nt) )
-            call caetoi( noar,   mosoar, mxsoar, n1soar, nosoar, noarst,
-     %                   n1aeoc, nbtrar  )
-            if( nbtrar .le. 0 ) then
-               write(imprim,*)'focftr: erreur dans caetoi noar=',noar
-               ierr = 17
-               return
-            endif
-c           si arete simple alors suppression du numero de triangle
-c           pour cette arete
-            if( nbtrar .eq. 1 ) then
-               if( nosoar(4,noar) .eq. nt ) then
-                  nosoar(4,noar) = nosoar(5,noar)
-               else if( nosoar(5,noar) .eq. nt ) then
-                  nosoar(5,noar) = -1
-               else
-                  write(imprim,*)'focftr: anomalie arete',noar,
-     %                           ' sans triangle',nt
-                  write(imprim,*)'focftr: nosoar(',noar,')=',
-     %                            (nosoar(kk,noar),kk=1,mosoar)
-                  nosoar(5,noar) = -1
-               endif
-c           else
-c              l'arete appartient a aucun triangle => elle est vide
-c              les positions 4 et 5 servent maintenant aux chainages des vides
-            endif
-  5      continue
- 10   continue
-c
-c     les aretes simples de l'etoile sont reordonnees pour former une
-c     ligne fermee = un contour ferme peripherique de l'etoile encore dit 1 cf
-c     ========================================================================
-      n1ae00 = n1aeoc
- 12   na1    = n1aeoc
-c     la premiere arete du contour ferme
-      ns0 = nosoar(1,na1)
-      ns1 = nosoar(2,na1)
-c
-c     l'arete est-elle dans le sens direct?
-c     recherche de l'arete du triangle exterieur nt d'arete na1
-      nt = nosoar(4,na1)
-      if( nt .le. 0 ) nt = nosoar(5,na1)
-c
-c     attention au cas de l'arete initiale frontaliere de no de triangles 0 et -
-      if( nt .le. 0 ) then
-c        permutation circulaire des aretes simples chainees
-c        la premiere arete doit devenir la derniere du chainage,
-c        la 2=>1, la 3=>2, ... , la derniere=>l'avant derniere, 1=>derniere
-         n1aeoc = nosoar( lchain, n1aeoc )
-         if( n1aeoc .eq. n1ae00 ) then
-c           attention: boucle infinie si toutes les aretes simples
-c           de la boule sont frontalieres!... arretee par ce test
-            ierr = 16
-            write(imprim,*)'focftr: boucle dans les aretes de l etoile'
-            return
-         endif
-         noar = n1aeoc
-         na0  = 0
- 14      if( noar .gt. 0 ) then
-c           la sauvegarde de l'arete et l'arete suivante
-            na0  = noar
-            noar = nosoar(lchain,noar)
-            goto 14
-         endif
-         if( na0 .le. 0 ) then
-c           une seule arete simple frontaliere
-            ierr = 15
-            write(imprim,*)'focftr: 1 arete seule pour l etoile'
-            return
-         endif
-c        le suivant de l'ancien dernier est l'ancien premier
-         nosoar(lchain,na0) = na1
-c        le nouveau dernier est l'ancien premier
-         nosoar(lchain,na1) = 0
-         goto 12
-      endif
-c
-c     ici l'arete na1 est l'une des aretes du triangle nt
-      do 15 i=1,3
-         if( abs(noartr(i,nt)) .eq. na1 ) then
-c           c'est l'arete
-            if( noartr(i,nt) .gt. 0 ) then
-c              elle est parcourue dans le sens indirect de l'etoile
-c             (car c'est en fait le triangle exterieur a la boule)
-               ns0 = nosoar(2,na1)
-               ns1 = nosoar(1,na1)
-            endif
-            goto 17
-         endif
- 15   continue
-c
-c     le 1-er sommet ou arete du contour ferme
- 17   n1arcf( 1 ) = 1
-c     le nombre de sommets du contour ferme de l'etoile
-      nbarcf = 1
-c     le premier sommet de l'etoile
-      noarcf( 1, nbarcf ) = ns0
-c     l'arete suivante du cf
-      noarcf( 2, nbarcf ) = nbarcf + 1
-c     le numero de cette arete dans le tableau nosoar
-      noarcf( 3, nbarcf ) = na1
-c     mise a jour du numero d'arete du sommet ns0
-      noarst(ns0) = na1
-c
-c     l'arete suivante a chainer
-      n1aeoc = nosoar( lchain, na1 )
-c     l'arete na1 n'est plus dans l'etoile
-      nosoar( lchain, na1 ) = -1
-c
-c     boucle sur les aretes simples de l'etoile
- 20   if( n1aeoc .gt. 0 ) then
-c
-c        recherche de l'arete de 1-er sommet ns1
-         na0 = -1
-         na1 = n1aeoc
- 25      if( na1 .gt. 0 ) then
-c
-c           le numero du dernier sommet de l'arete precedente
-c           est il l'un des 2 sommets de l'arete na1?
-            if ( ns1 .eq. nosoar(1,na1) ) then
-c               l'autre sommet de l'arete na1
-                ns2 = nosoar(2,na1)
-            else if( ns1 .eq. nosoar(2,na1) ) then
-c               l'autre sommet de l'arete na1
-                ns2 = nosoar(1,na1)
-            else
-c              non: passage a l'arete suivante
-               na0 = na1
-               na1 = nosoar( lchain, na1 )
-               goto 25
-            endif
-c
-c           oui: na1 est l'arete peripherique suivante
-c                na0 est sa precedente dans le chainage
-c           une arete de plus dans le contour ferme (cf)
-            nbarcf = nbarcf + 1
-c           le premier sommet de l'arete nbarcf peripherique
-            noarcf( 1, nbarcf ) = ns1
-c           l'arete suivante du cf
-            noarcf( 2, nbarcf ) = nbarcf + 1
-c           le numero de cette arete dans le tableau nosoar
-            noarcf( 3, nbarcf ) = na1
-c           mise a jour du numero d'arete du sommet ns1
-            noarst(ns1) = na1
-c
-c           suppression de l'arete des aretes simples de l'etoile
-            if( n1aeoc .eq. na1 ) then
-                n1aeoc = nosoar( lchain, na1 )
-            else
-                nosoar( lchain, na0 ) = nosoar( lchain, na1 )
-            endif
-c           l'arete n'est plus une arete simple de l'etoile
-            nosoar( lchain, na1 ) = -1
-c
-c           le sommet final de l'arete a rechercher ensuite
-            ns1 = ns2
-            goto 20
-         endif
-      endif
-c
-c     verification
-      if( ns1 .ne. ns0 ) then
-c        arete non retrouvee : l'etoile ne se referme pas
-         write(imprim,*)'focftr: revoyez vos donnees du bord'
-         write(imprim,*)'les lignes fermees doivent etre disjointes'
-         write(imprim,*)'verifiez si elles ne se coupent pas'
-         ierr = 14
-         return
-      endif
-c
-c     l'arete suivant la derniere arete du cf est la premiere du cf
-c     => realisation d'un chainage circulaire des aretes du cf
-      noarcf( 2, nbarcf ) = 1
-c
-c     13/10/2006
-c     existe t il des sommets perdus?
-c     -------------------------------
-      if( nbst .gt. mxstpe ) then
-         write(imprim,*)'focftr: tableau nostfe(',mxstpe,') a augmenter'
-         ierr = 15
-         return
-      endif
-c     le nombre de sommets perdus
-      nbstpe = nbst - nbarcf
-      if( nbstpe .gt. 0 ) then
-c        oui: stockage dans nostpe des sommets perdus
-c        tout sommet des aretes de l'etoile est supprime
-c        de la liste des sommets
-         do 40 i=1,nbarcf
-c           le numero du sommet de l'arete du cf
-            ns1 = noarcf( 1, i )
-            do 30 j=1,nbst
-               if( ns1 .eq. nostpe(j) ) then
-c                 le sommet peripherique est supprime
-c                 de la liste des sommets perdus
-                  nostpe(j) = 0
-                  goto 40
-               endif
- 30         continue
- 40      continue
-c
-c        compression
-         n = 0
-         do 45 i=1,nbst
-            if( nostpe(i) .eq. 0 .or. nostpe(i) .gt. nbarpi ) then
-c              un sommet de l'etoile ou perdu mais supprimable
-c              ce qui apporte plus de qualites aux triangles a former
-               n = n + 1
-            else
-c              un sommet perdu
-               nostpe(i-n) = nostpe(i)
-            endif
- 45      continue
-         nbstpe = nbst - n
-ccc      write(imprim,*)'focftr:',nbstpe,' sommets isoles:',(nostpe(k),k=1,nbstpe)
-      endif
-c     13/10/2006
-c
-c     destruction des triangles de l'etoile du tableau noartr
-c     -------------------------------------------------------
-      do 60 n=1,nbtrcf
-c        le numero du triangle dans noartr
-         nt0 = notrcf( n )
-c        l'arete 1 de nt0 devient nulle
-         noartr( 1, nt0 ) = 0
-c        chainage de nt0 en tete du chainage des triangles vides de noartr
-         noartr( 2, nt0 ) = n1artr
-         n1artr = nt0
- 60   continue
-      end
-
-
-      subroutine int1sd( ns1, ns2, ns3, ns4, pxyd, linter, x0, y0 )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    existence ou non  d'une intersection a l'interieur
-c -----    des 2 aretes ns1-ns2 et ns3-ns4
-c          attention les intersections au sommet sont comptees
-c
-c entrees:
-c --------
-c ns1,...ns4 : numero pxyd des 4 sommets
-c pxyd   : les coordonnees des sommets
-c
-c sortie :
-c --------
-c linter : -1 si ns3-ns4 parallele a ns1 ns2
-c           0 si ns3-ns4 n'intersecte pas ns1-ns2 entre les aretes
-c           1 si ns3-ns4   intersecte     ns1-ns2 entre les aretes
-c           2 si le point d'intersection est ns1  entre ns3-ns4
-c           3 si le point d'intersection est ns3  entre ns1-ns2
-c           4 si le point d'intersection est ns4  entre ns1-ns2
-c x0,y0  :  2 coordonnees du point d'intersection s'il existe(linter>=1)
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc    fevrier 1992
-c2345x7..............................................................012
-      parameter        ( epsmoi=-0.000001d0, eps=0.001d0,
-     %                   unmeps= 0.999d0, unpeps=1.000001d0 )
-      double precision  pxyd(3,*), x0, y0
-      double precision  x1,y1,x21,y21,d21,x43,y43,d43,d,x,y,p21,p43
-c
-      x1  = pxyd(1,ns1)
-      y1  = pxyd(2,ns1)
-      x21 = pxyd(1,ns2) - x1
-      y21 = pxyd(2,ns2) - y1
-      d21 = x21**2 + y21**2
-c
-      x43 = pxyd(1,ns4) - pxyd(1,ns3)
-      y43 = pxyd(2,ns4) - pxyd(2,ns3)
-      d43 = x43**2 + y43**2
-c
-c     les 2 aretes sont-elles jugees paralleles ?
-      d = x43 * y21 - y43 * x21
-      if( d*d .le. 0.000001d0 * d21 * d43 ) then
-c        cote i parallele a ns1-ns2
-         linter = -1
-         return
-      endif
-c
-c     les 2 coordonnees du point d'intersection
-      x =( x1*x43*y21-pxyd(1,ns3)*x21*y43-(y1-pxyd(2,ns3))*x21*x43)/d
-      y =(-y1*y43*x21+pxyd(2,ns3)*y21*x43+(x1-pxyd(1,ns3))*y21*y43)/d
-c
-c     coordonnee barycentrique de x,y dans le repere ns1-ns2
-      p21 = ( ( x - x1 )       * x21 + ( y - y1 )        * y21 ) / d21
-c     coordonnee barycentrique de x,y dans le repere ns3-ns4
-      p43 = ( (x - pxyd(1,ns3))* x43 + (y - pxyd(2,ns3)) * y43 ) / d43
-c
-c
-      if( epsmoi .le. p21 .and. p21 .le. unpeps ) then
-c        x,y est entre ns1-ns2
-         if( (p21 .le. eps)  .and.
-     %       (epsmoi .le. p43 .and. p43 .le. unpeps) ) then
-c           le point x,y est proche de ns1 et interne a ns3-ns4
-            linter = 2
-            x0 = pxyd(1,ns1)
-            y0 = pxyd(2,ns1)
-            return
-         else if( epsmoi .le. p43 .and. p43 .le. eps ) then
-c           le point x,y est proche de ns3 et entre ns1-ns2
-            linter = 3
-            x0 = pxyd(1,ns3)
-            y0 = pxyd(2,ns3)
-            return
-         else if( unmeps .le. p43 .and. p43 .le. unpeps ) then
-c           le point x,y est proche de ns4 et entre ns1-ns2
-            linter = 4
-            x0 = pxyd(1,ns4)
-            y0 = pxyd(2,ns4)
-            return
-         else if( eps .le. p43 .and. p43 .le. unmeps ) then
-c           le point x,y est entre ns3-ns4
-            linter = 1
-            x0     = x
-            y0     = y
-            return
-         endif
-      endif
-c
-c     pas d'intersection a l'interieur des aretes
-      linter = 0
-      end
-
-      subroutine tefoar( narete, nbarpi, pxyd,
-     %                   mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, mxartr, n1artr, noartr, noarst,
-     %                   mxarcf, n1arcf, noarcf, larmin, notrcf,
-     %                   ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :   forcer l'arete narete de nosoar dans la triangulation actuelle
-c -----   triangulation frontale pour la reobtenir
-c
-c         attention: le chainage lchain(=6) de nosoar devient actif
-c                    durant la formation des contours fermes (cf)
-c
-c entrees:
-c --------
-c narete : numero nosoar de l'arete frontaliere a forcer
-c nbarpi : numero du dernier point interne impose par l'utilisateur
-c pxyd   : tableau des coordonnees 2d des points
-c          par point : x  y  distance_souhaitee
-c
-c mosoar : nombre maximal d'entiers par arete et
-c          indice dans nosoar de l'arete suivante dans le hachage
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c          attention: mxsoar>3*mxsomm obligatoire!
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c mxartr : nombre maximal de triangles stockables dans le tableau noartr
-c
-c modifies:
-c ---------
-c n1soar : no de l'eventuelle premiere arete libre dans le tableau nosoar
-c          chainage des vides suivant en 3 et precedant en 2 de nosoar
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c          hachage des aretes = nosoar(1)+nosoar(2)*2
-c          avec mxsoar>=3*mxsomm
-c          une arete i de nosoar est vide <=> nosoar(1,i)=0 et
-c          nosoar(2,arete vide)=l'arete vide qui precede
-c          nosoar(3,arete vide)=l'arete vide qui suit
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c noarst : noarst(i) numero d'une arete de sommet i
-c
-c mxarcf : nombre de variables des tableaux n1arcf, noarcf, larmin, notrcf
-c
-c tableaux auxiliaires :
-c ----------------------
-c n1arcf : tableau (0:mxarcf) auxiliaire
-c noarcf : tableau (3,mxarcf) auxiliaire
-c larmin : tableau (mxarcf)   auxiliaire
-c notrcf : tableau (1:mxarcf) auxiliaire
-c
-c sortie :
-c --------
-c ierr   : 0 si pas d'erreur
-c          1 saturation des sommets
-c          2 ns1 dans aucun triangle
-c          9 tableau nosoar de taille insuffisante car trop d'aretes
-c            a probleme
-c          10 un des tableaux n1arcf, noarcf notrcf est sature
-c             augmenter a l'appel mxarcf
-c         >11 algorithme defaillant
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet analyse numerique paris upmc     mars    1997
-c modifs : alain perronnet laboratoire jl lions upmc paris  octobre 2006
-c....................................................................012
-      parameter        (mxpitr=32, mxstpe=512)
-      common / unites / lecteu,imprim,intera,nunite(29)
-      double precision  pxyd(3,*)
-      integer           noartr(moartr,mxartr),
-     %                  nosoar(mosoar,mxsoar),
-     %                  noarst(*),
-     %                  n1arcf(0:mxarcf),
-     %                  noarcf(3,mxarcf),
-     %                  larmin(mxarcf),
-     %                  notrcf(mxarcf),
-     %                  nostpe(mxstpe)
-c
-      integer           lapitr(mxpitr)
-      double precision  x1,y1,x2,y2,d12,d3,d4,x,y,d,dmin
-      integer           nosotr(3), ns(2)
-      integer           nacf(1:2), nacf1, nacf2
-      equivalence      (nacf(1),nacf1), (nacf(2),nacf2)
-c
-      ierr = 0
-c
-c     traitement de cette arete perdue
-      ns1 = nosoar( 1, narete )
-      ns2 = nosoar( 2, narete )
-c
-ccc      write(imprim,*)
-ccc      write(imprim,*) 'tefoar reconstruction de l''arete ',ns1,' ', ns2
-ccc      write(imprim,*) 'sommet',ns1,' x=',pxyd(1,ns1),' y=',pxyd(2,ns1)
-ccc      write(imprim,*) 'sommet',ns2,' x=',pxyd(1,ns2),' y=',pxyd(2,ns2)
-c
-c     le sommet ns2 est il correct?
-      na = noarst( ns2 )
-      if( na .le. 0 ) then
-         write(imprim,*) 'tefoar: erreur sommet ',ns2,' sans arete'
-         ierr = 8
-ccc         pause
-         return
-      endif
-      if( nosoar(4,na) .le. 0 ) then
-         write(imprim,*) 'tefoar: erreur sommet ',ns2,
-     %                   ' dans aucun triangle'
-         ierr = 8
-ccc         pause
-         return
-      endif
-c
-c     le premier passage: recherche dans le sens ns1->ns2
-      ipas = 0
-c
-c     recherche des triangles intersectes par le segment ns1-ns2
-c     ==========================================================
- 3    x1  = pxyd(1,ns1)
-      y1  = pxyd(2,ns1)
-      x2  = pxyd(1,ns2)
-      y2  = pxyd(2,ns2)
-      d12 = (x2-x1)**2 + (y2-y1)**2
-c
-c     recherche du triangle voisin dans le sens indirect de rotation
-      nsens = -1
-c
-c     recherche du no local du sommet ns1 dans l'un de ses triangles
- 10   na01 = noarst( ns1 )
-      if( na01 .le. 0 ) then
-         write(imprim,*) 'tefoar: sommet ',ns1,' sans arete'
-         ierr = 8
-ccc         pause
-         return
-      endif
-      nt0 = nosoar(4,na01)
-      if( nt0 .le. 0 ) then
-         write(imprim,*) 'tefoar: sommet ',ns1,' dans aucun triangle'
-         ierr = 8
-ccc         pause
-         return
-      endif
-c
-c     le numero des 3 sommets du triangle nt0 dans le sens direct
- 20   call nusotr( nt0, mosoar, nosoar, moartr, noartr, nosotr )
-      do 22 na00=1,3
-         if( nosotr(na00) .eq. ns1 ) goto 26
- 22   continue
-c
- 25   if( ipas .eq. 0 ) then
-c        le second passage: recherche dans le sens ns2->ns1
-c        tentative d'inversion des 2 sommets extremites de l'arete a forcer
-         na00 = ns1
-         ns1  = ns2
-         ns2  = na00
-         ipas = 1
-         goto 3
-      else
-c        les sens ns1->ns2 et ns2->ns1 ne donne pas de solution!
-         write(imprim,*)'tefoar:arete ',ns1,' - ',ns2,' a imposer'
-         write(imprim,*)'tefoar:anomalie sommet ',ns1,
-     %   'non dans le triangle de sommets ',(nosotr(i),i=1,3)
-         ierr = 11
-ccc         pause
-         return
-      endif
-c
-c     le numero des aretes suivante et precedente
- 26   na0 = nosui3( na00 )
-      na1 = nopre3( na00 )
-      ns3 = nosotr( na0 )
-      ns4 = nosotr( na1 )
-c
-c     point d'intersection du segment ns1-ns2 avec l'arete ns3-ns4
-c     ------------------------------------------------------------
-      call int1sd( ns1, ns2, ns3, ns4, pxyd, linter, x1, y1 )
-      if( linter .le. 0 ) then
-c
-c        pas d'intersection: rotation autour du point ns1
-c        pour trouver le triangle de l'autre cote de l'arete na01
-         if( nsens .lt. 0 ) then
-c           sens indirect de rotation: l'arete de sommet ns1
-            na01 = abs( noartr(na00,nt0) )
-         else
-c           sens direct de rotation: l'arete de sommet ns1 qui precede
-            na01 = abs( noartr(na1,nt0) )
-         endif
-c        le triangle de l'autre cote de l'arete na01
-         if( nosoar(4,na01) .eq. nt0 ) then
-            nt0 = nosoar(5,na01)
-         else
-            nt0 = nosoar(4,na01)
-         endif
-         if( nt0 .gt. 0 ) goto 20
-c
-c        le parcours sort du domaine
-c        il faut tourner dans l'autre sens autour de ns1
-         if( nsens .lt. 0 ) then
-            nsens = 1
-            goto 10
-         endif
-c
-c        dans les 2 sens, pas d'intersection => impossible
-c        essai avec l'arete inversee ns1 <-> ns2
-         if( ipas .eq. 0 ) goto 25
-         write(imprim,*) 'tefoar: arete ',ns1,' ',ns2,
-     %  ' sans intersection avec les triangles actuels'
-         write(imprim,*) 'revoyez les lignes du contour'
-         ierr = 12
-ccc         pause
-         return
-      endif
-c
-c     il existe une intersection avec l'arete opposee au sommet ns1
-c     =============================================================
-c     nbtrcf : nombre de triangles du cf
-      nbtrcf = 1
-      notrcf( 1 ) = nt0
-c
-c     le triangle oppose a l'arete na0 de nt0
- 30   noar = abs( noartr(na0,nt0) )
-      if( nosoar(4,noar) .eq. nt0 ) then
-         nt1 = nosoar(5,noar)
-      else
-         nt1 = nosoar(4,noar)
-      endif
-      if( nt1 .le. 0 ) then
-         write(imprim,*) 'erreur dans tefoar nt1=',nt1
-         read(lecteu,*) j
-      endif
-c
-c     le numero des 3 sommets du triangle nt1 dans le sens direct
-      call nusotr( nt1, mosoar, nosoar, moartr, noartr, nosotr )
-c
-c     le triangle nt1 contient il ns2 ?
-      do 32 j=1,3
-         if( nosotr(j) .eq. ns2 ) goto 70
- 32   continue
-c
-c     recherche de l'arete noar, na1 dans nt1 qui est l'arete na0 de nt0
-      do 34 na1=1,3
-         if( abs( noartr(na1,nt1) ) .eq. noar ) goto 35
- 34   continue
-c
-c     recherche de l'intersection de ns1-ns2 avec les 2 autres aretes de nt1
-c     ======================================================================
- 35   na2 = na1
-      do 50 i1 = 1,2
-c        l'arete suivante
-         na2 = nosui3(na2)
-c
-c        les 2 sommets de l'arete na2 de nt1
-         noar = abs( noartr(na2,nt1) )
-         ns3  = nosoar( 1, noar )
-         ns4  = nosoar( 2, noar )
-c
-c        point d'intersection du segment ns1-ns2 avec l'arete ns3-ns4
-c        ------------------------------------------------------------
-         call int1sd( ns1, ns2, ns3, ns4, pxyd, linter, x , y )
-         if( linter .gt. 0 ) then
-c
-c           les 2 aretes s'intersectent en (x,y)
-c           distance de (x,y) a ns3 et ns4
-            d3 = (pxyd(1,ns3)-x)**2 + (pxyd(2,ns3)-y)**2
-            d4 = (pxyd(1,ns4)-x)**2 + (pxyd(2,ns4)-y)**2
-c           nsp est le point le plus proche de (x,y)
-            if( d3 .lt. d4 ) then
-               nsp = ns3
-               d   = d3
-            else
-               nsp = ns4
-               d   = d4
-            endif
-            if( d .gt. 1d-5*d12 ) goto 60
-c
-c           ici le sommet nsp est trop proche de l'arete perdue ns1-ns2
-            if( nsp .le. nbarpi ) then
-c              point utilisateur ou frontalier donc non supprimable
-               write(imprim,*) 'tefoar: sommet nsp=',nsp,
-     %' frontalier trop proche de l''arete perdue ns1=',ns1,'-ns2=',ns2
-           write(imprim,*)'s',nsp,': x=', pxyd(1,nsp),' y=', pxyd(2,nsp)
-           write(imprim,*)'s',ns1,': x=', pxyd(1,ns1),' y=', pxyd(2,ns1)
-           write(imprim,*)'s',ns2,': x=', pxyd(1,ns2),' y=', pxyd(2,ns2)
-           write(imprim,*)'arete s',ns1,'-s',ns2,
-     %                    ' coupe arete s',ns3,'-s',ns4,' en (x,y)'
-          write(imprim,*) 's',ns3,': x=', pxyd(1,ns3),' y=', pxyd(2,ns3)
-          write(imprim,*) 's',ns4,': x=', pxyd(1,ns4),' y=', pxyd(2,ns4)
-          write(imprim,*) 'intersection en: x=', x, ' y=', y
-          write(imprim,*) 'distance ns1-ns2=', sqrt(d12)
-          write(imprim,*) 'distance (x,y) au plus proche',ns3,ns4,'=',
-     %                     sqrt(d)
-               ierr = 13
-ccc               pause
-               return
-            endif
-c
-c           le sommet interne nsp est supprime en mettant tous les triangles
-c           l'ayant comme sommet dans la pile notrcf des triangles a supprimer
-c           ------------------------------------------------------------------
-ccc            write(imprim,*) 'tefoar: le sommet ',nsp,' est supprime'
-c           construction de la liste des triangles de sommet nsp
-            call trp1st( nsp,    noarst, mosoar, nosoar,
-     %                   moartr, mxartr, noartr,
-     %                   mxpitr, nbt, lapitr )
-            if( nbt .le. 0 ) then
-c              les triangles de sommet nsp ne forme pas une "boule"
-c              avec ce sommet nsp pour "centre"
-               write(imprim,*)
-     %        'tefoar: les triangles autour du sommet ',nsp,
-     %        ' ne forme pas une etoile'
-               nbt = -nbt
-            endif
-c
-c           ajout des triangles de sommet nsp a notrcf
-            nbtrc0 = nbtrcf
-            do 38 j=1,nbt
-               nt = lapitr(j)
-               do 37 k=nbtrcf,1,-1
-                  if( nt .eq. notrcf(k) ) goto 38
- 37            continue
-c              triangle ajoute
-               nbtrcf = nbtrcf + 1
-               notrcf( nbtrcf ) = nt
- 38         continue
-c
-c           ce sommet supprime n'appartient plus a aucun triangle
-            noarst( nsp ) = 0
-c
-c           ns2 est-il un sommet des triangles empiles?
-c           -------------------------------------------
-            do 40 nt=nbtrc0+1,nbtrcf
-c              le triangle a supprimer nt
-               nt1 = notrcf( nt )
-c              le numero des 3 sommets du triangle nt1 dans le sens direct
-               call nusotr( nt1, mosoar, nosoar, moartr, noartr, nosotr)
-               do 39 k=1,3
-c                 le sommet k de nt1
-                  if( nosotr( k ) .eq. ns2 ) then
-c                    but atteint
-                     goto 80
-                  endif
- 39            continue
- 40         continue
-c
-c           recherche du plus proche point d'intersection de ns1-ns2
-c           par rapport a ns2 avec les aretes des triangles ajoutes
-            nt0  = 0
-            dmin = d12 * 10000
-            do 48 nt=nbtrc0+1,nbtrcf
-               nt1 = notrcf( nt )
-c              le numero des 3 sommets du triangle nt1 dans le sens direct
-               call nusotr( nt1, mosoar, nosoar, moartr, noartr, nosotr)
-               do 45 k=1,3
-c                 les 2 sommets de l'arete k de nt
-                  ns3 = nosotr( k )
-                  ns4 = nosotr( nosui3(k) )
-c
-c                 point d'intersection du segment ns1-ns2 avec l'arete ns3-ns4
-c                 ------------------------------------------------------------
-                  call int1sd( ns1, ns2, ns3, ns4, pxyd,
-     %                         linter, x , y )
-                   if( linter .gt. 0 ) then
-c                    les 2 aretes s'intersectent en (x,y)
-                     d = (x-x2)**2+(y-y2)**2
-                     if( d .lt. dmin ) then
-                        nt0  = nt1
-                        na0  = k
-                        dmin = d
-                     endif
-                  endif
- 45            continue
- 48         continue
-c
-c           redemarrage avec le triangle nt0 et l'arete na0
-            if( nt0 .gt. 0 ) goto 30
-c
-            write(imprim,*) 'tefoar: algorithme defaillant'
-            ierr = 14
-ccc            pause
-            return
-         endif
- 50   continue
-c
-c     pas d'intersection differente de l'initiale => sommet sur ns1-ns2
-c     tentative d'inversion des sommets de l'arete ns1-ns2
-      if( ipas .eq. 0 ) goto 25
-      write(imprim,*)
-      write(imprim,*) 'tefoar 50: revoyez vos donnees'
-      write(imprim,*) 'les lignes fermees doivent etre disjointes'
-      write(imprim,*) 'verifiez si elles ne se coupent pas'
-      ierr = 15
-ccc      pause
-      return
-c
-c     cas sans probleme : intersection differente de celle initiale
-c     =================   =========================================
- 60   nbtrcf = nbtrcf + 1
-      notrcf( nbtrcf ) = nt1
-c     passage au triangle suivant
-      na0 = na2
-      nt0 = nt1
-      goto 30
-c
-c     ----------------------------------------------------------
-c     ici toutes les intersections de ns1-ns2 ont ete parcourues
-c     tous les triangles intersectes ou etendus forment les
-c     nbtrcf triangles du tableau notrcf
-c     ----------------------------------------------------------
- 70   nbtrcf = nbtrcf + 1
-      notrcf( nbtrcf ) = nt1
-c
-c     formation du cf des aretes simples des triangles de notrcf
-c     et destruction des nbtrcf triangles du tableau noartr
-c     attention: le chainage lchain du tableau nosoar devient actif
-c     =============================================================
- 80   if( nbtrcf*3 .gt. mxarcf ) then
-         write(imprim,*) 'saturation du tableau noarcf'
-         ierr = 10
-ccc         pause
-         return
-      endif
-c
-      call focftr( nbtrcf, notrcf, nbarpi, pxyd,   noarst,
-     %             mosoar, mxsoar, n1soar, nosoar,
-     %             moartr, n1artr, noartr,
-     %             nbarcf, n1arcf, noarcf, nbstpe, nostpe,
-     %             ierr )
-      if( ierr .ne. 0 ) return
-c
-c     chainage des aretes vides dans le tableau noarcf
-c     ------------------------------------------------
-c     decalage de 2 aretes car 2 aretes sont necessaires ensuite pour
-c     integrer 2 fois l'arete perdue et former ainsi 2 cf
-c     comme nbtrcf*3 minore mxarcf il existe au moins 2 places vides
-c     derriere => pas de test de debordement
-      n1arcf(0) = nbarcf+3
-      mmarcf = min(8*nbarcf,mxarcf)
-      do 90 i=nbarcf+3,mmarcf
-         noarcf(2,i) = i+1
- 90   continue
-      noarcf(2,mmarcf) = 0
-c
-c     reperage des sommets ns1 ns2 de l'arete perdue dans le cf
-c     ---------------------------------------------------------
-      ns1   = nosoar( 1, narete )
-      ns2   = nosoar( 2, narete )
-      ns(1) = ns1
-      ns(2) = ns2
-      do 120 i=1,2
-c        la premiere arete dans noarcf du cf
-         na0 = n1arcf(1)
- 110     if( noarcf(1,na0) .ne. ns(i) ) then
-c           passage a l'arete suivante
-            na0 = noarcf( 2, na0 )
-            goto 110
-         endif
-c        position dans noarcf du sommet i de l'arete perdue
-         nacf(i) = na0
- 120  continue
-c
-c     formation des 2 cf chacun contenant l'arete ns1-ns2
-c     ---------------------------------------------------
-c     sauvegarde de l'arete suivante de celle de sommet ns1
-      na0 = noarcf( 2, nacf1 )
-      nt1 = noarcf( 3, nacf1 )
-c
-c     le premier cf
-      n1arcf( 1 ) = nacf1
-c     l'arete suivante dans le premier cf
-      noarcf( 2, nacf1 ) = nacf2
-c     cette arete est celle perdue
-      noarcf( 3, nacf1 ) = narete
-c
-c     le second cf
-c     l'arete doublee
-      n1 = nbarcf + 1
-      n2 = nbarcf + 2
-c     le premier sommet de la premiere arete du second cf
-      noarcf( 1, n1 ) = ns2
-c     l'arete suivante dans le second cf
-      noarcf( 2, n1 ) = n2
-c     cette arete est celle perdue
-      noarcf( 3, n1 ) = narete
-c     la seconde arete du second cf
-      noarcf( 1, n2 ) = ns1
-      noarcf( 2, n2 ) = na0
-      noarcf( 3, n2 ) = nt1
-      n1arcf( 2 ) = n1
-c
-c     recherche du precedent de nacf2
- 130  na1 = noarcf( 2, na0 )
-      if( na1 .ne. nacf2 ) then
-c        passage a l'arete suivante
-         na0 = na1
-         goto 130
-      endif
-c     na0 precede nacf2 => il precede n1
-      noarcf( 2, na0 ) = n1
-c
-c     depart avec 2 cf
-      nbcf = 2
-c
-c     triangulation directe des 2 contours fermes
-c     l'arete ns1-ns2 devient une arete de la triangulation des 2 cf
-c     ==============================================================
-      call tridcf( nbcf,   nbstpe, nostpe, pxyd,   noarst,
-     %             mosoar, mxsoar, n1soar, nosoar,
-     %             moartr, n1artr, noartr,
-     %             mxarcf, n1arcf, noarcf, larmin,
-     %             nbtrcf, notrcf, ierr )
-c
-      return
-      end
-
-
-      subroutine te4ste( nbsomm, mxsomm, pxyd, ntrp, letree,
-     &                   ierr )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    decouper un te ntrp de letree en 4 sous-triangles
-c -----    eliminer les sommets de te trop proches des points
-c
-c entrees:
-c --------
-c mxsomm : nombre maximal de points declarables dans pxyd
-c ntrp   : numero letree du triangle a decouper en 4 sous-triangles
-c
-c modifies :
-c ----------
-c nbsomm : nombre actuel de points dans pxyd
-c pxyd   : tableau des coordonnees des points
-c          par point : x  y  distance_souhaitee
-c letree : arbre-4 des triangles equilateraux (te) fond de la triangulation
-c      letree(0,0) :  no du 1-er te vide dans letree
-c      letree(0,1) : maximum du 1-er indice de letree (ici 8)
-c      letree(0,2) : maximum declare du 2-eme indice de letree (ici mxtree)
-c      letree(0:8,1) : racine de l'arbre  (triangle sans sur triangle)
-c      si letree(0,.)>0 alors
-c         letree(0:3,j) : no (>0) letree des 4 sous-triangles du triangle j
-c      sinon
-c         letree(0:3,j) :-no pxyd des 1 a 4 points internes au triangle j
-c                         0  si pas de point
-c                        ( j est alors une feuille de l'arbre )
-c      letree(4,j) : no letree du sur-triangle du triangle j
-c      letree(5,j) : 0 1 2 3 no du sous-triangle j pour son sur-triangle
-c      letree(6:8,j) : no pxyd des 3 sommets du triangle j
-c
-c sorties :
-c ---------
-c ierr    : 0 si pas d'erreur, 51 saturation letree, 52 saturation pxyd
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet  analyse numerique paris upmc    juillet 1994
-c2345x7..............................................................012
-      common / unites / lecteu,imprim,nunite(30)
-      integer           letree(0:8,0:*)
-      double precision  pxyd(3,mxsomm)
-      integer           np(0:3),milieu(3)
-c
-c     debut par l'arete 2 du triangle ntrp
-      ierr = 0
-      i1 = 2
-      i2 = 3
-      do 30 i=1,3
-c
-c        le milieu de l'arete i1 existe t il deja ?
-         call n1trva( ntrp, i1, letree, noteva, niveau )
-         if( noteva .gt. 0 ) then
-c           il existe un te voisin
-c           s'il existe 4 sous-triangles le milieu existe deja
-            if( letree(0,noteva) .gt. 0 ) then
-c              le milieu existe
-               nsot = letree(0,noteva)
-               milieu(i) = letree( 5+nopre3(i1), nsot )
-               goto 25
-            endif
-         endif
-c
-c        le milieu n'existe pas. il est cree
-         nbsomm = nbsomm + 1
-         if( nbsomm .gt. mxsomm ) then
-c           plus assez de place dans pxyd
-            write(imprim,*) 'te4ste: saturation pxyd'
-            write(imprim,*)
-            ierr = 52
-            return
-         endif
-c        le milieu de l'arete i
-         milieu(i) = nbsomm
-c
-c        ntrp est le triangle de milieux d'arete ces 3 sommets
-         ns1    = letree( 5+i1, ntrp )
-         ns2    = letree( 5+i2, ntrp )
-         pxyd(1,nbsomm) = ( pxyd(1,ns1) + pxyd(1,ns2) ) * 0.5
-         pxyd(2,nbsomm) = ( pxyd(2,ns1) + pxyd(2,ns2) ) * 0.5
-c
-c        l'arete et milieu suivant
- 25      i1 = i2
-         i2 = nosui3( i2 )
- 30   continue
-c
-      do 50 i=0,3
-c
-c        le premier triangle vide
-         nsot = letree(0,0)
-         if( nsot .le. 0 ) then
-c           manque de place. saturation letree
-            ierr = 51
-            write(imprim,*) 'te4ste: saturation letree'
-            write(imprim,*)
-            return
-         endif
-c
-c        mise a jour du premier te libre
-         letree(0,0) = letree(0,nsot)
-c
-c        nsot est le i-eme sous triangle
-         letree(0,nsot) = 0
-         letree(1,nsot) = 0
-         letree(2,nsot) = 0
-         letree(3,nsot) = 0
-c
-c        le numero des points et sous triangles dans ntrp
-         np(i) = -letree(i,ntrp)
-         letree(i,ntrp) = nsot
-c
-c        le sommet commun avec le triangle ntrp
-         letree(5+i,nsot) = letree(5+i,ntrp)
-c
-c        le sur-triangle et numero de sous-triangle de nsot
-c        a laisser ici car incorrect sinon pour i=0
-         letree(4,nsot) = ntrp
-         letree(5,nsot) = i
-c
-c        le sous-triangle du triangle
-         letree(i,ntrp) = nsot
- 50   continue
-c
-c     le numero des nouveaux sommets milieux
-      nsot = letree(0,ntrp)
-      letree(6,nsot) = milieu(1)
-      letree(7,nsot) = milieu(2)
-      letree(8,nsot) = milieu(3)
-c
-      nsot = letree(1,ntrp)
-      letree(7,nsot) = milieu(3)
-      letree(8,nsot) = milieu(2)
-c
-      nsot = letree(2,ntrp)
-      letree(6,nsot) = milieu(3)
-      letree(8,nsot) = milieu(1)
-c
-      nsot = letree(3,ntrp)
-      letree(6,nsot) = milieu(2)
-      letree(7,nsot) = milieu(1)
-c
-c     repartition des eventuels 4 points np dans ces 4 sous-triangles
-c     il y a obligatoirement suffisamment de place
-      do 110 i=0,3
-         if( np(i) .gt. 0 ) then
-            nsot = notrpt( pxyd(1,np(i)), pxyd, ntrp, letree )
-c           ajout du point
-            do 100 i1=0,3
-               if( letree(i1,nsot) .eq. 0 ) then
-c                 place libre a occuper
-                  letree(i1,nsot) = -np(i)
-                  goto 110
-               endif
- 100        continue
-         endif
- 110  continue
-      end
-
-
-      subroutine tesuqm( quamal, nbarpi, pxyd,   noarst,
-     %                   mosoar, mxsoar, n1soar, nosoar,
-     %                   moartr, mxartr, n1artr, noartr,
-     %                   mxarcf, n1arcf, noarcf,
-     %                   larmin, notrcf, liarcf,
-     %                   quamin )
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    supprimer de la triangulation les triangles de qualite
-c -----    inferieure a quamal
-c
-c entrees:
-c --------
-c quamal : qualite des triangles au dessous de laquelle supprimer des sommets
-c nbarpi : numero du dernier point interne impose par l'utilisateur
-c pxyd   : tableau des coordonnees 2d des points
-c          par point : x  y  distance_souhaitee
-c mosoar : nombre maximal d'entiers par arete et
-c          indice dans nosoar de l'arete suivante dans le hachage
-c mxsoar : nombre maximal d'aretes stockables dans le tableau nosoar
-c          attention: mxsoar>3*mxsomm obligatoire!
-c moartr : nombre maximal d'entiers par arete du tableau noartr
-c
-c modifies:
-c ---------
-c noarst : noarst(i) numero d'une arete de sommet i
-c n1soar : no de l'eventuelle premiere arete libre dans le tableau nosoar
-c          chainage des vides suivant en 3 et precedant en 2 de nosoar
-c nosoar : numero des 2 sommets , no ligne, 2 triangles de l'arete,
-c          chainage des aretes frontalieres, chainage du hachage des aretes
-c          hachage des aretes = nosoar(1)+nosoar(2)*2
-c          avec mxsoar>=3*mxsomm
-c          une arete i de nosoar est vide <=> nosoar(1,i)=0 et
-c          nosoar(2,arete vide)=l'arete vide qui precede
-c          nosoar(3,arete vide)=l'arete vide qui suit
-c n1artr : numero du premier triangle vide dans le tableau noartr
-c          le chainage des triangles vides se fait sur noartr(2,.)
-c noartr : les 3 aretes des triangles +-arete1, +-arete2, +-arete3
-c          arete1 = 0 si triangle vide => arete2 = triangle vide suivant
-c
-c auxiliaires :
-c -------------
-c n1arcf : tableau (0:mxarcf) auxiliaire d'entiers
-c noarcf : tableau (3,mxarcf) auxiliaire d'entiers
-c larmin : tableau (mxarcf)   auxiliaire d'entiers
-c notrcf : tableau (mxarcf)   auxiliaire d'entiers
-c liarcf : tableau (mxarcf)   auxiliaire d'entiers
-c
-c sortie :
-c --------
-c quamin : qualite minimale des triangles
-c+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : alain perronnet Laboratoire JL Lions UPMC Paris  Octobre 2006
-c....................................................................012
-      parameter       ( lchain=6, mxtrqm=1024 )
-      common / unites / lecteu,imprim,intera,nunite(29)
-      double precision  pxyd(3,*), quamal, qualit, quamin
-      integer           nosoar(mosoar,mxsoar),
-     %                  noartr(moartr,mxartr),
-     %                  noarst(*)
-      integer           nosotr(3), notraj(3)
-      double precision  surtd2, s123, s142, s143, s234,
-     %                  s12, s34, a12
-      integer           notrqm(mxtrqm)
-      double precision  qutrqm(mxtrqm)
-      integer           n1arcf(0:mxarcf),
-     %                  noarcf(3,mxarcf),
-     %                  larmin(mxarcf),
-     %                  notrcf(mxarcf),
-     %                  liarcf(mxarcf)
-c
-      ierr = 0
-c
-c     initialisation du chainage des aretes des cf => 0 arete de cf
-      do 5 narete=1,mxsoar
-         nosoar( lchain, narete ) = -1
- 5    continue
-c
-c     recherche des triangles de plus basse qualite
-      quamin = 2.0
-      nbtrqm = 0
-      do 10 nt=1,mxartr
-         if( noartr(1,nt) .eq. 0 ) goto 10
-c        le numero des 3 sommets du triangle nt
-         call nusotr( nt, mosoar, nosoar, moartr, noartr, nosotr )
-c        la qualite du triangle ns1 ns2 ns3
-         call qutr2d( pxyd(1,nosotr(1)), pxyd(1,nosotr(2)),
-     %                pxyd(1,nosotr(3)), qualit )
-         if( qualit .lt. quamal ) then
-            if( nbtrqm .ge. mxtrqm ) goto 10
-            nbtrqm = nbtrqm + 1
-            notrqm(nbtrqm) = nt
-            qutrqm(nbtrqm) = qualit
-         endif
- 10   continue
-c
-c     tri croissant des qualites minimales des triangles
-      call tritas( nbtrqm, qutrqm, notrqm )
-c
-c     le plus mauvais triangle
-      ntqmin = notrqm(1)
-      quamin = qutrqm(1)
-c
-      do 100 n=1,nbtrqm
-c
-c        no du triangle de mauvaise qualite
-         ntqmin = notrqm( n )
-c
-c        le triangle a t il ete traite?
-         if( noartr(1,ntqmin) .eq. 0 ) goto 100
-c
-ccc         print *
-ccc         print *,'tesuqm: triangle',ntqmin,' qualite=',qutrqm(n)
-ccc         print *,'tesuqm: noartr(',ntqmin,')=',
-ccc     %           (noartr(j,ntqmin),j=1,moartr)
-cccc
-ccc         do 12 j=1,3
-ccc            noar = noartr(j,ntqmin)
-ccc         print*,'arete',noar,' nosoar=',(nosoar(i,abs(noar)),i=1,mosoar)
-ccc 12      continue
-c
-c        le numero des 3 sommets du triangle ntqmin
-         call nusotr( ntqmin, mosoar, nosoar, moartr, noartr, nosotr )
-c
-ccc         do 15 j=1,3
-ccc            nbt = nosotr(j)
-ccc            print *,'sommet',nbt,':  x=',pxyd(1,nbt),'  y=',pxyd(2,nbt)
-ccc 15      continue
-c
-c        recherche des triangles adjacents par les aretes de ntqmin
-         nbt = 0
-         do 20 j=1,3
-c           le no de l'arete j dans nosoar
-            noar = abs( noartr(j,ntqmin) )
-c           le triangle adjacent a l'arete j de ntqmin
-            if( nosoar(4,noar) .eq. ntqmin ) then
-               notraj(j) = nosoar(5,noar)
-            else
-               notraj(j) = nosoar(4,noar)
-            endif
-            if( notraj(j) .gt. 0 ) then
-c              1 triangle adjacent de plus
-               naop = j
-               nbt  = nbt + 1
-            else
-c              pas de triangle adjacent
-               notraj(j) = 0
-            endif
- 20      continue
-c
-         if( nbt .eq. 1 ) then
-c
-c           ntqmin a un seul triangle oppose par l'arete naop
-c           le triangle a 2 aretes frontalieres est plat
-c           l'arete commune aux 2 triangles est rendue Delaunay
-c           ---------------------------------------------------
-            noar = abs( noartr(naop,ntqmin) )
-            if( nosoar(3,noar) .ne. 0 ) then
-c              arete frontaliere
-               goto 100
-            endif
-c
-c           l'arete appartient a deux triangles actifs
-c           le numero des 4 sommets du quadrangle des 2 triangles
-            call mt4sqa( noar, moartr, noartr, mosoar, nosoar,
-     %                   ns1, ns2, ns3, ns4 )
-            if( ns4 .eq. 0 ) goto 100
-c
-c           carre de la longueur de l'arete ns1 ns2
-           a12=(pxyd(1,ns2)-pxyd(1,ns1))**2+(pxyd(2,ns2)-pxyd(2,ns1))**2
-c
-c           comparaison de la somme des aires des 2 triangles
-c           -------------------------------------------------
-c           calcul des surfaces des triangles 123 et 142 de cette arete
-            s123=surtd2( pxyd(1,ns1), pxyd(1,ns2), pxyd(1,ns3) )
-            s142=surtd2( pxyd(1,ns1), pxyd(1,ns4), pxyd(1,ns2) )
-ccc            print *,'tesuqm: ns4=',ns4,' x=',pxyd(1,ns4),
-ccc     %                                 ' y=',pxyd(2,ns4)
-ccc            print *,'tesuqm: s123=',s123,'  s142=',s142
-            s12 = abs( s123 ) + abs( s142 )
-            if( s12 .le. 0.001*a12 ) goto 100
-c
-c           calcul des surfaces des triangles 143 et 234 de cette arete
-            s143=surtd2( pxyd(1,ns1), pxyd(1,ns4), pxyd(1,ns3) )
-            s234=surtd2( pxyd(1,ns2), pxyd(1,ns3), pxyd(1,ns4) )
-ccc            print *,'tesuqm: s143=',s143,'  s234=',s234
-            s34 = abs( s234 ) + abs( s143 )
-ccc            print *,'tesuqm: s12=',s12,'  s34=',s34
-c
-            if( abs(s34-s12) .gt. 1d-14*s34 ) goto 100
-c
-c           quadrangle convexe 
-c           echange de la diagonale 12 par 34 des 2 triangles
-c           -------------------------------------------------
-            call te2t2t( noar,   mosoar, n1soar, nosoar, noarst,
-     %                   moartr, noartr, noar34 )
-ccc            print *,'tesuqm: sortie te2t2t avec noar34=',noar34
-c
-c
-         else if( nbt .eq. 2 ) then
-c
-c           ntqmin a 2 triangles opposes par l'arete naop
-c           essai de supprimer le sommet non frontalier
-c           ---------------------------------------------
-            do 30 j=1,3
-               if( notraj(j) .eq. 0 ) goto 33
- 30         continue
-c
-c           arete sans triangle adjacent
- 33         noar = abs( noartr(j,ntqmin) )
-ccc            print *,'tesuqm: nosoar(',noar,')=',
-ccc     %              (nosoar(j,noar),j=1,mosoar)
-            if( noar .le. 0 ) goto 100
-c
-c           ses 2 sommets
-            ns1 = nosoar(1,noar)
-            ns2 = nosoar(2,noar)
-c
-c           ns3 l'autre sommet non frontalier
-            do 36 j=1,3
-               ns3 = nosotr(j)
-               if( ns3 .ne. ns1 .and. ns3 .ne. ns2 ) goto 40
- 36         continue
-c
- 40         if( ns3 .gt. nbarpi ) then
-c
-c              le sommet ns3 non frontalier va etre supprime
-ccc               print*,'tesuqm: ntqmin=',ntqmin,
-ccc     %                ' demande la suppression ns3=',ns3
-               call te1stm( ns3,    nbarpi, pxyd,   noarst,
-     %                      mosoar, mxsoar, n1soar, nosoar,
-     %                      moartr, mxartr, n1artr, noartr,
-     %                      mxarcf, n1arcf, noarcf,
-     %                      larmin, notrcf, liarcf, ierr )
-ccc               if( ierr .eq. 0 ) then
-ccc                  print *,'tesuqm: st supprime ns3=',ns3
-ccc               else
-ccc                print *,'tesuqm: ST NON SUPPRIME ns3=',ns3,' ierr=',ierr
-ccc               endif
-            endif
-c
-         endif
-c
- 100  continue
-c
-      return
-      end
-
-
-      subroutine tritas( nb, a, noanc )
-c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c but :    tri croissant du tableau a de nb reels par la methode du tas
-c -----    methode due a williams et floyd     o(n log n )
-c          version avec un pointeur sur un tableau dont est extrait a
-c entrees:
-c --------
-c nb     : nombre de termes du tableau a
-c a      : les nb reels double precision a trier dans a
-c noanc  : numero ancien position de l'information (souvent noanc(i)=i)
-c
-c sorties:
-c --------
-c a      : les nb reels croissants dans a
-c noanc  : numero ancien position de l'information
-c          noanc(1)=no position pointeur sur a(1), ...
-c ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
-c auteur : perronnet alain analyse numerique upmc paris     fevrier 1991
-c ...................................................................012
-      integer           noanc(1:nb)
-      integer           pere,per,fil,fils1,fils2,fin
-      double precision  a(1:nb),aux
-c
-c     formation du tas sous forme d'un arbre binaire
-      fin = nb + 1
-c
-      do 20 pere = nb/2,1,-1
-c
-c        descendre pere jusqu'a n dans a  de facon  a respecter
-c        a(pere)>a(j) pour j fils ou petit fils de pere
-c        c-a-d pour tout j tel que pere <= e(j/2)<j<nb+1
-c                                          a(j/2) >= a(j)
-c                                                 >= a(j+1)
-c
-c        protection du pere
-         per = pere
-c
-c        le fils 1 du pere
- 10      fils1 = 2 * per
-         if( fils1 .lt. fin ) then
-c           il existe un fils1
-            fil   = fils1
-            fils2 = fils1 + 1
-            if( fils2 .lt. fin ) then
-c              il existe 2 fils . selection du plus grand
-               if( a(fils2) .gt. a(fils1) ) fil = fils2
-            endif
-c
-c           ici fil est le plus grand des fils
-            if( a(per) .lt. a(fil) ) then
-c              permutation de per et fil
-               aux    = a(per)
-               a(per) = a(fil)
-               a(fil) = aux
-c              le pointeur est aussi permute
-               naux       = noanc(per)
-               noanc(per) = noanc(fil)
-               noanc(fil) = naux
-c              le nouveau pere est le fils permute
-               per = fil
-               goto 10
-            endif
-         endif
- 20   continue
-c
-c     a chaque iteration la racine (plus grande valeur actuelle de a)
-c     est mise a sa place (fin actuelle du tableau) et permutee avec
-c     la valeur qui occupe cette place, puis descente de cette nouvelle
-c     racine pour respecter le fait que tout pere est plus grand que tous
-c     ses fils
-c     c-a-d pour tout j tel que pere <= e(j/2)<j<nb+1
-c                                          a(j/2) >= a(j)
-c                                                 >= a(j+1)
-      do 50 fin=nb,2,-1
-c        la permutation premier dernier
-         aux    = a(fin)
-         a(fin) = a(1)
-         a(1)   = aux
-c        le pointeur est aussi permute
-         naux       = noanc(fin)
-         noanc(fin) = noanc(1)
-         noanc(1)   = naux
-c
-c        descendre a(1) entre 1 et fin
-         per = 1
-c
-c        le fils 1 du pere
- 30      fils1 = 2 * per
-         if( fils1 .lt. fin ) then
-c           il existe un fils1
-            fil   = fils1
-            fils2 = fils1 + 1
-            if( fils2 .lt. fin ) then
-c              il existe 2 fils . selection du plus grand
-               if( a(fils2) .gt. a(fils1) ) fil = fils2
-            endif
-c
-c           ici fil est le plus grand des fils
-            if( a(per) .lt. a(fil) ) then
-c              permutation de per et fil
-               aux    = a(per)
-               a(per) = a(fil)
-               a(fil) = aux
-c              le pointeur est aussi permute
-               naux       = noanc(per)
-               noanc(per) = noanc(fil)
-               noanc(fil) = naux
-c              le nouveau pere est le fils permute
-               per = fil
-               goto 30
-            endif
-         endif
- 50   continue
-      end
index f6526fe4ee4915b3167ac074ab43a90b9048e8bb..3cf7e40357c5850ab393d9dbe33599e42f75be38 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 1cc7927bfba0b9990b80a33dc65dbc72e4fa3ffe..2799e4494d5292f79b638af2bc02776369c57507 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #include <vtkImplicitBoolean.h>
 #include <vtkImplicitFunctionCollection.h>
 
+#include <vtkThreshold.h>
+#include <vtkPassThrough.h>
+
 #include "utilities.h"
 
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-#else
-static int MYDEBUG = 0;
-#endif
 
 SMESH_ActorDef* SMESH_ActorDef::New(){
   return new SMESH_ActorDef();
@@ -114,7 +112,7 @@ SMESH_Actor* SMESH_Actor::New(TVisualObjPtr theVisualObj,
 
 SMESH_ActorDef::SMESH_ActorDef()
 {
-  if(MYDEBUG) MESSAGE("SMESH_ActorDef - "<<this);
+  MESSAGE("SMESH_ActorDef - "<<this);
 
   SALOME_Actor::SetVisibility(false); // avoid update of pipelines
 
@@ -125,6 +123,7 @@ SMESH_ActorDef::SMESH_ActorDef()
   myIsPointsVisible = false;
   myIsEntityModeCache = false;
   myRepresentationCache = 0;
+  objectEntitiesCache = 0;
 
   myHighlightActor = SMESH_SVTKActor::New();
   myHighlightActor->Delete(); // vtkSmartPointer!
@@ -139,8 +138,8 @@ SMESH_ActorDef::SMESH_ActorDef()
 
   myIsFacesOriented = false;
 
-  int controlsIncrement = SMESH_ActorProps::props()->controlsIncrement();
-  int selectionIncrement = SMESH_ActorProps::props()->selectionIncrement();
+  float  controlsIncrement = (float) SMESH_ActorProps::props()->controlsIncrement();
+  float selectionIncrement = (float) SMESH_ActorProps::props()->selectionIncrement();
 
   myControlsPrecision = -1;
   SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr();
@@ -148,11 +147,11 @@ SMESH_ActorDef::SMESH_ActorDef()
   if ( mgr && mgr->booleanValue( "SMESH", "use_precision", false ) )
     myControlsPrecision = mgr->integerValue( "SMESH", "controls_precision", -1);
 
-  double aElem0DSize    = SMESH::GetFloat("SMESH:elem0d_size",5);
-  double aBallElemSize  = SMESH::GetFloat("SMESH:ball_elem_size",10);
-  double aBallElemScale = SMESH::GetFloat("SMESH:ball_elem_scale",1.0);
-  double aLineWidth     = SMESH::GetFloat("SMESH:element_width",1);
-  double aOutlineWidth  = SMESH::GetFloat("SMESH:outline_width",1);
+  float aElem0DSize    = (float) SMESH::GetFloat("SMESH:elem0d_size",5);
+  float aBallElemSize  = (float) SMESH::GetFloat("SMESH:ball_elem_size",10);
+  float aBallElemScale = (float) SMESH::GetFloat("SMESH:ball_elem_scale",1.0);
+  float aLineWidth     = (float) SMESH::GetFloat("SMESH:element_width",1);
+  float aOutlineWidth  = (float) SMESH::GetFloat("SMESH:outline_width",1);
 
   SMESH::LabelFont aFamilyNd = SMESH::FntTimes;
   bool aBoldNd    = true;
@@ -589,7 +588,7 @@ SMESH_ActorDef::SMESH_ActorDef()
 
 SMESH_ActorDef::~SMESH_ActorDef()
 {
-  if(MYDEBUG) MESSAGE("~SMESH_ActorDef - "<<this);
+  MESSAGE("~SMESH_ActorDef - "<<this);
 
   // Please keep the order same as one in the header file
 
@@ -842,6 +841,8 @@ void SMESH_ActorDef::SetControlMode( eControl theMode, bool theCheckEntityMode )
   my3DActor->GetMapper()->SetScalarVisibility(false);
   myBallActor->GetMapper()->SetScalarVisibility(false);
   myScalarBarActor->SetVisibility(false);
+  ClipThreshold(false);
+  SetWireframeOff(false);
 
   bool anIsScalarVisible = theMode > eNone;
 
@@ -952,6 +953,14 @@ void SMESH_ActorDef::SetControlMode( eControl theMode, bool theCheckEntityMode )
       myControlActor = my3DActor;
       break;
     }
+    case eScaledJacobian:
+    {
+      SMESH::Controls::ScaledJacobian* aControl = new SMESH::Controls::ScaledJacobian();
+      aControl->SetPrecision( myControlsPrecision );
+      myFunctor.reset( aControl );
+      myControlActor = my3DActor;
+      break;
+    }
     case eMaxElementLength2D:
     {
       SMESH::Controls::MaxElementLength2D* aControl = new SMESH::Controls::MaxElementLength2D();
@@ -1004,6 +1013,14 @@ void SMESH_ActorDef::SetControlMode( eControl theMode, bool theCheckEntityMode )
       myControlActor = my2DActor;
       break;
     }
+    case eWarping3D:
+    {
+      SMESH::Controls::Warping3D* aControl = new SMESH::Controls::Warping3D();
+      aControl->SetPrecision(myControlsPrecision);
+      myFunctor.reset(aControl);
+      myControlActor = my3DActor;
+      break;
+    }
     case eSkew:
     {
       SMESH::Controls::Skew* aControl = new SMESH::Controls::Skew();
@@ -1035,7 +1052,7 @@ void SMESH_ActorDef::SetControlMode( eControl theMode, bool theCheckEntityMode )
       return;
     }
 
-    int aNbCells = myFunctor ? myVisualObj->GetNbEntities( myFunctor->GetType() ) : 0;
+    smIdType aNbCells = myFunctor ? myVisualObj->GetNbEntities( myFunctor->GetType() ) : 0;
     bool aShowOnlyScalarBarTitle = false;
     if(aNbCells) {
       //myControlMode = theMode;
@@ -1069,6 +1086,10 @@ void SMESH_ActorDef::SetControlMode( eControl theMode, bool theCheckEntityMode )
         my1DExtActor->SetExtControlMode(myFunctor,myScalarBarActor,myLookupTable);
         UpdateDistribution();
         break;
+      case eWarping3D:
+        my2DExtActor->SetExtControlMode(myFunctor, myScalarBarActor, myLookupTable);
+        UpdateDistribution();
+        break;
       default:
         myControlActor->SetControlMode(myFunctor,myScalarBarActor,myLookupTable);
         UpdateDistribution();
@@ -1111,7 +1132,6 @@ void SMESH_ActorDef::SetControlMode( eControl theMode, bool theCheckEntityMode )
     QString aTitle = QString(myScalarBarActor->GetTitle());
     aTitle.replace(QRegExp("(:\\s).*"),"\\1"+ QString::number(GetNumberControlEntities()));
     myScalarBarActor->SetTitle(aTitle.toUtf8().constData());
-
   }
   else {
     if(theCheckEntityMode){
@@ -1135,7 +1155,7 @@ void SMESH_ActorDef::SetControlMode( eControl theMode, bool theCheckEntityMode )
   //Update();
 }
 
-int SMESH_ActorDef::GetNumberControlEntities()
+smIdType SMESH_ActorDef::GetNumberControlEntities()
 {
   SMESH_DeviceActor* anAct = NULL;
   switch(myControlMode){
@@ -1161,7 +1181,7 @@ int SMESH_ActorDef::GetNumberControlEntities()
       break;
     default:;
   }
-  return (anAct) ? anAct->GetUnstructuredGrid()->GetNumberOfCells() : -1;
+  return anAct ? anAct->GetUnstructuredGrid()->GetNumberOfCells() : -1;
 }
 
 void SMESH_ActorDef::AddToRender(vtkRenderer* theRenderer)
@@ -1453,27 +1473,27 @@ void SMESH_ActorDef::UnShrink()
 }
 
 
-int SMESH_ActorDef::GetNodeObjId(int theVtkID)
+vtkIdType SMESH_ActorDef::GetNodeObjId(vtkIdType theVtkID)
 {
   return myPickableActor->GetNodeObjId(theVtkID);
 }
 
-double* SMESH_ActorDef::GetNodeCoord(int theObjID)
+double* SMESH_ActorDef::GetNodeCoord(vtkIdType theObjID)
 {
   return myPickableActor->GetNodeCoord(theObjID);
 }
 
-int SMESH_ActorDef::GetNodeVtkId(int theObjID)
+vtkIdType SMESH_ActorDef::GetNodeVtkId(vtkIdType theObjID)
 {
   return myPickableActor->GetNodeVtkId(theObjID);
 }
 
-int SMESH_ActorDef::GetElemObjId(int theVtkID)
+vtkIdType SMESH_ActorDef::GetElemObjId(vtkIdType theVtkID)
 {
   return myPickableActor->GetElemObjId(theVtkID);
 }
 
-vtkCell* SMESH_ActorDef::GetElemCell(int theObjID)
+vtkCell* SMESH_ActorDef::GetElemCell(vtkIdType theObjID)
 {
   return myPickableActor->GetElemCell(theObjID);
 }
@@ -1507,12 +1527,14 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation)
   my3DExtActor->VisibilityOff();
 
   myScalarBarActor->VisibilityOff();
+  
 
   if ( GetVisibility() ) {
     if ( theIsUpdateRepersentation )
       SetRepresentation(GetRepresentation());
-
-    if(myControlMode != eNone) {
+  
+    // Avoid calling VisibilityOn of ExtActor after editing hypothesis. Use the same criteria than scalarBarActor
+    if( myControlMode != eNone && myFunctor && myVisualObj->GetNbEntities( myFunctor->GetType() ) ) { 
       switch(myControlMode) {
       case eFreeNodes:
       case eCoincidentNodes:
@@ -1533,6 +1555,7 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation)
       case eBareBorderFace:
       case eOverConstrainedFace:
       case eCoincidentElems2D:
+      case eWarping3D:
         my2DExtActor->VisibilityOn();
         break;
       case eBareBorderVolume:
@@ -1542,14 +1565,14 @@ void SMESH_ActorDef::SetVisibility(int theMode, bool theIsUpdateRepersentation)
         break;
       default:;
       }
-      if ( myFunctor && myVisualObj->GetNbEntities( myFunctor->GetType() ))
-        myScalarBarActor->VisibilityOn();
-    }
+      myScalarBarActor->VisibilityOn();
+    }    
 
     if ( GetPickable( ))
       myPickableActor->VisibilityOn();
 
-    if ( GetRepresentation() != ePoint )
+    if ( GetRepresentation() != ePoint && 
+      !(IsClipThresholdOn() && GetActorForThreshold() != myControlActor)) // Avoid calling VisibilityOn if for display result of Threshold Criteria need only ExtActor
     {
       if(myEntityMode & e0DElements  ){
         my0DActor->VisibilityOn();
@@ -1643,7 +1666,8 @@ void SMESH_ActorDef::SetEntityMode(unsigned int theMode)
       theMode |= eVolumes;
   }
 
-  myBaseActor->myGeomFilter->SetInside(myEntityMode != anObjectEntities);
+  // rnv : Fix volume selection on Display Entity
+  //myBaseActor->myGeomFilter->SetInside(myEntityMode != anObjectEntities);
 
   if ( anObjectEntities == 0 && myRepresentation != ePoint ) // no elements, show nodes
   {
@@ -1651,6 +1675,12 @@ void SMESH_ActorDef::SetEntityMode(unsigned int theMode)
     SetRepresentation( ePoint );
   }
 
+  if ( anObjectEntities != 0 && objectEntitiesCache == 0 )
+  {
+    objectEntitiesCache = anObjectEntities;
+    SetRepresentation( eSurface );
+  }
+
   if ( myEntityMode != theMode )
   {
     myEntityMode = theMode; // entities to show
@@ -1664,11 +1694,11 @@ void SMESH_ActorDef::SetEntityMode(unsigned int theMode)
 
 void SMESH_ActorDef::SetRepresentation (int theMode)
 {
-  int aNbEdges   = myVisualObj->GetNbEntities(SMDSAbs_Edge);
-  int aNbFaces   = myVisualObj->GetNbEntities(SMDSAbs_Face);
-  int aNbVolumes = myVisualObj->GetNbEntities(SMDSAbs_Volume);
-  int aNb0Ds     = myVisualObj->GetNbEntities(SMDSAbs_0DElement);
-  int aNbBalls   = myVisualObj->GetNbEntities(SMDSAbs_Ball);
+  smIdType aNbEdges   = myVisualObj->GetNbEntities(SMDSAbs_Edge);
+  smIdType aNbFaces   = myVisualObj->GetNbEntities(SMDSAbs_Face);
+  smIdType aNbVolumes = myVisualObj->GetNbEntities(SMDSAbs_Volume);
+  smIdType aNb0Ds     = myVisualObj->GetNbEntities(SMDSAbs_0DElement);
+  smIdType aNbBalls   = myVisualObj->GetNbEntities(SMDSAbs_Ball);
 
   if ( myRepresentationCache && aNbEdges + aNbFaces + aNbVolumes + aNb0Ds + aNbBalls )
   {
@@ -1713,7 +1743,7 @@ void SMESH_ActorDef::SetRepresentation (int theMode)
   myPickableActor = myBaseActor;
   vtkProperty *aProp = NULL, *aBackProp = NULL;
   vtkProperty *aPropVN = NULL, *aPropVR = NULL;
-  SMESH_DeviceActor::EReperesent aReperesent = SMESH_DeviceActor::EReperesent(-1);
+  SMESH_DeviceActor::EReperesent aReperesent = SMESH_DeviceActor::eNoneRepr;
   SMESH_Actor::EQuadratic2DRepresentation aQuadraticMode = GetQuadratic2DRepresentation();
   switch (myRepresentation) {
   case ePoint:
@@ -1818,6 +1848,8 @@ void SMESH_ActorDef::UpdateHighlight()
   case SMESH_DeviceActor::eSurface:
   case SMESH_DeviceActor::eWireframe:
     {
+      anIsVisible = anIsVisible && !IsWireframeOff();
+
       if(myIsHighlighted) {
         myHighlitableActor->SetProperty(myHighlightProp);
       }else if(myIsPreselected){
@@ -1926,7 +1958,7 @@ void SMESH_ActorDef::Render(vtkRenderer* /*ren*/)
 
 void SMESH_ActorDef::Update()
 {
-  if(MYDEBUG) MESSAGE("SMESH_ActorDef::Update");
+  MESSAGE("SMESH_ActorDef::Update");
 
   myVisualObj->Update();
 
@@ -2125,8 +2157,8 @@ void SMESH_ActorDef::UpdateSelectionProps()
 {
   QColor selectionColor = SMESH_ActorProps::props()->selectionColor();
   QColor highlightColor = SMESH_ActorProps::props()->highlightColor();
-  int selectionIncrement = SMESH_ActorProps::props()->selectionIncrement();
-  double width = GetLineWidth();
+  float  selectionIncrement = (float) SMESH_ActorProps::props()->selectionIncrement();
+  float  width = (float) GetLineWidth();
   myHighlightProp->SetColor(selectionColor.redF(), selectionColor.greenF(), selectionColor.blueF());
   myHighlightProp->SetLineWidth(width + selectionIncrement);
   myPreselectProp->SetColor(highlightColor.redF(), highlightColor.greenF(), highlightColor.blueF());
@@ -2142,17 +2174,17 @@ double SMESH_ActorDef::GetLineWidth()
 
 void SMESH_ActorDef::SetLineWidth(double theVal)
 {
-  int controlsIncrement = SMESH_ActorProps::props()->controlsIncrement();
-  int selectionIncrement = SMESH_ActorProps::props()->selectionIncrement();
+  float  controlsIncrement = (float) SMESH_ActorProps::props()->controlsIncrement();
+  float selectionIncrement = (float) SMESH_ActorProps::props()->selectionIncrement();
 
-  myEdgeProp->SetLineWidth(theVal);
+  myEdgeProp->SetLineWidth((float) theVal);
 
-  my1DProp->SetLineWidth(theVal + controlsIncrement);
-  my1DExtProp->SetLineWidth(theVal + controlsIncrement);
-  my2DExtProp->SetLineWidth(theVal + controlsIncrement);
-  my3DExtProp->SetLineWidth(theVal + controlsIncrement);
-  myHighlightProp->SetLineWidth(theVal + selectionIncrement);
-  myPreselectProp->SetLineWidth(theVal + selectionIncrement);
+  my1DProp       ->SetLineWidth((float) theVal + controlsIncrement);
+  my1DExtProp    ->SetLineWidth((float) theVal + controlsIncrement);
+  my2DExtProp    ->SetLineWidth((float) theVal + controlsIncrement);
+  my3DExtProp    ->SetLineWidth((float) theVal + controlsIncrement);
+  myHighlightProp->SetLineWidth((float) theVal + selectionIncrement);
+  myPreselectProp->SetLineWidth((float) theVal + selectionIncrement);
   Modified();
 }
 
@@ -2163,21 +2195,21 @@ double SMESH_ActorDef::GetOutlineWidth()
 
 void SMESH_ActorDef::SetOutlineWidth(double theVal)
 {
-  myOutLineProp->SetLineWidth(theVal);
+  myOutLineProp->SetLineWidth((float) theVal);
   Modified();
 }
 
 void SMESH_ActorDef::Set0DSize(double theVal)
 {
-  my0DProp->SetPointSize(theVal);
-  myHighlightProp->SetPointSize(theVal);
-  myPreselectProp->SetPointSize(theVal);
+  my0DProp       ->SetPointSize((float) theVal);
+  myHighlightProp->SetPointSize((float) theVal);
+  myPreselectProp->SetPointSize((float) theVal);
 
   if(SMESH_SVTKActor* aCustom = SMESH_SVTKActor::SafeDownCast( myHighlightActor )) {
-    aCustom->Set0DSize(theVal);
+    aCustom->Set0DSize((float) theVal);
   }
   if(SMESH_SVTKActor* aCustom = SMESH_SVTKActor::SafeDownCast( myPreHighlightActor )) {
-    aCustom->Set0DSize(theVal);
+    aCustom->Set0DSize((float) theVal);
   }
 
   Modified();
@@ -2190,13 +2222,13 @@ double SMESH_ActorDef::Get0DSize()
 
 void SMESH_ActorDef::SetBallSize(double theVal)
 {
-  myBallProp->SetPointSize(theVal);
+  myBallProp->SetPointSize((float) theVal);
 
   if(SMESH_SVTKActor* aCustom = SMESH_SVTKActor::SafeDownCast( myHighlightActor )) {
-    aCustom->SetBallSize(theVal);
+    aCustom->SetBallSize((float) theVal);
   }
   if(SMESH_SVTKActor* aCustom = SMESH_SVTKActor::SafeDownCast( myPreHighlightActor )) {
-    aCustom->SetBallSize(theVal);
+    aCustom->SetBallSize((float) theVal);
   }
 
   Modified();
@@ -2225,7 +2257,7 @@ void SMESH_ActorDef::SetBallScale( double theVal )
   Modified();
 }
 
-int SMESH_ActorDef::GetObjDimension( const int theObjId )
+int SMESH_ActorDef::GetObjDimension( const vtkIdType theObjId )
 {
   return myVisualObj->GetElemDimension( theObjId );
 }
@@ -2484,6 +2516,71 @@ void SMESH_ActorDef::UpdateScalarBar()
 
 }
 
+// Get Actor for Threshold criteria compute
+SMESH_DeviceActor* SMESH_ActorDef::GetActorForThreshold()
+{
+  switch (myControlMode) {
+  case eLength2D:
+    return my1DExtActor;
+  case eWarping3D:
+    return my2DExtActor;
+  default:;
+    return myControlActor;
+  }
+}
+
+// Hides the cells beyond threshold if isThresholdOn == true.
+void SMESH_ActorDef::ClipThreshold(bool isThresholdOn,double min /*= 0.0*/, double max /*= 0.0*/)
+{
+  SMESH_DeviceActor* anActor = GetActorForThreshold();
+  if (anActor != myControlActor)
+    myControlActor->VisibilityOff();
+
+  myIsClipThresholdOn = isThresholdOn;
+  if (isThresholdOn)
+  {
+    // Initialize the filter
+    vtkSmartPointer<vtkThreshold> threshold = vtkSmartPointer<vtkThreshold>::New();
+
+    // We have set scalar data with SMESH_DeviceActor::SetControlMode() call as vtkDataSetAttributes::SCALARS.
+    // So, we don't need to pass an array name in SetInputArrayToProcess().
+    threshold->SetInputConnection(anActor->myMergeFilter->GetOutputPort());
+    threshold->SetInputArrayToProcess(0, 0, 0, vtkDataObject::FIELD_ASSOCIATION_CELLS, vtkDataSetAttributes::SCALARS);
+
+    // Set range
+    threshold->SetThresholdFunction(vtkThreshold::THRESHOLD_BETWEEN);
+    threshold->SetLowerThreshold(min);
+    threshold->SetUpperThreshold(max);
+
+    // Debug output
+    threshold->Update();
+    SCRUTE(threshold->GetOutput()->GetNumberOfCells());
+
+    // Add to the filters' chain
+    vtkAlgorithmOutput* port = threshold->GetOutputPort();
+    anActor->myPassFilter[0]->SetInputConnection(port);
+  }
+  else
+  {
+    // Restore the filters' chain
+    anActor->SetImplicitFunctionUsed(anActor->myIsImplicitFunctionUsed);
+    // Restore Actor filters when after Controls, which not use ExtACtor was called Controls, which use ExtActor
+    // For avoid artifact's
+    if (anActor != myControlActor)
+      myControlActor->SetImplicitFunctionUsed(myControlActor->myIsImplicitFunctionUsed);
+
+    myControlActor->VisibilityOn();
+  }
+}
+
+// Hides the wireframe if isWireframeOff == true.
+void SMESH_ActorDef::SetWireframeOff(bool isWireframeOff)
+{
+  myIsWireframeOff = isWireframeOff;
+
+  UpdateHighlight();
+}
+
 void SMESH_ActorDef::UpdateDistribution()
 {
   if(SMESH::Controls::NumericalFunctor* fun =
@@ -2495,7 +2592,7 @@ void SMESH_ActorDef::UpdateDistribution()
     SMESH_VisualObjDef::TEntityList elems;
     if ( dynamic_cast<SMESH_SubMeshObj*>(myVisualObj.get()))
       dynamic_cast<SMESH_SubMeshObj*>(myVisualObj.get())->GetEntities( fun->GetType(), elems );
-    std::vector<int> elemIds; elemIds.reserve( elems.size() );
+    std::vector<smIdType> elemIds; elemIds.reserve( elems.size() );
     for ( SMESH_VisualObjDef::TEntityList::iterator e = elems.begin(); e != elems.end(); ++e)
       elemIds.push_back( (*e)->GetID());
     vtkLookupTable* lookupTable = static_cast<vtkLookupTable*>(myScalarBarActor->GetLookupTable());
@@ -2656,7 +2753,7 @@ void SMESH_ActorDef::UpdateFilter()
   }
   if ( GetVisibility() )
     aFilter->Update();
-  if (MYDEBUG) MESSAGE(aFilter->GetOutput()->GetNumberOfCells());
+  MESSAGE(aFilter->GetOutput()->GetNumberOfCells());
 }
 
 #ifndef DISABLE_PLOT2DVIEWER
@@ -2681,7 +2778,7 @@ SPlot2d_Histogram* SMESH_ActorDef::UpdatePlot2Histogram()
     SMESH_VisualObjDef::TEntityList elems;
     if ( dynamic_cast<SMESH_SubMeshObj*>(myVisualObj.get()))
       dynamic_cast<SMESH_SubMeshObj*>(myVisualObj.get())->GetEntities( fun->GetType(), elems );
-    std::vector<int> elemIds;
+    std::vector<smIdType> elemIds;
 
     for ( SMESH_VisualObjDef::TEntityList::iterator e = elems.begin(); e != elems.end(); ++e)
       elemIds.push_back( (*e)->GetID());
index 9ef509d59b9b7b2c33d6bc9827c39553a2b720e1..15519a24cd4e1234a151c6d882d823df1170650b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -38,6 +38,7 @@
 class vtkUnstructuredGrid;
 
 class SMESH_ScalarBarActor;
+class SMESH_DeviceActor;
 
 class vtkPlane;
 class vtkImplicitBoolean;
@@ -139,7 +140,7 @@ class SMESHOBJECT_EXPORT SMESH_Actor: public SALOME_Actor
 
   enum eControl{eNone, eLength, eLength2D, eDeflection2D, eFreeBorders, eFreeEdges, eFreeNodes,
                 eFreeFaces, eMultiConnection, eArea, eTaper, eAspectRatio,
-                eMinimumAngle, eWarping, eSkew, eAspectRatio3D, eMultiConnection2D, eVolume3D,
+                eMinimumAngle, eWarping, eSkew, eAspectRatio3D, eWarping3D, eMultiConnection2D, eVolume3D, eScaledJacobian,
                 eMaxElementLength2D, eMaxElementLength3D, eBareBorderFace, eBareBorderVolume,
                 eOverConstrainedFace, eOverConstrainedVolume, eCoincidentNodes,
                 eCoincidentElems1D, eCoincidentElems2D, eCoincidentElems3D, eNodeConnectivityNb,
@@ -148,7 +149,7 @@ class SMESHOBJECT_EXPORT SMESH_Actor: public SALOME_Actor
   virtual void SetControl(SMESH::Controls::FunctorPtr) = 0;
   virtual eControl GetControlMode() = 0;
   virtual SMESH::Controls::FunctorPtr GetFunctor() = 0;
-  virtual int GetNumberControlEntities() = 0;
+  virtual smIdType GetNumberControlEntities() = 0;
 
   virtual SMESH_ScalarBarActor* GetScalarBarActor() = 0;
 
@@ -166,6 +167,11 @@ class SMESHOBJECT_EXPORT SMESH_Actor: public SALOME_Actor
 
   virtual void UpdateScalarBar() = 0;
   virtual void UpdateDistribution() = 0;
+  virtual void ClipThreshold(bool isThresholdOn, double min = 0.0, double max = 0.0) = 0;
+  virtual SMESH_DeviceActor* GetActorForThreshold() = 0;
+  virtual bool IsClipThresholdOn() const = 0;
+  virtual void SetWireframeOff(bool isWireframeOff) = 0;
+  virtual bool IsWireframeOff() const = 0;
 
   virtual void SetPointsFontProperties( SMESH::LabelFont family, int size, 
                                         bool bold, bool italic, bool shadow,
index 36ef136fa27145947618c80e24acb66d5ecd07d0..49a326b69486e75c7968cd27f80f7e6d64140b2a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -144,14 +144,14 @@ class SMESH_ActorDef : public SMESH_Actor
   virtual void SetBallScale(double size);
   virtual double GetBallScale();
 
-  virtual int GetNodeObjId(int theVtkID);
-  virtual double* GetNodeCoord(int theObjID);
-  virtual int GetNodeVtkId(int theObjID);
+  virtual vtkIdType GetNodeObjId(vtkIdType theVtkID);
+  virtual double* GetNodeCoord(vtkIdType theObjID);
+  virtual vtkIdType GetNodeVtkId(vtkIdType theObjID);
 
-  virtual int GetElemObjId(int theVtkID);
-  virtual vtkCell* GetElemCell(int theObjID);
+  virtual vtkIdType GetElemObjId(vtkIdType theVtkID);
+  virtual vtkCell* GetElemCell(vtkIdType theObjID);
 
-  virtual int GetObjDimension( const int theObjId );
+  virtual int GetObjDimension( const vtkIdType theObjId ) override;
 
   virtual void SetVisibility(int theMode);
   void SetVisibility(int theMode, bool theIsUpdateRepersentation);
@@ -206,7 +206,7 @@ class SMESH_ActorDef : public SMESH_Actor
 
   virtual void SetControlMode(eControl theMode);
   virtual void SetControl(SMESH::Controls::FunctorPtr theFunctor);
-  virtual int GetNumberControlEntities();
+  virtual smIdType GetNumberControlEntities();
   virtual eControl GetControlMode(){ return myControlMode;}
   virtual SMESH::Controls::FunctorPtr GetFunctor() { return myFunctor; }
 
@@ -226,6 +226,11 @@ class SMESH_ActorDef : public SMESH_Actor
 
   virtual void UpdateScalarBar();
   virtual void UpdateDistribution();
+  virtual SMESH_DeviceActor* GetActorForThreshold();
+  virtual void ClipThreshold(bool isThresholdOn, double min = 0.0, double max = 0.0);
+  virtual bool IsClipThresholdOn() const { return myIsClipThresholdOn; }
+  virtual void SetWireframeOff(bool isWireframeOff);
+  virtual bool IsWireframeOff() const { return myIsWireframeOff; }
 
 #ifndef DISABLE_PLOT2DVIEWER
   virtual SPlot2d_Histogram* GetPlot2Histogram() { return my2dHistogram; }
@@ -296,9 +301,12 @@ class SMESH_ActorDef : public SMESH_Actor
 
   unsigned int myEntityMode;
   unsigned int myEntityModeCache;
+  unsigned int objectEntitiesCache;
   int  myRepresentationCache;
   bool myIsEntityModeCache;
   bool myIsPointsVisible;
+  bool myIsClipThresholdOn = false;
+  bool myIsWireframeOff = false;
 
   bool myIsShrinkable;
   bool myIsShrunk;
index 60c3964af29b33f01b8324c409b3f17377b9cb81..0aac1ed4ad0b710ac06882cce26ba603e103b543 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index c81c367955cd30a6e3712972d9c11d21ffd4fc85..b76abae6f3d158567e30ff6714c5e8c6485e3f2d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 81f51a9869aaaaf1588220b2011312120520f7fc..089025c46394db2f9360e8217b6655aba07e748e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #include <vtkUnstructuredGridWriter.h>
 #include <vtkUnsignedCharArray.h>
 
-//#ifdef _DEBUG_
-//static int MYDEBUG = 1;
-//#else
-//static int MYDEBUG = 0;
-//#endif
 
 namespace SMESH
 {
@@ -157,17 +152,17 @@ namespace SMESH
     }
   }
 
-  std::map<SMDSAbs_ElementType,int> GetEntitiesFromObject(SMESH_VisualObj *theObject) {
-    std::map<SMDSAbs_ElementType,int> entities;
-    entities.insert(std::pair<SMDSAbs_ElementType,int>(SMDSAbs_0DElement,
+  std::map<SMDSAbs_ElementType,::smIdType> GetEntitiesFromObject(SMESH_VisualObj *theObject) {
+    std::map<SMDSAbs_ElementType,::smIdType> entities;
+    entities.insert(std::pair<SMDSAbs_ElementType,::smIdType>(SMDSAbs_0DElement,
                 theObject ? theObject->GetNbEntities(SMDSAbs_0DElement) : 0));
-    entities.insert(std::pair<SMDSAbs_ElementType,int>(SMDSAbs_Ball,
+    entities.insert(std::pair<SMDSAbs_ElementType,::smIdType>(SMDSAbs_Ball,
                 theObject ? theObject->GetNbEntities(SMDSAbs_Ball) : 0));
-    entities.insert(std::pair<SMDSAbs_ElementType,int>(SMDSAbs_Edge,
+    entities.insert(std::pair<SMDSAbs_ElementType,::smIdType>(SMDSAbs_Edge,
                 theObject ? theObject->GetNbEntities(SMDSAbs_Edge) : 0));
-    entities.insert(std::pair<SMDSAbs_ElementType,int>(SMDSAbs_Face,
+    entities.insert(std::pair<SMDSAbs_ElementType,::smIdType>(SMDSAbs_Face,
                 theObject ? theObject->GetNbEntities(SMDSAbs_Face) : 0));
-    entities.insert(std::pair<SMDSAbs_ElementType,int>(SMDSAbs_Volume,
+    entities.insert(std::pair<SMDSAbs_ElementType,::smIdType>(SMDSAbs_Volume,
                 theObject ? theObject->GetNbEntities(SMDSAbs_Volume) : 0));
     return entities;
   }
index d4d45fa8341e8e81c3f8340601c7d01d9d112dd2..b33a46089f066680e03abb3d36339f5ab262ab8e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -84,7 +84,7 @@ SMESHOBJECT_EXPORT
               QString def);
    
  SMESHOBJECT_EXPORT
-   std::map<SMDSAbs_ElementType,int>
+   std::map<SMDSAbs_ElementType,::smIdType>
    GetEntitiesFromObject(SMESH_VisualObj *theObject);
    
 SMESHOBJECT_EXPORT
index 07275df16a8c1f7c110ee7081c3fec488ee01e12..387448e865213921e464286d8b097cdb3a897aed 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -43,6 +43,7 @@
 #include <vtkRenderer.h>
 #include <vtkUnstructuredGrid.h>
 #include <vtkCellData.h>
+#include <iostream>
 
 vtkStandardNewMacro(SMESH_CellLabelActor)
 
@@ -70,7 +71,7 @@ SMESH_CellLabelActor::SMESH_CellLabelActor()
   myClsLabeledDataMapper = vtkLabeledDataMapper::New();
   myClsLabeledDataMapper->SetInputConnection(myClsSelectVisiblePoints->GetOutputPort());
 
-  myClsLabeledDataMapper->SetLabelFormat("%d");
+  //myClsLabeledDataMapper->SetLabelFormat("%d");
   myClsLabeledDataMapper->SetLabelModeToLabelScalars();
 
   myClsTextProp = vtkTextProperty::New();
@@ -156,18 +157,18 @@ void SMESH_CellLabelActor::SetCellsLabeled(bool theIsCellsLabeled)
   {
     myCellsNumDataSet->ShallowCopy(aGrid);
     vtkUnstructuredGrid *aDataSet = myCellsNumDataSet;
-    int aNbElem = aDataSet->GetNumberOfCells();
-    vtkIntArray *anArray = vtkIntArray::New();
+    vtkIdType aNbElem = aDataSet->GetNumberOfCells();
+    vtkIdTypeArray *anArray = vtkIdTypeArray::New();
     anArray->SetNumberOfValues(aNbElem);
     myExtractUnstructuredGrid->BuildOut2InMap();
-    for(int anId = 0; anId < aNbElem; anId++)
+    for(vtkIdType anId = 0; anId < aNbElem; anId++)
     {
       vtkIdType id = anId;
       if(IsImplicitFunctionUsed())
         id = myExtractGeometry->GetElemObjId(id);
       id = myExtractUnstructuredGrid->GetInputId(id);
       id = (id >=0) ? id : anId;
-      int aSMDSId = myVisualObj->GetElemObjId(id);
+      vtkIdType aSMDSId = myVisualObj->GetElemObjId(id);
       anArray->SetValue(anId,aSMDSId);
     }
     aDataSet->GetCellData()->SetScalars(anArray);
index 38596c9d8e6f780b893956c87d12da4855d63449..2aa2eb849c560fbeda075459694f779bd2d741f1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 882326963314396aa3ab25a17d6c9a902d13d1bc..be17fe3c30317da05193bf43c17d083e1e28f2d5 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -31,7 +31,7 @@
 #include "SMESH_ControlsDef.hxx"
 #include "SMESH_ActorUtils.h"
 #include "SMESH_FaceOrientationFilter.h"
-#include "VTKViewer_CellLocationsArray.h"
+//#include "VTKViewer_CellLocationsArray.h"
 #include "VTKViewer_PolyDataMapper.h"
 
 #include <VTKViewer_Transform.h>
@@ -60,7 +60,7 @@
 #include <vtkUnsignedCharArray.h>
 
 #include <vtkImplicitBoolean.h>
-#include <vtkPassThroughFilter.h>
+#include <vtkPassThrough.h>
 
 #include <vtkRenderer.h>
 
 
 #include "utilities.h"
 
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-#else
-static int MYDEBUG = 0;
-#endif
 
 using namespace std;
 
@@ -83,7 +78,7 @@ vtkStandardNewMacro(SMESH_DeviceActor)
 SMESH_DeviceActor
 ::SMESH_DeviceActor()
 {
-  if(MYDEBUG) MESSAGE("SMESH_DeviceActor - "<<this);
+  MESSAGE("SMESH_DeviceActor - "<<this);
 
   myIsShrinkable = false;
   myIsShrunk = false;
@@ -118,7 +113,7 @@ SMESH_DeviceActor
   myTransformFilter = VTKViewer_TransformFilter::New();
 
   for(int i = 0; i < 6; i++)
-    myPassFilter.push_back(vtkPassThroughFilter::New());
+    myPassFilter.push_back(vtkPassThrough::New());
 
   // Orientation of faces
   myIsFacesOriented = false;
@@ -140,7 +135,7 @@ SMESH_DeviceActor
 SMESH_DeviceActor
 ::~SMESH_DeviceActor()
 {
-  if(MYDEBUG) MESSAGE("~SMESH_DeviceActor - "<<this);
+  MESSAGE("~SMESH_DeviceActor - "<<this);
 
   myMapper->Delete();
   // myPlaneCollection->Delete(); -- it is vtkSmartPointer
@@ -161,7 +156,7 @@ SMESH_DeviceActor
 
   myTransformFilter->Delete();
 
-  for(int i = 0, iEnd = myPassFilter.size(); i < iEnd; i++)
+  for(size_t i = 0, iEnd = myPassFilter.size(); i < iEnd; i++)
     myPassFilter[i]->Delete();
 
   myShrinkFilter->Delete();
@@ -426,7 +421,7 @@ SMESH_DeviceActor
       aCellTypesArray->SetNumberOfTuples( aNbCells );
       aScalars->SetNumberOfTuples( aNbCells );
 
-      VTKViewer_CellLocationsArray* aCellLocationsArray = VTKViewer_CellLocationsArray::New();
+      vtkIdTypeArray* aCellLocationsArray = vtkIdTypeArray::New();
       aCellLocationsArray->SetNumberOfComponents( 1 );
       aCellLocationsArray->SetNumberOfTuples( aNbCells );
 
@@ -491,7 +486,7 @@ SMESH_DeviceActor
       aCellTypesArray->SetNumberOfTuples( aNbCells );
       aScalars->SetNumberOfTuples( aNbCells );
 
-      VTKViewer_CellLocationsArray* aCellLocationsArray = VTKViewer_CellLocationsArray::New();
+      vtkIdTypeArray* aCellLocationsArray = vtkIdTypeArray::New();
       aCellLocationsArray->SetNumberOfComponents( 1 );
       aCellLocationsArray->SetNumberOfTuples( aNbCells );
 
@@ -509,6 +504,80 @@ SMESH_DeviceActor
       theLookupTable->SetRange(aScalars->GetRange());
       theLookupTable->Build();
 
+      myMergeFilter->SetScalarsData(aDataSet);
+      aDataSet->Delete();
+    }
+    else if (Warping3D* aWarping3D = dynamic_cast<Warping3D*>(theFunctor.get())){
+
+      SMESH::Controls::Warping3D::WValues aValues;
+
+      aWarping3D->GetValues(aValues);
+      vtkUnstructuredGrid* aDataSet = vtkUnstructuredGrid::New();
+      vtkUnstructuredGrid* aGrid = myVisualObj->GetUnstructuredGrid();
+
+      aDataSet->SetPoints(aGrid->GetPoints());
+
+      vtkIdType aNbCells = aValues.size();
+
+      vtkDoubleArray* aScalars = vtkDoubleArray::New();
+      aScalars->SetNumberOfComponents(1);
+      aScalars->SetNumberOfTuples(aNbCells);
+
+      vtkIdType aCellsSize = 3 * aNbCells;
+      vtkCellArray* aConnectivity = vtkCellArray::New();
+      aConnectivity->Allocate(aCellsSize, 0);
+
+      vtkUnsignedCharArray* aCellTypesArray = vtkUnsignedCharArray::New();
+      aCellTypesArray->SetNumberOfComponents(1);
+      aCellTypesArray->Allocate(aNbCells* aCellTypesArray->GetNumberOfComponents());
+
+      Warping3D::WValues::const_iterator anIter = aValues.begin();
+      aNbCells = 0;
+      for (; anIter != aValues.end(); anIter++) {
+
+        const Warping3D::Value& aValue = *anIter;
+        vtkIdList* anIdList = vtkIdList::New();
+        anIdList->SetNumberOfIds(aValue.myPntIds.size());
+        bool isExist = true;
+        for (int i = 0; i < aValue.myPntIds.size(); ++i)
+        {
+          int aVTKId = myVisualObj->GetNodeVTKId(aValue.myPntIds[i]);
+          if (aVTKId < 0)
+          {
+            isExist = false;
+            break;
+          }
+          anIdList->SetId(i, aVTKId);
+        }
+        if (isExist)
+        {
+          aConnectivity->InsertNextCell(anIdList);
+          aCellTypesArray->InsertNextValue(VTK_POLYGON);
+          aScalars->SetValue(aNbCells, aValue.myWarp);
+          aNbCells++;
+        }
+      }
+      aCellTypesArray->SetNumberOfTuples(aNbCells);
+      aScalars->SetNumberOfTuples(aNbCells);
+
+      vtkIdTypeArray* aCellLocationsArray = vtkIdTypeArray::New();
+      aCellLocationsArray->SetNumberOfComponents(1);
+      aCellLocationsArray->SetNumberOfTuples(aNbCells);
+
+      aConnectivity->InitTraversal();
+      vtkIdType const* pts(nullptr);
+      for (vtkIdType idType = 0, npts; aConnectivity->GetNextCell(npts, pts); idType++)
+        aCellLocationsArray->SetValue(idType, aConnectivity->GetTraversalLocation(npts));
+
+      aDataSet->SetCells(aCellTypesArray, aCellLocationsArray, aConnectivity);
+      SetUnstructuredGrid(aDataSet);
+
+      aDataSet->GetCellData()->SetScalars(aScalars);
+      aScalars->Delete();
+
+      theLookupTable->SetRange(aScalars->GetRange());
+      theLookupTable->Build();
+
       myMergeFilter->SetScalarsData(aDataSet);
       aDataSet->Delete();
     }
@@ -586,7 +655,7 @@ SMESH_DeviceActor
       }
     }
     
-    VTKViewer_CellLocationsArray* aCellLocationsArray = VTKViewer_CellLocationsArray::New();
+    vtkIdTypeArray* aCellLocationsArray = vtkIdTypeArray::New();
     aCellLocationsArray->SetNumberOfComponents( 1 );
     aCellLocationsArray->SetNumberOfTuples( aNbCells );
     
@@ -604,7 +673,7 @@ SMESH_DeviceActor
            ( aPredicate = dynamic_cast<CoincidentNodes*>(theFunctor.get())))
   {
     myExtractUnstructuredGrid->SetModeOfChanging(VTKViewer_ExtractUnstructuredGrid::eAdding);
-    vtkIdType aNbNodes = myVisualObj->GetNbEntities(SMDSAbs_Node);
+    vtkIdType aNbNodes = FromSmIdType<vtkIdType>(myVisualObj->GetNbEntities(SMDSAbs_Node));
     for( vtkIdType i = 0; i < aNbNodes; i++ ){
       vtkIdType anObjId = myVisualObj->GetNodeObjId(i);
       if(aPredicate->IsSatisfy(anObjId))
@@ -783,6 +852,8 @@ SMESH_DeviceActor
     myGeomFilter->SetInside(false);
     myGeomFilter->SetWireframeMode(false);
     GetProperty()->SetRepresentation(theMode);
+  case eNoneRepr:
+    return;
   }
   SetMarkerEnabled(theMode == ePoint);
   myRepresentation = theMode;
@@ -839,9 +910,9 @@ SMESH_DeviceActor
 }
 
 
-int
+vtkIdType
 SMESH_DeviceActor
-::GetNodeObjId(int theVtkID)
+::GetNodeObjId(vtkIdType theVtkID)
 {
   vtkIdType anID = theVtkID;
 
@@ -849,31 +920,31 @@ SMESH_DeviceActor
     anID = myExtractGeometry->GetNodeObjId(theVtkID);
 
   vtkIdType aRetID = myVisualObj->GetNodeObjId(anID);
-  if(MYDEBUG) MESSAGE("GetNodeObjId - theVtkID = "<<theVtkID<<"; anID = "<<anID<<"; aRetID = "<<aRetID);
+  MESSAGE("GetNodeObjId - theVtkID = "<<theVtkID<<"; anID = "<<anID<<"; aRetID = "<<aRetID);
   return aRetID;
 }
 
 double* 
 SMESH_DeviceActor
-::GetNodeCoord(int theObjID)
+::GetNodeCoord(vtkIdType theObjID)
 {
   vtkDataSet* aDataSet = myMergeFilter->GetOutput();
   vtkIdType anID = myVisualObj->GetNodeVTKId(theObjID);
   double* aCoord = (anID >=0 && anID < aDataSet->GetNumberOfPoints()) ? aDataSet->GetPoint(anID) : NULL;
-  if(MYDEBUG) MESSAGE("GetNodeCoord - theObjID = "<<theObjID<<"; anID = "<<anID);
+  MESSAGE("GetNodeCoord - theObjID = "<<theObjID<<"; anID = "<<anID);
   return aCoord;
 }
 
-int
+vtkIdType
 SMESH_DeviceActor
-::GetNodeVtkId(int theObjID) 
+::GetNodeVtkId(vtkIdType theObjID) 
 {
   return myVisualObj->GetNodeVTKId(theObjID);
 }
 
-int
+vtkIdType
 SMESH_DeviceActor
-::GetElemObjId(int theVtkID)
+::GetElemObjId(vtkIdType theVtkID)
 {
   vtkIdType anId = myGeomFilter->GetElemObjId(theVtkID);
   if(anId < 0) 
@@ -890,20 +961,20 @@ SMESH_DeviceActor
     return -1;
 
   vtkIdType aRetID = myVisualObj->GetElemObjId(anId3);
-  if(MYDEBUG) 
-     MESSAGE("GetElemObjId - theVtkID = "<<theVtkID<<"; anId2 = "<<anId2<<"; anId3 = "<<anId3<<"; aRetID = "<<aRetID);
+
+  MESSAGE("GetElemObjId - theVtkID = "<<theVtkID<<"; anId2 = "<<anId2<<"; anId3 = "<<anId3<<"; aRetID = "<<aRetID);
   return aRetID;
 }
 
 vtkCell* 
 SMESH_DeviceActor
-::GetElemCell(int theObjID)
+::GetElemCell(vtkIdType theObjID)
 {
   vtkDataSet* aDataSet = myVisualObj->GetUnstructuredGrid();
   vtkIdType aGridID = myVisualObj->GetElemVTKId(theObjID);
   vtkCell* aCell = (aGridID >= 0 ) ? aDataSet->GetCell(aGridID) : NULL;
-  if(MYDEBUG) 
-    MESSAGE("GetElemCell - theObjID = "<<theObjID<<"; aGridID = "<<aGridID);
+
+  MESSAGE("GetElemCell - theObjID = "<<theObjID<<"; aGridID = "<<aGridID);
   return aCell;
 }
 
index 70c39ba71acaa85deef999795af4666b885c1dab..c8f17d254e3d42f13c881b6a7a1b4b8833e5254c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -44,7 +44,7 @@ class vtkShrinkFilter;
 class vtkUnstructuredGrid;
 class vtkLookupTable;
 class vtkImplicitBoolean;
-class vtkPassThroughFilter;
+class vtkPassThrough;
 class vtkPlaneCollection;
 
 class VTKViewer_Transform;
@@ -68,12 +68,12 @@ class SMESHOBJECT_EXPORT SMESH_DeviceActor: public vtkLODActor{
   void SetStoreGemetryMapping(bool theStoreMapping);
   void SetStoreIDMapping(bool theStoreMapping);
 
-  virtual int GetNodeObjId(int theVtkID);
-  virtual double* GetNodeCoord(int theObjID);
-  virtual int GetNodeVtkId(int theObjID);
+  virtual vtkIdType GetNodeObjId(vtkIdType theVtkID);
+  virtual double* GetNodeCoord(vtkIdType theObjID);
+  virtual vtkIdType GetNodeVtkId(vtkIdType theObjID);
 
-  virtual int GetElemObjId(int theVtkID);
-  virtual vtkCell* GetElemCell(int theObjID);
+  virtual vtkIdType GetElemObjId(vtkIdType theVtkID);
+  virtual vtkCell* GetElemCell(vtkIdType theObjID);
 
   virtual void SetTransform(VTKViewer_Transform* theTransform); 
   virtual vtkMTimeType GetMTime();
@@ -108,7 +108,7 @@ class SMESHOBJECT_EXPORT SMESH_DeviceActor: public vtkLODActor{
   void SetShrink(); 
   void UnShrink(); 
 
-  enum EReperesent { ePoint, eWireframe, eSurface, eInsideframe};
+  enum EReperesent { ePoint, eWireframe, eSurface, eInsideframe, eNoneRepr=-1};
   EReperesent GetRepresentation(){ return myRepresentation;}
   void SetRepresentation(EReperesent theMode);
 
@@ -183,7 +183,7 @@ class SMESHOBJECT_EXPORT SMESH_DeviceActor: public vtkLODActor{
   bool myStoreClippingMapping;
   VTKViewer_GeometryFilter *myGeomFilter;
   VTKViewer_TransformFilter *myTransformFilter;
-  std::vector<vtkPassThroughFilter*> myPassFilter;
+  std::vector<vtkPassThrough*> myPassFilter;
 
   vtkShrinkFilter* myShrinkFilter;
   bool myIsShrinkable;
index 4a4ab1716c0794a933b0c63f034169170155c5ca..22e7cdd672a36d4e04727198aff46b7aa45e3bef 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 
 using namespace std;
 
-//#ifdef _DEBUG_
-//static int MYDEBUG = 0;
-//#else
-//static int MYDEBUG = 0;
-//#endif
-
 #if defined __GNUC__
   #if __GNUC__ == 2
     #define __GNUC_2__
@@ -58,16 +52,16 @@ SMESH_ExtractGeometry::SMESH_ExtractGeometry()
 SMESH_ExtractGeometry::~SMESH_ExtractGeometry()
 {}
 
-vtkIdType SMESH_ExtractGeometry::GetElemObjId(int theVtkID)
+vtkIdType SMESH_ExtractGeometry::GetElemObjId(vtkIdType theVtkID)
 {
-  if( theVtkID < 0 || theVtkID >= (int)myElemVTK2ObjIds.size()) return -1;
+  if( theVtkID < 0 || theVtkID >= myElemVTK2ObjIds.size()) return -1;
   return myElemVTK2ObjIds[theVtkID];
 }
 
 
-vtkIdType SMESH_ExtractGeometry::GetNodeObjId(int theVtkID)
+vtkIdType SMESH_ExtractGeometry::GetNodeObjId(vtkIdType theVtkID)
 {
-  if ( theVtkID < 0 || theVtkID >= (int)myNodeVTK2ObjIds.size()) return -1;
+  if ( theVtkID < 0 || theVtkID >= myNodeVTK2ObjIds.size()) return -1;
   return myNodeVTK2ObjIds[theVtkID];
 }
 
index f417c49b26ca893d0dd38df53cb9a79789701f31..9043841567d139c75d2a9092ca5f9a1e3dba7fca 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -42,8 +42,8 @@ public:
   }
   bool GetStoreMapping(){ return myStoreMapping;}
 
-  virtual vtkIdType GetNodeObjId(int theVtkID);
-  virtual vtkIdType GetElemObjId(int theVtkID);
+  virtual vtkIdType GetNodeObjId(vtkIdType theVtkID);
+  virtual vtkIdType GetElemObjId(vtkIdType theVtkID);
 
 protected:
   SMESH_ExtractGeometry();
index 93b1e353ed2c35296165e03f8e2bdae5434e1ac9..7e718ab423451d837cc3ab31c54e71cd86ea5861 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 73bf7a2f607c1debb49708d00b619d8833441c3a..282804b310717d82616cd9481b3f30f04074198f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 4d4afbf4120fbaa407c7a5fa2e334368acad483a..e3fa7389b6ec15aca5e50532c4e67f0a4c9e4a9b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -61,7 +61,7 @@ SMESH_NodeLabelActor::SMESH_NodeLabelActor()
 
   myPtsLabeledDataMapper = vtkLabeledDataMapper::New();
   myPtsLabeledDataMapper->SetInputConnection(myPtsSelectVisiblePoints->GetOutputPort());
-  myPtsLabeledDataMapper->SetLabelFormat("%d");
+  //myPtsLabeledDataMapper->SetLabelFormat("%d");
   myPtsLabeledDataMapper->SetLabelModeToLabelScalars();
 
   myPtsTextProp = vtkTextProperty::New();
@@ -145,18 +145,18 @@ void SMESH_NodeLabelActor::SetPointsLabeled(bool theIsPointsLabeled)
   {
     myPointsNumDataSet->ShallowCopy(aGrid);
     vtkUnstructuredGrid *aDataSet = myPointsNumDataSet;
-    
-    int aNbElem = aDataSet->GetNumberOfPoints();
-    
-    vtkIntArray *anArray = vtkIntArray::New();
+
+    vtkIdType aNbElem = aDataSet->GetNumberOfPoints();
+
+    vtkIdTypeArray *anArray = vtkIdTypeArray::New();
     anArray->SetNumberOfValues( aNbElem );
-    
+
     for ( vtkIdType anId = 0; anId < aNbElem; anId++ )
     {
-      int aSMDSId = myVisualObj->GetNodeObjId( anId );
+      vtkIdType aSMDSId = myVisualObj->GetNodeObjId( anId );
       anArray->SetValue( anId, aSMDSId );
     }
-    
+
     aDataSet->GetPointData()->SetScalars( anArray );
     myPtsMaskPoints->SetInputData( aDataSet );
     myPointLabels->SetVisibility( GetVisibility() );
index 3158e7418ad9505db7fa547391a4a6a806b096d8..a47a1017b5037ad4ec98ff91dbc11f90e52f2eb6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 039eba7283220469f4e5d3d94b28d53123aa68d4..585442ccb128d208aaa132d04119641895c0d68c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -38,7 +38,7 @@
 
 #include <SalomeApp_Application.h>
 #include <VTKViewer_ExtractUnstructuredGrid.h>
-#include <VTKViewer_CellLocationsArray.h>
+//#include <VTKViewer_CellLocationsArray.h>
 
 #include CORBA_SERVER_HEADER(SMESH_Gen)
 #include CORBA_SERVER_HEADER(SALOME_Exception)
@@ -67,14 +67,7 @@ using namespace std;
 }
 #endif
 
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
 static int MYDEBUGWITHFILES = 0;//1;
-#else
-static int MYDEBUG = 0;
-static int MYDEBUGWITHFILES = 0;
-#endif
-
 
 /*
   Class       : SMESH_VisualObjDef
@@ -86,7 +79,7 @@ static int MYDEBUGWITHFILES = 0;
 //=================================================================================
 SMESH_VisualObjDef::SMESH_VisualObjDef()
 {
-  if ( MYDEBUG ) MESSAGE("-------------------------------SMESH_VisualObjDef::SMESH_VisualObjDef");
+  MESSAGE("-------------------------------SMESH_VisualObjDef::SMESH_VisualObjDef");
   myGrid = vtkUnstructuredGrid::New();
   myLocalGrid = false;
   ClearEntitiesFlags();
@@ -94,8 +87,8 @@ SMESH_VisualObjDef::SMESH_VisualObjDef()
 }
 SMESH_VisualObjDef::~SMESH_VisualObjDef()
 {
-  if ( MYDEBUG ) MESSAGE("--------------------------------SMESH_VisualObjDef::~SMESH_VisualObjDef");
-  if ( MYDEBUG ) MESSAGE( "myGrid->GetReferenceCount() = " << myGrid->GetReferenceCount() );
+  MESSAGE("--------------------------------SMESH_VisualObjDef::~SMESH_VisualObjDef");
+  MESSAGE( "myGrid->GetReferenceCount() = " << myGrid->GetReferenceCount() );
   myGrid->Delete();
 }
 
@@ -103,7 +96,7 @@ SMESH_VisualObjDef::~SMESH_VisualObjDef()
 // functions : GetNodeObjId, GetNodeVTKId, GetElemObjId, GetElemVTKId
 // purpose   : Methods for retrieving VTK IDs by SMDS IDs and  vice versa
 //=================================================================================
-vtkIdType SMESH_VisualObjDef::GetNodeObjId( int theVTKID )
+vtkIdType SMESH_VisualObjDef::GetNodeObjId( vtkIdType theVTKID )
 {
   if (myLocalGrid)
   {
@@ -114,10 +107,10 @@ vtkIdType SMESH_VisualObjDef::GetNodeObjId( int theVTKID )
   if( this->GetMesh() )
     aNode = this->GetMesh()->FindNodeVtk( theVTKID );
 
-  return aNode ? aNode->GetID() : -1;
+  return aNode ? FromSmIdType<vtkIdType>(aNode->GetID()) : -1;
 }
 
-vtkIdType SMESH_VisualObjDef::GetNodeVTKId( int theObjID )
+vtkIdType SMESH_VisualObjDef::GetNodeVTKId( vtkIdType theObjID )
 {
   if (myLocalGrid)
   {
@@ -132,17 +125,17 @@ vtkIdType SMESH_VisualObjDef::GetNodeVTKId( int theObjID )
   return aNode ? aNode->GetVtkID() : -1;
 }
 
-vtkIdType SMESH_VisualObjDef::GetElemObjId( int theVTKID )
+vtkIdType SMESH_VisualObjDef::GetElemObjId( vtkIdType theVTKID )
 {
   if (myLocalGrid)
   {
     TMapOfIds::const_iterator i = myVTK2SMDSElems.find(theVTKID);
     return i == myVTK2SMDSElems.end() ? -1 : i->second;
   }
-  return this->GetMesh()->FromVtkToSmds(theVTKID);
+  return FromSmIdType<vtkIdType>(this->GetMesh()->FromVtkToSmds(theVTKID));
 }
 
-vtkIdType SMESH_VisualObjDef::GetElemVTKId( int theObjID )
+vtkIdType SMESH_VisualObjDef::GetElemVTKId( vtkIdType theObjID )
 {
   if (myLocalGrid)
   {
@@ -171,7 +164,7 @@ void SMESH_VisualObjDef::createPoints( vtkPoints* thePoints )
     return;
 
   TEntityList aNodes;
-  vtkIdType nbNodes = GetEntities( SMDSAbs_Node, aNodes );
+  vtkIdType nbNodes = FromSmIdType<vtkIdType>(GetEntities( SMDSAbs_Node, aNodes ));
   thePoints->SetNumberOfPoints( nbNodes );
 
   int nbPoints = 0;
@@ -183,7 +176,7 @@ void SMESH_VisualObjDef::createPoints( vtkPoints* thePoints )
     if ( aNode != 0 )
     {
       thePoints->SetPoint( nbPoints, aNode->X(), aNode->Y(), aNode->Z() );
-      int anId = aNode->GetID();
+      smIdType anId = aNode->GetID();
       mySMDS2VTKNodes.insert( mySMDS2VTKNodes.end(), std::make_pair( anId, nbPoints ));
       myVTK2SMDSNodes.insert( myVTK2SMDSNodes.end(), std::make_pair( nbPoints, anId ));
       nbPoints++;
@@ -200,7 +193,7 @@ void SMESH_VisualObjDef::createPoints( vtkPoints* thePoints )
 //=================================================================================
 void SMESH_VisualObjDef::buildPrs(bool buildGrid)
 {
-  if ( MYDEBUG ) MESSAGE("---------------------------SMESH_VisualObjDef::buildPrs " << buildGrid);
+  MESSAGE("---------------------------SMESH_VisualObjDef::buildPrs " << buildGrid);
   if (buildGrid)
   {
     myLocalGrid = true;
@@ -234,7 +227,7 @@ void SMESH_VisualObjDef::buildPrs(bool buildGrid)
     if (!GetMesh()->IsCompacted())
     {
       NulData(); // detach from the SMDS grid to allow immediate memory de-allocation in compactMesh()
-      if ( MYDEBUG ) MESSAGE("*** buildPrs ==> compactMesh!");
+      MESSAGE("*** buildPrs ==> compactMesh!");
       GetMesh()->CompactMesh();
       if ( SMESHDS_Mesh* m = dynamic_cast<SMESHDS_Mesh*>( GetMesh() )) // IPAL53915
         m->GetScript()->SetModified(false); // drop IsModified set in compactMesh()
@@ -284,7 +277,7 @@ namespace{
     theConnect.clear();
     for(; theNodesIter->more();)
       theConnect.push_back(theNodesIter->next());
-    return theConnect.size();
+    return (int) theConnect.size();
   }
   
   inline 
@@ -292,7 +285,7 @@ namespace{
              const SMESH_VisualObjDef::TMapOfIds& theSMDS2VTKNodes, 
              const TConnect& theConnect, 
              int thePosition,
-             int theId)
+             vtkIdType theId)
   {
     theIdList->SetId(thePosition,theSMDS2VTKNodes.find(theConnect[theId]->GetID())->second);
   }
@@ -309,8 +302,7 @@ void SMESH_VisualObjDef::buildElemPrs()
   myGrid->SetPoints( aPoints );
   aPoints->Delete();
 
-  if ( MYDEBUG )
-    MESSAGE("Update - myGrid->GetNumberOfPoints() = "<<myGrid->GetNumberOfPoints());
+  MESSAGE("Update - myGrid->GetNumberOfPoints() = "<<myGrid->GetNumberOfPoints());
 
   // Calculate cells size
 
@@ -319,7 +311,7 @@ void SMESH_VisualObjDef::buildElemPrs()
     { SMDSAbs_Edge, SMDSAbs_Face, SMDSAbs_Volume, SMDSAbs_Ball, SMDSAbs_0DElement };
 
   // get entity data
-  map<SMDSAbs_ElementType,int> nbEnts;
+  map<SMDSAbs_ElementType,smIdType> nbEnts;
   map<SMDSAbs_ElementType,TEntityList> anEnts;
 
   vtkIdType aNbCells = 0;
@@ -361,8 +353,8 @@ void SMESH_VisualObjDef::buildElemPrs()
       }
     }
   }
-  if ( MYDEBUG )
-    MESSAGE( "Update - aNbCells = "<<aNbCells<<"; aCellsSize = "<<aCellsSize );
+
+  MESSAGE( "Update - aNbCells = "<<aNbCells<<"; aCellsSize = "<<aCellsSize );
 
   // Create cells
 
@@ -404,9 +396,9 @@ void SMESH_VisualObjDef::buildElemPrs()
 
         vtkIdType aNbNodes = anElem->NbNodes();
         anIdList->SetNumberOfIds( aNbNodes );
-        const vtkIdType vtkElemType = SMDS_MeshCell::toVtkType( anElem->GetEntityType() );
+        const VTKCellType vtkElemType = SMDS_MeshCell::toVtkType( anElem->GetEntityType() );
 
-        int anId = anElem->GetID();
+        smIdType anId = anElem->GetID();
 
         mySMDS2VTKElems.insert( mySMDS2VTKElems.end(), std::make_pair( anId, iElem ));
         myVTK2SMDSElems.insert( myVTK2SMDSElems.end(), std::make_pair( iElem, anId ));
@@ -424,7 +416,7 @@ void SMESH_VisualObjDef::buildElemPrs()
                 anIdList->InsertNextId(ph->NbFaceNodes(i));
                 for(int j = 1; j <= ph->NbFaceNodes(i); j++) {
                   if ( const SMDS_MeshNode* n = ph->GetFaceNode( i, j ))
-                    anIdList->InsertNextId( mySMDS2VTKNodes[ n->GetID() ]);
+                    anIdList->InsertNextId( mySMDS2VTKNodes[ FromSmIdType<vtkIdType>(n->GetID()) ]);
                 }
               }
             }
@@ -435,13 +427,13 @@ void SMESH_VisualObjDef::buildElemPrs()
             if (aConnectivities.size() > 0) {
               aConnect.clear();
               GetConnect(aNodesIter,aConnect);
-              for (vtkIdType aNodeId = 0; aNodeId < aNbNodes; aNodeId++)
+              for (int aNodeId = 0; aNodeId < aNbNodes; aNodeId++)
                 SetId(anIdList,mySMDS2VTKNodes,aConnect,aNodeId,aConnectivities[aNodeId]);
             }
             else {
               for( vtkIdType aNodeId = 0; aNodesIter->more(); aNodeId++ ){
                 const SMDS_MeshElement* aNode = aNodesIter->next();
-                anIdList->SetId( aNodeId, mySMDS2VTKNodes[aNode->GetID()] );
+                anIdList->SetId( aNodeId, mySMDS2VTKNodes[FromSmIdType<vtkIdType>(aNode->GetID())]);
               }
             }
           }
@@ -465,7 +457,7 @@ void SMESH_VisualObjDef::buildElemPrs()
 
   // Insert cells in grid
 
-  VTKViewer_CellLocationsArray* aCellLocationsArray = VTKViewer_CellLocationsArray::New();
+  vtkIdTypeArray* aCellLocationsArray = vtkIdTypeArray::New();
   aCellLocationsArray->SetNumberOfComponents( 1 );
   aCellLocationsArray->SetNumberOfTuples( aNbCells );
 
@@ -491,10 +483,10 @@ void SMESH_VisualObjDef::buildElemPrs()
 // function : GetEdgeNodes
 // purpose  : Retrieve ids of nodes from edge of elements ( edge is numbered from 0 )
 //=================================================================================
-bool SMESH_VisualObjDef::GetEdgeNodes( const int theElemId,
-                                       const int theEdgeNum,
-                                       int&      theNodeId1,
-                                       int&      theNodeId2 ) const
+bool SMESH_VisualObjDef::GetEdgeNodes( const smIdType theElemId,
+                                       const int      theEdgeNum,
+                                       smIdType&      theNodeId1,
+                                       smIdType&      theNodeId2 ) const
 {
   const SMDS_Mesh* aMesh = GetMesh();
   if ( aMesh == 0 )
@@ -557,7 +549,7 @@ void SMESH_VisualObjDef::updateEntitiesFlags()
   unsigned int tmp = myEntitiesState;
   ClearEntitiesFlags();
 
-  map<SMDSAbs_ElementType,int> entities = SMESH::GetEntitiesFromObject(this);
+  map<SMDSAbs_ElementType,::smIdType> entities = SMESH::GetEntitiesFromObject(this);
 
 
   if( myEntitiesCache[SMDSAbs_0DElement] != 0 ||
@@ -628,8 +620,8 @@ SMESH_MeshObj::SMESH_MeshObj(SMESH::SMESH_Mesh_ptr theMesh):
   myClient(SalomeApp_Application::orb(),theMesh)
 {
         myEmptyGrid = 0;
-  if ( MYDEBUG ) 
-    MESSAGE("SMESH_MeshObj - this = "<<this<<"; theMesh->_is_nil() = "<<theMesh->_is_nil());
+
+  MESSAGE("SMESH_MeshObj - this = "<<this<<"; theMesh->_is_nil() = "<<theMesh->_is_nil());
 }
 
 //=================================================================================
@@ -638,8 +630,7 @@ SMESH_MeshObj::SMESH_MeshObj(SMESH::SMESH_Mesh_ptr theMesh):
 //=================================================================================
 SMESH_MeshObj::~SMESH_MeshObj()
 {
-  if ( MYDEBUG ) 
-    MESSAGE("SMESH_MeshObj - this = "<<this<<"\n");
+  MESSAGE("SMESH_MeshObj - this = "<<this<<"\n");
   if ( myEmptyGrid )
     myEmptyGrid->Delete();
 }
@@ -651,9 +642,9 @@ SMESH_MeshObj::~SMESH_MeshObj()
 bool SMESH_MeshObj::Update( int theIsClear )
 {
   // Update SMDS_Mesh on client part
-  if ( MYDEBUG ) MESSAGE("SMESH_MeshObj::Update " << this);
+  MESSAGE("SMESH_MeshObj::Update " << this);
   if ( myClient.Update(theIsClear) || GetUnstructuredGrid()->GetNumberOfPoints()==0) {
-    if ( MYDEBUG ) MESSAGE("buildPrs");
+    MESSAGE("buildPrs");
     buildPrs();  // Fill unstructured grid
     return true;
   }
@@ -662,7 +653,7 @@ bool SMESH_MeshObj::Update( int theIsClear )
 
 bool SMESH_MeshObj::NulData()
 {
-  if ( MYDEBUG ) MESSAGE ("SMESH_MeshObj::NulData() =============================================");
+  MESSAGE ("SMESH_MeshObj::NulData() =============================================");
   if (!myEmptyGrid)
   {
     myEmptyGrid = SMDS_UnstructuredGrid::New();
@@ -681,7 +672,7 @@ bool SMESH_MeshObj::NulData()
 // function : GetElemDimension
 // purpose  : Get dimension of element
 //=================================================================================
-int SMESH_MeshObj::GetElemDimension( const int theObjId )
+int SMESH_MeshObj::GetElemDimension( const smIdType theObjId )
 {
   const SMDS_MeshElement* anElem = myClient->FindElement( theObjId );
   if ( anElem == 0 )
@@ -703,7 +694,7 @@ int SMESH_MeshObj::GetElemDimension( const int theObjId )
 // function : GetEntities
 // purpose  : Get entities of specified type. Return number of entities
 //=================================================================================
-int SMESH_MeshObj::GetNbEntities( const SMDSAbs_ElementType theType) const
+smIdType SMESH_MeshObj::GetNbEntities( const SMDSAbs_ElementType theType) const
 {
   switch ( theType )
   {
@@ -742,7 +733,7 @@ int SMESH_MeshObj::GetNbEntities( const SMDSAbs_ElementType theType) const
   }
 }
 
-int SMESH_MeshObj::GetEntities( const SMDSAbs_ElementType theType, TEntityList& theObjs ) const
+smIdType SMESH_MeshObj::GetEntities( const SMDSAbs_ElementType theType, TEntityList& theObjs ) const
 {
   theObjs.clear();
 
@@ -821,7 +812,7 @@ bool SMESH_MeshObj::IsNodePrs() const
 //=================================================================================
 SMESH_SubMeshObj::SMESH_SubMeshObj( SMESH_MeshObj* theMeshObj )
 {
-  if ( MYDEBUG ) MESSAGE( "SMESH_SubMeshObj - theMeshObj = " << theMeshObj );
+  MESSAGE( "SMESH_SubMeshObj - theMeshObj = " << theMeshObj );
   
   myMeshObj = theMeshObj;
 }
@@ -834,7 +825,7 @@ SMESH_SubMeshObj::~SMESH_SubMeshObj()
 // function : GetElemDimension
 // purpose  : Get dimension of element
 //=================================================================================
-int SMESH_SubMeshObj::GetElemDimension( const int theObjId )
+int SMESH_SubMeshObj::GetElemDimension( const smIdType theObjId )
 {
   return myMeshObj == 0 ? 0 : myMeshObj->GetElemDimension( theObjId );
 }
@@ -855,7 +846,7 @@ void SMESH_SubMeshObj::UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunc
 //=================================================================================
 bool SMESH_SubMeshObj::Update( int theIsClear )
 {
-  if ( MYDEBUG ) MESSAGE("SMESH_SubMeshObj::Update " << this)
+  MESSAGE("SMESH_SubMeshObj::Update " << this);
   bool changed = myMeshObj->Update( theIsClear );
   buildPrs(true);
   return changed;
@@ -876,13 +867,13 @@ SMESH_GroupObj::SMESH_GroupObj( SMESH::SMESH_GroupBase_ptr theGroup,
 : SMESH_SubMeshObj( theMeshObj ),
   myGroupServer( SMESH::SMESH_GroupBase::_duplicate(theGroup) )
 {
-  if ( MYDEBUG ) MESSAGE("SMESH_GroupObj - theGroup->_is_nil() = "<<theGroup->_is_nil());
+  MESSAGE("SMESH_GroupObj - theGroup->_is_nil() = "<<theGroup->_is_nil());
   myGroupServer->Register();
 }
 
 SMESH_GroupObj::~SMESH_GroupObj()
 {
-  if ( MYDEBUG ) MESSAGE("~SMESH_GroupObj");
+  MESSAGE("~SMESH_GroupObj");
   myGroupServer->UnRegister();
 }
 
@@ -908,13 +899,13 @@ SMDSAbs_ElementType SMESH_GroupObj::GetElementType() const
 // function : getNodesFromElems
 // purpose  : Retrieve nodes from elements
 //=================================================================================
-static int getNodesFromElems( SMESH::long_array_var&              theElemIds,
+static int getNodesFromElems( SMESH::smIdType_array_var&          theElemIds,
                               const SMDS_Mesh*                    theMesh,
                               std::list<const SMDS_MeshElement*>& theResList )
 {
   set<const SMDS_MeshElement*> aNodeSet;
 
-  for ( CORBA::Long i = 0, n = theElemIds->length(); i < n; i++ )
+  for ( CORBA::ULong i = 0, n = theElemIds->length(); i < n; i++ )
   {
     const SMDS_MeshElement* anElem = theMesh->FindElement( theElemIds[ i ] );
     if ( anElem != 0 )
@@ -929,11 +920,9 @@ static int getNodesFromElems( SMESH::long_array_var&              theElemIds,
     }
   }
 
-  set<const SMDS_MeshElement*>::const_iterator anIter;
-  for ( anIter = aNodeSet.begin(); anIter != aNodeSet.end(); ++anIter )
-    theResList.push_back( *anIter );
+  theResList.assign( aNodeSet.begin(), aNodeSet.end() );
 
-  return theResList.size();    
+  return (int) aNodeSet.size();
 }
 
 //=================================================================================
@@ -941,11 +930,11 @@ static int getNodesFromElems( SMESH::long_array_var&              theElemIds,
 // purpose  : Get std::list<const SMDS_MeshElement*> from list of IDs
 //=================================================================================
 static int getPointers( const SMDSAbs_ElementType           theRequestType,
-                        SMESH::long_array_var&              theElemIds,
+                        SMESH::smIdType_array_var&          theElemIds,
                         const SMDS_Mesh*                    theMesh,
                         std::list<const SMDS_MeshElement*>& theResList )
 {
-  for ( CORBA::Long i = 0, n = theElemIds->length(); i < n; i++ )
+  for ( CORBA::ULong i = 0, n = theElemIds->length(); i < n; i++ )
   {
     const SMDS_MeshElement* anElem = theRequestType == SMDSAbs_Node
       ? theMesh->FindNode( theElemIds[ i ] ) : theMesh->FindElement( theElemIds[ i ] );
@@ -954,7 +943,7 @@ static int getPointers( const SMDSAbs_ElementType           theRequestType,
       theResList.push_back( anElem );
   }
 
-  return theResList.size();
+  return (int) theResList.size();
 }
 
 
@@ -962,7 +951,7 @@ static int getPointers( const SMDSAbs_ElementType           theRequestType,
 // function : GetEntities
 // purpose  : Get entities of specified type. Return number of entities
 //=================================================================================
-int SMESH_GroupObj::GetNbEntities( const SMDSAbs_ElementType theType) const
+smIdType SMESH_GroupObj::GetNbEntities( const SMDSAbs_ElementType theType) const
 {
   if(SMDSAbs_ElementType(myGroupServer->GetType()) == theType) {
     return myGroupServer->Size();
@@ -973,11 +962,11 @@ int SMESH_GroupObj::GetNbEntities( const SMDSAbs_ElementType theType) const
   return 0;
 }
 
-int SMESH_GroupObj::GetEntities( const SMDSAbs_ElementType theType, TEntityList& theResList ) const
+smIdType SMESH_GroupObj::GetEntities( const SMDSAbs_ElementType theType, TEntityList& theResList ) const
 {
   theResList.clear();
   SMDS_Mesh* aMesh = myMeshObj->GetMesh();
-  
+
   if ( aMesh == 0 )
     return 0;
 
@@ -985,7 +974,7 @@ int SMESH_GroupObj::GetEntities( const SMDSAbs_ElementType theType, TEntityList&
   if ( aGrpType != theType && theType != SMDSAbs_Node )
     return 0;
 
-  SMESH::long_array_var anIds = myGroupServer->GetListOfID();
+  SMESH::smIdType_array_var anIds = myGroupServer->GetListOfID();
   if ( anIds->length() == 0 )
     return 0;
 
@@ -1013,14 +1002,14 @@ SMESH_subMeshObj::SMESH_subMeshObj( SMESH::SMESH_subMesh_ptr theSubMesh,
 : SMESH_SubMeshObj( theMeshObj ),
   mySubMeshServer( SMESH::SMESH_subMesh::_duplicate( theSubMesh ) )
 {
-  if ( MYDEBUG ) MESSAGE( "SMESH_subMeshObj - theSubMesh->_is_nil() = " << theSubMesh->_is_nil() );
+  MESSAGE( "SMESH_subMeshObj - theSubMesh->_is_nil() = " << theSubMesh->_is_nil() );
   
   mySubMeshServer->Register();
 }
 
 SMESH_subMeshObj::~SMESH_subMeshObj()
 {
-  if ( MYDEBUG ) MESSAGE( "~SMESH_subMeshObj" );
+  MESSAGE( "~SMESH_subMeshObj" );
   mySubMeshServer->UnRegister();
 }
 
@@ -1028,7 +1017,7 @@ SMESH_subMeshObj::~SMESH_subMeshObj()
 // function : GetEntities
 // purpose  : Get entities of specified type. Return number of entities
 //=================================================================================
-int SMESH_subMeshObj::GetNbEntities( const SMDSAbs_ElementType theType) const
+smIdType SMESH_subMeshObj::GetNbEntities( const SMDSAbs_ElementType theType) const
 {
   switch ( theType )
   {
@@ -1043,7 +1032,7 @@ int SMESH_subMeshObj::GetNbEntities( const SMDSAbs_ElementType theType) const
     case SMDSAbs_Face:
     case SMDSAbs_Volume:
     {
-      SMESH::long_array_var anIds = 
+      SMESH::smIdType_array_var anIds = 
         mySubMeshServer->GetElementsByType( SMESH::ElementType(theType) );
       return anIds->length();
     }
@@ -1053,7 +1042,7 @@ int SMESH_subMeshObj::GetNbEntities( const SMDSAbs_ElementType theType) const
   }
 }
 
-int SMESH_subMeshObj::GetEntities( const SMDSAbs_ElementType theType, TEntityList& theResList ) const
+smIdType SMESH_subMeshObj::GetEntities( const SMDSAbs_ElementType theType, TEntityList& theResList ) const
 {
   theResList.clear();
 
@@ -1067,7 +1056,7 @@ int SMESH_subMeshObj::GetEntities( const SMDSAbs_ElementType theType, TEntityLis
   {
     if ( theType == SMDSAbs_Node )
     {
-      SMESH::long_array_var anIds = mySubMeshServer->GetNodesId();
+      SMESH::smIdType_array_var anIds = mySubMeshServer->GetNodesId();
       return getPointers( SMDSAbs_Node, anIds, aMesh, theResList );
     }
   }
@@ -1075,12 +1064,12 @@ int SMESH_subMeshObj::GetEntities( const SMDSAbs_ElementType theType, TEntityLis
   {
     if ( theType == SMDSAbs_Node )
     {
-      SMESH::long_array_var anIds = mySubMeshServer->GetElementsId();
+      SMESH::smIdType_array_var anIds = mySubMeshServer->GetElementsId();
       return getNodesFromElems( anIds, aMesh, theResList );
     }
     else
     {
-      SMESH::long_array_var anIds = 
+      SMESH::smIdType_array_var anIds = 
         mySubMeshServer->GetElementsByType( SMESH::ElementType(theType) );
       return getPointers( theType, anIds, aMesh, theResList );
     }
index d7c1a3688d9094e17b122bc75105e0eedfad9bc3..35bb1d4563cfb87651f079b46446dc4707e51b82 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -45,6 +45,7 @@
 #include "SMDSAbs_ElementType.hxx"
 
 #include <SALOMEconfig.h>
+#include <smIdType.hxx>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 
 class SMDS_Mesh;
@@ -61,24 +62,24 @@ public:
   virtual bool Update( int theIsClear = true ) = 0;
   virtual bool NulData() = 0;
   virtual void UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor ) = 0;
-  virtual int GetElemDimension( const int theObjId ) = 0;
+  virtual int GetElemDimension( const smIdType theObjId ) = 0;
 
-  virtual int GetNbEntities( const SMDSAbs_ElementType theType) const = 0;
+  virtual smIdType GetNbEntities( const SMDSAbs_ElementType theType) const = 0;
   virtual SMDS_Mesh* GetMesh() const = 0;
   virtual SMESH::SMESH_Mesh_ptr GetMeshServer() = 0;
 
-  virtual bool GetEdgeNodes( const int theElemId,
-                             const int theEdgeNum,
-                             int&      theNodeId1,
-                             int&      theNodeId2 ) const = 0;
+  virtual bool GetEdgeNodes( const smIdType theElemId,
+                             const int      theEdgeNum,
+                             smIdType&      theNodeId1,
+                             smIdType&      theNodeId2 ) const = 0;
   virtual bool              IsValid() const = 0;
   
   virtual vtkUnstructuredGrid* GetUnstructuredGrid() = 0;
   
-  virtual vtkIdType GetNodeObjId( int theVTKID ) = 0;
-  virtual vtkIdType GetNodeVTKId( int theObjID ) = 0;
-  virtual vtkIdType GetElemObjId( int theVTKID ) = 0;
-  virtual vtkIdType GetElemVTKId( int theObjID ) = 0;
+  virtual vtkIdType GetNodeObjId( vtkIdType theVTKID ) = 0;
+  virtual vtkIdType GetNodeVTKId( vtkIdType theObjID ) = 0;
+  virtual vtkIdType GetElemObjId( vtkIdType theVTKID ) = 0;
+  virtual vtkIdType GetElemVTKId( vtkIdType theObjID ) = 0;
   virtual void              ClearEntitiesFlags() = 0;
   virtual bool              GetEntitiesFlag() = 0;
   virtual unsigned int      GetEntitiesState() = 0;
index de5cee59c0f4bed25a7a2bce3a8c0e57536ee686..60efbbe75c915e852158dbf5e13db89ab804df82 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -63,27 +63,27 @@ public:
   virtual bool              Update( int theIsClear = true ) = 0;
   virtual bool              NulData() {return 0; };
   virtual void              UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor ) = 0;
-  virtual int               GetElemDimension( const int theObjId ) = 0;
+  virtual int               GetElemDimension( const smIdType theObjId ) = 0;
 
-  virtual int               GetNbEntities( const SMDSAbs_ElementType theType) const = 0;
-  virtual int               GetEntities( const SMDSAbs_ElementType, TEntityList& ) const = 0;
+  virtual smIdType          GetNbEntities( const SMDSAbs_ElementType theType) const = 0;
+  virtual smIdType          GetEntities( const SMDSAbs_ElementType, TEntityList& ) const = 0;
   virtual bool              IsNodePrs() const = 0;
   virtual SMDS_Mesh*        GetMesh() const = 0;
   virtual SMESH::SMESH_Mesh_ptr GetMeshServer() = 0;
 
   virtual bool              IsValid() const;
 
-  virtual bool              GetEdgeNodes( const int theElemId,
-                                          const int theEdgeNum,
-                                          int&      theNodeId1,
-                                          int&      theNodeId2 ) const;
+  virtual bool              GetEdgeNodes( const smIdType theElemId,
+                                          const int      theEdgeNum,
+                                          smIdType&      theNodeId1,
+                                          smIdType&      theNodeId2 ) const;
 
   virtual vtkUnstructuredGrid* GetUnstructuredGrid();
   
-  virtual vtkIdType         GetNodeObjId( int theVTKID );
-  virtual vtkIdType         GetNodeVTKId( int theObjID );
-  virtual vtkIdType         GetElemObjId( int theVTKID );
-  virtual vtkIdType         GetElemVTKId( int theObjID );
+  virtual vtkIdType         GetNodeObjId( vtkIdType theVTKID );
+  virtual vtkIdType         GetNodeVTKId( vtkIdType theObjID );
+  virtual vtkIdType         GetElemObjId( vtkIdType theVTKID );
+  virtual vtkIdType         GetElemVTKId( vtkIdType theObjID );
   
   virtual void              ClearEntitiesFlags();
   virtual bool              GetEntitiesFlag();
@@ -108,7 +108,7 @@ protected:
   unsigned int              myEntitiesState;
 
   vtkUnstructuredGrid*      myGrid;
-  std::map<SMDSAbs_ElementType,int> myEntitiesCache;
+  std::map<SMDSAbs_ElementType,smIdType> myEntitiesCache;
 };
 
 
@@ -127,11 +127,11 @@ public:
   virtual bool              Update( int theIsClear = true );
   virtual bool              NulData();
   
-  virtual int               GetNbEntities( const SMDSAbs_ElementType) const;
-  virtual int               GetEntities( const SMDSAbs_ElementType, TEntityList& ) const;
+  virtual smIdType          GetNbEntities( const SMDSAbs_ElementType) const;
+  virtual smIdType          GetEntities( const SMDSAbs_ElementType, TEntityList& ) const;
   virtual bool              IsNodePrs() const;
 
-  virtual int               GetElemDimension( const int theObjId );
+  virtual int               GetElemDimension( const smIdType theObjId );
 
   virtual void              UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor );
   
@@ -160,7 +160,7 @@ public:
   virtual bool              Update( int theIsClear = true );
   
   virtual void              UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor );
-  virtual int               GetElemDimension( const int theObjId );
+  virtual int               GetElemDimension( const smIdType theObjId );
   virtual SMDS_Mesh*        GetMesh() const { return myMeshObj->GetMesh(); }
   virtual SMESH::SMESH_Mesh_ptr GetMeshServer() { return myMeshObj->GetMeshServer(); }
   
@@ -181,8 +181,8 @@ public:
                             SMESH_GroupObj( SMESH::SMESH_GroupBase_ptr, SMESH_MeshObj* );
   virtual                   ~SMESH_GroupObj();
 
-  virtual int               GetNbEntities( const SMDSAbs_ElementType) const;
-  virtual int               GetEntities( const SMDSAbs_ElementType, TEntityList& ) const;
+  virtual smIdType          GetNbEntities( const SMDSAbs_ElementType) const;
+  virtual smIdType          GetEntities( const SMDSAbs_ElementType, TEntityList& ) const;
   virtual bool              IsNodePrs() const;
 
   virtual SMDSAbs_ElementType GetElementType() const;
@@ -206,8 +206,8 @@ public:
                                               SMESH_MeshObj* );
   virtual                   ~SMESH_subMeshObj();
 
-  virtual int               GetNbEntities( const SMDSAbs_ElementType) const;
-  virtual int               GetEntities( const SMDSAbs_ElementType, TEntityList& ) const;
+  virtual smIdType          GetNbEntities( const SMDSAbs_ElementType) const;
+  virtual smIdType          GetEntities( const SMDSAbs_ElementType, TEntityList& ) const;
   virtual bool              IsNodePrs() const;    
   
 protected:
index 677b72030902f6bbd32cf70d99c498766ea6af41..8cd492e786530709f80d3bf9756a6c96ba5fcb52 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 #include <SUIT_ResourceMgr.h>
 #include <SUIT_Session.h>
 
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-#else
-static int MYDEBUG = 0;
-#endif
-
 
 SMESH_PreviewActorsCollection::SMESH_PreviewActorsCollection() :
   mySelector( 0 ), myRenderer( 0 ), myCurrentChunk( 0 ), myChunkSize( 0 ), myIsShown( true )
 {
-  if(MYDEBUG) MESSAGE("SMESH_PreviewActorsCollection - "<<this);
+  MESSAGE("SMESH_PreviewActorsCollection - "<<this);
 }
 
 
 SMESH_PreviewActorsCollection::~SMESH_PreviewActorsCollection()
 {
-  if(MYDEBUG) MESSAGE("~SMESH_PreviewActorsCollection - "<<this);
+  MESSAGE("~SMESH_PreviewActorsCollection - "<<this);
   clearActors();
 }
 
index 933b34a9a2465dd7931954bcc710451b51ea61a5..c8f8f87fee5b9e8630816344d2961f11323f1acf 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 103a46f1e5256fff6145ea8954e89d476dc8a9ab..d9ba3cd765866efe62a4a6e9d8107bad7c7c8310 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -108,7 +108,7 @@ SMESH_SVTKActor
 void
 SMESH_SVTKActor
 ::MapCells(SALOME_Actor* theMapActor,
-           const TColStd_IndexedMapOfInteger& theMapIndex)
+           const SVTK_TIndexedMapOfVtkId& theMapIndex)
 {
   myUnstructuredGrid->Initialize();
   myUnstructuredGrid->Allocate();
@@ -134,8 +134,9 @@ SMESH_SVTKActor
     cd = aSourceGrid->GetCellData();
   }
   outputCD->CopyAllocate(cd,aNbOfParts,aNbOfParts/2);
-  for(int ind = 1; ind <= aNbOfParts; ind++){
-    int aPartId = theMapIndex( ind );
+  for(int ind = 1; ind <= aNbOfParts; ind++)
+  {
+    vtkIdType aPartId = theMapIndex( ind );
     if(vtkCell* aCell = theMapActor->GetElemCell(aPartId))
     {
       if (aCell->GetCellType() != VTK_POLYHEDRON)
index 77499fde5744305f7d6c0d4bfa1952e59e3d0a41..5e156cc4596c4b89488acba1e5c33cbe8bd132a2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -61,7 +61,7 @@ public:
   //! Allow to recostruct selected cells from source SALOME_Actor and map of subindexes
   virtual void
   MapCells(SALOME_Actor* theMapActor,
-           const TColStd_IndexedMapOfInteger& theMapIndex);
+           const SVTK_TIndexedMapOfVtkId& theMapIndex);
 
 
   //! To remove the actor an all its internal devices
index 6ea4849a633e715688e6e72ec7db7be63a3d3938..d9321d9edfb38d22ab99805720f5955e4676bcfe 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index fe358001040327698666b8ddc88eb94fccb06940..a4cca47c2dcf598c847e003d662004d1429c8eba 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 161f8c41e9663e91e60c61cf6cf09b3ef08b3b3f..4cd3fcd1182196b225712bd05826183b1db4bf82 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 6ef5b88b567158ea8ab39e005f3b67cc5ebce141..a24664c260b5e47ebb0fb7332b6c5ddd5b2062b3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 3df7d90fe0bfd3ee99455b20356d974862979828..cadfe2204c4f802c0ccee85c0fb9da79b010c1b5 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -41,9 +41,6 @@ class LightApp_SelectionMgr;
 /*!
  * The GeomSelectionTools class gives high level tools to select Geom (and other objects)
  * A specific attention has been given to analyze selected GEOM objects.
- *
- * @param myStudy This class is specific to the study !
- *
  */
 
 class PLUGINUTILS_EXPORT GeomSelectionTools
index a057ff95810f671ba6563fb8a9df65e86d7fbc05..c60a111ad10073d23c7d23ea774afce563bc4d9d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index d9cd3dc67297d3e5814aa68edf50b6c19c5987e7..35a34761e856455bf6c1ab962ef1810b9250fbc5 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 93e7ac91dffa5d06438ba173a9e00a90ab7d3a36..c4b0b349327bc759826cc935158d49cb13a392e9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 857b9cbcbe22aebfbab1b3c8b2a39e8ca3f0d8f7..198f8ec81addb84faa06f448d1eff35fff34ac7d 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index e09c5f0185dfb35e51a7b6e3fdc3767e94d02ea4..3dd35931822126a24aa1c2e22b0fd5d7f5241e9a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2010-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 404f9bf7cc88f340e2376358f06df520390165e3..edf08fdbbbad675deee4127f4decae8923f45818 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 1b912adc81f36e94b9e4db055aba8e0fb4550d5a..235d02d91e0f3b1ab1112aa361e80953bd80066b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2010-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -30,7 +30,7 @@
 void SMDS_BallElement::init(const SMDS_MeshNode * node, double diameter )
 {
   vtkIdType nodeVtkID = node->GetVtkID();
-  int vtkID = getGrid()->InsertNextLinkedCell( toVtkType( SMDSEntity_Ball ), 1, &nodeVtkID );
+  vtkIdType vtkID = getGrid()->InsertNextLinkedCell( toVtkType( SMDSEntity_Ball ), 1, &nodeVtkID );
   setVtkID( vtkID );
   getGrid()->SetBallDiameter( GetVtkID(), diameter );
 }
index 5975f40d82c3a3a74fcc691c556439383f779e9d..644d1ceb1f51729059f138a09c54e890759c17ee 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 0aed491f4d68793b265f80e30a5348a133e32410..677c1429ec1882474d20ab5e748872d2aa78e175 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 
 #include "SMDS_CellOfNodes.hxx"
 
-SMDS_CellOfNodes::SMDS_CellOfNodes( int id, int shapeID )
+SMDS_CellOfNodes::SMDS_CellOfNodes( smIdType id, int shapeID )
   : myID( id )
 {
   setShapeID( shapeID );
 }
 
-void SMDS_CellOfNodes::setID(const int id)
+void SMDS_CellOfNodes::setID(const smIdType id)
 {
   myID = id;
 }
 
-int SMDS_CellOfNodes::GetID() const
+smIdType SMDS_CellOfNodes::GetID() const
 {
   return myID;
 }
index acedefeb8b406f49f860cbb2d0f1fd7fbb8632a1..cba5dfe435d4faf9e5624a8cc37af9ed44f12926 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -31,6 +31,8 @@
         
 #include "SMDS_MeshElement.hxx"
 
+#include <smIdType.hxx>
+
 // ============================================================
 /*!
  * \brief Base class for elements not contained in the mesh
@@ -42,8 +44,8 @@ class SMDS_EXPORT SMDS_CellOfNodes : public SMDS_MeshElement
 {
 public:
 
-  virtual int GetID() const;
-  virtual int GetShapeID() const;
+  virtual smIdType GetID() const;
+  virtual int      GetShapeID() const;
 
   virtual void setIsMarked( bool is ) const;
   virtual bool isMarked() const;
@@ -52,13 +54,13 @@ public:
 
  protected:
 
-  SMDS_CellOfNodes( int id = -1, int shapeID = 0);
+  SMDS_CellOfNodes( smIdType id = -1, int shapeID = 0);
 
-  virtual void setID( const int id);
+  virtual void setID( const smIdType id);
   virtual void setShapeID( const int shapeID );
 
-  int  myID;
-  int  myShapeID;
+  smIdType  myID;
+  int       myShapeID;
 
   enum Bits { // use the 1st right bit of myShapeId to set/unset a mark
     BIT_IS_MARKED = 1,
index a788a9e5174f995a97fc3756cafbcfcd0bc7bfcd..90140d091fdc4961a84e351f9b867a3066feb84e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2010-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -27,6 +27,7 @@
 
 #include <vtkCellType.h>
 #include <vtkCellLinks.h>
+#include <smIdType.hxx>
 
 #include <map>
 
@@ -232,7 +233,7 @@ void SMDS_Down1D::compactStorage()
   _cellIds.resize(_nbDownCells * _maxId);
   _vtkCellIds.resize(_maxId);
 
-  int sizeUpCells = 0;
+  smIdType sizeUpCells = 0;
   for (int i = 0; i < _maxId; i++)
     sizeUpCells += _upCellIdsVector[i].size();
   _upCellIds.resize(sizeUpCells, -1);
@@ -258,8 +259,8 @@ void SMDS_Down1D::compactStorage()
 void SMDS_Down1D::addUpCell(int cellId, int upCellId, unsigned char aType)
 {
   //ASSERT((cellId >=0) && (cellId < _maxId));
-  int nbFaces = _upCellIdsVector[cellId].size();
-  for (int i = 0; i < nbFaces; i++)
+  smIdType nbFaces = _upCellIdsVector[cellId].size();
+  for (smIdType i = 0; i < nbFaces; i++)
     {
       if ((_upCellIdsVector[cellId][i] == upCellId) && (_upCellTypesVector[cellId][i] == aType))
         {
index 0bc6730cd5ccc9ccb5aee1097133c9a1fe18b161..7de1b1e4c030dcd5614b5743a816a6a7f169a323 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2010-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 1bc92a67cd030f23d5641467c428e201855562eb..6bc82963db5c07f0cb078a8206c1659b7de80d38 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 839cf2740efa42f96b07faacc792aecfd8a7edd4..ff4f5d49158b16594d834723f5ef7d5012e91157 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index e4dbe1ae0733c5a48c1dc8037c63098a193d8965..e13af2db37d2c6760d8c1084377ba5e6d980fc8c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -104,15 +104,15 @@ int SMDS_ElementFactory::ChunkSize()
 //================================================================================
 /*!
  * \brief Return minimal ID of a non-used element
- *  \return int - minimal element ID
+ *  \return smIdType - minimal element ID
  */
 //================================================================================
 
-int SMDS_ElementFactory::GetFreeID()
+smIdType SMDS_ElementFactory::GetFreeID()
 {
   if ( myChunksWithUnused.empty() )
   {
-    int id0 = myChunks.size() * theChunkSize + 1;
+    smIdType id0 = myChunks.size() * theChunkSize + 1;
     myChunks.push_back( new SMDS_ElementChunk( this, id0 ));
   }
   SMDS_ElementChunk * chunk = (*myChunksWithUnused.begin());
@@ -122,15 +122,15 @@ int SMDS_ElementFactory::GetFreeID()
 //================================================================================
 /*!
  * \brief Return maximal ID of an used element
- *  \return int - element ID
+ *  \return smIdType - element ID
  */
 //================================================================================
 
-int SMDS_ElementFactory::GetMaxID()
+smIdType SMDS_ElementFactory::GetMaxID()
 {
-  int id = 0;
+  smIdType id = 0;
   TIndexRanges usedRanges;
-  for ( int i = myChunks.size() - 1; i >= 0; --i )
+  for ( smIdType i = myChunks.size() - 1; i >= 0; --i )
     if ( myChunks[i].GetUsedRanges().GetIndices( true, usedRanges ))
     {
       int index = usedRanges.back().second-1;
@@ -143,13 +143,13 @@ int SMDS_ElementFactory::GetMaxID()
 //================================================================================
 /*!
  * \brief Return minimal ID of an used element
- *  \return int - element ID
+ *  \return smIdType - element ID
  */
 //================================================================================
 
-int SMDS_ElementFactory::GetMinID()
+smIdType SMDS_ElementFactory::GetMinID()
 {
-  int id = 0;
+  smIdType id = 0;
   TIndexRanges usedRanges;
   for ( size_t i = 0; i < myChunks.size(); ++i )
     if ( myChunks[i].GetUsedRanges().GetIndices( true, usedRanges ))
@@ -169,20 +169,20 @@ int SMDS_ElementFactory::GetMinID()
  */
 //================================================================================
 
-SMDS_MeshElement* SMDS_ElementFactory::NewElement( const int id )
+SMDS_MeshElement* SMDS_ElementFactory::NewElement( const smIdType id )
 {
-  int iChunk = ( id - 1 ) / theChunkSize;
-  int index  = ( id - 1 ) % theChunkSize;
-  while ((int) myChunks.size() <= iChunk )
+  smIdType iChunk = ( id - 1 ) / theChunkSize;
+  smIdType index  = ( id - 1 ) % theChunkSize;
+  while ((smIdType) myChunks.size() <= iChunk )
   {
-    int id0 = myChunks.size() * theChunkSize + 1;
+    smIdType id0 = myChunks.size() * theChunkSize + 1;
     myChunks.push_back( new SMDS_ElementChunk( this, id0 ));
   }
-  SMDS_MeshElement* e = myChunks[iChunk].Element( index );
+  SMDS_MeshElement* e = myChunks[iChunk].Element( FromSmIdType<int>(index) );
   if ( !e->IsNull() )
     return 0; // element with given ID already exists
 
-  myChunks[iChunk].UseElement( index );
+  myChunks[iChunk].UseElement( FromSmIdType<int>(index) );
   ++myNbUsedElements;
 
   e->myHolder = & myChunks[iChunk];
@@ -200,15 +200,15 @@ SMDS_MeshElement* SMDS_ElementFactory::NewElement( const int id )
  */
 //================================================================================
 
-const SMDS_MeshElement* SMDS_ElementFactory::FindElement( const int id ) const
+const SMDS_MeshElement* SMDS_ElementFactory::FindElement( const smIdType id ) const
 {
   if ( id > 0 )
   {
-    int iChunk = ( id - 1 ) / theChunkSize;
-    int index  = ( id - 1 ) % theChunkSize;
-    if ( iChunk < (int) myChunks.size() )
+    smIdType iChunk = ( id - 1 ) / theChunkSize;
+    smIdType index  = ( id - 1 ) % theChunkSize;
+    if ( iChunk < (smIdType) myChunks.size() )
     {
-      const SMDS_MeshElement* e = myChunks[iChunk].Element( index );
+      const SMDS_MeshElement* e = myChunks[iChunk].Element( FromSmIdType<int>(index) );
       return e->IsNull() ? 0 : e;
     }
   }
@@ -218,18 +218,30 @@ const SMDS_MeshElement* SMDS_ElementFactory::FindElement( const int id ) const
 //================================================================================
 /*!
  * \brief Return an SMDS ID by a Vtk one
- *  \param [inout] vtkID - Vtk ID
- *  \return int - SMDS ID
+ *  \param [in] vtkID - Vtk ID
+ *  \return smIdType - SMDS ID
  */
 //================================================================================
 
-int SMDS_ElementFactory::FromVtkToSmds( vtkIdType vtkID )
+smIdType SMDS_ElementFactory::FromVtkToSmds( vtkIdType vtkID )
 {
   if ( vtkID >= 0 && vtkID < (vtkIdType)mySmdsIDs.size() )
     return mySmdsIDs[vtkID] + 1;
   return vtkID + 1;
 }
 
+//================================================================================
+/*!
+ * \brief Clear marked flag of all elements
+ */
+//================================================================================
+
+void SMDS_ElementFactory::SetAllNotMarked()
+{
+  for ( SMDS_ElementChunk& chunk : myChunks )
+    chunk.SetAllNotMarked();
+}
+
 //================================================================================
 /*!
  * \brief Mark the element as non-used
@@ -281,11 +293,11 @@ void SMDS_ElementFactory::Clear()
  */
 //================================================================================
 
-void SMDS_ElementFactory::Compact( std::vector<int>& theVtkIDsNewToOld )
+void SMDS_ElementFactory::Compact( std::vector<smIdType>& theVtkIDsNewToOld )
 {
-  int  newNbCells = NbUsedElements();
-  int   maxCellID = GetMaxID();
-  int newNbChunks = newNbCells / theChunkSize + bool ( newNbCells % theChunkSize );
+  smIdType  newNbCells = NbUsedElements();
+  smIdType   maxCellID = GetMaxID();
+  smIdType newNbChunks = newNbCells / theChunkSize + bool ( newNbCells % theChunkSize );
 
   theVtkIDsNewToOld.resize( newNbCells );
 
@@ -295,7 +307,7 @@ void SMDS_ElementFactory::Compact( std::vector<int>& theVtkIDsNewToOld )
   }
   else if ( newNbCells == maxCellID ) // no holes
   {
-    int newID, minLastID = std::min( myVtkIDs.size(), theVtkIDsNewToOld.size() );
+    smIdType newID, minLastID = std::min( myVtkIDs.size(), theVtkIDsNewToOld.size() );
     for ( newID = 0; newID < minLastID; ++newID )
       theVtkIDsNewToOld[ newID ] = myVtkIDs[ newID ];
     for ( ; newID < newNbCells; ++newID )
@@ -303,8 +315,8 @@ void SMDS_ElementFactory::Compact( std::vector<int>& theVtkIDsNewToOld )
   }
   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
+    smIdType newVtkID = 0; // same as new smds ID (-1)
+    for ( smIdType oldID = 1; oldID <= maxCellID; ++oldID ) // smds IDs
     {
       const SMDS_MeshElement* oldElem = FindElement( oldID );
       if ( !oldElem ) continue;
@@ -377,16 +389,16 @@ SMDS_NodeFactory::~SMDS_NodeFactory()
  */
 //================================================================================
 
-void SMDS_NodeFactory::Compact( std::vector<int>& theVtkIDsOldToNew )
+void SMDS_NodeFactory::Compact( std::vector<smIdType>& 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();
+  smIdType  oldNbNodes = myMesh->GetGrid()->GetNumberOfPoints();
+  smIdType  newNbNodes = NbUsedElements();
+  smIdType newNbChunks = newNbNodes / theChunkSize + bool ( newNbNodes % theChunkSize );
+  smIdType   maxNodeID = GetMaxID();
 
   theVtkIDsOldToNew.resize( oldNbNodes, -1 );
 
@@ -408,13 +420,13 @@ void SMDS_NodeFactory::Compact( std::vector<int>& theVtkIDsOldToNew )
         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;
+        int     shapeID = oldNode->GetShapeID();
+        int    shapeDim = GetShapeDim( shapeID );
+        smIdType iChunk = newID / theChunkSize;
         myChunks[ iChunk ].SetShapeID( newNode, shapeID );
         if ( shapeDim == 2 || shapeDim == 1 )
         {
-          int iChunkOld = oldID / theChunkSize;
+          smIdType iChunkOld = oldID / theChunkSize;
           TParam* oldPos = myChunks[ iChunkOld ].GetPositionPtr( oldNode );
           TParam* newPos = myChunks[ iChunk    ].GetPositionPtr( newNode, /*allocate=*/true );
           if ( oldPos )
@@ -431,7 +443,7 @@ void SMDS_NodeFactory::Compact( std::vector<int>& theVtkIDsOldToNew )
   }
   else // no holes
   {
-    for ( int i = 0; i < newNbNodes; ++i )
+    for ( smIdType i = 0; i < newNbNodes; ++i )
       theVtkIDsOldToNew[ i ] = i;
   }
   myChunks.resize( newNbChunks );
@@ -514,7 +526,7 @@ void SMDS_NodeFactory::SetShapeDim( int shapeID, int dim )
  */
 //================================================================================
 
-SMDS_ElementChunk::SMDS_ElementChunk( SMDS_ElementFactory* factory, int id0 ):
+SMDS_ElementChunk::SMDS_ElementChunk( SMDS_ElementFactory* factory, smIdType id0 ):
   myFactory( factory ),
   my1stID( id0 )//,
   //mySubIDSet( 0 )
@@ -565,7 +577,7 @@ void SMDS_ElementChunk::UseElement( const int index )
  */
 //================================================================================
 
-int SMDS_ElementChunk::GetUnusedID() const
+smIdType SMDS_ElementChunk::GetUnusedID() const
 {
   TUsedRangeSet::set_iterator r = myUsedRanges.mySet.begin();
   for ( ; r != myUsedRanges.mySet.end(); ++r )
@@ -603,7 +615,7 @@ void SMDS_ElementChunk::Free( const SMDS_MeshElement* e )
  */
 //================================================================================
 
-int SMDS_ElementChunk::GetID( const SMDS_MeshElement* e ) const
+smIdType SMDS_ElementChunk::GetID( const SMDS_MeshElement* e ) const
 {
   return my1stID + Index( e );
 }
@@ -618,11 +630,12 @@ void SMDS_ElementChunk::SetVTKID( const SMDS_MeshElement* e, const vtkIdType vtk
 {
   if ( e->GetID() - 1 != vtkID )
   {
-    if ((int) myFactory->myVtkIDs.size() <= e->GetID() - 1 )
+    if ((smIdType) myFactory->myVtkIDs.size() <= e->GetID() - 1 )
     {
-      size_t i = myFactory->myVtkIDs.size();
+      vtkIdType i = (vtkIdType) myFactory->myVtkIDs.size();
       myFactory->myVtkIDs.resize( e->GetID() + 100 );
-      for ( ; i < myFactory->myVtkIDs.size(); ++i )
+      vtkIdType newSize = (vtkIdType) myFactory->myVtkIDs.size();
+      for ( ; i < newSize; ++i )
         myFactory->myVtkIDs[i] = i;
     }
     myFactory->myVtkIDs[ e->GetID() - 1 ] = vtkID;
@@ -636,6 +649,13 @@ void SMDS_ElementChunk::SetVTKID( const SMDS_MeshElement* e, const vtkIdType vtk
     }
     myFactory->mySmdsIDs[ vtkID ] = e->GetID() - 1;
   }
+  else
+  {
+    if ((size_t) e->GetID() <= myFactory->myVtkIDs.size() )
+      myFactory->myVtkIDs[ e->GetID() - 1 ] = vtkID;
+    if ((size_t) vtkID < myFactory->mySmdsIDs.size() )
+      myFactory->mySmdsIDs[ vtkID ] = e->GetID() - 1;
+  }
 }
 
 //================================================================================
@@ -644,10 +664,10 @@ void SMDS_ElementChunk::SetVTKID( const SMDS_MeshElement* e, const vtkIdType vtk
  */
 //================================================================================
 
-int SMDS_ElementChunk::GetVtkID( const SMDS_MeshElement* e ) const
+vtkIdType SMDS_ElementChunk::GetVtkID( const SMDS_MeshElement* e ) const
 {
-  size_t dfltVtkID = e->GetID() - 1;
-  return ( dfltVtkID < myFactory->myVtkIDs.size() ) ? myFactory->myVtkIDs[ dfltVtkID ] : dfltVtkID;
+  vtkIdType dfltVtkID = FromSmIdType<vtkIdType>(e->GetID() - 1);
+  return ( dfltVtkID < (vtkIdType)myFactory->myVtkIDs.size() ) ? myFactory->myVtkIDs[ dfltVtkID ] : dfltVtkID;
 }
 
 //================================================================================
@@ -726,6 +746,17 @@ void SMDS_ElementChunk::SetIsMarked( const SMDS_MeshElement* e, bool is )
   myMarkedSet[ Index( e )] = is;
 }
 
+//================================================================================
+/*!
+ * \brief Clear marked flag of all elements
+ */
+//================================================================================
+
+void SMDS_ElementChunk::SetAllNotMarked()
+{
+  clearVector( myMarkedSet );
+}
+
 //================================================================================
 /*!
  * \brief Return SMDS_Position of a node on a shape
index 86d7408ce6f7a8cc18d1c8cfb52d0509abcb61c0..1abc94e023dab7bf5459531b983b77c360985f7f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -40,6 +40,8 @@
 
 #include <vtkType.h>
 
+#include <smIdType.hxx>
+
 class SMDS_ElementChunk;
 class SMDS_Mesh;
 class SMDS_MeshCell;
@@ -67,8 +69,8 @@ protected:
   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
+  std::vector< smIdType >  mySmdsIDs;          // mySmdsIDs[ vtkID ] == smdsID - 1
+  smIdType                 myNbUsedElements;   // counter of elements
 
   friend class SMDS_ElementChunk;
 
@@ -78,25 +80,25 @@ public:
   virtual ~SMDS_ElementFactory();
 
   //! Return minimal ID of a non-used element
-  int GetFreeID();
+  smIdType GetFreeID();
 
   //! Return maximal ID of an used element
-  int GetMaxID();
+  smIdType GetMaxID();
 
   //! Return minimal ID of an used element
-  int GetMinID();
+  smIdType GetMinID();
 
   //! Return an element by ID. NULL if the element with the given ID is already used
-  SMDS_MeshElement* NewElement( const int id );
+  SMDS_MeshElement* NewElement( const smIdType 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 )); }
+  SMDS_MeshCell* NewCell( const smIdType 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;
+  const SMDS_MeshElement* FindElement( const smIdType id ) const;
 
   //! Return a number of used elements
-  int NbUsedElements() const { return myNbUsedElements; }
+  smIdType 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
@@ -114,19 +116,21 @@ public:
   boost::shared_ptr< ElemIterator > GetShapeIterator( int                     shapeID,
                                                       size_t                  nbElemsToReturn,
                                                       const SMDS_MeshElement* sm1stElem );
+  //! Clear marked flag of all elements
+  void SetAllNotMarked();
 
   //! Mark the element as non-used
   void Free( const SMDS_MeshElement* );
 
   //! Return an SMDS ID by a Vtk one
-  int FromVtkToSmds( vtkIdType vtkID );
+  smIdType 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);
+  virtual void Compact(std::vector<smIdType>& idCellsOldToNew);
 
   //! Return true if Compact() will change IDs of elements
   virtual bool CompactChangePointers();
@@ -149,10 +153,10 @@ public:
   ~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); }
+  SMDS_MeshNode* NewNode( smIdType 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); }
+  const SMDS_MeshNode* FindNode( smIdType id ) { return (const SMDS_MeshNode*) FindElement(id); }
 
   //! Set a total number of sub-shapes in the main shape
   void SetNbShapes( size_t nbShapes );
@@ -168,7 +172,7 @@ public:
 
   //! Remove unused nodes located not at the end of the last chunk.
   //  Minimize allocated memory
-  virtual void Compact(std::vector<int>& idNodesOldToNew);
+  virtual void Compact(std::vector<smIdType>& idNodesOldToNew);
 
   //! Return true if Compact() will change IDs of node
   virtual bool CompactChangePointers();
@@ -277,7 +281,7 @@ struct _RangeSet
       rNext = mySet.upper_bound( theIndex );
       r     = rNext - 1;
     }
-    int          rSize = Size( r ); // range size
+    int         rSize = Size( r ); // range size
     attr_t      rValue = r->myValue;
     if ( rValue == theValue )
       return rValue; // it happens while compacting
@@ -370,7 +374,7 @@ class SMDS_ElementChunk
 {
   SMDS_ElementFactory* myFactory;     // holder of this chunk
   SMDS_MeshElement*    myElements;    // array of elements
-  int                  my1stID;       // ID of myElements[0]
+  smIdType             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
@@ -381,7 +385,7 @@ class SMDS_ElementChunk
 
 public:
 
-  SMDS_ElementChunk( SMDS_ElementFactory* factory = 0, int id0 = 0 );
+  SMDS_ElementChunk( SMDS_ElementFactory* factory = 0, smIdType id0 = 0 );
   ~SMDS_ElementChunk();
 
   //! Return an element by an index [0,ChunkSize()]
@@ -391,7 +395,7 @@ public:
   const SMDS_MeshElement* Element(int index) const { return & myElements[index]; }
 
   //! Return ID of the first non-used element
-  int  GetUnusedID() const;
+  smIdType  GetUnusedID() const;
 
   //! Mark an element as used
   void UseElement( const int index );
@@ -403,10 +407,10 @@ public:
   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; }
+  int Index( const SMDS_MeshElement* e ) const { return (int)( e - myElements ); }
 
   //! Return ID of the 1st element in the chunk
-  int Get1stID() const { return my1stID; }
+  smIdType Get1stID() const { return my1stID; }
 
   //! Return pointer to on-shape-parameters of a node
   TParam* GetPositionPtr( const SMDS_MeshElement* node, bool allocate=false );
@@ -429,9 +433,9 @@ public:
 
   // Methods called by SMDS_MeshElement
 
-  int  GetID( const SMDS_MeshElement* e ) const;
+  smIdType  GetID( const SMDS_MeshElement* e ) const;
 
-  int  GetVtkID( const SMDS_MeshElement* e ) const;
+  vtkIdType  GetVtkID( const SMDS_MeshElement* e ) const;
   void SetVTKID( const SMDS_MeshElement* e, const vtkIdType id );
 
   int  GetShapeID( const SMDS_MeshElement* e ) const;
@@ -439,6 +443,7 @@ public:
 
   bool IsMarked   ( const SMDS_MeshElement* e ) const;
   void SetIsMarked( const SMDS_MeshElement* e, bool is );
+  void SetAllNotMarked();
 
   SMDS_PositionPtr GetPosition( const SMDS_MeshNode* n ) const;
   void SetPosition( const SMDS_MeshNode* n, const SMDS_PositionPtr& pos, int shapeID );
@@ -563,7 +568,7 @@ SMDS_ElementFactory::GetShapeIterator( int                     shapeID,
                                        size_t                  nbElemsToReturn,
                                        const SMDS_MeshElement* sm1stElem )
 {
-  int iChunk = sm1stElem ? (( sm1stElem->GetID() - 1 ) / ChunkSize()) : 0;
+  smIdType iChunk = sm1stElem ? (( sm1stElem->GetID() - 1 ) / ChunkSize()) : 0;
   typedef _ChunkIterator< ElemIterator, TSubIDRangeSet > TChuckIterator;
   return boost::make_shared< TChuckIterator >( myChunks,
                                                & SMDS_ElementChunk::GetSubIDRangesMinMax,
index 50486ee782b6495e6cdcc59ffea9584717c0c0c2..641da5e28d1b3018f2e731622c972b068b092259 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -59,8 +59,7 @@ SMDS_ElementHolder::~SMDS_ElementHolder()
 
 void SMDS_ElementHolder::beforeCompacting()
 {
-  int i = 0;
-  for ( SMDS_ElemIteratorPtr it = getElements(); it->more(); ++i )
+  for ( SMDS_ElemIteratorPtr it = getElements(); it->more(); )
   {
     const SMDS_MeshElement* e = it->next();
     if ( !e ) continue;
@@ -74,7 +73,7 @@ void SMDS_ElementHolder::beforeCompacting()
     else
     {
       myExternalElems.push_back( e );
-      myVtkIDs.push_back( -1 * (int)myExternalElems.size() );
+      myVtkIDs.push_back( -1 * (vtkIdType) myExternalElems.size() );
     }
   }
 }
@@ -84,8 +83,8 @@ void SMDS_ElementHolder::beforeCompacting()
 //purpose  : restore pointers to elements
 //=======================================================================
 
-void SMDS_ElementHolder::restoreElements( const std::vector<int>& idNodesOldToNew,
-                                          const std::vector<int>& idCellsOldToNew )
+void SMDS_ElementHolder::restoreElements( const std::vector<smIdType>& idNodesOldToNew,
+                                          const std::vector<smIdType>& idCellsOldToNew )
 {
   tmpClear();
 
@@ -94,21 +93,21 @@ void SMDS_ElementHolder::restoreElements( const std::vector<int>& idNodesOldToNe
   std::vector< bool >::iterator isNode = myIsNode.begin();
   for ( size_t i = 0; i < myVtkIDs.size(); ++i, ++isNode )
   {
-    int vtkID = myVtkIDs[i];
+    vtkIdType vtkID = myVtkIDs[i];
     if ( vtkID < 0 )
     {
       elem = myExternalElems[ (-vtkID)-1 ];
     }
     else if ( *isNode )
     {
-      if ( vtkID < (int)idNodesOldToNew.size() )
+      if ( vtkID < (vtkIdType)idNodesOldToNew.size() )
         elem = myMesh->FindNodeVtk( idNodesOldToNew[ vtkID ]);
       else
         elem = myMesh->FindNodeVtk( vtkID );
     }
     else
     {
-      if ( vtkID < (int)idCellsOldToNew.size() )
+      if ( vtkID < (vtkIdType)idCellsOldToNew.size() )
         elem = myMesh->FindElementVtk( idCellsOldToNew[ vtkID ]);
       else
         elem = myMesh->FindElementVtk( vtkID );
index d644b2f2da6143bf2f87ced06e5d247d1929cbb4..41a7eb9016732061d067138a8b1d8a8bbc80b8f7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -29,6 +29,9 @@
 
 #include "SMDS_ElemIterator.hxx"
 
+#include <smIdType.hxx>
+#include <vtkType.h>
+
 #include <vector>
 #include <set>
 
@@ -80,12 +83,12 @@ class SMDS_EXPORT SMDS_ElementHolder
   void beforeCompacting();
 
   //! restore pointers to elements
-  void restoreElements( const std::vector<int>& idNodessOldToNew,
-                        const std::vector<int>& idCellsOldToNew );
+  void restoreElements( const std::vector<smIdType>& idNodessOldToNew,
+                        const std::vector<smIdType>& idCellsOldToNew );
 
 
   std::vector<const SMDS_MeshElement*>      myExternalElems; //!< elements not contained in the mesh
-  std::vector< int >                        myVtkIDs;        //!< vtk IDs of elements
+  std::vector< vtkIdType >                  myVtkIDs;        //!< vtk IDs of elements
   std::vector< bool >                       myIsNode;
   std::set< SMDS_ElementHolder* >::iterator myPtrInMesh;
 };
index 2789697b72d4bf4c057468c82424932e87b0e8c5..866b7a07e72338bb71feec5731c79692311570e0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 9bf39a3aec49cf82186abe1794c87756600d5631..1ccd14f6a4cf7c417edd785252a65ef5594e6485 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 452717053e52761f2f6ba5b63ec82b541d0c1f85..0fb49e078dfa4a672ffc9ca9c8d95c0db6b734bd 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index f4491009fd8115d64eae3fce9ef8d8650270d0d3..9c2ad947ac62e10ab0d2407348888438d7614191 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 80f8862879757e81e30f1ca7fa60fb229bd668cb..9a0aaa03c011ecb99b32595f1b8c1c800e08be65 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index c3b7b1aa5b8d765fba0f47efbb9d13e18cfe1325..c76e9edb7d95f4567f96506ddac1c7366e36cd2d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 425eff34cbab5436b35b432bc040d7a5c66aa237..06fccd6b0ac9a114429e92fa9214f1aa6f33e079 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -45,6 +45,13 @@ SMDS_LinearEdge::SMDS_LinearEdge(const SMDS_MeshNode * node1,
   myNodes[1] = node2;
 }
 
+void SMDS_LinearEdge::Init(const SMDS_MeshNode * node1,
+                           const SMDS_MeshNode * node2)
+{
+  myNodes[0] = node1;
+  myNodes[1] = node2;
+}
+
 int SMDS_LinearEdge::NbNodes() const
 {
   return 2;
index ce63d9ed7d9dfc4fc5aaba1d2bb999cd142fbb08..626ff2857fb008b977e21e8d70ba6e4ea1a7a8ce 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -32,7 +32,8 @@
 class SMDS_EXPORT SMDS_LinearEdge: public SMDS_CellOfNodes
 {
 public:
-  SMDS_LinearEdge(const SMDS_MeshNode * node1, const SMDS_MeshNode * node2);
+  SMDS_LinearEdge(const SMDS_MeshNode * node1=nullptr, const SMDS_MeshNode * node2=nullptr);
+  void Init( const SMDS_MeshNode * node1, const SMDS_MeshNode * node2);
 
   virtual SMDSAbs_ElementType  GetType()       const { return SMDSAbs_Edge; }
   virtual SMDSAbs_GeometryType GetGeomType()   const { return SMDSGeom_EDGE; }
index 426d63a92d7a1bcaa852817257a8e4b76368233f..056dace17e9dc7c98a60df17b98c48beab741da2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -29,9 +29,7 @@
 #include <sys/sysinfo.h>
 #endif
 
-#ifdef _DEBUG_
 #include <iostream>
-#endif
 
 int main ()
 {
@@ -59,9 +57,9 @@ int main ()
     }
   } catch (...) {}
 
-// #ifdef _DEBUG_
-//   std::cout << freeRamKb / 1024 << std::endl;
-// #endif
+// if (SALOME::VerbosityActivated())
+//  std::cout << freeRamKb / 1024 << std::endl;
+
   return freeRamKb / 1024;
 
 #endif
index f2aee846a6efbc854b55b3f766e3cdafa4c8d689..c948100ac26ad48d0cbe096191c2fc31646fa557 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -47,7 +47,8 @@
 #include <iostream>
 #include <fstream>
 
-#include <boost/make_shared.hpp>
+//#include <boost/make_shared.hpp>
+#include <boost/container/flat_set.hpp>
 
 #if !defined WIN32 && !defined __APPLE__
 #include <sys/sysinfo.h>
@@ -183,7 +184,7 @@ 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, smIdType ID )
 {
   // find the MeshNode corresponding to ID
   SMDS_MeshNode *node = myNodeFactory->NewNode( ID );
@@ -201,7 +202,7 @@ SMDS_MeshNode * SMDS_Mesh::AddNodeWithID( double x, double y, double z, int ID )
 /// create a Mesh0DElement and add it to the current Mesh
 /// @return : The created Mesh0DElement
 ///////////////////////////////////////////////////////////////////////////////
-SMDS_Mesh0DElement* SMDS_Mesh::Add0DElementWithID(int idnode, int ID)
+SMDS_Mesh0DElement* SMDS_Mesh::Add0DElementWithID(smIdType idnode, smIdType ID)
 {
   const SMDS_MeshNode * node = myNodeFactory->FindNode(idnode);
   if (!node) return NULL;
@@ -224,7 +225,7 @@ SMDS_Mesh0DElement* SMDS_Mesh::Add0DElement(const SMDS_MeshNode * node)
 /// @return The created 0D element or NULL if an element with this
 ///         ID already exists or if input node is not found.
 ///////////////////////////////////////////////////////////////////////////////
-SMDS_Mesh0DElement* SMDS_Mesh::Add0DElementWithID(const SMDS_MeshNode * n, int ID)
+SMDS_Mesh0DElement* SMDS_Mesh::Add0DElementWithID(const SMDS_MeshNode * n, smIdType ID)
 {
   if (!n) return 0;
 
@@ -244,7 +245,7 @@ SMDS_Mesh0DElement* SMDS_Mesh::Add0DElementWithID(const SMDS_MeshNode * n, int I
 /// 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( smIdType idnode, double diameter, smIdType ID )
 {
   const SMDS_MeshNode * node = myNodeFactory->FindNode( idnode );
   if (!node) return NULL;
@@ -268,7 +269,7 @@ SMDS_BallElement* SMDS_Mesh::AddBall(const SMDS_MeshNode * node, double diameter
 /// @return The created 0D element or NULL if an element with this
 ///         ID already exists or if input node is not found.
 ///////////////////////////////////////////////////////////////////////////////
-SMDS_BallElement* SMDS_Mesh::AddBallWithID(const SMDS_MeshNode * n, double diameter, int ID)
+SMDS_BallElement* SMDS_Mesh::AddBallWithID(const SMDS_MeshNode * n, double diameter, smIdType ID)
 {
   if (!n) return 0;
 
@@ -288,7 +289,7 @@ SMDS_BallElement* SMDS_Mesh::AddBallWithID(const SMDS_MeshNode * n, double diame
 /// @return : The created MeshEdge
 ///////////////////////////////////////////////////////////////////////////////
 
-SMDS_MeshEdge* SMDS_Mesh::AddEdgeWithID(int idnode1, int idnode2, int ID)
+SMDS_MeshEdge* SMDS_Mesh::AddEdgeWithID(smIdType idnode1, smIdType idnode2, smIdType ID)
 {
   const SMDS_MeshNode * node1 = myNodeFactory->FindNode(idnode1);
   const SMDS_MeshNode * node2 = myNodeFactory->FindNode(idnode2);
@@ -318,7 +319,7 @@ SMDS_MeshEdge* SMDS_Mesh::AddEdge(const SMDS_MeshNode * node1,
 
 SMDS_MeshEdge* SMDS_Mesh::AddEdgeWithID(const SMDS_MeshNode * n1,
                                         const SMDS_MeshNode * n2,
-                                        int                   ID)
+                                        smIdType              ID)
 {
   if ( !n1 || !n2 ) return 0;
 
@@ -347,7 +348,10 @@ SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshNode * n1,
 /// Add a triangle defined by its nodes IDs
 ///////////////////////////////////////////////////////////////////////////////
 
-SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(int idnode1, int idnode2, int idnode3, int ID)
+SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(smIdType idnode1,
+                                        smIdType idnode2,
+                                        smIdType idnode3,
+                                        smIdType ID)
 {
   const SMDS_MeshNode * node1 = myNodeFactory->FindNode(idnode1);
   const SMDS_MeshNode * node2 = myNodeFactory->FindNode(idnode2);
@@ -363,7 +367,7 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(int idnode1, int idnode2, int idnode3, i
 SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                         const SMDS_MeshNode * n2,
                                         const SMDS_MeshNode * n3,
-                                        int ID)
+                                        smIdType ID)
 {
   if ( !n1 || !n2 || !n3 ) return 0;
   if ( NbFaces() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
@@ -394,11 +398,11 @@ SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshNode * n1,
 /// Add a quadrangle defined by its nodes IDs
 ///////////////////////////////////////////////////////////////////////////////
 
-SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(int idnode1,
-                                        int idnode2,
-                                        int idnode3,
-                                        int idnode4,
-                                        int ID)
+SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(smIdType idnode1,
+                                        smIdType idnode2,
+                                        smIdType idnode3,
+                                        smIdType idnode4,
+                                        smIdType ID)
 {
   const SMDS_MeshNode *node1, *node2, *node3, *node4;
   node1 = myNodeFactory->FindNode(idnode1);
@@ -417,7 +421,7 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                         const SMDS_MeshNode * n2,
                                         const SMDS_MeshNode * n3,
                                         const SMDS_MeshNode * n4,
-                                        int ID)
+                                        smIdType ID)
 {
   if ( !n1 || !n2 || !n3 || !n4 ) return 0;
   if ( NbFaces() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
@@ -451,11 +455,11 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
 ///or if input nodes are not found.
 ///////////////////////////////////////////////////////////////////////////////
 
-SMDS_MeshVolume * SMDS_Mesh::AddVolumeWithID(int idnode1,
-                                             int idnode2,
-                                             int idnode3,
-                                             int idnode4,
-                                             int ID)
+SMDS_MeshVolume * SMDS_Mesh::AddVolumeWithID(smIdType idnode1,
+                                             smIdType idnode2,
+                                             smIdType idnode3,
+                                             smIdType idnode4,
+                                             smIdType ID)
 {
   const SMDS_MeshNode *node1, *node2, *node3, *node4;
   node1 = myNodeFactory->FindNode(idnode1);
@@ -476,7 +480,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                             const SMDS_MeshNode * n2,
                                             const SMDS_MeshNode * n3,
                                             const SMDS_MeshNode * n4,
-                                            int ID)
+                                            smIdType ID)
 {
   if ( !n1 || !n2 || !n3 || !n4 ) return 0;
   if ( NbVolumes() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
@@ -513,12 +517,12 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
 ///or if input nodes are not found.
 ///////////////////////////////////////////////////////////////////////////////
 
-SMDS_MeshVolume * SMDS_Mesh::AddVolumeWithID(int idnode1,
-                                             int idnode2,
-                                             int idnode3,
-                                             int idnode4,
-                                             int idnode5,
-                                             int ID)
+SMDS_MeshVolume * SMDS_Mesh::AddVolumeWithID(smIdType idnode1,
+                                             smIdType idnode2,
+                                             smIdType idnode3,
+                                             smIdType idnode4,
+                                             smIdType idnode5,
+                                             smIdType ID)
 {
   const SMDS_MeshNode *node1, *node2, *node3, *node4, *node5;
   node1 = myNodeFactory->FindNode(idnode1);
@@ -542,7 +546,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                             const SMDS_MeshNode * n3,
                                             const SMDS_MeshNode * n4,
                                             const SMDS_MeshNode * n5,
-                                            int ID)
+                                            smIdType ID)
 {
   if ( !n1 || !n2 || !n3 || !n4 || !n5 ) return 0;
   if ( NbVolumes() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
@@ -569,7 +573,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
                                       const SMDS_MeshNode * n5,
                                       const SMDS_MeshNode * n6)
 {
-  int ID = myCellFactory->GetFreeID();
+  smIdType ID = myCellFactory->GetFreeID();
   return SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, ID);
 }
 
@@ -581,13 +585,13 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
 ///or if input nodes are not found.
 ///////////////////////////////////////////////////////////////////////////////
 
-SMDS_MeshVolume * SMDS_Mesh::AddVolumeWithID(int idnode1,
-                                             int idnode2,
-                                             int idnode3,
-                                             int idnode4,
-                                             int idnode5,
-                                             int idnode6,
-                                             int ID)
+SMDS_MeshVolume * SMDS_Mesh::AddVolumeWithID(smIdType idnode1,
+                                             smIdType idnode2,
+                                             smIdType idnode3,
+                                             smIdType idnode4,
+                                             smIdType idnode5,
+                                             smIdType idnode6,
+                                             smIdType ID)
 {
   const SMDS_MeshNode *node1, *node2, *node3, *node4, *node5, *node6;
   node1 = myNodeFactory->FindNode(idnode1);
@@ -612,7 +616,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                             const SMDS_MeshNode * n4,
                                             const SMDS_MeshNode * n5,
                                             const SMDS_MeshNode * n6,
-                                            int ID)
+                                            smIdType ID)
 {
   if ( !n1 || !n2 || !n3 || !n4 || !n5 || !n6 ) return 0;
   if ( NbVolumes() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
@@ -656,19 +660,19 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
 ///or if input nodes are not found.
 ///////////////////////////////////////////////////////////////////////////////
 
-SMDS_MeshVolume * SMDS_Mesh::AddVolumeWithID(int idnode1,
-                                             int idnode2,
-                                             int idnode3,
-                                             int idnode4,
-                                             int idnode5,
-                                             int idnode6,
-                                             int idnode7,
-                                             int idnode8,
-                                             int idnode9,
-                                             int idnode10,
-                                             int idnode11,
-                                             int idnode12,
-                                             int ID)
+SMDS_MeshVolume * SMDS_Mesh::AddVolumeWithID(smIdType idnode1,
+                                             smIdType idnode2,
+                                             smIdType idnode3,
+                                             smIdType idnode4,
+                                             smIdType idnode5,
+                                             smIdType idnode6,
+                                             smIdType idnode7,
+                                             smIdType idnode8,
+                                             smIdType idnode9,
+                                             smIdType idnode10,
+                                             smIdType idnode11,
+                                             smIdType idnode12,
+                                             smIdType ID)
 {
   const SMDS_MeshNode *node1 = myNodeFactory->FindNode(idnode1);
   const SMDS_MeshNode *node2 = myNodeFactory->FindNode(idnode2);
@@ -705,7 +709,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                             const SMDS_MeshNode * n10,
                                             const SMDS_MeshNode * n11,
                                             const SMDS_MeshNode * n12,
-                                            int ID)
+                                            smIdType ID)
 {
   SMDS_MeshVolume* volume = 0;
   if(!n1 || !n2 || !n3 || !n4 || !n5 || !n6 ||
@@ -738,7 +742,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
                                       const SMDS_MeshNode * n7,
                                       const SMDS_MeshNode * n8)
 {
-  int ID = myCellFactory->GetFreeID();
+  smIdType ID = myCellFactory->GetFreeID();
   return SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, n7, n8, ID);
 }
 
@@ -750,15 +754,15 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
 ///exists or if input nodes are not found.
 ///////////////////////////////////////////////////////////////////////////////
 
-SMDS_MeshVolume * SMDS_Mesh::AddVolumeWithID(int idnode1,
-                                             int idnode2,
-                                             int idnode3,
-                                             int idnode4,
-                                             int idnode5,
-                                             int idnode6,
-                                             int idnode7,
-                                             int idnode8,
-                                             int ID)
+SMDS_MeshVolume * SMDS_Mesh::AddVolumeWithID(smIdType idnode1,
+                                             smIdType idnode2,
+                                             smIdType idnode3,
+                                             smIdType idnode4,
+                                             smIdType idnode5,
+                                             smIdType idnode6,
+                                             smIdType idnode7,
+                                             smIdType idnode8,
+                                             smIdType ID)
 {
   const SMDS_MeshNode *node1, *node2, *node3, *node4, *node5, *node6, *node7, *node8;
   node1 = myNodeFactory->FindNode(idnode1);
@@ -789,7 +793,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                             const SMDS_MeshNode * n6,
                                             const SMDS_MeshNode * n7,
                                             const SMDS_MeshNode * n8,
-                                            int ID)
+                                            smIdType ID)
 {
   SMDS_MeshVolume* volume = 0;
   if ( !n1 || !n2 || !n3 || !n4 || !n5 || !n6 || !n7 || !n8) return volume;
@@ -809,12 +813,12 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
 /// Add a polygon defined by its nodes IDs
 ///////////////////////////////////////////////////////////////////////////////
 
-SMDS_MeshFace* SMDS_Mesh::AddPolygonalFaceWithID (const std::vector<int> & nodes_ids,
-                                                  const int               ID)
+SMDS_MeshFace* SMDS_Mesh::AddPolygonalFaceWithID (const std::vector<smIdType> & nodes_ids,
+                                                  const smIdType               ID)
 {
-  int nbNodes = nodes_ids.size();
+  size_t nbNodes = nodes_ids.size();
   std::vector<const SMDS_MeshNode*> nodes (nbNodes);
-  for (int i = 0; i < nbNodes; i++) {
+  for ( size_t i = 0; i < nbNodes; i++) {
     nodes[i] = myNodeFactory->FindNode( nodes_ids[i] );
     if (!nodes[i]) return NULL;
   }
@@ -827,7 +831,7 @@ SMDS_MeshFace* SMDS_Mesh::AddPolygonalFaceWithID (const std::vector<int> & nodes
 
 SMDS_MeshFace*
 SMDS_Mesh::AddPolygonalFaceWithID (const std::vector<const SMDS_MeshNode*> & nodes,
-                                   const int                                 ID)
+                                   const smIdType                                 ID)
 {
   if ( NbFaces() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
 
@@ -856,8 +860,8 @@ SMDS_MeshFace* SMDS_Mesh::AddPolygonalFace (const std::vector<const SMDS_MeshNod
 /// Add a quadratic polygon defined by its nodes IDs
 ///////////////////////////////////////////////////////////////////////////////
 
-SMDS_MeshFace* SMDS_Mesh::AddQuadPolygonalFaceWithID (const std::vector<int> & nodes_ids,
-                                                      const int                ID)
+SMDS_MeshFace* SMDS_Mesh::AddQuadPolygonalFaceWithID (const std::vector<smIdType> & nodes_ids,
+                                                      const smIdType                ID)
 {
   std::vector<const SMDS_MeshNode*> nodes( nodes_ids.size() );
   for ( size_t i = 0; i < nodes.size(); i++) {
@@ -873,7 +877,7 @@ SMDS_MeshFace* SMDS_Mesh::AddQuadPolygonalFaceWithID (const std::vector<int> & n
 
 SMDS_MeshFace*
 SMDS_Mesh::AddQuadPolygonalFaceWithID (const std::vector<const SMDS_MeshNode*> & nodes,
-                                       const int                                 ID)
+                                       const smIdType                                 ID)
 {
   if ( NbFaces() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
   if ( nodes.empty() )
@@ -904,13 +908,13 @@ SMDS_MeshFace* SMDS_Mesh::AddQuadPolygonalFace (const std::vector<const SMDS_Mes
 /// or if input nodes are not found.
 ///////////////////////////////////////////////////////////////////////////////
 
-SMDS_MeshVolume * SMDS_Mesh::AddPolyhedralVolumeWithID (const std::vector<int> & nodes_ids,
-                                                        const std::vector<int> & quantities,
-                                                        const int                ID)
+SMDS_MeshVolume * SMDS_Mesh::AddPolyhedralVolumeWithID (const std::vector<smIdType> & nodes_ids,
+                                                        const std::vector<int>      & quantities,
+                                                        const smIdType                ID)
 {
-  int nbNodes = nodes_ids.size();
+  size_t nbNodes = nodes_ids.size();
   std::vector<const SMDS_MeshNode*> nodes (nbNodes);
-  for (int i = 0; i < nbNodes; i++) {
+  for ( size_t i = 0; i < nbNodes; i++) {
     nodes[i] = myNodeFactory->FindNode(nodes_ids[i]);
     if (!nodes[i]) return NULL;
   }
@@ -926,7 +930,7 @@ SMDS_MeshVolume * SMDS_Mesh::AddPolyhedralVolumeWithID (const std::vector<int> &
 SMDS_MeshVolume*
 SMDS_Mesh::AddPolyhedralVolumeWithID (const std::vector<const SMDS_MeshNode*>& nodes,
                                       const std::vector<int>                 & quantities,
-                                      const int                           ID)
+                                      const smIdType                           ID)
 {
   if ( nodes.empty() || quantities.empty() )
     return NULL;
@@ -951,7 +955,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddPolyhedralVolume
 (const std::vector<const SMDS_MeshNode*> & nodes,
  const std::vector<int>                  & quantities)
 {
-  int ID = myCellFactory->GetFreeID();
+  smIdType ID = myCellFactory->GetFreeID();
   return SMDS_Mesh::AddPolyhedralVolumeWithID(nodes, quantities, ID);
 }
 
@@ -987,7 +991,7 @@ void SMDS_Mesh::MoveNode(const SMDS_MeshNode *n, double x, double y, double z)
 ///////////////////////////////////////////////////////////////////////////////
 /// Return the node whose SMDS ID is 'ID'.
 ///////////////////////////////////////////////////////////////////////////////
-const SMDS_MeshNode * SMDS_Mesh::FindNode(int ID) const
+const SMDS_MeshNode * SMDS_Mesh::FindNode(smIdType ID) const
 {
   return myNodeFactory->FindNode( ID );
 }
@@ -995,12 +999,12 @@ const SMDS_MeshNode * SMDS_Mesh::FindNode(int ID) const
 ///////////////////////////////////////////////////////////////////////////////
 /// Return the node whose VTK ID is 'vtkId'.
 ///////////////////////////////////////////////////////////////////////////////
-const SMDS_MeshNode * SMDS_Mesh::FindNodeVtk(int vtkId) const
+const SMDS_MeshNode * SMDS_Mesh::FindNodeVtk(vtkIdType vtkId) const
 {
   return myNodeFactory->FindNode( vtkId + 1 );
 }
 
-const SMDS_MeshElement * SMDS_Mesh::FindElementVtk(int IDelem) const
+const SMDS_MeshElement * SMDS_Mesh::FindElementVtk(vtkIdType IDelem) const
 {
   return myCellFactory->FindElement( FromVtkToSmds( IDelem ));
 }
@@ -1048,6 +1052,26 @@ bool SMDS_Mesh::RemoveSubMesh(const SMDS_Mesh * aMesh)
   return found;
 }
 
+//=======================================================================
+//function : SetAllNodesNotMarked
+//purpose  : Clear marked flag of all nodes
+//=======================================================================
+
+void SMDS_Mesh::SetAllNodesNotMarked()
+{
+  myNodeFactory->SetAllNotMarked();
+}
+
+//=======================================================================
+//function : SetAllCellsNotMarked
+//purpose  : Clear marked flag of all cells
+//=======================================================================
+
+void SMDS_Mesh::SetAllCellsNotMarked()
+{
+  myCellFactory->SetAllNotMarked();
+}
+
 //=======================================================================
 //function : ChangePolyhedronNodes
 //purpose  :
@@ -1060,16 +1084,27 @@ bool SMDS_Mesh::ChangePolyhedronNodes(const SMDS_MeshElement *                 e
   // keep current nodes of element
   std::set<const SMDS_MeshNode*> oldNodes( element->begin_nodes(), element->end_nodes() );
 
-  // change nodes
   bool Ok = false;
+
+  // change vtkUnstructuredGrid::Faces
   if ( const SMDS_MeshVolume* vol = DownCast<SMDS_MeshVolume>( element ))
     Ok = vol->ChangeNodes( nodes, quantities );
 
+  // change vtkUnstructuredGrid::Connectivity and inverse connectivity
   if ( Ok )
-  {
-    setMyModified();
-    updateInverseElements( element, &nodes[0], nodes.size(), oldNodes );
-  }
+    if ( SMDS_MeshCell* cell = dynamic_cast<SMDS_MeshCell*>((SMDS_MeshElement*) element))
+    {
+      boost::container::flat_set< const SMDS_MeshNode* > uniqueNodes( nodes.begin(), nodes.end() );
+      const SMDS_MeshNode** nodesPtr = &( *uniqueNodes.begin());
+      const int              nbNodes = (int) uniqueNodes.size();
+      Ok = cell->ChangeNodes( nodesPtr, nbNodes );
+      if ( Ok )
+      {
+        updateInverseElements( element, nodesPtr, nbNodes, oldNodes );
+        setMyModified();
+      }
+    }
+
   return Ok;
 }
 
@@ -1356,7 +1391,7 @@ const SMDS_MeshFace* SMDS_Mesh::FindFace(const SMDS_MeshNode *node1,
 //purpose  :
 //=======================================================================
 
-const SMDS_MeshElement* SMDS_Mesh::FindElement(int IDelem) const
+const SMDS_MeshElement* SMDS_Mesh::FindElement(smIdType IDelem) const
 {
   return myCellFactory->FindElement( IDelem );
 }
@@ -1435,7 +1470,7 @@ int SMDS_Mesh::GetElementsByNodes(const std::vector<const SMDS_MeshNode *>& node
     }
 
   foundElems.clear();
-  if ( n0 )
+  if ( n0 && minNbInverse > 0 )
   {
     foundElems.reserve( minNbInverse );
     SMDS_ElemIteratorPtr eIt = n0->GetInverseElementIterator( type );
@@ -1456,7 +1491,7 @@ int SMDS_Mesh::GetElementsByNodes(const std::vector<const SMDS_MeshNode *>& node
 ///////////////////////////////////////////////////////////////////////////////
 /// Return the number of nodes
 ///////////////////////////////////////////////////////////////////////////////
-int SMDS_Mesh::NbNodes() const
+smIdType SMDS_Mesh::NbNodes() const
 {
   return myInfo.NbNodes();
 }
@@ -1464,14 +1499,14 @@ int SMDS_Mesh::NbNodes() const
 ///////////////////////////////////////////////////////////////////////////////
 /// Return the number of elements
 ///////////////////////////////////////////////////////////////////////////////
-int SMDS_Mesh::NbElements() const
+smIdType SMDS_Mesh::NbElements() const
 {
   return myInfo.NbElements();
 }
 ///////////////////////////////////////////////////////////////////////////////
 /// Return the number of 0D elements
 ///////////////////////////////////////////////////////////////////////////////
-int SMDS_Mesh::Nb0DElements() const
+smIdType SMDS_Mesh::Nb0DElements() const
 {
   return myInfo.Nb0DElements();
 }
@@ -1479,7 +1514,7 @@ int SMDS_Mesh::Nb0DElements() const
 ///////////////////////////////////////////////////////////////////////////////
 /// Return the number of 0D elements
 ///////////////////////////////////////////////////////////////////////////////
-int SMDS_Mesh::NbBalls() const
+smIdType SMDS_Mesh::NbBalls() const
 {
   return myInfo.NbBalls();
 }
@@ -1487,7 +1522,7 @@ int SMDS_Mesh::NbBalls() const
 ///////////////////////////////////////////////////////////////////////////////
 /// Return the number of edges (including construction edges)
 ///////////////////////////////////////////////////////////////////////////////
-int SMDS_Mesh::NbEdges() const
+smIdType SMDS_Mesh::NbEdges() const
 {
   return myInfo.NbEdges();
 }
@@ -1495,7 +1530,7 @@ int SMDS_Mesh::NbEdges() const
 ///////////////////////////////////////////////////////////////////////////////
 /// Return the number of faces (including construction faces)
 ///////////////////////////////////////////////////////////////////////////////
-int SMDS_Mesh::NbFaces() const
+smIdType SMDS_Mesh::NbFaces() const
 {
   return myInfo.NbFaces();
 }
@@ -1503,7 +1538,7 @@ int SMDS_Mesh::NbFaces() const
 ///////////////////////////////////////////////////////////////////////////////
 /// Return the number of volumes
 ///////////////////////////////////////////////////////////////////////////////
-int SMDS_Mesh::NbVolumes() const
+smIdType SMDS_Mesh::NbVolumes() const
 {
   return myInfo.NbVolumes();
 }
@@ -1512,7 +1547,7 @@ int SMDS_Mesh::NbVolumes() const
 /// Return the number of child mesh of this mesh.
 /// Note that the tree structure of SMDS_Mesh is unused in SMESH
 ///////////////////////////////////////////////////////////////////////////////
-int SMDS_Mesh::NbSubMesh() const
+smIdType SMDS_Mesh::NbSubMesh() const
 {
   return myChildren.size();
 }
@@ -1586,7 +1621,7 @@ SMDS_NodeIteratorPtr SMDS_Mesh::nodesIterator() const
 
 SMDS_ElemIteratorPtr SMDS_Mesh::elementGeomIterator(SMDSAbs_GeometryType type) const
 {
-  int nbElems = myCellFactory->CompactChangePointers() ? -1 : myInfo.NbElements( type );
+  smIdType nbElems = myCellFactory->CompactChangePointers() ? -1 : myInfo.NbElements( type );
   return myCellFactory->GetIterator< SMDS_ElemIterator >( new SMDS_MeshElement::GeomFilter( type ),
                                                           nbElems);
 }
@@ -1597,7 +1632,7 @@ SMDS_ElemIteratorPtr SMDS_Mesh::elementEntityIterator(SMDSAbs_EntityType type) c
   {
     return myNodeFactory->GetIterator< SMDS_ElemIterator >( new SMDS_MeshElement::NonNullFilter );
   }
-  int nbElems = myCellFactory->CompactChangePointers() ? -1 : myInfo.NbElements( type );
+  smIdType nbElems = myCellFactory->CompactChangePointers() ? -1 : myInfo.NbElements( type );
   return myCellFactory->GetIterator<SMDS_ElemIterator>( new SMDS_MeshElement::EntityFilter( type ),
                                                         nbElems);
 }
@@ -1617,7 +1652,7 @@ SMDS_ElemIteratorPtr SMDS_Mesh::elementsIterator(SMDSAbs_ElementType type) const
     return myNodeFactory->GetIterator< TIterator >( new SMDS_MeshElement::NonNullFilter );
 
   default:
-    int nbElems = myCellFactory->CompactChangePointers() ? -1 : myInfo.NbElements( type );
+    smIdType nbElems = myCellFactory->CompactChangePointers() ? -1 : myInfo.NbElements( type );
     return myCellFactory->GetIterator< TIterator >( new SMDS_MeshElement::TypeFilter( type ),
                                                     nbElems);
   }
@@ -1631,7 +1666,7 @@ SMDS_ElemIteratorPtr SMDS_Mesh::elementsIterator(SMDSAbs_ElementType type) const
 SMDS_EdgeIteratorPtr SMDS_Mesh::edgesIterator() const
 {
   typedef SMDS_EdgeIterator TIterator;
-  int nbElems = myCellFactory->CompactChangePointers() ? -1 : myInfo.NbEdges();
+  smIdType nbElems = myCellFactory->CompactChangePointers() ? -1 : myInfo.NbEdges();
   return myCellFactory->GetIterator< TIterator >( new SMDS_MeshElement::TypeFilter( SMDSAbs_Edge ),
                                                   nbElems);
 }
@@ -1643,7 +1678,7 @@ SMDS_EdgeIteratorPtr SMDS_Mesh::edgesIterator() const
 SMDS_FaceIteratorPtr SMDS_Mesh::facesIterator() const
 {
   typedef SMDS_FaceIterator TIterator;
-  int nbElems = myCellFactory->CompactChangePointers() ? -1 : myInfo.NbFaces();
+  smIdType nbElems = myCellFactory->CompactChangePointers() ? -1 : myInfo.NbFaces();
   return myCellFactory->GetIterator< TIterator >( new SMDS_MeshElement::TypeFilter( SMDSAbs_Face ),
                                                   nbElems);
 }
@@ -1655,7 +1690,7 @@ SMDS_FaceIteratorPtr SMDS_Mesh::facesIterator() const
 SMDS_VolumeIteratorPtr SMDS_Mesh::volumesIterator() const
 {
   typedef SMDS_VolumeIterator TIterator;
-  int nbElems = myCellFactory->CompactChangePointers() ? -1 : myInfo.NbVolumes();
+  smIdType nbElems = myCellFactory->CompactChangePointers() ? -1 : myInfo.NbVolumes();
   return
     myCellFactory->GetIterator< TIterator >( new SMDS_MeshElement::TypeFilter( SMDSAbs_Volume ),
                                              nbElems );
@@ -1871,7 +1906,7 @@ void SMDS_Mesh::RemoveElement(const SMDS_MeshElement *               elem,
       n->RemoveInverseElement((*it));
     }
 
-    int vtkid = (*it)->GetVtkID();
+    vtkIdType vtkid = (*it)->GetVtkID();
 
     switch ((*it)->GetType()) {
     case SMDSAbs_Node:
@@ -1916,7 +1951,7 @@ void SMDS_Mesh::RemoveElement(const SMDS_MeshElement *               elem,
 ///////////////////////////////////////////////////////////////////////////////
 void SMDS_Mesh::RemoveFreeElement(const SMDS_MeshElement * elem)
 {
-  const int           vtkId = elem->GetVtkID();
+  const vtkIdType     vtkId = elem->GetVtkID();
   SMDSAbs_ElementType aType = elem->GetType();
   if ( aType == SMDSAbs_Node )
   {
@@ -1977,7 +2012,7 @@ bool SMDS_Mesh::Contains (const SMDS_MeshElement* elem) const
 //purpose  :
 //=======================================================================
 
-int SMDS_Mesh::MaxNodeID() const
+smIdType SMDS_Mesh::MaxNodeID() const
 {
   return myNodeFactory->GetMaxID();
 }
@@ -1987,7 +2022,7 @@ int SMDS_Mesh::MaxNodeID() const
 //purpose  :
 //=======================================================================
 
-int SMDS_Mesh::MinNodeID() const
+smIdType SMDS_Mesh::MinNodeID() const
 {
   return myNodeFactory->GetMinID();
 }
@@ -1997,7 +2032,7 @@ int SMDS_Mesh::MinNodeID() const
 //purpose  :
 //=======================================================================
 
-int SMDS_Mesh::MaxElementID() const
+smIdType SMDS_Mesh::MaxElementID() const
 {
   return myCellFactory->GetMaxID();
 }
@@ -2007,7 +2042,7 @@ int SMDS_Mesh::MaxElementID() const
 //purpose  :
 //=======================================================================
 
-int SMDS_Mesh::MinElementID() const
+smIdType SMDS_Mesh::MinElementID() const
 {
   return myCellFactory->GetMinID();
 }
@@ -2029,7 +2064,7 @@ int SMDS_Mesh::MinElementID() const
 //purpose  : Return type of element or node with id
 //=======================================================================
 
-SMDSAbs_ElementType SMDS_Mesh::GetElementType( const int id, const bool iselem ) const
+SMDSAbs_ElementType SMDS_Mesh::GetElementType( const smIdType id, const bool iselem ) const
 {
   const SMDS_MeshElement* elem = 0;
   if( iselem )
@@ -2054,7 +2089,7 @@ SMDSAbs_ElementType SMDS_Mesh::GetElementType( const int id, const bool iselem )
 //function : AddEdgeWithID
 //purpose  :
 //=======================================================================
-SMDS_MeshEdge* SMDS_Mesh::AddEdgeWithID(int n1, int n2, int n12, int ID)
+SMDS_MeshEdge* SMDS_Mesh::AddEdgeWithID(smIdType n1, smIdType n2, smIdType n12, smIdType ID)
 {
   return SMDS_Mesh::AddEdgeWithID (myNodeFactory->FindNode(n1),
                                    myNodeFactory->FindNode(n2),
@@ -2080,7 +2115,7 @@ 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)
+                                        smIdType                   ID)
 {
   if ( !n1 || !n2 || !n12 ) return 0;
 
@@ -2113,8 +2148,8 @@ SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshNode * n1,
 //function : AddFaceWithID
 //purpose  :
 //=======================================================================
-SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(int n1, int n2, int n3,
-                                        int n12,int n23,int n31, int ID)
+SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(smIdType n1, smIdType n2, smIdType n3,
+                                        smIdType n12,smIdType n23,smIdType n31, smIdType ID)
 {
   return SMDS_Mesh::AddFaceWithID (myNodeFactory->FindNode(n1) ,
                                    myNodeFactory->FindNode(n2) ,
@@ -2135,7 +2170,7 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                         const SMDS_MeshNode * n12,
                                         const SMDS_MeshNode * n23,
                                         const SMDS_MeshNode * n31,
-                                        int ID)
+                                        smIdType ID)
 {
   if ( !n1 || !n2 || !n3 || !n12 || !n23 || !n31 ) return 0;
   if ( NbFaces() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
@@ -2170,8 +2205,8 @@ SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshNode * n1,
 //function : AddFaceWithID
 //purpose  :
 //=======================================================================
-SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(int n1, int n2, int n3,
-                                        int n12,int n23,int n31, int nCenter, int ID)
+SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(smIdType n1, smIdType n2, smIdType n3,
+                                        smIdType n12,smIdType n23,smIdType n31, smIdType nCenter, smIdType ID)
 {
   return SMDS_Mesh::AddFaceWithID (myNodeFactory->FindNode(n1) ,
                                    myNodeFactory->FindNode(n2) ,
@@ -2194,7 +2229,7 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                         const SMDS_MeshNode * n23,
                                         const SMDS_MeshNode * n31,
                                         const SMDS_MeshNode * nCenter,
-                                        int ID)
+                                        smIdType ID)
 {
   if ( !n1 || !n2 || !n3 || !n12 || !n23 || !n31 || !nCenter) return 0;
   if ( NbFaces() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
@@ -2230,8 +2265,8 @@ SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshNode * n1,
 //function : AddFaceWithID
 //purpose  :
 //=======================================================================
-SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(int n1, int n2, int n3, int n4,
-                                        int n12,int n23,int n34,int n41, int ID)
+SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                        smIdType n12,smIdType n23,smIdType n34,smIdType n41, smIdType ID)
 {
   return SMDS_Mesh::AddFaceWithID (myNodeFactory->FindNode(n1) ,
                                    myNodeFactory->FindNode(n2) ,
@@ -2256,7 +2291,7 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                         const SMDS_MeshNode * n23,
                                         const SMDS_MeshNode * n34,
                                         const SMDS_MeshNode * n41,
-                                        int ID)
+                                        smIdType ID)
 {
   if ( !n1 || !n2 || !n3 || !n4 || !n12 || !n23 || !n34 || !n41) return 0;
   if ( NbFaces() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
@@ -2292,8 +2327,8 @@ SMDS_MeshFace* SMDS_Mesh::AddFace(const SMDS_MeshNode * n1,
 //function : AddFaceWithID
 //purpose  :
 //=======================================================================
-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)
+SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                        smIdType n12,smIdType n23,smIdType n34,smIdType n41, smIdType nCenter, smIdType ID)
 {
   return SMDS_Mesh::AddFaceWithID (myNodeFactory->FindNode(n1) ,
                                    myNodeFactory->FindNode(n2) ,
@@ -2320,7 +2355,7 @@ SMDS_MeshFace* SMDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                         const SMDS_MeshNode * n34,
                                         const SMDS_MeshNode * n41,
                                         const SMDS_MeshNode * nCenter,
-                                        int ID)
+                                        smIdType ID)
 {
   if ( !n1 || !n2 || !n3 || !n4 || !n12 || !n23 || !n34 || !n41 || !nCenter) return 0;
   if ( NbFaces() % CHECKMEMORY_INTERVAL == 0 ) CheckMemory();
@@ -2359,9 +2394,9 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
 //function : AddVolumeWithID
 //purpose  :
 //=======================================================================
-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)
+SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                            smIdType n12,smIdType n23,smIdType n31,
+                                            smIdType n14,smIdType n24,smIdType n34, smIdType ID)
 {
   return SMDS_Mesh::AddVolumeWithID (myNodeFactory->FindNode(n1) ,
                                      myNodeFactory->FindNode(n2) ,
@@ -2390,7 +2425,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                             const SMDS_MeshNode * n14,
                                             const SMDS_MeshNode * n24,
                                             const SMDS_MeshNode * n34,
-                                            int ID)
+                                            smIdType ID)
 {
   if ( !n1 || !n2 || !n3 || !n4 || !n12 || !n23 || !n31 || !n14 || !n24 || !n34)
     return 0;
@@ -2433,9 +2468,9 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
 //function : AddVolumeWithID
 //purpose  :
 //=======================================================================
-SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4, int n5,
-                                            int n12,int n23,int n34,int n41,
-                                            int n15,int n25,int n35,int n45, int ID)
+SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4, smIdType n5,
+                                            smIdType n12,smIdType n23,smIdType n34,smIdType n41,
+                                            smIdType n15,smIdType n25,smIdType n35,smIdType n45, smIdType ID)
 {
   return SMDS_Mesh::AddVolumeWithID (myNodeFactory->FindNode(n1) ,
                                      myNodeFactory->FindNode(n2) ,
@@ -2470,7 +2505,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                             const SMDS_MeshNode * n25,
                                             const SMDS_MeshNode * n35,
                                             const SMDS_MeshNode * n45,
-                                            int ID)
+                                            smIdType ID)
 {
   if (!n1 || !n2 || !n3 || !n4 || !n5 || !n12 || !n23 ||
       !n34 || !n41 || !n15 || !n25 || !n35 || !n45)
@@ -2516,11 +2551,11 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
 //function : AddVolumeWithID
 //purpose  : 2d order Pentahedron (prism) with 15 nodes
 //=======================================================================
-SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(int n1, int n2, int n3,
-                                            int n4, int n5, int n6,
-                                            int n12,int n23,int n31,
-                                            int n45,int n56,int n64,
-                                            int n14,int n25,int n36, int ID)
+SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3,
+                                            smIdType n4, smIdType n5, smIdType n6,
+                                            smIdType n12,smIdType n23,smIdType n31,
+                                            smIdType n45,smIdType n56,smIdType n64,
+                                            smIdType n14,smIdType n25,smIdType n36, smIdType ID)
 {
   return SMDS_Mesh::AddVolumeWithID (myNodeFactory->FindNode(n1) ,
                                      myNodeFactory->FindNode(n2) ,
@@ -2559,7 +2594,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                             const SMDS_MeshNode * n14,
                                             const SMDS_MeshNode * n25,
                                             const SMDS_MeshNode * n36,
-                                            int ID)
+                                            smIdType ID)
 {
   if (!n1 || !n2 || !n3 || !n4 || !n5 || !n6 || !n12 || !n23 ||
       !n31 || !n45 || !n56 || !n64 || !n14 || !n25 || !n36)
@@ -2608,12 +2643,12 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
 //function : AddVolumeWithID
 //purpose  : 2d order Pentahedron (prism) with 18 nodes
 //=======================================================================
-SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(int n1, int n2, int n3,
-                                            int n4, int n5, int n6,
-                                            int n12,int n23,int n31,
-                                            int n45,int n56,int n64,
-                                            int n14,int n25,int n36,
-                                            int n1245, int n2356, int n1346, int ID)
+SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3,
+                                            smIdType n4, smIdType n5, smIdType n6,
+                                            smIdType n12,smIdType n23,smIdType n31,
+                                            smIdType n45,smIdType n56,smIdType n64,
+                                            smIdType n14,smIdType n25,smIdType n36,
+                                            smIdType n1245, smIdType n2356, smIdType n1346, smIdType ID)
 {
   return SMDS_Mesh::AddVolumeWithID (myNodeFactory->FindNode(n1) ,
                                      myNodeFactory->FindNode(n2) ,
@@ -2658,7 +2693,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                             const SMDS_MeshNode * n1245,
                                             const SMDS_MeshNode * n2356,
                                             const SMDS_MeshNode * n1346,
-                                            int ID)
+                                            smIdType ID)
 {
   //MESSAGE("AddVolumeWithID penta18 "<< ID);
   if (!n1 || !n2 || !n3 || !n4 || !n5 || !n6 || !n12 || !n23 ||
@@ -2711,11 +2746,11 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
 //function : AddVolumeWithID
 //purpose  :
 //=======================================================================
-SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4,
-                                            int n5, int n6, int n7, int n8,
-                                            int n12,int n23,int n34,int n41,
-                                            int n56,int n67,int n78,int n85,
-                                            int n15,int n26,int n37,int n48, int ID)
+SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                            smIdType n5, smIdType n6, smIdType n7, smIdType n8,
+                                            smIdType n12,smIdType n23,smIdType n34,smIdType n41,
+                                            smIdType n56,smIdType n67,smIdType n78,smIdType n85,
+                                            smIdType n15,smIdType n26,smIdType n37,smIdType n48, smIdType ID)
 {
   return SMDS_Mesh::AddVolumeWithID (myNodeFactory->FindNode(n1),
                                      myNodeFactory->FindNode(n2),
@@ -2764,7 +2799,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                             const SMDS_MeshNode * n26,
                                             const SMDS_MeshNode * n37,
                                             const SMDS_MeshNode * n48,
-                                            int ID)
+                                            smIdType ID)
 {
   if (!n1 || !n2 || !n3 || !n4 || !n5 || !n6 || !n7 || !n8 || !n12 || !n23 ||
       !n34 || !n41 || !n56 || !n67 || !n78 || !n85 || !n15 || !n26 || !n37 || !n48)
@@ -2823,13 +2858,13 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
 //function : AddVolumeWithID
 //purpose  :
 //=======================================================================
-SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4,
-                                            int n5, int n6, int n7, int n8,
-                                            int n12,int n23,int n34,int n41,
-                                            int n56,int n67,int n78,int n85,
-                                            int n15,int n26,int n37,int n48,
-                                            int n1234,int n1256,int n2367,int n3478,
-                                            int n1458,int n5678,int nCenter, int ID)
+SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                            smIdType n5, smIdType n6, smIdType n7, smIdType n8,
+                                            smIdType n12,smIdType n23,smIdType n34,smIdType n41,
+                                            smIdType n56,smIdType n67,smIdType n78,smIdType n85,
+                                            smIdType n15,smIdType n26,smIdType n37,smIdType n48,
+                                            smIdType n1234,smIdType n1256,smIdType n2367,smIdType n3478,
+                                            smIdType n1458,smIdType n5678,smIdType nCenter, smIdType ID)
 {
   return SMDS_Mesh::AddVolumeWithID (myNodeFactory->FindNode(n1),
                                      myNodeFactory->FindNode(n2),
@@ -2892,7 +2927,7 @@ SMDS_MeshVolume* SMDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                             const SMDS_MeshNode * n1458,
                                             const SMDS_MeshNode * n5678,
                                             const SMDS_MeshNode * nCenter,
-                                            int ID)
+                                            smIdType ID)
 {
   if (!n1 || !n2 || !n3 || !n4 || !n5 || !n6 || !n7 || !n8 || !n12 || !n23 ||
       !n34 || !n41 || !n56 || !n67 || !n78 || !n85 || !n15 || !n26 || !n37 || !n48 ||
@@ -2931,7 +2966,7 @@ void SMDS_Mesh::dumpGrid(std::string ficdump)
   }
   int nbCells = myGrid->GetNumberOfCells();
   ficcon << "-------------------------------- cells " <<  nbCells << endl;
-  for (int i=0; i<nbCells; i++)
+  for (vtkIdType i=0; i<nbCells; i++)
   {
     ficcon << i << " - " << myGrid->GetCell(i)->GetCellType() << " -";
     int nbptcell = myGrid->GetCell(i)->GetNumberOfPoints();
@@ -2970,16 +3005,16 @@ void SMDS_Mesh::CompactMesh()
     for ( ; holder != myElemHolders.end(); ++holder )
       (*holder)->beforeCompacting();
   }
-  int oldCellSize = myCellFactory->GetMaxID();
+  smIdType oldCellSize = myCellFactory->GetMaxID();
 
   // remove "holes" in SMDS numeration
-  std::vector<int> idNodesOldToNew, idCellsNewToOld, idCellsOldToNew;
+  std::vector<smIdType> idNodesOldToNew, idCellsNewToOld, idCellsOldToNew;
   myNodeFactory->Compact( idNodesOldToNew );
   myCellFactory->Compact( idCellsNewToOld );
 
   // make VTK IDs correspond to SMDS IDs
-  int newNodeSize = myNodeFactory->NbUsedElements();
-  int newCellSize = myCellFactory->NbUsedElements();
+  smIdType newNodeSize = myNodeFactory->NbUsedElements();
+  smIdType newCellSize = myCellFactory->NbUsedElements();
   myGrid->compactGrid( idNodesOldToNew, newNodeSize, idCellsNewToOld, newCellSize );
 
   if ( idsChange && !myElemHolders.empty() )
@@ -2988,7 +3023,7 @@ void SMDS_Mesh::CompactMesh()
     idCellsOldToNew.resize( oldCellSize, oldCellSize );
     for ( size_t iNew = 0; iNew < idCellsNewToOld.size(); ++iNew )
     {
-      if ( idCellsNewToOld[ iNew ] >= (int) idCellsOldToNew.size() )
+      if ( idCellsNewToOld[ iNew ] >= (smIdType) idCellsOldToNew.size() )
         idCellsOldToNew.resize( ( 1 + idCellsNewToOld[ iNew ]) * 1.5, oldCellSize );
       idCellsOldToNew[ idCellsNewToOld[ iNew ]] = iNew;
     }
@@ -3004,7 +3039,7 @@ void SMDS_Mesh::CompactMesh()
   return;
 }
 
-int SMDS_Mesh::FromVtkToSmds( int vtkid ) const
+smIdType SMDS_Mesh::FromVtkToSmds( vtkIdType vtkid ) const
 {
   return myCellFactory->FromVtkToSmds( vtkid );
 }
index 7e54f5efe14bf57d60576005a045fe91e57af0ed..e643ee20f47a5de283691fcab169565b8df633e2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -43,6 +43,7 @@
 #include <set>
 #include <list>
 #include <vector>
+#include <smIdType.hxx>
 
 class SMDS_ElementHolder;
 class SMDS_ElementFactory;
@@ -73,53 +74,53 @@ public:
                                                      size_t                  nbElemsToReturn=-1,
                                                      const SMDS_MeshElement* sm1stElem=0) const;
 
-  SMDSAbs_ElementType GetElementType( const int id, const bool iselem ) const;
+  SMDSAbs_ElementType GetElementType( const smIdType id, const bool iselem ) const;
 
   SMDS_Mesh *AddSubMesh();
 
-  virtual SMDS_MeshNode* AddNodeWithID(double x, double y, double z, int ID);
+  virtual SMDS_MeshNode* AddNodeWithID(double x, double y, double z, smIdType ID);
   virtual SMDS_MeshNode* AddNode      (double x, double y, double z);
 
-  virtual SMDS_Mesh0DElement* Add0DElementWithID(int n,                   int ID);
-  virtual SMDS_Mesh0DElement* Add0DElementWithID(const SMDS_MeshNode * n, int ID);
+  virtual SMDS_Mesh0DElement* Add0DElementWithID(smIdType n,                   smIdType ID);
+  virtual SMDS_Mesh0DElement* Add0DElementWithID(const SMDS_MeshNode * n, smIdType ID);
   virtual SMDS_Mesh0DElement* Add0DElement      (const SMDS_MeshNode * n);
 
-  virtual SMDS_BallElement* AddBallWithID(int n,                   double diameter, int ID);
-  virtual SMDS_BallElement* AddBallWithID(const SMDS_MeshNode * n, double diameter, int ID);
+  virtual SMDS_BallElement* AddBallWithID(smIdType n,                   double diameter, smIdType ID);
+  virtual SMDS_BallElement* AddBallWithID(const SMDS_MeshNode * n, double diameter, smIdType ID);
   virtual SMDS_BallElement* AddBall      (const SMDS_MeshNode * n, double diameter);
 
-  virtual SMDS_MeshEdge* AddEdgeWithID(int n1, int n2, int ID);
+  virtual SMDS_MeshEdge* AddEdgeWithID(smIdType n1, smIdType n2, smIdType ID);
   virtual SMDS_MeshEdge* AddEdgeWithID(const SMDS_MeshNode * n1,
                                        const SMDS_MeshNode * n2,
-                                       int ID);
+                                       smIdType ID);
   virtual SMDS_MeshEdge* AddEdge(const SMDS_MeshNode * n1,
                                  const SMDS_MeshNode * n2);
 
   // 2d order edge with 3 nodes: n12 - node between n1 and n2
-  virtual SMDS_MeshEdge* AddEdgeWithID(int n1, int n2, int n12, int ID);
+  virtual SMDS_MeshEdge* AddEdgeWithID(smIdType n1, smIdType n2, smIdType n12, smIdType ID);
   virtual SMDS_MeshEdge* AddEdgeWithID(const SMDS_MeshNode * n1,
                                        const SMDS_MeshNode * n2,
                                        const SMDS_MeshNode * n12,
-                                       int ID);
+                                       smIdType ID);
   virtual SMDS_MeshEdge* AddEdge(const SMDS_MeshNode * n1,
                                  const SMDS_MeshNode * n2,
                                  const SMDS_MeshNode * n12);
 
-  virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3, int ID);
+  virtual SMDS_MeshFace* AddFaceWithID(smIdType n1, smIdType n2, smIdType n3, smIdType ID);
   virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1,
                                        const SMDS_MeshNode * n2,
                                        const SMDS_MeshNode * n3,
-                                       int ID);
+                                       smIdType ID);
   virtual SMDS_MeshFace* AddFace(const SMDS_MeshNode * n1,
                                  const SMDS_MeshNode * n2,
                                  const SMDS_MeshNode * n3);
 
-  virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3, int n4, int ID);
+  virtual SMDS_MeshFace* AddFaceWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4, smIdType ID);
   virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1,
                                        const SMDS_MeshNode * n2,
                                        const SMDS_MeshNode * n3,
                                        const SMDS_MeshNode * n4,
-                                       int ID);
+                                       smIdType ID);
   virtual SMDS_MeshFace* AddFace(const SMDS_MeshNode * n1,
                                  const SMDS_MeshNode * n2,
                                  const SMDS_MeshNode * n3,
@@ -127,15 +128,15 @@ public:
 
 
   // 2d order triangle of 6 nodes
-  virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3,
-                                       int n12,int n23,int n31, int ID);
+  virtual SMDS_MeshFace* AddFaceWithID(smIdType n1, smIdType n2, smIdType n3,
+                                       smIdType n12,smIdType n23,smIdType n31, smIdType ID);
   virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1,
                                        const SMDS_MeshNode * n2,
                                        const SMDS_MeshNode * n3,
                                        const SMDS_MeshNode * n12,
                                        const SMDS_MeshNode * n23,
                                        const SMDS_MeshNode * n31,
-                                       int ID);
+                                       smIdType ID);
   virtual SMDS_MeshFace* AddFace(const SMDS_MeshNode * n1,
                                  const SMDS_MeshNode * n2,
                                  const SMDS_MeshNode * n3,
@@ -144,8 +145,8 @@ public:
                                  const SMDS_MeshNode * n31);
 
   // 2d order triangle of 7 nodes
-  virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3,
-                                       int n12,int n23,int n31, int nCenter, int ID);
+  virtual SMDS_MeshFace* AddFaceWithID(smIdType n1, smIdType n2, smIdType n3,
+                                       smIdType n12,smIdType n23,smIdType n31, smIdType nCenter, smIdType ID);
   virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1,
                                        const SMDS_MeshNode * n2,
                                        const SMDS_MeshNode * n3,
@@ -153,7 +154,7 @@ public:
                                        const SMDS_MeshNode * n23,
                                        const SMDS_MeshNode * n31,
                                        const SMDS_MeshNode * nCenter,
-                                       int ID);
+                                       smIdType ID);
   virtual SMDS_MeshFace* AddFace(const SMDS_MeshNode * n1,
                                  const SMDS_MeshNode * n2,
                                  const SMDS_MeshNode * n3,
@@ -163,8 +164,8 @@ public:
                                  const SMDS_MeshNode * nCenter);
 
   // 2d order quadrangle
-  virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3, int n4,
-                                       int n12,int n23,int n34,int n41, int ID);
+  virtual SMDS_MeshFace* AddFaceWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                       smIdType n12,smIdType n23,smIdType n34,smIdType n41, smIdType ID);
   virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1,
                                        const SMDS_MeshNode * n2,
                                        const SMDS_MeshNode * n3,
@@ -173,7 +174,7 @@ public:
                                        const SMDS_MeshNode * n23,
                                        const SMDS_MeshNode * n34,
                                        const SMDS_MeshNode * n41,
-                                       int ID);
+                                       smIdType ID);
   virtual SMDS_MeshFace* AddFace(const SMDS_MeshNode * n1,
                                  const SMDS_MeshNode * n2,
                                  const SMDS_MeshNode * n3,
@@ -183,8 +184,8 @@ public:
                                  const SMDS_MeshNode * n34,
                                  const SMDS_MeshNode * n41);
 
-  virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3, int n4,
-                                       int n12,int n23,int n34,int n41, int nCenter, int ID);
+  virtual SMDS_MeshFace* AddFaceWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                       smIdType n12,smIdType n23,smIdType n34,smIdType n41, smIdType nCenter, smIdType ID);
   virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1,
                                        const SMDS_MeshNode * n2,
                                        const SMDS_MeshNode * n3,
@@ -194,7 +195,7 @@ public:
                                        const SMDS_MeshNode * n34,
                                        const SMDS_MeshNode * n41,
                                        const SMDS_MeshNode * nCenter,
-                                       int ID);
+                                       smIdType ID);
   virtual SMDS_MeshFace* AddFace(const SMDS_MeshNode * n1,
                                  const SMDS_MeshNode * n2,
                                  const SMDS_MeshNode * n3,
@@ -205,40 +206,40 @@ public:
                                  const SMDS_MeshNode * n41,
                                  const SMDS_MeshNode * nCenter);
 
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4, smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
                                            const SMDS_MeshNode * n4,
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
                                      const SMDS_MeshNode * n4);
 
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4,
-                                           int n5, int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                           smIdType n5, smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
                                            const SMDS_MeshNode * n4,
                                            const SMDS_MeshNode * n5,
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
                                      const SMDS_MeshNode * n4,
                                      const SMDS_MeshNode * n5);
 
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4,
-                                           int n5, int n6, int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                           smIdType n5, smIdType n6, smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
                                            const SMDS_MeshNode * n4,
                                            const SMDS_MeshNode * n5,
                                            const SMDS_MeshNode * n6,
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
@@ -246,8 +247,8 @@ public:
                                      const SMDS_MeshNode * n5,
                                      const SMDS_MeshNode * n6);
 
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4,
-                                           int n5, int n6, int n7, int n8, int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                           smIdType n5, smIdType n6, smIdType n7, smIdType n8, smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
@@ -256,7 +257,7 @@ public:
                                            const SMDS_MeshNode * n6,
                                            const SMDS_MeshNode * n7,
                                            const SMDS_MeshNode * n8,
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
@@ -268,9 +269,9 @@ public:
 
 
   // hexagonal prism
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int n5, int n6,
-                                           int n7, int n8, int n9, int n10, int n11, int n12,
-                                           int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4, smIdType n5, smIdType n6,
+                                           smIdType n7, smIdType n8, smIdType n9, smIdType n10, smIdType n11, smIdType n12,
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
@@ -283,7 +284,7 @@ public:
                                            const SMDS_MeshNode * n10,
                                            const SMDS_MeshNode * n11,
                                            const SMDS_MeshNode * n12,
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
@@ -298,9 +299,9 @@ public:
                                      const SMDS_MeshNode * n12);
 
   // 2d order tetrahedron of 10 nodes
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4,
-                                           int n12,int n23,int n31,
-                                           int n14,int n24,int n34, int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                           smIdType n12,smIdType n23,smIdType n31,
+                                           smIdType n14,smIdType n24,smIdType n34, smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
@@ -311,7 +312,7 @@ public:
                                            const SMDS_MeshNode * n14,
                                            const SMDS_MeshNode * n24,
                                            const SMDS_MeshNode * n34,
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
@@ -324,10 +325,10 @@ public:
                                      const SMDS_MeshNode * n34);
 
   // 2d order pyramid of 13 nodes
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int n5,
-                                           int n12,int n23,int n34,int n41,
-                                           int n15,int n25,int n35,int n45,
-                                           int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4, smIdType n5,
+                                           smIdType n12,smIdType n23,smIdType n34,smIdType n41,
+                                           smIdType n15,smIdType n25,smIdType n35,smIdType n45,
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
@@ -341,7 +342,7 @@ public:
                                            const SMDS_MeshNode * n25,
                                            const SMDS_MeshNode * n35,
                                            const SMDS_MeshNode * n45,
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
@@ -357,12 +358,12 @@ public:
                                      const SMDS_MeshNode * n45);
 
   // 2d order Pentahedron with 15 nodes
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3,
-                                           int n4, int n5, int n6,
-                                           int n12,int n23,int n31,
-                                           int n45,int n56,int n64,
-                                           int n14,int n25,int n36,
-                                           int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3,
+                                           smIdType n4, smIdType n5, smIdType n6,
+                                           smIdType n12,smIdType n23,smIdType n31,
+                                           smIdType n45,smIdType n56,smIdType n64,
+                                           smIdType n14,smIdType n25,smIdType n36,
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
@@ -378,7 +379,7 @@ public:
                                            const SMDS_MeshNode * n14,
                                            const SMDS_MeshNode * n25,
                                            const SMDS_MeshNode * n36,
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
@@ -396,13 +397,13 @@ public:
                                      const SMDS_MeshNode * n36);
 
   // 2d order Pentahedron with 18 nodes
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3,
-                                           int n4, int n5, int n6,
-                                           int n12,int n23,int n31,
-                                           int n45,int n56,int n64,
-                                           int n14,int n25,int n36,
-                                           int n1245, int n2356, int n1346,
-                                           int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3,
+                                           smIdType n4, smIdType n5, smIdType n6,
+                                           smIdType n12,smIdType n23,smIdType n31,
+                                           smIdType n45,smIdType n56,smIdType n64,
+                                           smIdType n14,smIdType n25,smIdType n36,
+                                           smIdType n1245, smIdType n2356, smIdType n1346,
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
@@ -421,7 +422,7 @@ public:
                                            const SMDS_MeshNode * n1245,
                                            const SMDS_MeshNode * n2356,
                                            const SMDS_MeshNode * n1346,
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
@@ -443,12 +444,12 @@ public:
 
 
   // 2d oreder Hexahedrons with 20 nodes
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4,
-                                           int n5, int n6, int n7, int n8,
-                                           int n12,int n23,int n34,int n41,
-                                           int n56,int n67,int n78,int n85,
-                                           int n15,int n26,int n37,int n48,
-                                           int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                           smIdType n5, smIdType n6, smIdType n7, smIdType n8,
+                                           smIdType n12,smIdType n23,smIdType n34,smIdType n41,
+                                           smIdType n56,smIdType n67,smIdType n78,smIdType n85,
+                                           smIdType n15,smIdType n26,smIdType n37,smIdType n48,
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
@@ -469,7 +470,7 @@ public:
                                            const SMDS_MeshNode * n26,
                                            const SMDS_MeshNode * n37,
                                            const SMDS_MeshNode * n48,
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
@@ -492,14 +493,14 @@ public:
                                      const SMDS_MeshNode * n48);
 
   // 2d oreder Hexahedrons with 27 nodes
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4,
-                                           int n5, int n6, int n7, int n8,
-                                           int n12,int n23,int n34,int n41,
-                                           int n56,int n67,int n78,int n85,
-                                           int n15,int n26,int n37,int n48,
-                                           int n1234,int n1256,int n2367,int n3478,
-                                           int n1458,int n5678,int nCenter,
-                                           int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                           smIdType n5, smIdType n6, smIdType n7, smIdType n8,
+                                           smIdType n12,smIdType n23,smIdType n34,smIdType n41,
+                                           smIdType n56,smIdType n67,smIdType n78,smIdType n85,
+                                           smIdType n15,smIdType n26,smIdType n37,smIdType n48,
+                                           smIdType n1234,smIdType n1256,smIdType n2367,smIdType n3478,
+                                           smIdType n1458,smIdType n5678,smIdType nCenter,
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
@@ -527,7 +528,7 @@ public:
                                            const SMDS_MeshNode * n1458,
                                            const SMDS_MeshNode * n5678,
                                            const SMDS_MeshNode * nCenter,
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
@@ -556,31 +557,31 @@ public:
                                      const SMDS_MeshNode * n5678,
                                      const SMDS_MeshNode * nCenter);
 
-  virtual SMDS_MeshFace* AddPolygonalFaceWithID (const std::vector<int> & nodes_ids,
-                                                 const int                ID);
+  virtual SMDS_MeshFace* AddPolygonalFaceWithID (const std::vector<smIdType> & nodes_ids,
+                                                 const smIdType                ID);
 
   virtual SMDS_MeshFace* AddPolygonalFaceWithID (const std::vector<const SMDS_MeshNode*> & nodes,
-                                                 const int                                 ID);
+                                                 const smIdType                                 ID);
 
   virtual SMDS_MeshFace* AddPolygonalFace (const std::vector<const SMDS_MeshNode*> & nodes);
 
-  virtual SMDS_MeshFace* AddQuadPolygonalFaceWithID(const std::vector<int> & nodes_ids,
-                                                    const int                ID);
+  virtual SMDS_MeshFace* AddQuadPolygonalFaceWithID(const std::vector<smIdType> & nodes_ids,
+                                                    const smIdType                ID);
 
   virtual SMDS_MeshFace* AddQuadPolygonalFaceWithID(const std::vector<const SMDS_MeshNode*> & nodes,
-                                                    const int                                 ID);
+                                                    const smIdType                                 ID);
 
   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<smIdType> & nodes_ids,
+     const std::vector<int>      & quantities,
+     const smIdType                ID);
 
   virtual SMDS_MeshVolume* AddPolyhedralVolumeWithID
     (const std::vector<const SMDS_MeshNode*> & nodes,
      const std::vector<int>                  & quantities,
-     const int                                 ID);
+     const smIdType                            ID);
 
   virtual SMDS_MeshVolume* AddPolyhedralVolume
     (const std::vector<const SMDS_MeshNode*> & nodes,
@@ -617,6 +618,9 @@ public:
                              const std::vector<const SMDS_MeshNode*>& nodes,
                              const std::vector<int>&                  quantities);
 
+  void SetAllNodesNotMarked();
+  void SetAllCellsNotMarked();
+
   //virtual void Renumber (const bool isNodes, const int startID = 1, const int deltaID = 1);
   // Renumber all nodes or elements.
 
@@ -631,10 +635,10 @@ public:
             static_cast<const ELEMTYPE*>(e) : 0 );
   }
 
-  const SMDS_MeshNode *FindNode(int idnode) const;
-  const SMDS_MeshNode *FindNodeVtk(int idnode) const;
-  const SMDS_MeshElement *FindElementVtk(int IDelem) const;
-  virtual const SMDS_MeshElement * FindElement(int IDelem) const;
+  const SMDS_MeshNode *FindNode(smIdType idnode) const;
+  const SMDS_MeshNode *FindNodeVtk(vtkIdType idnode) const;
+  const SMDS_MeshElement *FindElementVtk(vtkIdType IDelem) const;
+  virtual const SMDS_MeshElement * FindElement(smIdType IDelem) const;
   static const SMDS_Mesh0DElement* Find0DElement(const SMDS_MeshNode * n);
   static const SMDS_BallElement* FindBall(const SMDS_MeshNode * n);
   static const SMDS_MeshEdge* FindEdge(const SMDS_MeshNode * n1,
@@ -681,26 +685,26 @@ public:
    */
   static int CheckMemory(const bool doNotRaise=false);
 
-  virtual int MaxNodeID() const;
-  virtual int MinNodeID() const;
-  virtual int MaxElementID() const;
-  virtual int MinElementID() const;
+  virtual smIdType MaxNodeID() const;
+  virtual smIdType MinNodeID() const;
+  virtual smIdType MaxElementID() const;
+  virtual smIdType MinElementID() const;
 
   const SMDS_MeshInfo& GetMeshInfo() const { return myInfo; }
 
-  virtual int NbNodes() const;
-  virtual int NbElements() const;
-  virtual int Nb0DElements() const;
-  virtual int NbBalls() const;
-  virtual int NbEdges() const;
-  virtual int NbFaces() const;
-  virtual int NbVolumes() const;
-  virtual int NbSubMesh() const;
+  virtual smIdType NbNodes() const;
+  virtual smIdType NbElements() const;
+  virtual smIdType Nb0DElements() const;
+  virtual smIdType NbBalls() const;
+  virtual smIdType NbEdges() const;
+  virtual smIdType NbFaces() const;
+  virtual smIdType NbVolumes() const;
+  virtual smIdType NbSubMesh() const;
 
   virtual ~SMDS_Mesh();
 
   double getMaxDim();
-  int FromVtkToSmds(int vtkid) const;
+  smIdType FromVtkToSmds(vtkIdType  vtkid) const;
 
   void dumpGrid(std::string ficdump="dumpGrid");
   static int chunkSize;
index 015eab06e391f87794503577f8e407f289381c49..371b54b63fd5bd15e23872e09416f03465feaeb2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 2cec46a8c6c50e61cfbea71a280283d0a81fa210..987bef6235d34aa8458b3ee9af13e88b915b7aaa 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2010-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -461,8 +461,8 @@ void SMDS_MeshCell::init( SMDSAbs_EntityType theEntity, int theNbNodes, ... )
   }
   va_end( vl );
 
-  int vtkType = toVtkType( theEntity );
-  int   vtkID = getGrid()->InsertNextLinkedCell( vtkType, theNbNodes, vtkIds );
+  int     vtkType = toVtkType( theEntity );
+  vtkIdType vtkID = getGrid()->InsertNextLinkedCell( vtkType, theNbNodes, vtkIds );
   setVtkID( vtkID );
 }
 
@@ -473,17 +473,17 @@ void SMDS_MeshCell::init( SMDSAbs_EntityType                       theEntity,
   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] );
+  int     vtkType = toVtkType( theEntity );
+  vtkIdType 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] ));
+  int     vtkType = toVtkType( theEntity );
+  vtkIdType vtkID = getGrid()->InsertNextLinkedCell( vtkType, vtkNodeIds.size(),
+                                                     const_cast< vtkIdType* > ( &vtkNodeIds[0] ));
   setVtkID( vtkID );
 }
 
index 81d0fe7a1566f19963407ad3f5e4511c2c61a4a3..b32da877bca1725601cdcc5293796219b43b752e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2010-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 4cb79a526a142d4931b36f9b88dbd24daa8fcfeb..c6515cb48c5edd8b3a4fc3184ff775875afdd299 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2010-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index ee03cf25aacb730d8e0c72d4fd424331e722071a..551cff4405080a5deaff010b1461de18c1b5756e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -105,7 +105,7 @@ int SMDS_MeshElement::GetNodeIndex( const SMDS_MeshNode* node ) const
  */
 //================================================================================
 
-int SMDS_MeshElement::GetID() const
+smIdType SMDS_MeshElement::GetID() const
 {
   return myHolder ? myHolder->GetID( this ) : -1;
 }
@@ -138,7 +138,7 @@ int SMDS_MeshElement::GetShapeID() const
  */
 //================================================================================
 
-int SMDS_MeshElement::GetVtkID() const
+vtkIdType SMDS_MeshElement::GetVtkID() const
 {
   return myHolder->GetVtkID( this );
 }
@@ -171,7 +171,7 @@ bool SMDS_MeshElement::isMarked() const
  */
 //================================================================================
 
-void SMDS_MeshElement::setVtkID( const int vtkID )
+void SMDS_MeshElement::setVtkID( const vtkIdType vtkID )
 {
   myHolder->SetVTKID( this, vtkID );
 }
index d22d34181455e397164f84a72b055c230e74cf17..eeec4a1f7073fbb192397c7fcd9858bc323d026e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -38,6 +38,7 @@
 
 #include <vtkType.h>
 #include <vtkCellType.h>
+#include <smIdType.hxx>
 
 class SMDS_ElementChunk;
 class SMDS_Mesh;
@@ -127,10 +128,10 @@ public:
   virtual int GetNodeIndex( const SMDS_MeshNode* node ) const;
 
 
-  virtual int GetID() const;
-  virtual int GetVtkID()   const;
-  virtual int getshapeId() const { return GetShapeID(); }
-  virtual int GetShapeID() const;
+  virtual smIdType  GetID() const;
+  virtual vtkIdType GetVtkID()   const;
+  virtual int  getshapeId() const { return GetShapeID(); }
+  virtual int  GetShapeID() const;
 
   // mark this element; to be used in algos
   virtual void setIsMarked( bool is ) const;
@@ -182,7 +183,7 @@ public:
 
   SMDS_MeshElement();
 
-  void setVtkID(const int vtkID );
+  void setVtkID(const vtkIdType vtkID );
   virtual void setShapeID( const int shapeID ) const;
 
   SMDS_UnstructuredGrid* getGrid() const;
index c9104a4aad3e5a559c57cbcce07d015825487d39..5c2558301b74594b8aaf9f70041ae909846e89a9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 7bdc0df33bf001953e44097e8cece003300308d9..6f8a84e6ed8695e00debb5bb70c1b4cf5008ea33 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 39807aab32b23f998edd4e1a248d6b6c0f598a76..a9d783ab2f6116951eeda983700b37d7a044900a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -45,7 +45,7 @@ class SMDS_EXPORT SMDS_MeshGroup: public SMDS_MeshObject, SMDS_ElementHolder
   bool Add(const SMDS_MeshElement * theElem);
   bool Remove(const SMDS_MeshElement * theElem);
   bool IsEmpty() const { return myElements.empty(); }
-  int  Extent() const { return myElements.size(); }
+  smIdType  Extent() const { return (smIdType) myElements.size(); }
   int  Tic() const { return myTic; }
   bool Contains(const SMDS_MeshElement * theElem) const;
 
index b9cfb61f2a75300380155fc7e30548f386f1ab2a..f9f2d8dc325829b9bf409870ea0471765cdbfe07 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -30,6 +30,7 @@
 
 #include "SMDS_MeshElement.hxx"
 #include<utilities.h>
+#include <smIdType.hxx>
 
 class SMDS_EXPORT SMDS_MeshInfo
 {
@@ -39,39 +40,39 @@ public:
   inline SMDS_MeshInfo& operator=(const SMDS_MeshInfo& other);
   inline void Clear();
 
-  inline int NbElements(SMDSAbs_ElementType  type=SMDSAbs_All) const;
-  inline int NbElements(SMDSAbs_EntityType   type) const { return NbEntities(type); }
-  inline int NbElements(SMDSAbs_GeometryType type) const { return NbElementsOfGeom(type); }
-
-  inline int NbEntities(SMDSAbs_EntityType  type) const;
-  inline int NbElementsOfGeom(SMDSAbs_GeometryType geom) const;
-
-  int NbNodes()      const { return myNbNodes; }
-  int Nb0DElements() const { return myNb0DElements; }
-  int NbBalls()      const { return myNbBalls; }
-  inline int NbEdges      (SMDSAbs_ElementOrder order = ORDER_ANY) const;
-
-  inline int NbFaces      (SMDSAbs_ElementOrder order = ORDER_ANY) const;
-  inline int NbTriangles  (SMDSAbs_ElementOrder order = ORDER_ANY) const;
-  inline int NbQuadrangles(SMDSAbs_ElementOrder order = ORDER_ANY) const;
-  int NbBiQuadTriangles() const { return myNbBiQuadTriangles; }
-  int NbBiQuadQuadrangles() const { return myNbBiQuadQuadrangles; }
-  inline int NbPolygons(SMDSAbs_ElementOrder order = ORDER_ANY) const;
-
-  inline int NbVolumes (SMDSAbs_ElementOrder order = ORDER_ANY) const;
-  inline int NbTetras  (SMDSAbs_ElementOrder order = ORDER_ANY) const;
-  inline int NbHexas   (SMDSAbs_ElementOrder order = ORDER_ANY) const;
-  inline int NbPyramids(SMDSAbs_ElementOrder order = ORDER_ANY) const;
-  inline int NbPrisms  (SMDSAbs_ElementOrder order = ORDER_ANY) const;
-  inline int NbHexPrisms(SMDSAbs_ElementOrder order = ORDER_ANY) const;
-  int NbTriQuadHexas() const { return myNbTriQuadHexas; }
-  int NbQuadPrisms() const { return myNbQuadPrisms; }
-  int NbBiQuadPrisms() const { return myNbBiQuadPrisms; }
-  int NbPolyhedrons() const { return myNbPolyhedrons; }
+  inline smIdType NbElements(SMDSAbs_ElementType  type=SMDSAbs_All) const;
+  inline smIdType NbElements(SMDSAbs_EntityType   type) const { return NbEntities(type); }
+  inline smIdType NbElements(SMDSAbs_GeometryType type) const { return NbElementsOfGeom(type); }
+
+  inline smIdType NbEntities(SMDSAbs_EntityType  type) const;
+  inline smIdType NbElementsOfGeom(SMDSAbs_GeometryType geom) const;
+
+  smIdType NbNodes()      const { return myNbNodes; }
+  smIdType Nb0DElements() const { return myNb0DElements; }
+  smIdType NbBalls()      const { return myNbBalls; }
+  inline smIdType NbEdges      (SMDSAbs_ElementOrder order = ORDER_ANY) const;
+
+  inline smIdType NbFaces      (SMDSAbs_ElementOrder order = ORDER_ANY) const;
+  inline smIdType NbTriangles  (SMDSAbs_ElementOrder order = ORDER_ANY) const;
+  inline smIdType NbQuadrangles(SMDSAbs_ElementOrder order = ORDER_ANY) const;
+  smIdType NbBiQuadTriangles() const { return myNbBiQuadTriangles; }
+  smIdType NbBiQuadQuadrangles() const { return myNbBiQuadQuadrangles; }
+  inline smIdType NbPolygons(SMDSAbs_ElementOrder order = ORDER_ANY) const;
+
+  inline smIdType NbVolumes (SMDSAbs_ElementOrder order = ORDER_ANY) const;
+  inline smIdType NbTetras  (SMDSAbs_ElementOrder order = ORDER_ANY) const;
+  inline smIdType NbHexas   (SMDSAbs_ElementOrder order = ORDER_ANY) const;
+  inline smIdType NbPyramids(SMDSAbs_ElementOrder order = ORDER_ANY) const;
+  inline smIdType NbPrisms  (SMDSAbs_ElementOrder order = ORDER_ANY) const;
+  inline smIdType NbHexPrisms(SMDSAbs_ElementOrder order = ORDER_ANY) const;
+  smIdType NbTriQuadHexas() const { return myNbTriQuadHexas; }
+  smIdType NbQuadPrisms() const { return myNbQuadPrisms; }
+  smIdType NbBiQuadPrisms() const { return myNbBiQuadPrisms; }
+  smIdType NbPolyhedrons() const { return myNbPolyhedrons; }
 
 protected:
   inline void addWithPoly(const SMDS_MeshElement* el);
-  inline void setNb(const SMDSAbs_EntityType geomType, const int nb);
+  inline void setNb(const SMDSAbs_EntityType geomType, const smIdType nb);
 
 private:
   friend class SMDS_Mesh;
@@ -79,29 +80,29 @@ private:
   // methods to count NOT POLY elements
   inline void remove(const SMDS_MeshElement* el);
   inline void add   (const SMDS_MeshElement* el);
-  inline int  index(SMDSAbs_ElementType type, int nbNodes) const;
+  inline smIdType  index(SMDSAbs_ElementType type, int nbNodes) const;
   // methods to remove elements of ANY kind
   inline void RemoveEdge(const SMDS_MeshElement* el);
   inline void RemoveFace(const SMDS_MeshElement* el);
   inline void RemoveVolume(const SMDS_MeshElement* el);
 
-  int myNbNodes;
+  smIdType myNbNodes;
 
-  int myNb0DElements;
-  int myNbBalls;
-  int myNbEdges      , myNbQuadEdges      ;
-  int myNbTriangles  , myNbQuadTriangles,   myNbBiQuadTriangles  ;
-  int myNbQuadrangles, myNbQuadQuadrangles, myNbBiQuadQuadrangles;
-  int myNbPolygons   , myNbQuadPolygons;
+  smIdType myNb0DElements;
+  smIdType myNbBalls;
+  smIdType myNbEdges      , myNbQuadEdges      ;
+  smIdType myNbTriangles  , myNbQuadTriangles,   myNbBiQuadTriangles  ;
+  smIdType myNbQuadrangles, myNbQuadQuadrangles, myNbBiQuadQuadrangles;
+  smIdType myNbPolygons   , myNbQuadPolygons;
 
-  int myNbTetras  , myNbQuadTetras  ;
-  int myNbHexas   , myNbQuadHexas,    myNbTriQuadHexas;
-  int myNbPyramids, myNbQuadPyramids;
-  int myNbPrisms  , myNbQuadPrisms,   myNbBiQuadPrisms;
-  int myNbHexPrism;
-  int myNbPolyhedrons;
+  smIdType myNbTetras  , myNbQuadTetras  ;
+  smIdType myNbHexas   , myNbQuadHexas,    myNbTriQuadHexas;
+  smIdType myNbPyramids, myNbQuadPyramids;
+  smIdType myNbPrisms  , myNbQuadPrisms,   myNbBiQuadPrisms;
+  smIdType myNbHexPrism;
+  smIdType myNbPolyhedrons;
 
-  std::vector<int*> myNb; // pointers to myNb... fields
+  std::vector<smIdType*> myNb; // pointers to myNb... fields
   std::vector<int>  myShift; // shift to get an index in myNb by elem->NbNodes()
 };
 
@@ -212,7 +213,7 @@ SMDS_MeshInfo::Clear()
   myNbPolygons=myNbQuadPolygons=myNbPolyhedrons=0;
 }
 
-inline int // index
+inline smIdType // index
 SMDS_MeshInfo::index(SMDSAbs_ElementType type, int nbNodes) const
 { return nbNodes + myShift[ type ]; }
 
@@ -250,54 +251,54 @@ inline void // RemoveVolume
 SMDS_MeshInfo::RemoveVolume(const SMDS_MeshElement* el)
 { if ( el->IsPoly() ) --myNbPolyhedrons; else remove( el ); }
 
-inline int  // NbEdges
+inline smIdType  // NbEdges
 SMDS_MeshInfo::NbEdges      (SMDSAbs_ElementOrder order) const
 { return order == ORDER_ANY ? myNbEdges+myNbQuadEdges : order == ORDER_LINEAR ? myNbEdges : myNbQuadEdges; }
 
-inline int  // NbFaces
+inline smIdType  // NbFaces
 SMDS_MeshInfo::NbFaces      (SMDSAbs_ElementOrder order) const
 { return NbTriangles(order)+NbQuadrangles(order)+(order == ORDER_ANY ? myNbPolygons+myNbQuadPolygons : order == ORDER_LINEAR ? myNbPolygons : myNbQuadPolygons ); }
 
-inline int  // NbTriangles
+inline smIdType  // NbTriangles
 SMDS_MeshInfo::NbTriangles  (SMDSAbs_ElementOrder order) const
 { return order == ORDER_ANY ? myNbTriangles+myNbQuadTriangles+myNbBiQuadTriangles : order == ORDER_LINEAR ? myNbTriangles : myNbQuadTriangles+myNbBiQuadTriangles; }
 
-inline int  // NbQuadrangles
+inline smIdType  // NbQuadrangles
 SMDS_MeshInfo::NbQuadrangles(SMDSAbs_ElementOrder order) const
 { return order == ORDER_ANY ? myNbQuadrangles+myNbQuadQuadrangles+myNbBiQuadQuadrangles : order == ORDER_LINEAR ? myNbQuadrangles : myNbQuadQuadrangles+myNbBiQuadQuadrangles; }
 
-inline int  // NbPolygons
+inline smIdType  // NbPolygons
 SMDS_MeshInfo::NbPolygons(SMDSAbs_ElementOrder order) const
 { return order == ORDER_ANY ? myNbPolygons+myNbQuadPolygons : order == ORDER_LINEAR ? myNbPolygons : myNbQuadPolygons; }
 
-inline int  // NbVolumes
+inline smIdType  // NbVolumes
 SMDS_MeshInfo::NbVolumes (SMDSAbs_ElementOrder order) const
 { return NbTetras(order) + NbHexas(order) + NbPyramids(order) + NbPrisms(order) + NbHexPrisms(order) + (order == ORDER_QUADRATIC ? 0 : myNbPolyhedrons); }
 
-inline int  // NbTetras
+inline smIdType  // NbTetras
 SMDS_MeshInfo::NbTetras  (SMDSAbs_ElementOrder order) const
 { return order == ORDER_ANY ? myNbTetras+myNbQuadTetras : order == ORDER_LINEAR ? myNbTetras : myNbQuadTetras; }
 
-inline int  // NbHexas
+inline smIdType  // NbHexas
 SMDS_MeshInfo::NbHexas   (SMDSAbs_ElementOrder order) const
 { return order == ORDER_ANY ? myNbHexas+myNbQuadHexas+myNbTriQuadHexas : order == ORDER_LINEAR ? myNbHexas : myNbQuadHexas+myNbTriQuadHexas; }
 
-inline int  // NbPyramids
+inline smIdType  // NbPyramids
 SMDS_MeshInfo::NbPyramids(SMDSAbs_ElementOrder order) const
 { return order == ORDER_ANY ? myNbPyramids+myNbQuadPyramids : order == ORDER_LINEAR ? myNbPyramids : myNbQuadPyramids; }
 
-inline int  // NbPrisms
+inline smIdType  // NbPrisms
 SMDS_MeshInfo::NbPrisms  (SMDSAbs_ElementOrder order) const
 { return order == ORDER_ANY ? myNbPrisms+myNbQuadPrisms+myNbBiQuadPrisms: order == ORDER_LINEAR ? myNbPrisms : myNbQuadPrisms+myNbBiQuadPrisms; }
 
-inline int  // NbHexPrisms
+inline smIdType  // NbHexPrisms
 SMDS_MeshInfo::NbHexPrisms  (SMDSAbs_ElementOrder order) const
 { return order == ORDER_ANY ? myNbHexPrism : order == ORDER_LINEAR ? myNbHexPrism : 0; }
 
-inline int  // NbElements
+inline smIdType  // NbElements
 SMDS_MeshInfo::NbElements(SMDSAbs_ElementType type) const
 { 
-  int nb = 0;
+  smIdType nb = 0;
   switch (type) {
   case SMDSAbs_All:
     for ( size_t i=1+index( SMDSAbs_Node,1 ); i<myNb.size(); ++i ) if ( myNb[i] ) nb += *myNb[i];
@@ -330,7 +331,7 @@ SMDS_MeshInfo::NbElements(SMDSAbs_ElementType type) const
   return nb;
 }
 
-inline int  // NbEntities
+inline smIdType  // NbEntities
 SMDS_MeshInfo::NbEntities(SMDSAbs_EntityType type) const
 {
   switch (type) {
@@ -366,7 +367,7 @@ SMDS_MeshInfo::NbEntities(SMDSAbs_EntityType type) const
   return 0;
 }
 
-inline int  // NbElementsOfGeom
+inline smIdType  // NbElementsOfGeom
 SMDS_MeshInfo::NbElementsOfGeom(SMDSAbs_GeometryType geom) const
 {
   switch ( geom ) {
@@ -406,7 +407,7 @@ SMDS_MeshInfo::NbElementsOfGeom(SMDSAbs_GeometryType geom) const
 }
 
 inline void // setNb
-SMDS_MeshInfo::setNb(const SMDSAbs_EntityType geomType, const int nb)
+SMDS_MeshInfo::setNb(const SMDSAbs_EntityType geomType, const smIdType nb)
 {
   switch (geomType) {
   case SMDSEntity_Node:             myNbNodes             = nb; break;
index e2182cd735771cfe24e9500f4af676c3ed61439a..087879ab016339aa602cb4d643647b62c9561f81 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -36,6 +36,7 @@
 #include <utilities.h>
 #include <Utils_SALOME_Exception.hxx>
 #include <cassert>
+#include <smIdType.hxx>
 
 #include <boost/make_shared.hpp>
 
@@ -122,8 +123,8 @@ namespace
         {
           for (int i = 0; i < ncells; i++)
           {
-            int  vtkId = cells[i];
-            int smdsId = myMesh->FromVtkToSmds( vtkId );
+            vtkIdType vtkId = cells[i];
+            smIdType smdsId = myMesh->FromVtkToSmds( vtkId );
             const SMDS_MeshElement* elem = myMesh->FindElement( smdsId );
             if ( elem->GetType() == type )
             {
@@ -141,8 +142,8 @@ namespace
 
     const SMDS_MeshElement* next()
     {
-      int vtkId  = myCellList[ myIter++ ];
-      int smdsId = myMesh->FromVtkToSmds( vtkId );
+      vtkIdType vtkId = myCellList[ myIter++ ];
+      smIdType smdsId = myMesh->FromVtkToSmds( vtkId );
       const SMDS_MeshElement* elem = myMesh->FindElement(smdsId);
       if (!elem)
       {
index 60d71f6c133682c27fce3b33fab94a79902ddc03..99549e937ac82351651ac68882625c19e62cba14 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 883a33814c2753355acbbe307b53d9f495c0d331..a681a08722233121231e1ca7d44e285bb24c680a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 6ee130a9b7937094e2afbb59e1371f899c0f0bd0..c29f937193e06116073797c1278ea2af9498f7fc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 67b3c773d2aef75e3505856b576e5f10209012e4..a6a396c779d6073d54cdc658ff260c1765e87629 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -50,7 +50,7 @@ void SMDS_MeshVolume::init( const std::vector<const SMDS_MeshNode*>& nodes,
       ptIds.push_back( nodes[ iN++ ]->GetVtkID() );
   }
 
-  int vtkID = getGrid()->InsertNextLinkedCell(VTK_POLYHEDRON, nbFaces, &ptIds[0]);
+  vtkIdType vtkID = getGrid()->InsertNextLinkedCell(VTK_POLYHEDRON, nbFaces, &ptIds[0]);
   setVtkID( vtkID );
 }
 
@@ -88,7 +88,7 @@ bool SMDS_MeshVolume::ChangeNodes(const std::vector<const SMDS_MeshNode*>& nodes
 
   // stream size and nb faces should not change
 
-  if ((int) quantities.size() != nFaces )
+  if ((vtkIdType) quantities.size() != nFaces )
   {
     return false;
   }
index 02d95aa825cfd2308333d75a5e3283d799fdf456..e4decbe8fcd044d1cf92c92ce71e0ce38041c333 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index f22f1d74f1f4fc83baeaa6e5dc7d54c3901889ba..2dbd9dd58977fd1f090e9f947830ac4ed8cc81c0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 645a037624b3d20901f2206cea09eb4d3d66f8fb..7dbff12111138adf448cbce3465218d5db14e488 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 7e8dd30d58a102284743f5c88c953a6e6c045069..2b33f0b05b0cdaa852b657ac8dad0423ba7a3391 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index c0439d512df03cc88d2b80395bf46925d2a77c1c..02fb6fb7e90bbc5fc80d949d93cfadcc7b07e8c8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 6a2dcf4c97e6c7abd24465ec7a9cf3db49bae128..bc7c7bc09554179716e96e5da4a0b760e5013bbf 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #include "SMDS_SpacePosition.hxx"
 #include "SMDS_VertexPosition.hxx"
 
-SMDS_SpacePosition* SMDS_SpacePosition::_originPosition = new SMDS_SpacePosition();
+SMDS_SpacePosition* SMDS_SpacePosition::__originPosition = nullptr;
 
 SMDS_PositionPtr SMDS_SpacePosition::originSpacePosition()
 {
-  return SMDS_PositionPtr( _originPosition, /*isOwner=*/false );
+  return SMDS_PositionPtr( _originPosition(), /*isOwner=*/false );
 }
 
 SMDS_PositionPtr SMDS_VertexPosition::StaticPosition()
@@ -42,3 +42,9 @@ SMDS_PositionPtr SMDS_VertexPosition::StaticPosition()
   return SMDS_PositionPtr( _vertexPosition, /*isOwner=*/false );
 }
 
+SMDS_SpacePosition *SMDS_SpacePosition::_originPosition()
+{
+  if(!__originPosition)
+    __originPosition = new SMDS_SpacePosition;
+  return __originPosition;
+}
\ No newline at end of file
index c3829010cad216edc6b87c137ea1bdabc9e6d83b..8ee3ba0986a19ee3f37e91eb6d8a07e821a6a997 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -40,7 +40,8 @@ class SMDS_EXPORT SMDS_SpacePosition : public SMDS_Position
   virtual const double* GetParameters() const { return 0; }
 
  private:
-  static SMDS_SpacePosition* _originPosition;
+  static SMDS_SpacePosition *_originPosition();
+  static SMDS_SpacePosition* __originPosition;
 };
 
 #endif
index 9604cbde6a9800d5ac019953a7c377aa6b782483..3251e6336e0f6c5f566ccaf33869b286e0884b4a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 33b244c0a6773776b2f727cc1c92e2146ca78cf4..9f13e57513a2fc361a97bc12cd9be062d2cc32d7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 8da9a287b7bfddfa3f729a115878185815f71c70..03bdce1b412d9490dc9a3e82615684ebed253eb9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2010-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -135,7 +135,7 @@ vtkPoints* SMDS_UnstructuredGrid::GetPoints()
   return this->Points;
 }
 
-int SMDS_UnstructuredGrid::InsertNextLinkedCell(int type, int npts, vtkIdType *pts)
+vtkIdType SMDS_UnstructuredGrid::InsertNextLinkedCell(int type, int npts, vtkIdType *pts)
 {
   if ( !this->Links ) // don't create Links until they are needed
   {
@@ -146,7 +146,7 @@ int SMDS_UnstructuredGrid::InsertNextLinkedCell(int type, int npts, vtkIdType *p
     return vtkUnstructuredGrid::InsertNextLinkedCell(type, npts, pts);
 
   // --- type = VTK_POLYHEDRON
-  int cellid = this->InsertNextCell(type, npts, pts);
+  vtkIdType cellid = this->InsertNextCell(type, npts, pts);
 
   std::set<vtkIdType> setOfNodes;
   setOfNodes.clear();
@@ -175,15 +175,15 @@ void SMDS_UnstructuredGrid::setSMDS_mesh(SMDS_Mesh *mesh)
   _mesh = mesh;
 }
 
-void SMDS_UnstructuredGrid::compactGrid(std::vector<int>& idNodesOldToNew, int newNodeSize,
-                                        std::vector<int>& idCellsNewToOld, int newCellSize)
+void SMDS_UnstructuredGrid::compactGrid(std::vector<smIdType>& idNodesOldToNew, smIdType newNodeSize,
+                                        std::vector<smIdType>& idCellsNewToOld, smIdType newCellSize)
 {
   this->DeleteLinks();
 
   // IDs of VTK nodes always correspond to SMDS IDs but there can be "holes" in SMDS numeration.
   // We compact only if there were holes
 
-  int oldNodeSize = this->GetNumberOfPoints();
+  vtkIdType oldNodeSize = this->GetNumberOfPoints();
   bool updateNodes = ( oldNodeSize > newNodeSize );
   if ( true /*updateNodes*/ )
   {
@@ -191,19 +191,19 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector<int>& idNodesOldToNew, int n
     // Use double type for storing coordinates of nodes instead float.
     vtkPoints *newPoints = vtkPoints::New();
     newPoints->SetDataType( VTK_DOUBLE );
-    newPoints->SetNumberOfPoints( newNodeSize );
+    newPoints->SetNumberOfPoints( FromSmIdType<vtkIdType>(newNodeSize) );
 
-    int i = 0, alreadyCopied = 0;
+    vtkIdType i = 0, alreadyCopied = 0;
     while ( i < oldNodeSize )
     {
       // skip a hole if any
       while ( i < oldNodeSize && idNodesOldToNew[i] < 0 )
         ++i;
-      int startBloc = i;
+      vtkIdType startBloc = i;
       // look for a block end
       while ( i < oldNodeSize && idNodesOldToNew[i] >= 0 )
         ++i;
-      int endBloc = i;
+      vtkIdType endBloc = i;
       copyNodes(newPoints, idNodesOldToNew, alreadyCopied, startBloc, endBloc);
     }
     this->SetPoints(newPoints);
@@ -217,9 +217,9 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector<int>& idNodesOldToNew, int n
 
   // Compact cells if VTK IDs do not correspond to SMDS IDs or nodes compacted
 
-  int  oldCellSize = this->Types->GetNumberOfTuples();
-  bool updateCells = ( updateNodes || newCellSize != oldCellSize );
-  for ( int newID = 0, nbIDs = idCellsNewToOld.size(); newID < nbIDs &&  !updateCells; ++newID )
+  vtkIdType oldCellSize = this->Types->GetNumberOfTuples();
+  bool      updateCells = ( updateNodes || newCellSize != oldCellSize );
+  for ( vtkIdType newID = 0, nbIDs = idCellsNewToOld.size(); newID < nbIDs &&  !updateCells; ++newID )
     updateCells = ( idCellsNewToOld[ newID ] != newID );
 
   if ( false /*!updateCells*/ ) // no holes in elements
@@ -236,18 +236,18 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector<int>& idNodesOldToNew, int n
     return;
   }
 
-  if ((int) idNodesOldToNew.size() < oldNodeSize )
+  if ((vtkIdType) idNodesOldToNew.size() < oldNodeSize )
   {
     idNodesOldToNew.reserve( oldNodeSize );
-    for ( int i = idNodesOldToNew.size(); i < oldNodeSize; ++i )
+    for ( vtkIdType i = idNodesOldToNew.size(); i < oldNodeSize; ++i )
       idNodesOldToNew.push_back( i );
   }
 
   // --- create new compacted Connectivity, Locations and Types
 
-  int newConnectivitySize = this->Connectivity->GetNumberOfConnectivityEntries();
+  vtkIdType newConnectivitySize = this->Connectivity->GetNumberOfConnectivityEntries();
   if ( newCellSize != oldCellSize )
-    for ( int i = 0; i < oldCellSize - 1; ++i )
+    for ( vtkIdType i = 0; i < oldCellSize - 1; ++i )
       if ( this->Types->GetValue( i ) == VTK_EMPTY_CELL )
         newConnectivitySize -= this->Connectivity->GetCellSize( i );
 
@@ -257,11 +257,11 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector<int>& idNodesOldToNew, int n
 
   vtkUnsignedCharArray *newTypes = vtkUnsignedCharArray::New();
   newTypes->Initialize();
-  newTypes->SetNumberOfValues(newCellSize);
+  newTypes->SetNumberOfValues(FromSmIdType<vtkIdType>(newCellSize));
 
   vtkIdTypeArray *newLocations = vtkIdTypeArray::New();
   newLocations->Initialize();
-  newLocations->SetNumberOfValues(newCellSize);
+  newLocations->SetNumberOfValues(FromSmIdType<vtkIdType>(newCellSize));
 
   std::vector< vtkIdType > pointsCell(1024); // --- points id to fill a new cell
 
@@ -273,11 +273,11 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector<int>& idNodesOldToNew, int n
   {
     vtkDoubleArray* newDiameters = vtkDoubleArray::New();
     newDiameters->SetNumberOfComponents(1);
-    for ( int newCellID = 0; newCellID < newCellSize; newCellID++ )
+    for ( vtkIdType newCellID = 0; newCellID < newCellSize; newCellID++ )
     {
       if ( newTypes->GetValue( newCellID ) == VTK_POLY_VERTEX )
       {
-        int oldCellID = idCellsNewToOld[ newCellID ];
+        vtkIdType oldCellID = idCellsNewToOld[ newCellID ];
         newDiameters->InsertValue( newCellID, diameters->GetValue( oldCellID ));
       }
       vtkDataSet::CellData->SetScalars( newDiameters );
@@ -292,22 +292,22 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector<int>& idNodesOldToNew, int n
     vtkIdTypeArray *newFaces = vtkIdTypeArray::New();
     newFaces->Initialize();
     newFaces->Allocate(this->Faces->GetSize());
-    for ( int newCellID = 0; newCellID < newCellSize; newCellID++ )
+    for ( vtkIdType newCellID = 0; newCellID < newCellSize; newCellID++ )
     {
       if ( newTypes->GetValue( newCellID ) == VTK_POLYHEDRON )
       {
-        int oldCellId = idCellsNewToOld[ newCellID ];
+        smIdType oldCellId = idCellsNewToOld[ newCellID ];
         newFaceLocations->InsertNextValue( newFaces->GetMaxId()+1 );
-        int oldFaceLoc = this->FaceLocations->GetValue( oldCellId );
-        int nCellFaces = this->Faces->GetValue( oldFaceLoc++ );
-        newFaces->InsertNextValue( nCellFaces );
+        smIdType oldFaceLoc = this->FaceLocations->GetValue( FromSmIdType<vtkIdType>(oldCellId) );
+        smIdType nCellFaces = this->Faces->GetValue( FromSmIdType<vtkIdType>(oldFaceLoc++) );
+        newFaces->InsertNextValue( FromSmIdType<vtkIdType>(nCellFaces) );
         for ( int n = 0; n < nCellFaces; n++ )
         {
-          int nptsInFace = this->Faces->GetValue( oldFaceLoc++ );
+          int nptsInFace = this->Faces->GetValue( FromSmIdType<vtkIdType>(oldFaceLoc++) );
           newFaces->InsertNextValue( nptsInFace );
           for ( int k = 0; k < nptsInFace; k++ )
           {
-            int oldpt = this->Faces->GetValue( oldFaceLoc++ );
+            vtkIdType oldpt = this->Faces->GetValue( FromSmIdType<vtkIdType>(oldFaceLoc++) );
             newFaces->InsertNextValue( idNodesOldToNew[ oldpt ]);
           }
         }
@@ -335,15 +335,15 @@ void SMDS_UnstructuredGrid::compactGrid(std::vector<int>& idNodesOldToNew, int n
   newConnectivity->Delete();
 }
 
-void SMDS_UnstructuredGrid::copyNodes(vtkPoints *       newPoints,
-                                      std::vector<int>& /*idNodesOldToNew*/,
-                                      int&              alreadyCopied,
-                                      int               start,
-                                      int               end)
+void SMDS_UnstructuredGrid::copyNodes(vtkPoints *             newPoints,
+                                      std::vector<smIdType>& /*idNodesOldToNew*/,
+                                      vtkIdType&              alreadyCopied,
+                                      vtkIdType               start,
+                                      vtkIdType               end)
 {
   void *target = newPoints->GetVoidPointer(3 * alreadyCopied);
   void *source = this->Points->GetVoidPointer(3 * start);
-  int nbPoints = end - start;
+  vtkIdType nbPoints = end - start;
   if (nbPoints > 0)
   {
     memcpy(target, source, 3 * sizeof(double) * nbPoints);
@@ -352,15 +352,15 @@ void SMDS_UnstructuredGrid::copyNodes(vtkPoints *       newPoints,
 }
 
 void SMDS_UnstructuredGrid::copyBloc(vtkUnsignedCharArray *  newTypes,
-                                     const std::vector<int>& idCellsNewToOld,
-                                     const std::vector<int>& idNodesOldToNew,
+                                     const std::vector<smIdType>& idCellsNewToOld,
+                                     const std::vector<smIdType>& idNodesOldToNew,
                                      vtkCellArray*           newConnectivity,
                                      vtkIdTypeArray*         newLocations,
                                      std::vector<vtkIdType>& pointsCell)
 {
   for ( size_t iNew = 0; iNew < idCellsNewToOld.size(); iNew++ )
   {
-    int iOld = idCellsNewToOld[ iNew ];
+    vtkIdType iOld = idCellsNewToOld[ iNew ];
     newTypes->SetValue( iNew, this->Types->GetValue( iOld ));
 
     vtkIdType oldLoc = ((vtkIdTypeArray *)(this->Connectivity->GetOffsetsArray()))->GetValue( iOld );
@@ -371,25 +371,25 @@ void SMDS_UnstructuredGrid::copyBloc(vtkUnsignedCharArray *  newTypes,
       pointsCell.resize( nbpts );
     for ( int l = 0; l < nbpts; l++ )
     {
-      int oldval = oldPtsCell[l];
+      vtkIdType oldval = oldPtsCell[l];
       pointsCell[l] = idNodesOldToNew[oldval];
     }
-    /*int newcnt = */newConnectivity->InsertNextCell( nbpts, pointsCell.data() );
-    int newLoc = newConnectivity->GetInsertLocation( nbpts );
+    /*vtkIdType newcnt = */newConnectivity->InsertNextCell( nbpts, pointsCell.data() );
+    vtkIdType newLoc = newConnectivity->GetInsertLocation( nbpts );
     newLocations->SetValue( iNew, newLoc );
   }
 }
 
-int SMDS_UnstructuredGrid::CellIdToDownId(int vtkCellId)
+int SMDS_UnstructuredGrid::CellIdToDownId(vtkIdType vtkCellId)
 {
-  if ((vtkCellId < 0) || (vtkCellId >= (int)_cellIdToDownId.size()))
+  if ((vtkCellId < 0) || (vtkCellId >= (vtkIdType)_cellIdToDownId.size()))
   {
     return -1;
   }
   return _cellIdToDownId[vtkCellId];
 }
 
-void SMDS_UnstructuredGrid::setCellIdToDownId(int vtkCellId, int downId)
+void SMDS_UnstructuredGrid::setCellIdToDownId(vtkIdType vtkCellId, int downId)
 {
   // ASSERT((vtkCellId >= 0) && (vtkCellId < _cellIdToDownId.size()));
   _cellIdToDownId[vtkCellId] = downId;
@@ -446,15 +446,15 @@ void SMDS_UnstructuredGrid::BuildDownwardConnectivity(bool /*withEdges*/)
 
   const SMDS_MeshInfo &meshInfo = _mesh->GetMeshInfo();
 
-  int nbLinTetra  = meshInfo.NbTetras  (ORDER_LINEAR);
-  int nbQuadTetra = meshInfo.NbTetras  (ORDER_QUADRATIC);
-  int nbLinPyra   = meshInfo.NbPyramids(ORDER_LINEAR);
-  int nbQuadPyra  = meshInfo.NbPyramids(ORDER_QUADRATIC);
-  int nbLinPrism  = meshInfo.NbPrisms  (ORDER_LINEAR);
-  int nbQuadPrism = meshInfo.NbPrisms  (ORDER_QUADRATIC);
-  int nbLinHexa   = meshInfo.NbHexas   (ORDER_LINEAR);
-  int nbQuadHexa  = meshInfo.NbHexas   (ORDER_QUADRATIC);
-  int nbHexPrism  = meshInfo.NbHexPrisms();
+  int nbLinTetra  = FromSmIdType<int>(meshInfo.NbTetras  (ORDER_LINEAR));
+  int nbQuadTetra = FromSmIdType<int>(meshInfo.NbTetras  (ORDER_QUADRATIC));
+  int nbLinPyra   = FromSmIdType<int>(meshInfo.NbPyramids(ORDER_LINEAR));
+  int nbQuadPyra  = FromSmIdType<int>(meshInfo.NbPyramids(ORDER_QUADRATIC));
+  int nbLinPrism  = FromSmIdType<int>(meshInfo.NbPrisms  (ORDER_LINEAR));
+  int nbQuadPrism = FromSmIdType<int>(meshInfo.NbPrisms  (ORDER_QUADRATIC));
+  int nbLinHexa   = FromSmIdType<int>(meshInfo.NbHexas   (ORDER_LINEAR));
+  int nbQuadHexa  = FromSmIdType<int>(meshInfo.NbHexas   (ORDER_QUADRATIC));
+  int nbHexPrism  = FromSmIdType<int>(meshInfo.NbHexPrisms());
 
   int nbLineGuess     = int((4.0 / 3.0) * nbLinTetra + 2 * nbLinPrism + 2.5 * nbLinPyra + 3 * nbLinHexa);
   int nbQuadEdgeGuess = int((4.0 / 3.0) * nbQuadTetra + 2 * nbQuadPrism + 2.5 * nbQuadPyra + 3 * nbQuadHexa);
@@ -1004,14 +1004,14 @@ void SMDS_UnstructuredGrid::ModifyCellNodes(int vtkVolId, std::map<int, int> loc
  */
 int SMDS_UnstructuredGrid::getOrderedNodesOfFace(int vtkVolId, int& dim, std::vector<vtkIdType>& orderedNodes)
 {
-  int vtkType = this->GetCellType(vtkVolId);
-  dim = SMDS_Downward::getCellDimension(vtkType);
+  int vtkType = this->GetCellType( vtkVolId );
+  dim = SMDS_Downward::getCellDimension( vtkType );
   if (dim == 3)
-    {
-      SMDS_Down3D *downvol = static_cast<SMDS_Down3D*> (_downArray[vtkType]);
-      int downVolId = this->_cellIdToDownId[vtkVolId];
-      downvol->getOrderedNodesOfFace(downVolId, orderedNodes);
-    }
+  {
+    SMDS_Down3D *downvol = static_cast<SMDS_Down3D*> (_downArray[vtkType]);
+    int        downVolId = this->_cellIdToDownId[ vtkVolId ];
+    downvol->getOrderedNodesOfFace(downVolId, orderedNodes);
+  }
   // else nothing to do;
   return orderedNodes.size();
 }
@@ -1090,74 +1090,88 @@ SMDS_UnstructuredGrid::extrudeVolumeFromFace(int vtkVolId,
     break;
   default:
     isQuadratic = false;
-      break;
+    break;
   }
 
   if (isQuadratic)
+  {
+    long dom1 = domain1;
+    long dom2 = domain2;
+    long dom1_2; // for nodeQuadDomains
+    if (domain1 < domain2)
+      dom1_2 = dom1 + INT_MAX * dom2;
+    else
+      dom1_2 = dom2 + INT_MAX * dom1;
+    //cerr << "dom1=" << dom1 << " dom2=" << dom2 << " dom1_2=" << dom1_2 << endl;
+    int ima = orderedOriginals.size();
+    int mid = orderedOriginals.size() / 2;
+    //cerr << "ima=" << ima << " mid=" << mid << endl;
+    for (int i = 0; i < mid; i++)
+      orderedNodes.push_back(nodeDomains[orderedOriginals[i]][domain1]);
+    for (int i = 0; i < mid; i++)
+      orderedNodes.push_back(nodeDomains[orderedOriginals[i]][domain2]);
+    for (int i = mid; i < ima; i++)
+      orderedNodes.push_back(nodeDomains[orderedOriginals[i]][domain1]);
+    for (int i = mid; i < ima; i++)
+      orderedNodes.push_back(nodeDomains[orderedOriginals[i]][domain2]);
+    for (int i = 0; i < mid; i++)
     {
-      long dom1 = domain1;
-      long dom2 = domain2;
-      long dom1_2; // for nodeQuadDomains
-      if (domain1 < domain2)
-        dom1_2 = dom1 + INT_MAX * dom2;
+      int oldId = orderedOriginals[i];
+      int newId;
+      if (nodeQuadDomains.count(oldId) && nodeQuadDomains[oldId].count(dom1_2))
+        newId = nodeQuadDomains[oldId][dom1_2];
       else
-        dom1_2 = dom2 + INT_MAX * dom1;
-      //cerr << "dom1=" << dom1 << " dom2=" << dom2 << " dom1_2=" << dom1_2 << endl;
-      int ima = orderedOriginals.size();
-      int mid = orderedOriginals.size() / 2;
-      //cerr << "ima=" << ima << " mid=" << mid << endl;
-      for (int i = 0; i < mid; i++)
-        orderedNodes.push_back(nodeDomains[orderedOriginals[i]][domain1]);
-      for (int i = 0; i < mid; i++)
-        orderedNodes.push_back(nodeDomains[orderedOriginals[i]][domain2]);
-      for (int i = mid; i < ima; i++)
-        orderedNodes.push_back(nodeDomains[orderedOriginals[i]][domain1]);
-      for (int i = mid; i < ima; i++)
-        orderedNodes.push_back(nodeDomains[orderedOriginals[i]][domain2]);
-      for (int i = 0; i < mid; i++)
+      {
+        double *coords = this->GetPoint(oldId);
+        SMDS_MeshNode *newNode = _mesh->AddNode(coords[0], coords[1], coords[2]);
+        newId = newNode->GetVtkID();
+        if (! nodeQuadDomains.count(oldId))
         {
-          int oldId = orderedOriginals[i];
-          int newId;
-          if (nodeQuadDomains.count(oldId) && nodeQuadDomains[oldId].count(dom1_2))
-            newId = nodeQuadDomains[oldId][dom1_2];
-          else
-            {
-              double *coords = this->GetPoint(oldId);
-              SMDS_MeshNode *newNode = _mesh->AddNode(coords[0], coords[1], coords[2]);
-              newId = newNode->GetVtkID();
-              if (! nodeQuadDomains.count(oldId))
-                {
-                  std::map<long, int> emptyMap;
-                  nodeQuadDomains[oldId] = emptyMap;
-                }
-              nodeQuadDomains[oldId][dom1_2] = newId;
-            }
-          orderedNodes.push_back(newId);
+          std::map<long, int> emptyMap;
+          nodeQuadDomains[oldId] = emptyMap;
         }
+        nodeQuadDomains[oldId][dom1_2] = newId;
+      }
+      orderedNodes.push_back(newId);
     }
+  }
   else
-    {
+  {
+    for (int i = 0; i < nbNodes; i++)
+      orderedNodes.push_back(nodeDomains[orderedOriginals[i]][domain1]);
+    if (dim == 3)
       for (int i = 0; i < nbNodes; i++)
-        orderedNodes.push_back(nodeDomains[orderedOriginals[i]][domain1]);
-      if (dim == 3)
-        for (int i = 0; i < nbNodes; i++)
-          orderedNodes.push_back(nodeDomains[orderedOriginals[i]][domain2]);
-      else
-        for (int i = nbNodes-1; i >= 0; i--)
-          orderedNodes.push_back(nodeDomains[orderedOriginals[i]][domain2]);
+        orderedNodes.push_back(nodeDomains[orderedOriginals[i]][domain2]);
+    else
+      for (int i = nbNodes-1; i >= 0; i--)
+        orderedNodes.push_back(nodeDomains[orderedOriginals[i]][domain2]);
 
-    }
+  }
 
   if (dim == 3)
-    {
-      SMDS_MeshVolume *vol = _mesh->AddVolumeFromVtkIds(orderedNodes);
-      return vol;
-    }
+  {
+    SMDS_MeshVolume *vol = _mesh->AddVolumeFromVtkIds(orderedNodes);
+    return vol;
+  }
   else if (dim == 2)
+  {
+    // bos #24368
+    // orient face by the original one, as getOrderedNodesOfFace() not implemented for faces
+    const SMDS_MeshElement* origFace = _mesh->FindElementVtk( vtkVolId );
+    int   i0 = origFace->GetNodeIndex( _mesh->FindNodeVtk( orderedNodes[0] ));
+    int   i1 = origFace->GetNodeIndex( _mesh->FindNodeVtk( orderedNodes[1] ));
+    int diff = i0 - i1;
+    // order of nodes must be reverse in face and origFace
+    bool oriOk = ( diff == 1 ) || ( diff == -3 );
+    if ( !oriOk )
     {
-      SMDS_MeshFace *face = _mesh->AddFaceFromVtkIds(orderedNodes);
-      return face;
+      SMDSAbs_EntityType type = isQuadratic ? SMDSEntity_Quad_Quadrangle : SMDSEntity_Quadrangle;
+      const std::vector<int>& interlace = SMDS_MeshCell::reverseSmdsOrder( type );
+      SMDS_MeshCell::applyInterlace( interlace, orderedNodes );
     }
+    SMDS_MeshFace *face = _mesh->AddFaceFromVtkIds(orderedNodes);
+    return face;
+  }
 
   // TODO update sub-shape list of elements and nodes
   return 0;
index e7ed86930eff89f429f374491584b97be0921e43..ebe224a2d3ee050864c36309c478e4971d4c851e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2010-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -28,6 +28,7 @@
 
 #include <vtkUnstructuredGrid.h>
 #include <vtkCellLinks.h>
+#include <smIdType.hxx>
 
 #include <vector>
 #include <set>
@@ -73,17 +74,17 @@ class SMDS_EXPORT SMDS_UnstructuredGrid: public vtkUnstructuredGrid
 {
 public:
   void setSMDS_mesh(SMDS_Mesh *mesh);
-  void compactGrid(std::vector<int>& idNodesOldToNew,
-                   int               newNodeSize,
-                   std::vector<int>& idCellsOldToNew,
-                   int               newCellSize);
+  void compactGrid(std::vector<smIdType>& idNodesOldToNew,
+                   smIdType               newNodeSize,
+                   std::vector<smIdType>& idCellsOldToNew,
+                   smIdType               newCellSize);
   virtual vtkMTimeType GetMTime();
   virtual vtkPoints *GetPoints();
 
-  int InsertNextLinkedCell(int type, int npts, vtkIdType *pts);
+  vtkIdType InsertNextLinkedCell(int type, int npts, vtkIdType *pts);
 
-  int CellIdToDownId(int vtkCellId);
-  void setCellIdToDownId(int vtkCellId, int downId);
+  int CellIdToDownId(vtkIdType vtkCellId);
+  void setCellIdToDownId(vtkIdType vtkCellId, int downId);
   void CleanDownwardConnectivity();
   void BuildDownwardConnectivity(bool withEdges);
   int GetNeighbors(int* neighborsVtkIds, int* downIds, unsigned char* downTypes, int vtkId, bool getSkin=false);
@@ -115,10 +116,10 @@ public:
 protected:
   SMDS_UnstructuredGrid();
   ~SMDS_UnstructuredGrid();
-  void copyNodes(vtkPoints *newPoints, std::vector<int>& idNodesOldToNew, int& alreadyCopied, int start, int end);
+  void copyNodes(vtkPoints *newPoints, std::vector<smIdType>& idNodesOldToNew, vtkIdType& alreadyCopied, vtkIdType start, vtkIdType end);
   void copyBloc(vtkUnsignedCharArray *newTypes,
-                const std::vector<int>& idCellsOldToNew,
-                const std::vector<int>& idNodesOldToNew,
+                const std::vector<smIdType>& idCellsOldToNew,
+                const std::vector<smIdType>& idNodesOldToNew,
                 vtkCellArray* newConnectivity,
                 vtkIdTypeArray* newLocations,
                 std::vector<vtkIdType>& pointsCell);
index 1ae2e0835f67b664f5717d1f5becfddc5472166c..5f2e5fc0d5b3aa190498a5228f683e442313a471 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 7186a5f411d2185d8c0f8a7274aae4db1dd6714e..acc4fc00b74f049b4a876ea8479bb909abff4c7d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 6afa34bebf88d8a25e13f6028314747a386cf21e..36a515c5d215b1552675233e3c461b52ddeebc52 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 57f4bda6ebbb1d64faf5b844cf8141f1d0141ea9..4475f7a829ecdb484e7f2685aacd85c9ee5d7c34 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -42,6 +42,7 @@
 #include <cstring>
 #include <numeric>
 #include <algorithm>
+#include <array>
 
 namespace
 {
@@ -80,9 +81,17 @@ static int Tetra_RE [4][4] = { // REVERSED -> FORWARD (EXTERNAL)
   { 0, 3, 2, 0 }};
 static int Tetra_nbN [] = { 3, 3, 3, 3 };
 
-//
-//     PYRAMID
-//
+/*        
+//    N1 +---------+ N2
+//       | \     / | 
+//       |  \   /  |
+//       |   \ /   |
+//       |   /+\   |     PYRAMID
+//       |  / N4\  |
+//       | /     \ |
+//       |/       \|
+//    N0 +---------+ N3
+*/
 static int Pyramid_F [5][5] = { // FORWARD == EXTERNAL
   { 0, 1, 2, 3, 0 },            // All faces have external normals
   { 0, 4, 1, 0, 4 },
@@ -363,13 +372,18 @@ struct XYZ {
   inline XYZ operator-( const XYZ& other );
   inline XYZ operator+( const XYZ& other );
   inline XYZ Crossed( const XYZ& other );
+  inline XYZ operator-();
   inline double Dot( const XYZ& other );
   inline double Magnitude();
   inline double SquareMagnitude();
+  inline XYZ Normalize();
 };
 inline XYZ XYZ::operator-( const XYZ& Right ) {
   return XYZ(x - Right.x, y - Right.y, z - Right.z);
 }
+inline XYZ XYZ::operator-() {
+  return XYZ(-x,-y,-z);
+}
 inline XYZ XYZ::operator+( const XYZ& Right ) {
   return XYZ(x + Right.x, y + Right.y, z + Right.z);
 }
@@ -387,6 +401,13 @@ inline double XYZ::Magnitude() {
 inline double XYZ::SquareMagnitude() {
   return (x * x + y * y + z * z);
 }
+inline XYZ XYZ::Normalize() {
+  double magnitude = Magnitude();
+  if ( magnitude != 0.0 )
+    return XYZ(x /= magnitude,y /= magnitude,z /= magnitude );   
+  else
+    return XYZ(x,y,z);
+}
 
   //================================================================================
   /*!
@@ -694,7 +715,6 @@ static double getTetraVolume(const SMDS_MeshNode* n1,
 //function : GetSize
 //purpose  : Return element volume
 //=======================================================================
-
 double SMDS_VolumeTool::GetSize() const
 {
   double V = 0.;
@@ -710,7 +730,7 @@ double SMDS_VolumeTool::GetSize() const
 
     // split a polyhedron into tetrahedrons
 
-    bool oriOk = true;
+    bool oriOk = AllFacesSameOriented();
     SMDS_VolumeTool* me = const_cast< SMDS_VolumeTool* > ( this );
     for ( int f = 0; f < NbFaces(); ++f )
     {
@@ -723,7 +743,6 @@ double SMDS_VolumeTool::GetSize() const
         p1 = p2;
       }
       V += p1.Dot( area );
-      oriOk = oriOk && IsFaceExternal( f );
     }
     V /= 6;
     if ( !oriOk && V > 0 )
@@ -847,6 +866,334 @@ double SMDS_VolumeTool::GetSize() const
   return V;
 }
 
+
+//=======================================================================
+//function : getTetraScaledJacobian
+//purpose  : Given the smesh nodes in the canonical order of the tetrahedron, return the scaled jacobian
+//=======================================================================
+static double getTetraScaledJacobian(const SMDS_MeshNode* n0,
+                                     const SMDS_MeshNode* n1,
+                                     const SMDS_MeshNode* n2,
+                                     const SMDS_MeshNode* n3)
+{
+  const double sqrt = std::sqrt(2.0);
+  // Get the coordinates
+  XYZ p0( n0 );
+  XYZ p1( n1 );
+  XYZ p2( n2 );
+  XYZ p3( n3 );
+  // Define the edges connecting the nodes
+  XYZ L0 = p1-p0;
+  XYZ L1 = p2-p1;
+  XYZ L2 = p2-p0; // invert the definition of doc to get the proper orientation of the crossed product
+  XYZ L3 = p3-p0;
+  XYZ L4 = p3-p1;
+  XYZ L5 = p3-p2;
+  double Jacobian = L2.Crossed( L0 ).Dot( L3 );
+  double norm0 = L0.Magnitude();
+  double norm1 = L1.Magnitude();
+  double norm2 = L2.Magnitude();
+  double norm3 = L3.Magnitude();
+  double norm4 = L4.Magnitude();
+  double norm5 = L5.Magnitude();
+
+  std::array<double, 5> norms{};
+  norms[0] = Jacobian;
+  norms[1] = norm3*norm4*norm5;
+  norms[2] = norm1*norm2*norm5;
+  norms[3] = norm0*norm1*norm4;
+  norms[4] = norm0*norm2*norm3;  
+
+  auto findMaxNorm = std::max_element(norms.begin(), norms.end());
+  double maxNorm = *findMaxNorm;
+
+  if ( std::fabs( maxNorm ) < std::numeric_limits<double>::min() )
+    maxNorm = std::numeric_limits<double>::max();
+
+  return Jacobian * sqrt / maxNorm;
+}
+
+//=======================================================================
+//function : getPyramidScaledJacobian
+//purpose  : Given the pyramid, compute the scaled jacobian of the four tetrahedrons and return the minimun value.
+//=======================================================================
+static double getPyramidScaledJacobian(const SMDS_MeshNode* n0,
+                                        const SMDS_MeshNode* n1,
+                                        const SMDS_MeshNode* n2,
+                                        const SMDS_MeshNode* n3,
+                                        const SMDS_MeshNode* n4)
+{ 
+  const double sqrt = std::sqrt(2.0);
+  std::array<double, 4> tetScaledJacobian{};
+  tetScaledJacobian[0] = getTetraScaledJacobian(n0, n1, n3, n4);
+  tetScaledJacobian[1] = getTetraScaledJacobian(n1, n2, n0, n4);
+  tetScaledJacobian[2] = getTetraScaledJacobian(n2, n3, n1, n4);
+  tetScaledJacobian[3] = getTetraScaledJacobian(n3, n0, n2, n4);  
+
+  auto minEntry = std::min_element(tetScaledJacobian.begin(), tetScaledJacobian.end());
+
+  double scaledJacobian = (*minEntry) * 2.0/sqrt;
+  return scaledJacobian < 1.0 ? scaledJacobian : 1.0 - (scaledJacobian - 1.0);
+}
+
+
+
+//=======================================================================
+//function : getHexaScaledJacobian
+//purpose  : Evaluate the scaled jacobian on the eight vertices of the hexahedron and return the minimal registered value
+//remark   : Follow the reference numeration described at the top of the class.
+//=======================================================================
+static double getHexaScaledJacobian(const SMDS_MeshNode* n0,
+                                    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)
+{ 
+  // Scaled jacobian is an scalar quantity measuring the deviation of the geometry from the perfect geometry
+  // Get the coordinates
+  XYZ p0( n0 );
+  XYZ p1( n1 );
+  XYZ p2( n2 );
+  XYZ p3( n3 );
+  XYZ p4( n4 );
+  XYZ p5( n5 );
+  XYZ p6( n6 );
+  XYZ p7( n7 );
+
+  // Define the edges connecting the nodes  
+  XYZ L0  = (p1-p0).Normalize();
+  XYZ L1  = (p2-p1).Normalize();
+  XYZ L2  = (p3-p2).Normalize();
+  XYZ L3  = (p3-p0).Normalize();
+  XYZ L4  = (p4-p0).Normalize();
+  XYZ L5  = (p5-p1).Normalize();
+  XYZ L6  = (p6-p2).Normalize();
+  XYZ L7  = (p7-p3).Normalize();
+  XYZ L8  = (p5-p4).Normalize();
+  XYZ L9  = (p6-p5).Normalize();
+  XYZ L10 = (p7-p6).Normalize();
+  XYZ L11 = (p7-p4).Normalize();
+  XYZ X0  = (p1-p0+p2-p3+p6-p7+p5-p4).Normalize();
+  XYZ X1  = (p3-p0+p2-p1+p7-p4+p6-p5).Normalize();
+  XYZ X2  = (p4-p0+p7-p3+p5-p1+p6-p2).Normalize();
+  
+  std::array<double, 9> scaledJacobian{};
+  //Scaled jacobian of nodes following their numeration
+  scaledJacobian[0] =  L4.Crossed( L3).Dot( L0 );   // For L0
+  scaledJacobian[1] =  L5.Crossed(-L0).Dot( L1 );   // For L1
+  scaledJacobian[2] =  L6.Crossed(-L1).Dot( L2 );   // For L2
+  scaledJacobian[3] =  L7.Crossed(-L2).Dot(-L3 );   // For L3
+  scaledJacobian[4] = -L4.Crossed( L8).Dot( L11 );  // For L11  
+  scaledJacobian[5] = -L5.Crossed( L9).Dot(-L8 );   // For L8
+  scaledJacobian[6] = -L6.Crossed(L10).Dot(-L9 );   // For L9
+  scaledJacobian[7] = -L7.Crossed(-L11).Dot(-L10 ); // For L10
+  scaledJacobian[8] =  X2.Crossed( X1).Dot( X0 );   // For principal axes
+
+  auto minScaledJacobian = std::min_element(scaledJacobian.begin(), scaledJacobian.end());
+  return *minScaledJacobian;
+}
+
+
+//=======================================================================
+//function : getTetraNormalizedJacobian
+//purpose  : Return the jacobian of the tetrahedron based on normalized vectors
+//=======================================================================
+static double getTetraNormalizedJacobian(const SMDS_MeshNode* n0,
+                                          const SMDS_MeshNode* n1,
+                                          const SMDS_MeshNode* n2,
+                                          const SMDS_MeshNode* n3)
+{
+  const double sqrt = std::sqrt(2.0);
+  // Get the coordinates
+  XYZ p0( n0 );
+  XYZ p1( n1 );
+  XYZ p2( n2 );
+  XYZ p3( n3 );
+  // Define the normalized edges connecting the nodes
+  XYZ L0 = (p1-p0).Normalize();
+  XYZ L2 = (p2-p0).Normalize(); // invert the definition of doc to get the proper orientation of the crossed product
+  XYZ L3 = (p3-p0).Normalize();
+  return L2.Crossed( L0 ).Dot( L3 );
+}
+
+//=======================================================================
+//function : getPentaScaledJacobian
+//purpose  : Evaluate the scaled jacobian on the pentahedron based on decomposed tetrahedrons
+//=======================================================================
+/*   
+//            + N1
+//           /|\
+//          / | \
+//         /  |  \
+//        /   |   \
+//    N0 +---------+ N2
+//       |    |    |               NUMERATION RERENCE FOLLOWING POSSITIVE RIGHT HAND RULE
+//       |    + N4 |               
+//       |   / \   |               PENTAHEDRON
+//       |  /   \  |
+//       | /     \ |
+//       |/       \|
+//    N3 +---------+ N5
+//
+//          N1
+//          +
+//          |\
+//         /| \
+//        / |  \
+//    N0 +--|---+ N2               TETRAHEDRON ASSOCIATED TO N0
+//       \  |   /                  Numeration passed to getTetraScaledJacobian 
+//        \ |  /                   N0=N0; N1=N2; N2=N3; N3=N1
+//         \| /                     
+//          |/
+//          +
+//          N3
+//
+//           N1
+//           +
+//          /|\
+//         / | \
+//        /  |  \
+//    N2 +---|---+ N5             TETRAHEDRON ASSOCIATED TO N2
+//       \   |  /                 Numeration passed to getTetraScaledJacobian 
+//        \  | /                  N0=N2; N1=N5; N2=N0; N3=N1
+//         \ |/
+//          \|
+//           +
+//           N0
+//
+//           N4
+//           +
+//          /|\
+//         / | \
+//        /  |  \
+//    N3 +---|---+ N0             TETRAHEDRON ASSOCIATED TO N3
+//       \   |   /                Numeration passed to getTetraScaledJacobian 
+//        \  |  /                 N0=N3; N1=N0; N2=N5; N3=N4
+//         \ | /
+//          \|/
+//           +
+//           N5
+//
+//           N3
+//           +
+//          /|\
+//         / | \
+//        /  |  \
+//    N1 +---|---+ N2             TETRAHEDRON ASSOCIATED TO N1
+//       \   |   /                Numeration passed to getTetraScaledJacobian 
+//        \  |  /                 N0=N1; N1=N2; N2=N0; N3=N3
+//         \ | /
+//          \|/
+//           +
+//           N0
+//
+//          ...
+*/
+static double getPentaScaledJacobian(const SMDS_MeshNode* n0,
+                                     const SMDS_MeshNode* n1,
+                                     const SMDS_MeshNode* n2,
+                                     const SMDS_MeshNode* n3,
+                                     const SMDS_MeshNode* n4,
+                                     const SMDS_MeshNode* n5)
+{ 
+  std::array<double, 6> scaledJacobianOfReferenceTetra{};
+  scaledJacobianOfReferenceTetra[0] = getTetraNormalizedJacobian(n0, n2, n3, n1);  // For n0
+  scaledJacobianOfReferenceTetra[1] = getTetraNormalizedJacobian(n2, n5, n0, n1);  // For n2
+  scaledJacobianOfReferenceTetra[2] = getTetraNormalizedJacobian(n3, n0, n5, n4);  // For n3
+  scaledJacobianOfReferenceTetra[3] = getTetraNormalizedJacobian(n5, n3, n2, n4);  // For n5
+  scaledJacobianOfReferenceTetra[4] = getTetraNormalizedJacobian(n1, n2, n0, n3);  // For n1  
+  scaledJacobianOfReferenceTetra[5] = getTetraNormalizedJacobian(n4, n3, n5, n2);  // For n4
+  
+  auto minScaledJacobian = std::min_element(scaledJacobianOfReferenceTetra.begin(), scaledJacobianOfReferenceTetra.end());
+  double minScalJac = (*minScaledJacobian)* 2.0 / std::sqrt(3.0);
+
+  if (minScalJac > 0)
+    return std::min(minScalJac, std::numeric_limits<double>::max());
+
+  return std::max(minScalJac, -std::numeric_limits<double>::max());
+}
+
+//=======================================================================
+//function : getHexaPrismScaledJacobian
+//purpose  : Evaluate the scaled jacobian on the hexaprism by decomposing the goemetry into three 1hexa + 2 pentahedrons
+//=======================================================================
+static double getHexaPrismScaledJacobian(const SMDS_MeshNode* n0,
+                                          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* n9,
+                                          const SMDS_MeshNode* n10, 
+                                          const SMDS_MeshNode* n11)
+{ 
+  // The Pentahedron from the left
+  // n0=n0; n1=n1; n2=n2; n3=n6; n4=n7, n5=n8; 
+  double scaledJacobianPentleft = getPentaScaledJacobian( n0, n1, n2, n6, n7, n8 );
+  // The core Hexahedron
+  // n0=n0; n1=n2, n2=n3; n3=n5; n4=n6; n5=n8; n6=n9; n7=n11
+  double scaledJacobianHexa     = getHexaScaledJacobian( n0, n2, n3, n5, n6, n8, n9, n11 );
+  // The Pentahedron from the right
+  // n0=n5; n1=n4; n2=n3; n3=n11; n4=n10; n5=n9
+  double scaledJacobianPentright = getPentaScaledJacobian( n5, n4, n3, n11, n10, n9 );
+
+  return std::min( scaledJacobianHexa, std::min( scaledJacobianPentleft, scaledJacobianPentright ) );
+  
+}
+
+//=======================================================================
+//function : GetScaledJacobian
+//purpose  : Return element Scaled Jacobian using the generic definition given 
+//            in https://gitlab.kitware.com/third-party/verdict/-/blob/master/SAND2007-2853p.pdf
+//=======================================================================
+
+double SMDS_VolumeTool::GetScaledJacobian() const
+{
+  
+  // For Tetra, call directly the getTetraScaledJacobian 
+  double scaledJacobian = 0.;
+
+  VolumeType type = GetVolumeType();    
+  switch (type)
+  {
+  case TETRA:
+  case QUAD_TETRA:
+    scaledJacobian = getTetraScaledJacobian( myVolumeNodes[0], myVolumeNodes[1], myVolumeNodes[2], myVolumeNodes[3] );
+    break;    
+  case HEXA:
+  case QUAD_HEXA: 
+    scaledJacobian = getHexaScaledJacobian( myVolumeNodes[0], myVolumeNodes[1], myVolumeNodes[2], myVolumeNodes[3],
+                                            myVolumeNodes[4], myVolumeNodes[5], myVolumeNodes[6], myVolumeNodes[7] );
+    break;
+  case PYRAM:
+  case QUAD_PYRAM:  
+    scaledJacobian = getPyramidScaledJacobian( myVolumeNodes[0], myVolumeNodes[1], myVolumeNodes[2], myVolumeNodes[3], myVolumeNodes[4] );
+    break;
+  case PENTA:
+  case QUAD_PENTA:
+    scaledJacobian = getPentaScaledJacobian( myVolumeNodes[0], myVolumeNodes[1], 
+                                             myVolumeNodes[2], myVolumeNodes[3], 
+                                             myVolumeNodes[4], myVolumeNodes[5] );
+    break;
+  case HEX_PRISM: 
+    scaledJacobian = getHexaPrismScaledJacobian( myVolumeNodes[0], myVolumeNodes[1], myVolumeNodes[2], myVolumeNodes[3], 
+                                                 myVolumeNodes[4], myVolumeNodes[5], myVolumeNodes[6], myVolumeNodes[7],
+                                                 myVolumeNodes[8], myVolumeNodes[9], myVolumeNodes[10], myVolumeNodes[11]);
+    break;
+  default:
+    break;
+  }
+
+  return scaledJacobian;
+}
+
+
 //=======================================================================
 //function : GetBaryCenter
 //purpose  : 
@@ -969,7 +1316,7 @@ bool SMDS_VolumeTool::GetFaceNodes (int                             faceIndex,
 
 namespace
 {
-  struct NLink : public std::pair<int,int>
+  struct NLink : public std::pair<smIdType,smIdType>
   {
     int myOri;
     NLink(const SMDS_MeshNode* n1=0, const SMDS_MeshNode* n2=0, int ori=1 )
@@ -1248,6 +1595,60 @@ bool SMDS_VolumeTool::GetFaceBaryCenter (int faceIndex, double & X, double & Y,
   return true;
 }
 
+//================================================================================
+/*!
+ * \brief Check that all the faces in a polyhedron follow the same orientation
+ * \remark there is no differentiation for outward and inward face orientation.
+ */
+//================================================================================
+bool SMDS_VolumeTool::AllFacesSameOriented() const
+{  
+  SMDS_VolumeTool* me = const_cast< SMDS_VolumeTool* > ( this );
+  bool validOrientation = true;
+  std::map<Link, std::vector<int>> collectLinksOrientations;
+  me->myFwdLinks.clear();
+  for ( int faceId = 0; faceId < NbFaces(); ++faceId )
+  {
+    me->setFace( faceId );
+    myExternalFaces = false;
+
+    // Build the links
+    for ( int i = 0; i < myCurFace.myNbNodes; ++i )
+    {
+      NLink link( myCurFace.myNodes[i], myCurFace.myNodes[i+1] );
+      std::map<Link, int>::const_iterator foundLink = myFwdLinks.find( link );
+
+      if ( foundLink == myFwdLinks.end() )
+        me->myFwdLinks.insert( make_pair( link, link.myOri ));               
+
+      collectLinksOrientations[ link ].push_back( link.myOri );
+    }     
+  }
+
+  // Check duality of the orientations
+  std::map<Link, std::vector<int>>::const_iterator theLinks;
+  for ( theLinks = collectLinksOrientations.begin(); theLinks != collectLinksOrientations.end(); theLinks++ )
+  {
+    if ( theLinks->second.size() == 2 ) // 99% of the cases there are 2 faces per link
+    {
+      if ( 1 != -1*theLinks->second[0]*theLinks->second[1] ) 
+        return false;
+      continue;
+    }
+
+    if ( theLinks->second.size() % 2 != 0 )// Dont treat uneven number of links 
+      continue;
+
+    // In the other 1% of the cases we count the number occurrence and check that they match
+    int minusOne  = std::count( theLinks->second.begin(), theLinks->second.end(), -1 );
+    int plusOne   = std::count( theLinks->second.begin(), theLinks->second.end(),  1 );
+    if ( minusOne != plusOne ) 
+      return false;
+  }
+
+  return validOrientation;
+}
+
 //=======================================================================
 //function : GetFaceArea
 //purpose  : Return face area
@@ -1736,6 +2137,52 @@ bool SMDS_VolumeTool::IsFreeFace( int faceIndex, const SMDS_MeshElement** otherV
   return isFree;
 }
 
+//================================================================================
+/*!
+ * \brief Check that only one volume is built on the face nodes
+ *        Different to IsFreeFace function, all nodes of the face are checked.
+ *        For non conforming meshes, the face that is not conform with the neighbor 
+ *        will be identify as free.
+ */
+//================================================================================
+
+bool SMDS_VolumeTool::IsFreeFaceCheckAllNodes( int faceIndex, const SMDS_MeshElement** otherVol/*=0*/ ) const
+{
+  const bool isFree = true;
+
+  if ( !setFace( faceIndex ))
+    return !isFree;
+
+  const SMDS_MeshNode** nodes = GetFaceNodes( faceIndex );
+
+  const int  di = myVolume->IsQuadratic() ? 2 : 1;
+  const int nbN = myCurFace.myNbNodes/di;
+  std::vector<bool> allNodesCoincideWithNeighbor(nbN,false);
+
+  for (int nodeId = 0; nodeId < nbN; nodeId++)
+  {
+    SMDS_ElemIteratorPtr eIt = nodes[nodeId]->GetInverseElementIterator( SMDSAbs_Volume );
+    int count = 0;
+    while ( eIt->more() )
+    {
+      const SMDS_MeshElement* vol = eIt->next();
+      if ( vol == myVolume )
+        continue;
+      else
+      {
+        count++;
+      }
+    }
+
+    if ( count==0 /*free corner in the face means free face*/)
+    {
+      if ( otherVol ) *otherVol = 0;
+      return true;
+    }
+  }
+  return IsFreeFace( faceIndex, otherVol );
+}
+
 //================================================================================
 /*!
  * \brief Thorough check that only one volume is built on the face nodes
@@ -2210,7 +2657,7 @@ const SMDS_MeshVolume* SMDS_VolumeTool::Element() const
 //purpose  : return element ID
 //=======================================================================
 
-int SMDS_VolumeTool::ID() const
+smIdType SMDS_VolumeTool::ID() const
 {
   return myVolume ? myVolume->GetID() : 0;
 }
index f33d68f24a2ab741ae6d2d4ef690d40682ed8187..56affdd48636c854eb3248ecf9586980bf4925f2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -31,6 +31,8 @@
 
 #include "SMESH_SMDS.hxx"
 
+#include <smIdType.hxx>
+
 class SMDS_MeshElement;
 class SMDS_MeshNode;
 class SMDS_MeshVolume;
@@ -72,7 +74,7 @@ class SMDS_EXPORT SMDS_VolumeTool
   const SMDS_MeshVolume* Element() const;
   // return element
 
-  int ID() const;
+  smIdType ID() const;
   // return element ID
 
   bool IsPoly() const { return myPolyedre; }
@@ -95,12 +97,15 @@ class SMDS_EXPORT SMDS_VolumeTool
   const SMDS_MeshNode** GetNodes() const { return (const SMDS_MeshNode**) &myVolumeNodes[0]; }
   // Return array of volume nodes
 
-  int NbNodes() const { return myVolumeNodes.size(); }
-  // Return array of volume nodes
+  int NbNodes() const { return (int) myVolumeNodes.size(); }
+  // Return number of volume nodes
 
   double GetSize() const;
   // Return element volume
 
+  double GetScaledJacobian() const;
+  // Return the scaled jacobian 
+
   bool GetBaryCenter (double & X, double & Y, double & Z) const;
 
   bool IsOut(double X, double Y, double Z, double tol) const;
@@ -183,6 +188,12 @@ class SMDS_EXPORT SMDS_VolumeTool
   bool IsFreeFace(  int faceIndex, const SMDS_MeshElement** otherVol=0 ) const;
   // Fast check that only one volume is built on nodes of a given face
   // otherVol returns another volume sharing the given facet
+  // Function works for conforming mesh.
+
+  bool IsFreeFaceCheckAllNodes(  int faceIndex, const SMDS_MeshElement** otherVol=0 ) const;
+  // Check that only one volume is built on nodes of a given face
+  // otherVol returns another volume sharing the given facet
+  // Function to be used on mesh with non conforming elements. The face shared between 
 
   bool IsFreeFaceAdv(  int faceIndex, const SMDS_MeshElement** otherVol=0 ) const;
   // Thorough check that all volumes built on the face nodes lays on one side
@@ -194,6 +205,10 @@ class SMDS_EXPORT SMDS_VolumeTool
   bool GetFaceBaryCenter (int faceIndex, double & X, double & Y, double & Z) const;
   // Return barycenter of a face
 
+  bool AllFacesSameOriented() const;
+  // Check that all the faces of a polyhedron have the same orientation
+  // no differentiation between inward and outward orientation is made.
+
   double GetFaceArea( int faceIndex ) const;
   // Return face area
 
@@ -261,7 +276,7 @@ class SMDS_EXPORT SMDS_VolumeTool
   int                     myNbFaces;
   std::vector<const SMDS_MeshNode*> myVolumeNodes;
   std::vector< int >      myPolyIndices; // of a myCurFace
-  std::vector< int >      myPolyQuantities;
+  std::vector<int>        myPolyQuantities;
   std::vector< int >      myPolyFacetOri; // -1-in, +1-out, 0-undef
 
   typedef std::pair<int,int> Link;
index 87e4830c3a8ee13e2d192e02a10df5fcb835a769..deec21d115df913ae1fcbfee50b4a2e2df5c1d93 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2010-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -25,7 +25,7 @@
 
 _GetVtkNodes::_GetVtkNodes( TVtkIdList&        vtkIds,
                             SMDS_Mesh*         mesh,
-                            int                vtkCellId,
+                            vtkIdType          vtkCellId,
                             SMDSAbs_EntityType type )
 {
   vtkUnstructuredGrid*         grid = mesh->GetGrid();
@@ -47,7 +47,7 @@ _GetVtkNodes::_GetVtkNodes( TVtkIdList&        vtkIds,
 
 _GetVtkNodesToUNV::_GetVtkNodesToUNV( TVtkIdList&        vtkIds,
                                       SMDS_Mesh*         mesh,
-                                      int                vtkCellId,
+                                      vtkIdType          vtkCellId,
                                       SMDSAbs_EntityType type )
 {
   vtkUnstructuredGrid* grid = mesh->GetGrid();
@@ -133,7 +133,7 @@ _GetVtkNodesToUNV::_GetVtkNodesToUNV( TVtkIdList&        vtkIds,
 
 _GetVtkNodesPolyh::_GetVtkNodesPolyh( TVtkIdList&        vtkIds,
                                       SMDS_Mesh*         mesh,
-                                      int                vtkCellId,
+                                      vtkIdType          vtkCellId,
                                       SMDSAbs_EntityType type )
 {
   vtkUnstructuredGrid* grid = mesh->GetGrid();
index 683f678a225f3ff90c827a0f5047b7e88e1c47bd..3fa804f23fc02436add006346664a44242cb2661 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2010-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -34,15 +34,15 @@ typedef std::vector< vtkIdType > TVtkIdList;
  */
 struct _GetVtkNodes
 {
-  _GetVtkNodes( TVtkIdList& nodeIds, SMDS_Mesh* mesh, int vtkCellId, SMDSAbs_EntityType type);
+  _GetVtkNodes( TVtkIdList& nodeIds, SMDS_Mesh* mesh, vtkIdType vtkCellId, SMDSAbs_EntityType type);
 };
 struct _GetVtkNodesToUNV
 {
-  _GetVtkNodesToUNV( TVtkIdList& nodeIds, SMDS_Mesh* mesh, int vtkCellId, SMDSAbs_EntityType type);
+  _GetVtkNodesToUNV( TVtkIdList& nodeIds, SMDS_Mesh* mesh, vtkIdType vtkCellId, SMDSAbs_EntityType type);
 };
 struct _GetVtkNodesPolyh
 {
-  _GetVtkNodesPolyh( TVtkIdList& nodeIds, SMDS_Mesh* mesh, int vtkCellId, SMDSAbs_EntityType type);
+  _GetVtkNodesPolyh( TVtkIdList& nodeIds, SMDS_Mesh* mesh, vtkIdType vtkCellId, SMDSAbs_EntityType type);
 };
 
 //--------------------------------------------------------------------------------
@@ -55,7 +55,7 @@ class SMDS_VtkCellIterator: public SMDS_ITERATOR
 public:
   typedef typename SMDS_ITERATOR::value_type result_type;
 
-  SMDS_VtkCellIterator(SMDS_Mesh* mesh, int vtkCellId, SMDSAbs_EntityType aType)
+  SMDS_VtkCellIterator(SMDS_Mesh* mesh, vtkIdType vtkCellId, SMDSAbs_EntityType aType)
     : _mesh(mesh), _index(0)
   {
     GET_VTK_NODES getNodes( _vtkIdList, mesh, vtkCellId, aType );
@@ -78,7 +78,7 @@ class SMDS_VtkCellIteratorToUNV: public SMDS_VtkCellIterator< SMDS_ITERATOR, _Ge
 {
   typedef SMDS_VtkCellIterator< SMDS_ITERATOR, _GetVtkNodesToUNV > parent_t;
 public:
-  SMDS_VtkCellIteratorToUNV(SMDS_Mesh* mesh, int vtkCellId, SMDSAbs_EntityType type):
+  SMDS_VtkCellIteratorToUNV(SMDS_Mesh* mesh, vtkIdType vtkCellId, SMDSAbs_EntityType type):
     parent_t( mesh, vtkCellId, type ) {}
 };
 
@@ -88,7 +88,7 @@ class SMDS_VtkCellIteratorPolyH: public SMDS_VtkCellIterator< SMDS_ITERATOR, _Ge
 {
   typedef SMDS_VtkCellIterator< SMDS_ITERATOR, _GetVtkNodesPolyh > parent_t;
 public:
-  SMDS_VtkCellIteratorPolyH(SMDS_Mesh* mesh, int vtkCellId, SMDSAbs_EntityType type):
+  SMDS_VtkCellIteratorPolyH(SMDS_Mesh* mesh, vtkIdType vtkCellId, SMDSAbs_EntityType type):
     parent_t( mesh, vtkCellId, type ) {}
 };
 
index df0bfe4364dc555a814ea95a6339d6ebd3d4464b..bcdf6a67e580d08895c4d8048639b90c5259fc9d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index c4ad47ec40c4b01758ac9f5a043783e734275d7e..6b36f0f4a8c37bd085ab442c2e17095042e16356 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2006-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 032ac935c2f8ad8b1f8737173f0c80b69ae06771..300e6f268bcdb344586f40fcf0aa92006684c038 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2006-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 129ec5c41f01d73813e0dca56ee8a5b20f5a3a7f..a9d9e8ad8219d7de45455fa029a17d46fd0a0176 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -20,6 +20,7 @@
 # --- options ---
 # additional include directories
 INCLUDE_DIRECTORIES(
+  ${QT_INCLUDES}
   ${KERNEL_INCLUDE_DIRS}
   ${GEOM_INCLUDE_DIRS}
   ${OpenCASCADE_INCLUDE_DIR}
@@ -38,6 +39,7 @@ INCLUDE_DIRECTORIES(
   ${PROJECT_SOURCE_DIR}/src/SMDS
   ${PROJECT_SOURCE_DIR}/src/SMESHDS
   ${PROJECT_SOURCE_DIR}/src/SMESHUtils
+  ${MEDCOUPLING_INCLUDE_DIRS}
 )
 
 # additional preprocessor / compiler flags
@@ -67,6 +69,8 @@ SET(_link_LIBRARIES
   MeshDriverUNV
   MeshDriverGMF
   ${DriverCGNS_LIB}
+  ${MEDCoupling_medloader}
+  Qt5::Core
 )
 
 # --- headers ---
@@ -75,6 +79,8 @@ SET(_link_LIBRARIES
 SET(SMESHimpl_HEADERS
   SMESH_Gen.hxx
   SMESH_Mesh.hxx
+  SMESH_SequentialMesh.hxx
+  SMESH_ParallelMesh.hxx
   SMESH_subMesh.hxx
   SMESH_subMeshEventListener.hxx
   SMESH_Hypothesis.hxx
@@ -86,6 +92,11 @@ SET(SMESHimpl_HEADERS
   SMESH_MesherHelper.hxx
   SMESH_ProxyMesh.hxx
   SMESH_SMESH.hxx
+  MG_ADAPT.hxx
+  SMESH_Homard.hxx
+  SMESH_DriverMesh.hxx
+  SMESH_DriverShape.hxx
+  SMESH_MeshLocker.hxx
 )
 
 # --- sources ---
@@ -95,6 +106,8 @@ SET(SMESHimpl_SOURCES
   memoire.h
   SMESH_Gen.cxx
   SMESH_Mesh.cxx
+  SMESH_SequentialMesh.cxx
+  SMESH_ParallelMesh.cxx
   SMESH_subMesh.cxx
   SMESH_Hypothesis.cxx
   SMESH_Algo.cxx
@@ -104,13 +117,19 @@ SET(SMESHimpl_SOURCES
   SMESH_HypoFilter.cxx
   SMESH_ProxyMesh.cxx
   SMESH_MesherHelper.cxx
+  MG_ADAPT.cxx
+  SMESH_Homard.cxx
+  SMESH_DriverMesh.cxx
+  SMESH_DriverShape.cxx
+  SMESH_MeshLocker.cxx
 )
 
 # --- rules ---
 
 ADD_LIBRARY(SMESHimpl ${SMESHimpl_SOURCES})
 IF(WIN32)
-  TARGET_COMPILE_OPTIONS(SMESHimpl PRIVATE /bigobj) 
+  TARGET_COMPILE_OPTIONS(SMESHimpl PRIVATE /bigobj)
+  ADD_DEFINITIONS(-DNOMINMAX)
 ENDIF(WIN32)
 
 TARGET_LINK_LIBRARIES(SMESHimpl ${_link_LIBRARIES} )
diff --git a/src/SMESH/MG_ADAPT.cxx b/src/SMESH/MG_ADAPT.cxx
new file mode 100644 (file)
index 0000000..b7af53a
--- /dev/null
@@ -0,0 +1,1608 @@
+// Copyright (C) 2020-2024  CEA, EDF
+//
+// 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 "MG_ADAPT.hxx"
+
+#include <DriverGMF_Read.hxx>
+#include <SMESH_Comment.hxx>
+#include <SMESH_File.hxx>
+#include <SMESH_MGLicenseKeyGen.hxx>
+#include <SMESH_TypeDefs.hxx>
+
+#include <MEDFileData.hxx>
+#include <MEDFileField.hxx>
+#include <MEDFileMesh.hxx>
+#include <MeshFormatReader.hxx>
+#include <MeshFormatWriter.hxx>
+
+#include <Utils_SALOME_Exception.hxx>
+#include <Basics_Utils.hxx>
+#include "SMESH_TypeDefs.hxx"
+
+#ifndef WIN32
+#include <unistd.h> // getpid()
+#else
+#include <process.h>
+#endif
+#include <fcntl.h>
+#include <array>
+#include <memory>   // unique_ptr
+#include <chrono>
+
+typedef SMESH_Comment ToComment;
+
+using namespace MG_ADAPT;
+static std::string removeFile(std::string fileName, int& notOk)
+{
+  std::string errStr;
+  notOk = std::remove(fileName.c_str());
+  if (notOk) errStr = ToComment("\n error while removing file : ") << fileName;
+  else       errStr = ToComment("\n file : ") << fileName << " succesfully deleted! \n ";
+
+  return errStr;
+}
+std::string MG_ADAPT::remove_extension(const std::string& filename)
+{
+  size_t lastdot = filename.find_last_of(".");
+  if (lastdot == std::string::npos) return filename;
+  return filename.substr(0, lastdot);
+}
+namespace
+{
+
+  bool isFileExist( const std::string& fName )
+  {
+    return SMESH_File( fName ).exists();
+  }
+
+  // =======================================================================
+  med_idt openMedFile(const std::string aFile)
+  // =======================================================================
+  // renvoie le medId associe au fichier Med apres ouverture
+  {
+    med_idt medIdt = MEDfileOpen(aFile.c_str(),MED_ACC_RDONLY);
+    if (medIdt <0)
+    {
+      THROW_SALOME_EXCEPTION("\nThe med file " << aFile << " cannot be opened.\n");
+    }
+    return medIdt;
+  }
+
+  // =======================================================================
+  void getTimeStepInfos(std::string aFile, med_int& numdt, med_int& numit, std::string fieldName)
+  // =======================================================================
+  {
+    // Il faut voir si plusieurs maillages
+
+    herr_t erreur = 0 ;
+    med_idt medIdt ;
+
+    // Ouverture du fichier
+    //~SCRUTE(aFile.toStdString());
+    medIdt = openMedFile(aFile);
+    if ( medIdt < 0 ) return ;
+    // Lecture du nombre de champs
+    med_int ncha = MEDnField(medIdt) ;
+    if (ncha < 1 )
+    {
+      //~addMessage( ToComment(" error: there is no field in  ") << aFile, /*fatal=*/true );
+      return;
+    }
+    // Lecture des caracteristiques du champs
+
+    //       Lecture du type du champ, des noms des composantes et du nom de l'unite
+    char nomcha  [MED_NAME_SIZE+1];
+    strcpy(nomcha, fieldName.c_str());
+    //       Lecture du nombre de composantes
+    med_int ncomp = MEDfieldnComponentByName(medIdt, nomcha);
+    char meshname[MED_NAME_SIZE+1];
+    char * comp = (char*) malloc(ncomp*MED_SNAME_SIZE+1);
+    char * unit = (char*) malloc(ncomp*MED_SNAME_SIZE+1);
+    char dtunit[MED_SNAME_SIZE+1];
+    med_bool local;
+    med_field_type typcha;
+    med_int nbofcstp;
+    erreur =  MEDfieldInfoByName (medIdt, nomcha, meshname,&local,&typcha,comp,unit,dtunit, &nbofcstp);
+    free(comp);
+    free(unit);
+    if ( erreur < 0 )
+    {
+      //~addMessage( ToComment(" error: error while reading field  ") << nomcha << " in file " << aFile , /*fatal=*/true );
+      return;
+    }
+
+    med_float dt;
+    med_int tmp_numdt, tmp_numit;
+
+    //~med_int step = data->myUseLastTimeStep ? nbofcstp : data->myTimeStep+1;
+    //~myPrint("step ", step);
+    erreur = MEDfieldComputingStepInfo ( medIdt, nomcha, 1, &numdt, &numit, &dt );
+    for( int step = 1; step <= nbofcstp; step++ )
+    {
+      erreur = MEDfieldComputingStepInfo ( medIdt, nomcha, step, &tmp_numdt, &tmp_numit, &dt );
+      if(tmp_numdt > numdt)
+      {
+        numdt = tmp_numdt;
+        numit = tmp_numit;
+      }
+    }
+    if ( erreur < 0 )
+    {
+      //~addMessage( ToComment(" error: error while reading field ") << nomcha << "step (numdt, numit) = " <<"("<< numdt<< ", "
+      //numit<< ")" <<" in file " << aFile , /*fatal=*/true );
+      return;
+    }
+
+    // Fermeture du fichier
+    if ( medIdt > 0 ) MEDfileClose(medIdt);
+
+  }
+
+  struct GET_DEFAULT // struct used to get default value from GetOptionValue()
+  {
+    bool isDefault;
+    operator bool* () {
+      return &isDefault;
+    }
+  };
+
+  class outFileStream : public std::ofstream{
+  public:
+    ~outFileStream(){close();} //to close file at dtor
+  };
+
+} // anonymous namespace
+
+//----------------------------------------------------------------------------------------
+MgAdapt::MgAdapt()
+{
+  data = new MgAdaptHypothesisData();
+  data->myInMeshName = "";
+  data->fromMedFile = defaultFromMedFile();
+  data->myFileInDir = defaultWorkingDirectory();
+  data->myMeshFileIn = "";
+  data->myFileOutDir = defaultWorkingDirectory();
+  data->myOutMeshName = "";
+  data->myMeshFileOut = "";
+  data->myMeshOutMed = defaultMeshOutMed();
+  data->myPublish = defaultPublish();
+  data->myUseLocalMap = defaultUseLocalMap();
+  data->myUseBackgroundMap = defaultUseBackgroundMap();
+  data->myFileSizeMapDir = defaultWorkingDirectory();
+  data->myMeshFileBackground = "";
+  data->myUseConstantValue = defaultUseConstantValue();
+  data->myConstantValue = 0.0;
+  data->myFieldName = "";
+  data->myUseNoTimeStep = defaultUseNoTimeStep();
+  data->myUseLastTimeStep = defaultUseLastTimeStep();
+  data->myUseChosenTimeStep = defaultUseChosenTimeStep();
+  data->myTimeStep = -2;
+  data->myRank =  -2;
+  data->myWorkingDir = defaultWorkingDirectory();
+  data->myLogFile = defaultLogFile();
+  data->myVerboseLevel = defaultVerboseLevel();
+  data->myPrintLogInFile = defaultPrintLogInFile();
+  data->myKeepFiles = defaultKeepFiles();
+  data->myRemoveLogOnSuccess = defaultRemoveLogOnSuccess();
+
+  buildModel();
+  setAll();
+}
+MgAdapt::MgAdapt(MgAdaptHypothesisData* myData)
+{
+  data = new MgAdaptHypothesisData();
+  setData(myData);
+  buildModel();
+}
+
+MgAdapt::MgAdapt( const MgAdapt& copy)
+{
+  data = new MgAdaptHypothesisData();
+  MgAdaptHypothesisData *copyData = copy.getData();
+  copyMgAdaptHypothesisData(copyData);
+  setAll();
+
+  this->_option2value = copy._option2value;
+  this->_customOption2value = copy._customOption2value;
+  this->_defaultOptionValues = copy._defaultOptionValues;
+  this->_doubleOptions = copy._doubleOptions;
+  this->_charOptions = copy._charOptions;
+  this->_boolOptions = copy._boolOptions;
+}
+
+//-----------------------------------------------------------------------------------------
+MgAdapt::~MgAdapt()
+{
+  delete data;
+}
+void MgAdapt::buildModel()
+{
+
+  const char* boolOptionNames[] = { "compute_ridges", // yes
+                                    "" // mark of end
+                                  };
+  // const char* intOptionNames[] = { "max_number_of_errors_printed", // 1
+  //                                  "max_number_of_threads",        // 4
+  //                                  "" // mark of end
+  // };
+  const char* doubleOptionNames[] = { "max_memory",  // 0
+                                      "" // mark of end
+                                    };
+  const char* charOptionNames[] = { "components",  // "yes"
+                                    "adaptation",  // both
+                                    "" // mark of end
+                                  };
+
+  int i = 0;
+  while (boolOptionNames[i][0])
+  {
+    _boolOptions.insert( boolOptionNames[i] );
+    _option2value[boolOptionNames[i++]].clear();
+  }
+  // i = 0;
+  // while (intOptionNames[i][0])
+  //   _option2value[intOptionNames[i++]].clear();
+
+  i = 0;
+  while (doubleOptionNames[i][0]) {
+    _doubleOptions.insert(doubleOptionNames[i]);
+    _option2value[doubleOptionNames[i++]].clear();
+  }
+  i = 0;
+  while (charOptionNames[i][0]) {
+    _charOptions.insert(charOptionNames[i]);
+    _option2value[charOptionNames[i++]].clear();
+  }
+
+  // default values to be used while MG-Adapt
+
+  _defaultOptionValues["adaptation"    ] = "both";
+  _defaultOptionValues["components"    ] = "outside components";
+  _defaultOptionValues["compute_ridges"] = "yes";
+  _defaultOptionValues["max_memory"    ] = ToComment(defaultMaximumMemory());
+}
+
+//=============================================================================
+TOptionValues MgAdapt::getOptionValues() const
+{
+  TOptionValues vals;
+  TOptionValues::const_iterator op_val = _option2value.begin();
+  for ( ; op_val != _option2value.end(); ++op_val )
+    vals.insert( make_pair( op_val->first, getOptionValue( op_val->first, GET_DEFAULT() )));
+
+  return vals;
+}
+
+std::vector <std::string> MgAdapt::getOptionValuesStrVec() const
+{
+  std::vector <std::string> vals;
+  TOptionValues::const_iterator op_val = _option2value.begin();
+  for ( ; op_val != _option2value.end(); ++op_val )
+    vals.push_back(op_val->first+":"+getOptionValue( op_val->first, GET_DEFAULT() ));
+
+  return vals;
+}
+
+std::vector <std::string> MgAdapt::getCustomOptionValuesStrVec() const
+{
+  std::vector <std::string> vals;
+  TOptionValues::const_iterator op_val;
+  for ( op_val = _customOption2value.begin(); op_val != _customOption2value.end(); ++op_val )
+  {
+    vals.push_back(op_val->first+":"+getOptionValue( op_val->first, GET_DEFAULT() ));
+  }
+  return vals;
+}
+const TOptionValues& MgAdapt::getCustomOptionValues() const
+{
+  return _customOption2value;
+}
+void MgAdapt::setData(MgAdaptHypothesisData* myData)
+{
+  copyMgAdaptHypothesisData(myData);
+  setAll();
+}
+MgAdaptHypothesisData* MgAdapt::getData() const
+{
+  return data;
+}
+void MgAdapt::setMedFileIn(std::string fileName)
+{
+  if ( isFileExist( fileName ))
+  {
+    medFileIn = fileName;
+
+    if (medFileOut == "") // default MED file Out
+      medFileOut = remove_extension( fileName )+ ".adapt.med";
+  }
+  else
+  {
+    THROW_SALOME_EXCEPTION("\nThe file "<< fileName <<" does not exist.\n");
+  }
+}
+
+std::string MgAdapt::getMedFileIn()
+{
+  return medFileIn;
+}
+
+void MgAdapt::setMedFileOut(std::string fileOut)
+{
+  medFileOut = fileOut;
+}
+std::string MgAdapt::getMedFileOut()
+{
+  return medFileOut;
+}
+void MgAdapt::setMeshOutMed(bool mybool)
+{
+  meshOutMed = mybool;
+}
+bool MgAdapt::getMeshOutMed()
+{
+  return meshOutMed;
+}
+void MgAdapt::setPublish(bool mybool)
+{
+  publish = mybool;
+}
+bool MgAdapt::getPublish()
+{
+  return publish;
+}
+void MgAdapt::setFieldName(std::string myFieldName)
+{
+  fieldName = myFieldName;
+}
+std::string MgAdapt::getFieldName()
+{
+  return fieldName;
+}
+void MgAdapt::setTimeStep(int time)
+{
+  timeStep = time;
+}
+int MgAdapt::getTimeStep() const
+{
+  return timeStep;
+}
+
+void MgAdapt::setRankTimeStep(int time, int myRank)
+{
+  timeStep = time;
+  rank = myRank;
+}
+
+int MgAdapt::getRank()
+{
+  return rank;
+}
+void MgAdapt::setTimeStepRankLast()
+{
+  myUseLastTimeStep = true;
+  myUseChosenTimeStep = false;
+  myUseNoTimeStep = false;
+  //~med_int aRank, tmst;
+     //~std::string fieldFile = useBackgroundMap ? sizeMapFile : medFileIn;
+  //~getTimeStepInfos(fieldFile, tmst, aRank);
+  //~setRankTimeStep((int) tmst, (int) aRank);
+}
+void MgAdapt::setNoTimeStep()
+{
+  myUseLastTimeStep = false;
+  myUseChosenTimeStep = false;
+  myUseNoTimeStep = true;
+  //~int aRank = (int)MED_NO_IT;
+  //~int tmst  = (int)MED_NO_DT ;
+  //~setRankTimeStep(tmst, aRank);
+}
+void MgAdapt::setChosenTimeStepRank()
+{
+  myUseLastTimeStep = false;
+  myUseChosenTimeStep = true;
+  myUseNoTimeStep = false;
+  //~int aRank = (int)MED_NO_IT;
+  //~int tmst  = (int)MED_NO_DT ;
+  //~setRankTimeStep(tmst, aRank);
+}
+void MgAdapt::setUseLocalMap(bool myLocal)
+{
+  useLocalMap = myLocal;
+}
+
+bool MgAdapt::getUseLocalMap()
+{
+  return useLocalMap;
+}
+
+void MgAdapt::setUseBackgroundMap(bool bckg)
+{
+  useBackgroundMap = bckg;
+}
+
+bool MgAdapt::getUseBackgroundMap()
+{
+  return useBackgroundMap;
+}
+
+void MgAdapt::setUseConstantValue(bool cnst)
+{
+  useConstantValue = cnst;
+}
+bool MgAdapt::getUseConstantValue()
+{
+  return useConstantValue;
+}
+void MgAdapt::setLogFile(std::string myLogFile)
+{
+  logFile = myLogFile;
+}
+std::string MgAdapt::getLogFile()
+{
+  return logFile;
+}
+void MgAdapt::setVerbosityLevel(int verboLevel)
+{
+  verbosityLevel = verboLevel;
+}
+int MgAdapt::getVerbosityLevel()
+{
+  return verbosityLevel;
+}
+void MgAdapt::setRemoveOnSuccess(bool rmons)
+{
+  removeOnSuccess = rmons;
+}
+bool MgAdapt::getRemoveOnSuccess()
+{
+  return removeOnSuccess;
+}
+void MgAdapt::setSizeMapFile(std::string mapFile)
+{
+  if ( mapFile == "" || isFileExist(mapFile) )
+  {
+    sizeMapFile = mapFile;
+  }
+  else
+  {
+    THROW_SALOME_EXCEPTION("\nThe file "<< mapFile <<" does not exist.\n");
+  }
+}
+std::string MgAdapt::getSizeMapFile()
+{
+  return sizeMapFile;
+}
+
+void MgAdapt::setMeshName(std::string name)
+{
+  meshName = name;
+}
+std::string MgAdapt::getMeshName()
+{
+  return meshName;
+}
+void MgAdapt::setMeshNameOut(std::string name)
+{
+  meshNameOut = name;
+}
+std::string MgAdapt::getMeshNameOut()
+{
+  return meshNameOut;
+}
+void MgAdapt::setFromMedFile(bool mybool)
+{
+  fromMedFile = mybool;
+}
+bool MgAdapt::isFromMedFile()
+{
+  return fromMedFile;
+}
+void MgAdapt::setConstantValue(double cnst)
+{
+  constantValue = cnst;
+}
+double MgAdapt::getConstantValue() const
+{
+  return constantValue;
+}
+
+void MgAdapt::setWorkingDir(std::string dir)
+{
+  workingDir = dir;
+}
+std::string MgAdapt::getWorkingDir() const
+{
+  return workingDir;
+}
+void MgAdapt::setKeepWorkingFiles(bool mybool)
+{
+  toKeepWorkingFiles = mybool;
+}
+bool MgAdapt::getKeepWorkingFiles()
+{
+  return toKeepWorkingFiles;
+}
+void MgAdapt::setPrintLogInFile(bool print)
+{
+  printLogInFile = print;
+}
+bool MgAdapt::getPrintLogInFile()
+{
+  return printLogInFile;
+}
+
+bool MgAdapt::setAll()
+{
+
+  setFromMedFile(data->fromMedFile);
+  std::string file;
+  checkDirPath(data->myFileInDir);
+  file = data->myFileInDir+data->myMeshFileIn;
+  setMedFileIn(file);
+  setMeshName(data->myInMeshName);
+  setMeshNameOut(data->myOutMeshName);
+  checkDirPath(data->myFileOutDir);
+  std::string out = data->myFileOutDir+data->myMeshFileOut;
+  setMedFileOut(out);
+  setPublish(data->myPublish);
+  setMeshOutMed(data->myMeshOutMed);
+  setUseLocalMap(data->myUseLocalMap);
+  setUseBackgroundMap(data->myUseBackgroundMap);
+  setUseConstantValue(data->myUseConstantValue);
+
+  std::string mapfile;
+  if (useBackgroundMap)
+  {
+    checkDirPath(data->myFileSizeMapDir);
+    mapfile = data->myFileSizeMapDir+data->myMeshFileBackground;
+    setFieldName(data->myFieldName);
+  }
+  else if (useConstantValue)
+  {
+    setConstantValue(data->myConstantValue);
+  }
+  else
+  {
+    mapfile ="";
+    setConstantValue(0.0);
+    setFieldName(data->myFieldName);
+  }
+
+  setSizeMapFile(mapfile);
+  if (data->myUseNoTimeStep)
+    setNoTimeStep();
+  else if (data->myUseLastTimeStep)
+    setTimeStepRankLast();
+  else
+  {
+    setChosenTimeStepRank();
+    setRankTimeStep(data->myTimeStep, data->myRank);
+  }
+  /* Advanced options */
+  setWorkingDir(data->myWorkingDir);
+  checkDirPath(data->myWorkingDir);
+  setLogFile(data->myWorkingDir+defaultLogFile());
+  setVerbosityLevel(data->myVerboseLevel);
+  setRemoveOnSuccess(data->myRemoveLogOnSuccess);
+  setPrintLogInFile(data->myPrintLogInFile);
+  setKeepWorkingFiles(data->myKeepFiles);
+
+  return true;
+}
+
+void MgAdapt::checkDirPath(std::string& dirPath)
+{
+  const char lastChar = *dirPath.rbegin();
+#ifdef WIN32
+  if(lastChar != '\\') dirPath+='\\';
+#else
+  if(lastChar != '/') dirPath+='/';
+#endif
+}
+//=============================================================================
+void MgAdapt::setOptionValue(const std::string& optionName,
+                             const std::string& optionValue)
+{
+//   INFOS("setOptionValue");
+//   std::cout << "optionName: " << optionName << ", optionValue: " << optionValue << std::endl;
+  TOptionValues::iterator op_val = _option2value.find(optionName);
+  if (op_val == _option2value.end())
+  {
+    op_val = _customOption2value.find( optionName );
+    _customOption2value[ optionName ] = optionValue;
+    return;
+  }
+
+  if (op_val->second != optionValue)
+  {
+    std::string lowerOptionValue = toLowerStr(optionValue);
+    const char* ptr = lowerOptionValue.c_str();
+    // strip white spaces
+    while (ptr[0] == ' ')
+      ptr++;
+    size_t i = strlen(ptr);
+    while (i != 0 && ptr[i - 1] == ' ')
+      i--;
+    // check value type
+    bool typeOk = true;
+    std::string typeName;
+    if (i == 0)
+    {
+      // empty string
+    }
+    else if (_charOptions.count(optionName))
+    {
+      // do not check strings
+    }
+    else if (_doubleOptions.count(optionName))
+    {
+      // check if value is double
+      toDbl(ptr, &typeOk);
+      typeName = "real";
+    }
+    else if (_boolOptions.count(optionName))
+    {
+      // check if value is bool
+      toBool(ptr, &typeOk);
+      typeName = "bool";
+    }
+    else
+    {
+      // check if value is int
+      toInt(ptr, &typeOk);
+      typeName = "integer";
+    }
+    if ( typeOk ) // check some specific values ?
+    {
+    }
+    if ( !typeOk )
+    {
+      std::string msg = "Advanced option '" + optionName + "' = '" + optionValue + "' but must be " + typeName;
+      throw std::invalid_argument(msg);
+    }
+    std::string value( ptr, i );
+//     std::cout << "==> value: " << value << std::endl;
+    if ( _defaultOptionValues[ optionName ] == value ) value.clear();
+
+//     std::cout << "==> value: " << value << std::endl;
+    op_val->second = value;
+  }
+}
+//=============================================================================
+//! Return option value. If isDefault provided, it can be a default value,
+//  then *isDefault == true. If isDefault is not provided, the value will be
+//  empty if it equals a default one.
+std::string MgAdapt::getOptionValue(const std::string& optionName, bool* isDefault) const
+{
+//   INFOS("getOptionValue");
+//   std::cout << "optionName: " << optionName << ", isDefault: " << isDefault << std::endl;
+  TOptionValues::const_iterator op_val = _option2value.find(optionName);
+  if (op_val == _option2value.end())
+  {
+    op_val = _customOption2value.find(optionName);
+    if (op_val == _customOption2value.end())
+    {
+      std::string msg = "Unknown MG-Adapt option: <" + optionName + ">";
+      throw std::invalid_argument(msg);
+    }
+  }
+  std::string val = op_val->second;
+  if ( isDefault ) *isDefault = ( val.empty() );
+
+  if ( val.empty() && isDefault )
+  {
+    op_val = _defaultOptionValues.find( optionName );
+    if (op_val != _defaultOptionValues.end()) val = op_val->second;
+  }
+//   std::cout << "==> val: " << val << std::endl;
+
+  return val;
+}
+//================================================================================
+/*!
+ * \brief Converts a string to a real value
+ */
+//================================================================================
+
+double MgAdapt::toDbl(const std::string& str, bool* isOk )
+{
+  if ( str.empty() ) throw std::invalid_argument("Empty value provided");
+
+  char * endPtr;
+  double val = strtod(&str[0], &endPtr);
+  bool ok = (&str[0] != endPtr);
+
+  if ( isOk ) *isOk = ok;
+
+  if ( !ok )
+  {
+    std::string msg = "Not a real value:'" + str + "'";
+    throw std::invalid_argument(msg);
+  }
+  return val;
+}
+//================================================================================
+/*!
+ * \brief Converts a string to a lower
+ */
+//================================================================================
+std::string MgAdapt::toLowerStr(const std::string& str)
+{
+  std::string s = str;
+  for ( size_t i = 0; i <= s.size(); ++i )
+    s[i] = (char) tolower( s[i] );
+  return s;
+}
+//================================================================================
+/*!
+ * \brief Converts a string to a bool
+ */
+//================================================================================
+
+bool MgAdapt::toBool(const std::string& str, bool* isOk )
+{
+  std::string s = str;
+  if ( isOk ) *isOk = true;
+
+  for ( size_t i = 0; i <= s.size(); ++i )
+    s[i] = (char) tolower( s[i] );
+
+  if ( s == "1" || s == "true" || s == "active" || s == "yes" )
+    return true;
+
+  if ( s == "0" || s == "false" || s == "inactive" || s == "no" )
+    return false;
+
+  if ( isOk )
+    *isOk = false;
+  else
+  {
+    std::string msg = "Not a Boolean value:'" + str + "'";
+    throw std::invalid_argument(msg);
+  }
+  return false;
+}
+//================================================================================
+/*!
+ * \brief Converts a string to a integer value
+ */
+//================================================================================
+
+int MgAdapt::toInt(const std::string& str, bool* isOk )
+{
+  if ( str.empty() ) throw std::invalid_argument("Empty value provided");
+
+  char * endPtr;
+  int val = (int)strtol( &str[0], &endPtr, 10);
+  bool ok = (&str[0] != endPtr);
+
+  if ( isOk ) *isOk = ok;
+
+  if ( !ok )
+  {
+    std::string msg = "Not an integer value:'" + str + "'";
+    throw std::invalid_argument(msg);
+  }
+  return val;
+}
+//=============================================================================
+bool MgAdapt::hasOptionDefined( const std::string& optionName ) const
+{
+  bool isDefault = false;
+  try
+  {
+    getOptionValue( optionName, &isDefault );
+  }
+  catch ( std::invalid_argument )
+  {
+    return false;
+  }
+  return !isDefault;
+}
+//================================================================================
+/*!
+ * \brief Return command to run MG-Adapt mesher excluding file prefix (-f)
+ */
+//================================================================================
+
+std::string MgAdapt::getCommandToRun(MgAdapt* hyp)
+{
+  return hyp ? hyp->getCommandToRun() : ToComment("error with hypothesis!");
+}
+
+int MgAdapt::compute(std::string& errStr)
+{
+  std::string cmd = getCommandToRun();
+//   std::cout << cmd << std::endl;
+
+  int err = 0;
+  execCmd( cmd.c_str(), err ); // run
+
+  if ( err )
+  {
+    errStr = ToComment("system(mg-adapt.exe ...) command failed with error: ") << strerror( errno );
+  }
+  else if ( !isFileExist( meshFormatOutputMesh ))
+  {
+    errStr = ToComment(" failed to find file ") << meshFormatOutputMesh
+                                                << " output from MG-Adapt run";
+  }
+  else
+  {
+    convertMeshFile(meshFormatOutputMesh, solFormatOutput);
+  }
+  if (!err) cleanUp();
+  return err;
+}
+
+void MgAdapt::execCmd( const char* cmd, int& err)
+{
+  err = 1;
+  std::array <char, 128> buffer;
+  std::streambuf* buf;
+  outFileStream fileStream;
+  if (printLogInFile)
+  {
+    fileStream.open(logFile);
+    buf = fileStream.rdbuf();
+  }
+  else
+  {
+    buf = std::cout.rdbuf();
+  }
+  std::ostream logStream(buf);
+
+
+#if defined(WIN32)
+#  if defined(UNICODE)
+  const wchar_t * aCmd = Kernel_Utils::utf8_decode(cmd);
+  SMESHUtils::ArrayDeleter<const wchar_t> deleter( aCmd );
+  std::unique_ptr <FILE, decltype(&_pclose)> pipe(_wpopen(aCmd, O_RDONLY), _pclose );
+#  else
+  std::unique_ptr <FILE, decltype(&_pclose)> pipe(_popen(cmd, "r"), _pclose );
+#  endif
+#else
+  std::unique_ptr <FILE, decltype(&pclose)> pipe(popen(cmd, "r"), pclose );
+#endif
+
+  if(!pipe)
+  {
+    throw std::runtime_error("popen() failed!");
+  }
+  while(fgets(buffer.data(), buffer.size(), pipe.get()) !=nullptr )
+  {
+    logStream<<buffer.data() ;
+  }
+  err = 0;
+}
+/*
+ * to delete tmp files .mesh, .sol and if needed
+ * the log file
+ *
+ */
+void MgAdapt::cleanUp()
+{
+  int notOk;
+  std::string errStr;
+  if(toKeepWorkingFiles)
+    return;
+  if(removeOnSuccess && printLogInFile)
+    tmpFilesToBeDeleted.push_back(logFile);
+
+  std::vector< std::string>::iterator it = tmpFilesToBeDeleted.begin();
+  for (; it!=tmpFilesToBeDeleted.end(); ++it)
+  {
+    errStr=removeFile(*it, notOk);
+    if (notOk)
+    {
+      appendMsgToLogFile(errStr);
+    }
+
+  }
+}
+
+void MgAdapt::appendMsgToLogFile(std::string& msg)
+{
+  std::ofstream logStream;
+  logStream.open(logFile, std::ofstream::out | std::ofstream::app);
+  logStream<< msg;
+  logStream.close();
+}
+//================================================================================
+/*!
+ * \brief Return command to run MG-Tetra mesher excluding file prefix (-f)
+ */
+//================================================================================
+
+std::string MgAdapt::getCommandToRun()
+{
+  /*
+  || return system command with args and options
+  ||
+  */
+  std::string errStr;
+  std::string cmd = getExeName();
+  std::string meshIn(""), sizeMapIn(""), solFileIn("");
+  updateTimeStepRank();
+  convertMedFile(meshIn, solFileIn, sizeMapIn);
+  if (!isFileExist(meshIn) || !isFileExist(solFileIn))
+  {
+    errStr = ToComment(" failed to find .mesh or .sol file from converter ")<< strerror( errno );
+    return errStr;
+  }
+  tmpFilesToBeDeleted.push_back(meshIn);
+  tmpFilesToBeDeleted.push_back(solFileIn);
+  if(useBackgroundMap && !isFileExist(sizeMapIn))
+  {
+    errStr = ToComment(" failed to find .mesh size map file from converter ")<< strerror( errno );
+    return errStr;
+  }
+
+  cmd+= " --in "+ meshIn;
+  meshFormatOutputMesh = getFileName()+".mesh";
+  tmpFilesToBeDeleted.push_back(meshFormatOutputMesh);
+
+  cmd+= " --out "+ meshFormatOutputMesh;
+  if (useLocalMap || useConstantValue) cmd+= " --sizemap "+ solFileIn;
+  else //  (useBackgroundMap)
+  {
+    cmd+= " --background_mesh "+ sizeMapIn ;
+    cmd+= " --background_sizemap "+ solFileIn;
+    tmpFilesToBeDeleted.push_back(sizeMapIn);
+  }
+  //~else
+  //~{
+  //~// constant value TODO
+  //~}
+  // Check coherence between mesh dimension and option fo adaptation
+  checkDimensionOptionAdaptation();
+
+  //   sizemap file is written only if level is higher than 3
+  if ( verbosityLevel > 3)
+  {
+    std::string solFileOut = getFileName()+".sol";
+    cmd+= " --write_sizemap "+ solFileOut;
+    solFormatOutput.push_back(solFileOut);
+    tmpFilesToBeDeleted.push_back(solFileOut);
+  }
+
+  std::string option, value;
+  bool isDefault;
+  const TOptionValues* options[] = { &_option2value, &_customOption2value };
+  for ( int iOp = 0; iOp < 2; ++iOp )
+  {
+    TOptionValues::const_iterator o2v = options[iOp]->begin();
+    for ( ; o2v != options[iOp]->end(); ++o2v )
+    {
+      option = o2v->first;
+      value = getOptionValue( option, &isDefault );
+
+      if ( isDefault )
+        continue;
+      if ( value.empty() )//value == NoValue() )
+      {
+        if ( _defaultOptionValues.count( option ))
+          continue; // non-custom option with no value
+        //value.clear();
+      }
+      if ( strncmp( "no", option.c_str(), 2 ) == 0 ) // options w/o values: --no_*
+      {
+        if ( !value.empty() && toBool( value ) == false )
+          continue;
+        value.clear();
+      }
+      if ( option[0] != '-' )
+        cmd += " --";
+      else
+        cmd += " ";
+      //       std::cout << "--- option: '" << option << ", value: '" << value <<"'"<< std::endl;
+      cmd += option + " " + value;
+    }
+  }
+
+  // Verbosity Level
+  if (verbosityLevel != defaultVerboseLevel())
+  {
+    cmd+= " --verbose "+ ToComment(verbosityLevel);
+  }
+  // get license key
+  {
+    smIdType nbVertex, nbEdge, nbFace, nbVol;
+    DriverGMF_Read gmfReader;
+    gmfReader.SetFile( meshIn );
+    gmfReader.GetMeshInfo( nbVertex, nbEdge, nbFace, nbVol );
+
+    std::string errorTxt;
+    std::string key = SMESHUtils_MGLicenseKeyGen::GetKey( meshIn,
+                                                          FromSmIdType<int>( nbVertex ),
+                                                          FromSmIdType<int>( nbEdge ),
+                                                          FromSmIdType<int>( nbFace ),
+                                                          FromSmIdType<int>( nbVol ),
+                                                          errorTxt );
+    if ( key.empty() )
+      return ToComment( "Problem with library SalomeMeshGemsKeyGenerator: " + errorTxt );
+
+    if ( key!="0" )
+      cmd += " --key " + key;
+  }
+
+#ifdef WIN32
+  cmd += " < NUL";
+#endif
+
+  if (SALOME::VerbosityActivated())
+    {
+      std::cout << "--- cmd :"<< std::endl;
+      std::cout << cmd << std::endl;
+    }
+
+  return cmd;
+}
+
+//=======================================================================
+//function : defaultMaximumMemory
+//=======================================================================
+
+#if defined(WIN32)
+#include <windows.h>
+#elif !defined(__APPLE__)
+#include <sys/sysinfo.h>
+#endif
+
+double MgAdapt::defaultMaximumMemory()
+{
+#if defined(WIN32)
+  // See http://msdn.microsoft.com/en-us/library/aa366589.aspx
+  MEMORYSTATUSEX statex;
+  statex.dwLength = sizeof (statex);
+  long err = GlobalMemoryStatusEx (&statex);
+  if (err != 0)
+  {
+    double totMB = (double)statex.ullAvailPhys / 1024. / 1024.;
+    return (double)( 0.7 * totMB );
+  }
+#elif !defined(__APPLE__)
+  struct sysinfo si;
+  long err = sysinfo( &si );
+  if ( err == 0 )
+  {
+    long ramMB = si.totalram * si.mem_unit / 1024 / 1024;
+    return ( 0.7 * double( ramMB ));
+  }
+#endif
+  return 1024;
+}
+
+//=======================================================================
+//function : defaultWorkingDirectory
+//=======================================================================
+
+std::string MgAdapt::defaultWorkingDirectory()
+{
+  std::string aTmpDir;
+
+  char *Tmp_dir = getenv("SALOME_TMP_DIR");
+  if(Tmp_dir != NULL)
+  {
+    aTmpDir = Tmp_dir;
+  }
+
+  if ( ! isFileExist( aTmpDir ))
+  {
+#ifdef WIN32
+    aTmpDir = "C:\\";
+#else
+    aTmpDir = "/tmp/";
+#endif
+  }
+  return aTmpDir;
+}
+//================================================================================
+/*!
+ * \brief Return a unique file name
+ */
+//================================================================================
+
+std::string MgAdapt::getFileName() const
+{
+  std::string aTmpDir = workingDir;
+  const char lastChar = *aTmpDir.rbegin();
+#ifdef WIN32
+  if(lastChar != '\\') aTmpDir+='\\';
+#else
+  if(lastChar != '/') aTmpDir+='/';
+#endif
+
+  SMESH_Comment aGenericName( aTmpDir );
+  aGenericName << "MgAdapt_";
+#ifndef WIN32
+  aGenericName << getpid();
+#else
+aGenericName << _getpid();
+#endif
+  aGenericName << "_";
+  aGenericName << std::chrono::system_clock::now().time_since_epoch().count();
+
+  return aGenericName;
+}
+//=======================================================================
+//function : defaultLogFile
+//=======================================================================
+
+std::string MgAdapt::defaultLogFile()
+{
+  std::string alogFile("MG_ADAPT.log");
+  return alogFile;
+}
+//=======================================================================
+//function : defaultUseConstantValue
+//=======================================================================
+
+bool MgAdapt::defaultUseConstantValue()
+{
+  return false;
+}
+//=======================================================================
+//function : defaultUseNoTimeStep
+//=======================================================================
+
+bool MgAdapt::defaultUseNoTimeStep()
+{
+  return true;
+}
+//=======================================================================
+//function : defaultRemoveLogOnSuccess
+//=======================================================================
+
+bool MgAdapt::defaultRemoveLogOnSuccess()
+{
+  return true;
+}
+//=======================================================================
+//function : defaultPrintLogInFile
+//=======================================================================
+
+bool MgAdapt::defaultPrintLogInFile()
+{
+  return false;
+}
+//=======================================================================
+//function : defaultUseChosenTimeStep
+//=======================================================================
+
+bool MgAdapt::defaultUseChosenTimeStep()
+{
+  return false;
+}
+//=======================================================================
+//function : UseLastTimeStep
+//=======================================================================
+
+bool MgAdapt::defaultUseLastTimeStep()
+{
+  return false;
+}
+//=======================================================================
+//function : defaultUseBackgroundMap
+//=======================================================================
+
+bool MgAdapt::defaultUseBackgroundMap()
+{
+  return false;
+}
+//=======================================================================
+//function : defaultKeepFiles
+//=======================================================================
+
+bool MgAdapt::defaultKeepFiles()
+{
+  return false;
+}
+//=======================================================================
+//function : defaultUseLocalMap
+//=======================================================================
+
+bool MgAdapt::defaultUseLocalMap()
+{
+  return true;
+}
+//=======================================================================
+//function : defaultPublish
+//=======================================================================
+
+bool MgAdapt::defaultPublish()
+{
+  return false;
+}
+//=======================================================================
+//function : defaultMeshOutMed
+//=======================================================================
+
+bool MgAdapt::defaultMeshOutMed()
+{
+  return true;
+}
+//=======================================================================
+//function : defaultFromMedFile
+//=======================================================================
+
+bool MgAdapt::defaultFromMedFile()
+{
+  return true;
+}
+//=======================================================================
+//function : defaultVerboseLevel
+//=======================================================================
+
+int  MgAdapt::defaultVerboseLevel()
+{
+  return 3;
+}
+std::string MgAdapt::getExeName()
+{
+  return "mg-adapt.exe";
+}
+void MgAdapt::copyMgAdaptHypothesisData( const MgAdaptHypothesisData* from)
+{
+  data->myFileInDir = from->myFileInDir;
+  data->myMeshFileIn = from->myMeshFileIn;
+  data->myMeshFileBackground = from->myMeshFileBackground;
+  data->myOutMeshName = from->myOutMeshName;
+  data->myMeshFileOut = from->myMeshFileOut;
+  data->myFileOutDir = from->myFileOutDir;
+  data->myFileSizeMapDir = from->myFileSizeMapDir;
+  data->myFieldName = from->myFieldName;
+  data->fromMedFile = from->fromMedFile;
+  data->myPublish = from->myPublish;
+  data->myMeshOutMed = from->myMeshOutMed;
+  data->myUseLocalMap = from->myUseLocalMap;
+  data->myUseBackgroundMap = from->myUseBackgroundMap;
+  data->myUseConstantValue = from->myUseConstantValue;
+  data->myConstantValue = from->myConstantValue;
+  data->myTimeStep = from->myTimeStep;
+  data->myRank = from->myRank;
+  data->myUseNoTimeStep = from->myUseNoTimeStep;
+  data->myUseLastTimeStep = from->myUseLastTimeStep;
+  data->myUseChosenTimeStep = from->myUseChosenTimeStep;
+  data->myWorkingDir = from->myWorkingDir;
+  data->myLogFile = from->myLogFile;
+  data->myPrintLogInFile = from->myPrintLogInFile;
+  data->myKeepFiles = from->myKeepFiles;
+  data->myRemoveLogOnSuccess = from->myRemoveLogOnSuccess;
+  data->myVerboseLevel = from->myVerboseLevel;
+}
+
+std::vector<std::string> MgAdapt::getListFieldsNames(std::string fileIn)
+{
+  MEDCoupling::MCAuto<MEDCoupling::MEDFileData> mfd = MEDCoupling::MEDFileData::New(fileIn);
+  std::vector<std::string> listFieldsNames(mfd->getFields()->getFieldsNames());
+  return listFieldsNames ;
+}
+
+void MgAdapt::checkDimensionOptionAdaptation()
+{
+  // Quand le maillage est 3D, tout est possible
+  // Quand le maillage est 2D, il faut 'surface' sauf si carte de fonds 3D
+  MEDCoupling::MCAuto<MEDCoupling::MEDFileData> mfd = MEDCoupling::MEDFileData::New(medFileIn);
+  int meshdim = mfd->getMeshes()->getMeshAtPos(0)->getMeshDimension() ;
+//   std::cout << "meshdim = " << meshdim << std::endl;
+
+  if ( meshdim == 2 )
+  {
+    std::string optionName   = "adaptation";
+    std::string optionValue = getOptionValue(optionName);
+//     std::cout << "optionValue = '" << optionValue <<"'"<< std::endl;
+    bool a_tester = false ;
+    // carte locale ou constante : impératif d'avoir "surface"
+    if ( useLocalMap || useConstantValue) a_tester = true ;
+    // carte de fond : impératif d'avoir "surface" si le fonds est aussi 2D
+    else
+    {
+      MEDCoupling::MCAuto<MEDCoupling::MEDFileData> mfdbg = MEDCoupling::MEDFileData::New(sizeMapFile);
+      int meshdimbg = mfdbg->getMeshes()->getMeshAtPos(0)->getMeshDimension() ;
+//       std::cout << "meshdimbg = " << meshdimbg << std::endl;
+      if ( meshdimbg == 2 ) a_tester = true ;
+    }
+    if ( a_tester )
+    {
+      if ( optionValue == "" ) setOptionValue (optionName, "surface");
+      else
+      {
+        if ( optionValue != "surface" )
+        {
+          THROW_SALOME_EXCEPTION("Mesh dimension is 2; the option should be 'surface'"
+                                 " instead of '" << optionValue << "'.");
+        }
+      }
+    }
+  }
+}
+
+void MgAdapt::checkFieldName(std::string fileIn)
+{
+  bool ret = false ;
+  std::vector<std::string> listFieldsNames = getListFieldsNames(fileIn);
+  std::size_t jaux(listFieldsNames.size());
+  for(std::size_t j=0;j<jaux;j++)
+  {
+    if ( fieldName == listFieldsNames[j] )
+    {
+      ret = true ;
+      break ;
+    }
+  }
+  if ( ! ret )
+  {
+    std::cout << "Available field names:" << std::endl;
+    for(std::size_t j=0;j<jaux;j++)
+    { std::cout << listFieldsNames[j] << std::endl;}
+    THROW_SALOME_EXCEPTION( "Field " << fieldName << " is not found.");
+  }
+}
+
+void MgAdapt::checkTimeStepRank(std::string fileIn)
+{
+  bool ret = false ;
+  MEDCoupling::MCAuto<MEDCoupling::MEDFileData> mfd = MEDCoupling::MEDFileData::New(fileIn);
+  MEDCoupling::MCAuto<MEDCoupling::MEDFileAnyTypeFieldMultiTS> fts( mfd->getFields()->getFieldWithName(fieldName) );
+  std::vector<double> timevalue;
+  std::vector< std::pair<int,int> > timesteprank = fts->getTimeSteps(timevalue);
+  std::size_t jaux(timesteprank.size());
+  for(std::size_t j=0;j<jaux;j++)
+  {
+    if ( ( timeStep == timesteprank[j].first ) & ( rank == timesteprank[j].second ) )
+    {
+      ret = true ;
+      break ;
+    }
+  }
+  if ( ! ret )
+  {
+    std::cout << "Available (Time step, Rank):" << std::endl;
+    for(std::size_t j=0;j<jaux;j++)
+    { std::cout << "(Time step = " << timesteprank[j].first << ", Rank = " << timesteprank[j].second << ")" << std::endl;}
+    THROW_SALOME_EXCEPTION("(Time step = " << timeStep << ", Rank = " << rank << ") is not found.");
+  }
+}
+
+void MgAdapt::convertMedFile(std::string& meshFormatMeshFileName, std::string& solFormatFieldFileName, std::string& meshFormatsizeMapFile)
+{
+  std::vector<std::string> fieldFileNames;
+  MEDCoupling::MeshFormatWriter writer;
+  MEDCoupling::MCAuto<MEDCoupling::MEDFileData> mfd = MEDCoupling::MEDFileData::New(medFileIn);
+  MEDCoupling::MEDFileMeshes* meshes = mfd->getMeshes();
+  MEDCoupling::MEDFileMesh* fileMesh = meshes->getMeshAtPos(0); // ok only one mesh in file!
+  if (meshNameOut =="")
+    meshNameOut = fileMesh->getName();
+  storeGroupsAndFams(fileMesh);
+
+  MEDCoupling::MCAuto<MEDCoupling::MEDFileFields> fields = MEDCoupling::MEDFileFields::New();
+  solFormatFieldFileName = getFileName();
+  solFormatFieldFileName+=".sol";
+  fieldFileNames.push_back(solFormatFieldFileName);
+
+  if (useBackgroundMap)
+  {
+    checkFieldName(sizeMapFile) ;
+    checkTimeStepRank(sizeMapFile) ;
+    meshFormatsizeMapFile = getFileName();
+    meshFormatsizeMapFile += ".mesh";
+    buildBackGroundMeshAndSolFiles(fieldFileNames, meshFormatsizeMapFile);
+  }
+  else if(useLocalMap)
+  {
+    checkFieldName(medFileIn) ;
+    checkTimeStepRank(medFileIn) ;
+    MEDCoupling::MCAuto<MEDCoupling::MEDFileAnyTypeFieldMultiTS> fts( mfd->getFields()->getFieldWithName(fieldName) );
+    MEDCoupling::MCAuto<MEDCoupling::MEDFileAnyTypeField1TS> f = fts->getTimeStep(timeStep, rank);
+    MEDCoupling::MCAuto<MEDCoupling::MEDFileFieldMultiTS> tmFts = MEDCoupling::DynamicCast<MEDCoupling::MEDFileAnyTypeFieldMultiTS,MEDCoupling::MEDFileFieldMultiTS>(fts);
+
+    // if not able to cast to double field, try float field
+    if (!tmFts)
+    {
+      MEDCoupling::MCAuto<MEDCoupling::MEDFileFloatFieldMultiTS>  tmFtsFloat = MEDCoupling::DynamicCast<MEDCoupling::MEDFileAnyTypeFieldMultiTS,MEDCoupling::MEDFileFloatFieldMultiTS>(fts);
+      if (!tmFtsFloat)
+        THROW_SALOME_EXCEPTION("\nUnexpected field type.\n");
+      // convert float field to double
+      tmFts = tmFtsFloat->convertToDouble();
+    }
+
+    fields->pushField(tmFts);
+
+    writer.setFieldFileNames( fieldFileNames);
+  }
+  else
+  {
+    MEDCoupling::MCAuto<MEDCoupling::MEDCouplingMesh> mesh = fileMesh->getMeshAtLevel(1); // nodes mesh
+    MEDCoupling::MCAuto<MEDCoupling::MEDCouplingUMesh> umesh = mesh->buildUnstructured(); // nodes mesh
+    int dim  =  umesh->getSpaceDimension();
+    int version =  sizeof(double) < 8 ? 1 : 2;
+    mcIdType nbNodes =  umesh->getNumberOfNodes();
+    buildConstantSizeMapSolFile(solFormatFieldFileName, dim, version, nbNodes);
+  }
+
+  mfd->setFields( fields );
+  meshFormatMeshFileName = getFileName();
+  meshFormatMeshFileName+=".mesh";
+  writer.setMeshFileName(meshFormatMeshFileName);
+  writer.setMEDFileDS( mfd);
+  writer.write();
+
+}
+
+void MgAdapt::convertMeshFile(std::string& meshFormatIn, std::vector< std::string>& solFieldFileNames) const
+{
+  MEDCoupling::MeshFormatReader reader(meshFormatIn, solFieldFileNames);
+
+  MEDCoupling::MCAuto<MEDCoupling::MEDFileData> mfd = reader.loadInMedFileDS();
+  // write MED
+  MEDCoupling::MEDFileMeshes* meshes = mfd->getMeshes();
+  MEDCoupling::MEDFileMesh* fileMesh = meshes->getMeshAtPos(0); // ok only one mesh in file!
+  fileMesh->setName(meshNameOut);
+  restoreGroupsAndFams(fileMesh);
+  mfd->write(medFileOut, 2);
+}
+
+void MgAdapt::storeGroupsAndFams(MEDCoupling::MEDFileMesh* fileMesh)
+{
+  storefams(fileMesh);
+  storeGroups(fileMesh);
+}
+
+void MgAdapt::restoreGroupsAndFams(MEDCoupling::MEDFileMesh* fileMesh) const
+{
+  restorefams(fileMesh);
+  restoreGroups(fileMesh);
+}
+void MgAdapt::storeGroups(MEDCoupling::MEDFileMesh* fileMesh)
+{
+  std::map<std::string, std::vector<std::string> > grpFams = fileMesh->getGroupInfo();
+  std::map<std::string, std::vector<std::string> >::iterator g2ff = grpFams.begin();
+
+  for ( ; g2ff != grpFams.end(); ++g2ff )
+  {
+    std::string             groupName = g2ff->first;
+    std::vector<std::string> famNames = g2ff->second;
+
+    if ( famNames.empty() ) continue;
+    std::vector< int> famListId;
+    for ( size_t i = 0; i < famNames.size(); ++i )
+    {
+      famListId.push_back( FromIdType<int>( fileMesh->getFamilyId( famNames[i].c_str() )));
+    }
+    group grp(groupName, famListId, famNames);
+    groupVec.push_back(grp);
+  }
+}
+
+void MgAdapt::storefams(MEDCoupling::MEDFileMesh* fileMesh)
+{
+  std::map<std::string, mcIdType> grpFams = fileMesh->getFamilyInfo();
+  std::map<std::string, mcIdType >::iterator f = grpFams.begin();
+
+  for ( ; f != grpFams.end(); ++f )
+  {
+    if(!f->second) continue;  // FAMILLE_ZERO
+    family fs(f->first, FromIdType<int>( f->second ));
+    famVec.push_back(fs);
+  }
+
+}
+
+void MgAdapt::restorefams(MEDCoupling::MEDFileMesh* fileMesh) const
+{
+  std::vector<family>::const_iterator fIt = famVec.begin();
+
+  for (; fIt!=famVec.end(); ++fIt)
+  {
+    try  //
+    {
+      std::string givenFamNameFromMeshGemConverter = fileMesh->getFamilyNameGivenId( std::abs(fIt->_famId) );
+      fileMesh->changeFamilyId(std::abs(fIt->_famId), fIt->_famId);
+      fileMesh->changeFamilyName(givenFamNameFromMeshGemConverter, fIt->_famName);
+    }
+    catch (const std::exception& e)
+    {
+      std::cerr<<e.what();
+    }
+  }
+}
+
+void MgAdapt::restoreGroups(MEDCoupling::MEDFileMesh* fileMesh) const
+{
+  std::map<std::string, std::vector<std::string> > info;
+  std::vector <group>::const_iterator grpFams = groupVec.begin();
+
+  for (; grpFams!=groupVec.end(); ++grpFams)
+  {
+    info.insert(std::pair <std::string, std::vector<std::string> > (grpFams->_name, grpFams->_famNames) );
+  }
+
+  fileMesh->setGroupInfo(info);
+}
+
+void MgAdapt::buildConstantSizeMapSolFile(const std::string& solFormatFieldFileName, const int dim, const int version, const size_t nbNodes) const
+{
+  MeshFormat::Localizer loc;
+  MeshFormat::MeshFormatParser writer;
+  int fileId = writer.GmfOpenMesh( solFormatFieldFileName.c_str(), GmfWrite, version, dim);
+  int typTab[] = {GmfSca};
+  writer.GmfSetKwd(fileId, MeshFormat::GmfSolAtVertices, (int)nbNodes, 1, typTab);
+  for (size_t i = 0; i<nbNodes; i++)
+  {
+    double valTab[1] = {constantValue};
+    writer.GmfSetLin( fileId, MeshFormat::GmfSolAtVertices, valTab);
+  }
+  writer.GmfCloseMesh(fileId);
+}
+
+void MgAdapt::buildBackGroundMeshAndSolFiles(const std::vector<std::string>& fieldFileNames, const std::string& meshFormatsizeMapFile) const
+{
+  MEDCoupling::MCAuto<MEDCoupling::MEDFileData> tmpMfd = MEDCoupling::MEDFileData::New(sizeMapFile);
+  MEDCoupling::MEDFileFields* tmpFields = tmpMfd->getFields();
+  MEDCoupling::MCAuto<MEDCoupling::MEDFileAnyTypeFieldMultiTS> fts( tmpFields->getFieldWithName(fieldName) );
+  MEDCoupling::MCAuto<MEDCoupling::MEDFileFieldMultiTS>  fts1 = MEDCoupling::DynamicCastSafe<MEDCoupling::MEDFileAnyTypeFieldMultiTS,MEDCoupling::MEDFileFieldMultiTS>(fts);
+  MEDCoupling::MCAuto<MEDCoupling::MEDFileAnyTypeField1TS> f = fts1->getTimeStep(timeStep, rank);
+  MEDCoupling::MCAuto<MEDCoupling::MEDFileFieldMultiTS> tmFts = MEDCoupling::MEDFileFieldMultiTS::New();
+  tmFts->pushBackTimeStep(f);
+
+  MEDCoupling::MCAuto<MEDCoupling::MEDFileFields> tmp_fields = MEDCoupling::MEDFileFields::New();
+  tmp_fields->pushField(tmFts);
+
+  tmpMfd->setFields( tmp_fields );
+  MEDCoupling::MeshFormatWriter tmpWriter;
+  tmpWriter.setMeshFileName(meshFormatsizeMapFile);
+  tmpWriter.setFieldFileNames( fieldFileNames);
+  tmpWriter.setMEDFileDS(tmpMfd);
+  tmpWriter.write();
+}
+
+MgAdapt::Status MgAdapt::addMessage(const std::string& msg,
+                                    const bool         isFatal/*=false*/)
+{
+  if ( isFatal )
+    _errorMessages.clear(); // warnings are useless if a fatal error encounters
+
+  _errorMessages.push_back( msg );
+
+  //~MESSAGE(msg);
+  if (SALOME::VerbosityActivated())
+    std::cout << msg << std::endl;
+
+  return ( _status = isFatal ? MgAdapt::DRS_FAIL : MgAdapt::DRS_WARN_SKIP_ELEM );
+}
+
+void MgAdapt::updateTimeStepRank()
+{
+
+  med_int arank;
+  med_int tmst;
+  if (myUseNoTimeStep)
+  {
+    arank = MED_NO_IT;
+    tmst  = MED_NO_DT ;
+    setRankTimeStep((int)tmst, (int)arank);
+  }
+  else if (myUseLastTimeStep)
+  {
+    std::string fieldFile = useBackgroundMap ? sizeMapFile : medFileIn;
+    getTimeStepInfos(fieldFile, tmst, arank, fieldName);
+    setRankTimeStep((int)tmst, (int)arank);
+  }
+}
diff --git a/src/SMESH/MG_ADAPT.hxx b/src/SMESH/MG_ADAPT.hxx
new file mode 100644 (file)
index 0000000..323a3c0
--- /dev/null
@@ -0,0 +1,278 @@
+// Copyright (C) 2020-2024  CEA, EDF
+//
+// 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 MG_ADAPT_HXX
+#define MG_ADAPT_HXX
+
+#include <string>
+#include <map>
+#include <vector>
+#include <set>
+
+#include "SMESH_SMESH.hxx"
+
+namespace MEDCoupling
+{
+  class MEDFileMesh;
+}
+
+namespace MG_ADAPT
+{
+typedef std::map< std::string, std::string > TOptionValues;
+typedef std::set< std::string > TOptionNames;
+
+std::string remove_extension(const std::string& filename);
+
+struct MgAdaptHypothesisData
+{
+  std::string myFileInDir, myMeshFileIn, myInMeshName, myMeshFileBackground, myOutMeshName,
+              myMeshFileOut, myFileOutDir, myFileSizeMapDir, myFieldName;
+  bool fromMedFile;
+  bool myPublish, myMeshOutMed;
+  bool myUseLocalMap, myUseBackgroundMap, myUseConstantValue;
+  double myConstantValue;
+  int  myRank, myTimeStep;
+  bool myUseNoTimeStep, myUseLastTimeStep, myUseChosenTimeStep;
+  std::string myWorkingDir, myLogFile;
+  bool myPrintLogInFile, myKeepFiles, myRemoveLogOnSuccess;
+  int myVerboseLevel;
+};
+
+
+class SMESH_EXPORT MgAdapt
+{
+
+public:
+
+  MgAdapt();
+  MgAdapt(MgAdaptHypothesisData*);
+  MgAdapt(const MgAdapt&);
+  ~MgAdapt();
+  void buildModel();
+  void setData( MgAdaptHypothesisData* data);
+
+  void setMedFileIn(std::string fileName);
+  std::string getMedFileIn();
+
+  void setMedFileOut(std::string fileOut);
+  std::string getMedFileOut();
+
+  void setMeshName(std::string name);
+  std::string getMeshName();
+
+  void setMeshNameOut(std::string  name);
+  std::string getMeshNameOut();
+
+  void setMeshOutMed(bool mybool);
+  bool getMeshOutMed();
+
+  void setPublish(bool mybool);
+  bool getPublish();
+
+  void setFieldName(std::string myFieldName);
+  std::string getFieldName();
+
+  void setTimeStep(int time);
+  int getTimeStep() const;
+
+  void setRankTimeStep(int time, int myRank);
+  int getRank();
+
+  void setTimeStepRankLast();
+  void setNoTimeStep();
+  void setChosenTimeStepRank();
+  void updateTimeStepRank();
+
+  void setLogFile(std::string);
+  std::string getLogFile();
+
+  void setVerbosityLevel(int verbosity);
+  int getVerbosityLevel();
+
+  void setRemoveOnSuccess(bool mybool);
+  bool getRemoveOnSuccess();
+
+  MgAdaptHypothesisData* getData() const;
+
+  void setUseLocalMap(bool mybool);
+  bool getUseLocalMap();
+
+  void setUseBackgroundMap(bool mybool);
+  bool getUseBackgroundMap();
+
+  void setUseConstantValue(bool mybool);
+  bool getUseConstantValue();
+
+  void setConstantValue(double cnst);
+  double getConstantValue() const;
+
+  void setSizeMapFile(std::string mapFile);
+  std::string getSizeMapFile();
+
+  void setFromMedFile(bool mybool);
+  bool isFromMedFile();
+
+  void setKeepWorkingFiles(bool mybool);
+  bool getKeepWorkingFiles();
+
+  void setPrintLogInFile(bool mybool);
+  bool getPrintLogInFile();
+
+  void setWorkingDir(std::string dir);
+  std::string getWorkingDir() const;
+
+
+  bool setAll();
+  static std::string getCommandToRun(MgAdapt* );
+  std::string getCommandToRun() ;
+  int compute(std::string& errStr);
+  std::string getFileName() const;
+  static std::string getExeName();
+  void copyMgAdaptHypothesisData( const MgAdaptHypothesisData* from) ;
+
+  void checkDirPath(std::string& dirPath);
+
+  bool hasOptionDefined( const std::string& optionName ) const;
+  void setOptionValue(const std::string& optionName,
+                      const std::string& optionValue);
+  std::string getOptionValue(const std::string& optionName,
+                              bool*              isDefault=0) const;
+  std::vector <std::string> getCustomOptionValuesStrVec() const;
+  std::vector <std::string> getOptionValuesStrVec() const;
+
+
+  TOptionValues        getOptionValues()       const;
+  const TOptionValues& getCustomOptionValues() const ;
+  static double toDbl(const std::string&, bool* isOk = 0);
+  static bool toBool(const std::string&, bool* isOk = 0);
+  static int toInt(const std::string&, bool* isOk = 0 );
+  static std::string toLowerStr(const std::string& str);
+
+  /*  default values */
+  static std::string defaultWorkingDirectory();
+  static std::string defaultLogFile();
+  static bool  defaultKeepFiles();
+  static bool  defaultRemoveLogOnSuccess();
+  static int   defaultVerboseLevel();
+  static bool  defaultPrintLogInFile();
+  static bool  defaultFromMedFile();
+  static bool  defaultMeshOutMed();
+  static bool  defaultPublish();
+  static bool  defaultUseLocalMap();
+  static bool  defaultUseBackgroundMap();
+  static bool  defaultUseConstantValue();
+  static bool  defaultUseNoTimeStep();
+  static bool  defaultUseLastTimeStep();
+  static bool  defaultUseChosenTimeStep();
+  static double  defaultMaximumMemory();
+
+  enum Status {
+    DRS_OK,
+    DRS_EMPTY,          // a file contains no mesh with the given name
+    DRS_WARN_RENUMBER,  // a file has overlapped ranges of element numbers,
+    // so the numbers from the file are ignored
+    DRS_WARN_SKIP_ELEM, // some elements were skipped due to incorrect file data
+    DRS_WARN_DESCENDING, // some elements were skipped due to descending connectivity
+    DRS_FAIL,            // general failure (exception etc.)
+    DRS_NO_TIME_STEP            // general failure (exception etc.)
+  };
+
+  struct group
+  {
+    std::string              _name;
+    std::vector<int>         _famListId;
+    std::vector<std::string> _famNames;
+    group(std::string name, std::vector<int> famListId, std::vector<std::string> famNames)
+      :_name(name), _famListId( famListId ), _famNames( famNames ) {}
+  };
+
+  struct family
+  {
+    std::string _famName;
+    int         _famId;
+    family(std::string famName, int famId):_famName(famName), _famId(famId) {}
+  };
+
+
+private :
+  bool fromMedFile;
+  std::string medFileIn;
+  std::string medFileOut;
+  std::string meshName;
+  std::string meshNameOut;
+  bool publish, meshOutMed;
+  bool useLocalMap, useBackgroundMap, useConstantValue;
+  bool myUseLastTimeStep, myUseNoTimeStep, myUseChosenTimeStep;
+  std::string sizeMapFile;
+  std::string fieldName;
+  double constantValue;
+  int rank,  timeStep;
+
+  /* advanced options */
+
+
+  std::string logFile;
+  std::string workingDir;
+  int verbosityLevel;
+  bool removeOnSuccess;
+  bool toKeepWorkingFiles;
+  bool printLogInFile;
+
+  /* Model DATA */
+  MgAdaptHypothesisData* data;
+
+  /*            */
+
+  TOptionValues _option2value, _customOption2value;         // user defined values
+  TOptionValues _defaultOptionValues;                       // default values
+  TOptionNames  _doubleOptions, _charOptions, _boolOptions; // to find a type of option
+
+  std::vector <std::string> _errorMessages;
+  Status _status;
+  std::string meshFormatOutputMesh;
+  std::vector< std::string> solFormatOutput;
+  std::vector <group> groupVec;
+  std::vector <family> famVec;
+  std::vector< std::string> tmpFilesToBeDeleted;
+
+  /* convert MED-->.mesh format */
+  void convertMedFile(std::string& meshIn,std::string& solFileIn,  std::string& sizeMapIn)  ;
+  void storeGroups(MEDCoupling::MEDFileMesh* fileMesh);
+  void restoreGroups(MEDCoupling::MEDFileMesh* fileMesh) const;
+  void storefams(MEDCoupling::MEDFileMesh* fileMesh);
+  void restorefams(MEDCoupling::MEDFileMesh* fileMesh) const;
+  void storeGroupsAndFams(MEDCoupling::MEDFileMesh* fileMesh);
+  void restoreGroupsAndFams(MEDCoupling::MEDFileMesh* fileMesh) const;
+  void convertMeshFile(std::string& meshFormatIn, std::vector< std::string>& solFieldFileNames) const ;
+  void buildConstantSizeMapSolFile(const std::string& solFormatFieldFileName, const int dim, const int version, const size_t nbNodes) const;
+  void buildBackGroundMeshAndSolFiles(const std::vector<std::string>& fieldFileNames, const std::string& meshFormatsizeMapFile) const;
+  Status addMessage(const std::string& msg, const bool isFatal = false);
+  void execCmd( const char* cmd, int& err);
+  void cleanUp();
+  void appendMsgToLogFile(std::string& msg);
+  std::vector<std::string> getListFieldsNames(std::string fileIn) ;
+  void checkDimensionOptionAdaptation() ;
+  void checkFieldName(std::string fileIn) ;
+  void checkTimeStepRank(std::string fileIn) ;
+
+};
+
+} // namespace MG_ADAPT
+
+#endif // MG_ADAPT_HXX
index 44555e3d92aa507a66c616133845c8121ccc741f..a03fa748995b9a01a56824338013b169fb021882 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -169,7 +169,7 @@ const SMESH_Algo::Features& SMESH_Algo::GetFeatures( const std::string& algoType
 
 //=============================================================================
 /*!
- *  
+ *
  */
 //=============================================================================
 
@@ -186,7 +186,7 @@ SMESH_Algo::SMESH_Algo (int hypId, SMESH_Gen * gen)
 
 //=============================================================================
 /*!
- *  
+ *
  */
 //=============================================================================
 
@@ -198,7 +198,7 @@ SMESH_Algo::~SMESH_Algo()
 
 //=============================================================================
 /*!
- *  
+ *
  */
 //=============================================================================
 
@@ -238,7 +238,7 @@ istream & SMESH_Algo::LoadFrom(istream & load) { return load; }
 
 //=============================================================================
 /*!
- *  
+ *
  */
 //=============================================================================
 
@@ -252,7 +252,7 @@ const vector < string > &SMESH_Algo::GetCompatibleHypothesis()
  *  List the hypothesis used by the algorithm associated to the shape.
  *  Hypothesis associated to father shape -are- taken into account (see
  *  GetAppliedHypothesis). Relevant hypothesis have a name (type) listed in
- *  the algorithm. This method could be surcharged by specific algorithms, in 
+ *  the algorithm. This method could be surcharged by specific algorithms, in
  *  case of several hypothesis simultaneously applicable.
  */
 //=============================================================================
@@ -264,7 +264,7 @@ SMESH_Algo::GetUsedHypothesis(SMESH_Mesh &         aMesh,
 {
   SMESH_Algo* me = const_cast< SMESH_Algo* >( this );
 
-  std::list<const SMESHDS_Hypothesis *> savedHyps; // don't delete the list if 
+  std::list<const SMESHDS_Hypothesis *> savedHyps; // don't delete the list if
   savedHyps.swap( me->_usedHypList );              // it does not change (#16578)
 
   me->_usedHypList.clear();
@@ -565,7 +565,7 @@ bool SMESH_Algo::IsStraight( const TopoDS_Edge & E,
     return false; // E seems closed
 
   double edgeTol = 10 * curve.Tolerance();
-  double lenTol2 = lineLen2 * 1e-4; 
+  double lenTol2 = lineLen2 * 1e-4;
   double tol2 = Min( edgeTol * edgeTol, lenTol2 );
 
   const double nbSamples = 7;
@@ -816,7 +816,7 @@ SMESH_Algo::EMeshError SMESH_Algo::GetMeshError(SMESH_subMesh* subMesh)
 /*!
  * \brief Sets event listener to submeshes if necessary
  * \param subMesh - submesh where algo is set
- * 
+ *
  * After being set, event listener is notified on each event of a submesh.
  * By default non listener is set
  */
@@ -1020,7 +1020,7 @@ void SMESH_Algo::addBadInputElements(const SMESHDS_SubMesh* sm,
 
 //=============================================================================
 /*!
- *  
+ *
  */
 //=============================================================================
 
@@ -1034,16 +1034,16 @@ void SMESH_Algo::addBadInputElements(const SMESHDS_SubMesh* sm,
 
 //=============================================================================
 /*!
- *  
+ *
  */
 //=============================================================================
 
-int SMESH_Algo::NumberOfPoints(SMESH_Mesh& aMesh, const TopoDS_Wire& W)
+smIdType SMESH_Algo::NumberOfPoints(SMESH_Mesh& aMesh, const TopoDS_Wire& W)
 {
-  int nbPoints = 0;
+  smIdType nbPoints = 0;
   for (TopExp_Explorer exp(W,TopAbs_EDGE); exp.More(); exp.Next()) {
     const TopoDS_Edge& E = TopoDS::Edge(exp.Current());
-    int nb = aMesh.GetSubMesh(E)->GetSubMeshDS()->NbNodes();
+    smIdType nb = aMesh.GetSubMesh(E)->GetSubMeshDS()->NbNodes();
     if(_quadraticMesh)
       nb = nb/2;
     nbPoints += nb + 1; // internal points plus 1 vertex of 2 (last point ?)
@@ -1068,6 +1068,7 @@ bool SMESH_2D_Algo::FixInternalNodes(const SMESH_ProxyMesh& mesh,
     return false;
 
   SMESH_MesherHelper helper( *mesh.GetMesh() );
+  helper.SetSubShape( face );
 
   // get all faces from a proxy sub-mesh
   typedef SMDS_StdIterator< const SMDS_MeshElement*, SMDS_ElemIteratorPtr > TIterator;
@@ -1144,7 +1145,7 @@ bool SMESH_2D_Algo::FixInternalNodes(const SMESH_ProxyMesh& mesh,
   {
     ++iRow1, ++iRow2;
 
-    // get the first quad in the next face row 
+    // get the first quad in the next face row
     if (( quad = SMESH_MeshAlgos::FindFaceInSet( nodeRows[iRow1][0],
                                                  nodeRows[iRow1][1],
                                                  allFaces, /*avoid=*/firstRowQuads,
@@ -1184,17 +1185,28 @@ bool SMESH_2D_Algo::FixInternalNodes(const SMESH_ProxyMesh& mesh,
 
   // get params of the first (bottom) and last (top) node rows
   UVPtStructVec uvB( nodeRows[0].size() ), uvT( nodeRows[0].size() );
+  bool uvOk = false, *toCheck = helper.GetPeriodicIndex() ? &uvOk : nullptr;
+  const bool isFix3D = helper.HasDegeneratedEdges();
   for ( int isBot = 0; isBot < 2; ++isBot )
   {
+    iRow1 = isBot ? 0 : nodeRows.size()-1;
+    iRow2 = isBot ? 1 : nodeRows.size()-2;
     UVPtStructVec &                  uvps = isBot ? uvB : uvT;
-    vector< const SMDS_MeshNode* >& nodes = nodeRows[ isBot ? 0 : nodeRows.size()-1 ];
-    for ( size_t i = 0; i < nodes.size(); ++i )
+    vector< const SMDS_MeshNode* >& nodes = nodeRows[ iRow1 ];
+    const size_t rowLen = nodes.size();
+    for ( size_t i = 0; i < rowLen; ++i )
     {
       uvps[i].node = nodes[i];
-      gp_XY uv = helper.GetNodeUV( face, uvps[i].node );
-      uvps[i].u = uv.Coord(1);
-      uvps[i].v = uv.Coord(2);
       uvps[i].x = 0;
+      if ( !isFix3D )
+      {
+        size_t i2 = i;
+        if ( i == 0          ) i2 = 1;
+        if ( i == rowLen - 1 ) i2 = rowLen - 2;
+        gp_XY uv = helper.GetNodeUV( face, uvps[i].node, nodeRows[iRow2][i2], toCheck );
+        uvps[i].u = uv.Coord(1);
+        uvps[i].v = uv.Coord(2);
+      }
     }
     // calculate x (normalized param)
     for ( size_t i = 1; i < nodes.size(); ++i )
@@ -1207,15 +1219,23 @@ bool SMESH_2D_Algo::FixInternalNodes(const SMESH_ProxyMesh& mesh,
   UVPtStructVec uvL( nodeRows.size() ), uvR( nodeRows.size() );
   for ( int isLeft = 0; isLeft < 2; ++isLeft )
   {
-    UVPtStructVec & uvps = isLeft ? uvL : uvR;
-    const int       iCol = isLeft ? 0 : nodeRows[0].size() - 1;
-    for ( size_t i = 0; i < nodeRows.size(); ++i )
+    UVPtStructVec &  uvps = isLeft ? uvL : uvR;
+    const int       iCol1 = isLeft ? 0 : nodeRows[0].size() - 1;
+    const int       iCol2 = isLeft ? 1 : nodeRows[0].size() - 2;
+    const size_t   nbRows = nodeRows.size();
+    for ( size_t i = 0; i < nbRows; ++i )
     {
-      uvps[i].node = nodeRows[i][iCol];
-      gp_XY uv = helper.GetNodeUV( face, uvps[i].node );
-      uvps[i].u = uv.Coord(1);
-      uvps[i].v = uv.Coord(2);
+      uvps[i].node = nodeRows[i][iCol1];
       uvps[i].y = 0;
+      if ( !isFix3D )
+      {
+        size_t i2 = i;
+        if ( i == 0          ) i2 = 1;
+        if ( i == nbRows - 1 ) i2 = nbRows - 2;
+        gp_XY uv = helper.GetNodeUV( face, uvps[i].node, nodeRows[i2][iCol2], toCheck );
+        uvps[i].u = uv.Coord(1);
+        uvps[i].v = uv.Coord(2);
+      }
     }
     // calculate y (normalized param)
     for ( size_t i = 1; i < nodeRows.size(); ++i )
@@ -1226,31 +1246,65 @@ bool SMESH_2D_Algo::FixInternalNodes(const SMESH_ProxyMesh& mesh,
 
   // update node coordinates
   SMESHDS_Mesh*   meshDS = mesh.GetMeshDS();
-  Handle(Geom_Surface) S = BRep_Tool::Surface( face );
-  gp_XY a0 ( uvB.front().u, uvB.front().v );
-  gp_XY a1 ( uvB.back().u,  uvB.back().v );
-  gp_XY a2 ( uvT.back().u,  uvT.back().v );
-  gp_XY a3 ( uvT.front().u, uvT.front().v );
-  for ( size_t iRow = 1; iRow < nodeRows.size()-1; ++iRow )
+  if ( !isFix3D )
   {
-    gp_XY p1 ( uvR[ iRow ].u, uvR[ iRow ].v );
-    gp_XY p3 ( uvL[ iRow ].u, uvL[ iRow ].v );
-    const double y0 = uvL[ iRow ].y;
-    const double y1 = uvR[ iRow ].y;
-    for ( size_t iCol = 1; iCol < nodeRows[0].size()-1; ++iCol )
+    Handle(Geom_Surface) S = BRep_Tool::Surface( face );
+    gp_XY a0 ( uvB.front().u, uvB.front().v );
+    gp_XY a1 ( uvB.back().u,  uvB.back().v );
+    gp_XY a2 ( uvT.back().u,  uvT.back().v );
+    gp_XY a3 ( uvT.front().u, uvT.front().v );
+    for ( size_t iRow = 1; iRow < nodeRows.size()-1; ++iRow )
     {
-      gp_XY p0 ( uvB[ iCol ].u, uvB[ iCol ].v );
-      gp_XY p2 ( uvT[ iCol ].u, uvT[ iCol ].v );
-      const double x0 = uvB[ iCol ].x;
-      const double x1 = uvT[ iCol ].x;
-      double x = (x0 + y0 * (x1 - x0)) / (1 - (y1 - y0) * (x1 - x0));
-      double y = y0 + x * (y1 - y0);
-      gp_XY uv = helper.calcTFI( x, y, a0,a1,a2,a3, p0,p1,p2,p3 );
-      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_FacePositionPtr pos = n->GetPosition() )
-        pos->SetParameters( uv.Coord(1), uv.Coord(2) );
+      gp_XY p1 ( uvR[ iRow ].u, uvR[ iRow ].v );
+      gp_XY p3 ( uvL[ iRow ].u, uvL[ iRow ].v );
+      const double y0 = uvL[ iRow ].y;
+      const double y1 = uvR[ iRow ].y;
+      for ( size_t iCol = 1; iCol < nodeRows[0].size()-1; ++iCol )
+      {
+        gp_XY p0 ( uvB[ iCol ].u, uvB[ iCol ].v );
+        gp_XY p2 ( uvT[ iCol ].u, uvT[ iCol ].v );
+        const double x0 = uvB[ iCol ].x;
+        const double x1 = uvT[ iCol ].x;
+        double x = (x0 + y0 * (x1 - x0)) / (1 - (y1 - y0) * (x1 - x0));
+        double y = y0 + x * (y1 - y0);
+        gp_XY uv = helper.calcTFI( x, y, a0,a1,a2,a3, p0,p1,p2,p3 );
+        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_FacePositionPtr pos = n->GetPosition() )
+          pos->SetParameters( uv.Coord(1), uv.Coord(2) );
+      }
+    }
+  }
+  else
+  {
+    Handle(ShapeAnalysis_Surface) S = helper.GetSurface( face );
+    SMESH_NodeXYZ a0 ( uvB.front().node );
+    SMESH_NodeXYZ a1 ( uvB.back().node );
+    SMESH_NodeXYZ a2 ( uvT.back().node );
+    SMESH_NodeXYZ a3 ( uvT.front().node );
+    for ( size_t iRow = 1; iRow < nodeRows.size()-1; ++iRow )
+    {
+      SMESH_NodeXYZ p1 ( uvR[ iRow ].node );
+      SMESH_NodeXYZ p3 ( uvL[ iRow ].node );
+      const double y0 = uvL[ iRow ].y;
+      const double y1 = uvR[ iRow ].y;
+      for ( size_t iCol = 1; iCol < nodeRows[0].size()-1; ++iCol )
+      {
+        SMESH_NodeXYZ p0 ( uvB[ iCol ].node );
+        SMESH_NodeXYZ p2 ( uvT[ iCol ].node );
+        const double x0 = uvB[ iCol ].x;
+        const double x1 = uvT[ iCol ].x;
+        double x = (x0 + y0 * (x1 - x0)) / (1 - (y1 - y0) * (x1 - x0));
+        double y = y0 + x * (y1 - y0);
+        gp_Pnt p = helper.calcTFI( x, y, a0,a1,a2,a3, p0,p1,p2,p3 );
+        gp_Pnt2d uv = S->ValueOfUV( p, Precision::Confusion() );
+        p = S->Value( uv );
+        const SMDS_MeshNode* n = nodeRows[iRow][iCol];
+        meshDS->MoveNode( n, p.X(), p.Y(), p.Z() );
+        if ( SMDS_FacePositionPtr pos = n->GetPosition() )
+          pos->SetParameters( uv.Coord(1), uv.Coord(2) );
+      }
     }
   }
   return true;
index 72c17b7f972d7de7360c7a492ec366cae927daa8..127d437a114720241187e8368bb3288fa34ee152 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -60,8 +60,8 @@ class TopoDS_Vertex;
 class TopoDS_Wire;
 class gp_XYZ;
 
-typedef std::map< SMESH_subMesh*, std::vector<int> >           MapShapeNbElems;
-typedef std::map< SMESH_subMesh*, std::vector<int> >::iterator MapShapeNbElemsItr;
+typedef std::map< SMESH_subMesh*, std::vector<smIdType> >           MapShapeNbElems;
+typedef std::map< SMESH_subMesh*, std::vector<smIdType> >::iterator MapShapeNbElemsItr;
 
 // ==================================================================================
 /*!
@@ -198,15 +198,15 @@ class SMESH_EXPORT SMESH_Algo : public SMESH_Hypothesis
 
   /*!
    * \brief Return a list of compatible hypotheses used to mesh a shape
-    * \param aMesh - the mesh 
+    * \param aMesh - the mesh
     * \param aShape - the shape
     * \param ignoreAuxiliary - do not include auxiliary hypotheses in the list
     * \retval const std::list <const SMESHDS_Hypothesis*> - hypotheses list
-   * 
+   *
    *  List the hypothesis used by the algorithm associated to the shape.
    *  Hypothesis associated to father shape -are- taken into account (see
    *  GetAppliedHypothesis). Relevant hypothesis have a name (type) listed in
-   *  the algorithm. This method could be surcharged by specific algorithms, in 
+   *  the algorithm. This method could be surcharged by specific algorithms, in
    *  case of several hypothesis simultaneously applicable.
    */
   virtual const std::list <const SMESHDS_Hypothesis *> &
@@ -277,10 +277,13 @@ public:
   // 6 - if algo !NeedDiscreteBoundary() but requires presence of
   // hypotheses of dimension <dim> to generate all-dimensional mesh.
   // This info is used not to issue warnings on hiding of lower global algos.
+  //
+
+  virtual void setSubMeshesToCompute(SMESH_subMesh * aSubMesh) {SubMeshesToCompute().assign( 1, aSubMesh );}
 
 public:
   // ==================================================================
-  // Methods to track non hierarchical dependencies between submeshes 
+  // Methods to track non hierarchical dependencies between submeshes
   // ==================================================================
 
   /*!
@@ -292,7 +295,7 @@ public:
    * By default none listener is set
    */
   virtual void SetEventListener(SMESH_subMesh* subMesh);
-  
+
   /*!
    * \brief Allow algo to do something after persistent restoration
     * \param subMesh - restored submesh
@@ -300,7 +303,7 @@ public:
    * This method is called only if a submesh has HYP_OK algo_state.
    */
   virtual void SubmeshRestored(SMESH_subMesh* subMesh);
-  
+
 public:
   // ==================================================================
   // Common algo utilities
@@ -339,7 +342,7 @@ public:
    */
   static double EdgeLength(const TopoDS_Edge & E);
 
-  int NumberOfPoints(SMESH_Mesh& aMesh,const TopoDS_Wire& W);
+  smIdType NumberOfPoints(SMESH_Mesh& aMesh,const TopoDS_Wire& W);
 
   /*!
    * \brief Return continuity of two edges
@@ -398,7 +401,7 @@ public:
   enum EMeshError { MEr_OK = 0, MEr_HOLES, MEr_BAD_ORI, MEr_EMPTY };
 
   /*!
-   * \brief Finds topological errors of a sub-mesh 
+   * \brief Finds topological errors of a sub-mesh
    */
   static EMeshError GetMeshError(SMESH_subMesh* subMesh);
 
@@ -434,7 +437,7 @@ protected:
   std::vector<std::string>              _compatibleHypothesis;
   std::list<const SMESHDS_Hypothesis *> _usedHypList;
   std::list<TopoDS_Shape>               _assigedShapeList; // _usedHypList assigned to
-  
+
 
   // Algo features influencing which Compute() and how is called:
   // in what turn and with what input shape.
diff --git a/src/SMESH/SMESH_DriverMesh.cxx b/src/SMESH/SMESH_DriverMesh.cxx
new file mode 100644 (file)
index 0000000..496d1ed
--- /dev/null
@@ -0,0 +1,105 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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_DriverMesh.cxx
+//  Author : Yoann AUDOUIN, EDF
+//  Module : SMESH
+//
+
+#include "utilities.h"
+
+#include "SMESH_DriverMesh.hxx"
+
+#include "SMESH_Mesh.hxx"
+#include "SMESH_Gen.hxx"
+
+#include <MEDFileMesh.hxx>
+#include <MEDCouplingUMesh.hxx>
+
+using namespace MEDCoupling;
+
+/**
+ * @brief Compares the mesh from two mesh files (MED)
+ *
+ * @param mesh_file1 First file
+ * @param mesh_file2 Second file
+ * @param mesh_name Name of the mesh in the files
+ *
+ * @return true if the mesh within the files are identical
+ */
+bool SMESH_DriverMesh::diffMEDFile(const std::string mesh_file1, const std::string mesh_file2, const std::string mesh_name){
+  MEDFileUMesh* medmesh1 = MEDFileUMesh::New(mesh_file1, mesh_name);
+  MEDFileUMesh* medmesh2 = MEDFileUMesh::New(mesh_file2, mesh_name);
+  MEDCouplingUMesh *m0_1=medmesh1->getMeshAtLevel(0,false);
+  MEDCouplingUMesh *m0_2=medmesh2->getMeshAtLevel(0,false);
+  return m0_1->isEqual(m0_2, 1e-12);
+}
+
+std::string getMeshName(std::string mesh_file){
+  // TODO: Memory leak but desctructor private check with AG
+  MEDFileUMesh * myMedMesh = MEDFileUMesh::New(mesh_file);
+
+  return myMedMesh->getLevel0Mesh()->getName();
+}
+
+/**
+ * @brief Import a mesh from a mesh file (MED) into a SMESH_Mesh object
+ *
+ * @param mesh_file the file
+ * @param aMesh the object
+ * @param mesh_name the name of the mesh in the file
+ *
+ * @return error code
+ */
+int SMESH_DriverMesh::importMesh(const std::string mesh_file, SMESH_Mesh& aMesh){
+  // TODO: change that as it depends on the language
+  std::string mesh_name = getMeshName(mesh_file);
+  MESSAGE("Importing mesh from " << mesh_file << " mesh " << mesh_name);
+  int ret = aMesh.MEDToMesh(mesh_file.c_str(), mesh_name.c_str());
+  return ret;
+}
+
+/**
+ * @brief Export the content of a SMESH_Mesh into a mesh file (MED)
+ *
+ * @param mesh_file the file
+ * @param aMesh the object
+ * @param mesh_name name of the mesh in the file
+ *
+ * @return error code
+ */
+int SMESH_DriverMesh::exportMesh(const std::string mesh_file, SMESH_Mesh& aMesh, const std::string mesh_name){
+
+  MESSAGE("Exporting mesh to " << mesh_file);
+  aMesh.ExportMED(mesh_file.c_str(), // theFile
+                  mesh_name.c_str(), // theMeshName
+                  false, // theAutoGroups
+                  -1, // theVersion
+                  nullptr, // theMeshPart
+                  true, // theAutoDimension
+                  true, // theAddODOnVertices
+                  1e-8, // theZTolerance
+                  true // theSaveNumbers
+                  );
+  return true;
+}
diff --git a/src/SMESH/SMESH_DriverMesh.hxx b/src/SMESH/SMESH_DriverMesh.hxx
new file mode 100644 (file)
index 0000000..0e3ef92
--- /dev/null
@@ -0,0 +1,47 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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_DriverMesh.hxx
+//  Author : Yoann AUDOUIN, EDF
+//  Module : SMESH
+//
+
+#ifndef _SMESH_DRIVERMESH_HXX_
+#define _SMESH_DRIVERMESH_HXX_
+
+#include <string>
+#include <cassert>
+#include "SMESH_SMESH.hxx"
+
+class SMESH_Mesh;
+class SMESH_EXPORT SMESH_DriverMesh{
+  public:
+    static bool diffMEDFile(const std::string mesh_file1,
+                            const std::string mesh_file2,
+                            const std::string mesh_name);
+    static int importMesh(const std::string mesh_file,
+                          SMESH_Mesh& aMesh);
+    static int exportMesh(const std::string mesh_file,
+                          SMESH_Mesh& aMesh,
+                          const std::string meshName);
+};
+#endif
diff --git a/src/SMESH/SMESH_DriverShape.cxx b/src/SMESH/SMESH_DriverShape.cxx
new file mode 100644 (file)
index 0000000..b35e9cc
--- /dev/null
@@ -0,0 +1,188 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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_DriverShape.cxx
+//  Author : Yoann AUDOUIN, EDF
+//  Module : SMESH
+//
+#include <utilities.h>
+#include <Utils_SALOME_Exception.hxx>
+#include "SMESH_DriverShape.hxx"
+
+// step include
+#include <STEPControl_Reader.hxx>
+#include <STEPControl_Writer.hxx>
+#include <Interface_Static.hxx>
+
+// Brep include
+#include <BRepTools.hxx>
+#include <BRep_Builder.hxx>
+
+//Occ include
+#include <TopoDS.hxx>
+
+#ifndef WIN32
+#include <boost/filesystem.hpp>
+#include <boost/algorithm/string.hpp>
+namespace fs = boost::filesystem;
+#endif
+
+/**
+ * @brief Import the content of a shape file (STEP) into a TopDS_Shape object
+ *
+ * @param shape_file the shape file
+ * @param aShape the object
+ *
+ * @return error code
+ */
+int importSTEPShape(const std::string shape_file, TopoDS_Shape& aShape){
+
+  MESSAGE("Importing STEP shape from " << shape_file);
+  STEPControl_Reader reader;
+  // Forcing Unit in meter
+  Interface_Static::SetCVal("xstep.cascade.unit","M");
+  Interface_Static::SetIVal("read.step.ideas", 1);
+  Interface_Static::SetIVal("read.step.nonmanifold", 1);
+  IFSelect_ReturnStatus aStat = reader.ReadFile(shape_file.c_str());
+  if(aStat != IFSelect_RetDone){
+    throw SALOME_Exception("Reading error for " + shape_file);
+  }
+
+  int NbTrans = reader.TransferRoots();
+  // There should be only one shape within the file
+  assert(NbTrans==1);
+  aShape = reader.OneShape();
+
+  return false;
+}
+
+/**
+ * @brief Export the content of a TopoDS_Shape into a shape file (STEP)
+ *
+ * @param shape_file the shape file
+ * @param aShape the object
+ *
+ * @return error code
+ */
+int exportSTEPShape(const std::string shape_file, const TopoDS_Shape& aShape){
+
+  MESSAGE("Exporting STEP shape to " << shape_file);
+
+  STEPControl_Writer aWriter;
+  // Forcing Unit in meter
+  Interface_Static::SetCVal("xstep.cascade.unit","M");
+  Interface_Static::SetCVal("write.step.unit","M");
+  Interface_Static::SetIVal("write.step.nonmanifold", 1);
+
+  IFSelect_ReturnStatus aStat = aWriter.Transfer(aShape,STEPControl_AsIs);
+  if(aStat != IFSelect_RetDone){
+    throw SALOME_Exception("Reading error for " + shape_file);
+  }
+
+  aStat = aWriter.Write(shape_file.c_str());
+
+  if(aStat != IFSelect_RetDone){
+    throw SALOME_Exception("Writing error for " + shape_file);
+  }
+  return aStat;
+}
+
+/**
+ * @brief Import the content of a shape file (BREP) into a TopDS_Shape object
+ *
+ * @param shape_file the shape file
+ * @param aShape the object
+ *
+ * @return error code
+ */
+int importBREPShape(const std::string shape_file, TopoDS_Shape& aShape){
+
+  MESSAGE("Importing BREP shape from " << shape_file);
+  BRep_Builder builder;
+  BRepTools::Read(aShape, shape_file.c_str(), builder);
+
+  return false;
+}
+
+/**
+ * @brief Export the content of a TopoDS_Shape into a shape file (BREP)
+ *
+ * @param shape_file the shape file
+ * @param aShape the object
+ *
+ * @return error code
+ */
+int exportBREPShape(const std::string shape_file, const TopoDS_Shape& aShape){
+
+  MESSAGE("Exporting BREP shape to " << shape_file);
+  BRepTools::Write(aShape, shape_file.c_str());
+
+  return false;
+}
+
+/**
+ * @brief Import the content of a shape file into a TopDS_Shape object
+ *
+ * @param shape_file the shape file
+ * @param aShape the object
+ *
+ * @return error code
+ */
+int SMESH_DriverShape::importShape(const std::string shape_file, TopoDS_Shape& aShape){
+#ifndef WIN32
+  std::string type = fs::path(shape_file).extension().string();
+  boost::algorithm::to_lower(type);
+  if (type == ".brep"){
+    return importBREPShape(shape_file, aShape);
+  } else if (type == ".step"){
+    return importSTEPShape(shape_file, aShape);
+  } else {
+    throw SALOME_Exception("Unknow format for importShape: " + type);
+  }
+#else
+  return 0;
+#endif
+}
+
+/**
+ * @brief Import the content of a shape file into a TopDS_Shape object
+ *
+ * @param shape_file the shape file
+ * @param aShape the object
+ *
+ * @return error code
+ */
+int SMESH_DriverShape::exportShape(const std::string shape_file, const TopoDS_Shape& aShape){
+#ifndef WIN32
+  std::string type = fs::path(shape_file).extension().string();
+  boost::algorithm::to_lower(type);
+  if (type == ".brep"){
+    return exportBREPShape(shape_file, aShape);
+  } else if (type == ".step"){
+    return exportSTEPShape(shape_file, aShape);
+  } else {
+    throw SALOME_Exception("Unknow format for exportShape: " + type);
+  }
+#else
+  return 0;
+#endif
+}
diff --git a/src/SMESH/SMESH_DriverShape.hxx b/src/SMESH/SMESH_DriverShape.hxx
new file mode 100644 (file)
index 0000000..721ba96
--- /dev/null
@@ -0,0 +1,40 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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_DriverShape.hxx
+//  Author : Yoann AUDOUIN, EDF
+//  Module : SMESH
+//
+
+#ifndef _SMESH_DRIVERSHAPE_HXX_
+#define _SMESH_DRIVERSHAPE_HXX_
+
+#include <string>
+#include <cassert>
+#include "SMESH_SMESH.hxx"
+class TopoDS_Shape;
+class SMESH_EXPORT SMESH_DriverShape{
+  public:
+    static int importShape(const std::string shape_file, TopoDS_Shape& aShape);
+    static int exportShape(const std::string shape_file, const TopoDS_Shape& aShape);
+};
+#endif
index 4e24447b3aa70407dedeba452cd812ef5c9516cd..8b042cf00f2451808deda9a27c9e0ef257f0230b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //  Author : Paul RASCLE, EDF
 //  Module : SMESH
 //
-
 //#define CHRONODEF
-
+//
 #include "SMESH_Gen.hxx"
 
+#include "SMESH_DriverMesh.hxx"
 #include "SMDS_Mesh.hxx"
 #include "SMDS_MeshElement.hxx"
 #include "SMDS_MeshNode.hxx"
 #include "SMESHDS_Document.hxx"
 #include "SMESH_HypoFilter.hxx"
 #include "SMESH_Mesh.hxx"
+#include "SMESH_SequentialMesh.hxx"
+#include "SMESH_ParallelMesh.hxx"
 #include "SMESH_MesherHelper.hxx"
 #include "SMESH_subMesh.hxx"
 
-#include "utilities.h"
-#include "OpUtil.hxx"
-#include "Utils_ExceptHandlers.hxx"
+#include <utilities.h>
+#include <Utils_ExceptHandlers.hxx>
 
-#include <TopoDS_Iterator.hxx>
+#include <TopExp_Explorer.hxx>
 #include <TopoDS.hxx>
+#include <TopoDS_Iterator.hxx>
 
 #include "memoire.h"
+#include <functional>
+
+#include <QString>
+#include <QProcess>
 
 #ifdef WIN32
   #include <windows.h>
 
 #include <Basics_Utils.hxx>
 
+#ifndef WIN32
+#include <boost/asio.hpp>
+#endif
+
 using namespace std;
+#ifndef WIN32
+#include <boost/filesystem.hpp>
+namespace fs = boost::filesystem;
+#endif
 
 // Environment variable separator
 #ifdef WIN32
@@ -146,7 +160,30 @@ SMESH_Mesh* SMESH_Gen::CreateMesh(bool theIsEmbeddedMode)
   Unexpect aCatch(SalomeException);
 
   // create a new SMESH_mesh object
-  SMESH_Mesh *aMesh = new SMESH_Mesh(_localId++,
+  SMESH_Mesh *aMesh = new SMESH_SequentialMesh(
+                                     _localId++,
+                                     this,
+                                     theIsEmbeddedMode,
+                                     _studyContext->myDocument);
+  _studyContext->mapMesh[_localId-1] = aMesh;
+
+  return aMesh;
+}
+
+//=============================================================================
+/*!
+ * Creates a parallel mesh in a study.
+ * if (theIsEmbeddedMode) { mesh modification commands are not logged }
+ */
+//=============================================================================
+
+SMESH_ParallelMesh* SMESH_Gen::CreateParallelMesh(bool theIsEmbeddedMode)
+{
+  Unexpect aCatch(SalomeException);
+
+  // create a new SMESH_mesh object
+  SMESH_ParallelMesh *aMesh = new SMESH_ParallelMesh(
+                                     _localId++,
                                      this,
                                      theIsEmbeddedMode,
                                      _studyContext->myDocument);
@@ -155,6 +192,264 @@ SMESH_Mesh* SMESH_Gen::CreateMesh(bool theIsEmbeddedMode)
   return aMesh;
 }
 
+//=============================================================================
+/*!
+ * Algo to run the computation of all the submeshes of a mesh in sequentila
+ */
+//=============================================================================
+
+bool SMESH_Gen::sequentialComputeSubMeshes(
+          SMESH_Mesh & aMesh,
+          const TopoDS_Shape & aShape,
+          const ::MeshDimension       aDim,
+          TSetOfInt*                  aShapesId /*=0*/,
+          TopTools_IndexedMapOfShape* allowedSubShapes,
+          SMESH_subMesh::compute_event &computeEvent,
+          const bool includeSelf,
+          const bool complexShapeFirst,
+          const bool   aShapeOnly)
+{
+  MESSAGE("Sequential Compute of submeshes");
+
+  bool ret = true;
+
+  SMESH_subMeshIteratorPtr smIt;
+  SMESH_subMesh *shapeSM = aMesh.GetSubMesh(aShape);
+
+  smIt = shapeSM->getDependsOnIterator(includeSelf, !complexShapeFirst);
+  while ( smIt->more() )
+  {
+    SMESH_subMesh* smToCompute = smIt->next();
+
+    // do not mesh vertices of a pseudo shape
+    const TopoDS_Shape&        shape = smToCompute->GetSubShape();
+    const TopAbs_ShapeEnum shapeType = shape.ShapeType();
+    if ( !aMesh.HasShapeToMesh() && shapeType == TopAbs_VERTEX )
+      continue;
+
+    // check for preview dimension limitations
+    if ( aShapesId && SMESH_Gen::GetShapeDim( shapeType ) > (int)aDim )
+    {
+      // clear compute state not to show previous compute errors
+      //  if preview invoked less dimension less than previous
+      smToCompute->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
+      continue;
+    }
+
+    if (smToCompute->GetComputeState() == SMESH_subMesh::READY_TO_COMPUTE)
+    {
+      if (_compute_canceled)
+        return false;
+      smToCompute->SetAllowedSubShapes( fillAllowed( shapeSM, aShapeOnly, allowedSubShapes ));
+      setCurrentSubMesh( smToCompute );
+      smToCompute->ComputeStateEngine( computeEvent );
+      setCurrentSubMesh( nullptr );
+      smToCompute->SetAllowedSubShapes( nullptr );
+    }
+
+    // we check all the sub-meshes here and detect if any of them failed to compute
+    if (smToCompute->GetComputeState() == SMESH_subMesh::FAILED_TO_COMPUTE &&
+        ( shapeType != TopAbs_EDGE || !SMESH_Algo::isDegenerated( TopoDS::Edge( shape ))))
+      ret = false;
+    else if ( aShapesId )
+      aShapesId->insert( smToCompute->GetId() );
+  }
+  //aMesh.GetMeshDS()->Modified();
+  return ret;
+
+};
+
+//=============================================================================
+/*
+ * compute of a submesh
+ * This function is passed to the thread pool
+ */
+//=============================================================================
+const std::function<void(SMESH_subMesh*,
+                         SMESH_subMesh::compute_event,
+                         SMESH_subMesh*,
+                         bool,
+                         TopTools_IndexedMapOfShape *,
+                         TSetOfInt*)>
+     compute_function([] (SMESH_subMesh* sm,
+                          SMESH_subMesh::compute_event event,
+                          SMESH_subMesh *shapeSM,
+                          bool aShapeOnly,
+                          TopTools_IndexedMapOfShape *allowedSubShapes,
+                          TSetOfInt*                  aShapesId) -> void
+{
+  if (sm->GetComputeState() == SMESH_subMesh::READY_TO_COMPUTE)
+  {
+    sm->SetAllowedSubShapes( fillAllowed( shapeSM, aShapeOnly, allowedSubShapes ));
+    //setCurrentSubMesh( sm );
+    sm->ComputeStateEngine(event);
+    //setCurrentSubMesh( nullptr );
+    sm->SetAllowedSubShapes( nullptr );
+  }
+
+  if ( aShapesId )
+    aShapesId->insert( sm->GetId() );
+
+});
+
+
+//=============================================================================
+/*
+ * Copy a file on remote resource
+ */
+//=============================================================================
+
+void SMESH_Gen::send_mesh(SMESH_Mesh& aMesh, std::string file_name)
+{
+#ifndef WIN32
+  SMESH_ParallelMesh& aParMesh = dynamic_cast<SMESH_ParallelMesh&>(aMesh);
+  // Calling run_mesher
+  // Path to mesher script
+  fs::path send_files = fs::path(std::getenv("SMESH_ROOT_DIR"))/
+  fs::path("bin")/
+  fs::path("salome")/
+  fs::path("send_files.py");
+
+  std::string s_program="python3";
+  std::list<std::string> params;
+  params.push_back(send_files.string());
+  params.push_back(file_name);
+  params.push_back("--resource="+aParMesh.GetResource());
+
+  // log file
+  fs::path log_file=aParMesh.GetTmpFolder() / fs::path("copy.log");
+  QString out_file = log_file.string().c_str();
+
+  // Building arguments for QProcess
+  QString program = QString::fromStdString(s_program);
+  QStringList arguments;
+  for(auto arg : params){
+    arguments << arg.c_str();
+  }
+
+  std::string cmd = "";
+  cmd += s_program;
+  for(auto arg: params){
+    cmd += " " + arg;
+  }
+  MESSAGE("Send files command: ");
+  MESSAGE(cmd);
+
+  QProcess myProcess;
+  myProcess.setProcessChannelMode(QProcess::MergedChannels);
+  myProcess.setStandardOutputFile(out_file);
+
+  myProcess.start(program, arguments);
+  // Waiting for process to finish (argument -1 make it wait until the end of
+  // the process otherwise it just waits 30 seconds)
+  bool finished = myProcess.waitForFinished(-1);
+  int ret = myProcess.exitCode();
+
+  if(ret != 0 || !finished){
+  // Run crahed
+    std::string msg = "Issue with send_files: \n";
+    msg += "See log for more details: " + log_file.string() + "\n";
+    msg += cmd + "\n";
+    throw SALOME_Exception(msg);
+  }
+#endif
+}
+
+//=============================================================================
+/*!
+ * Algo to run the computation of all the submeshes of a mesh in parallel
+ */
+//=============================================================================
+
+bool SMESH_Gen::parallelComputeSubMeshes(
+          SMESH_Mesh & aMesh,
+          const TopoDS_Shape & aShape,
+          const ::MeshDimension       aDim,
+          TSetOfInt*                  aShapesId /*=0*/,
+          TopTools_IndexedMapOfShape* allowedSubShapes,
+          SMESH_subMesh::compute_event &computeEvent,
+          const bool includeSelf,
+          const bool complexShapeFirst,
+          const bool   aShapeOnly)
+{
+#ifdef WIN32
+  throw SALOME_Exception("ParallelMesh is not working on Windows");
+#else
+
+  bool ret = true;
+
+  SMESH_subMeshIteratorPtr smIt;
+  SMESH_subMesh *shapeSM = aMesh.GetSubMesh(aShape);
+  SMESH_ParallelMesh &aParMesh = dynamic_cast<SMESH_ParallelMesh&>(aMesh);
+
+  TopAbs_ShapeEnum previousShapeType = TopAbs_VERTEX;
+  MESSAGE("Parallel Compute of submeshes");
+
+
+  smIt = shapeSM->getDependsOnIterator(includeSelf, !complexShapeFirst);
+  while ( smIt->more() )
+  {
+    SMESH_subMesh* smToCompute = smIt->next();
+
+    // do not mesh vertices of a pseudo shape
+    const TopoDS_Shape&        shape = smToCompute->GetSubShape();
+    const TopAbs_ShapeEnum shapeType = shape.ShapeType();
+    // Not doing in parallel 1D meshes
+    if ( !aMesh.HasShapeToMesh() && shapeType == TopAbs_VERTEX )
+      continue;
+
+    if (shapeType != previousShapeType) {
+      // Waiting for all threads for the previous type to end
+      aMesh.wait();
+
+      std::string file_name="";
+      if (previousShapeType == aParMesh.GetDumpElement())
+        file_name = "Mesh"+std::to_string(aParMesh.GetParallelismDimension()-1)+"D.med";
+
+      if(file_name != "")
+      {
+        fs::path mesh_file = fs::path(aParMesh.GetTmpFolder()) / fs::path(file_name);
+             SMESH_DriverMesh::exportMesh(mesh_file.string(), aMesh, "MESH");
+        if (aParMesh.GetParallelismMethod() == ParallelismMethod::MultiNode) {
+          this->send_mesh(aMesh, mesh_file.string());
+        }
+      }
+      //Resetting threaded pool info
+      previousShapeType = shapeType;
+    }
+
+    // check for preview dimension limitations
+    if ( aShapesId && SMESH_Gen::GetShapeDim( shapeType ) > (int)aDim )
+    {
+      // clear compute state not to show previous compute errors
+      //  if preview invoked less dimension less than previous
+      smToCompute->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
+      continue;
+    }
+    // Parallelism is only for 3D parts
+    if(shapeType!=aMesh.GetParallelElement()){
+      compute_function(smToCompute, computeEvent,
+                      shapeSM, aShapeOnly, allowedSubShapes,
+                      aShapesId);
+    }else{
+      boost::asio::post(*(aParMesh.GetPool()), std::bind(compute_function, smToCompute, computeEvent,
+                        shapeSM, aShapeOnly, allowedSubShapes,
+                        aShapesId));
+    }
+  }
+
+  // Waiting for the thread for Solids to finish
+  aMesh.wait();
+
+  aMesh.GetMeshDS()->Modified();
+
+  // Cleanup done here as in Python the destructor is not called
+  aParMesh.cleanup();
+
+  return ret;
+#endif
+};
+
 //=============================================================================
 /*
  * Compute a mesh
@@ -201,57 +496,25 @@ bool SMESH_Gen::Compute(SMESH_Mesh &                aMesh,
     // ===============================================
     // Mesh all the sub-shapes starting from vertices
     // ===============================================
+    ret = aMesh.ComputeSubMeshes(
+            this,
+            aMesh, aShape, aDim,
+            aShapesId, allowedSubShapes,
+            computeEvent,
+            includeSelf,
+            complexShapeFirst,
+            aShapeOnly);
 
-    smIt = shapeSM->getDependsOnIterator(includeSelf, !complexShapeFirst);
-    while ( smIt->more() )
-    {
-      SMESH_subMesh* smToCompute = smIt->next();
-
-      // do not mesh vertices of a pseudo shape
-      const TopoDS_Shape&        shape = smToCompute->GetSubShape();
-      const TopAbs_ShapeEnum shapeType = shape.ShapeType();
-      if ( !aMesh.HasShapeToMesh() && shapeType == TopAbs_VERTEX )
-        continue;
-
-      // check for preview dimension limitations
-      if ( aShapesId && GetShapeDim( shapeType ) > (int)aDim )
-      {
-        // clear compute state not to show previous compute errors
-        //  if preview invoked less dimension less than previous
-        smToCompute->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
-        continue;
-      }
-
-      if (smToCompute->GetComputeState() == SMESH_subMesh::READY_TO_COMPUTE)
-      {
-        if (_compute_canceled)
-          return false;
-        smToCompute->SetAllowedSubShapes( fillAllowed( shapeSM, aShapeOnly, allowedSubShapes ));
-        setCurrentSubMesh( smToCompute );
-        smToCompute->ComputeStateEngine( computeEvent );
-        setCurrentSubMesh( nullptr );
-        smToCompute->SetAllowedSubShapes( nullptr );
-      }
-
-      // we check all the sub-meshes here and detect if any of them failed to compute
-      if (smToCompute->GetComputeState() == SMESH_subMesh::FAILED_TO_COMPUTE &&
-          ( shapeType != TopAbs_EDGE || !SMESH_Algo::isDegenerated( TopoDS::Edge( shape ))))
-        ret = false;
-      else if ( aShapesId )
-        aShapesId->insert( smToCompute->GetId() );
-    }
-    //aMesh.GetMeshDS()->Modified();
     return ret;
   }
   else
   {
     // ================================================================
-    // Apply algos that do NOT require discreteized boundaries
+    // Apply algos that do NOT require discretized boundaries
     // ("all-dimensional") and do NOT support sub-meshes, starting from
-    // the most complex shapes and collect sub-meshes with algos that 
+    // the most complex shapes and collect sub-meshes with algos that
     // DO support sub-meshes
     // ================================================================
-
     list< SMESH_subMesh* > smWithAlgoSupportingSubmeshes[4]; // for each dim
 
     // map to sort sm with same dim algos according to dim of
@@ -273,7 +536,7 @@ bool SMESH_Gen::Compute(SMESH_Mesh &                aMesh,
       const TopoDS_Shape& aSubShape = smToCompute->GetSubShape();
       aShapeDim = GetShapeDim( aSubShape );
       if ( aShapeDim < 1 ) break;
-      
+
       // check for preview dimension limitations
       if ( aShapesId && aShapeDim > (int)aDim )
         continue;
@@ -341,6 +604,36 @@ bool SMESH_Gen::Compute(SMESH_Mesh &                aMesh,
       smVec.insert( smVec.end(),
                     smWithAlgoSupportingSubmeshes[aShapeDim].begin(),
                     smWithAlgoSupportingSubmeshes[aShapeDim].end() );
+
+    // gather sub-shapes with local uni-dimensional algos (bos #29143)
+    // ----------------------------------------------------------------
+    TopTools_MapOfShape uniDimAlgoShapes;
+    if ( !smVec.empty() )
+    {
+      ShapeToHypothesis::Iterator s2hyps( aMesh.GetMeshDS()->GetHypotheses() );
+      for ( ; s2hyps.More(); s2hyps.Next() )
+      {
+        const TopoDS_Shape& s = s2hyps.Key();
+        if ( s.IsSame( aMesh.GetShapeToMesh() ))
+          continue;
+        for ( auto & hyp : s2hyps.Value() )
+        {
+          if ( const SMESH_Algo* algo = dynamic_cast< const SMESH_Algo*>( hyp ))
+            if ( algo->NeedDiscreteBoundary() )
+            {
+              TopAbs_ShapeEnum sType;
+              switch ( algo->GetDim() ) {
+              case 3:  sType = TopAbs_SOLID; break;
+              case 2:  sType = TopAbs_FACE; break;
+              default: sType = TopAbs_EDGE; break;
+              }
+              for ( TopExp_Explorer ex( s2hyps.Key(), sType ); ex.More(); ex.Next() )
+                uniDimAlgoShapes.Add( ex.Current() );
+            }
+        }
+      }
+    }
+
     {
       // ------------------------------------------------
       // sort list of sub-meshes according to mesh order
@@ -360,45 +653,50 @@ bool SMESH_Gen::Compute(SMESH_Mesh &                aMesh,
 
         const TopAbs_ShapeEnum shapeType = sm->GetSubShape().ShapeType();
 
-        // get a shape the algo is assigned to
-        if ( !GetAlgo( sm, & algoShape ))
-          continue; // strange...
+        if ( !uniDimAlgoShapes.IsEmpty() )
+        {
+          // get a shape the algo is assigned to
+          if ( !GetAlgo( sm, & algoShape ))
+            continue; // strange...
 
-        // look for more local algos
-        if ( SMESH_subMesh* algoSM = aMesh.GetSubMesh( algoShape ))
-          smIt = algoSM->getDependsOnIterator(!includeSelf, !complexShapeFirst);
-        else
-          smIt = sm->getDependsOnIterator(!includeSelf, !complexShapeFirst);
+          // look for more local algos
+          if ( SMESH_subMesh* algoSM = aMesh.GetSubMesh( algoShape ))
+            smIt = algoSM->getDependsOnIterator(!includeSelf, !complexShapeFirst);
+          else
+            smIt = sm->getDependsOnIterator(!includeSelf, !complexShapeFirst);
 
-        while ( smIt->more() )
-        {
-          SMESH_subMesh* smToCompute = smIt->next();
+          while ( smIt->more() )
+          {
+            SMESH_subMesh* smToCompute = smIt->next();
 
-          const TopoDS_Shape& aSubShape = smToCompute->GetSubShape();
-          const int aShapeDim = GetShapeDim( aSubShape );
-          if ( aShapeDim < 1 || aSubShape.ShapeType() == shapeType )
-            continue;
+            const TopoDS_Shape& aSubShape = smToCompute->GetSubShape();
+            const           int aShapeDim = GetShapeDim( aSubShape );
+            if ( aShapeDim < 1 || aSubShape.ShapeType() <= shapeType )
+              continue;
+            if ( !uniDimAlgoShapes.Contains( aSubShape ))
+              continue; // [bos #29143] aMesh.GetHypothesis() is too long
 
-          // check for preview dimension limitations
-          if ( aShapesId && GetShapeDim( aSubShape.ShapeType() ) > (int)aDim )
-            continue;
+            // check for preview dimension limitations
+            if ( aShapesId && GetShapeDim( aSubShape.ShapeType() ) > (int)aDim )
+              continue;
 
-          SMESH_HypoFilter filter( SMESH_HypoFilter::IsAlgo() );
-          filter
-            .And( SMESH_HypoFilter::IsApplicableTo( aSubShape ))
-            .And( SMESH_HypoFilter::IsMoreLocalThan( algoShape, aMesh ));
+            SMESH_HypoFilter filter( SMESH_HypoFilter::IsAlgo() );
+            filter
+              .And( SMESH_HypoFilter::IsApplicableTo( aSubShape ))
+              .And( SMESH_HypoFilter::IsMoreLocalThan( algoShape, aMesh ));
 
-          if ( SMESH_Algo* subAlgo = (SMESH_Algo*) aMesh.GetHypothesis( smToCompute, filter, true))
-          {
-            if ( ! subAlgo->NeedDiscreteBoundary() ) continue;
-            TopTools_IndexedMapOfShape* localAllowed = allowedSubShapes;
-            if ( localAllowed && localAllowed->IsEmpty() )
-              localAllowed = 0; // prevent fillAllowed() with  aSubShape
-
-            SMESH_Hypothesis::Hypothesis_Status status;
-            if ( subAlgo->CheckHypothesis( aMesh, aSubShape, status ))
-              // mesh a lower smToCompute starting from vertices
-              Compute( aMesh, aSubShape, aFlags | SHAPE_ONLY_UPWARD, aDim, aShapesId, localAllowed );
+            if ( SMESH_Algo* subAlgo = (SMESH_Algo*) aMesh.GetHypothesis( smToCompute, filter, true))
+            {
+              if ( ! subAlgo->NeedDiscreteBoundary() ) continue;
+              TopTools_IndexedMapOfShape* localAllowed = allowedSubShapes;
+              if ( localAllowed && localAllowed->IsEmpty() )
+                localAllowed = 0; // prevent fillAllowed() with  aSubShape
+
+              SMESH_Hypothesis::Hypothesis_Status status;
+              if ( subAlgo->CheckHypothesis( aMesh, aSubShape, status ))
+                // mesh a lower smToCompute starting from vertices
+                Compute( aMesh, aSubShape, aFlags | SHAPE_ONLY_UPWARD, aDim, aShapesId, localAllowed );
+            }
           }
         }
         // --------------------------------
@@ -411,8 +709,10 @@ bool SMESH_Gen::Compute(SMESH_Mesh &                aMesh,
           if ( aShapesId && GetShapeDim( shapeType ) > (int)aDim )
             continue;
           sm->SetAllowedSubShapes( fillAllowed( shapeSM, aShapeOnly, allowedSubShapes ));
+
           setCurrentSubMesh( sm );
           sm->ComputeStateEngine( computeEvent );
+
           setCurrentSubMesh( NULL );
           sm->SetAllowedSubShapes( nullptr );
           if ( aShapesId )
@@ -425,6 +725,7 @@ bool SMESH_Gen::Compute(SMESH_Mesh &                aMesh,
     // mesh the rest sub-shapes starting from vertices
     // -----------------------------------------------
     ret = Compute( aMesh, aShape, aFlags | UPWARD, aDim, aShapesId, allowedSubShapes );
+
   }
 
   MEMOSTAT;
@@ -568,7 +869,7 @@ bool SMESH_Gen::Evaluate(SMESH_Mesh &          aMesh,
       const TopoDS_Shape& aSubShape = smToCompute->GetSubShape();
       const int aShapeDim = GetShapeDim( aSubShape );
       if ( aShapeDim < 1 ) break;
-      
+
       SMESH_Algo* algo = GetAlgo( smToCompute );
       if ( algo && !algo->NeedDiscreteBoundary() ) {
         if ( algo->SupportSubmeshes() ) {
@@ -1077,18 +1378,14 @@ std::vector< std::string > SMESH_Gen::GetPluginXMLPaths()
       xmlPath += sep + plugin + ".xml";
       bool fileOK;
 #ifdef WIN32
-  #ifdef UNICODE
+#  ifdef UNICODE
       const wchar_t* path = Kernel_Utils::decode_s(xmlPath);
-  #else
+      SMESHUtils::ArrayDeleter<const wchar_t> deleter( path );
+#  else
       const char* path = xmlPath.c_str();
-  #endif
-
+#  endif
       fileOK = (GetFileAttributes(path) != INVALID_FILE_ATTRIBUTES);
 
-  #ifdef UNICODE
-      delete path;
-  #endif
-
 #else
       fileOK = (access(xmlPath.c_str(), F_OK) == 0);
 #endif
@@ -1227,6 +1524,26 @@ int SMESH_Gen::GetShapeDim(const TopAbs_ShapeEnum & aShapeType)
   return dim[ aShapeType ];
 }
 
+//================================================================================
+/*!
+ * \brief Return shape dimension by exploding compounds
+ */
+//================================================================================
+
+int SMESH_Gen::GetFlatShapeDim(const TopoDS_Shape &aShape)
+{
+  int aShapeDim;
+  if ( aShape.ShapeType() == TopAbs_COMPOUND ||
+       aShape.ShapeType() == TopAbs_COMPSOLID )
+  {
+    TopoDS_Iterator it( aShape );
+    aShapeDim = GetFlatShapeDim( it.Value() );
+  }
+  else
+    aShapeDim = GetShapeDim( aShape );
+  return aShapeDim;
+}
+
 //=============================================================================
 /*!
  * Generate a new id unique within this Gen
index 2a3bc6423f9ad55375445bc4f25d816ba232079b..275bc06dfbc97e4df817d035ae22443bd6764e98 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -34,6 +34,7 @@
 
 #include "SMESH_Algo.hxx"
 #include "SMESH_ComputeError.hxx"
+#include "SMESH_subMesh.hxx"
 
 #include <map>
 #include <list>
 #include <vector>
 #include <string>
 
+
 #include <TopoDS_Shape.hxx>
 #include <TopTools_IndexedMapOfShape.hxx>
 
 class SMESHDS_Document;
 class SMESH_Algo;
 class SMESH_Mesh;
+class SMESH_ParallelMesh;
 class TopoDS_Shape;
-class SMESH_subMesh;
+
 
 typedef SMESH_Hypothesis::Hypothesis_Status TAlgoStateErrorName;
 
@@ -68,6 +71,7 @@ public:
   ~SMESH_Gen();
 
   SMESH_Mesh* CreateMesh(bool theIsEmbeddedMode);
+  SMESH_ParallelMesh* CreateParallelMesh(bool theIsEmbeddedMode);
 
   enum ComputeFlags
   {
@@ -77,7 +81,7 @@ public:
     SHAPE_ONLY_UPWARD = 3  // SHAPE_ONLY | UPWARD
   };
   /*!
-   * \brief Computes aMesh on aShape 
+   * \brief Computes aMesh on aShape
    *  \param aMesh - the mesh.
    *  \param aShape - the shape.
    *  \param aFlags - ComputeFlags. By default compute the whole mesh and compact at the end.
@@ -101,7 +105,7 @@ public:
   const SMESH_subMesh* GetCurrentSubMesh() const;
 
   /*!
-   * \brief evaluates size of prospective mesh on a shape 
+   * \brief evaluates size of prospective mesh on a shape
    * \param aMesh - the mesh
    * \param aShape - the shape
    * \param aResMap - map for prospective numbers of elements
@@ -154,6 +158,7 @@ public:
   static int GetShapeDim(const TopAbs_ShapeEnum & aShapeType);
   static int GetShapeDim(const TopoDS_Shape &     aShape)
   { return GetShapeDim( aShape.ShapeType() ); }
+  static int GetFlatShapeDim(const TopoDS_Shape &aShape);
 
   SMESH_Algo* GetAlgo(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape, TopoDS_Shape* assignedTo=0);
   SMESH_Algo* GetAlgo(SMESH_subMesh * aSubMesh, TopoDS_Shape* assignedTo=0);
@@ -164,8 +169,35 @@ public:
 
   int GetANewId();
 
+public:
+  void send_mesh(SMESH_Mesh & aMesh, std::string filename);
+
+  bool parallelComputeSubMeshes(
+          SMESH_Mesh & aMesh,
+          const TopoDS_Shape & aShape,
+          const ::MeshDimension       aDim,
+          TSetOfInt*                  aShapesId,
+          TopTools_IndexedMapOfShape* allowedSubShapes,
+          SMESH_subMesh::compute_event &computeEvent,
+          const bool includeSelf,
+          const bool complexShapeFirst,
+          const bool   aShapeOnly);
+
+  bool sequentialComputeSubMeshes(
+          SMESH_Mesh & aMesh,
+          const TopoDS_Shape & aShape,
+          const ::MeshDimension       aDim,
+          TSetOfInt*                  aShapesId /*=0*/,
+          TopTools_IndexedMapOfShape* allowedSubShapes,
+          SMESH_subMesh::compute_event &computeEvent,
+          const bool includeSelf,
+          const bool complexShapeFirst,
+          const bool aShapeOnly);
+
 private:
 
+
+
   int _localId;                         // unique Id of created objects, within SMESH_Gen entity
   StudyContextStruct* _studyContext;
 
index ea6580b6b8a0b59892773f6b24b56e87db6bc089..b6ab964e17bfa4a48c740d90e504718c5440f6d8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index de954d8327077619a044a4ee3656dff656fcf066..184197fa35c029a8517761369d1fbe956c3b44e1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
diff --git a/src/SMESH/SMESH_Homard.cxx b/src/SMESH/SMESH_Homard.cxx
new file mode 100644 (file)
index 0000000..8808419
--- /dev/null
@@ -0,0 +1,1184 @@
+// SMESH HOMARD : implementation of SMESHHOMARD idl descriptions
+//
+// Copyright (C) 2011-2024  CEA, EDF
+//
+// 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 "SMESH_Homard.hxx"
+
+#include <Utils_SALOME_Exception.hxx>
+#include <utilities.h>
+
+#include <iostream>
+#include <sstream>
+#include <cstdlib>
+#include <sys/stat.h>
+
+#ifndef WIN32
+#include <unistd.h>
+#else
+#include <direct.h>
+#endif
+
+// La gestion des repertoires
+#ifndef CHDIR
+  #ifdef WIN32
+    #define CHDIR _chdir
+  #else
+    #define CHDIR chdir
+  #endif
+#endif
+
+namespace SMESHHOMARDImpl
+{
+
+//=============================================================================
+/*!
+ *  default constructor:
+ */
+//=============================================================================
+HOMARD_Boundary::HOMARD_Boundary():
+  _Name( "" ),_Type( 1 ),
+  _Xmin( 0 ), _Xmax( 0 ), _Ymin( 0 ), _Ymax( 0 ), _Zmin( 0 ), _Zmax( 0 ),
+  _Xaxe( 0 ), _Yaxe( 0 ), _Zaxe( 0 ),
+  _Xcentre( 0 ), _Ycentre( 0 ), _Zcentre( 0 ), _rayon( 0 ),
+  _Xincr( 0 ), _Yincr( 0 ), _Zincr( 0 )
+{
+  MESSAGE("HOMARD_Boundary");
+}
+
+//=============================================================================
+HOMARD_Boundary::~HOMARD_Boundary()
+{
+  MESSAGE("~HOMARD_Boundary");
+}
+//=============================================================================
+//=============================================================================
+// Generalites
+//=============================================================================
+//=============================================================================
+void HOMARD_Boundary::SetName( const char* Name )
+{
+  _Name = std::string( Name );
+}
+//=============================================================================
+std::string HOMARD_Boundary::GetName() const
+{
+  return _Name;
+}
+//=============================================================================
+std::string HOMARD_Boundary::GetDumpPython() const
+{
+  std::ostringstream aScript;
+  switch (_Type) {
+    case -1:
+    {
+      aScript << _Name << " = smeshhomard.CreateBoundaryCAO(\"" << _Name << "\", ";
+      aScript << "\"" << _DataFile << "\")\n";
+      break ;
+    }
+    case 0:
+    {
+      aScript << _Name << " = smeshhomard.CreateBoundaryDi(\"" << _Name << "\", ";
+      aScript << "\"" << _MeshName << "\", ";
+      aScript << "\"" << _DataFile << "\")\n";
+      break ;
+    }
+    case 1:
+    {
+      aScript << _Name << " = smeshhomard.CreateBoundaryCylinder(\"" << _Name << "\", ";
+      aScript << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _Xaxe << ", " << _Yaxe << ", " << _Zaxe << ", " << _rayon << ")\n";
+      break ;
+    }
+    case 2:
+    {
+      aScript << _Name << " = smeshhomard.CreateBoundarySphere(\"" << _Name << "\", ";
+      aScript << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _rayon << ")\n";
+      break ;
+    }
+    case 3:
+    {
+      aScript << _Name << " = smeshhomard.CreateBoundaryConeA(\"" << _Name << "\", ";
+      aScript << _Xaxe << ", " << _Yaxe << ", " << _Zaxe << ", " << _Angle << ", " << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ")\n";
+      break ;
+    }
+    case 4:
+    {
+      aScript << _Name << " = smeshhomard.CreateBoundaryConeR(\"" << _Name << "\", ";
+      aScript << _Xcentre1 << ", " << _Ycentre1 << ", " << _Zcentre1 << ", " << _Rayon1 << ", " << _Xcentre2 << ", " << _Ycentre2 << ", " << _Zcentre2 << ", " << _Rayon2 << ")\n";
+      break ;
+    }
+    case 5:
+    {
+      aScript << _Name << " = smeshhomard.CreateBoundaryTorus(\"" << _Name << "\", ";
+      aScript << _Xcentre << ", " << _Ycentre << ", " << _Zcentre << ", " << _Xaxe << ", " << _Yaxe << ", " << _Zaxe << ", " << _Rayon1 << ", " << _Rayon2 << ")\n";
+      break ;
+    }
+  }
+
+  return aScript.str();
+}
+//=============================================================================
+//=============================================================================
+// Caracteristiques
+//=============================================================================
+//=============================================================================
+void HOMARD_Boundary::SetType( int Type )
+{
+  _Type = Type;
+}
+//=============================================================================
+int HOMARD_Boundary::GetType() const
+{
+  return _Type;
+}
+//=============================================================================
+void HOMARD_Boundary::SetMeshName( const char* MeshName )
+{
+  _MeshName = std::string( MeshName );
+}
+//=============================================================================
+std::string HOMARD_Boundary::GetMeshName() const
+{
+  return _MeshName;
+}
+//=============================================================================
+void HOMARD_Boundary::SetDataFile( const char* DataFile )
+{
+  _DataFile = std::string( DataFile );
+}
+//=============================================================================
+std::string HOMARD_Boundary::GetDataFile() const
+{
+  return _DataFile;
+}
+//=======================================================================================
+void HOMARD_Boundary::SetCylinder( double X0, double X1, double X2,
+                                   double X3, double X4, double X5, double X6 )
+{
+  _Xcentre = X0; _Ycentre = X1; _Zcentre = X2;
+  _Xaxe = X3; _Yaxe = X4; _Zaxe = X5;
+  _rayon = X6;
+}
+//======================================================================
+void HOMARD_Boundary::SetSphere( double X0, double X1, double X2, double X3 )
+{
+  _Xcentre = X0; _Ycentre = X1; _Zcentre = X2;
+  _rayon = X3;
+}
+//======================================================================
+void HOMARD_Boundary::SetConeR( double Xcentre1, double Ycentre1, double Zcentre1, double Rayon1,
+                                double Xcentre2, double Ycentre2, double Zcentre2, double Rayon2)
+{
+  _Xcentre1 = Xcentre1; _Ycentre1 = Ycentre1; _Zcentre1 = Zcentre1;
+  _Rayon1 = Rayon1;
+  _Xcentre2 = Xcentre2; _Ycentre2 = Ycentre2; _Zcentre2 = Zcentre2;
+  _Rayon2 = Rayon2;
+}
+//======================================================================
+void HOMARD_Boundary::SetConeA( double Xaxe, double Yaxe, double Zaxe, double Angle,
+                                double Xcentre, double Ycentre, double Zcentre)
+{
+  _Xaxe = Xaxe; _Yaxe = Yaxe; _Zaxe = Zaxe;
+  _Angle = Angle;
+  _Xcentre = Xcentre; _Ycentre = Ycentre; _Zcentre = Zcentre;
+}
+//=======================================================================================
+void HOMARD_Boundary::SetTorus( double X0, double X1, double X2,
+                                double X3, double X4, double X5, double X6, double X7 )
+{
+  _Xcentre = X0; _Ycentre = X1; _Zcentre = X2;
+  _Xaxe = X3; _Yaxe = X4; _Zaxe = X5;
+  _Rayon1 = X6;
+  _Rayon2 = X7;
+}
+//=======================================================================================
+std::vector<double> HOMARD_Boundary::GetCoords() const
+{
+  std::vector<double> mesCoor;
+  switch (_Type)
+  {
+    //  Cylindre
+    case 1:
+    {
+      mesCoor.push_back( _Xcentre );
+      mesCoor.push_back( _Ycentre );
+      mesCoor.push_back( _Zcentre );
+      mesCoor.push_back( _Xaxe );
+      mesCoor.push_back( _Yaxe );
+      mesCoor.push_back( _Zaxe );
+      mesCoor.push_back( _rayon );
+      break ;
+    }
+    //  Sphere
+    case 2:
+    {
+      mesCoor.push_back( _Xcentre );
+      mesCoor.push_back( _Ycentre );
+      mesCoor.push_back( _Zcentre );
+      mesCoor.push_back( _rayon );
+      break ;
+    }
+    //  Cone defini par un axe et un angle
+    case 3:
+    {
+      mesCoor.push_back( _Xaxe );
+      mesCoor.push_back( _Yaxe );
+      mesCoor.push_back( _Zaxe );
+      mesCoor.push_back( _Angle );
+      mesCoor.push_back( _Xcentre );
+      mesCoor.push_back( _Ycentre );
+      mesCoor.push_back( _Zcentre );
+      break ;
+    }
+    //  Cone defini par les 2 rayons
+    case 4:
+    {
+      mesCoor.push_back( _Xcentre1 );
+      mesCoor.push_back( _Ycentre1 );
+      mesCoor.push_back( _Zcentre1 );
+      mesCoor.push_back( _Rayon1 );
+      mesCoor.push_back( _Xcentre2 );
+      mesCoor.push_back( _Ycentre2 );
+      mesCoor.push_back( _Zcentre2 );
+      mesCoor.push_back( _Rayon2 );
+      break ;
+    }
+    //  Tore
+    case 5:
+    {
+      mesCoor.push_back( _Xcentre );
+      mesCoor.push_back( _Ycentre );
+      mesCoor.push_back( _Zcentre );
+      mesCoor.push_back( _Xaxe );
+      mesCoor.push_back( _Yaxe );
+      mesCoor.push_back( _Zaxe );
+      mesCoor.push_back( _Rayon1 );
+      mesCoor.push_back( _Rayon2 );
+      break ;
+    }
+    default:
+      break ;
+  }
+  return mesCoor;
+}
+//======================================================================
+void HOMARD_Boundary::SetLimit( double X0, double X1, double X2 )
+{
+  _Xincr = X0; _Yincr = X1; _Zincr = X2;
+}
+//=======================================================================================
+std::vector<double> HOMARD_Boundary::GetLimit() const
+{
+  std::vector<double> mesLimit;
+  mesLimit.push_back( _Xincr );
+  mesLimit.push_back( _Yincr );
+  mesLimit.push_back( _Zincr );
+  return mesLimit;
+}
+//=============================================================================
+void HOMARD_Boundary::AddGroup( const char* Group)
+{
+  _ListGroupSelected.push_back(Group);
+}
+//=============================================================================
+void HOMARD_Boundary::SetGroups( const std::list<std::string>& ListGroup )
+{
+  _ListGroupSelected.clear();
+  std::list<std::string>::const_iterator it = ListGroup.begin();
+  while(it != ListGroup.end())
+    _ListGroupSelected.push_back((*it++));
+}
+//=============================================================================
+const std::list<std::string>& HOMARD_Boundary::GetGroups() const
+{
+  return _ListGroupSelected;
+}
+//=============================================================================
+
+//=============================================================================
+/*!
+ *  default constructor:
+ *  Par defaut, l'adaptation est conforme, sans suivi de frontiere
+ */
+//=============================================================================
+HOMARD_Cas::HOMARD_Cas():
+  _NomDir("/tmp")
+{
+  MESSAGE("HOMARD_Cas");
+}
+//=============================================================================
+HOMARD_Cas::~HOMARD_Cas()
+//=============================================================================
+{
+  MESSAGE("~HOMARD_Cas");
+}
+//=============================================================================
+//=============================================================================
+// Generalites
+//=============================================================================
+//=============================================================================
+std::string HOMARD_Cas::GetDumpPython() const
+{
+  std::ostringstream aScript;
+  // Suivi de frontieres
+  std::list<std::string>::const_iterator it = _ListBoundaryGroup.begin();
+  while (it != _ListBoundaryGroup.end()) {
+    aScript << "smeshhomard.AddBoundaryGroup(\"" << *it << "\", \"";
+    it++;
+    aScript << *it << "\")\n";
+    it++;
+  }
+
+  return aScript.str();
+}
+//=============================================================================
+//=============================================================================
+// Caracteristiques
+//=============================================================================
+//=============================================================================
+int HOMARD_Cas::SetDirName( const char* NomDir )
+{
+  int erreur = 0 ;
+  // On vérifie qu'aucun calcul n'a eu lieu pour ce cas
+  if ( _ListIter.size() > 1 ) { erreur = 1 ; }
+  // Creation
+  if ( CHDIR(NomDir) == 0 ) {
+    _NomDir = std::string( NomDir );
+  }
+  else {
+#ifndef WIN32
+    if ( mkdir(NomDir, S_IRWXU|S_IRGRP|S_IXGRP) == 0 )
+#else
+    if ( _mkdir(NomDir) == 0 )
+#endif
+    {
+      if ( CHDIR(NomDir) == 0 ) { _NomDir = std::string( NomDir ); }
+      else                      { erreur = 2 ; }
+    }
+    else { erreur = 2 ; }
+  }
+  return erreur;
+}
+//=============================================================================
+std::string HOMARD_Cas::GetDirName() const
+{
+  return _NomDir;
+}
+//
+// La boite englobante
+//
+//=============================================================================
+void HOMARD_Cas::SetBoundingBox( const std::vector<double>& extremas )
+{
+  _Boite.clear();
+  _Boite.resize( extremas.size() );
+  for ( unsigned int i = 0; i < extremas.size(); i++ )
+    _Boite[i] = extremas[i];
+}
+//=============================================================================
+const std::vector<double>& HOMARD_Cas::GetBoundingBox() const
+{
+  return _Boite;
+}
+//
+// Les groupes
+//
+//=============================================================================
+void HOMARD_Cas::AddGroup( const char* Group )
+{
+  _ListGroup.push_back(Group);
+}
+//=============================================================================
+void HOMARD_Cas::SetGroups( const std::list<std::string>& ListGroup )
+{
+  _ListGroup.clear();
+  std::list<std::string>::const_iterator it = ListGroup.begin();
+  while(it != ListGroup.end())
+  {
+    _ListGroup.push_back((*it++));
+  }
+}
+//=============================================================================
+const std::list<std::string>& HOMARD_Cas::GetGroups() const
+{
+  return _ListGroup;
+}
+//=============================================================================
+void HOMARD_Cas::SupprGroups()
+{
+  _ListGroup.clear();
+}
+//
+// Les frontieres
+//
+//=============================================================================
+void HOMARD_Cas::AddBoundary( const char* Boundary )
+{
+//   MESSAGE ( ". HOMARD_Cas::AddBoundary : Boundary = " << Boundary );
+  const char* Group = "";
+  AddBoundaryGroup( Boundary, Group );
+}
+//=============================================================================
+void HOMARD_Cas::AddBoundaryGroup( const char* Boundary, const char* Group )
+{
+//   MESSAGE ( ". HOMARD_Cas::AddBoundaryGroup : Boundary = " << Boundary );
+//   MESSAGE ( ". HOMARD_Cas::AddBoundaryGroup : Group = " << Group );
+  _ListBoundaryGroup.push_back( Boundary );
+  _ListBoundaryGroup.push_back( Group    );
+}
+//=============================================================================
+const std::list<std::string>& HOMARD_Cas::GetBoundaryGroup() const
+{
+  return _ListBoundaryGroup;
+}
+//=============================================================================
+void HOMARD_Cas::SupprBoundaryGroup()
+{
+  _ListBoundaryGroup.clear();
+}
+//=============================================================================
+//=============================================================================
+// Liens avec les autres structures
+//=============================================================================
+//=============================================================================
+void HOMARD_Cas::AddIteration( const char* NomIteration )
+{
+  _ListIter.push_back( std::string( NomIteration ) );
+}
+
+//=============================================================================
+//=============================================================================
+HomardDriver::HomardDriver(const std::string siter, const std::string siterp1):
+  _HOMARD_Exec( "" ), _NomDir( "" ), _NomFichierConfBase( "HOMARD.Configuration" ),
+  _NomFichierConf( "" ), _NomFichierDonn( "" ), _siter( "" ), _siterp1( "" ),
+  _Texte( "" ), _bLu( false )
+{
+  MESSAGE("siter = "<<siter<<", siterp1 = "<<siterp1);
+  // Le repertoire ou se trouve l'executable HOMARD
+  std::string dir ;
+  // TODO?
+  if ( getenv("HOMARD_ROOT_DIR") != NULL ) { dir = getenv("HOMARD_ROOT_DIR") ; }
+  dir += "/bin/salome";
+  MESSAGE("dir ="<<dir);
+  // L'executable HOMARD
+  std::string executable = "homard";
+  MESSAGE("executable ="<<executable);
+  // Memorisation du nom complet de l'executable HOMARD
+  _HOMARD_Exec = dir + "/" + executable ;
+  MESSAGE("==> _HOMARD_Exec ="<<_HOMARD_Exec) ;
+  //
+  _siter = siter ;
+  _siterp1 = siterp1 ;
+}
+//=============================================================================
+//=============================================================================
+HomardDriver::~HomardDriver()
+{
+}
+//===============================================================================
+// A. Generalites
+//===============================================================================
+void HomardDriver::TexteInit( const std::string DirCompute, const std::string LogFile, const std::string Langue )
+{
+  MESSAGE("TexteInit, DirCompute ="<<DirCompute<<", LogFile ="<<LogFile);
+//
+  _Texte  = "ListeStd \"" + LogFile + "\"\n" ;
+  _Texte += "RepeTrav \"" + DirCompute + "\"\n" ;
+  _Texte += "RepeInfo \"" + DirCompute + "\"\n" ;
+  _Texte += "Langue \"" + Langue + "\"\n" ;
+//
+}
+//===============================================================================
+void HomardDriver::TexteAdap()
+{
+  MESSAGE("TexteAdap");
+
+  _Texte += "Action   homa\n";
+  _Texte += "CCAssoci med\n";
+  _Texte += "ModeHOMA 1\n";
+  _Texte += "NumeIter " + _siter + "\n";
+  _modeHOMARD = 1;
+}
+//===============================================================================
+void HomardDriver::TexteInfo( int TypeBila, int NumeIter )
+{
+  MESSAGE("TexteInfo: TypeBila ="<<TypeBila<<", NumeIter ="<<NumeIter);
+//
+  _Texte += "ModeHOMA 2\n" ;
+  std::stringstream saux1 ;
+  saux1 << TypeBila ;
+  std::string saux2 = saux1.str() ;
+  _Texte += "TypeBila " + saux2 + "\n" ;
+  if ( NumeIter ==  0 )
+  {
+    _Texte += "NumeIter 0\n" ;
+    _Texte += "Action   info_av\n" ;
+    _Texte += "CCAssoci med\n" ;
+  }
+  else
+  {
+    _Texte += "NumeIter " + _siter + "\n" ;
+    _Texte += "Action   info_ap\n" ;
+    _Texte += "CCAssoci homard\n" ;
+  }
+  _modeHOMARD = 2 ;
+//
+}
+//===============================================================================
+void HomardDriver::TexteMajCoords( int NumeIter )
+{
+  MESSAGE("TexteMajCoords: NumeIter ="<<NumeIter);
+//
+  _Texte += "ModeHOMA 5\n" ;
+  _Texte += "NumeIter " + _siterp1 + "\n" ;
+  _Texte += "Action   homa\n" ;
+  _Texte += "CCAssoci med\n" ;
+  _Texte += "EcriFiHO N_SANS_FRONTIERE\n" ;
+  _modeHOMARD = 5 ;
+//
+}
+//===============================================================================
+// B. Les maillages en entree et en sortie
+//===============================================================================
+void HomardDriver::TexteMaillage( const std::string NomMesh, const std::string MeshFile, int apres )
+{
+  MESSAGE("TexteMaillage, NomMesh  = "<<NomMesh);
+  MESSAGE("TexteMaillage, MeshFile = "<<MeshFile);
+  MESSAGE("TexteMaillage, apres = "<<apres);
+  std::string saux ;
+  saux = "P1" ;
+  if ( apres < 1 ) { saux = "__" ; }
+
+  _Texte += "# Maillages Med " + saux + "\n" ;
+  _Texte += "CCNoMN" + saux + " \"" + NomMesh  + "\"\n" ;
+  _Texte += "CCMaiN" + saux + " \"" + MeshFile + "\"\n" ;
+}
+
+//===============================================================================
+void HomardDriver::TexteMaillageHOMARD( const std::string Dir, const std::string liter, int apres )
+{
+  MESSAGE("TexteMaillageHOMARD, Dir ="<<Dir<<", liter ="<<liter<<", apres ="<<apres);
+  std::string saux ;
+  if ( apres < 1 ) { saux = "__" ; }
+  else             { saux = "P1" ; }
+
+  _Texte += "# Maillage HOMARD " + liter + "\n" ;
+  _Texte += "HOMaiN" + saux + " Mai" + liter   + " \"" + Dir + "/maill." + liter   + ".hom.med\"\n" ;
+}
+
+//===============================================================================
+// C. Le pilotage de l'adaptation
+//===============================================================================
+void HomardDriver::TexteConfRaffDera( int ConfType )
+{
+  MESSAGE("TexteConfRaffDera, ConfType = " << ConfType);
+  //
+  // Type de conformite
+  //
+  std::string saux;
+  switch (ConfType)
+  {
+    case -2: //
+    {
+      saux = "NON_CONFORME_1_ARETE" ;
+      break;
+    }
+    case -1: //
+    {
+      saux = "CONFORME_BOITES" ;
+      break;
+    }
+    case 0: //
+    {
+      saux = "CONFORME" ;
+      break;
+    }
+    case 1: //
+    {
+      saux = "NON_CONFORME" ;
+      break;
+    }
+    case 2: //
+    {
+      saux = "NON_CONFORME_1_NOEUD" ;
+      break;
+    }
+    case 3: //
+    {
+      saux = "NON_CONFORME_INDICATEUR" ;
+      break;
+    }
+  }
+  _Texte += "# Type de conformite\nTypeConf " + saux + "\n" ;
+  //
+  // Type de raffinement/deraffinement
+  //
+  saux = "TypeRaff uniforme\n" ;
+  saux += "TypeDera non" ;
+  _Texte += "# Type de raffinement/deraffinement\n" + saux + "\n" ;
+}
+//===============================================================================
+// D. Les frontieres
+//===============================================================================
+void HomardDriver::TexteBoundaryOption( int BoundaryOption )
+{
+  MESSAGE("TexteBoundaryOption, BoundaryOption = "<<BoundaryOption);
+//
+// Type de suivi de frontiere
+//
+  std::stringstream saux1 ;
+  saux1 << BoundaryOption ;
+  std::string saux = saux1.str() ;
+  _Texte += "SuivFron " + saux + "\n" ;
+//
+}//===============================================================================
+void HomardDriver::TexteBoundaryCAOGr(  const std::string GroupName )
+{
+  MESSAGE("TexteBoundaryCAOGr, GroupName  = "<<GroupName);
+//
+  _Texte += "GrFroCAO \"" + GroupName + "\"\n" ;
+//
+}
+
+//===============================================================================
+void HomardDriver::TexteBoundaryDi(  const std::string MeshName, const std::string MeshFile )
+{
+  MESSAGE("TexteBoundaryDi, MeshName  = "<<MeshName);
+  MESSAGE("TexteBoundaryDi, MeshFile  = "<<MeshFile);
+//
+  _Texte += "#\n# Frontiere discrete\n" ;
+  _Texte += "CCNoMFro \"" + MeshName + "\"\n" ;
+  _Texte += "CCFronti \"" + MeshFile + "\"\n" ;
+//
+}
+//===============================================================================
+void HomardDriver::TexteBoundaryDiGr(  const std::string GroupName )
+{
+  MESSAGE("TexteBoundaryDiGr, GroupName  = "<<GroupName);
+//
+  _Texte += "CCGroFro \"" + GroupName + "\"\n" ;
+//
+}
+//===============================================================================
+void HomardDriver::TexteBoundaryAn( const std::string NameBoundary, int NumeBoundary, int BoundaryType, double x0, double x1, double x2, double x3, double x4, double x5, double x6, double x7 )
+{
+  MESSAGE("TexteBoundaryAn, NameBoundary = "<<NameBoundary);
+//   MESSAGE("TexteBoundaryAn, NumeBoundary = "<<NumeBoundary);
+  MESSAGE("TexteBoundaryAn, BoundaryType = "<<BoundaryType);
+//   MESSAGE("TexteBoundaryAn, coor         = "<< x0<<","<<x1<< ","<< x2<< ","<< x3<<","<<x4<<","<<x5<<","<<x6","<<x7);
+//
+  std::string saux, saux2 ;
+//
+// Commentaires
+//
+  std::stringstream saux1 ;
+  saux1 << NumeBoundary ;
+  saux2 = saux1.str() ;
+  saux = "#\n# Frontiere numero " + saux2 + "\n" ;
+  if ( BoundaryType == 1 )
+  { saux += "# Cylindre\n" ; }
+  if ( BoundaryType == 2 )
+  { saux += "# Sphere\n" ; }
+  if ( BoundaryType == 3 || BoundaryType == 4 )
+  { saux += "# Cone\n" ; }
+  if ( BoundaryType == 5 )
+  { saux += "# Tore\n" ; }
+//
+// Le nom de la frontiere
+//
+  { std::stringstream saux1 ;
+    saux1 << NumeBoundary ;
+    saux += "FANom " + saux1.str() + " \"" + NameBoundary + "\"\n" ;
+  }
+//
+// Type de frontiere
+//
+  { std::stringstream saux1 ;
+    saux1 << NumeBoundary << " " << BoundaryType ;
+    saux += "FAType " + saux1.str() + "\n" ;
+  }
+//
+// Cas du cylindre
+//
+  if ( BoundaryType == 1 )
+  {
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x0 ;
+      saux2 = saux1.str() ;
+      saux += "FAXCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x1 ;
+      saux += "FAYCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x2 ;
+      saux += "FAZCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x3 ;
+      saux += "FAXAxe " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x4 ;
+      saux += "FAYAxe " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x5 ;
+      saux += "FAZAxe " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x6 ;
+      saux += "FARayon " + saux1.str() + "\n" ;
+    }
+ }
+//
+// Cas de la sphere
+//
+  else if ( BoundaryType == 2 )
+  {
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x0 ;
+      saux += "FAXCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x1 ;
+      saux += "FAYCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x2 ;
+      saux += "FAZCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x3 ;
+      saux += "FARayon " + saux1.str() + "\n" ;
+    }
+  }
+//
+// Cas du cone defini par un axe et un angle
+//
+  if ( BoundaryType == 3 )
+  {
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x0 ;
+      saux += "FAXAxe " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x1 ;
+      saux += "FAYAxe " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x2 ;
+      saux += "FAZAxe " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x3 ;
+      saux += "FAAngle " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x4 ;
+      saux += "FAXCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x5 ;
+      saux += "FAYCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x6 ;
+      saux += "FAZCen " + saux1.str() + "\n" ;
+    }
+ }
+//
+// Cas du cone defini par les 2 rayons
+//
+  if ( BoundaryType == 4 )
+  {
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x0 ;
+      saux += "FAXCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x1 ;
+      saux += "FAYCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x2 ;
+      saux += "FAZCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x3 ;
+      saux += "FARayon " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x4 ;
+      saux += "FAXCen2 " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x5 ;
+      saux += "FAYCen2 " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x6 ;
+      saux += "FAZCen2 " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x7 ;
+      saux += "FARayon2 " + saux1.str() + "\n" ;
+    }
+ }
+//
+// Cas du tore
+//
+  if ( BoundaryType == 5 )
+  {
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x0 ;
+      saux2 = saux1.str() ;
+      saux += "FAXCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x1 ;
+      saux += "FAYCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x2 ;
+      saux += "FAZCen " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x3 ;
+      saux += "FAXAxe " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x4 ;
+      saux += "FAYAxe " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x5 ;
+      saux += "FAZAxe " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x6 ;
+      saux += "FARayon  " + saux1.str() + "\n" ;
+    }
+    { std::stringstream saux1 ;
+      saux1 << NumeBoundary << " " << x7 ;
+      saux += "FARayon2 " + saux1.str() + "\n" ;
+    }
+ }
+//
+  _Texte += saux + "#\n" ;
+//
+}
+//===============================================================================
+void HomardDriver::TexteBoundaryAnGr( const std::string NameBoundary, int NumeBoundary, const std::string GroupName )
+{
+  MESSAGE("TexteBoundaryAnGr, NameBoundary  = "<<NameBoundary);
+//   MESSAGE("TexteBoundaryAnGr, NumeBoundary  = "<<NumeBoundary);
+//   MESSAGE("TexteBoundaryAnGr, GroupName  = "<<GroupName);
+//
+// Commentaires
+//
+  std::string saux, saux2 ;
+  std::stringstream saux1 ;
+  saux1 << NumeBoundary ;
+  saux2 = saux1.str() ;
+  saux = "#\n# Lien Frontiere/Groupe numero " + saux2 + "\n" ;
+//
+  saux += "FGNomFro " + saux2 + " \"" + NameBoundary + "\"\n" ;
+  saux += "FGNomGro " + saux2 + " \"" + GroupName + "\"\n" ;
+//
+  _Texte += saux + "#\n" ;
+//
+}
+//===============================================================================
+// F. Les options avancees
+//===============================================================================
+void HomardDriver::TexteAdvanced( int NivMax, double DiamMin, int AdapInit, int ExtraOutput )
+{
+  MESSAGE("TexteAdvanced, NivMax ="<<NivMax<<", DiamMin ="<<DiamMin<<
+          ", AdapInit ="<<AdapInit<<", ExtraOutput ="<<ExtraOutput);
+
+  if ( NivMax > 0 )
+  {
+    _Texte += "# Niveaux extremes\n" ;
+    { std::stringstream saux1 ;
+      saux1 << NivMax ;
+      _Texte += "NiveauMa " + saux1.str() + "\n" ;
+    }
+  }
+  if ( DiamMin > 0 )
+  {
+    _Texte += "# Diametre minimal\n" ;
+    { std::stringstream saux1 ;
+      saux1 << DiamMin ;
+      _Texte += "DiametMi " + saux1.str()  + "\n" ;
+    }
+  }
+  if ( AdapInit != 0 )
+  {
+    if ( AdapInit > 0 )
+    { _Texte += "# Raffinement" ; }
+    else
+    { _Texte += "# Deraffinement" ; }
+    _Texte += " des regions sans indicateur\n" ;
+    { std::stringstream saux1 ;
+      saux1 << AdapInit ;
+      _Texte += "AdapInit " + saux1.str() + "\n" ;
+    }
+  }
+  if ( ExtraOutput % 2 == 0 )
+  {
+    _Texte += "# Sortie des niveaux de raffinement\n" ;
+    _Texte += "NCNiveau NIVEAU\n" ;
+  }
+  if ( ExtraOutput % 3 == 0 )
+  {
+    _Texte += "# Sortie des qualités des mailles\n" ;
+    _Texte += "NCQualit QUAL\n" ;
+  }
+  if ( ExtraOutput % 5 == 0 )
+  {
+    _Texte += "# Sortie des diamètres des mailles\n" ;
+    _Texte += "NCDiamet DIAM\n" ;
+  }
+  if ( ExtraOutput % 7 == 0 )
+  {
+    _Texte += "# Sortie des parents des mailles\n" ;
+    _Texte += "NCParent PARENT\n" ;
+  }
+  if ( ExtraOutput % 11 == 0 )
+  {
+    _Texte += "# Volumes voisins par recollement\n" ;
+    _Texte += "NCVoisRc Voisin-Recollement\n" ;
+  }
+}
+//===============================================================================
+// G. Les messages
+//===============================================================================
+void HomardDriver::TexteInfoCompute( int MessInfo )
+{
+  MESSAGE("TexteAdvanced, MessInfo ="<<MessInfo);
+
+  if ( MessInfo != 0 )
+  {
+     _Texte += "# Messages d'informations\n" ;
+    { std::stringstream saux1 ;
+      saux1 << MessInfo ;
+      _Texte += "MessInfo " + saux1.str()  + "\n" ;
+    }
+   }
+}
+//===============================================================================
+void HomardDriver::CreeFichier( )
+{
+//
+  if ( _modeHOMARD == 1 )
+  { _NomFichierConf = _NomFichierConfBase + "." + _siter + ".vers." + _siterp1 ; }
+  else if ( _modeHOMARD == 2 )
+  { _NomFichierConf = _NomFichierConfBase + "." + _siter + ".info" ; }
+  else if ( _modeHOMARD == 5 )
+  { _NomFichierConf = _NomFichierConfBase + ".majc" ; }
+//
+  std::ofstream Fic(_NomFichierConf.c_str(), std::ios::out ) ;
+  if (Fic.is_open() == true) { Fic << _Texte << std::endl ; }
+  Fic.close() ;
+//
+}
+//===============================================================================
+// Creation du fichier de donnees pour l'information
+//===============================================================================
+void HomardDriver::CreeFichierDonn( )
+{
+//
+  MESSAGE("CreeFichierDonn");
+  _NomFichierDonn = "info.donn" ;
+//
+  std::string data ;
+  data  = "0\n" ;
+  data += "0\n" ;
+  data += "q\n" ;
+  std::ofstream Fic(_NomFichierDonn.c_str(), std::ios::out ) ;
+  if (Fic.is_open() == true) { Fic << data << std::endl ; }
+  Fic.close() ;
+//
+}
+//===============================================================================
+int HomardDriver::ExecuteHomard()
+{
+  MESSAGE("ExecuteHomard");
+  std::string commande ;
+  int codret ;
+  // Copie des Fichiers HOMARD
+  commande = "cp " + _NomFichierConf + " " + _NomFichierConfBase ;
+  codret = system(commande.c_str()) ;
+
+// Execution de HOMARD
+  if ( codret == 0)
+  {
+    commande = _HOMARD_Exec.c_str() ;
+    if ( _NomFichierDonn != "" ) { commande += " < " + _NomFichierDonn ; }
+    codret = system(commande.c_str());
+    if ( codret != 0) { MESSAGE ( "Erreur en executant HOMARD : " << codret ); };
+    _NomFichierDonn = "" ;
+  };
+  return codret ;
+}
+
+//=============================================================================
+//=============================================================================
+HOMARD_Gen::HOMARD_Gen()
+{
+  MESSAGE("HOMARD_Gen");
+}
+
+//=============================================================================
+//=============================================================================
+HOMARD_Gen::~HOMARD_Gen()
+{
+  MESSAGE("~HOMARD_Gen");
+}
+//=============================================================================
+
+//=============================================================================
+/*!
+ *  default constructor:
+ */
+//=============================================================================
+HOMARD_Iteration::HOMARD_Iteration():
+  _Name( "" ),
+  _Etat( 0 ),
+  _NumIter( -1 ),
+  _NomMesh( "" ),
+  _MeshFile( "" ),
+  _LogFile( "" ),
+  _NomDir( "" ),
+  _FileInfo( "" ),
+  _MessInfo( 1 )
+{
+  MESSAGE("HOMARD_Iteration");
+}
+//=============================================================================
+/*!
+ *
+ */
+//=============================================================================
+HOMARD_Iteration::~HOMARD_Iteration()
+{
+  MESSAGE("~HOMARD_Iteration");
+}
+//=============================================================================
+//=============================================================================
+// Generalites
+//=============================================================================
+//=============================================================================
+void HOMARD_Iteration::SetName( const char* Name )
+{
+  _Name = std::string( Name );
+}
+//=============================================================================
+std::string HOMARD_Iteration::GetName() const
+{
+  return _Name;
+}
+//=============================================================================
+//=============================================================================
+// Caracteristiques
+//=============================================================================
+//=============================================================================
+void HOMARD_Iteration::SetDirNameLoc( const char* NomDir )
+{
+  _NomDir = std::string( NomDir );
+}
+//=============================================================================
+std::string HOMARD_Iteration::GetDirNameLoc() const
+{
+   return _NomDir;
+}
+//=============================================================================
+void HOMARD_Iteration::SetNumber( int NumIter )
+{
+  _NumIter = NumIter;
+}
+//=============================================================================
+int HOMARD_Iteration::GetNumber() const
+{
+  return _NumIter;
+}
+//=============================================================================
+void HOMARD_Iteration::SetState( int etat )
+{
+  _Etat = etat;
+}
+//=============================================================================
+int HOMARD_Iteration::GetState() const
+{
+  return _Etat;
+}
+//=============================================================================
+void HOMARD_Iteration::SetMeshName( const char* NomMesh )
+{
+  _NomMesh = std::string( NomMesh );
+}
+//=============================================================================
+std::string HOMARD_Iteration::GetMeshName() const
+{
+  return _NomMesh;
+}
+//=============================================================================
+void HOMARD_Iteration::SetMeshFile( const char* MeshFile )
+{
+  _MeshFile = std::string( MeshFile );
+}
+//=============================================================================
+std::string HOMARD_Iteration::GetMeshFile() const
+{
+  return _MeshFile;
+}
+//=============================================================================
+void HOMARD_Iteration::SetLogFile( const char* LogFile )
+{
+  _LogFile = std::string( LogFile );
+}
+//=============================================================================
+std::string HOMARD_Iteration::GetLogFile() const
+{
+  return _LogFile;
+}
+//=============================================================================
+void HOMARD_Iteration::SetFileInfo( const char* FileInfo )
+{
+  _FileInfo = std::string( FileInfo );
+}
+//=============================================================================
+std::string HOMARD_Iteration::GetFileInfo() const
+{
+  return _FileInfo;
+}
+//=============================================================================
+void HOMARD_Iteration::SetInfoCompute( int MessInfo )
+{
+  _MessInfo = MessInfo;
+}
+//=============================================================================
+int HOMARD_Iteration::GetInfoCompute() const
+{
+  return _MessInfo;
+}
+
+} // namespace SMESHHOMARDImpl /end/
diff --git a/src/SMESH/SMESH_Homard.hxx b/src/SMESH/SMESH_Homard.hxx
new file mode 100644 (file)
index 0000000..5f576ce
--- /dev/null
@@ -0,0 +1,242 @@
+//  HOMARD HOMARD : implementation of HOMARD idl descriptions
+//
+// Copyright (C) 2011-2024  CEA, EDF
+//
+// 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   : HOMARD.hxx
+//  Author : Gerald NICOLAS, EDF
+//  Module : HOMARD
+
+#ifndef _SMESH_HOMARD_ADAPT_HXX_
+#define _SMESH_HOMARD_ADAPT_HXX_
+
+#include "SMESH_SMESH.hxx"
+
+#include <vector>
+#include <string>
+#include <list>
+
+#include <iostream>
+#include <fstream>
+
+#if defined WIN32
+#pragma warning ( disable: 4251 )
+#endif
+
+namespace SMESHHOMARDImpl
+{
+
+class SMESH_EXPORT HOMARD_Boundary
+{
+public:
+  HOMARD_Boundary();
+  ~HOMARD_Boundary();
+
+  // Generalites
+  void                          SetName( const char* Name );
+  std::string                   GetName() const;
+
+  std::string                   GetDumpPython() const;
+
+  // Caracteristiques
+  void                          SetType( int Type );
+  int                           GetType() const;
+
+  void                          SetMeshName( const char* MeshName );
+  std::string                   GetMeshName() const;
+
+  void                          SetDataFile( const char* DataFile );
+  std::string                   GetDataFile() const;
+
+  void                          SetCylinder( double X0, double X1, double X2, double X3,
+                                             double X4, double X5, double X6 );
+  void                          SetSphere( double X0, double X1, double X2, double X3 );
+  void                          SetConeR( double Xcentre1, double Ycentre1, double Zcentre1, double Rayon1,
+                                          double Xcentre2, double Ycentre2, double Zcentre2, double Rayon2);
+  void                          SetConeA( double Xaxe, double Yaxe, double Zaxe, double Angle,
+                                          double Xcentre, double Ycentre, double ZCentre);
+  void                          SetTorus( double X0, double X1, double X2, double X3,
+                                             double X4, double X5, double X6, double X7 );
+
+  std::vector<double>           GetCoords() const;
+
+  void                          SetLimit( double X0, double X1, double X2 );
+  std::vector<double>           GetLimit() const;
+
+  void                          AddGroup( const char* LeGroupe);
+  void                          SetGroups(const std::list<std::string>& ListGroup );
+  const std::list<std::string>& GetGroups() const;
+
+private:
+  std::string                   _Name;
+  std::string                   _DataFile;
+  std::string                   _MeshName;
+  int                           _Type;
+  double                        _Xmin, _Xmax, _Ymin, _Ymax, _Zmin, _Zmax;
+  double                        _Xaxe, _Yaxe, _Zaxe;
+  double                        _Xcentre, _Ycentre, _Zcentre, _rayon;
+  double                        _Xincr, _Yincr, _Zincr;
+  double                        _Xcentre1, _Ycentre1, _Zcentre1, _Rayon1;
+  double                        _Xcentre2, _Ycentre2, _Zcentre2, _Rayon2;
+  double                        _Angle;
+
+  std::list<std::string>        _ListGroupSelected;
+};
+
+class SMESH_EXPORT HOMARD_Cas
+{
+public:
+  HOMARD_Cas();
+  ~HOMARD_Cas();
+
+  // Generalites
+  std::string                   GetDumpPython() const;
+
+  // Caracteristiques
+  int                           SetDirName( const char* NomDir );
+  std::string                   GetDirName() const;
+
+  void                          SetBoundingBox( const std::vector<double>& extremas );
+  const std::vector<double>&    GetBoundingBox() const;
+
+  void                          AddGroup( const char* Group);
+  void                          SetGroups( const std::list<std::string>& ListGroup );
+  const std::list<std::string>& GetGroups() const;
+  void                          SupprGroups();
+
+  void                          AddBoundary( const char* Boundary );
+  void                          AddBoundaryGroup( const char* Boundary, const char* Group );
+  const std::list<std::string>& GetBoundaryGroup() const;
+  void                          SupprBoundaryGroup();
+
+  void                          AddIteration( const char* NomIteration );
+
+private:
+  std::string                   _NomDir;
+  int                           _Etat;
+
+  std::vector<double>           _Boite;         // cf HomardQTCommun pour structure du vecteur
+  std::list<std::string>        _ListGroup;
+  std::list<std::string>        _ListBoundaryGroup;
+
+  typedef std::string           IterName;
+  typedef std::list<IterName>   IterNames;
+  IterNames                     _ListIter;
+};
+
+class SMESH_EXPORT HomardDriver
+{
+public:
+  HomardDriver(const std::string siter, const std::string siterp1);
+  ~HomardDriver();
+  //
+  void        TexteInit( const std::string DirCompute, const std::string LogFile, const std::string Langue );
+  void        TexteInfo( int TypeBila, int NumeIter );
+  void        TexteMajCoords( int NumeIter );
+  void        CreeFichierDonn();
+  void        TexteAdap();
+  void        CreeFichier();
+  void        TexteMaillage( const std::string NomMesh, const std::string MeshFile, int apres );
+  void        TexteMaillageHOMARD( const std::string Dir, const std::string liter, int apres );
+  void        TexteConfRaffDera( int ConfType );
+
+  void        TexteBoundaryOption( int BoundaryOption );
+  void        TexteBoundaryCAOGr( const std::string GroupName );
+  void        TexteBoundaryDi( const std::string MeshName, const std::string MeshFile );
+  void        TexteBoundaryDiGr( const std::string GroupName );
+  void        TexteBoundaryAn( const std::string NameBoundary, int NumeBoundary, int BoundaryType, double x0, double x1, double x2, double x3, double x4, double x5, double x6, double x7 );
+  void        TexteBoundaryAnGr( const std::string NameBoundary, int NumeBoundary, const std::string GroupName );
+
+  void        TexteAdvanced( int NivMax, double DiamMin, int AdapInit, int LevelOutput );
+  void        TexteInfoCompute( int MessInfo );
+  //
+  int         ExecuteHomard();
+
+public:
+  int         _modeHOMARD;
+  std::string _HOMARD_Exec;
+  std::string _NomDir;
+  std::string _NomFichierConfBase;
+  std::string _NomFichierConf;
+  std::string _NomFichierDonn;
+  std::string _siter;
+  std::string _siterp1;
+  std::string _Texte;
+  bool _bLu;
+};
+
+class HOMARD_Iteration;
+
+class SMESH_EXPORT HOMARD_Gen
+{
+public :
+  HOMARD_Gen();
+  ~HOMARD_Gen();
+};
+
+class SMESH_EXPORT HOMARD_Iteration
+{
+public:
+  HOMARD_Iteration();
+  ~HOMARD_Iteration();
+
+  // Generalites
+  void                          SetName( const char* Name );
+  std::string                   GetName() const;
+
+  // Caracteristiques
+  void                          SetDirNameLoc( const char* NomDir );
+  std::string                   GetDirNameLoc() const;
+
+  void                          SetNumber( int NumIter );
+  int                           GetNumber() const;
+
+  void                          SetState( int etat );
+  int                           GetState() const;
+
+  void                          SetMeshName( const char* NomMesh );
+  std::string                   GetMeshName() const;
+
+  void                          SetMeshFile( const char* MeshFile );
+  std::string                   GetMeshFile() const;
+
+  void                          SetLogFile( const char* LogFile );
+  std::string                   GetLogFile() const;
+
+  void                          SetFileInfo( const char* FileInfo );
+  std::string                   GetFileInfo() const;
+
+  // Divers
+  void                          SetInfoCompute( int MessInfo );
+  int                           GetInfoCompute() const;
+
+private:
+  std::string                   _Name;
+  int                           _Etat;
+  int                           _NumIter;
+  std::string                   _NomMesh;
+  std::string                   _MeshFile;
+  std::string                   _LogFile;
+  std::string                   _NomDir;
+  std::string                   _FileInfo;
+  int                           _MessInfo;
+};
+
+} // namespace SMESHHOMARDImpl
+
+#endif
index 6d49c5f561d8a506389ff7fb20b15a439741a791..a742c0e07c2fd9e43cb5d81d04d5af02fea98393 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 32a7389d2349647ba1c3e03fa36a8ea14bb6c0bd..bcf1e9407745c63046635dff62f26f55d387f5fd 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 4f57f60e68163c39c854941dc00b5c7d1246c073..d75aead36117719e5a708e76bdec63d0e4195d9d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -146,7 +146,7 @@ void SMESH_Hypothesis::SetLibName(const char* theLibName)
 //purpose  : Find a mesh with given persistent ID
 //=======================================================================
 
-SMESH_Mesh* SMESH_Hypothesis::GetMeshByPersistentID(int id)
+SMESH_Mesh* SMESH_Hypothesis::GetMeshByPersistentID(int id) const
 {
   StudyContextStruct* myStudyContext = _gen->GetStudyContext();
   map<int, SMESH_Mesh*>::iterator itm = myStudyContext->mapMesh.begin();
index 11f67c7e93d167be549211bac49ca0cc2f171855..af740366a0b3198ac62ebe9505c1ffb5baec5622 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -128,7 +128,7 @@ public:
   /*!
    * \brief Find a mesh with given persistent ID
    */
-  SMESH_Mesh* GetMeshByPersistentID(int id);
+  SMESH_Mesh* GetMeshByPersistentID(int id) const;
 
 protected:
   SMESH_Gen* _gen;
index 9ed363a17251602bd888c851959075cb107425bb..2f7c6efa7599da99586107a7ee7f149bd28567b8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -57,7 +57,7 @@
 
 #include <GEOMUtils.hxx>
 
-#undef _Precision_HeaderFile
+//#undef _Precision_HeaderFile
 #include <BRepBndLib.hxx>
 #include <BRepPrimAPI_MakeBox.hxx>
 #include <Bnd_Box.hxx>
 #ifndef WIN32
 #include <boost/thread/thread.hpp>
 #include <boost/bind.hpp>
-#else 
+#else
 #include <pthread.h>
 #endif
 
+#ifndef WIN32
+#include <boost/filesystem.hpp>
+namespace fs=boost::filesystem;
+#endif
+
 // maximum stored group name length in MED file
 #define MAX_MED_GROUP_NAME_LENGTH 80
 
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-#else
-static int MYDEBUG = 0;
-#endif
-
 #define cSMESH_Hyp(h) static_cast<const SMESH_Hypothesis*>(h)
 
 typedef SMESH_HypoFilter THypType;
@@ -99,28 +98,46 @@ class SMESH_Mesh::SubMeshHolder : public SMESHDS_TSubMeshHolder< SMESH_subMesh >
 
 //=============================================================================
 /*!
- * 
+ *
  */
 //=============================================================================
 
-SMESH_Mesh::SMESH_Mesh(int               theLocalId, 
+SMESH_Mesh::SMESH_Mesh(int               theLocalId,
                        SMESH_Gen*        theGen,
                        bool              theIsEmbeddedMode,
                        SMESHDS_Document* theDocument):
   _groupId( 0 ), _nbSubShapes( 0 )
 {
-  if(MYDEBUG) MESSAGE("SMESH_Mesh::SMESH_Mesh(int localId)");
+  MESSAGE("SMESH_Mesh::SMESH_Mesh(int localId)");
   _id            = theLocalId;
   _gen           = theGen;
-  _myDocument    = theDocument;
-  _myMeshDS      = theDocument->NewMesh(theIsEmbeddedMode,theLocalId);
+  _document    = theDocument;
+  _meshDS      = theDocument->NewMesh(theIsEmbeddedMode,theLocalId);
   _isShapeToMesh = false;
   _isAutoColor   = false;
   _isModified    = false;
   _shapeDiagonal = 0.0;
   _callUp        = NULL;
-  _myMeshDS->ShapeToMesh( PseudoShape() );
+  _meshDS->ShapeToMesh( PseudoShape() );
   _subMeshHolder = new SubMeshHolder;
+
+  // assure unique persistent ID
+  if ( _document->NbMeshes() > 1 )
+  {
+    std::set< int > ids;
+    for ( _document->InitMeshesIterator(); _document->MoreMesh(); )
+    {
+      SMESHDS_Mesh * meshDS =_document->NextMesh();
+      if ( meshDS != _meshDS )
+        ids.insert( meshDS->GetPersistentId() );
+    }
+
+    if ( ids.count( _meshDS->GetPersistentId() ))
+    {
+      int uniqueID = *ids.rbegin() + 1;
+      _meshDS->SetPersistentId( uniqueID );
+    }
+  }
 }
 
 //================================================================================
@@ -134,8 +151,8 @@ SMESH_Mesh::SMESH_Mesh():
   _groupId( 0 ),
   _nbSubShapes( 0 ),
   _isShapeToMesh( false ),
-  _myDocument( 0 ),
-  _myMeshDS( 0 ),
+  _document( 0 ),
+  _meshDS( 0 ),
   _gen( 0 ),
   _isAutoColor( false ),
   _isModified( false ),
@@ -150,13 +167,11 @@ namespace
 #ifndef WIN32
   void deleteMeshDS(SMESHDS_Mesh* meshDS)
   {
-    //cout << "deleteMeshDS( " << meshDS << endl;
     delete meshDS;
   }
 #else
   static void* deleteMeshDS(void* meshDS)
   {
-    //cout << "deleteMeshDS( " << meshDS << endl;
     SMESHDS_Mesh* m = (SMESHDS_Mesh*)meshDS;
     if(m) {
       delete m;
@@ -174,11 +189,11 @@ namespace
 
 SMESH_Mesh::~SMESH_Mesh()
 {
-  if(MYDEBUG) MESSAGE("SMESH_Mesh::~SMESH_Mesh");
+  MESSAGE("SMESH_Mesh::~SMESH_Mesh");
 
-  if ( _myDocument ) // avoid destructing _myMeshDS from ~SMESH_Gen()
-    _myDocument->RemoveMesh( _id );
-  _myDocument = 0;
+  if ( _document ) // avoid destructing _meshDS from ~SMESH_Gen()
+    _document->RemoveMesh( _id );
+  _document = 0;
 
   // remove self from studyContext
   if ( _gen )
@@ -187,7 +202,7 @@ SMESH_Mesh::~SMESH_Mesh()
     studyContext->mapMesh.erase( _id );
   }
 
-  _myMeshDS->ClearMesh();
+  _meshDS->ClearMesh();
 
   // issue 0020340: EDF 1022 SMESH : Crash with FindNodeClosestTo in a second new study
   //   Notify event listeners at least that something happens
@@ -208,13 +223,13 @@ SMESH_Mesh::~SMESH_Mesh()
   if ( _callUp) delete _callUp;
   _callUp = 0;
 
-  if ( _myMeshDS ) {
-    // delete _myMeshDS, in a thread in order not to block closing a study with large meshes
+  if ( _meshDS ) {
+    // delete _meshDS, in a thread in order not to block closing a study with large meshes
 #ifndef WIN32
-    boost::thread aThread(boost::bind( & deleteMeshDS, _myMeshDS ));
+    boost::thread aThread(boost::bind( & deleteMeshDS, _meshDS ));
 #else
     pthread_t thread;
-    int result=pthread_create(&thread, NULL, deleteMeshDS, (void*)_myMeshDS);
+    int result=pthread_create(&thread, NULL, deleteMeshDS, (void*)_meshDS);
 #endif
   }
 }
@@ -227,7 +242,7 @@ SMESH_Mesh::~SMESH_Mesh()
 
 bool SMESH_Mesh::MeshExists( int meshId ) const
 {
-  return _myDocument ? bool( _myDocument->GetMesh( meshId )) : false;
+  return _document ? bool( _document->GetMesh( meshId )) : false;
 }
 
 //================================================================================
@@ -258,15 +273,15 @@ SMESH_Mesh* SMESH_Mesh::FindMesh( int meshId ) const
 
 void SMESH_Mesh::ShapeToMesh(const TopoDS_Shape & aShape)
 {
-  if(MYDEBUG) MESSAGE("SMESH_Mesh::ShapeToMesh");
+  MESSAGE("SMESH_Mesh::ShapeToMesh");
 
   if ( !aShape.IsNull() && _isShapeToMesh ) {
     if ( aShape.ShapeType() != TopAbs_COMPOUND && // group contents is allowed to change
-         _myMeshDS->ShapeToMesh().ShapeType() != TopAbs_COMPOUND )
+         _meshDS->ShapeToMesh().ShapeType() != TopAbs_COMPOUND )
       throw SALOME_Exception(LOCALIZED ("a shape to mesh has already been defined"));
   }
   // clear current data
-  if ( !_myMeshDS->ShapeToMesh().IsNull() )
+  if ( !_meshDS->ShapeToMesh().IsNull() )
   {
     // removal of a shape to mesh, delete objects referring to sub-shapes:
     // - sub-meshes
@@ -275,7 +290,7 @@ void SMESH_Mesh::ShapeToMesh(const TopoDS_Shape & aShape)
     std::map <int, SMESH_Group *>::iterator i_gr = _mapGroup.begin();
     while ( i_gr != _mapGroup.end() ) {
       if ( dynamic_cast<SMESHDS_GroupOnGeom*>( i_gr->second->GetGroupDS() )) {
-        _myMeshDS->RemoveGroup( i_gr->second->GetGroupDS() );
+        _meshDS->RemoveGroup( i_gr->second->GetGroupDS() );
         delete i_gr->second;
         _mapGroup.erase( i_gr++ );
       }
@@ -286,7 +301,7 @@ void SMESH_Mesh::ShapeToMesh(const TopoDS_Shape & aShape)
 
     // clear SMESHDS
     TopoDS_Shape aNullShape;
-    _myMeshDS->ShapeToMesh( aNullShape );
+    _meshDS->ShapeToMesh( aNullShape );
 
     _shapeDiagonal = 0.0;
   }
@@ -294,9 +309,9 @@ void SMESH_Mesh::ShapeToMesh(const TopoDS_Shape & aShape)
   // set a new geometry
   if ( !aShape.IsNull() )
   {
-    _myMeshDS->ShapeToMesh(aShape);
+    _meshDS->ShapeToMesh(aShape);
     _isShapeToMesh = true;
-    _nbSubShapes = _myMeshDS->MaxShapeIndex();
+    _nbSubShapes = _meshDS->MaxShapeIndex();
 
     // fill map of ancestors
     fillAncestorsMap(aShape);
@@ -305,7 +320,7 @@ void SMESH_Mesh::ShapeToMesh(const TopoDS_Shape & aShape)
   {
     _isShapeToMesh = false;
     _shapeDiagonal = 0.0;
-    _myMeshDS->ShapeToMesh( PseudoShape() );
+    _meshDS->ShapeToMesh( PseudoShape() );
   }
   _isModified = false;
 }
@@ -318,7 +333,7 @@ void SMESH_Mesh::ShapeToMesh(const TopoDS_Shape & aShape)
 
 TopoDS_Shape SMESH_Mesh::GetShapeToMesh() const
 {
-  return _myMeshDS->ShapeToMesh();
+  return _meshDS->ShapeToMesh();
 }
 
 //=======================================================================
@@ -411,7 +426,7 @@ void SMESH_Mesh::Clear()
   if ( HasShapeToMesh() ) // remove all nodes and elements
   {
     // clear mesh data
-    _myMeshDS->ClearMesh();
+    _meshDS->ClearMesh();
 
     // update compute state of submeshes
     if ( SMESH_subMesh *sm = GetSubMeshContaining( GetShapeToMesh() ) )
@@ -474,7 +489,7 @@ int SMESH_Mesh::UNVToMesh(const char* theFileName)
   _isShapeToMesh = false;
 
   DriverUNV_R_SMDS_Mesh myReader;
-  myReader.SetMesh(_myMeshDS);
+  myReader.SetMesh(_meshDS);
   myReader.SetFile(theFileName);
   myReader.SetMeshId(-1);
   myReader.Perform();
@@ -486,7 +501,7 @@ int SMESH_Mesh::UNVToMesh(const char* theFileName)
   {
     SMDS_MeshGroup*   aGroup = gr2names->first;
     const std::string& aName = gr2names->second;
-    SMESHDS_Group* aGroupDS = new SMESHDS_Group( anId++, _myMeshDS, aGroup->GetType() );
+    SMESHDS_Group* aGroupDS = new SMESHDS_Group( anId++, _meshDS, aGroup->GetType() );
     aGroupDS->SMDSGroup() = std::move( *aGroup );
     aGroupDS->SetStoreName( aName.c_str() );
     AddGroup( aGroupDS );
@@ -507,15 +522,17 @@ int SMESH_Mesh::MEDToMesh(const char* theFileName, const char* theMeshName)
   _isShapeToMesh = false;
 
   DriverMED_R_SMESHDS_Mesh myReader;
-  myReader.SetMesh(_myMeshDS);
+  myReader.SetMesh(_meshDS);
   myReader.SetMeshId(-1);
   myReader.SetFile(theFileName);
   myReader.SetMeshName(theMeshName);
   Driver_Mesh::Status status = myReader.Perform();
-#ifdef _DEBUG_
-  SMESH_ComputeErrorPtr er = myReader.GetError();
-  if ( er && !er->IsOK() ) std::cout << er->myComment << std::endl;
-#endif
+
+  if (SALOME::VerbosityActivated())
+  {
+    SMESH_ComputeErrorPtr er = myReader.GetError();
+    if ( er && !er->IsOK() ) std::cout << er->myComment << std::endl;
+  }
 
   // Reading groups (sub-meshes are out of scope of MED import functionality)
   std::list<TNameAndType> aGroupNames = myReader.GetGroupNamesAndTypes();
@@ -532,8 +549,8 @@ int SMESH_Mesh::MEDToMesh(const char* theFileName, const char* theMeshName)
     }
   }
 
-  _myMeshDS->Modified();
-  _myMeshDS->CompactMesh();
+  _meshDS->Modified();
+  _meshDS->CompactMesh();
 
   return (int) status;
 }
@@ -550,7 +567,7 @@ std::string SMESH_Mesh::STLToMesh(const char* theFileName)
   _isShapeToMesh = false;
 
   DriverSTL_R_SMDS_Mesh myReader;
-  myReader.SetMesh(_myMeshDS);
+  myReader.SetMesh(_meshDS);
   myReader.SetFile(theFileName);
   myReader.SetMeshId(-1);
   myReader.Perform();
@@ -574,7 +591,7 @@ int SMESH_Mesh::CGNSToMesh(const char*  theFileName,
 #ifdef WITH_CGNS
 
   DriverCGNS_Read myReader;
-  myReader.SetMesh(_myMeshDS);
+  myReader.SetMesh(_meshDS);
   myReader.SetFile(theFileName);
   myReader.SetMeshId(theMeshIndex);
   res = myReader.Perform();
@@ -597,7 +614,7 @@ SMESH_ComputeErrorPtr SMESH_Mesh::GMFToMesh(const char* theFileName,
                                             bool        theMakeRequiredGroups)
 {
   DriverGMF_Read myReader;
-  myReader.SetMesh(_myMeshDS);
+  myReader.SetMesh(_meshDS);
   myReader.SetFile(theFileName);
   myReader.SetMakeRequiredGroups( theMakeRequiredGroups );
   myReader.Perform();
@@ -611,7 +628,7 @@ SMESH_ComputeErrorPtr SMESH_Mesh::GMFToMesh(const char* theFileName,
 
 //=============================================================================
 /*!
- * 
+ *
  */
 //=============================================================================
 
@@ -620,8 +637,7 @@ SMESH_Mesh::AddHypothesis(const TopoDS_Shape & aSubShape,
                           int                  anHypId,
                           std::string*         anError  )
 {
-  Unexpect aCatch(SalomeException);
-  if(MYDEBUG) MESSAGE("SMESH_Mesh::AddHypothesis");
+  MESSAGE("SMESH_Mesh::AddHypothesis");
 
   if ( anError )
     anError->clear();
@@ -645,7 +661,7 @@ SMESH_Mesh::AddHypothesis(const TopoDS_Shape & aSubShape,
     std::string hypName = anHyp->GetName();
     if ( hypName == "NotConformAllowed" )
     {
-      if(MYDEBUG) MESSAGE( "Hypothesis <NotConformAllowed> can be only global" );
+      MESSAGE( "Hypothesis <NotConformAllowed> can be only global" );
       return SMESH_Hypothesis::HYP_INCOMPATIBLE;
     }
   }
@@ -688,7 +704,7 @@ SMESH_Mesh::AddHypothesis(const TopoDS_Shape & aSubShape,
       while ( smIt->more() ) {
         SMESH_subMesh* sm = smIt->next();
         if ( sm->IsApplicableHypothesis( anHyp )) {
-          ret2 = sm->CheckConcurrentHypothesis( anHyp->GetType() );
+          ret2 = sm->CheckConcurrentHypothesis( anHyp );
           if (ret2 > ret) {
             ret = ret2;
             break;
@@ -700,14 +716,14 @@ SMESH_Mesh::AddHypothesis(const TopoDS_Shape & aSubShape,
   HasModificationsToDiscard(); // to reset _isModified flag if a mesh becomes empty
   GetMeshDS()->Modified();
 
-  if(MYDEBUG) subMesh->DumpAlgoState(true);
-  if(MYDEBUG) SCRUTE(ret);
+  if(SALOME::VerbosityActivated()) subMesh->DumpAlgoState(true);
+  SCRUTE(ret);
   return ret;
 }
 
 //=============================================================================
 /*!
- * 
+ *
  */
 //=============================================================================
 
@@ -715,17 +731,16 @@ SMESH_Hypothesis::Hypothesis_Status
 SMESH_Mesh::RemoveHypothesis(const TopoDS_Shape & aSubShape,
                              int                    anHypId)
 {
-  Unexpect aCatch(SalomeException);
-  if(MYDEBUG) MESSAGE("SMESH_Mesh::RemoveHypothesis");
+  MESSAGE("SMESH_Mesh::RemoveHypothesis");
 
   StudyContextStruct *sc = _gen->GetStudyContext();
   if (sc->mapHypothesis.find(anHypId) == sc->mapHypothesis.end())
     throw SALOME_Exception(LOCALIZED("hypothesis does not exist"));
 
   SMESH_Hypothesis *anHyp = sc->mapHypothesis[anHypId];
-  if(MYDEBUG) { SCRUTE(anHyp->GetType()); }
+  SCRUTE(anHyp->GetType());
 
-  // shape 
+  // shape
 
   bool                     isAlgo = ( !anHyp->GetType() == SMESHDS_Hypothesis::PARAM_ALGO );
   SMESH_subMesh::algo_event event = isAlgo ? SMESH_subMesh::REMOVE_ALGO : SMESH_subMesh::REMOVE_HYP;
@@ -737,7 +752,7 @@ SMESH_Mesh::RemoveHypothesis(const TopoDS_Shape & aSubShape,
   // there may appear concurrent hyps that were covered by the removed hyp
   if (ret < SMESH_Hypothesis::HYP_CONCURRENT &&
       subMesh->IsApplicableHypothesis( anHyp ) &&
-      subMesh->CheckConcurrentHypothesis( anHyp->GetType() ) != SMESH_Hypothesis::HYP_OK)
+      subMesh->CheckConcurrentHypothesis( anHyp ) != SMESH_Hypothesis::HYP_OK)
     ret = SMESH_Hypothesis::HYP_CONCURRENT;
 
   // sub-shapes
@@ -758,7 +773,7 @@ SMESH_Mesh::RemoveHypothesis(const TopoDS_Shape & aSubShape,
       while ( smIt->more() ) {
         SMESH_subMesh* sm = smIt->next();
         if ( sm->IsApplicableHypothesis( anHyp )) {
-          ret2 = sm->CheckConcurrentHypothesis( anHyp->GetType() );
+          ret2 = sm->CheckConcurrentHypothesis( anHyp );
           if (ret2 > ret) {
             ret = ret2;
             break;
@@ -771,21 +786,21 @@ SMESH_Mesh::RemoveHypothesis(const TopoDS_Shape & aSubShape,
   HasModificationsToDiscard(); // to reset _isModified flag if mesh become empty
   GetMeshDS()->Modified();
 
-  if(MYDEBUG) subMesh->DumpAlgoState(true);
-  if(MYDEBUG) SCRUTE(ret);
+  if(SALOME::VerbosityActivated()) subMesh->DumpAlgoState(true);
+  SCRUTE(ret);
   return ret;
 }
 
 //=============================================================================
 /*!
- * 
+ *
  */
 //=============================================================================
 
 const std::list<const SMESHDS_Hypothesis*>&
 SMESH_Mesh::GetHypothesisList(const TopoDS_Shape & aSubShape) const
 {
-  return _myMeshDS->GetHypothesis(aSubShape);
+  return _meshDS->GetHypothesis(aSubShape);
 }
 
 //=======================================================================
@@ -828,7 +843,7 @@ const SMESH_Hypothesis * SMESH_Mesh::GetHypothesis(const SMESH_subMesh *   aSubM
 
   {
     const TopoDS_Shape & aSubShape = aSubMesh->GetSubShape();
-    const std::list<const SMESHDS_Hypothesis*>& hypList = _myMeshDS->GetHypothesis(aSubShape);
+    const std::list<const SMESHDS_Hypothesis*>& hypList = _meshDS->GetHypothesis(aSubShape);
     std::list<const SMESHDS_Hypothesis*>::const_iterator hyp = hypList.begin();
     for ( ; hyp != hypList.end(); hyp++ ) {
       const SMESH_Hypothesis * h = cSMESH_Hyp( *hyp );
@@ -845,11 +860,11 @@ const SMESH_Hypothesis * SMESH_Mesh::GetHypothesis(const SMESH_subMesh *   aSubM
       const_cast< std::vector< SMESH_subMesh * > & > ( aSubMesh->GetAncestors() );
     SortByMeshOrder( ancestors );
 
-    std::vector<SMESH_subMesh*>::const_iterator smIt = ancestors.begin(); 
+    std::vector<SMESH_subMesh*>::const_iterator smIt = ancestors.begin();
     for ( ; smIt != ancestors.end(); smIt++ )
     {
       const TopoDS_Shape& curSh = (*smIt)->GetSubShape();
-      const std::list<const SMESHDS_Hypothesis*>& hypList = _myMeshDS->GetHypothesis(curSh);
+      const std::list<const SMESHDS_Hypothesis*>& hypList = _meshDS->GetHypothesis(curSh);
       std::list<const SMESHDS_Hypothesis*>::const_iterator hyp = hypList.begin();
       for ( ; hyp != hypList.end(); hyp++ ) {
         const SMESH_Hypothesis * h = cSMESH_Hyp( *hyp );
@@ -921,7 +936,7 @@ int SMESH_Mesh::GetHypotheses(const SMESH_subMesh *                    aSubMesh,
   // get hypos from aSubShape
   {
     const TopoDS_Shape & aSubShape = aSubMesh->GetSubShape();
-    const std::list<const SMESHDS_Hypothesis*>& hypList = _myMeshDS->GetHypothesis(aSubShape);
+    const std::list<const SMESHDS_Hypothesis*>& hypList = _meshDS->GetHypothesis(aSubShape);
     for ( hyp = hypList.begin(); hyp != hypList.end(); hyp++ )
     {
       const SMESH_Hypothesis* h = cSMESH_Hyp( *hyp );
@@ -950,7 +965,7 @@ int SMESH_Mesh::GetHypotheses(const SMESH_subMesh *                    aSubMesh,
     for ( ; smIt != ancestors.end(); smIt++ )
     {
       const TopoDS_Shape& curSh = (*smIt)->GetSubShape();
-      const std::list<const SMESHDS_Hypothesis*>& hypList = _myMeshDS->GetHypothesis(curSh);
+      const std::list<const SMESHDS_Hypothesis*>& hypList = _meshDS->GetHypothesis(curSh);
       for ( hyp = hypList.begin(); hyp != hypList.end(); hyp++ )
       {
         const SMESH_Hypothesis* h = cSMESH_Hyp( *hyp );
@@ -988,25 +1003,23 @@ SMESH_Hypothesis * SMESH_Mesh::GetHypothesis(const int anHypId) const
 
 //=============================================================================
 /*!
- * 
+ *
  */
 //=============================================================================
 
 const std::list<SMESHDS_Command*> & SMESH_Mesh::GetLog()
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->GetScript()->GetCommands();
+  return _meshDS->GetScript()->GetCommands();
 }
 
 //=============================================================================
 /*!
- * 
+ *
  */
 //=============================================================================
 void SMESH_Mesh::ClearLog()
 {
-  Unexpect aCatch(SalomeException);
-  _myMeshDS->GetScript()->Clear();
+  _meshDS->GetScript()->Clear();
 }
 
 //=============================================================================
@@ -1017,7 +1030,7 @@ void SMESH_Mesh::ClearLog()
 
 SMESH_subMesh * SMESH_Mesh::GetSubMesh(const TopoDS_Shape & aSubShape)
 {
-  int index = _myMeshDS->ShapeToIndex(aSubShape);
+  int index = _meshDS->ShapeToIndex(aSubShape);
   if ( !index && aSubShape.IsNull() )
     return 0;
 
@@ -1027,10 +1040,10 @@ SMESH_subMesh * SMESH_Mesh::GetSubMesh(const TopoDS_Shape & aSubShape)
     TopoDS_Iterator it( aSubShape );
     if ( it.More() )
     {
-      index = _myMeshDS->AddCompoundSubmesh( aSubShape, it.Value().ShapeType() );
+      index = _meshDS->AddCompoundSubmesh( aSubShape, it.Value().ShapeType() );
       // fill map of Ancestors
       while ( _nbSubShapes < index )
-        fillAncestorsMap( _myMeshDS->IndexToShape( ++_nbSubShapes ));
+        fillAncestorsMap( _meshDS->IndexToShape( ++_nbSubShapes ));
     }
   }
   // if ( !index )
@@ -1039,7 +1052,7 @@ SMESH_subMesh * SMESH_Mesh::GetSubMesh(const TopoDS_Shape & aSubShape)
   SMESH_subMesh* aSubMesh = _subMeshHolder->Get( index );
   if ( !aSubMesh )
   {
-    aSubMesh = new SMESH_subMesh(index, this, _myMeshDS, aSubShape);
+    aSubMesh = new SMESH_subMesh(index, this, _meshDS, aSubShape);
     _subMeshHolder->Add( index, aSubMesh );
 
     // include non-computable sub-meshes in SMESH_subMesh::_ancestors of sub-submeshes
@@ -1069,7 +1082,7 @@ SMESH_subMesh * SMESH_Mesh::GetSubMesh(const TopoDS_Shape & aSubShape)
 
 SMESH_subMesh *SMESH_Mesh::GetSubMeshContaining(const TopoDS_Shape & aSubShape) const
 {
-  int index = _myMeshDS->ShapeToIndex(aSubShape);
+  int index = _meshDS->ShapeToIndex(aSubShape);
   return GetSubMeshContaining( index );
 }
 
@@ -1178,16 +1191,15 @@ bool SMESH_Mesh::IsUsedHypothesis(SMESHDS_Hypothesis * anHyp,
 
 void SMESH_Mesh::NotifySubMeshesHypothesisModification(const SMESH_Hypothesis* hyp)
 {
-  Unexpect aCatch(SalomeException);
 
   if ( !GetMeshDS()->IsUsedHypothesis( hyp ))
     return;
 
-  int nbEntities = ( _myMeshDS->NbNodes() + _myMeshDS->NbElements() );
+  smIdType nbEntities = ( _meshDS->NbNodes() + _meshDS->NbElements() );
   if ( hyp && _callUp && !_callUp->IsLoaded() ) // for not loaded mesh (#16648)
   {
     _callUp->HypothesisModified( hyp->GetID(), /*updateIcons=*/true );
-    nbEntities = ( _myMeshDS->NbNodes() + _myMeshDS->NbElements() ); // after loading mesh
+    nbEntities = ( _meshDS->NbNodes() + _meshDS->NbElements() ); // after loading mesh
   }
 
   SMESH_Algo *algo;
@@ -1257,7 +1269,7 @@ void SMESH_Mesh::NotifySubMeshesHypothesisModification(const SMESH_Hypothesis* h
   HasModificationsToDiscard(); // to reset _isModified flag if mesh becomes empty
   GetMeshDS()->Modified();
 
-  int newNbEntities = ( _myMeshDS->NbNodes() + _myMeshDS->NbElements() );
+  smIdType newNbEntities = ( _meshDS->NbNodes() + _meshDS->NbElements() );
   if ( hyp && _callUp )
     _callUp->HypothesisModified( hyp->GetID(), newNbEntities != nbEntities );
 }
@@ -1269,13 +1281,11 @@ void SMESH_Mesh::NotifySubMeshesHypothesisModification(const SMESH_Hypothesis* h
 //=============================================================================
 void SMESH_Mesh::SetAutoColor(bool theAutoColor)
 {
-  Unexpect aCatch(SalomeException);
   _isAutoColor = theAutoColor;
 }
 
 bool SMESH_Mesh::GetAutoColor()
 {
-  Unexpect aCatch(SalomeException);
   return _isAutoColor;
 }
 
@@ -1394,69 +1404,47 @@ bool SMESH_Mesh::HasDuplicatedGroupNamesMED()
 
 //================================================================================
 /*!
- * \brief Export the mesh to a med file
- *  \param [in] file - name of the MED file
- *  \param [in] theMeshName - name of this mesh
- *  \param [in] theAutoGroups - boolean parameter for creating/not creating
- *              the groups Group_On_All_Nodes, Group_On_All_Faces, ... ;
- *              the typical use is auto_groups=false.
- *  \param [in] theVersion - define the minor (xy, where version is x.y.z) of MED file format.
- *              If theVersion is equal to -1, the minor version is not changed (default).
- *  \param [in] meshPart - mesh data to export
- *  \param [in] theAutoDimension - if \c true, 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 \a theAutoDimension is \c false, the space dimension is always 3.
- *  \param [in] theAddODOnVertices - to create 0D elements on all vertices
- *  \param [in] theAllElemsToGroup - to make every element to belong to any group (PAL23413)
- *  \param [in] ZTolerance - tolerance in Z direction. If Z coordinate of a node is close to zero
- *              within a given tolerance, the coordinate is set to zero.
- *              If \a ZTolerance is negative, the node coordinates are kept as is.
- *  \return int - mesh index in the file
+ * \brief Export the mesh to a writer
  */
 //================================================================================
 
-void SMESH_Mesh::ExportMED(const char *        file,
-                           const char*         theMeshName,
-                           bool                theAutoGroups,
-                           int                 theVersion,
-                           const SMESHDS_Mesh* meshPart,
-                           bool                theAutoDimension,
-                           bool                theAddODOnVertices,
-                           double              theZTolerance,
-                           bool                theAllElemsToGroup)
+void SMESH_Mesh::exportMEDCommmon(DriverMED_W_SMESHDS_Mesh& theWriter,
+                                  const char*               theMeshName,
+                                  bool                      theAutoGroups,
+                                  const SMESHDS_Mesh*       theMeshPart,
+                                  bool                      theAutoDimension,
+                                  bool                      theAddODOnVertices,
+                                  double                    theZTolerance,
+                                  bool                      theSaveNumbers)
 {
-  MESSAGE("MED_VERSION:"<< theVersion);
+  Driver_Mesh::Status status = Driver_Mesh::DRS_OK;
+
   SMESH_TRY;
 
-  DriverMED_W_SMESHDS_Mesh myWriter;
-  myWriter.SetFile         ( file , theVersion);
-  myWriter.SetMesh         ( meshPart ? (SMESHDS_Mesh*) meshPart : _myMeshDS   );
-  myWriter.SetAutoDimension( theAutoDimension );
-  myWriter.AddODOnVertices ( theAddODOnVertices );
-  myWriter.SetZTolerance   ( theZTolerance );
+  theWriter.SetMesh         ( theMeshPart ? (SMESHDS_Mesh*) theMeshPart : _meshDS   );
+  theWriter.SetAutoDimension( theAutoDimension );
+  theWriter.AddODOnVertices ( theAddODOnVertices );
+  theWriter.SetZTolerance   ( theZTolerance );
+  theWriter.SetSaveNumbers  ( theSaveNumbers );
   if ( !theMeshName )
-    myWriter.SetMeshId     ( _id         );
+    theWriter.SetMeshId     ( _id         );
   else {
-    myWriter.SetMeshId     ( -1          );
-    myWriter.SetMeshName   ( theMeshName );
+    theWriter.SetMeshId     ( -1          );
+    theWriter.SetMeshName   ( theMeshName );
   }
 
   if ( theAutoGroups ) {
-    myWriter.AddGroupOfNodes();
-    myWriter.AddGroupOfEdges();
-    myWriter.AddGroupOfFaces();
-    myWriter.AddGroupOfVolumes();
-    myWriter.AddGroupOf0DElems();
-    myWriter.AddGroupOfBalls();
+    theWriter.AddGroupOfNodes();
+    theWriter.AddGroupOfEdges();
+    theWriter.AddGroupOfFaces();
+    theWriter.AddGroupOfVolumes();
+    theWriter.AddGroupOf0DElems();
+    theWriter.AddGroupOfBalls();
   }
-  if ( theAllElemsToGroup )
-    myWriter.AddAllToGroup();
 
   // Pass groups to writer. Provide unique group names.
   //set<string> aGroupNames; // Corrected for Mantis issue 0020028
-  if ( !meshPart )
+  if ( !theMeshPart )
   {
     std::map< SMDSAbs_ElementType, std::set<std::string> > aGroupNames;
     char aString [256];
@@ -1477,59 +1465,79 @@ void SMESH_Mesh::ExportMED(const char *        file,
           aGroupName.resize(MAX_MED_GROUP_NAME_LENGTH);
         }
         aGroupDS->SetStoreName( aGroupName.c_str() );
-        myWriter.AddGroup( aGroupDS );
+        theWriter.AddGroup( aGroupDS );
       }
     }
   }
   // Perform export
-  myWriter.Perform();
+  status = theWriter.Perform();
 
   SMESH_CATCH( SMESH::throwSalomeEx );
+
+  if ( status == Driver_Mesh::DRS_TOO_LARGE_MESH )
+    throw TooLargeForExport("MED");
 }
 
 //================================================================================
 /*!
- * \brief Export the mesh to a SAUV file
+ * Same as SMESH_Mesh::ExportMED except for \a file and \a theVersion
  */
 //================================================================================
 
-void SMESH_Mesh::ExportSAUV(const char *file, 
-                            const char* theMeshName, 
-                            bool theAutoGroups)
+MEDCoupling::MCAuto<MEDCoupling::DataArrayByte>
+SMESH_Mesh::ExportMEDCoupling(const char*         theMeshName,
+                              bool                theAutoGroups,
+                              const SMESHDS_Mesh* theMeshPart,
+                              bool                theAutoDimension,
+                              bool                theAddODOnVertices,
+                              double              theZTolerance,
+                              bool                theSaveNumbers)
 {
-  std::string medfilename(file);
-  medfilename += ".med";
-  std::string cmd;
-#ifdef WIN32
-  cmd = "%PYTHONBIN% ";
-#else
-  cmd = "python3 ";
-#endif
-  cmd += "-c \"";
-  cmd += "from medutilities import my_remove ; my_remove(r'" + medfilename + "')";
-  cmd += "\"";
-  system(cmd.c_str());
-  ExportMED(medfilename.c_str(), theMeshName, theAutoGroups, /*minor=*/-1,
-            /*meshPart=*/NULL, /*theAutoDimension=*/false, /*theAddODOnVertices=*/false,
-            /*zTol=*/-1, /*theAllElemsToGroup=*/true ); // theAllElemsToGroup is for PAL0023413
-#ifdef WIN32
-  cmd = "%PYTHONBIN% ";
-#else
-  cmd = "python3 ";
-#endif
-  cmd += "-c \"";
-  cmd += "from medutilities import convert ; convert(r'" + medfilename + "', 'MED', 'GIBI', 1, r'" + file + "')";
-  cmd += "\"";
-  system(cmd.c_str());
-#ifdef WIN32
-  cmd = "%PYTHONBIN% ";
-#else
-  cmd = "python3 ";
-#endif
-  cmd += "-c \"";
-  cmd += "from medutilities import my_remove ; my_remove(r'" + medfilename + "')";
-  cmd += "\"";
-  system(cmd.c_str());
+  DriverMED_W_SMESHDS_Mesh_Mem writer;
+  this->exportMEDCommmon( writer, theMeshName, theAutoGroups, theMeshPart, theAutoDimension,
+                          theAddODOnVertices, theZTolerance, theSaveNumbers);
+  return writer.getData();
+}
+
+//================================================================================
+/*!
+ * \brief Export the mesh to a med file
+ *  \param [in] theFile - name of the MED file
+ *  \param [in] theMeshName - name of this mesh
+ *  \param [in] theAutoGroups - boolean parameter for creating/not creating
+ *              the groups Group_On_All_Nodes, Group_On_All_Faces, ... ;
+ *              the typical use is auto_groups=false.
+ *  \param [in] theVersion - define the minor (xy, where version is x.y.z) of MED file format.
+ *              If theVersion is equal to -1, the minor version is not changed (default).
+ *  \param [in] theMeshPart - mesh data to export
+ *  \param [in] theAutoDimension - if \c true, 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 \a theAutoDimension is \c false, the space dimension is always 3.
+ *  \param [in] theAddODOnVertices - to create 0D elements on all vertices
+ *  \param [in] theZTolerance - tolerance in Z direction. If Z coordinate of a node is close to zero
+ *              within a given tolerance, the coordinate is set to zero.
+ *              If \a ZTolerance is negative, the node coordinates are kept as is.
+ *  \param [in] theSaveNumbers : enable saving numbers of nodes and cells.
+ *  \return int - mesh index in the file
+ */
+//================================================================================
+
+void SMESH_Mesh::ExportMED(const char *        theFile,
+                           const char*         theMeshName,
+                           bool                theAutoGroups,
+                           int                 theVersion,
+                           const SMESHDS_Mesh* theMeshPart,
+                           bool                theAutoDimension,
+                           bool                theAddODOnVertices,
+                           double              theZTolerance,
+                           bool                theSaveNumbers)
+{
+  MESSAGE("MED_VERSION:"<< theVersion);
+  DriverMED_W_SMESHDS_Mesh writer;
+  writer.SetFile( theFile, theVersion );
+  this->exportMEDCommmon( writer, theMeshName, theAutoGroups, theMeshPart, theAutoDimension, theAddODOnVertices, theZTolerance, theSaveNumbers );
 }
 
 //================================================================================
@@ -1539,14 +1547,23 @@ void SMESH_Mesh::ExportSAUV(const char *file,
 //================================================================================
 
 void SMESH_Mesh::ExportDAT(const char *        file,
-                           const SMESHDS_Mesh* meshPart)
+                           const SMESHDS_Mesh* meshPart,
+                           const bool          renumber)
 {
-  Unexpect aCatch(SalomeException);
-  DriverDAT_W_SMDS_Mesh myWriter;
-  myWriter.SetFile( file );
-  myWriter.SetMesh( meshPart ? (SMESHDS_Mesh*) meshPart : _myMeshDS );
-  myWriter.SetMeshId(_id);
-  myWriter.Perform();
+  Driver_Mesh::Status status;
+  SMESH_TRY;
+
+  DriverDAT_W_SMDS_Mesh writer;
+  writer.SetFile( file );
+  writer.SetMesh( meshPart ? (SMESHDS_Mesh*) meshPart : _meshDS );
+  writer.SetMeshId(_id);
+  writer.SetRenumber( renumber );
+  status = writer.Perform();
+
+  SMESH_CATCH( SMESH::throwSalomeEx );
+
+  if ( status == Driver_Mesh::DRS_TOO_LARGE_MESH )
+    throw TooLargeForExport("DAT");
 }
 
 //================================================================================
@@ -1556,14 +1573,17 @@ void SMESH_Mesh::ExportDAT(const char *        file,
 //================================================================================
 
 void SMESH_Mesh::ExportUNV(const char *        file,
-                           const SMESHDS_Mesh* meshPart)
+                           const SMESHDS_Mesh* meshPart,
+                           const bool          renumber)
 {
-  Unexpect aCatch(SalomeException);
-  DriverUNV_W_SMDS_Mesh myWriter;
-  myWriter.SetFile( file );
-  myWriter.SetMesh( meshPart ? (SMESHDS_Mesh*) meshPart : _myMeshDS );
-  myWriter.SetMeshId(_id);
-  //  myWriter.SetGroups(_mapGroup);
+  Driver_Mesh::Status status;
+
+  SMESH_TRY;
+  DriverUNV_W_SMDS_Mesh writer;
+  writer.SetFile( file );
+  writer.SetMesh( meshPart ? (SMESHDS_Mesh*) meshPart : _meshDS );
+  writer.SetMeshId(_id);
+  writer.SetRenumber( renumber );
 
   // pass group names to SMESHDS
   if ( !meshPart )
@@ -1575,11 +1595,16 @@ void SMESH_Mesh::ExportUNV(const char *        file,
       if ( aGroupDS ) {
         std::string aGroupName = aGroup->GetName();
         aGroupDS->SetStoreName( aGroupName.c_str() );
-        myWriter.AddGroup( aGroupDS );
+        writer.AddGroup( aGroupDS );
       }
     }
   }
-  myWriter.Perform();
+  status = writer.Perform();
+
+  SMESH_CATCH( SMESH::throwSalomeEx );
+
+  if ( status == Driver_Mesh::DRS_TOO_LARGE_MESH )
+    throw TooLargeForExport("UNV");
 }
 
 //================================================================================
@@ -1593,14 +1618,21 @@ void SMESH_Mesh::ExportSTL(const char *        file,
                            const char *        name,
                            const SMESHDS_Mesh* meshPart)
 {
-  Unexpect aCatch(SalomeException);
-  DriverSTL_W_SMDS_Mesh myWriter;
-  myWriter.SetFile( file );
-  myWriter.SetIsAscii( isascii );
-  myWriter.SetMesh( meshPart ? (SMESHDS_Mesh*) meshPart : _myMeshDS);
-  myWriter.SetMeshId(_id);
-  if ( name ) myWriter.SetName( name );
-  myWriter.Perform();
+  Driver_Mesh::Status status;
+  SMESH_TRY;
+
+  DriverSTL_W_SMDS_Mesh writer;
+  writer.SetFile( file );
+  writer.SetIsAscii( isascii );
+  writer.SetMesh( meshPart ? (SMESHDS_Mesh*) meshPart : _meshDS);
+  writer.SetMeshId(_id);
+  if ( name ) writer.SetName( name );
+  status = writer.Perform();
+
+  SMESH_CATCH( SMESH::throwSalomeEx );
+
+  if ( status == Driver_Mesh::DRS_TOO_LARGE_MESH )
+    throw TooLargeForExport("STL");
 }
 
 //================================================================================
@@ -1614,7 +1646,9 @@ void SMESH_Mesh::ExportCGNS(const char *        file,
                             const char *        meshName,
                             const bool          groupElemsByType)
 {
+
   int res = Driver_Mesh::DRS_FAIL;
+  SMESH_TRY;
 
   // pass group names to SMESHDS
   std::map<int, SMESH_Group*>::iterator it = _mapGroup.begin();
@@ -1628,22 +1662,27 @@ void SMESH_Mesh::ExportCGNS(const char *        file,
   }
 #ifdef WITH_CGNS
 
-  DriverCGNS_Write myWriter;
-  myWriter.SetFile( file );
-  myWriter.SetMesh( const_cast<SMESHDS_Mesh*>( meshDS ));
-  myWriter.SetMeshName( SMESH_Comment("Mesh_") << meshDS->GetPersistentId());
+  DriverCGNS_Write writer;
+  writer.SetFile( file );
+  writer.SetMesh( const_cast<SMESHDS_Mesh*>( meshDS ));
+  writer.SetMeshName( SMESH_Comment("Mesh_") << meshDS->GetPersistentId());
   if ( meshName && meshName[0] )
-    myWriter.SetMeshName( meshName );
-  myWriter.SetElementsByType( groupElemsByType );
-  res = myWriter.Perform();
+    writer.SetMeshName( meshName );
+  writer.SetElementsByType( groupElemsByType );
+  res = writer.Perform();
   if ( res != Driver_Mesh::DRS_OK )
   {
-    SMESH_ComputeErrorPtr err = myWriter.GetError();
+    SMESH_ComputeErrorPtr err = writer.GetError();
     if ( err && !err->IsOK() && !err->myComment.empty() )
       throw SALOME_Exception(("Export failed: " + err->myComment ).c_str() );
   }
 
 #endif
+  SMESH_CATCH( SMESH::throwSalomeEx );
+
+  if ( res == Driver_Mesh::DRS_TOO_LARGE_MESH )
+    throw TooLargeForExport("CGNS");
+
   if ( res != Driver_Mesh::DRS_OK )
     throw SALOME_Exception("Export failed");
 }
@@ -1658,12 +1697,20 @@ void SMESH_Mesh::ExportGMF(const char *        file,
                            const SMESHDS_Mesh* meshDS,
                            bool                withRequiredGroups)
 {
-  DriverGMF_Write myWriter;
-  myWriter.SetFile( file );
-  myWriter.SetMesh( const_cast<SMESHDS_Mesh*>( meshDS ));
-  myWriter.SetExportRequiredGroups( withRequiredGroups );
+  Driver_Mesh::Status status;
+  SMESH_TRY;
+
+  DriverGMF_Write writer;
+  writer.SetFile( file );
+  writer.SetMesh( const_cast<SMESHDS_Mesh*>( meshDS ));
+  writer.SetExportRequiredGroups( withRequiredGroups );
 
-  myWriter.Perform();
+  status = writer.Perform();
+
+  SMESH_CATCH( SMESH::throwSalomeEx );
+
+  if ( status == Driver_Mesh::DRS_TOO_LARGE_MESH )
+    throw TooLargeForExport("GMF");
 }
 
 //================================================================================
@@ -1679,7 +1726,7 @@ double SMESH_Mesh::GetComputeProgress() const
   const SMESH_subMesh* curSM = _gen->GetCurrentSubMesh();
 
   // get progress of a current algo
-  TColStd_MapOfInteger currentSubIds; 
+  TColStd_MapOfInteger currentSubIds;
   if ( curSM )
     if ( SMESH_Algo* algo = curSM->GetAlgo() )
     {
@@ -1700,9 +1747,8 @@ double SMESH_Mesh::GetComputeProgress() const
         rate = algo->GetProgress();
       }
       catch (...) {
-#ifdef _DEBUG_
-        std::cerr << "Exception in " << algo->GetName() << "::GetProgress()" << std::endl;
-#endif
+        if (SALOME::VerbosityActivated())
+          std::cerr << "Exception in " << algo->GetName() << "::GetProgress()" << std::endl;
       }
       if ( 0. < rate && rate < 1.001 )
       {
@@ -1713,7 +1759,6 @@ double SMESH_Mesh::GetComputeProgress() const
         rate = algo->GetProgressByTic();
         computedCost += algoDoneCost + rate * algoNotDoneCost;
       }
-      // cout << "rate: "<<rate << " algoNotDoneCost: " << algoNotDoneCost << endl;
     }
 
   // get cost of already treated sub-meshes
@@ -1734,9 +1779,6 @@ double SMESH_Mesh::GetComputeProgress() const
       }
     }
   }
-  // cout << "Total: " << totalCost
-  //      << " computed: " << computedCost << " progress: " << computedCost / totalCost
-  //      << " nbElems: " << GetMeshDS()->GetMeshInfo().NbElements() << endl;
   return computedCost / totalCost;
 }
 
@@ -1746,10 +1788,9 @@ double SMESH_Mesh::GetComputeProgress() const
  */
 //================================================================================
 
-int SMESH_Mesh::NbNodes() const
+smIdType SMESH_Mesh::NbNodes() const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->NbNodes();
+  return _meshDS->NbNodes();
 }
 
 //================================================================================
@@ -1758,10 +1799,9 @@ int SMESH_Mesh::NbNodes() const
  */
 //================================================================================
 
-int SMESH_Mesh::Nb0DElements() const
+smIdType SMESH_Mesh::Nb0DElements() const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->GetMeshInfo().Nb0DElements();
+  return _meshDS->GetMeshInfo().Nb0DElements();
 }
 
 //================================================================================
@@ -1770,10 +1810,9 @@ int SMESH_Mesh::Nb0DElements() const
  */
 //================================================================================
 
-int SMESH_Mesh::NbEdges(SMDSAbs_ElementOrder order) const
+smIdType SMESH_Mesh::NbEdges(SMDSAbs_ElementOrder order) const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->GetMeshInfo().NbEdges(order);
+  return _meshDS->GetMeshInfo().NbEdges(order);
 }
 
 //================================================================================
@@ -1782,10 +1821,9 @@ int SMESH_Mesh::NbEdges(SMDSAbs_ElementOrder order) const
  */
 //================================================================================
 
-int SMESH_Mesh::NbFaces(SMDSAbs_ElementOrder order) const
+smIdType SMESH_Mesh::NbFaces(SMDSAbs_ElementOrder order) const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->GetMeshInfo().NbFaces(order);
+  return _meshDS->GetMeshInfo().NbFaces(order);
 }
 
 //================================================================================
@@ -1794,10 +1832,9 @@ int SMESH_Mesh::NbFaces(SMDSAbs_ElementOrder order) const
  */
 //================================================================================
 
-int SMESH_Mesh::NbTriangles(SMDSAbs_ElementOrder order) const
+smIdType SMESH_Mesh::NbTriangles(SMDSAbs_ElementOrder order) const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->GetMeshInfo().NbTriangles(order);
+  return _meshDS->GetMeshInfo().NbTriangles(order);
 }
 
 //================================================================================
@@ -1806,10 +1843,9 @@ int SMESH_Mesh::NbTriangles(SMDSAbs_ElementOrder order) const
  */
 //================================================================================
 
-int SMESH_Mesh::NbBiQuadTriangles() const
+smIdType SMESH_Mesh::NbBiQuadTriangles() const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->GetMeshInfo().NbBiQuadTriangles();
+  return _meshDS->GetMeshInfo().NbBiQuadTriangles();
 }
 
 //================================================================================
@@ -1818,10 +1854,9 @@ int SMESH_Mesh::NbBiQuadTriangles() const
  */
 //================================================================================
 
-int SMESH_Mesh::NbQuadrangles(SMDSAbs_ElementOrder order) const
+smIdType SMESH_Mesh::NbQuadrangles(SMDSAbs_ElementOrder order) const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->GetMeshInfo().NbQuadrangles(order);
+  return _meshDS->GetMeshInfo().NbQuadrangles(order);
 }
 
 //================================================================================
@@ -1830,10 +1865,9 @@ int SMESH_Mesh::NbQuadrangles(SMDSAbs_ElementOrder order) const
  */
 //================================================================================
 
-int SMESH_Mesh::NbBiQuadQuadrangles() const
+smIdType SMESH_Mesh::NbBiQuadQuadrangles() const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->GetMeshInfo().NbBiQuadQuadrangles();
+  return _meshDS->GetMeshInfo().NbBiQuadQuadrangles();
 }
 
 //================================================================================
@@ -1842,10 +1876,9 @@ int SMESH_Mesh::NbBiQuadQuadrangles() const
  */
 //================================================================================
 
-int SMESH_Mesh::NbPolygons(SMDSAbs_ElementOrder order) const
+smIdType SMESH_Mesh::NbPolygons(SMDSAbs_ElementOrder order) const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->GetMeshInfo().NbPolygons(order);
+  return _meshDS->GetMeshInfo().NbPolygons(order);
 }
 
 //================================================================================
@@ -1854,10 +1887,9 @@ int SMESH_Mesh::NbPolygons(SMDSAbs_ElementOrder order) const
  */
 //================================================================================
 
-int SMESH_Mesh::NbVolumes(SMDSAbs_ElementOrder order) const
+smIdType SMESH_Mesh::NbVolumes(SMDSAbs_ElementOrder order) const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->GetMeshInfo().NbVolumes(order);
+  return _meshDS->GetMeshInfo().NbVolumes(order);
 }
 
 //================================================================================
@@ -1866,10 +1898,9 @@ int SMESH_Mesh::NbVolumes(SMDSAbs_ElementOrder order) const
  */
 //================================================================================
 
-int SMESH_Mesh::NbTetras(SMDSAbs_ElementOrder order) const
+smIdType SMESH_Mesh::NbTetras(SMDSAbs_ElementOrder order) const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->GetMeshInfo().NbTetras(order);
+  return _meshDS->GetMeshInfo().NbTetras(order);
 }
 
 //================================================================================
@@ -1878,10 +1909,9 @@ int SMESH_Mesh::NbTetras(SMDSAbs_ElementOrder order) const
  */
 //================================================================================
 
-int SMESH_Mesh::NbHexas(SMDSAbs_ElementOrder order) const
+smIdType SMESH_Mesh::NbHexas(SMDSAbs_ElementOrder order) const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->GetMeshInfo().NbHexas(order);
+  return _meshDS->GetMeshInfo().NbHexas(order);
 }
 
 //================================================================================
@@ -1890,10 +1920,9 @@ int SMESH_Mesh::NbHexas(SMDSAbs_ElementOrder order) const
  */
 //================================================================================
 
-int SMESH_Mesh::NbTriQuadraticHexas() const
+smIdType SMESH_Mesh::NbTriQuadraticHexas() const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->GetMeshInfo().NbTriQuadHexas();
+  return _meshDS->GetMeshInfo().NbTriQuadHexas();
 }
 
 //================================================================================
@@ -1902,10 +1931,9 @@ int SMESH_Mesh::NbTriQuadraticHexas() const
  */
 //================================================================================
 
-int SMESH_Mesh::NbPyramids(SMDSAbs_ElementOrder order) const
+smIdType SMESH_Mesh::NbPyramids(SMDSAbs_ElementOrder order) const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->GetMeshInfo().NbPyramids(order);
+  return _meshDS->GetMeshInfo().NbPyramids(order);
 }
 
 //================================================================================
@@ -1914,22 +1942,19 @@ int SMESH_Mesh::NbPyramids(SMDSAbs_ElementOrder order) const
  */
 //================================================================================
 
-int SMESH_Mesh::NbPrisms(SMDSAbs_ElementOrder order) const
+smIdType SMESH_Mesh::NbPrisms(SMDSAbs_ElementOrder order) const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->GetMeshInfo().NbPrisms(order);
+  return _meshDS->GetMeshInfo().NbPrisms(order);
 }
 
-int SMESH_Mesh::NbQuadPrisms() const
+smIdType SMESH_Mesh::NbQuadPrisms() const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->GetMeshInfo().NbQuadPrisms();
+  return _meshDS->GetMeshInfo().NbQuadPrisms();
 }
 
-int SMESH_Mesh::NbBiQuadPrisms() const
+smIdType SMESH_Mesh::NbBiQuadPrisms() const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->GetMeshInfo().NbBiQuadPrisms();
+  return _meshDS->GetMeshInfo().NbBiQuadPrisms();
 }
 
 
@@ -1939,10 +1964,9 @@ int SMESH_Mesh::NbBiQuadPrisms() const
  */
 //================================================================================
 
-int SMESH_Mesh::NbHexagonalPrisms() const
+smIdType SMESH_Mesh::NbHexagonalPrisms() const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->GetMeshInfo().NbHexPrisms();
+  return _meshDS->GetMeshInfo().NbHexPrisms();
 }
 
 //================================================================================
@@ -1951,10 +1975,9 @@ int SMESH_Mesh::NbHexagonalPrisms() const
  */
 //================================================================================
 
-int SMESH_Mesh::NbPolyhedrons() const
+smIdType SMESH_Mesh::NbPolyhedrons() const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->GetMeshInfo().NbPolyhedrons();
+  return _meshDS->GetMeshInfo().NbPolyhedrons();
 }
 
 //================================================================================
@@ -1963,10 +1986,9 @@ int SMESH_Mesh::NbPolyhedrons() const
  */
 //================================================================================
 
-int SMESH_Mesh::NbBalls() const
+smIdType SMESH_Mesh::NbBalls() const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->GetMeshInfo().NbBalls();
+  return _meshDS->GetMeshInfo().NbBalls();
 }
 
 //================================================================================
@@ -1975,10 +1997,9 @@ int SMESH_Mesh::NbBalls() const
  */
 //================================================================================
 
-int SMESH_Mesh::NbSubMesh() const
+smIdType SMESH_Mesh::NbSubMesh() const
 {
-  Unexpect aCatch(SalomeException);
-  return _myMeshDS->NbSubMesh();
+  return _meshDS->NbSubMesh();
 }
 
 //================================================================================
@@ -1990,7 +2011,7 @@ int SMESH_Mesh::NbSubMesh() const
 
 int SMESH_Mesh::NbMeshes() const // nb meshes in the Study
 {
-  return _myDocument->NbMeshes();
+  return _document->NbMeshes();
 }
 
 //=======================================================================
@@ -2000,20 +2021,20 @@ int SMESH_Mesh::NbMeshes() const // nb meshes in the Study
 
 bool SMESH_Mesh::IsNotConformAllowed() const
 {
-  if(MYDEBUG) MESSAGE("SMESH_Mesh::IsNotConformAllowed");
+  MESSAGE("SMESH_Mesh::IsNotConformAllowed");
 
   static SMESH_HypoFilter filter( SMESH_HypoFilter::HasName( "NotConformAllowed" ));
-  return GetHypothesis( _myMeshDS->ShapeToMesh(), filter, false );
+  return GetHypothesis( _meshDS->ShapeToMesh(), filter, false );
 }
 
 //=======================================================================
 //function : IsMainShape
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 bool SMESH_Mesh::IsMainShape(const TopoDS_Shape& theShape) const
 {
-  return theShape.IsSame(_myMeshDS->ShapeToMesh() );
+  return theShape.IsSame(_meshDS->ShapeToMesh() );
 }
 
 //=======================================================================
@@ -2028,7 +2049,7 @@ TopoDS_Shape SMESH_Mesh::GetShapeByEntry(const std::string& entry) const
 
 //=============================================================================
 /*!
- *  
+ *
  */
 //=============================================================================
 
@@ -2088,7 +2109,7 @@ SMESH_Group* SMESH_Mesh::AddGroup (SMESHDS_GroupBase* groupDS)
 bool SMESH_Mesh::SynchronizeGroups()
 {
   const size_t                            nbGroups = _mapGroup.size();
-  const std::set<SMESHDS_GroupBase*>&       groups = _myMeshDS->GetGroups();
+  const std::set<SMESHDS_GroupBase*>&       groups = _meshDS->GetGroups();
   std::set<SMESHDS_GroupBase*>::const_iterator gIt = groups.begin();
   for ( ; gIt != groups.end(); ++gIt )
   {
@@ -2142,7 +2163,7 @@ std::list<int> SMESH_Mesh::GetGroupIds() const
   std::map<int, SMESH_Group*>::const_iterator it = _mapGroup.begin();
   for ( ; it != _mapGroup.end(); it++ )
     anIds.push_back( it->first );
-  
+
   return anIds;
 }
 
@@ -2161,7 +2182,7 @@ void SMESH_Mesh::SetCallUp( TCallUp* upCaller )
 
 //=============================================================================
 /*!
- *  
+ *
  */
 //=============================================================================
 
@@ -2215,13 +2236,13 @@ ostream& SMESH_Mesh::Dump(ostream& save)
     save << ++clause << ") Total number of " << orderStr << " edges:\t" << NbEdges(order) << endl;
     save << ++clause << ") Total number of " << orderStr << " faces:\t" << NbFaces(order) << endl;
     if ( NbFaces(order) > 0 ) {
-      int nb3 = NbTriangles(order);
-      int nb4 = NbQuadrangles(order);
+      smIdType nb3 = NbTriangles(order);
+      smIdType nb4 = NbQuadrangles(order);
       save << clause << ".1) Number of " << orderStr << " triangles:  \t" << nb3 << endl;
       save << clause << ".2) Number of " << orderStr << " quadrangles:\t" << nb4 << endl;
       if ( nb3 + nb4 !=  NbFaces(order) ) {
         std::map<int,int> myFaceMap;
-        SMDS_FaceIteratorPtr itFaces=_myMeshDS->facesIterator();
+        SMDS_FaceIteratorPtr itFaces=_meshDS->facesIterator();
         while( itFaces->more( ) ) {
           int nbNodes = itFaces->next()->NbNodes();
           if ( myFaceMap.find( nbNodes ) == myFaceMap.end() )
@@ -2236,17 +2257,17 @@ ostream& SMESH_Mesh::Dump(ostream& save)
     }
     save << ++clause << ") Total number of " << orderStr << " volumes:\t" << NbVolumes(order) << endl;
     if ( NbVolumes(order) > 0 ) {
-      int nb8 = NbHexas(order);
-      int nb4 = NbTetras(order);
-      int nb5 = NbPyramids(order);
-      int nb6 = NbPrisms(order);
+      smIdType nb8 = NbHexas(order);
+      smIdType nb4 = NbTetras(order);
+      smIdType nb5 = NbPyramids(order);
+      smIdType nb6 = NbPrisms(order);
       save << clause << ".1) Number of " << orderStr << " hexahedrons: \t" << nb8 << endl;
       save << clause << ".2) Number of " << orderStr << " tetrahedrons:\t" << nb4 << endl;
       save << clause << ".3) Number of " << orderStr << " prisms:      \t" << nb6 << endl;
       save << clause << ".4) Number of " << orderStr << " pyramids:    \t" << nb5 << endl;
       if ( nb8 + nb4 + nb5 + nb6 != NbVolumes(order) ) {
         std::map<int,int> myVolumesMap;
-        SMDS_VolumeIteratorPtr itVolumes=_myMeshDS->volumesIterator();
+        SMDS_VolumeIteratorPtr itVolumes=_meshDS->volumesIterator();
         while( itVolumes->more( ) ) {
           int nbNodes = itVolumes->next()->NbNodes();
           if ( myVolumesMap.find( nbNodes ) == myVolumesMap.end() )
@@ -2270,9 +2291,9 @@ ostream& SMESH_Mesh::Dump(ostream& save)
 //purpose  : Returns type of mesh element with certain id
 //=======================================================================
 
-SMDSAbs_ElementType SMESH_Mesh::GetElementType( const int id, const bool iselem )
+SMDSAbs_ElementType SMESH_Mesh::GetElementType( const smIdType id, const bool iselem )
 {
-  return _myMeshDS->GetElementType( id, iselem );
+  return _meshDS->GetElementType( id, iselem );
 }
 
 //=============================================================================
@@ -2323,7 +2344,7 @@ SMESH_Group* SMESH_Mesh::ConvertToStandalone ( int theGroupID )
 
 void SMESH_Mesh::ClearMeshOrder()
 {
-  _mySubMeshOrder.clear();
+  _subMeshOrder.clear();
 }
 
 //=============================================================================
@@ -2334,7 +2355,7 @@ void SMESH_Mesh::ClearMeshOrder()
 
 void SMESH_Mesh::SetMeshOrder(const TListOfListOfInt& theOrder )
 {
-  _mySubMeshOrder = theOrder;
+  _subMeshOrder = theOrder;
 }
 
 //=============================================================================
@@ -2345,7 +2366,7 @@ void SMESH_Mesh::SetMeshOrder(const TListOfListOfInt& theOrder )
 
 const TListOfListOfInt& SMESH_Mesh::GetMeshOrder() const
 {
-  return _mySubMeshOrder;
+  return _subMeshOrder;
 }
 
 //=============================================================================
@@ -2406,7 +2427,7 @@ void SMESH_Mesh::fillAncestorsMap(const TopoDS_Shape& theShape)
 
 bool SMESH_Mesh::SortByMeshOrder(std::vector<SMESH_subMesh*>& theListToSort) const
 {
-  if ( _mySubMeshOrder.empty() || theListToSort.size() < 2 )
+  if ( _subMeshOrder.empty() || theListToSort.size() < 2 )
     return true;
 
 
@@ -2417,9 +2438,9 @@ bool SMESH_Mesh::SortByMeshOrder(std::vector<SMESH_subMesh*>& theListToSort) con
   typedef std::vector<SMESH_subMesh*>::iterator TPosInList;
   std::map< size_t, size_t > sortedPos; // index in theListToSort to order
   TPosInList smBeg = theListToSort.begin(), smEnd = theListToSort.end();
-  TListOfListOfInt::const_iterator      listIdsIt = _mySubMeshOrder.begin();
+  TListOfListOfInt::const_iterator      listIdsIt = _subMeshOrder.begin();
   bool needSort = false;
-  for( ; listIdsIt != _mySubMeshOrder.end(); listIdsIt++)
+  for( ; listIdsIt != _subMeshOrder.end(); listIdsIt++)
   {
     const TListOfInt& listOfId = *listIdsIt;
     // convert sm ids to sm's
@@ -2497,8 +2518,8 @@ bool SMESH_Mesh::SortByMeshOrder(std::vector<SMESH_subMesh*>& theListToSort) con
 bool SMESH_Mesh::IsOrderOK( const SMESH_subMesh* smBefore,
                             const SMESH_subMesh* smAfter ) const
 {
-  TListOfListOfInt::const_iterator listIdsIt = _mySubMeshOrder.begin();
-  for( ; listIdsIt != _mySubMeshOrder.end(); listIdsIt++)
+  TListOfListOfInt::const_iterator listIdsIt = _subMeshOrder.begin();
+  for( ; listIdsIt != _subMeshOrder.end(); listIdsIt++)
   {
     const TListOfInt& listOfId = *listIdsIt;
     int iB = -1, iA = -1, i = 0;
@@ -2519,7 +2540,7 @@ bool SMESH_Mesh::IsOrderOK( const SMESH_subMesh* smBefore,
     }
   }
   return true; // no order imposed to given sub-meshes
-} 
+}
 
 //=============================================================================
 /*!
index 4f9a3179de48cf7e9b425b6dcb5000816a2ef536..b831998d5b75237bf85becd8b415b43a46efabe0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -33,6 +33,7 @@
 #include "SMESH_ComputeError.hxx"
 #include "SMESH_Controls.hxx"
 #include "SMESH_Hypothesis.hxx"
+#include "SMESH_subMesh.hxx"
 #include "SMDS_Iterator.hxx"
 
 #include "Utils_SALOME_Exception.hxx"
 #include <TopTools_IndexedDataMapOfShapeListOfShape.hxx>
 #include <TopTools_ListOfShape.hxx>
 
+#include "MEDCouplingMemArray.hxx"
+
 #include <map>
 #include <list>
 #include <vector>
 #include <ostream>
 
+#ifndef WIN32
+#include <boost/filesystem.hpp>
+#endif
+#include <boost/thread.hpp>
+
 #ifdef WIN32
 #pragma warning(disable:4251) // Warning DLL Interface ...
 #pragma warning(disable:4290) // Warning Exception ...
@@ -62,6 +70,9 @@ class SMESH_HypoFilter;
 class SMESH_subMesh;
 class TopoDS_Solid;
 
+class DriverMED_W_SMESHDS_Mesh;
+
+typedef std::set<int> TSetOfInt;
 typedef std::list<int> TListOfInt;
 typedef std::list<TListOfInt> TListOfListOfInt;
 
@@ -123,20 +134,20 @@ class SMESH_EXPORT SMESH_Mesh
   int UNVToMesh(const char* theFileName);
 
   int MEDToMesh(const char* theFileName, const char* theMeshName);
-  
+
   std::string STLToMesh(const char* theFileName);
 
   int CGNSToMesh(const char* theFileName, const int theMeshIndex, std::string& theMeshName);
-  
+
   SMESH_ComputeErrorPtr GMFToMesh(const char* theFileName,
                                   bool        theMakeRequiredGroups = true );
 
   SMESH_Hypothesis::Hypothesis_Status
   AddHypothesis(const TopoDS_Shape & aSubShape, int anHypId, std::string* error=0);
-  
+
   SMESH_Hypothesis::Hypothesis_Status
   RemoveHypothesis(const TopoDS_Shape & aSubShape, int anHypId);
-  
+
   const std::list <const SMESHDS_Hypothesis * >&
   GetHypothesisList(const TopoDS_Shape & aSubShape) const;
 
@@ -144,7 +155,7 @@ class SMESH_EXPORT SMESH_Mesh
                                          const SMESH_HypoFilter& aFilter,
                                          const bool              andAncestors,
                                          TopoDS_Shape*           assignedTo=0) const;
-  
+
   int GetHypotheses(const TopoDS_Shape &                     aSubShape,
                     const SMESH_HypoFilter&                  aFilter,
                     std::list< const SMESHDS_Hypothesis * >& aHypList,
@@ -155,7 +166,7 @@ class SMESH_EXPORT SMESH_Mesh
                                          const SMESH_HypoFilter& aFilter,
                                          const bool              andAncestors,
                                          TopoDS_Shape*           assignedTo=0) const;
-  
+
   int GetHypotheses(const SMESH_subMesh *                    aSubMesh,
                     const SMESH_HypoFilter&                  aFilter,
                     std::list< const SMESHDS_Hypothesis * >& aHypList,
@@ -165,25 +176,25 @@ class SMESH_EXPORT SMESH_Mesh
   SMESH_Hypothesis * GetHypothesis(const int aHypID) const;
 
   const std::list<SMESHDS_Command*> & GetLog();
-  
+
   void ClearLog();
-  
+
   int GetId() const          { return _id; }
-  
+
   bool MeshExists( int meshId ) const;
-  
+
   SMESH_Mesh* FindMesh( int meshId ) const;
 
-  SMESHDS_Mesh * GetMeshDS() { return _myMeshDS; }
+  SMESHDS_Mesh * GetMeshDS() { return _meshDS; }
+
+  const SMESHDS_Mesh * GetMeshDS() const { return _meshDS; }
 
-  const SMESHDS_Mesh * GetMeshDS() const { return _myMeshDS; }
-  
   SMESH_Gen *GetGen()        { return _gen; }
 
   SMESH_subMesh *GetSubMesh(const TopoDS_Shape & aSubShape);
-  
+
   SMESH_subMesh *GetSubMeshContaining(const TopoDS_Shape & aSubShape) const;
-  
+
   SMESH_subMesh *GetSubMeshContaining(const int aShapeID) const;
   /*!
    * \brief Return submeshes of groups containing the given subshape
@@ -205,7 +216,7 @@ class SMESH_EXPORT SMESH_Mesh
    * \brief check if a hypothesis allowing notconform mesh is present
    */
   bool IsNotConformAllowed() const;
-  
+
   bool IsMainShape(const TopoDS_Shape& theShape) const;
 
   TopoDS_Shape GetShapeByEntry(const std::string& entry) const;
@@ -245,12 +256,31 @@ class SMESH_EXPORT SMESH_Mesh
    */
   typedef TopTools_IndexedDataMapOfShapeListOfShape TAncestorMap;
   const TAncestorMap& GetAncestorMap() const { return _mapAncestors; }
+
   /*!
    * \brief Check group names for duplications.
    *  Consider maximum group name length stored in MED file
    */
   bool HasDuplicatedGroupNamesMED();
 
+  /*!
+   * \brief Exception thrown by Export*() in case if a mesh is too large for export
+   *        due to limitation of a format
+   */
+  struct TooLargeForExport : public std::runtime_error
+  {
+    TooLargeForExport(const char* format):runtime_error(format) {}
+  };
+
+  MEDCoupling::MCAuto<MEDCoupling::DataArrayByte>
+    ExportMEDCoupling(const char*         theMeshName = NULL,
+                      bool                theAutoGroups = true,
+                      const SMESHDS_Mesh* theMeshPart = 0,
+                      bool                theAutoDimension = false,
+                      bool                theAddODOnVertices = false,
+                      double              theZTolerance = -1.,
+                      bool                theSaveNumbers = true);
+
   void ExportMED(const char *        theFile,
                  const char*         theMeshName = NULL,
                  bool                theAutoGroups = true,
@@ -259,12 +289,14 @@ class SMESH_EXPORT SMESH_Mesh
                  bool                theAutoDimension = false,
                  bool                theAddODOnVertices = false,
                  double              theZTolerance = -1.,
-                 bool                theAllElemsToGroup = false);
+                 bool                theSaveNumbers = true);
 
   void ExportDAT(const char *        file,
-                 const SMESHDS_Mesh* meshPart = 0);
+                 const SMESHDS_Mesh* meshPart = 0,
+                 const bool          renumber = true);
   void ExportUNV(const char *        file,
-                 const SMESHDS_Mesh* meshPart = 0);
+                 const SMESHDS_Mesh* meshPart = 0,
+                 const bool          renumber = true);
   void ExportSTL(const char *        file,
                  const bool          isascii,
                  const char *        name = 0,
@@ -276,39 +308,36 @@ class SMESH_EXPORT SMESH_Mesh
   void ExportGMF(const char *        file,
                  const SMESHDS_Mesh* mesh,
                  bool                withRequiredGroups = true );
-  void ExportSAUV(const char *file, 
-                  const char* theMeshName = NULL, 
-                  bool theAutoGroups = true);
 
   double GetComputeProgress() const;
-  
-  int NbNodes() const;
-  int Nb0DElements() const;
-  int NbBalls() const;
-  
-  int NbEdges(SMDSAbs_ElementOrder order = ORDER_ANY) const;
-  
-  int NbFaces(SMDSAbs_ElementOrder order = ORDER_ANY) const;
-  int NbTriangles(SMDSAbs_ElementOrder order = ORDER_ANY) const;
-  int NbQuadrangles(SMDSAbs_ElementOrder order = ORDER_ANY) const;
-  int NbBiQuadQuadrangles() const;
-  int NbBiQuadTriangles() const;
-  int NbPolygons(SMDSAbs_ElementOrder order = ORDER_ANY) const;
-  
-  int NbVolumes(SMDSAbs_ElementOrder order = ORDER_ANY) const;
-  int NbTetras(SMDSAbs_ElementOrder order = ORDER_ANY) const;
-  int NbHexas(SMDSAbs_ElementOrder order = ORDER_ANY) const;
-  int NbTriQuadraticHexas() const;
-  int NbPyramids(SMDSAbs_ElementOrder order = ORDER_ANY) const;
-  int NbPrisms(SMDSAbs_ElementOrder order = ORDER_ANY) const;
-  int NbQuadPrisms() const;
-  int NbBiQuadPrisms() const;
-  int NbHexagonalPrisms() const;
-  int NbPolyhedrons() const;
-  
-  int NbSubMesh() const;
-  
-  int NbGroup() const { return _mapGroup.size(); }
+
+  smIdType NbNodes() const;
+  smIdType Nb0DElements() const;
+  smIdType NbBalls() const;
+
+  smIdType NbEdges(SMDSAbs_ElementOrder order = ORDER_ANY) const;
+
+  smIdType NbFaces(SMDSAbs_ElementOrder order = ORDER_ANY) const;
+  smIdType NbTriangles(SMDSAbs_ElementOrder order = ORDER_ANY) const;
+  smIdType NbQuadrangles(SMDSAbs_ElementOrder order = ORDER_ANY) const;
+  smIdType NbBiQuadQuadrangles() const;
+  smIdType NbBiQuadTriangles() const;
+  smIdType NbPolygons(SMDSAbs_ElementOrder order = ORDER_ANY) const;
+
+  smIdType NbVolumes(SMDSAbs_ElementOrder order = ORDER_ANY) const;
+  smIdType NbTetras(SMDSAbs_ElementOrder order = ORDER_ANY) const;
+  smIdType NbHexas(SMDSAbs_ElementOrder order = ORDER_ANY) const;
+  smIdType NbTriQuadraticHexas() const;
+  smIdType NbPyramids(SMDSAbs_ElementOrder order = ORDER_ANY) const;
+  smIdType NbPrisms(SMDSAbs_ElementOrder order = ORDER_ANY) const;
+  smIdType NbQuadPrisms() const;
+  smIdType NbBiQuadPrisms() const;
+  smIdType NbHexagonalPrisms() const;
+  smIdType NbPolyhedrons() const;
+
+  smIdType NbSubMesh() const;
+
+  size_t NbGroup() const { return _mapGroup.size(); }
 
   int NbMeshes() const; // nb meshes in the Study
 
@@ -322,9 +351,9 @@ class SMESH_EXPORT SMESH_Mesh
 
   typedef boost::shared_ptr< SMDS_Iterator<SMESH_Group*> > GroupIteratorPtr;
   GroupIteratorPtr GetGroups() const;
-  
+
   std::list<int> GetGroupIds() const;
-  
+
   SMESH_Group* GetGroup (const int theGroupID) const;
 
   bool RemoveGroup (const int theGroupID);
@@ -345,7 +374,7 @@ class SMESH_EXPORT SMESH_Mesh
   bool SynchronizeGroups();
 
 
-  SMDSAbs_ElementType GetElementType( const int id, const bool iselem );
+  SMDSAbs_ElementType GetElementType( const smIdType id, const bool iselem );
 
   void ClearMeshOrder();
   void SetMeshOrder(const TListOfListOfInt& theOrder );
@@ -359,36 +388,68 @@ class SMESH_EXPORT SMESH_Mesh
                   const SMESH_subMesh* smAfter ) const;
 
   std::ostream& Dump(std::ostream & save);
-  
+
+  // Parallel computation functions
+
+  virtual void Lock(){};
+  virtual void Unlock(){};
+
+  virtual void wait(){};
+
+  virtual bool IsParallel(){throw SALOME_Exception("Calling SMESH_Mesh::IsParallel");return false;};
+  virtual int GetParallelElement(){throw SALOME_Exception("Calling SMESH_Mesh::GetParallelElement");return 0;};
+
+  virtual bool ComputeSubMeshes(
+            SMESH_Gen* gen,
+            SMESH_Mesh & aMesh,
+            const TopoDS_Shape & aShape,
+            const ::MeshDimension       aDim,
+            TSetOfInt*                  aShapesId /*=0*/,
+            TopTools_IndexedMapOfShape* allowedSubShapes,
+            SMESH_subMesh::compute_event &computeEvent,
+            const bool includeSelf,
+            const bool complexShapeFirst,
+            const bool aShapeOnly){(void) gen;(void) aMesh;(void) aShape;(void) aDim;(void) aShapesId;(void) allowedSubShapes;(void) computeEvent;(void) includeSelf;(void) complexShapeFirst;(void) aShapeOnly;throw SALOME_Exception("Calling SMESH_Mesh::ComputeSubMeshes");return false;};
+
 private:
 
+  void exportMEDCommmon(DriverMED_W_SMESHDS_Mesh& myWriter,
+                        const char*               theMeshName,
+                        bool                      theAutoGroups,
+                        const SMESHDS_Mesh*       meshPart,
+                        bool                      theAutoDimension,
+                        bool                      theAddODOnVertices,
+                        double                    theZTolerance,
+                        bool                      theSaveNumbers);
+
+ private:
   void fillAncestorsMap(const TopoDS_Shape& theShape);
   void getAncestorsSubMeshes(const TopoDS_Shape&            theSubShape,
                              std::vector< SMESH_subMesh* >& theSubMeshes) const;
-  
+
 protected:
   int                        _id;           // id given by creator (unique within the creator instance)
   int                        _groupId;      // id generator for group objects
   int                        _nbSubShapes;  // initial nb of subshapes in the shape to mesh
   bool                       _isShapeToMesh;// set to true when a shape is given (only once)
-  SMESHDS_Document *         _myDocument;
-  SMESHDS_Mesh *             _myMeshDS;
+  SMESHDS_Document *         _document;
+  SMESHDS_Mesh *             _meshDS;
   SMESH_Gen *                _gen;
   std::map <int, SMESH_Group*> _mapGroup;
 
   class SubMeshHolder;
   SubMeshHolder*             _subMeshHolder;
-  
+
   bool                       _isAutoColor;
   bool                       _isModified; //!< modified since last total re-compute, issue 0020693
 
   double                     _shapeDiagonal; //!< diagonal size of bounding box of shape to mesh
-  
+
   TopTools_IndexedDataMapOfShapeListOfShape _mapAncestors;
 
   mutable std::vector<SMESH_subMesh*> _ancestorSubMeshes; // to speed up GetHypothes[ei]s()
 
-  TListOfListOfInt           _mySubMeshOrder;
+  TListOfListOfInt           _subMeshOrder;
 
   // Struct calling methods at CORBA API implementation level, used to
   // 1) make an upper level (SMESH_I) be consistent with a lower one (SMESH)
@@ -400,5 +461,4 @@ protected:
   SMESH_Mesh();
   SMESH_Mesh(const SMESH_Mesh&) {};
 };
-
 #endif
index e9c672c1edecea739e5fd7da0021354a878bf369..8c940322e0229a86bdf12fb802492d234ae6f260 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -62,6 +62,8 @@
 #include <Geom_Curve.hxx>
 #include <Geom_Surface.hxx>
 #include <Precision.hxx>
+#include <ShapeAnalysis.hxx>
+#include <ShapeAnalysis_Curve.hxx>
 #include <TColStd_ListOfInteger.hxx>
 #include <TopAbs_State.hxx>
 #include <TopExp.hxx>
 
 #include "SMESH_TryCatch.hxx" // include after OCCT headers!
 
+#include <smIdType.hxx>
+
 #define cast2Node(elem) static_cast<const SMDS_MeshNode*>( elem )
 
 using namespace std;
@@ -186,7 +190,7 @@ SMESH_MeshEditor::AddElement(const vector<const SMDS_MeshNode*> & node,
   SMDS_MeshElement* e = 0;
   int nbnode = node.size();
   SMESHDS_Mesh* mesh = GetMeshDS();
-  const int ID = features.myID;
+  const smIdType ID = features.myID;
 
   switch ( features.myType ) {
   case SMDSAbs_Face:
@@ -389,12 +393,12 @@ SMESH_MeshEditor::AddElement(const vector<const SMDS_MeshNode*> & node,
  */
 //=======================================================================
 
-SMDS_MeshElement* SMESH_MeshEditor::AddElement(const vector<int> & nodeIDs,
-                                               const ElemFeatures& features)
+SMDS_MeshElement* SMESH_MeshEditor::AddElement(const vector<smIdType> & nodeIDs,
+                                               const ElemFeatures&      features)
 {
   vector<const SMDS_MeshNode*> nodes;
   nodes.reserve( nodeIDs.size() );
-  vector<int>::const_iterator id = nodeIDs.begin();
+  vector<smIdType>::const_iterator id = nodeIDs.begin();
   while ( id != nodeIDs.end() ) {
     if ( const SMDS_MeshNode* node = GetMeshDS()->FindNode( *id++ ))
       nodes.push_back( node );
@@ -410,16 +414,16 @@ SMDS_MeshElement* SMESH_MeshEditor::AddElement(const vector<int> & nodeIDs,
 //           Modify a compute state of sub-meshes which become empty
 //=======================================================================
 
-int SMESH_MeshEditor::Remove (const list< int >& theIDs,
-                              const bool         isNodes )
+smIdType SMESH_MeshEditor::Remove (const std::list< smIdType >& theIDs,
+                                   const bool                   isNodes )
 {
   ClearLastCreated();
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
   set< SMESH_subMesh *> smmap;
 
-  int removed = 0;
-  list<int>::const_iterator it = theIDs.begin();
+  smIdType removed = 0;
+  list<smIdType>::const_iterator it = theIDs.begin();
   for ( ; it != theIDs.end(); it++ ) {
     const SMDS_MeshElement * elem;
     if ( isNodes )
@@ -472,10 +476,87 @@ int SMESH_MeshEditor::Remove (const list< int >& theIDs,
   return removed;
 }
 
+//================================================================================
+/*!
+ * \brief Remove a node and fill a hole appeared, by changing surrounding faces
+ */
+//================================================================================
+
+void SMESH_MeshEditor::RemoveNodeWithReconnection( const SMDS_MeshNode* node )
+{
+  if ( ! node )
+    return;
+
+  if ( node->NbInverseElements( SMDSAbs_Volume ) > 0 )
+    throw SALOME_Exception( "RemoveNodeWithReconnection() applies to 2D mesh only" );
+
+  // check that only triangles surround the node
+  for ( SMDS_ElemIteratorPtr fIt = node->GetInverseElementIterator( SMDSAbs_Face ); fIt->more(); )
+  {
+    const SMDS_MeshElement* face = fIt->next();
+    if ( face->GetGeomType() != SMDSGeom_TRIANGLE )
+      throw SALOME_Exception( "RemoveNodeWithReconnection() applies to triangle mesh only" );
+    if ( face->IsQuadratic() )
+      throw SALOME_Exception( "RemoveNodeWithReconnection() applies to linear mesh only" );
+  }
+
+  std::vector< const SMDS_MeshNode*> neighbours(2);
+  SMESH_MeshAlgos::IsOn2DBoundary( node, & neighbours );
+
+  bool toRemove = ( neighbours.size() > 2 ); // non-manifold ==> just remove
+
+  // if ( neighbours.size() == 2 ) // on boundary
+  // {
+  //   // check if theNode and neighbours are on a line
+  //   gp_Pnt pN = SMESH_NodeXYZ( node );
+  //   gp_Pnt p0 = SMESH_NodeXYZ( neighbours[0] );
+  //   gp_Pnt p1 = SMESH_NodeXYZ( neighbours[1] );
+  //   double dist01 = p0.Distance( p1 );
+  //   double    tol = 0.01 * dist01;
+  //   double  distN = ( gp_Vec( p0, p1 ) ^ gp_Vec( p0, pN )).Magnitude() / dist01;
+  //   bool   onLine = distN < tol;
+  //   toRemove = !onLine;
+  // }
+
+  if ( neighbours.empty() ) // not on boundary
+  {
+    TIDSortedElemSet linkedNodes;
+    GetLinkedNodes( node, linkedNodes, SMDSAbs_Face );
+    for ( const SMDS_MeshElement* e : linkedNodes ) neighbours.push_back( cast2Node( e ));
+    if ( neighbours.empty() )
+      toRemove = true;
+  }
+
+  if ( toRemove )
+  {
+    this->Remove( std::list< smIdType >( 1, node->GetID() ), /*isNode=*/true );
+    return;
+  }
+
+  // choose a node to replace by
+  const SMDS_MeshNode* nToReplace = nullptr;
+  SMESH_NodeXYZ           nodeXYZ = node;
+  double                  minDist = Precision::Infinite();
+  for ( const SMDS_MeshNode* n : neighbours )
+  {
+    double dist = nodeXYZ.SquareDistance( n );
+    if ( dist < minDist )
+    {
+      minDist = dist;
+      nToReplace = n;
+    }
+  }
+
+  // remove node + replace by nToReplace
+  std::list< const SMDS_MeshNode* > nodeGroup = { nToReplace, node };
+  TListOfListOfNodes nodesToMerge( 1, nodeGroup );
+  this->MergeNodes( nodesToMerge );
+}
+
 //================================================================================
 /*!
  * \brief Create 0D elements on all nodes of the given object.
- *  \param elements - Elements on whose nodes to create 0D elements; if empty, 
+ *  \param elements - Elements on whose nodes to create 0D elements; if empty,
  *                    the all mesh is treated
  *  \param all0DElems - returns all 0D elements found or created on nodes of \a elements
  *  \param duplicateElements - to add one more 0D element to a node or not
@@ -945,24 +1026,24 @@ bool getQuadrangleNodes(const SMDS_MeshNode *    theQuadNodes [],
 {
   if( tr1->NbNodes() != tr2->NbNodes() )
     return false;
+
   // find the 4-th node to insert into tr1
   const SMDS_MeshNode* n4 = 0;
   SMDS_ElemIteratorPtr it = tr2->nodesIterator();
-  int i=0;
-  while ( !n4 && i<3 ) {
+  for ( int i = 0; !n4 && i < 3; ++i )
+  {
     const SMDS_MeshNode * n = cast2Node( it->next() );
-    i++;
     bool isDiag = ( n == theNode1 || n == theNode2 );
     if ( !isDiag )
       n4 = n;
   }
+
   // Make an array of nodes to be in a quadrangle
   int iNode = 0, iFirstDiag = -1;
   it = tr1->nodesIterator();
-  i=0;
-  while ( i<3 ) {
+  for ( int i = 0; i < 3; ++i )
+  {
     const SMDS_MeshNode * n = cast2Node( it->next() );
-    i++;
     bool isDiag = ( n == theNode1 || n == theNode2 );
     if ( isDiag ) {
       if ( iFirstDiag < 0 )
@@ -1077,6 +1158,210 @@ bool SMESH_MeshEditor::DeleteDiag (const SMDS_MeshNode * theNode1,
   return true;
 }
 
+//=======================================================================
+//function : SplitEdge
+//purpose  : Replace each triangle bound by theNode1-theNode2 segment with
+//           two triangles by connecting a node made on the link with a node opposite to the link.
+//=======================================================================
+
+void SMESH_MeshEditor::SplitEdge (const SMDS_MeshNode * theNode1,
+                                  const SMDS_MeshNode * theNode2,
+                                  double                thePosition)
+{
+  ClearLastCreated();
+
+  SMESHDS_Mesh * mesh = GetMeshDS();
+
+  // Get triangles and segments to divide
+
+  std::vector<const SMDS_MeshNode *> diagNodes = { theNode1, theNode2 };
+  std::vector<const SMDS_MeshElement *> foundElems;
+  if ( !mesh->GetElementsByNodes( diagNodes, foundElems ) || foundElems.empty() )
+    throw SALOME_Exception( SMESH_Comment("No triangle is bound by the edge ")
+                            << theNode1->GetID() << " - " << theNode2->GetID());
+
+  SMESH_MesherHelper helper( *GetMesh() );
+
+  for ( const SMDS_MeshElement * elem : foundElems )
+  {
+    SMDSAbs_ElementType type = elem->GetType();
+    switch ( type ) {
+    case SMDSAbs_Volume:
+      throw SALOME_Exception( "Can't split an edge of a volume");
+      break;
+
+    case SMDSAbs_Face:
+      if ( elem->GetGeomType() != SMDSGeom_TRIANGLE )
+        throw SALOME_Exception( "Can't split an edge of a face of type other than triangle");
+      if ( elem->IsQuadratic() )
+      {
+        helper.SetIsQuadratic( true );
+        helper.AddTLinks( static_cast< const SMDS_MeshFace*>( elem ));
+        helper.SetIsBiQuadratic( elem->GetEntityType() == SMDSEntity_BiQuad_Triangle );
+      }
+      break;
+
+    case SMDSAbs_Edge:
+      if ( elem->IsQuadratic() )
+      {
+        helper.SetIsQuadratic( true );
+        helper.AddTLinks( static_cast< const SMDS_MeshEdge*>( elem ));
+      }
+      break;
+    default:;
+    }
+  }
+
+  // Make a new node
+
+  const SMDS_MeshNode* nodeOnLink = helper.GetMediumNode( theNode1, theNode2,/*force3d=*/false );
+
+  gp_Pnt newNodeXYZ = ( SMESH_NodeXYZ( theNode1 ) * ( 1 - thePosition ) +
+                        SMESH_NodeXYZ( theNode2 ) * thePosition );
+
+  const TopoDS_Shape& S = mesh->IndexToShape( nodeOnLink->GetShapeID() );
+  if ( !S.IsNull() && S.ShapeType() == TopAbs_FACE ) // find newNodeXYZ by UV on FACE
+  {
+    Handle(ShapeAnalysis_Surface) surface = helper.GetSurface( TopoDS::Face( S ));
+    double  tol = 100 * helper.MaxTolerance( S );
+    gp_Pnt2d uv = surface->ValueOfUV( newNodeXYZ, tol );
+    if ( surface->Gap() < SMESH_NodeXYZ( theNode1 ).Distance( theNode2 ))
+    {
+      newNodeXYZ = surface->Value( uv );
+      if ( SMDS_FacePositionPtr nPos = nodeOnLink->GetPosition())
+        nPos->SetParameters( uv.X(), uv.Y() );
+    }
+  }
+  if ( !S.IsNull() && S.ShapeType() == TopAbs_EDGE ) // find newNodeXYZ by param on EDGE
+  {
+    mesh->MoveNode( nodeOnLink, newNodeXYZ.X(), newNodeXYZ.Y(), newNodeXYZ.Z() );
+    double u = Precision::Infinite(), tol = 100 * helper.MaxTolerance( S ), distXYZ[4];
+    helper.ToFixNodeParameters( true );
+    if ( helper.CheckNodeU( TopoDS::Edge( S ), nodeOnLink, u, tol, /*force3D=*/false, distXYZ ))
+      newNodeXYZ.SetCoord( distXYZ[1], distXYZ[2], distXYZ[3] );
+  }
+  mesh->MoveNode( nodeOnLink, newNodeXYZ.X(), newNodeXYZ.Y(), newNodeXYZ.Z() );
+
+  // Split triangles and segments
+
+  std::vector<const SMDS_MeshNode *> nodes( 7 );
+  for ( const SMDS_MeshElement * elem : foundElems )
+  {
+    nodes.assign( elem->begin_nodes(), elem->end_nodes() );
+    nodes.resize( elem->NbCornerNodes() + 1 );
+    nodes.back() = nodes[0];
+
+    smIdType id = elem->GetID();
+    int shapeID = elem->GetShapeID();
+
+    const SMDS_MeshNode* centralNode = nullptr;
+    if ( elem->GetEntityType() == SMDSEntity_BiQuad_Triangle )
+      centralNode = elem->GetNode( 6 );
+
+    mesh->RemoveFreeElement( elem, /*sm=*/0, /*fromGroups=*/false );
+    if ( centralNode )
+      mesh->RemoveFreeNode( centralNode, /*sm=*/0, /*fromGroups=*/true );
+
+    for ( size_t i = 1; i < nodes.size(); ++i )
+    {
+      const SMDS_MeshNode* n1 = nodes[i-1];
+      const SMDS_MeshNode* n2 = nodes[i];
+      const SMDS_MeshElement* newElem;
+      if ( nodes.size() == 4 ) //    triangle
+      {
+        bool isDiag1 = ( n1 == theNode1 || n1 == theNode2 );
+        bool isDiag2 = ( n2 == theNode1 || n2 == theNode2 );
+        if ( isDiag1 && isDiag2 )
+          continue;
+
+        newElem = helper.AddFace( n1, n2, nodeOnLink, id );
+      }
+      else //    segment
+      {
+        newElem = helper.AddEdge( n1, nodeOnLink, id );
+      }
+      myLastCreatedElems.push_back( newElem );
+      AddToSameGroups( newElem, elem, mesh );
+      if ( shapeID )
+        mesh->SetMeshElementOnShape( newElem, shapeID );
+      id = 0;
+    }
+  }
+  return;
+}
+
+//=======================================================================
+//function : SplitFace
+//purpose  : Split a face into triangles each formed by two nodes of the 
+//           face and a new node added at the given coordinates.
+//=======================================================================
+
+void SMESH_MeshEditor::SplitFace (const SMDS_MeshElement * theFace,
+                                  double                   theX,
+                                  double                   theY,
+                                  double                   theZ )
+{
+  ClearLastCreated();
+
+  if ( !theFace )
+    throw SALOME_Exception("Null face given");
+  if ( theFace->GetType() != SMDSAbs_Face )
+    throw SALOME_Exception("Not a face given");
+
+  SMESHDS_Mesh * mesh = GetMeshDS();
+
+  SMESH_MesherHelper helper( *GetMesh() );
+  if ( theFace->IsQuadratic() )
+  {
+    helper.SetIsQuadratic( true );
+    helper.AddTLinks( static_cast< const SMDS_MeshFace*>( theFace ));
+  }
+  const TopoDS_Shape& shape = mesh->IndexToShape( theFace->GetShapeID() );
+  helper.SetSubShape( shape );
+  helper.SetElementsOnShape( true );
+
+  // Make a new node
+
+  const SMDS_MeshNode* centralNode = nullptr;
+  if (      theFace->GetEntityType() == SMDSEntity_BiQuad_Triangle )
+    centralNode = theFace->GetNode( 6 );
+  else if ( theFace->GetEntityType() == SMDSEntity_BiQuad_Quadrangle )
+    centralNode = theFace->GetNode( 8 );
+
+  if ( centralNode )
+  {
+    helper.SetIsBiQuadratic( true );
+    mesh->MoveNode( centralNode, theX, theY, theZ );
+  }
+  else
+    centralNode = helper.AddNode( theX, theY, theZ );
+
+
+  // Split theFace
+
+  std::vector<const SMDS_MeshNode *> nodes( theFace->NbNodes() + 1 );
+  nodes.assign( theFace->begin_nodes(), theFace->end_nodes() );
+  nodes.resize( theFace->NbCornerNodes() + 1 );
+  nodes.back() = nodes[0];
+
+  smIdType id = theFace->GetID();
+  int shapeID = theFace->GetShapeID();
+
+  mesh->RemoveFreeElement( theFace, /*sm=*/0, /*fromGroups=*/false );
+
+  for ( size_t i = 1; i < nodes.size(); ++i )
+  {
+    const SMDS_MeshElement* newElem = helper.AddFace( nodes[i-1], nodes[i], centralNode, id );
+
+    myLastCreatedElems.push_back( newElem );
+    AddToSameGroups( newElem, theFace, mesh );
+    if ( shapeID )
+      mesh->SetMeshElementOnShape( newElem, shapeID );
+    id = 0;
+  }
+  return;
+}
+
 //=======================================================================
 //function : Reorient
 //purpose  : Reverse theElement orientation
@@ -1159,69 +1444,88 @@ bool SMESH_MeshEditor::Reorient (const SMDS_MeshElement * theElem)
 /*!
  * \brief Reorient faces.
  * \param theFaces - the faces to reorient. If empty the whole mesh is meant
- * \param theDirection - desired direction of normal of \a theFace
- * \param theFace - one of \a theFaces that should be oriented according to
- *        \a theDirection and whose orientation defines orientation of other faces
+ * \param theDirection - desired direction of normal of \a theRefFaces.
+ *        It can be (0,0,0) in order to keep orientation of \a theRefFaces.
+ * \param theRefFaces - correctly oriented faces whose orientation defines
+ *        orientation of other faces.
  * \return number of reoriented faces.
  */
 //================================================================================
 
-int SMESH_MeshEditor::Reorient2D (TIDSortedElemSet &       theFaces,
-                                  const gp_Dir&            theDirection,
-                                  const SMDS_MeshElement * theFace)
+int SMESH_MeshEditor::Reorient2D( TIDSortedElemSet &  theFaces,
+                                  const gp_Vec&       theDirection,
+                                  TIDSortedElemSet &  theRefFaces,
+                                  bool                theAllowNonManifold )
 {
   int nbReori = 0;
-  if ( !theFace || theFace->GetType() != SMDSAbs_Face ) return nbReori;
 
   if ( theFaces.empty() )
   {
-    SMDS_FaceIteratorPtr fIt = GetMeshDS()->facesIterator(/*idInceasingOrder=true*/);
+    SMDS_FaceIteratorPtr fIt = GetMeshDS()->facesIterator();
     while ( fIt->more() )
       theFaces.insert( theFaces.end(), fIt->next() );
+
+    if ( theFaces.empty() )
+      return nbReori;
   }
 
-  // orient theFace according to theDirection
-  gp_XYZ normal;
-  SMESH_MeshAlgos::FaceNormal( theFace, normal, /*normalized=*/false );
-  if ( normal * theDirection.XYZ() < 0 )
-    nbReori += Reorient( theFace );
+  // orient theRefFaces according to theDirection
+  if ( theDirection.X() != 0 || theDirection.Y() != 0 || theDirection.Z() != 0 )
+    for ( const SMDS_MeshElement* refFace : theRefFaces )
+    {
+      gp_XYZ normal;
+      SMESH_MeshAlgos::FaceNormal( refFace, normal, /*normalized=*/false );
+      if ( normal * theDirection.XYZ() < 0 )
+        nbReori += Reorient( refFace );
+    }
 
-  // Orient other faces
+  // mark reference faces
+  GetMeshDS()->SetAllCellsNotMarked();
+  for ( const SMDS_MeshElement* refFace : theRefFaces )
+    refFace->setIsMarked( true );
 
-  set< const SMDS_MeshElement* > startFaces, visitedFaces;
-  TIDSortedElemSet avoidSet;
-  set< SMESH_TLink > checkedLinks;
-  pair< set< SMESH_TLink >::iterator, bool > linkIt_isNew;
+  // erase reference faces from theFaces
+  for ( TIDSortedElemSet::iterator fIt = theFaces.begin(); fIt != theFaces.end(); )
+    if ( (*fIt)->isMarked() )
+      fIt = theFaces.erase( fIt );
+    else
+      ++fIt;
+
+  if ( theRefFaces.empty() )
+  {
+    theRefFaces.insert( *theFaces.begin() );
+    theFaces.erase( theFaces.begin() );
+  }
 
-  if ( theFaces.size() > 1 )// leave 1 face to prevent finding not selected faces
-    theFaces.erase( theFace );
-  startFaces.insert( theFace );
+  // Orient theFaces
+
+  // if ( theFaces.size() > 1 )// leave 1 face to prevent finding not selected faces
+  //   theFaces.erase( theFace );
 
   int nodeInd1, nodeInd2;
-  const SMDS_MeshElement*           otherFace;
+  const SMDS_MeshElement*           refFace, *otherFace;
   vector< const SMDS_MeshElement* > facesNearLink;
   vector< std::pair< int, int > >   nodeIndsOfFace;
+  TIDSortedElemSet                  avoidSet, emptySet;
+  NCollection_Map< SMESH_TLink, SMESH_TLink > checkedLinks;
 
-  set< const SMDS_MeshElement* >::iterator startFace = startFaces.begin();
-  while ( !startFaces.empty() )
+  while ( !theRefFaces.empty() )
   {
-    startFace = startFaces.begin();
-    theFace = *startFace;
-    startFaces.erase( startFace );
-    if ( !visitedFaces.insert( theFace ).second )
-      continue;
+    auto refFaceIt = theRefFaces.begin();
+    refFace = *refFaceIt;
+    theRefFaces.erase( refFaceIt );
 
     avoidSet.clear();
-    avoidSet.insert(theFace);
+    avoidSet.insert( refFace );
 
-    NLink link( theFace->GetNode( 0 ), (SMDS_MeshNode *) 0 );
+    NLink link( refFace->GetNode( 0 ), nullptr );
 
-    const int nbNodes = theFace->NbCornerNodes();
-    for ( int i = 0; i < nbNodes; ++i ) // loop on links of theFace
+    const int nbNodes = refFace->NbCornerNodes();
+    for ( int i = 0; i < nbNodes; ++i ) // loop on links of refFace
     {
-      link.second = theFace->GetNode(( i+1 ) % nbNodes );
-      linkIt_isNew = checkedLinks.insert( link );
-      if ( !linkIt_isNew.second )
+      link.second = refFace->GetNode(( i+1 ) % nbNodes );
+      bool isLinkVisited = checkedLinks.Contains( link );
+      if ( isLinkVisited )
       {
         // link has already been checked and won't be encountered more
         // if the group (theFaces) is manifold
@@ -1229,28 +1533,41 @@ int SMESH_MeshEditor::Reorient2D (TIDSortedElemSet &       theFaces,
       }
       else
       {
+        checkedLinks.Add( link );
+
         facesNearLink.clear();
         nodeIndsOfFace.clear();
+        TIDSortedElemSet::iterator objFaceIt = theFaces.end();
+
         while (( otherFace = SMESH_MeshAlgos::FindFaceInSet( link.first, link.second,
-                                                             theFaces, avoidSet,
+                                                             emptySet, avoidSet,
                                                              &nodeInd1, &nodeInd2 )))
-          if ( otherFace != theFace)
+        {
+          if (( otherFace->isMarked() ) || // ref face
+              (( objFaceIt = theFaces.find( otherFace )) != theFaces.end() )) // object face
           {
             facesNearLink.push_back( otherFace );
             nodeIndsOfFace.push_back( make_pair( nodeInd1, nodeInd2 ));
-            avoidSet.insert( otherFace );
           }
+          avoidSet.insert( otherFace );
+        }
         if ( facesNearLink.size() > 1 )
         {
           // NON-MANIFOLD mesh shell !
-          // select a face most co-directed with theFace,
+          if ( !theAllowNonManifold )
+          {
+            throw SALOME_Exception("Non-manifold topology of groups");
+          }
+          // select a face most co-directed with refFace,
           // other faces won't be visited this time
           gp_XYZ NF, NOF;
-          SMESH_MeshAlgos::FaceNormal( theFace, NF, /*normalized=*/false );
+          SMESH_MeshAlgos::FaceNormal( refFace, NF, /*normalized=*/false );
           double proj, maxProj = -1;
-          for ( size_t i = 0; i < facesNearLink.size(); ++i ) {
+          for ( size_t i = 0; i < facesNearLink.size(); ++i )
+          {
             SMESH_MeshAlgos::FaceNormal( facesNearLink[i], NOF, /*normalized=*/false );
-            if (( proj = Abs( NF * NOF )) > maxProj ) {
+            if (( proj = Abs( NF * NOF )) > maxProj )
+            {
               maxProj = proj;
               otherFace = facesNearLink[i];
               nodeInd1  = nodeIndsOfFace[i].first;
@@ -1258,9 +1575,9 @@ int SMESH_MeshEditor::Reorient2D (TIDSortedElemSet &       theFaces,
             }
           }
           // not to visit rejected faces
-          for ( size_t i = 0; i < facesNearLink.size(); ++i )
-            if ( facesNearLink[i] != otherFace && theFaces.size() > 1 )
-              visitedFaces.insert( facesNearLink[i] );
+          // for ( size_t i = 0; i < facesNearLink.size(); ++i )
+          //   if ( facesNearLink[i] != otherFace && theFaces.size() > 1 )
+          //     visitedFaces.insert( facesNearLink[i] );
         }
         else if ( facesNearLink.size() == 1 )
         {
@@ -1268,20 +1585,36 @@ int SMESH_MeshEditor::Reorient2D (TIDSortedElemSet &       theFaces,
           nodeInd1  = nodeIndsOfFace.back().first;
           nodeInd2  = nodeIndsOfFace.back().second;
         }
-        if ( otherFace && otherFace != theFace)
+        if ( otherFace )
         {
-          // link must be reverse in otherFace if orientation to otherFace
-          // is same as that of theFace
-          if ( abs(nodeInd2-nodeInd1) == 1 ? nodeInd2 > nodeInd1 : nodeInd1 > nodeInd2 )
+          // link must be reverse in otherFace if orientation of otherFace
+          // is same as that of refFace
+          if ( abs( nodeInd2 - nodeInd1 ) == 1 ? nodeInd2 > nodeInd1 : nodeInd1 > nodeInd2 )
           {
+            if ( otherFace->isMarked() )
+              throw SALOME_Exception("Different orientation of reference faces");
             nbReori += Reorient( otherFace );
           }
-          startFaces.insert( otherFace );
+          if ( !otherFace->isMarked() )
+          {
+            theRefFaces.insert( otherFace );
+            if ( objFaceIt != theFaces.end() )
+              theFaces.erase( objFaceIt );
+          }
         }
       }
-      std::swap( link.first, link.second ); // reverse the link
+      link.first = link.second; // reverse the link
+
+    } // loop on links of refFace
+
+    if ( theRefFaces.empty() && !theFaces.empty() )
+    {
+      theRefFaces.insert( *theFaces.begin() );
+      theFaces.erase( theFaces.begin() );
     }
-  }
+
+  } // while ( !theRefFaces.empty() )
+
   return nbReori;
 }
 
@@ -1808,6 +2141,17 @@ namespace
     TSplitMethod( int nbTet=0, const int* conn=0, bool addNode=false)
       : _nbSplits(nbTet), _nbCorners(4), _connectivity(conn), _baryNode(addNode), _ownConn(false) {}
     ~TSplitMethod() { if ( _ownConn ) delete [] _connectivity; _connectivity = 0; }
+    TSplitMethod(const TSplitMethod &splitMethod)
+      : _nbSplits(splitMethod._nbSplits),
+        _nbCorners(splitMethod._nbCorners),
+        _baryNode(splitMethod._baryNode),
+        _ownConn(splitMethod._ownConn),
+        _faceBaryNode(splitMethod._faceBaryNode)
+    {
+      _connectivity = splitMethod._connectivity;
+      const_cast<TSplitMethod&>(splitMethod)._connectivity = nullptr;
+      const_cast<TSplitMethod&>(splitMethod)._ownConn = false;
+    }
     bool hasFacet( const TTriangleFacet& facet ) const
     {
       if ( _nbCorners == 4 )
@@ -2058,6 +2402,8 @@ namespace
                                     const int        methodFlags,
                                     const int        facetToSplit)
   {
+    TSplitMethod method;
+
     // order of facets in HEX according to SMDS_VolumeTool::Hexa_F :
     // B, T, L, B, R, F
     const int iF = ( facetToSplit < 2 ) ? 0 : 1 + ( facetToSplit-2 ) % 2; // [0,1,2]
@@ -2088,12 +2434,12 @@ namespace
         to4methods[iF]._nbSplits  = 4;
         to4methods[iF]._nbCorners = 6;
       }
-      return to4methods[iF];
+      method = to4methods[iF];
+      to4methods[iF]._connectivity = method._connectivity; // as copy ctor resets _connectivity
+      return method;
     }
     // else if ( methodFlags == HEXA_TO_2_PRISMS )
 
-    TSplitMethod method;
-
     const int iQ = vol.Element()->IsQuadratic() ? 2 : 1;
 
     const int nbVariants = 2, nbSplits = 2;
@@ -2205,7 +2551,7 @@ namespace
    */
   //=======================================================================
 
-  struct TVolumeFaceKey: pair< pair< int, int>, pair< int, int> >
+  struct TVolumeFaceKey: pair< pair< smIdType, smIdType>, pair< smIdType, smIdType> >
   {
     TVolumeFaceKey( SMDS_VolumeTool& vol, int iF )
     {
@@ -3119,10 +3465,10 @@ public:
     :myMesh( theMesh ), myMaxID( theMesh->MaxNodeID() + 1)
   {}
 
-  long GetLinkID (const SMDS_MeshNode * n1,
+  smIdType GetLinkID (const SMDS_MeshNode * n1,
                   const SMDS_MeshNode * n2) const
   {
-    return ( Min(n1->GetID(),n2->GetID()) * myMaxID + Max(n1->GetID(),n2->GetID()));
+    return ( std::min(n1->GetID(),n2->GetID()) * myMaxID + std::max(n1->GetID(),n2->GetID()));
   }
 
   bool GetNodes (const long             theLinkID,
@@ -3505,6 +3851,68 @@ void SMESH_MeshEditor::GetLinkedNodes( const SMDS_MeshNode* theNode,
   }
 }
 
+//=======================================================================
+//function : averageBySurface
+//purpose  : Auxiliar function to treat properly nodes in periodic faces in the laplacian smoother
+//=======================================================================
+void averageBySurface( const Handle(Geom_Surface)& theSurface, const SMDS_MeshNode* refNode, 
+                        TIDSortedElemSet& nodeSet, map< const SMDS_MeshNode*, gp_XY* >& theUVMap, double * coord )
+{
+  if ( theSurface.IsNull() ) 
+  {
+    TIDSortedElemSet::iterator nodeSetIt = nodeSet.begin();
+    for ( ; nodeSetIt != nodeSet.end(); nodeSetIt++ ) 
+    {
+      const SMDS_MeshNode* node = cast2Node(*nodeSetIt);
+      coord[0] += node->X();
+      coord[1] += node->Y();
+      coord[2] += node->Z();
+    }
+  }
+  else
+  {
+    Standard_Real Umin,Umax,Vmin,Vmax;
+    theSurface->Bounds( Umin, Umax, Vmin, Vmax );
+    ASSERT( theUVMap.find( refNode ) != theUVMap.end() );
+    gp_XY* nodeUV = theUVMap[ refNode ];
+    Standard_Real uref = nodeUV->X();
+    Standard_Real vref = nodeUV->Y();
+
+    TIDSortedElemSet::iterator nodeSetIt = nodeSet.begin();
+    for ( ; nodeSetIt != nodeSet.end(); nodeSetIt++ ) 
+    {
+      const SMDS_MeshNode* node = cast2Node(*nodeSetIt);
+      ASSERT( theUVMap.find( node ) != theUVMap.end() );
+      gp_XY* uv = theUVMap[ node ];    
+
+      if ( theSurface->IsUPeriodic() || theSurface->IsVPeriodic() )  
+      {          
+        Standard_Real u          = uv->X();
+        Standard_Real v          = uv->Y();                      
+        Standard_Real uCorrected = u;
+        Standard_Real vCorrected = v;
+        bool isUTobeCorrected = (std::fabs( uref - u ) >= 0.7 * std::fabs( Umax - Umin ));
+        bool isVTobeCorrected = (std::fabs( vref - v ) >= 0.7 * std::fabs( Vmax - Vmin ));
+
+        if( isUTobeCorrected  )
+          uCorrected = uref > u ? Umax + std::fabs(Umin - u) : Umin - std::fabs(Umax - u);
+
+        if( isVTobeCorrected )
+          vCorrected = vref > v ? Vmax + std::fabs(Vmin - v) : Vmin - std::fabs(Vmax - v);
+        
+        coord[0] += uCorrected;
+        coord[1] += vCorrected;
+
+      }
+      else
+      {
+        coord[0] += uv->X();
+        coord[1] += uv->Y();
+      }
+    }   
+  }
+}
+
 //=======================================================================
 //function : laplacianSmooth
 //purpose  : pulls theNode toward the center of surrounding nodes directly
@@ -3521,26 +3929,14 @@ void laplacianSmooth(const SMDS_MeshNode*                 theNode,
   SMESH_MeshEditor::GetLinkedNodes( theNode, nodeSet, SMDSAbs_Face );
 
   // compute new coodrs
+  double coord[] = { 0., 0., 0. };  
+
+  averageBySurface( theSurface, theNode, nodeSet, theUVMap, coord );
 
-  double coord[] = { 0., 0., 0. };
-  TIDSortedElemSet::iterator nodeSetIt = nodeSet.begin();
-  for ( ; nodeSetIt != nodeSet.end(); nodeSetIt++ ) {
-    const SMDS_MeshNode* node = cast2Node(*nodeSetIt);
-    if ( theSurface.IsNull() ) { // smooth in 3D
-      coord[0] += node->X();
-      coord[1] += node->Y();
-      coord[2] += node->Z();
-    }
-    else { // smooth in 2D
-      ASSERT( theUVMap.find( node ) != theUVMap.end() );
-      gp_XY* uv = theUVMap[ node ];
-      coord[0] += uv->X();
-      coord[1] += uv->Y();
-    }
-  }
   int nbNodes = nodeSet.size();
   if ( !nbNodes )
     return;
+
   coord[0] /= nbNodes;
   coord[1] /= nbNodes;
 
@@ -3550,7 +3946,7 @@ void laplacianSmooth(const SMDS_MeshNode*                 theNode,
     gp_Pnt p3d = theSurface->Value( coord[0], coord[1] );
     coord[0] = p3d.X();
     coord[1] = p3d.Y();
-    coord[2] = p3d.Z();
+    coord[2] = p3d.Z();    
   }
   else
     coord[2] /= nbNodes;
@@ -3560,6 +3956,72 @@ void laplacianSmooth(const SMDS_MeshNode*                 theNode,
   const_cast< SMDS_MeshNode* >( theNode )->setXYZ(coord[0],coord[1],coord[2]);
 }
 
+//=======================================================================
+//function : correctTheValue
+//purpose  : Given a boundaries of parametric space determine if the node coordinate (u,v) need correction 
+//            based on the reference coordinate (uref,vref)
+//=======================================================================
+void correctTheValue( Standard_Real Umax, Standard_Real Umin, Standard_Real Vmax, Standard_Real Vmin, 
+                        Standard_Real uref, Standard_Real vref, Standard_Real &u, Standard_Real &v  )
+{
+  bool isUTobeCorrected = (std::fabs( uref - u ) >= 0.7 * std::fabs( Umax - Umin ));
+  bool isVTobeCorrected = (std::fabs( vref - v ) >= 0.7 * std::fabs( Vmax - Vmin ));
+  if ( isUTobeCorrected )
+    u = std::fabs(u-Umin) < 1e-7 ? Umax : Umin;            
+  if ( isVTobeCorrected )
+    v = std::fabs(v-Vmin) < 1e-7 ? Vmax : Vmin;
+}
+
+//=======================================================================
+//function : averageByElement
+//purpose  : Auxiliar function to treat properly nodes in periodic faces in the centroidal smoother
+//=======================================================================
+void averageByElement( const Handle(Geom_Surface)& theSurface, const SMDS_MeshNode* refNode, const SMDS_MeshElement* elem,
+                        map< const SMDS_MeshNode*, gp_XY* >& theUVMap, SMESH::Controls::TSequenceOfXYZ& aNodePoints, 
+                        gp_XYZ& elemCenter )
+{
+  int nn = elem->NbNodes();
+  if(elem->IsQuadratic()) nn = nn/2;
+  int i=0;
+  SMDS_ElemIteratorPtr itN = elem->nodesIterator();
+  Standard_Real Umin,Umax,Vmin,Vmax;
+  while ( i<nn ) 
+  {
+    const SMDS_MeshNode* aNode = static_cast<const SMDS_MeshNode*>( itN->next() );
+    i++;
+    gp_XYZ aP( aNode->X(), aNode->Y(), aNode->Z() );
+    aNodePoints.push_back( aP );
+    if ( !theSurface.IsNull() ) // smooth in 2D
+    { 
+      ASSERT( theUVMap.find( aNode ) != theUVMap.end() );
+      gp_XY* uv = theUVMap[ aNode ];
+
+      if ( theSurface->IsUPeriodic() || theSurface->IsVPeriodic() )  
+      {  
+        theSurface->Bounds( Umin, Umax, Vmin, Vmax );
+        Standard_Real u          = uv->X();
+        Standard_Real v          = uv->Y();   
+        bool isSingularPoint     = std::fabs(u - Umin) < 1e-7 || std::fabs(v - Vmin) < 1e-7 || std::fabs(u - Umax) < 1e-7 || std::fabs( v - Vmax ) < 1e-7;
+        if ( !isSingularPoint )
+        {
+          aP.SetCoord( uv->X(), uv->Y(), 0. );
+        }
+        else
+        {
+          gp_XY* refPoint = theUVMap[ refNode ];
+          Standard_Real uref = refPoint->X();
+          Standard_Real vref = refPoint->Y();
+          correctTheValue( Umax, Umin, Vmax, Vmin, uref, vref, u, v ); 
+          aP.SetCoord( u, v, 0. );
+        }        
+      }
+      else
+        aP.SetCoord( uv->X(), uv->Y(), 0. );
+    }    
+    elemCenter += aP;   
+  }
+}
+
 //=======================================================================
 //function : centroidalSmooth
 //purpose  : pulls theNode toward the element-area-weighted centroid of the
@@ -3574,48 +4036,46 @@ void centroidalSmooth(const SMDS_MeshNode*                 theNode,
   SMESH::Controls::Area anAreaFunc;
   double totalArea = 0.;
   int nbElems = 0;
-
   // compute new XYZ
-
+  bool notToMoveNode = false;
+  // Do not correct singular nodes
+  if ( !theSurface.IsNull() && (theSurface->IsUPeriodic() || theSurface->IsVPeriodic()) )
+  { 
+    Standard_Real Umin,Umax,Vmin,Vmax;
+    theSurface->Bounds( Umin, Umax, Vmin, Vmax );
+    gp_XY* uv = theUVMap[ theNode ];
+    Standard_Real u = uv->X();
+    Standard_Real v = uv->Y();   
+    notToMoveNode = std::fabs(u - Umin) < 1e-7 || std::fabs(v - Vmin) < 1e-7 || std::fabs(u - Umax) < 1e-7 || std::fabs( v - Vmax ) < 1e-7;
+  }
+  
   SMDS_ElemIteratorPtr elemIt = theNode->GetInverseElementIterator(SMDSAbs_Face);
-  while ( elemIt->more() )
+  while ( elemIt->more() && !notToMoveNode )
   {
     const SMDS_MeshElement* elem = elemIt->next();
     nbElems++;
 
     gp_XYZ elemCenter(0.,0.,0.);
     SMESH::Controls::TSequenceOfXYZ aNodePoints;
-    SMDS_ElemIteratorPtr itN = elem->nodesIterator();
     int nn = elem->NbNodes();
     if(elem->IsQuadratic()) nn = nn/2;
-    int i=0;
-    //while ( itN->more() ) {
-    while ( i<nn ) {
-      const SMDS_MeshNode* aNode = static_cast<const SMDS_MeshNode*>( itN->next() );
-      i++;
-      gp_XYZ aP( aNode->X(), aNode->Y(), aNode->Z() );
-      aNodePoints.push_back( aP );
-      if ( !theSurface.IsNull() ) { // smooth in 2D
-        ASSERT( theUVMap.find( aNode ) != theUVMap.end() );
-        gp_XY* uv = theUVMap[ aNode ];
-        aP.SetCoord( uv->X(), uv->Y(), 0. );
-      }
-      elemCenter += aP;
-    }
+    averageByElement( theSurface, theNode, elem, theUVMap, aNodePoints, elemCenter );
+
     double elemArea = anAreaFunc.GetValue( aNodePoints );
     totalArea += elemArea;
     elemCenter /= nn;
     aNewXYZ += elemCenter * elemArea;
   }
   aNewXYZ /= totalArea;
-  if ( !theSurface.IsNull() ) {
+  
+  if ( !theSurface.IsNull() && !notToMoveNode ) {
     theUVMap[ theNode ]->SetCoord( aNewXYZ.X(), aNewXYZ.Y() );
     aNewXYZ = theSurface->Value( aNewXYZ.X(), aNewXYZ.Y() ).XYZ();
   }
 
   // move node
-
-  const_cast< SMDS_MeshNode* >( theNode )->setXYZ(aNewXYZ.X(),aNewXYZ.Y(),aNewXYZ.Z());
+  if ( !notToMoveNode )
+    const_cast< SMDS_MeshNode* >( theNode )->setXYZ(aNewXYZ.X(),aNewXYZ.Y(),aNewXYZ.Z());
 }
 
 //=======================================================================
@@ -3918,7 +4378,8 @@ void SMESH_MeshEditor::Smooth (TIDSortedElemSet &          theElems,
         if ( !BRep_Tool::IsClosed( edge, face ))
           continue;
         SMESHDS_SubMesh* sm = aMesh->MeshElements( edge );
-        if ( !sm ) continue;
+        if ( !sm )
+          continue;
         // find out which parameter varies for a node on seam
         double f,l;
         gp_Pnt2d uv1, uv2;
@@ -4292,7 +4753,7 @@ void SMESH_MeshEditor::sweepElement(const SMDS_MeshElement*               elem,
         std::swap( itNN[0],    itNN[1] );
         std::swap( prevNod[0], prevNod[1] );
         std::swap( nextNod[0], nextNod[1] );
-        std::swap( isSingleNode[0], isSingleNode[1] );
+       std::vector<bool>::swap(isSingleNode[0], isSingleNode[1]);
         if ( nbSame > 0 )
           sames[0] = 1 - sames[0];
         iNotSameNode = 1 - iNotSameNode;
@@ -4875,13 +5336,12 @@ void SMESH_MeshEditor::makeWalls (TNodeOfNodeListMap &     mapNewNodes,
               srcEdges.push_back(aMesh->FindEdge (commonNodes[0],commonNodes[1],commonNodes[2]));
             else
               srcEdges.push_back(aMesh->FindEdge (commonNodes[0],commonNodes[1]));
-#ifdef _DEBUG_
-            if ( !srcEdges.back() )
+
+            if (SALOME::VerbosityActivated() && !srcEdges.back())
             {
               cout << "SMESH_MeshEditor::makeWalls(), no source edge found for a free face #"
-                   << iF << " of volume #" << vTool.ID() << endl;
+                  << iF << " of volume #" << vTool.ID() << endl;
             }
-#endif
           }
         }
         if ( freeInd.empty() )
@@ -6468,13 +6928,12 @@ SMESH_MeshEditor::PGroupIDs SMESH_MeshEditor::Offset( TIDSortedElemSet & theElem
 
   // copy offsetMesh to theTgtMesh
 
-  int idShift = meshDS->MaxNodeID();
+  smIdType idShift = meshDS->MaxNodeID();
   for ( size_t i = 0; i < new2OldNodes.size(); ++i )
     if ( const SMDS_MeshNode* n = new2OldNodes[ i ].first )
     {
-#ifndef _DEBUG_
-      if ( n->NbInverseElements() > 0 )
-#endif
+
+      if (!SALOME::VerbosityActivated() || n->NbInverseElements() > 0 )
       {
         const SMDS_MeshNode* n2 =
           tgtMeshDS->AddNodeWithID( n->X(), n->Y(), n->Z(), idShift + n->GetID() );
@@ -6838,7 +7297,7 @@ void SMESH_MeshEditor::MergeNodes (TListOfListOfNodes & theGroupsOfNodes,
 
   TNodeNodeMap nodeNodeMap; // node to replace - new node
   set<const SMDS_MeshElement*> elems; // all elements with changed nodes
-  list< int > rmElemIds, rmNodeIds;
+  list< smIdType > rmElemIds, rmNodeIds;
   vector< ElemFeatures > newElemDefs;
 
   // Fill nodeNodeMap and elems
@@ -6937,6 +7396,7 @@ void SMESH_MeshEditor::MergeNodes (TListOfListOfNodes & theGroupsOfNodes,
   {
     const SMDS_MeshElement* elem = *eIt;
     SMESHDS_SubMesh*          sm = mesh->MeshElements( elem->getshapeId() );
+    bool                 marked = elem->isMarked();
 
     bool keepElem = applyMerge( elem, newElemDefs, nodeNodeMap, /*noHoles=*/false );
     if ( !keepElem )
@@ -6944,9 +7404,19 @@ void SMESH_MeshEditor::MergeNodes (TListOfListOfNodes & theGroupsOfNodes,
 
     for ( size_t i = 0; i < newElemDefs.size(); ++i )
     {
-      if ( i > 0 || !mesh->ChangeElementNodes( elem,
-                                               & newElemDefs[i].myNodes[0],
-                                               newElemDefs[i].myNodes.size() ))
+      bool elemChanged = false;
+      if ( i == 0 )
+      {
+        if ( elem->GetGeomType() == SMDSGeom_POLYHEDRA )
+          elemChanged = mesh->ChangePolyhedronNodes( elem,
+                                                     newElemDefs[i].myNodes,
+                                                     newElemDefs[i].myPolyhedQuantities );
+        else
+          elemChanged = mesh->ChangeElementNodes( elem,
+                                                  & newElemDefs[i].myNodes[0],
+                                                  newElemDefs[i].myNodes.size() );
+      }
+      if ( i > 0 || !elemChanged )
       {
         if ( i == 0 )
         {
@@ -6963,6 +7433,8 @@ void SMESH_MeshEditor::MergeNodes (TListOfListOfNodes & theGroupsOfNodes,
           sm->AddElement( newElem );
         if ( elem != newElem )
           ReplaceElemInGroups( elem, newElem, mesh );
+        if ( marked && newElem )
+          newElem->setIsMarked( true );
       }
     }
   }
@@ -7113,6 +7585,7 @@ bool SMESH_MeshEditor::applyMerge( const SMDS_MeshElement* elem,
         // each face has to be analyzed in order to check volume validity
         if ( const SMDS_MeshVolume* aPolyedre = SMDS_Mesh::DownCast< SMDS_MeshVolume >( elem ))
         {
+          toRemove = false;
           int nbFaces = aPolyedre->NbFaces();
 
           vector<const SMDS_MeshNode *>& poly_nodes = newElemDefs[0].myNodes;
@@ -7433,12 +7906,12 @@ bool SMESH_MeshEditor::applyMerge( const SMDS_MeshElement* elem,
 // purpose : allow comparing elements basing on their nodes
 // ========================================================
 
-class ComparableElement : public boost::container::flat_set< int >
+class ComparableElement : public boost::container::flat_set< smIdType >
 {
-  typedef boost::container::flat_set< int >  int_set;
+  typedef boost::container::flat_set< smIdType >  int_set;
 
   const SMDS_MeshElement* myElem;
-  int                     mySumID;
+  smIdType                mySumID;
   mutable int             myGroupID;
 
 public:
@@ -7449,7 +7922,7 @@ public:
     this->reserve( theElem->NbNodes() );
     for ( SMDS_ElemIteratorPtr nodeIt = theElem->nodesIterator(); nodeIt->more(); )
     {
-      int id = nodeIt->next()->GetID();
+      smIdType id = nodeIt->next()->GetID();
       mySumID += id;
       this->insert( id );
     }
@@ -7472,7 +7945,7 @@ public:
 
   static int HashCode(const ComparableElement& se, int limit )
   {
-    return ::HashCode( se.mySumID, limit );
+    return ::HashCode( FromSmIdType<int>(se.mySumID), limit );
   }
   static Standard_Boolean IsEqual(const ComparableElement& se1, const ComparableElement& se2 )
   {
@@ -7497,7 +7970,7 @@ void SMESH_MeshEditor::FindEqualElements( TIDSortedElemSet &        theElements,
   else                       elemIt = SMESHUtils::elemSetIterator( theElements );
 
   typedef NCollection_Map< ComparableElement, ComparableElement > TMapOfElements;
-  typedef std::list<int>                                          TGroupOfElems;
+  typedef std::list<smIdType>                                     TGroupOfElems;
   TMapOfElements               mapOfElements;
   std::vector< TGroupOfElems > arrayOfGroups;
   TGroupOfElems                groupOfElems;
@@ -7543,7 +8016,7 @@ void SMESH_MeshEditor::MergeElements(TListOfListOfElementsID & theGroupsOfElemen
 {
   ClearLastCreated();
 
-  typedef list<int> TListOfIDs;
+  typedef list<smIdType> TListOfIDs;
   TListOfIDs rmElemIds; // IDs of elems to remove
 
   SMESHDS_Mesh* aMesh = GetMeshDS();
@@ -8258,8 +8731,8 @@ SMESH_MeshEditor::SewFreeBorder (const SMDS_MeshNode* theBordFirstNode,
     TListOfListOfElementsID::iterator itGroups = equalGroups.begin();
     for ( ; itGroups != equalGroups.end(); ++itGroups )
     {
-      list< int >& group = *itGroups;
-      list< int >::iterator id = group.begin();
+      list< smIdType >& group = *itGroups;
+      list< smIdType >::iterator id = group.begin();
       for ( ++id; id != group.end(); ++id )
         if ( const SMDS_MeshElement* seg = GetMeshDS()->FindElement( *id ))
           segments.erase( seg );
@@ -8691,12 +9164,12 @@ namespace
  */
 //=======================================================================
 
-int SMESH_MeshEditor::convertElemToQuadratic(SMESHDS_SubMesh *   theSm,
-                                             SMESH_MesherHelper& theHelper,
-                                             const bool          theForce3d)
+smIdType SMESH_MeshEditor::convertElemToQuadratic(SMESHDS_SubMesh *   theSm,
+                                                  SMESH_MesherHelper& theHelper,
+                                                  const bool          theForce3d)
 {
   //MESSAGE("convertElemToQuadratic");
-  int nbElem = 0;
+  smIdType nbElem = 0;
   if( !theSm ) return nbElem;
 
   vector<int> nbNodeInFaces;
@@ -8749,7 +9222,7 @@ int SMESH_MeshEditor::convertElemToQuadratic(SMESHDS_SubMesh *   theSm,
     }
     // get elem data needed to re-create it
     //
-    const int id      = elem->GetID();
+    const smIdType id = elem->GetID();
     const int nbNodes = elem->NbCornerNodes();
     nodes.assign(elem->begin_nodes(), elem->end_nodes());
     if ( aGeomType == SMDSEntity_Polyhedra )
@@ -8844,7 +9317,7 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d, const bool theT
   aHelper.ToFixNodeParameters( true );
 
   // convert elements assigned to sub-meshes
-  int nbCheckedElems = 0;
+  smIdType nbCheckedElems = 0;
   if ( myMesh->HasShapeToMesh() )
   {
     if ( SMESH_subMesh *aSubMesh = myMesh->GetSubMeshContaining(myMesh->GetShapeToMesh()))
@@ -8861,7 +9334,7 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d, const bool theT
   }
 
   // convert elements NOT assigned to sub-meshes
-  int totalNbElems = meshDS->NbEdges() + meshDS->NbFaces() + meshDS->NbVolumes();
+  smIdType totalNbElems = meshDS->NbEdges() + meshDS->NbFaces() + meshDS->NbVolumes();
   if ( nbCheckedElems < totalNbElems ) // not all elements are in sub-meshes
   {
     aHelper.SetElementsOnShape(false);
@@ -8874,7 +9347,7 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d, const bool theT
       const SMDS_MeshEdge* edge = aEdgeItr->next();
       if ( !edge->IsQuadratic() )
       {
-        int                  id = edge->GetID();
+        smIdType                  id = edge->GetID();
         const SMDS_MeshNode* n1 = edge->GetNode(0);
         const SMDS_MeshNode* n2 = edge->GetNode(1);
 
@@ -8915,7 +9388,7 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d, const bool theT
       if ( alreadyOK )
         continue;
 
-      const int id = face->GetID();
+      const smIdType id = face->GetID();
       vector<const SMDS_MeshNode *> nodes ( face->begin_nodes(), face->end_nodes());
 
       meshDS->RemoveFreeElement(face, smDS, /*fromGroups=*/false);
@@ -8971,7 +9444,7 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool theForce3d, const bool theT
           continue;
         }
       }
-      const int id = volume->GetID();
+      const smIdType id = volume->GetID();
       vector<const SMDS_MeshNode *> nodes (volume->begin_nodes(), volume->end_nodes());
       if ( type == SMDSEntity_Polyhedra )
         nbNodeInFaces = static_cast<const SMDS_MeshVolume* >(volume)->GetQuantities();
@@ -9151,7 +9624,7 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool        theForce3d,
     if ( alreadyOK ) continue;
 
     const SMDSAbs_ElementType type = elem->GetType();
-    const int                   id = elem->GetID();
+    const smIdType              id = elem->GetID();
     const int              nbNodes = elem->NbCornerNodes();
     vector<const SMDS_MeshNode *> nodes ( elem->begin_nodes(), elem->end_nodes());
 
@@ -9212,15 +9685,15 @@ void SMESH_MeshEditor::ConvertToQuadratic(const bool        theForce3d,
 //=======================================================================
 /*!
  * \brief Convert quadratic elements to linear ones and remove quadratic nodes
- * \return int - nb of checked elements
+ * \return smIdType - nb of checked elements
  */
 //=======================================================================
 
-int SMESH_MeshEditor::removeQuadElem(SMESHDS_SubMesh *    theSm,
-                                     SMDS_ElemIteratorPtr theItr,
-                                     const int            /*theShapeID*/)
+smIdType SMESH_MeshEditor::removeQuadElem(SMESHDS_SubMesh *    theSm,
+                                          SMDS_ElemIteratorPtr theItr,
+                                          const int            /*theShapeID*/)
 {
-  int nbElem = 0;
+  smIdType nbElem = 0;
   SMESHDS_Mesh* meshDS = GetMeshDS();
   ElemFeatures elemType;
   vector<const SMDS_MeshNode *> nodes;
@@ -9265,7 +9738,7 @@ int SMESH_MeshEditor::removeQuadElem(SMESHDS_SubMesh *    theSm,
 
 bool SMESH_MeshEditor::ConvertFromQuadratic()
 {
-  int nbCheckedElems = 0;
+  smIdType nbCheckedElems = 0;
   if ( myMesh->HasShapeToMesh() )
   {
     if ( SMESH_subMesh *aSubMesh = myMesh->GetSubMeshContaining(myMesh->GetShapeToMesh()))
@@ -9279,7 +9752,7 @@ bool SMESH_MeshEditor::ConvertFromQuadratic()
     }
   }
 
-  int totalNbElems =
+  smIdType totalNbElems =
     GetMeshDS()->NbEdges() + GetMeshDS()->NbFaces() + GetMeshDS()->NbVolumes();
   if ( nbCheckedElems < totalNbElems ) // not all elements are in submeshes
   {
@@ -9318,7 +9791,7 @@ void SMESH_MeshEditor::ConvertFromQuadratic(TIDSortedElemSet& theElements)
   if ( theElements.empty() ) return;
 
   // collect IDs of medium nodes of theElements; some of these nodes will be removed
-  set<int> mediumNodeIDs;
+  set<smIdType> mediumNodeIDs;
   TIDSortedElemSet::iterator eIt = theElements.begin();
   for ( ; eIt != theElements.end(); ++eIt )
   {
@@ -9337,7 +9810,7 @@ void SMESH_MeshEditor::ConvertFromQuadratic(TIDSortedElemSet& theElements)
 
   // get remaining medium nodes
   TIDSortedNodeSet mediumNodes;
-  set<int>::iterator nIdsIt = mediumNodeIDs.begin();
+  set<smIdType>::iterator nIdsIt = mediumNodeIDs.begin();
   for ( ; nIdsIt != mediumNodeIDs.end(); ++nIdsIt )
     if ( const SMDS_MeshNode* n = GetMeshDS()->FindNode( *nIdsIt ))
       mediumNodes.insert( mediumNodes.end(), n );
@@ -9826,7 +10299,7 @@ SMESH_MeshEditor::SewSideElements (TIDSortedElemSet&    theSide1,
   if ( aResult != SEW_OK)
     return aResult;
 
-  list< int > nodeIDsToRemove;
+  list< smIdType > nodeIDsToRemove;
   vector< const SMDS_MeshNode*> nodes;
   ElemFeatures elemType;
 
@@ -10226,7 +10699,8 @@ namespace // automatically find theAffectedElems for DoubleNodes()
       if ( maxX < 0 )
       {
         _elems[0]->setIsMarked( false );
-        _elems[1]->setIsMarked( true );
+        if ( _elems[1] )
+          _elems[1]->setIsMarked( true );
       }
     }
 
@@ -10398,7 +10872,11 @@ namespace // automatically find theAffectedElems for DoubleNodes()
     {
       fissure.reserve( theElemsOrNodes.size() );
       for ( ; elIt != theElemsOrNodes.end(); ++elIt )
+      {
         fissure.push_back( std::move( FissureBorder( *elIt, elemsByFacet )));
+        if ( !fissure.back()._elems[1] )
+          fissure.pop_back();
+      }
     }
     if ( fissure.empty() )
       return;
@@ -10761,7 +11239,23 @@ bool SMESH_MeshEditor::doubleNodes(SMESHDS_Mesh*           theMeshDS,
     if ( theIsDoubleElem )
       AddElement( newNodes, elemType.Init( anElem, /*basicOnly=*/false ));
     else
-      theMeshDS->ChangeElementNodes( anElem, &newNodes[ 0 ], newNodes.size() );
+    {
+      // change element nodes
+      const SMDSAbs_EntityType geomType = anElem->GetEntityType();
+      if ( geomType == SMDSEntity_Polyhedra )
+      {
+        // special treatment for polyhedron
+        const SMDS_MeshVolume* aPolyhedron = SMDS_Mesh::DownCast< SMDS_MeshVolume >( anElem );
+        if (!aPolyhedron) {
+          MESSAGE("Warning: bad volumic element");
+          return false;
+        }
+        theMeshDS->ChangePolyhedronNodes( anElem, newNodes, aPolyhedron->GetQuantities() );
+      }
+      else
+        // standard entity type
+        theMeshDS->ChangeElementNodes( anElem, &newNodes[ 0 ], newNodes.size() );
+    }
 
     res = true;
   }
@@ -10905,7 +11399,7 @@ namespace {
   \brief 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 elements (edges or faces) to be replicated
-  \param theNodesNot - list of groups of nodes not to replicated
+  \param theNodesNot - list of groups of nodes not to replicate
   \param theShape - shape to detect affected elements (element which geometric center
          located on or inside shape). If the shape is null, detection is done on faces orientations
          (select elements with a gravity center on the side given by faces normals).
@@ -11087,16 +11581,9 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
   //     build the list of nodes shared by 2 or more domains, with their domain indexes
 
   std::map<DownIdType, std::map<int,int>, DownIdCompare> faceDomains; // face --> (id domain --> id volume)
-  std::map<int,int>celldom; // cell vtkId --> domain
+  std::map<int,int> celldom; // cell vtkId --> domain
   std::map<DownIdType, std::map<int,int>, DownIdCompare> cellDomains;  // oldNode --> (id domain --> id cell)
   std::map<int, std::map<int,int> > nodeDomains; // oldId -->  (domainId --> newId)
-  faceDomains.clear();
-  celldom.clear();
-  cellDomains.clear();
-  nodeDomains.clear();
-  std::map<int,int> emptyMap;
-  std::set<int> emptySet;
-  emptyMap.clear();
 
   //MESSAGE(".. Number of domains :"<<theElems.size());
 
@@ -11146,7 +11633,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
       const SMDS_MeshElement* anElem = *elemItr;
       if (!anElem)
         continue;
-      int vtkId = anElem->GetVtkID();
+      vtkIdType vtkId = anElem->GetVtkID();
       //MESSAGE("  vtkId " << vtkId << " smdsId " << anElem->GetID());
       int neighborsVtkIds[NBMAXNEIGHBORS];
       int downIds[NBMAXNEIGHBORS];
@@ -11154,7 +11641,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]);
+        smIdType 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
         {
@@ -11206,7 +11693,6 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
       DownIdType face = itface->first;
       //MESSAGE(" --- face " << face.cellId);
       std::set<int> oldNodes;
-      oldNodes.clear();
       grid->GetNodeIds(oldNodes, face.cellId, face.cellType);
       std::set<int>::iterator itn = oldNodes.begin();
       for (; itn != oldNodes.end(); ++itn)
@@ -11261,7 +11747,6 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
       DownIdType face = itface->first;
       //MESSAGE(" --- face " << face.cellId);
       std::set<int> oldNodes;
-      oldNodes.clear();
       grid->GetNodeIds(oldNodes, face.cellId, face.cellType);
       std::set<int>::iterator itn = oldNodes.begin();
       for (; itn != oldNodes.end(); ++itn)
@@ -11322,7 +11807,6 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
       DownIdType face = itface->first;
       //MESSAGE(" --- face " << face.cellId);
       std::set<int> oldNodes;
-      oldNodes.clear();
       grid->GetNodeIds(oldNodes, face.cellId, face.cellType);
       int nbMultipleNodes = 0;
       std::set<int>::iterator itn = oldNodes.begin();
@@ -11383,7 +11867,7 @@ 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]);
+                    smIdType smdsId = meshDS->FromVtkToSmds(vtkVolIds[ivol]);
                     const SMDS_MeshElement* elem = meshDS->FindElement(smdsId);
                     if (domain.count(elem))
                     {
@@ -11447,7 +11931,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
   std::map<std::string, SMESH_Group*> mapOfJunctionGroups;
 
   //MESSAGE(".. Creation of elements: simple junction");
-  if (createJointElems)
+  if ( createJointElems )
   {
     string joints2DName = "joints2D";
     mapOfJunctionGroups[joints2DName] = this->myMesh->AddGroup(SMDSAbs_Face, joints2DName.c_str());
@@ -11462,15 +11946,14 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
       DownIdType face = itface->first;
       std::set<int> oldNodes;
       std::set<int>::iterator itn;
-      oldNodes.clear();
       grid->GetNodeIds(oldNodes, face.cellId, face.cellType);
 
-      std::map<int, int> domvol = itface->second;
+      std::map<int, int>          domvol = itface->second;
       std::map<int, int>::iterator itdom = domvol.begin();
-      int dom1 = itdom->first;
+      int     dom1 = itdom->first;
       int vtkVolId = itdom->second;
       itdom++;
-      int dom2 = itdom->first;
+      int           dom2 = itdom->first;
       SMDS_MeshCell *vol = grid->extrudeVolumeFromFace(vtkVolId, dom1, dom2, oldNodes, nodeDomains,
                                                        nodeQuadDomains);
       stringstream grpname;
@@ -11527,7 +12010,7 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
     std::map<std::vector<int>, std::vector<int> >::iterator ite = edgesMultiDomains.begin();
     for (; ite != edgesMultiDomains.end(); ++ite)
     {
-      vector<int> nodes = ite->first;
+      vector<int>    nodes = ite->first;
       vector<int> orderDom = ite->second;
       vector<vtkIdType> orderedNodes;
       if (nodes.size() == 2)
@@ -11564,10 +12047,9 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
 
   std::map<DownIdType, std::map<int,int>, DownIdCompare> faceOrEdgeDom; // cellToModify --> (id domain --> id cell)
   std::map<int,int> feDom; // vtk id of cell to modify --> id domain
-  faceOrEdgeDom.clear();
-  feDom.clear();
 
   //MESSAGE(".. Modification of elements");
+  SMDSAbs_ElementType domainType = (*theElems[0].begin())->GetType();
   for (int idomain = idom0; idomain < nbDomains; idomain++)
   {
     std::map<int, std::map<int, int> >::const_iterator itnod = nodeDomains.begin();
@@ -11585,13 +12067,29 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
           continue; // new cells: not to be modified
         DownIdType aCell(downId, vtkType);
         int volParents[1000];
-        int nbvol = grid->GetParentVolumes(volParents, vtkId);
+        int nbvol = 0;
+        nbvol = grid->GetParentVolumes(volParents, vtkId);
+        if ( domainType == SMDSAbs_Volume )
+        {
+          nbvol = grid->GetParentVolumes(volParents, vtkId);
+        }
+        else // domainType == SMDSAbs_Face
+        {
+          const int            nbFaces = grid->getDownArray(vtkType)->getNumberOfUpCells(downId);
+          const int           *upCells = grid->getDownArray(vtkType)->getUpCells(downId);
+          const unsigned char* upTypes = grid->getDownArray(vtkType)->getUpTypes(downId);
+          for (int i=0; i< nbFaces; i++)
+          {
+            int vtkFaceId = grid->getDownArray( upTypes[i] )->getVtkCellId(upCells[i]);
+            if (vtkFaceId >= 0)
+              volParents[nbvol++] = vtkFaceId;
+          }
+        }
         for (int j = 0; j < nbvol; j++)
           if (celldom.count(volParents[j]) && (celldom[volParents[j]] == idomain))
             if (!feDom.count(vtkId))
             {
               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
               //        << " type " << vtkType << " downId " << downId);
@@ -11614,7 +12112,6 @@ bool SMESH_MeshEditor::DoubleNodesOnGroupBoundaries( const std::vector<TIDSorted
       DownIdType face = itface->first;
       std::set<int> oldNodes;
       std::set<int>::iterator itn;
-      oldNodes.clear();
       grid->GetNodeIds(oldNodes, face.cellId, face.cellType);
       //MESSAGE("examine cell, downId " << face.cellId << " type " << int(face.cellType));
       std::map<int, int> localClonedNodeIds;
@@ -11681,10 +12178,7 @@ bool SMESH_MeshEditor::CreateFlatElementsOnFacesGroups(const std::vector<TIDSort
 
   std::map<const SMDS_MeshNode*, const SMDS_MeshNode*> clonedNodes;
   std::map<const SMDS_MeshNode*, const SMDS_MeshNode*> intermediateNodes;
-  clonedNodes.clear();
-  intermediateNodes.clear();
   std::map<std::string, SMESH_Group*> mapOfJunctionGroups;
-  mapOfJunctionGroups.clear();
 
   for ( size_t idom = 0; idom < theElems.size(); idom++ )
   {
@@ -11931,7 +12425,6 @@ void SMESH_MeshEditor::CreateHoleSkin(double                          radius,
   std::set<int> setOfVolToCheck;
 
   std::vector<gp_Pnt> gpnts;
-  gpnts.clear();
 
   if (isNodeGroup) // --- a group of nodes is provided : find all the volumes using one or more of this nodes
   {
@@ -12018,7 +12511,6 @@ void SMESH_MeshEditor::CreateHoleSkin(double                          radius,
     //     Fill the group of inside volumes
 
     std::map<int, double> mapOfNodeDistance2;
-    mapOfNodeDistance2.clear();
     std::set<int> setOfOutsideVol;
     while (!setOfVolToCheck.empty())
     {
@@ -12195,9 +12687,7 @@ void SMESH_MeshEditor::CreateHoleSkin(double                          radius,
   //     project polylines on subshapes, and partition, to get geom faces
 
   std::map<int, std::set<int> > shapeIdToVtkIdSet; // shapeId --> set of vtkId on skin
-  std::set<int> emptySet;
-  emptySet.clear();
-  std::set<int> shapeIds;
+  std::set<int>                 shapeIds;
 
   SMDS_ElemIteratorPtr itelem = sgrps->GetElements();
   while (itelem->more())
@@ -12207,7 +12697,6 @@ void SMESH_MeshEditor::CreateHoleSkin(double                          radius,
     int   vtkId = elem->GetVtkID();
     if (!shapeIdToVtkIdSet.count(shapeId))
     {
-      shapeIdToVtkIdSet[shapeId] = emptySet;
       shapeIds.insert(shapeId);
     }
     shapeIdToVtkIdSet[shapeId].insert(vtkId);
@@ -12215,7 +12704,6 @@ void SMESH_MeshEditor::CreateHoleSkin(double                          radius,
 
   std::map<int, std::set<DownIdType, DownIdCompare> > shapeIdToEdges; // shapeId --> set of downward edges
   std::set<DownIdType, DownIdCompare> emptyEdges;
-  emptyEdges.clear();
 
   std::map<int, std::set<int> >::iterator itShape =  shapeIdToVtkIdSet.begin();
   for (; itShape != shapeIdToVtkIdSet.end(); ++itShape)
@@ -12239,7 +12727,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]);
+        smIdType 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
         {
@@ -12258,7 +12746,6 @@ void SMESH_MeshEditor::CreateHoleSkin(double                          radius,
     }
 
     std::list<int> order;
-    order.clear();
     if (nodesEdges.size() > 0)
     {
       order.push_back(nodesEdges[0]); //MESSAGE("       --- back " << order.back()+1); // SMDS id = VTK id + 1;
@@ -12439,7 +12926,8 @@ int SMESH_MeshEditor::MakeBoundaryMesh(const TIDSortedElemSet& elements,
                                        bool                    toCopyElements/*=false*/,
                                        bool                    toCopyExistingBoundary/*=false*/,
                                        bool                    toAddExistingBondary/*= false*/,
-                                       bool                    aroundElements/*= false*/)
+                                       bool                    aroundElements/*= false*/,
+                                       bool                    toCreateAllElements/*= false*/)
 {
   SMDSAbs_ElementType missType = (dimension == BND_2DFROM3D) ? SMDSAbs_Face : SMDSAbs_Edge;
   SMDSAbs_ElementType elemType = (dimension == BND_1DFROM2D) ? SMDSAbs_Face : SMDSAbs_Volume;
@@ -12458,7 +12946,6 @@ int SMESH_MeshEditor::MakeBoundaryMesh(const TIDSortedElemSet& elements,
   SMESH_MeshEditor* presentEditor;
   SMESH_MeshEditor tgtEditor2( tgtEditor.GetMesh() );
   presentEditor = toAddExistingBondary ? &tgtEditor : &tgtEditor2;
-
   SMESH_MesherHelper helper( *myMesh );
   const TopAbs_ShapeEnum missShapeType = ( missType==SMDSAbs_Face ? TopAbs_FACE : TopAbs_EDGE );
   SMDS_VolumeTool vTool;
@@ -12496,8 +12983,9 @@ int SMESH_MeshEditor::MakeBoundaryMesh(const TIDSortedElemSet& elements,
       const SMDS_MeshElement* otherVol = 0;
       for ( int iface = 0, n = vTool.NbFaces(); iface < n; iface++ )
       {
-        if ( !vTool.IsFreeFace(iface, &otherVol) &&
-             ( !aroundElements || elements.count( otherVol )))
+        if ( !toCreateAllElements && 
+              !vTool.IsFreeFace(iface, &otherVol) &&
+                ( !aroundElements || elements.count( otherVol )))
           continue;
         freeFacets.push_back( iface );
       }
index 3a50a629a6b8b20280cbaf7c5f750a05a74a35e0..8d253a45f34734c5400060795035bf7f86a37453 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -87,7 +87,7 @@ public:
   {
     SMDSAbs_ElementType               myType;
     bool                              myIsPoly, myIsQuad;
-    int                               myID;
+    smIdType                          myID;
     double                            myBallDiameter;
     std::vector<int>                  myPolyhedQuantities;
     std::vector<const SMDS_MeshNode*> myNodes; // not managed by ElemFeatures
@@ -113,7 +113,7 @@ public:
 
     SMESH_EXPORT ElemFeatures& SetPoly(bool isPoly) { myIsPoly = isPoly; return *this; }
     SMESH_EXPORT ElemFeatures& SetQuad(bool isQuad) { myIsQuad = isQuad; return *this; }
-    SMESH_EXPORT ElemFeatures& SetID  (int ID)      { myID = ID; return *this; }
+    SMESH_EXPORT ElemFeatures& SetID  (smIdType ID) { myID = ID; return *this; }
   };
 
   /*!
@@ -124,10 +124,14 @@ public:
   /*!
    * \brief Add element
    */
-  SMDS_MeshElement* AddElement(const std::vector<int> & nodeIDs,
-                               const ElemFeatures&      features);
+  SMDS_MeshElement* AddElement(const std::vector<smIdType> & nodeIDs,
+                               const ElemFeatures&           features);
+  /*!
+   * \brief Remove a node and fill a hole appeared by changing surrounding faces
+   */
+  void RemoveNodeWithReconnection( const SMDS_MeshNode* node );
 
-  int Remove (const std::list< int >& theElemIDs, const bool isNodes);
+  smIdType Remove (const std::list< smIdType >& theElemIDs, const bool isNodes);
   // Remove a node or an element.
   // Modify a compute state of sub-meshes which become empty
 
@@ -155,14 +159,29 @@ public:
   // with a quadrangle built on the same 4 nodes.
   // Return false if proper faces not found
 
+  void SplitEdge (const SMDS_MeshNode * theNode1,
+                  const SMDS_MeshNode * theNode2,
+                  double                thePosition);
+  // Replace each triangle bound by theNode1-theNode2 link
+  // with two triangles by connecting a node made on the link with a node opposite to the link.
+
+  void SplitFace (const SMDS_MeshElement * theFace,
+                  double                   theX,
+                  double                   theY,
+                  double                   theZ );
+  // Split a face into triangles each formed by two nodes of the face and a new node added
+  // at the given coordinates.
+
+
   bool Reorient (const SMDS_MeshElement * theElement);
   // Reverse theElement orientation
 
-  int Reorient2D (TIDSortedElemSet &       theFaces,
-                  const gp_Dir&            theDirection,
-                  const SMDS_MeshElement * theFace);
-  // Reverse theFaces whose orientation to be same as that of theFace
-  // oriented according to theDirection. Return nb of reoriented faces
+  int Reorient2D (TIDSortedElemSet &  theFaces,
+                  const gp_Vec&       theDirection,
+                  TIDSortedElemSet &  theRefFaces,
+                  bool                theAllowNonManifold);
+  // Reverse theFaces whose orientation to be same as that of theRefFaces
+  // optionally oriented according to theDirection. Return nb of reoriented faces
 
   int Reorient2DBy3D (TIDSortedElemSet & theFaces,
                       TIDSortedElemSet & theVolumes,
@@ -352,7 +371,7 @@ public:
     bool IsScaleVariation()  const { return myFlags & EXTRUSION_FLAG_SCALE_LINEAR_VARIATION; }
     bool IsAngleVariation()  const { return myFlags & EXTRUSION_FLAG_ANGLE_LINEAR_VARIATION; }
     int  NbSteps()           const {
-      return mySteps.IsNull() ? myPathPoints.size() - 1: mySteps->Length();
+      return mySteps.IsNull() ? (int)myPathPoints.size() - 1: mySteps->Length();
     }
     // stores elements to use for extrusion by normal, depending on
     // state of EXTRUSION_FLAG_USE_INPUT_ELEMS_ONLY flag;
@@ -501,7 +520,7 @@ public:
   // In each group, the cdr of nodes are substituted by the first one
   // in all elements.
 
-  typedef std::list< std::list< int > > TListOfListOfElementsID;
+  typedef std::list< std::list< smIdType > > TListOfListOfElementsID;
 
   void FindEqualElements(TIDSortedElemSet &        theElements,
                          TListOfListOfElementsID & theGroupsOfElementsID);
@@ -729,25 +748,26 @@ public:
                        bool                    toCopyElements = false,
                        bool                    toCopyExistingBondary = false,
                        bool                    toAddExistingBondary = false,
-                       bool                    aroundElements = false);
+                       bool                    aroundElements = false,
+                       bool                    toCreateAllElements= false);
 
  private:
 
   /*!
    * \brief Convert elements contained in a submesh to quadratic
-   * \return int - nb of checked elements
+   * \return smIdType - nb of checked elements
    */
-  int convertElemToQuadratic(SMESHDS_SubMesh *   theSm,
-                             SMESH_MesherHelper& theHelper,
-                             const bool          theForce3d);
+  smIdType convertElemToQuadratic(SMESHDS_SubMesh *   theSm,
+                                  SMESH_MesherHelper& theHelper,
+                                  const bool          theForce3d);
 
   /*!
    * \brief Convert quadratic elements to linear ones and remove quadratic nodes
    * \return nb of checked elements
    */
-  int removeQuadElem( SMESHDS_SubMesh *    theSm,
-                      SMDS_ElemIteratorPtr theItr,
-                      const int            theShapeID);
+  smIdType removeQuadElem( SMESHDS_SubMesh *    theSm,
+                           SMDS_ElemIteratorPtr theItr,
+                           const int            theShapeID);
   /*!
    * \brief Create groups of elements made during transformation
    * \param nodeGens - nodes making corresponding myLastCreatedNodes
diff --git a/src/SMESH/SMESH_MeshLocker.cxx b/src/SMESH/SMESH_MeshLocker.cxx
new file mode 100644 (file)
index 0000000..42ad8c4
--- /dev/null
@@ -0,0 +1,46 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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_MeshLocker.cxx
+//  Author : Yoann AUDOUIN, EDF
+//  Module : SMESH
+//
+
+#include "SMESH_MeshLocker.hxx"
+
+#include "SMESH_Mesh.hxx"
+
+/*
+ * When instanced will run the command Lock from a SMESH_Mesh
+ */
+SMESH_MeshLocker::SMESH_MeshLocker(SMESH_Mesh * aMesh) : _myMesh(aMesh)
+{
+  _myMesh->Lock();
+}
+
+/*
+ * When freed will run the command Unlock from the SMESH_Mesh associated
+ */
+SMESH_MeshLocker::~SMESH_MeshLocker()
+{
+  _myMesh->Unlock();
+}
diff --git a/src/SMESH/SMESH_MeshLocker.hxx b/src/SMESH/SMESH_MeshLocker.hxx
new file mode 100644 (file)
index 0000000..2b5e814
--- /dev/null
@@ -0,0 +1,45 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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_Mesh.hxx
+//  Author : Paul RASCLE, EDF
+//  Module : SMESH
+//
+#ifndef _SMESH_MESHLOCKER_HXX_
+#define _SMESH_MESHLOCKER_HXX_
+#include "SMESH_SMESH.hxx"
+
+class SMESH_Mesh;
+
+class SMESH_EXPORT SMESH_MeshLocker{
+public:
+  SMESH_MeshLocker(SMESH_Mesh * aMesh);
+  ~SMESH_MeshLocker();
+
+protected:
+  SMESH_MeshLocker();
+
+private:
+  SMESH_Mesh * _myMesh=nullptr;
+};
+
+#endif
index ed97f5cc202afc547aa077a25315b56ab80eda44..1be97fb72763ae21a0d01f134bd2799f431425ca 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -28,7 +28,7 @@
 
 #include "SMDS_EdgePosition.hxx"
 #include "SMDS_FaceOfNodes.hxx"
-#include "SMDS_FacePosition.hxx" 
+#include "SMDS_FacePosition.hxx"
 #include "SMDS_IteratorOnIterators.hxx"
 #include "SMDS_VolumeTool.hxx"
 #include "SMESHDS_Mesh.hxx"
@@ -51,6 +51,7 @@
 #include <Geom_RectangularTrimmedSurface.hxx>
 #include <Geom_Surface.hxx>
 #include <ShapeAnalysis.hxx>
+#include <ShapeAnalysis_Curve.hxx>
 #include <TopExp.hxx>
 #include <TopExp_Explorer.hxx>
 #include <TopTools_ListIteratorOfListOfShape.hxx>
@@ -99,7 +100,7 @@ SMESH_MesherHelper::SMESH_MesherHelper(SMESH_Mesh& theMesh)
 
 //=======================================================================
 //function : ~SMESH_MesherHelper
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 SMESH_MesherHelper::~SMESH_MesherHelper()
@@ -424,7 +425,7 @@ bool SMESH_MesherHelper::GetNodeUVneedInFaceNode(const TopoDS_Face& F) const
 
 //=======================================================================
 //function : IsMedium
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 bool SMESH_MesherHelper::IsMedium(const SMDS_MeshNode*      node,
@@ -582,7 +583,7 @@ bool SMESH_MesherHelper::toCheckPosOnShape(int shapeID ) const
 
 void SMESH_MesherHelper::setPosOnShapeValidity(int shapeID, bool ok ) const
 {
-  std::map< int,bool >::iterator sh_ok = 
+  std::map< int,bool >::iterator sh_ok =
     ((SMESH_MesherHelper*)this)->myNodePosShapesValidity.insert( make_pair( shapeID, ok)).first;
   if ( !ok )
     sh_ok->second = ok;
@@ -590,7 +591,7 @@ void SMESH_MesherHelper::setPosOnShapeValidity(int shapeID, bool ok ) const
 
 //=======================================================================
 //function : ToFixNodeParameters
-//purpose  : Enables fixing node parameters on EDGEs and FACEs in 
+//purpose  : Enables fixing node parameters on EDGEs and FACEs in
 //           GetNodeU(...,check=true), GetNodeUV(...,check=true), CheckNodeUV() and
 //           CheckNodeU() in case if a node lies on a shape set via SetSubShape().
 //           Default is False
@@ -658,10 +659,10 @@ gp_XY SMESH_MesherHelper::GetNodeUV(const TopoDS_Face&   F,
     // corresponding EDGE from FACE, get pcurve for this
     // EDGE and retrieve value from this pcurve
     SMDS_EdgePositionPtr epos = pos;
-    const int              edgeID = n->getshapeId();
-    const TopoDS_Edge& E = TopoDS::Edge( GetMeshDS()->IndexToShape( edgeID ));
+    const int          edgeID = n->getshapeId();
+    const TopoDS_Edge&      E = TopoDS::Edge( GetMeshDS()->IndexToShape( edgeID ));
     double f, l, u = epos->GetUParameter();
-    Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface( E, F, f, l );
+    Handle(Geom2d_Curve)  C2d = BRep_Tool::CurveOnSurface( E, F, f, l );
     bool validU = ( !C2d.IsNull() && ( f < u ) && ( u < l ));
     if ( validU ) uv = C2d->Value( u );
     else          uv.SetCoord( Precision::Infinite(),0.);
@@ -769,6 +770,17 @@ gp_XY SMESH_MesherHelper::GetNodeUV(const TopoDS_Face&   F,
         if ( isSeam )
           uv = getUVOnSeam( uv, GetNodeUV( F, n2, 0 ));
       }
+      else if ( myParIndex && n2 )
+      {
+        gp_Pnt2d oldUV = uv;
+        gp_Pnt2d   uv2 = GetNodeUV( F, n2, 0 );
+        if ( myParIndex & 1 )
+          uv.SetX( uv.X() + ShapeAnalysis::AdjustToPeriod( uv.X(), myPar1[0], myPar2[0]));
+        if ( myParIndex & 2 )
+          uv.SetY( uv.Y() + ShapeAnalysis::AdjustToPeriod( uv.Y(), myPar1[1], myPar2[1]));
+        if ( uv.SquareDistance( uv2 ) > oldUV.SquareDistance( uv2 ))
+          uv = oldUV;
+      }
     }
   }
   else
@@ -864,6 +876,51 @@ GeomAPI_ProjectPointOnSurf& SMESH_MesherHelper::GetProjector(const TopoDS_Face&
   return *( i_proj->second );
 }
 
+//=======================================================================
+//function : GetProjector
+//purpose  : Return projector initialized by given face, which is returned
+//=======================================================================
+
+GeomAPI_ProjectPointOnSurf& SMESH_MesherHelper::GetProjector(const TopoDS_Face& F,
+                                                             double             tol ) const
+{
+  Handle(Geom_Surface) surface = BRep_Tool::Surface( F );
+  int faceID = GetMeshDS()->ShapeToIndex( F );
+  TID2ProjectorOnSurf& i2proj = const_cast< TID2ProjectorOnSurf&>( myFace2Projector );
+  TID2ProjectorOnSurf::iterator i_proj = i2proj.find( faceID );
+  if ( i_proj == i2proj.end() )
+  {
+    if ( tol == 0 ) tol = BRep_Tool::Tolerance( F );
+    double U1, U2, V1, V2;
+    surface->Bounds(U1, U2, V1, V2);
+    GeomAPI_ProjectPointOnSurf* proj = new GeomAPI_ProjectPointOnSurf();
+    proj->Init( surface, U1, U2, V1, V2, tol );
+    i_proj = i2proj.insert( make_pair( faceID, proj )).first;
+  }
+  return *( i_proj->second );
+}
+
+//=======================================================================
+//function : GetPCProjector
+//purpose  : Return projector initialized by given EDGE
+//=======================================================================
+
+GeomAPI_ProjectPointOnCurve& SMESH_MesherHelper::GetPCProjector(const TopoDS_Edge& E ) const
+{
+  int edgeID = GetMeshDS()->ShapeToIndex( E );
+  TID2ProjectorOnCurve& i2proj = const_cast< TID2ProjectorOnCurve&>( myEdge2Projector );
+  TID2ProjectorOnCurve::iterator i_proj = i2proj.insert( make_pair( edgeID, nullptr )).first;
+  if ( !i_proj->second  )
+  {
+    double f,l;
+    Handle(Geom_Curve) curve = BRep_Tool::Curve( E,f,l );
+    i_proj->second = new GeomAPI_ProjectPointOnCurve();
+    i_proj->second->Init( curve, f, l );
+  }
+  GeomAPI_ProjectPointOnCurve* projector = i_proj->second;
+  return *projector;
+}
+
 //=======================================================================
 //function : GetSurface
 //purpose  : Return a cached ShapeAnalysis_Surface of a FACE
@@ -886,7 +943,7 @@ namespace
 {
   gp_XY AverageUV(const gp_XY& uv1, const gp_XY& uv2) { return ( uv1 + uv2 ) / 2.; }
   gp_XY_FunPtr(Added); // define gp_XY_Added pointer to function calling gp_XY::Added(gp_XY)
-  gp_XY_FunPtr(Subtracted); 
+  gp_XY_FunPtr(Subtracted);
 }
 
 //=======================================================================
@@ -910,9 +967,9 @@ gp_XY SMESH_MesherHelper::ApplyIn2D(Handle(Geom_Surface) surface,
     return fun(uv1,uv2);
 
   // move uv2 not far than half-period from uv1
-  double u2 = 
+  double u2 =
     uv2.X()+(isUPeriodic ? ShapeAnalysis::AdjustByPeriod(uv2.X(),uv1.X(),surface->UPeriod()) :0);
-  double v2 = 
+  double v2 =
     uv2.Y()+(isVPeriodic ? ShapeAnalysis::AdjustByPeriod(uv2.Y(),uv1.Y(),surface->VPeriod()) :0);
 
   // execute operation
@@ -981,8 +1038,8 @@ gp_XY SMESH_MesherHelper::GetMiddleUV(const Handle(Geom_Surface)& surface,
 //=======================================================================
 
 gp_XY SMESH_MesherHelper::GetCenterUV(const gp_XY& uv1,
-                                      const gp_XY& uv2, 
-                                      const gp_XY& uv3, 
+                                      const gp_XY& uv2,
+                                      const gp_XY& uv3,
                                       const gp_XY& uv12,
                                       const gp_XY& uv23,
                                       const gp_XY& uv31,
@@ -1110,27 +1167,17 @@ bool SMESH_MesherHelper::CheckNodeU(const TopoDS_Edge&   E,
       {
         setPosOnShapeValidity( shapeID, false );
         // u incorrect, project the node to the curve
-        int edgeID = GetMeshDS()->ShapeToIndex( E );
-        TID2ProjectorOnCurve& i2proj = const_cast< TID2ProjectorOnCurve&>( myEdge2Projector );
-        TID2ProjectorOnCurve::iterator i_proj =
-          i2proj.insert( make_pair( edgeID, (GeomAPI_ProjectPointOnCurve*) 0 )).first;
-        if ( !i_proj->second  )
-        {
-          i_proj->second = new GeomAPI_ProjectPointOnCurve();
-          i_proj->second->Init( curve, f, l );
-        }
-        GeomAPI_ProjectPointOnCurve* projector = i_proj->second;
-        projector->Perform( nodePnt );
-        if ( projector->NbPoints() < 1 )
-        {
-          MESSAGE( "SMESH_MesherHelper::CheckNodeU() failed to project" );
-          return false;
-        }
-        Standard_Real U = projector->LowerDistanceParameter();
-        u = double( U );
-        curvPnt = curve->Value( u );
-        dist = nodePnt.Distance( curvPnt );
+        //GeomAPI_ProjectPointOnCurve& projector = GetPCProjector( E ); -- bug in OCCT-7.5.3p1
+        GeomAdaptor_Curve curveAd( curve, f, l );
+        ShapeAnalysis_Curve projector;
+        dist = projector.Project( curveAd, nodePnt, tol, curvPnt, u, false );
+        // if ( projector.NbPoints() < 1 )
+        // {
+        //   MESSAGE( "SMESH_MesherHelper::CheckNodeU() failed to project" );
+        //   return false;
+        // }
         if ( distXYZ ) {
+          curvPnt = curve->Value( u );
           curvPnt.Transform( loc );
           distXYZ[0] = dist;
           distXYZ[1] = curvPnt.X(); distXYZ[2] = curvPnt.Y(); distXYZ[3]=curvPnt.Z();
@@ -1143,7 +1190,7 @@ bool SMESH_MesherHelper::CheckNodeU(const TopoDS_Edge&   E,
         // store the fixed U on the edge
         if ( myShape.IsSame(E) && shapeID == myShapeID && myFixNodeParameters )
           const_cast<SMDS_MeshNode*>(n)->SetPosition
-            ( SMDS_PositionPtr( new SMDS_EdgePosition( U )));
+            ( SMDS_PositionPtr( new SMDS_EdgePosition( u )));
       }
       else if ( fabs( u ) > numeric_limits<double>::min() )
       {
@@ -1323,7 +1370,7 @@ const SMDS_MeshNode* SMESH_MesherHelper::GetCentralNode(const SMDS_MeshNode* n1,
   TBiQuad keyOfMap(n1,n2,n3,n4);
   std::map<TBiQuad, const SMDS_MeshNode* >::iterator itMapCentralNode;
   itMapCentralNode = myMapWithCentralNode.find( keyOfMap );
-  if ( itMapCentralNode != myMapWithCentralNode.end() ) 
+  if ( itMapCentralNode != myMapWithCentralNode.end() )
   {
     return (*itMapCentralNode).second;
   }
@@ -1338,9 +1385,9 @@ const SMDS_MeshNode* SMESH_MesherHelper::GetCentralNode(const SMDS_MeshNode* n1,
 
   std::map< int, int > faceId2nbNodes;
   std::map< int, int > ::iterator itMapWithIdFace;
-  
+
   SMESHDS_Mesh* meshDS = GetMeshDS();
-  
+
   // check if a face lies on a FACE, i.e. its all corner nodes lie either on the FACE or
   // on sub-shapes of the FACE
   if ( GetMesh()->HasShapeToMesh() )
@@ -1498,7 +1545,7 @@ const SMDS_MeshNode* SMESH_MesherHelper::GetCentralNode(const SMDS_MeshNode* n1,
   TBiQuad keyOfMap(n1,n2,n3);
   std::map<TBiQuad, const SMDS_MeshNode* >::iterator itMapCentralNode;
   itMapCentralNode = myMapWithCentralNode.find( keyOfMap );
-  if ( itMapCentralNode != myMapWithCentralNode.end() ) 
+  if ( itMapCentralNode != myMapWithCentralNode.end() )
   {
     return (*itMapCentralNode).second;
   }
@@ -1513,9 +1560,9 @@ const SMDS_MeshNode* SMESH_MesherHelper::GetCentralNode(const SMDS_MeshNode* n1,
 
   std::map< int, int > faceId2nbNodes;
   std::map< int, int > ::iterator itMapWithIdFace;
-  
+
   SMESHDS_Mesh* meshDS = GetMeshDS();
-  
+
   // check if a face lies on a FACE, i.e. its all corner nodes lie either on the FACE or
   // on sub-shapes of the FACE
   if ( GetMesh()->HasShapeToMesh() )
@@ -1924,7 +1971,7 @@ const SMDS_MeshNode* SMESH_MesherHelper::getMediumNodeOnComposedWire(const SMDS_
 //purpose  : Creates a node
 //=======================================================================
 
-SMDS_MeshNode* SMESH_MesherHelper::AddNode(double x, double y, double z, int ID,
+SMDS_MeshNode* SMESH_MesherHelper::AddNode(double x, double y, double z, smIdType ID,
                                            double u, double v)
 {
   SMESHDS_Mesh * meshDS = GetMeshDS();
@@ -1953,11 +2000,11 @@ SMDS_MeshNode* SMESH_MesherHelper::AddNode(double x, double y, double z, int ID,
 
 SMDS_MeshEdge* SMESH_MesherHelper::AddEdge(const SMDS_MeshNode* n1,
                                            const SMDS_MeshNode* n2,
-                                           const int            id,
+                                           const smIdType       id,
                                            const bool           force3d)
 {
   SMESHDS_Mesh * meshDS = GetMeshDS();
-  
+
   SMDS_MeshEdge* edge = 0;
   if (myCreateQuadratic) {
     const SMDS_MeshNode* n12 = GetMediumNode(n1,n2,force3d);
@@ -1987,7 +2034,7 @@ SMDS_MeshEdge* SMESH_MesherHelper::AddEdge(const SMDS_MeshNode* n1,
 SMDS_MeshFace* SMESH_MesherHelper::AddFace(const SMDS_MeshNode* n1,
                                            const SMDS_MeshNode* n2,
                                            const SMDS_MeshNode* n3,
-                                           const int id,
+                                           const smIdType id,
                                            const bool force3d)
 {
   SMESHDS_Mesh * meshDS = GetMeshDS();
@@ -2037,7 +2084,7 @@ SMDS_MeshFace* SMESH_MesherHelper::AddFace(const SMDS_MeshNode* n1,
                                            const SMDS_MeshNode* n2,
                                            const SMDS_MeshNode* n3,
                                            const SMDS_MeshNode* n4,
-                                           const int            id,
+                                           const smIdType       id,
                                            const bool           force3d)
 {
   SMESHDS_Mesh * meshDS = GetMeshDS();
@@ -2101,7 +2148,7 @@ SMDS_MeshFace* SMESH_MesherHelper::AddFace(const SMDS_MeshNode* n1,
 //=======================================================================
 
 SMDS_MeshFace* SMESH_MesherHelper::AddPolygonalFace (const vector<const SMDS_MeshNode*>& nodes,
-                                                     const int                           id,
+                                                     const smIdType                      id,
                                                      const bool                          force3d)
 {
   SMESHDS_Mesh * meshDS = GetMeshDS();
@@ -2147,7 +2194,7 @@ SMDS_MeshVolume* SMESH_MesherHelper::AddVolume(const SMDS_MeshNode* n1,
                                                const SMDS_MeshNode* n4,
                                                const SMDS_MeshNode* n5,
                                                const SMDS_MeshNode* n6,
-                                               const int id,
+                                               const smIdType id,
                                                const bool force3d)
 {
   SMESHDS_Mesh * meshDS = GetMeshDS();
@@ -2210,7 +2257,7 @@ SMDS_MeshVolume* SMESH_MesherHelper::AddVolume(const SMDS_MeshNode* n1,
                                                const SMDS_MeshNode* n2,
                                                const SMDS_MeshNode* n3,
                                                const SMDS_MeshNode* n4,
-                                               const int id,
+                                               const smIdType id,
                                                const bool force3d)
 {
   SMESHDS_Mesh * meshDS = GetMeshDS();
@@ -2251,7 +2298,7 @@ SMDS_MeshVolume* SMESH_MesherHelper::AddVolume(const SMDS_MeshNode* n1,
                                                const SMDS_MeshNode* n3,
                                                const SMDS_MeshNode* n4,
                                                const SMDS_MeshNode* n5,
-                                               const int id,
+                                               const smIdType id,
                                                const bool force3d)
 {
   SMDS_MeshVolume* elem = 0;
@@ -2301,7 +2348,7 @@ SMDS_MeshVolume* SMESH_MesherHelper::AddVolume(const SMDS_MeshNode* n1,
                                                const SMDS_MeshNode* n6,
                                                const SMDS_MeshNode* n7,
                                                const SMDS_MeshNode* n8,
-                                               const int id,
+                                               const smIdType id,
                                                const bool force3d)
 {
   SMESHDS_Mesh * meshDS = GetMeshDS();
@@ -2420,7 +2467,7 @@ SMDS_MeshVolume* SMESH_MesherHelper::AddVolume(const SMDS_MeshNode* n1,
                                                const SMDS_MeshNode* n10,
                                                const SMDS_MeshNode* n11,
                                                const SMDS_MeshNode* n12,
-                                               const int id, 
+                                               const smIdType id,
                                                bool /*force3d*/)
 {
   SMESHDS_Mesh * meshDS = GetMeshDS();
@@ -2442,7 +2489,7 @@ SMDS_MeshVolume* SMESH_MesherHelper::AddVolume(const SMDS_MeshNode* n1,
 SMDS_MeshVolume*
 SMESH_MesherHelper::AddPolyhedralVolume (const std::vector<const SMDS_MeshNode*>& nodes,
                                          const std::vector<int>&                  quantities,
-                                         const int                                id,
+                                         const smIdType                           id,
                                          const bool                               force3d)
 {
   SMESHDS_Mesh * meshDS = GetMeshDS();
@@ -2724,33 +2771,30 @@ bool SMESH_MesherHelper::LoadNodeColumns(TParam2ColumnMap &            theParam2
            theParam2ColumnMap.begin()->second.size() == prevNbRows + expectNbRows );
 }
 
-namespace
+//================================================================================
+/*!
+ * \brief Return true if a node is at a corner of a 2D structured mesh of FACE
+ */
+//================================================================================
+
+bool SMESH_MesherHelper::IsCornerOfStructure( const SMDS_MeshNode*   n,
+                                              const SMESHDS_SubMesh* faceSM,
+                                              SMESH_MesherHelper&    faceAnalyser )
 {
-  //================================================================================
-  /*!
-   * \brief Return true if a node is at a corner of a 2D structured mesh of FACE
-   */
-  //================================================================================
+  int nbFacesInSM = 0;
+  if ( n ) {
+    SMDS_ElemIteratorPtr fIt = n->GetInverseElementIterator( SMDSAbs_Face );
+    while ( fIt->more() )
+      nbFacesInSM += faceSM->Contains( fIt->next() );
+  }
+  if ( nbFacesInSM == 1 )
+    return true;
 
-  bool isCornerOfStructure( const SMDS_MeshNode*   n,
-                            const SMESHDS_SubMesh* faceSM,
-                            SMESH_MesherHelper&    faceAnalyser )
+  if ( nbFacesInSM == 2 && n->GetPosition()->GetTypeOfPosition() == SMDS_TOP_VERTEX )
   {
-    int nbFacesInSM = 0;
-    if ( n ) {
-      SMDS_ElemIteratorPtr fIt = n->GetInverseElementIterator( SMDSAbs_Face );
-      while ( fIt->more() )
-        nbFacesInSM += faceSM->Contains( fIt->next() );
-    }
-    if ( nbFacesInSM == 1 )
-      return true;
-
-    if ( nbFacesInSM == 2 && n->GetPosition()->GetTypeOfPosition() == SMDS_TOP_VERTEX )
-    {
-      return faceAnalyser.IsRealSeam( n->getshapeId() );
-    }
-    return false;
+    return faceAnalyser.IsRealSeam( n->getshapeId() );
   }
+  return false;
 }
 
 //=======================================================================
@@ -2785,7 +2829,7 @@ bool SMESH_MesherHelper::IsStructured( SMESH_subMesh* faceSM )
   int nbRemainEdges = nbEdgesInWires.front();
   do {
     TopoDS_Vertex V = IthVertex( 0, edges.front() );
-    isCorner = isCornerOfStructure( SMESH_Algo::VertexNode( V, meshDS ),
+    isCorner = IsCornerOfStructure( SMESH_Algo::VertexNode( V, meshDS ),
                                     fSM, faceAnalyser);
     if ( !isCorner ) {
       edges.splice( edges.end(), edges, edges.begin() );
@@ -2826,7 +2870,7 @@ bool SMESH_MesherHelper::IsStructured( SMESH_subMesh* faceSM )
   for ( ; n != nodes.end(); ++n )
   {
     ++nbEdges;
-    if ( isCornerOfStructure( *n, fSM, faceAnalyser )) {
+    if ( IsCornerOfStructure( *n, fSM, faceAnalyser )) {
       nbEdgesInSide.push_back( nbEdges );
       nbEdges = 0;
     }
@@ -3162,7 +3206,7 @@ bool SMESH_MesherHelper::IsSubShape( const TopoDS_Shape& shape,
 
 //=======================================================================
 //function : IsSubShape
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 bool SMESH_MesherHelper::IsSubShape( const TopoDS_Shape& shape, SMESH_Mesh* aMesh )
@@ -3177,7 +3221,7 @@ bool SMESH_MesherHelper::IsSubShape( const TopoDS_Shape& shape, SMESH_Mesh* aMes
 
 //=======================================================================
 //function : IsBlock
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 bool SMESH_MesherHelper::IsBlock( const TopoDS_Shape& shape )
@@ -3279,9 +3323,7 @@ double SMESH_MesherHelper::GetAngle( const TopoDS_Edge &   theE1,
       vecRef = du ^ dv;
       if ( ++nbLoops > 10 )
       {
-#ifdef _DEBUG_
-        cout << "SMESH_MesherHelper::GetAngle(): Captured in a sigularity" << endl;
-#endif
+        MESSAGE("SMESH_MesherHelper::GetAngle(): Captured in a singularity");
         return angle;
       }
     }
@@ -3360,7 +3402,7 @@ TopoDS_Vertex SMESH_MesherHelper::IthVertex( const bool  is2nd,
 
 //================================================================================
 /*!
- * \brief Return type of shape contained in a group 
+ * \brief Return type of shape contained in a group
  *  \param group - a shape of type TopAbs_COMPOUND
  *  \param avoidCompound - not to return TopAbs_COMPOUND
  */
@@ -3413,20 +3455,20 @@ TopoDS_Shape SMESH_MesherHelper::GetShapeOfHypothesis( const SMESHDS_Hypothesis
 
 SMESH_MesherHelper:: MType SMESH_MesherHelper::IsQuadraticMesh()
 {
-  int NbAllEdgsAndFaces=0;
-  int NbQuadFacesAndEdgs=0;
-  int NbFacesAndEdges=0;
+  smIdType NbAllEdgsAndFaces=0;
+  smIdType NbQuadFacesAndEdgs=0;
+  smIdType NbFacesAndEdges=0;
   //All faces and edges
   NbAllEdgsAndFaces = myMesh->NbEdges() + myMesh->NbFaces();
   if ( NbAllEdgsAndFaces == 0 )
     return SMESH_MesherHelper::LINEAR;
-  
+
   //Quadratic faces and edges
   NbQuadFacesAndEdgs = myMesh->NbEdges(ORDER_QUADRATIC) + myMesh->NbFaces(ORDER_QUADRATIC);
 
   //Linear faces and edges
   NbFacesAndEdges = myMesh->NbEdges(ORDER_LINEAR) + myMesh->NbFaces(ORDER_LINEAR);
-  
+
   if (NbAllEdgsAndFaces == NbQuadFacesAndEdgs) {
     //Quadratic mesh
     return SMESH_MesherHelper::QUADRATIC;
@@ -3701,9 +3743,7 @@ namespace { // Structures used by FixQuadraticElements()
     mutable vector< const QLink* >  _sides;
     mutable bool                    _sideIsAdded[4]; // added in chain of links
     gp_Vec                          _normal;
-#ifdef _DEBUG_
     mutable const SMDS_MeshElement* _face;
-#endif
 
     QFace( const vector< const QLink*>& links, const SMDS_MeshElement* face=0 );
 
@@ -3817,11 +3857,8 @@ namespace { // Structures used by FixQuadraticElements()
     else
       _normal.SetCoord(1e-33,0,0);
 
-#ifdef _DEBUG_
-    _face = face;
-#else
-    (void)face; // unused in release mode
-#endif
+    if (SALOME::VerbosityActivated())
+      _face = face;
   }
   //================================================================================
   /*!
@@ -4076,7 +4113,7 @@ namespace { // Structures used by FixQuadraticElements()
       }
     }
     else if ( _sides.size() < 4 )
-      return thePrevLen;      
+      return thePrevLen;
 
     // propagate to adjacent faces till limit step or boundary
     double len1 = thePrevLen + (theLink->MiddlePnt() - _sides[iL1]->MiddlePnt()).Modulus();
@@ -4166,7 +4203,7 @@ namespace { // Structures used by FixQuadraticElements()
   void QLink::SetContinuesFaces() const
   {
     //       x0         x - QLink, [-|] - QFace, v - volume
-    //   v0  |   v1   
+    //   v0  |   v1
     //       |          Between _faces of link x2 two vertical faces are continues
     // x1----x2-----x3  and two horizontal faces are continues. We set vertical faces
     //       |          to _faces[0] and _faces[1] and horizontal faces to
@@ -4273,7 +4310,7 @@ namespace { // Structures used by FixQuadraticElements()
     }
     return isStraight;
   }
-  
+
   //================================================================================
   /*!
    * \brief Move medium nodes of vertical links of pentahedrons adjacent by side faces
@@ -4402,13 +4439,13 @@ namespace { // Structures used by FixQuadraticElements()
     while ( startLink != linksEnd) // loop on columns
     {
       // We suppose we have a rectangular structure like shown here. We have found a
-      //               corner of the rectangle (startCorner) and a boundary link sharing  
-      //    |/  |/  |  the startCorner (startLink). We are going to loop on rows of the   
-      //  --o---o---o  structure making several chains at once. One chain (columnChain)   
-      //    |\  |  /|  starts at startLink and continues upward (we look at the structure 
-      //  \ | \ | / |  from such point that startLink is on the bottom of the structure). 
-      //   \|  \|/  |  While going upward we also fill horizontal chains (rowChains) we   
-      //  --o---o---o  encounter.                                                         
+      //               corner of the rectangle (startCorner) and a boundary link sharing
+      //    |/  |/  |  the startCorner (startLink). We are going to loop on rows of the
+      //  --o---o---o  structure making several chains at once. One chain (columnChain)
+      //    |\  |  /|  starts at startLink and continues upward (we look at the structure
+      //  \ | \ | / |  from such point that startLink is on the bottom of the structure).
+      //   \|  \|/  |  While going upward we also fill horizontal chains (rowChains) we
+      //  --o---o---o  encounter.
       //   /|\  |\  |
       //  / | \ | \ |  startCorner
       //    |  \|  \|,'
@@ -4671,7 +4708,7 @@ namespace { // Structures used by FixQuadraticElements()
                 continue;
               gp_XYZ edgeDir  = SMESH_TNodeXYZ( nOnEdge[0] ) - SMESH_TNodeXYZ( nOnEdge[1] );
               gp_XYZ edgeNorm = faceNorm ^ edgeDir;
-              n = theHelper.GetMediumNode( nOnEdge[0], nOnEdge[1], true ); // find n, not create 
+              n = theHelper.GetMediumNode( nOnEdge[0], nOnEdge[1], true ); // find n, not create
               gp_XYZ pN0     = SMESH_TNodeXYZ( nOnEdge[0] );
               gp_XYZ pMedium = SMESH_TNodeXYZ( n );                   // on-edge node location
               gp_XYZ pFaceN  = SMESH_TNodeXYZ( nOnFace );             // on-face node location
@@ -4919,12 +4956,11 @@ void SMESH_MesherHelper::FixQuadraticElements(SMESH_ComputeErrorPtr& compError,
     if ( !myMesh->HasShapeToMesh() ) return;
     SetSubShape( myMesh->GetShapeToMesh() );
 
-#ifdef _DEBUG_
     int nbSolids = 0;
     TopTools_IndexedMapOfShape solids;
     TopExp::MapShapes(myShape,TopAbs_SOLID,solids);
     nbSolids = solids.Extent();
-#endif
+
     TopTools_MapOfShape faces; // faces not in solid or in not meshed solid
     for ( TopExp_Explorer f(myShape,TopAbs_FACE,TopAbs_SOLID); f.More(); f.Next() ) {
       faces.Add( f.Current() ); // not in solid
@@ -4935,27 +4971,39 @@ void SMESH_MesherHelper::FixQuadraticElements(SMESH_ComputeErrorPtr& compError,
           faces.Add( f.Current() ); // in not meshed solid
       }
       else { // fix nodes in the solid and its faces
-#ifdef _DEBUG_
         MSG("FIX SOLID " << nbSolids-- << " #" << GetMeshDS()->ShapeToIndex(s.Current()));
-#endif
+
         SMESH_MesherHelper h(*myMesh);
         h.SetSubShape( s.Current() );
         h.ToFixNodeParameters(true);
-        h.FixQuadraticElements( compError, false );
+        try {
+          OCC_CATCH_SIGNALS;
+          h.FixQuadraticElements( compError, false );
+        }
+        catch(...) {
+          if ( compError && compError->myComment.empty() )
+            compError->myComment = "SMESH_MesherHelper::FixQuadraticElements() failed";
+        }
       }
     }
     // fix nodes on geom faces
-#ifdef _DEBUG_
-    int nbfaces = nbSolids;
-    nbfaces = faces.Extent(); /*avoid "unused varianbles": */ nbfaces++, nbfaces--; 
-#endif
+
+    int nbfaces = faces.Extent();
+
     for ( TopTools_MapIteratorOfMapOfShape fIt( faces ); fIt.More(); fIt.Next() ) {
       MESSAGE("FIX FACE " << nbfaces-- << " #" << GetMeshDS()->ShapeToIndex(fIt.Key()));
       MSG("FIX FACE " << nbfaces-- << " #" << GetMeshDS()->ShapeToIndex(fIt.Key()));
       SMESH_MesherHelper h(*myMesh);
       h.SetSubShape( fIt.Key() );
       h.ToFixNodeParameters(true);
-      h.FixQuadraticElements( compError, true);
+      try {
+        OCC_CATCH_SIGNALS;
+        h.FixQuadraticElements( compError, true);
+      }
+      catch(...) {
+        if ( compError && compError->myComment.empty() )
+          compError->myComment = "SMESH_MesherHelper::FixQuadraticElements() failed";
+      }
     }
     //perf_print_all_meters(1);
     if ( compError && compError->myName == EDITERR_NO_MEDIUM_ON_GEOM )
@@ -5044,13 +5092,15 @@ void SMESH_MesherHelper::FixQuadraticElements(SMESH_ComputeErrorPtr& compError,
 //         hasRectFaces = hasRectFaces ||
 //           ( volTool.GetVolumeType() == SMDS_VolumeTool::QUAD_HEXA ||
 //             volTool.GetVolumeType() == SMDS_VolumeTool::QUAD_PENTA );
-#ifdef _DEBUG_
-        if ( nbN == 6 )
-          pFace->_face = GetMeshDS()->FindFace(faceNodes[0],faceNodes[2],faceNodes[4]);
-        else
-          pFace->_face = GetMeshDS()->FindFace(faceNodes[0],faceNodes[2],
-                                               faceNodes[4],faceNodes[6] );
-#endif
+
+        if (SALOME::VerbosityActivated())
+        {
+          if ( nbN == 6 )
+            pFace->_face = GetMeshDS()->FindFace(faceNodes[0],faceNodes[2],faceNodes[4]);
+          else
+            pFace->_face = GetMeshDS()->FindFace(faceNodes[0],faceNodes[2],
+                                                faceNodes[4],faceNodes[6] );
+        }
       }
       // collect pyramid apexes for further correction
       if ( vol->NbCornerNodes() == 5 )
@@ -5163,8 +5213,10 @@ void SMESH_MesherHelper::FixQuadraticElements(SMESH_ComputeErrorPtr& compError,
             while ( len < numeric_limits<double>::min() ) { // remove degenerated link
               if ( savedChain.empty() ) savedChain = chain;
               link1 = chain.erase( link1 );
-              if ( link1 == chain.end() )
+              if ( link1 == chain.end() ) {
+                link1 = --chain.end();
                 break;
+              }
               len = ((*link0)->MiddlePnt() - (*link1)->MiddlePnt()).Modulus();
             }
             chainLen += len;
@@ -5181,6 +5233,9 @@ void SMESH_MesherHelper::FixQuadraticElements(SMESH_ComputeErrorPtr& compError,
               linkPos.push_back( chainLen );
             }
           }
+          if ( chain.begin() == --chain.end() ) // chain.size() == 1
+            continue;
+
           gp_Vec move0 = chain.front()->_nodeMove;
           gp_Vec move1 = chain.back ()->_nodeMove;
 
@@ -5277,20 +5332,22 @@ void SMESH_MesherHelper::FixQuadraticElements(SMESH_ComputeErrorPtr& compError,
               move = gp_Vec( XYZ((*link1)->_mediumNode), newPnt.Transformed(loc) );
               if ( SMDS_FacePositionPtr nPos = (*link1)->_mediumNode->GetPosition())
                 nPos->SetParameters( newUV.X(), newUV.Y() );
-#ifdef _DEBUG_
-              if ( (XYZ((*link1)->node1()) - XYZ((*link1)->node2())).SquareModulus() <
-                   move.SquareMagnitude())
+
+              if (SALOME::VerbosityActivated())
               {
-                gp_XY uv0 = faceHlp.GetNodeUV( face, (*link0)->_mediumNode, 0, &checkUV );
-                gp_XY uv2 = faceHlp.GetNodeUV( face, (*link2)->_mediumNode, 0, &checkUV );
-                MSG( "TOO LONG MOVE \t" <<
-                     "uv0: "<<uv0.X()<<", "<<uv0.Y()<<" \t" <<
-                     "uv2: "<<uv2.X()<<", "<<uv2.Y()<<" \t" <<
-                     "uvOld: "<<oldUV.X()<<", "<<oldUV.Y()<<" \t" <<
-                     "newUV: "<<newUV.X()<<", "<<newUV.Y()<<" \t");
-                uv0.SetX( uv2.X() ); // avoid warning: variable set but not used
+                if ( (XYZ((*link1)->node1()) - XYZ((*link1)->node2())).SquareModulus() <
+                    move.SquareMagnitude())
+                {
+                  gp_XY uv0 = faceHlp.GetNodeUV( face, (*link0)->_mediumNode, 0, &checkUV );
+                  gp_XY uv2 = faceHlp.GetNodeUV( face, (*link2)->_mediumNode, 0, &checkUV );
+                  MSG( "TOO LONG MOVE \t" <<
+                      "uv0: "<<uv0.X()<<", "<<uv0.Y()<<" \t" <<
+                      "uv2: "<<uv2.X()<<", "<<uv2.Y()<<" \t" <<
+                      "uvOld: "<<oldUV.X()<<", "<<oldUV.Y()<<" \t" <<
+                      "newUV: "<<newUV.X()<<", "<<newUV.Y()<<" \t");
+                  uv0.SetX( uv2.X() ); // avoid warning: variable set but not used
+                }
               }
-#endif
               (*link1)->Move( move, /*sum=*/false, /*is2dFixed=*/true );
             }
             MSG( "Move " << (*link1)->_mediumNode->GetID() << " following "
@@ -5377,7 +5434,7 @@ void SMESH_MesherHelper::FixQuadraticElements(SMESH_ComputeErrorPtr& compError,
       {
         uv[ i ] = GetNodeUV( F, nodes[i], nodes[8], &checkUV );
         // as this method is used after mesh generation, UV of nodes is not
-        // updated according to bending links, so we update 
+        // updated according to bending links, so we update
         if ( i > 3 && nodes[i]->GetPosition()->GetTypeOfPosition() == SMDS_TOP_FACE )
           CheckNodeUV( F, nodes[i], uv[ i ], 2*tol, /*force=*/true );
       }
@@ -5412,7 +5469,7 @@ void SMESH_MesherHelper::FixQuadraticElements(SMESH_ComputeErrorPtr& compError,
       {
         uv[ i ] = GetNodeUV( F, nodes[i], nodes[(i+1)%3], &uvOK );
         // as this method is used after mesh generation, UV of nodes is not
-        // updated according to bending links, so we update 
+        // updated according to bending links, so we update
         if ( nodes[i]->GetPosition()->GetTypeOfPosition() == SMDS_TOP_FACE )
           CheckNodeUV( F, nodes[i], uv[ i ], 2*tol, /*force=*/true );
       }
@@ -5479,16 +5536,16 @@ void SMESH_MesherHelper::FixQuadraticElements(SMESH_ComputeErrorPtr& compError,
       pointsOnShapes[ SMESH_Block::ID_Ex11 ] = SMESH_TNodeXYZ( hexNodes[ 13 ] );
       pointsOnShapes[ SMESH_Block::ID_E0y1 ] = SMESH_TNodeXYZ( hexNodes[ 12 ] );
       pointsOnShapes[ SMESH_Block::ID_E1y1 ] = SMESH_TNodeXYZ( hexNodes[ 14 ] );
-      pointsOnShapes[ SMESH_Block::ID_E00z ] = SMESH_TNodeXYZ( hexNodes[ 16 ] );    
-      pointsOnShapes[ SMESH_Block::ID_E10z ] = SMESH_TNodeXYZ( hexNodes[ 19 ] );    
-      pointsOnShapes[ SMESH_Block::ID_E01z ] = SMESH_TNodeXYZ( hexNodes[ 17 ] );    
+      pointsOnShapes[ SMESH_Block::ID_E00z ] = SMESH_TNodeXYZ( hexNodes[ 16 ] );
+      pointsOnShapes[ SMESH_Block::ID_E10z ] = SMESH_TNodeXYZ( hexNodes[ 19 ] );
+      pointsOnShapes[ SMESH_Block::ID_E01z ] = SMESH_TNodeXYZ( hexNodes[ 17 ] );
       pointsOnShapes[ SMESH_Block::ID_E11z ] = SMESH_TNodeXYZ( hexNodes[ 18 ] );
 
       pointsOnShapes[ SMESH_Block::ID_Fxy0 ] = SMESH_TNodeXYZ( hexNodes[ 20 ] );
       pointsOnShapes[ SMESH_Block::ID_Fxy1 ] = SMESH_TNodeXYZ( hexNodes[ 25 ] );
-      pointsOnShapes[ SMESH_Block::ID_Fx0z ] = SMESH_TNodeXYZ( hexNodes[ 21 ] );   
-      pointsOnShapes[ SMESH_Block::ID_Fx1z ] = SMESH_TNodeXYZ( hexNodes[ 23 ] );   
-      pointsOnShapes[ SMESH_Block::ID_F0yz ] = SMESH_TNodeXYZ( hexNodes[ 24 ] );    
+      pointsOnShapes[ SMESH_Block::ID_Fx0z ] = SMESH_TNodeXYZ( hexNodes[ 21 ] );
+      pointsOnShapes[ SMESH_Block::ID_Fx1z ] = SMESH_TNodeXYZ( hexNodes[ 23 ] );
+      pointsOnShapes[ SMESH_Block::ID_F0yz ] = SMESH_TNodeXYZ( hexNodes[ 24 ] );
       pointsOnShapes[ SMESH_Block::ID_F1yz ] = SMESH_TNodeXYZ( hexNodes[ 22 ] );
 
       gp_XYZ nCenterParams(0.5, 0.5, 0.5), nCenterCoords;
@@ -5525,8 +5582,6 @@ void SMESH_MesherHelper::WriteShape(const TopoDS_Shape& s)
 {
   const char* name = "/tmp/shape.brep";
   BRepTools::Write( s, name );
-#ifdef _DEBUG_
-  std::cout << name << std::endl;
-#endif
+  MESSAGE(name);
 }
 
index b95092a685c3b080599cec2e995b8425edb194d8..1dc0594f5064b2ed09f14b40c3a799685859d2d1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -100,7 +100,7 @@ class SMESH_EXPORT SMESH_MesherHelper
    * \brief Load nodes bound to face into a map of node columns
     * \param theParam2ColumnMap - map of node columns to fill
     * \param theFace - the face on which nodes are searched for
-    * \param theBaseSide - the edges holding nodes on which columns' bases
+    * \param theBaseSide - the edges holding nodes on which columns base
     * \param theMesh - the mesh containing nodes
     * \retval bool - false if something is wrong
    * 
@@ -127,6 +127,13 @@ class SMESH_EXPORT SMESH_MesherHelper
    */
   static bool IsStructured( SMESH_subMesh* faceSM );
 
+  /*!
+   * \brief Return true if a node is at a corner of a 2D structured mesh of FACE
+   */
+  static bool IsCornerOfStructure( const SMDS_MeshNode*   n,
+                                   const SMESHDS_SubMesh* faceSM,
+                                   SMESH_MesherHelper&    faceAnalyser );
+
   /*!
    * \brief Return true if 2D mesh on FACE is distored
    */
@@ -343,13 +350,13 @@ public:
   /*!
    * Creates a node (!Note ID before u=0.,v0.)
    */
-  SMDS_MeshNode* AddNode(double x, double y, double z, int ID = 0, double u=0., double v=0.);
+  SMDS_MeshNode* AddNode(double x, double y, double z, smIdType ID = 0, double u=0., double v=0.);
   /*!
    * Creates quadratic or linear edge
    */
   SMDS_MeshEdge* AddEdge(const SMDS_MeshNode* n1,
                          const SMDS_MeshNode* n2,
-                         const int id = 0, 
+                         const smIdType id = 0, 
                          const bool force3d = true);
   /*!
    * Creates quadratic or linear triangle
@@ -357,7 +364,7 @@ public:
   SMDS_MeshFace* AddFace(const SMDS_MeshNode* n1,
                          const SMDS_MeshNode* n2,
                          const SMDS_MeshNode* n3,
-                         const int id=0, 
+                         const smIdType id=0, 
                          const bool force3d = false);
   /*!
    * Creates bi-quadratic, quadratic or linear quadrangle
@@ -366,13 +373,13 @@ public:
                          const SMDS_MeshNode* n2,
                          const SMDS_MeshNode* n3,
                          const SMDS_MeshNode* n4,
-                         const int id = 0,
+                         const smIdType id = 0,
                          const bool force3d = false);
   /*!
    * Creates polygon, with additional nodes in quadratic mesh
    */
   SMDS_MeshFace* AddPolygonalFace (const std::vector<const SMDS_MeshNode*>& nodes,
-                                   const int id = 0,
+                                   const smIdType id = 0,
                                    const bool force3d = false);
   /*!
    * Creates quadratic or linear tetrahedron
@@ -381,7 +388,7 @@ public:
                              const SMDS_MeshNode* n2,
                              const SMDS_MeshNode* n3,
                              const SMDS_MeshNode* n4,
-                             const int id = 0,
+                             const smIdType id = 0,
                              const bool force3d = true);
   /*!
    * Creates quadratic or linear pyramid
@@ -391,7 +398,7 @@ public:
                              const SMDS_MeshNode* n3,
                              const SMDS_MeshNode* n4,
                              const SMDS_MeshNode* n5,
-                             const int id = 0,
+                             const smIdType id = 0,
                              const bool force3d = true);
   /*!
    * Creates quadratic or linear pentahedron
@@ -402,7 +409,7 @@ public:
                              const SMDS_MeshNode* n4,
                              const SMDS_MeshNode* n5,
                              const SMDS_MeshNode* n6,
-                             const int id = 0, 
+                             const smIdType id = 0, 
                              const bool force3d = true);
   /*!
    * Creates bi-quadratic, quadratic or linear hexahedron
@@ -415,7 +422,7 @@ public:
                              const SMDS_MeshNode* n6,
                              const SMDS_MeshNode* n7,
                              const SMDS_MeshNode* n8,
-                             const int id = 0, 
+                             const smIdType id = 0, 
                              bool force3d = true);
 
   /*!
@@ -433,7 +440,7 @@ public:
                              const SMDS_MeshNode* n10,
                              const SMDS_MeshNode* n11,
                              const SMDS_MeshNode* n12,
-                             const int id = 0, 
+                             const smIdType id = 0, 
                              bool force3d = true);
 
   /*!
@@ -441,7 +448,7 @@ public:
    */
   SMDS_MeshVolume* AddPolyhedralVolume (const std::vector<const SMDS_MeshNode*>& nodes,
                                         const std::vector<int>&                  quantities,
-                                        const int                                ID=0,
+                                        const smIdType                           ID=0,
                                         const bool                               force3d = true);
   /*!
    * \brief Enables fixing node parameters on EDGEs and FACEs by
@@ -547,11 +554,20 @@ public:
   bool GetNodeUVneedInFaceNode(const TopoDS_Face& F = TopoDS_Face()) const;
 
   /*!
-   * \brief Return projector initialized by given face without location, which is returned
+   * \brief Return projector initialized by given face without location
    */
   GeomAPI_ProjectPointOnSurf& GetProjector(const TopoDS_Face& F,
                                            TopLoc_Location&   loc,
-                                           double             tol=0 ) const; 
+                                           double             tol=0 ) const;
+  /*!
+   * \brief Return projector initialized by given face
+   */
+  GeomAPI_ProjectPointOnSurf& GetProjector(const TopoDS_Face& F,
+                                           double             tol=0 ) const;
+  /*!
+   * \brief Return projector initialized by given EDGE
+   */
+  GeomAPI_ProjectPointOnCurve& GetPCProjector(const TopoDS_Edge& E ) const;
   /*!
    * \brief Return a cached ShapeAnalysis_Surface of a FACE
    */
@@ -753,7 +769,7 @@ public:
   SMESH_MesherHelper (const SMESH_MesherHelper& theOther);
 
   // key of a map of bi-quadratic face to it's central node
-  struct TBiQuad: public std::pair<int, std::pair<int, int> >
+  struct TBiQuad: public std::pair<smIdType, std::pair<smIdType, smIdType> >
   {
     TBiQuad(const SMDS_MeshNode* n1,
             const SMDS_MeshNode* n2, 
diff --git a/src/SMESH/SMESH_ParallelMesh.cxx b/src/SMESH/SMESH_ParallelMesh.cxx
new file mode 100644 (file)
index 0000000..9d61f6b
--- /dev/null
@@ -0,0 +1,202 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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_ParallelMesh.cxx
+//  Author : Yoann AUDOUIN, EDF
+//  Module : SMESH
+//
+#include "SMESH_ParallelMesh.hxx"
+
+#include "SMESH_Gen.hxx"
+
+#ifdef WIN32
+  #include <windows.h>
+#endif
+
+#include <boost/filesystem.hpp>
+namespace fs=boost::filesystem;
+
+#ifndef WIN32
+#include <boost/asio.hpp>
+#endif
+
+#include <utilities.h>
+
+SMESH_ParallelMesh::SMESH_ParallelMesh(int               theLocalId,
+                       SMESH_Gen*        theGen,
+                       bool              theIsEmbeddedMode,
+                       SMESHDS_Document* theDocument) :SMESH_Mesh(theLocalId,
+                                                                  theGen,
+                                                                  theIsEmbeddedMode,
+                                                                  theDocument)
+{
+  MESSAGE("SMESH_ParallelMesh::SMESH_ParallelMesh(int localId)");
+  CreateTmpFolder();
+};
+
+SMESH_ParallelMesh::~SMESH_ParallelMesh()
+{
+  cleanup();
+};
+
+void SMESH_ParallelMesh::cleanup()
+{
+  DeletePoolThreads();
+  if(!keepingTmpFolfer())
+  {
+    MESSAGE("Set SMESH_KEEP_TMP to > 0 to keep temporary folders")
+    DeleteTmpFolder();
+  }
+};
+
+//=============================================================================
+/*!
+ * \brief Checking if we should keep the temporary folder
+ *        They are kept if the variable SMESH_KEEP_TMP is set to higher than 0
+ */
+//=============================================================================
+bool SMESH_ParallelMesh::keepingTmpFolfer()
+{
+  const char* envVar = std::getenv("SMESH_KEEP_TMP");
+
+  if (envVar && (envVar[0] != '\0'))
+  {
+    try
+    {
+      const long long numValue = std::stoll(envVar);
+      return numValue > 0;
+    }
+    catch(const std::exception& e)
+    {
+      std::cerr << e.what() << '\n';
+    }
+  }
+
+  return false;
+};
+
+
+//=============================================================================
+/*!
+ * \brief Build folder for parallel computation
+ */
+//=============================================================================
+void SMESH_ParallelMesh::CreateTmpFolder()
+{
+  // Temporary folder that will be used by parallel computation
+  tmp_folder = fs::temp_directory_path()/fs::unique_path(fs::path("SMESH_%%%%-%%%%"));
+  fs::create_directories(tmp_folder);
+}
+//
+//=============================================================================
+/*!
+ * \brief Delete temporary folder used for parallel computation
+ */
+//=============================================================================
+void SMESH_ParallelMesh::DeleteTmpFolder()
+{
+    MESSAGE("Deleting temporary folder" << tmp_folder.string());
+    fs::remove_all(tmp_folder);
+}
+
+//=============================================================================
+/*!
+ * \brief Get the number of Threads to be used for the pool of Threads
+ */
+//=============================================================================
+int SMESH_ParallelMesh::GetPoolNbThreads()
+{
+  int nbThreads = -1;
+
+  if(_method == ParallelismMethod::MultiThread){
+    nbThreads = _NbThreads;
+  }else if( _method == ParallelismMethod::MultiNode){
+    //TODO: Check of that is the right way
+    nbThreads = std::max(_nbProc, _nbNode*_nbProcPerNode);
+  } else {
+    throw SALOME_Exception("Unknown method "+std::to_string(_method));
+  }
+
+  return nbThreads;
+}
+
+//=============================================================================
+/*!
+ * \brief Set Number of thread for multithread run
+ */
+//=============================================================================
+void SMESH_ParallelMesh::SetNbThreads(long nbThreads)
+{
+  if(nbThreads < 1)
+    throw SALOME_Exception("Number of threads should be higher than 1");
+  _NbThreads=nbThreads;
+};
+
+//=============================================================================
+/*!
+ * \brief Get the element associated to the dimension of the parallelism
+ */
+//=============================================================================
+int SMESH_ParallelMesh::GetParallelElement()
+{
+  if (_paraDim==2){
+    return TopAbs_FACE;
+  }else{
+    return TopAbs_SOLID;
+  }
+};
+
+//=============================================================================
+/*!
+ * \brief Get the element associated to the dimension of the parallelism
+ */
+//=============================================================================
+int SMESH_ParallelMesh::GetDumpElement()
+{
+  if (_paraDim==2){
+    return TopAbs_EDGE;
+  }else{
+    return TopAbs_FACE;
+  }
+};
+
+bool SMESH_ParallelMesh::ComputeSubMeshes(
+          SMESH_Gen* gen,
+          SMESH_Mesh & aMesh,
+          const TopoDS_Shape & aShape,
+          const ::MeshDimension       aDim,
+          TSetOfInt*                  aShapesId /*=0*/,
+          TopTools_IndexedMapOfShape* allowedSubShapes,
+          SMESH_subMesh::compute_event &computeEvent,
+          const bool includeSelf,
+          const bool complexShapeFirst,
+          const bool   aShapeOnly)
+{
+  InitPoolThreads();
+  return gen->parallelComputeSubMeshes(
+            aMesh, aShape, aDim,
+            aShapesId, allowedSubShapes,
+            computeEvent,
+            includeSelf,
+            complexShapeFirst,
+            aShapeOnly);
+}
diff --git a/src/SMESH/SMESH_ParallelMesh.hxx b/src/SMESH/SMESH_ParallelMesh.hxx
new file mode 100644 (file)
index 0000000..7a91d5b
--- /dev/null
@@ -0,0 +1,153 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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_ParallelMesh.hxx
+//  Author : Yoann AUDOUIN, EDF
+//  Module : SMESH
+//
+#ifndef _SMESH_PARALLELMESH_HXX_
+#define _SMESH_PARALLELMESH_HXX_
+
+#include "SMESH_Mesh.hxx"
+
+#ifndef WIN32
+#include <boost/asio.hpp>
+#endif
+
+#include "SMESH_Gen.hxx"
+#include "SMESH_subMesh.hxx"
+#ifdef WIN32
+#include <thread>
+#include <boost/filesystem.hpp>
+#endif
+enum ParallelismMethod {MultiThread, MultiNode};
+
+class SMESH_EXPORT SMESH_ParallelMesh: public SMESH_Mesh
+{
+ public:
+  SMESH_ParallelMesh(int               theLocalId,
+                       SMESH_Gen*        theGen,
+                       bool              theIsEmbeddedMode,
+                       SMESHDS_Document* theDocument);
+
+  ~SMESH_ParallelMesh();
+
+  // Locking mechanism
+  #ifndef WIN32
+  void Lock() override {_my_lock.lock();};
+  void Unlock() override {_my_lock.unlock();};
+  // We need to recreate the pool afterthe join
+  void wait() override {_pool->join(); DeletePoolThreads(); InitPoolThreads(); };
+  #endif
+
+  // Thread Pool
+#ifndef WIN32
+  void InitPoolThreads() {_pool = new boost::asio::thread_pool(GetPoolNbThreads());};
+  boost::asio::thread_pool* GetPool() {return _pool;};
+  void DeletePoolThreads() {delete _pool;};
+#else
+  void InitPoolThreads() {};
+  void* GetPool() {return NULL;};
+  void DeletePoolThreads(){};
+#endif
+
+  int GetPoolNbThreads();
+
+  // Temporary folder
+  bool keepingTmpFolfer();
+  void CreateTmpFolder();
+  void DeleteTmpFolder();
+  boost::filesystem::path GetTmpFolder() {return tmp_folder;};
+  void cleanup();
+
+  //
+  bool IsParallel() override {return true;};
+  int GetParallelElement() override;
+  int GetDumpElement();
+
+  // Parallelims paramaters
+  int GetParallelismMethod() {return _method;};
+  void SetParallelismMethod(int aMethod) {_method = aMethod;};
+
+  int GetParallelismDimension() {return _paraDim;};
+  void SetParallelismDimension(int aDim) {_paraDim = aDim;};
+
+  // Mutlithreading parameters
+  int GetNbThreads() {return _NbThreads;};
+  void SetNbThreads(long nbThreads);
+
+  // Multinode parameters
+  std::string GetResource() {return _resource;};
+  void SetResource(std::string aResource) {_resource = aResource;};
+
+  int GetNbProc() {return _nbProc;};
+  void SetNbProc(long nbProc) {_nbProc = nbProc;};
+
+  int GetNbProcPerNode() {return _nbProcPerNode;};
+  void SetNbProcPerNode(long nbProcPerNodes) {_nbProcPerNode = nbProcPerNodes;};
+
+  int GetNbNode() {return _nbNode;};
+  void SetNbNode(long nbNodes) {_nbNode = nbNodes;};
+
+  std::string GetWcKey() {return _wcKey;};
+  void SetWcKey(std::string wcKey) {_wcKey = wcKey;};
+
+  std::string GetWalltime() {return _walltime;};
+  void SetWalltime(std::string walltime) {_walltime = walltime;};
+
+  // Parallel computation
+  bool ComputeSubMeshes(
+            SMESH_Gen* gen,
+            SMESH_Mesh & aMesh,
+            const TopoDS_Shape & aShape,
+            const ::MeshDimension       aDim,
+            TSetOfInt*                  aShapesId /*=0*/,
+            TopTools_IndexedMapOfShape* allowedSubShapes,
+            SMESH_subMesh::compute_event &computeEvent,
+            const bool includeSelf,
+            const bool complexShapeFirst,
+            const bool   aShapeOnly) override;
+
+ protected:
+  SMESH_ParallelMesh():SMESH_Mesh() {};
+  SMESH_ParallelMesh(const SMESH_ParallelMesh& aMesh):SMESH_Mesh(aMesh) {};
+ private:
+  // Mutex for multhitreading write in SMESH_Mesh
+#ifndef WIN32
+  boost::mutex _my_lock;
+  // thread pool for computation
+  boost::asio::thread_pool *     _pool = nullptr;
+#endif
+  boost::filesystem::path tmp_folder;
+  int _method = ParallelismMethod::MultiThread;
+  int _paraDim = 3;
+
+  int _NbThreads = std::thread::hardware_concurrency();
+
+  int _nbProc = 1;
+  int _nbProcPerNode = 1;
+  int _nbNode = 1;
+  std::string _resource = "";
+  std::string _wcKey = "P11N0:SALOME";
+  std::string _walltime = "01:00:00";
+};
+#endif
index a6e36e0d7e1ea22ec9526ffd046bc1ce759f0aa3..d59495d15e70ce633a5f13aeb3a9889fe40313dc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -574,8 +574,8 @@ bool SMESH_Pattern::Load (SMESH_Mesh*        theMesh,
   SMESH_MesherHelper helper( *theMesh );
   helper.SetSubShape( theFace );
 
-  int nbNodes = ( !fSubMesh ? 0 : fSubMesh->NbNodes() );
-  int nbElems = ( !fSubMesh ? 0 : fSubMesh->NbElements() );
+  smIdType nbNodes = ( !fSubMesh ? 0 : fSubMesh->NbNodes() );
+  smIdType nbElems = ( !fSubMesh ? 0 : fSubMesh->NbElements() );
   if ( nbElems == 0 && aMeshDS->NbFaces() == 0 )
   {
     MESSAGE( "No elements bound to the face");
@@ -3231,7 +3231,7 @@ bool SMESH_Pattern::Load (SMESH_Mesh*         theMesh,
     return setErrorCode( ERR_LOADV_BAD_SHAPE );
 
   // count nodes
-  int nbNodes = 0, shapeID;
+  smIdType nbNodes = 0; int shapeID;
   for ( shapeID = 1; shapeID <= myShapeIDMap.Extent(); shapeID++ )
   {
     const TopoDS_Shape& S = myShapeIDMap( shapeID );
@@ -4366,7 +4366,7 @@ void SMESH_Pattern::createElements(SMESH_Mesh*                            theMes
       subMesh->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
   }
   if ( onMeshElements ) {
-    list< int > elemIDs;
+    list< smIdType > elemIDs;
     for ( size_t i = 0; i < theElements.size(); i++ )
     {
       subMesh = theMesh->GetSubMeshContaining( shapeIDs[ i ] );
@@ -4925,11 +4925,12 @@ list< SMESH_Pattern::TPoint* > & SMESH_Pattern::getShapePoints(const int theShap
 
 void SMESH_Pattern::DumpPoints() const
 {
-#ifdef _DEBUG_
-  vector< TPoint >::const_iterator pVecIt = myPoints.begin();
-  for ( int i = 0; pVecIt != myPoints.end(); pVecIt++, i++ )
-    MESSAGE_ADD ( std::endl << i << ": " << *pVecIt );
-#endif
+  if (SALOME::VerbosityActivated())
+  {
+    vector< TPoint >::const_iterator pVecIt = myPoints.begin();
+    for ( int i = 0; pVecIt != myPoints.end(); pVecIt++, i++ )
+      MESSAGE_ADD ( std::endl << i << ": " << *pVecIt );
+  }
 }
 
 //=======================================================================
@@ -4939,14 +4940,15 @@ void SMESH_Pattern::DumpPoints() const
 
 SMESH_Pattern::TPoint::TPoint()
 {
-#ifdef _DEBUG_
-  myInitXYZ.SetCoord(7,7,7);
-  myInitUV.SetCoord(7.,7.);
-  myInitU = 7;
-  myXYZ.SetCoord(7,7,7);
-  myUV.SetCoord(7.,7.);
-  myU = 7;
-#endif
+  if (SALOME::VerbosityActivated())
+  {
+    myInitXYZ.SetCoord(7,7,7);
+    myInitUV.SetCoord(7.,7.);
+    myInitU = 7;
+    myXYZ.SetCoord(7,7,7);
+    myUV.SetCoord(7.,7.);
+    myU = 7;
+  }
 }
 
 //=======================================================================
index bc964a28093071f0e474a2c67a62fbc3ec33befc..f757935253b935a0967b02cd92965dc1d5373cf5 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 22635c0837c0ff3006047f50c6d20e5f4b662b80..25d363400fbc3ad03238f9c71d6754441ea59b54 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -402,9 +402,9 @@ SMDS_ElemIteratorPtr SMESH_ProxyMesh::GetFaces() const
  */
 //================================================================================
 
-int SMESH_ProxyMesh::NbFaces() const
+smIdType SMESH_ProxyMesh::NbFaces() const
 {
-  int nb = 0;
+  smIdType nb = 0;
   if ( _mesh->HasShapeToMesh() )
   {
     TopTools_IndexedMapOfShape FF;
@@ -715,7 +715,7 @@ void SMESH_ProxyMesh::SubMesh::Clear()
  */
 //================================================================================
 
-int SMESH_ProxyMesh::SubMesh::NbElements() const
+smIdType SMESH_ProxyMesh::SubMesh::NbElements() const
 {
   return _uvPtStructVec.empty() ? _elements.size() : _uvPtStructVec.size() - 1;
 }
@@ -740,7 +740,7 @@ SMDS_ElemIteratorPtr SMESH_ProxyMesh::SubMesh::GetElements() const
  */
 //================================================================================
 
-int SMESH_ProxyMesh::SubMesh::NbNodes() const
+smIdType SMESH_ProxyMesh::SubMesh::NbNodes() const
 {
   return _uvPtStructVec.size();
 }
index fc2e9b201d16413a7809b5603a46627cb7c8deed..a9ce71ef3b20562223572a2f54f9426faa8ea3fd 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -32,6 +32,7 @@
 
 #include <TopoDS_Shape.hxx>
 #include <NCollection_DataMap.hxx>
+#include <smIdType.hxx>
 
 #include <map>
 #include <vector>
@@ -66,8 +67,8 @@ public:
     const SMDS_MeshNode* GetProxyNode( const SMDS_MeshNode* n ) const;
     const UVPtStructVec& GetUVPtStructVec() const { return _uvPtStructVec; }
     virtual void         AddElement(const SMDS_MeshElement * e);
-    virtual int          NbElements() const;
-    virtual int          NbNodes() const;
+    virtual smIdType     NbElements() const;
+    virtual smIdType     NbNodes() const;
     virtual SMDS_ElemIteratorPtr GetElements() const;
     virtual SMDS_NodeIteratorPtr GetNodes() const;
     virtual void         Clear();
@@ -127,7 +128,7 @@ public:
   SMDS_ElemIteratorPtr   GetFaces(const TopoDS_Shape& face) const;
 
   // Return total nb of faces taking into account substitutions
-  int                    NbFaces() const;
+  smIdType               NbFaces() const;
 
   bool                   IsTemporary(const SMDS_MeshElement* elem ) const;
 
index b686ff57c5fe52d5ebe1738fa8ab8d205cf67e34..81322bb71b8a66cf960beec47c91ad07a7c864b8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
diff --git a/src/SMESH/SMESH_SequentialMesh.cxx b/src/SMESH/SMESH_SequentialMesh.cxx
new file mode 100644 (file)
index 0000000..e5c27f2
--- /dev/null
@@ -0,0 +1,69 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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_SequentialMesh.cxx
+//  Author : Yoann AUDOUIN, EDF
+//  Module : SMESH
+//
+#include "SMESH_SequentialMesh.hxx"
+
+#include <TopExp_Explorer.hxx>
+#include <TopoDS.hxx>
+#include <TopoDS_Iterator.hxx>
+
+#include <utilities.h>
+
+SMESH_SequentialMesh::SMESH_SequentialMesh(int               theLocalId,
+                       SMESH_Gen*        theGen,
+                       bool              theIsEmbeddedMode,
+                       SMESHDS_Document* theDocument) :SMESH_Mesh(theLocalId,
+                                                                  theGen,
+                                                                  theIsEmbeddedMode,
+                                                                  theDocument)
+{
+  MESSAGE("SMESH_SequentialMesh::SMESH_SequentialMesh(int localId)");
+};
+
+SMESH_SequentialMesh::~SMESH_SequentialMesh()
+{
+};
+
+bool SMESH_SequentialMesh::ComputeSubMeshes(
+          SMESH_Gen* gen,
+          SMESH_Mesh & aMesh,
+          const TopoDS_Shape & aShape,
+          const ::MeshDimension       aDim,
+          TSetOfInt*                  aShapesId /*=0*/,
+          TopTools_IndexedMapOfShape* allowedSubShapes,
+          SMESH_subMesh::compute_event &computeEvent,
+          const bool includeSelf,
+          const bool complexShapeFirst,
+          const bool   aShapeOnly)
+{
+    return gen->sequentialComputeSubMeshes(
+            aMesh, aShape, aDim,
+            aShapesId, allowedSubShapes,
+            computeEvent,
+            includeSelf,
+            complexShapeFirst,
+            aShapeOnly);
+};
diff --git a/src/SMESH/SMESH_SequentialMesh.hxx b/src/SMESH/SMESH_SequentialMesh.hxx
new file mode 100644 (file)
index 0000000..bcc564a
--- /dev/null
@@ -0,0 +1,69 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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_SequentialMesh.hxx
+//  Author : Yoann AUDOUIN, EDF
+//  Module : SMESH
+//
+#ifndef _SMESH_SEQUENTIALMESH_HXX_
+#define _SMESH_SEQUENTIALMESH_HXX_
+
+#include "SMESH_Mesh.hxx"
+
+#include "SMESH_Gen.hxx"
+#include "SMESH_subMesh.hxx"
+
+class SMESH_EXPORT SMESH_SequentialMesh: public SMESH_Mesh
+{
+ public:
+  SMESH_SequentialMesh(int               theLocalId,
+                       SMESH_Gen*        theGen,
+                       bool              theIsEmbeddedMode,
+                       SMESHDS_Document* theDocument);
+
+  virtual ~SMESH_SequentialMesh();
+
+  void Lock() override {};
+  void Unlock() override {};
+
+  void wait() override {};
+
+  bool IsParallel() override {return false;};
+  int GetParallelElement() override {return 0;};
+
+  bool ComputeSubMeshes (
+            SMESH_Gen* gen,
+            SMESH_Mesh & aMesh,
+            const TopoDS_Shape & aShape,
+            const ::MeshDimension       aDim,
+            TSetOfInt*                  aShapesId /*=0*/,
+            TopTools_IndexedMapOfShape* allowedSubShapes,
+            SMESH_subMesh::compute_event &computeEvent,
+            const bool includeSelf,
+            const bool complexShapeFirst,
+            const bool   aShapeOnly) override;
+
+ protected:
+  SMESH_SequentialMesh():SMESH_Mesh() {};
+  SMESH_SequentialMesh(const SMESH_SequentialMesh& aMesh):SMESH_Mesh(aMesh) {};
+};
+#endif
index eed10525bad570c16473b1c9b709595b24655ce0..18b6c3cdfe9687603d1dea4f8dacc19b5806ea71 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -37,9 +37,9 @@
 #include "SMESH_Mesh.hxx"
 #include "SMESH_MesherHelper.hxx"
 #include "SMESH_subMeshEventListener.hxx"
+#include "SMESH_MeshLocker.hxx"
 
 #include "utilities.h"
-#include "OpUtil.hxx"
 #include "Basics_Utils.hxx"
 
 #include <BRep_Builder.hxx>
@@ -63,7 +63,7 @@ using namespace std;
 
 #ifdef _DEBUG_
 // enable printing algo + shape id + hypo used while meshing
-//#define PRINT_WHO_COMPUTE_WHAT
+#define PRINT_WHO_COMPUTE_WHAT
 #endif
 
 //=============================================================================
@@ -257,7 +257,7 @@ bool SMESH_subMesh::IsMeshComputed() const
       TopExp_Explorer exp( _subShape, (TopAbs_ShapeEnum) type );
       for ( ; exp.More(); exp.Next() )
       {
-        if ( SMESHDS_SubMesh * smDS = meshDS->MeshElements( exp.Current() ))
+        if ( SMESHDS_SubMesh * smDS = meshDS->MeshElements( exp.Current() ) )
         {
           bool computed = (dim > 0) ? smDS->NbElements() : smDS->NbNodes();
           if ( computed )
@@ -610,7 +610,7 @@ bool SMESH_subMesh::IsApplicableHypothesis(const SMESH_Hypothesis* theHypothesis
  *  \param [in] event - what happens
  *  \param [in] anHyp - a hypothesis
  *  \return SMESH_Hypothesis::Hypothesis_Status - a treatment result.
- * 
+ *
  * Optional description of a problematic situation (if any) can be retrieved
  * via GetComputeError().
  */
@@ -891,7 +891,10 @@ SMESH_Hypothesis::Hypothesis_Status
           ret = SMESH_Hypothesis::HYP_INCOMPATIBLE;
       }
       else if (!_father->IsUsedHypothesis( anHyp, this ))
-        ret = SMESH_Hypothesis::HYP_INCOMPATIBLE;
+      {
+        if ( anHyp->GetDim() == this->GetAlgo()->GetDim() )
+          ret = SMESH_Hypothesis::HYP_INCOMPATIBLE;
+      }
 
       if (SMESH_Hypothesis::IsStatusFatal( ret ))
       {
@@ -1034,8 +1037,8 @@ SMESH_Hypothesis::Hypothesis_Status
 
   // detect algorithm hiding
   //
-  if ( ret == SMESH_Hypothesis::HYP_OK && 
-       ( event == ADD_ALGO || event == ADD_FATHER_ALGO ) && algo && 
+  if ( ret == SMESH_Hypothesis::HYP_OK &&
+       ( event == ADD_ALGO || event == ADD_FATHER_ALGO ) && algo &&
        algo->GetName() == anHyp->GetName() )
   {
     // is algo hidden?
@@ -1331,12 +1334,12 @@ static void cleanSubMesh( SMESH_subMesh * subMesh )
     if (SMESHDS_SubMesh * subMeshDS = subMesh->GetSubMeshDS())
     {
       SMESHDS_Mesh * meshDS = subMesh->GetFather()->GetMeshDS();
-      int nbElems = subMeshDS->NbElements();
+      smIdType nbElems = subMeshDS->NbElements();
       if ( nbElems > 0 )
         for ( SMDS_ElemIteratorPtr ite = subMeshDS->GetElements(); ite->more(); )
           meshDS->RemoveFreeElement( ite->next(), subMeshDS );
 
-      int nbNodes = subMeshDS->NbNodes();
+      smIdType nbNodes = subMeshDS->NbNodes();
       if ( nbNodes > 0 )
         for ( SMDS_NodeIteratorPtr itn = subMeshDS->GetNodes(); itn->more() ; )
         {
@@ -1393,6 +1396,7 @@ bool SMESH_subMesh::ComputeStateEngine(compute_event event)
     else if (( event == COMPUTE || event == COMPUTE_SUBMESH )
              && !_alwaysComputed )
     {
+      SMESH_MeshLocker myLocker(_father);
       const TopoDS_Vertex & V = TopoDS::Vertex( _subShape );
       gp_Pnt P = BRep_Tool::Pnt(V);
       if ( SMDS_MeshNode * n = _father->GetMeshDS()->AddNode(P.X(), P.Y(), P.Z()) ) {
@@ -1512,9 +1516,11 @@ bool SMESH_subMesh::ComputeStateEngine(compute_event event)
           break;
         }
         TopoDS_Shape shape = _subShape;
-        algo->SubMeshesToCompute().assign( 1, this );
+        algo->setSubMeshesToCompute(this);
         // check submeshes needed
-        if (_father->HasShapeToMesh() ) {
+        // When computing in parallel mode we do not have a additional layer of submesh
+        // The check should not be done in parallel as that check is not thread-safe
+        if (_father->HasShapeToMesh() && (!_father->IsParallel() || shape.ShapeType() != _father->GetParallelElement() )) {
           bool subComputed = false, subFailed = false;
           if (!algo->OnlyUnaryInput()) {
             //  --- commented for bos#22320 to compute all sub-shapes at once if possible;
@@ -1576,7 +1582,7 @@ bool SMESH_subMesh::ComputeStateEngine(compute_event event)
           _computeError = SMESH_ComputeError::Worst( _computeError, algo->GetComputeError() );
         }
         catch ( ::SMESH_ComputeError& comperr ) {
-          cout << " SMESH_ComputeError caught" << endl;
+          MESSAGE(" SMESH_ComputeError caught");
           if ( !_computeError ) _computeError = SMESH_ComputeError::New();
           *_computeError = comperr;
         }
@@ -1643,8 +1649,9 @@ bool SMESH_subMesh::ComputeStateEngine(compute_event event)
 #ifdef PRINT_WHO_COMPUTE_WHAT
         for (subS.ReInit(); subS.More(); subS.Next())
         {
+          SMESH_MeshLocker myLocker(_father);
           const std::list <const SMESHDS_Hypothesis *> & hyps =
-            _algo->GetUsedHypothesis( *_father, _subShape );
+              _algo->GetUsedHypothesis( *_father, _subShape );
           SMESH_Comment hypStr;
           if ( !hyps.empty() )
           {
@@ -1917,7 +1924,7 @@ bool SMESH_subMesh::Evaluate(MapShapeNbElems& aResMap)
   bool ret = true;
 
   if (_subShape.ShapeType() == TopAbs_VERTEX) {
-    vector<int> aVec(SMDSEntity_Last,0);
+    vector<smIdType> aVec(SMDSEntity_Last,0);
     aVec[SMDSEntity_Node] = 1;
     aResMap.insert(make_pair(this,aVec));
     return ret;
@@ -1944,7 +1951,7 @@ bool SMESH_subMesh::Evaluate(MapShapeNbElems& aResMap)
         SMESH_subMesh* sm = smIt->next();
         int dim = SMESH_Gen::GetShapeDim( sm->GetSubShape() );
         if (dim < dimToCheck) break; // the rest subMeshes are all of less dimension
-        const vector<int> & nbs = aResMap[ sm ];
+        const vector<smIdType> & nbs = aResMap[ sm ];
         subMeshEvaluated = (std::accumulate( nbs.begin(), nbs.end(), 0 ) > 0 );
       }
       if ( !subMeshEvaluated )
@@ -1954,7 +1961,7 @@ bool SMESH_subMesh::Evaluate(MapShapeNbElems& aResMap)
 
     if ( IsMeshComputed() )
     {
-      vector<int> & nbEntities = aResMap[ this ];
+      vector<smIdType> & nbEntities = aResMap[ this ];
       nbEntities.resize( SMDSEntity_Last, 0 );
       if ( SMESHDS_SubMesh* sm = GetSubMeshDS() )
       {
@@ -1968,7 +1975,7 @@ bool SMESH_subMesh::Evaluate(MapShapeNbElems& aResMap)
     {
       ret = algo->Evaluate((*_father), _subShape, aResMap);
     }
-    aResMap.insert( make_pair( this,vector<int>(0)));
+    aResMap.insert( make_pair( this,vector<smIdType>(0)));
   }
 
   return ret;
@@ -2098,7 +2105,7 @@ void SMESH_subMesh::updateDependantsState(const compute_event theEvent)
 
 //=======================================================================
 //function : cleanDependants
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 void SMESH_subMesh::cleanDependants()
@@ -2122,7 +2129,7 @@ void SMESH_subMesh::cleanDependants()
 
 //=======================================================================
 //function : removeSubMeshElementsAndNodes
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 void SMESH_subMesh::removeSubMeshElementsAndNodes()
@@ -2184,10 +2191,13 @@ TopoDS_Shape SMESH_subMesh::getCollection(SMESH_Gen * /*theGen*/,
   {
     SMESH_subMesh* subMesh = smIt->next();
     const TopoDS_Shape&  S = subMesh->_subShape;
-    if ( S.ShapeType() != this->_subShape.ShapeType() )
+
+    if ( S.ShapeType() != this->_subShape.ShapeType() ){
       continue;
-    if ( _allowedSubShapes && !_allowedSubShapes->IsEmpty() && !_allowedSubShapes->Contains( S ))
+    }
+    if ( _allowedSubShapes && !_allowedSubShapes->IsEmpty() && !_allowedSubShapes->Contains( S )){
       continue;
+    }
     if ( subMesh == this )
     {
       aBuilder.Add( aCompound, S );
@@ -2196,6 +2206,7 @@ TopoDS_Shape SMESH_subMesh::getCollection(SMESH_Gen * /*theGen*/,
     else if ( subMesh->GetComputeState() == READY_TO_COMPUTE )
     {
       SMESH_Algo* anAlgo = subMesh->GetAlgo();
+
       if (( anAlgo->IsSameName( *theAlgo )) && // same algo
           ( anAlgo->GetUsedHypothesis( *_father, S, skipAuxHyps ) == usedHyps ) && // same hyps
           ( anAlgo->GetAssignedShapes() == assiShapes ) && // on same sub-shapes
@@ -2209,7 +2220,7 @@ TopoDS_Shape SMESH_subMesh::getCollection(SMESH_Gen * /*theGen*/,
     }
   }
 
-  return aCompound;
+  return theSubs.size() == 1 ? theSubs[0]->GetSubShape() : aCompound;
 }
 
 //=======================================================================
@@ -2248,10 +2259,10 @@ const SMESH_Hypothesis* SMESH_subMesh::getSimilarAttached(const TopoDS_Shape&
 //=======================================================================
 
 SMESH_Hypothesis::Hypothesis_Status
-  SMESH_subMesh::CheckConcurrentHypothesis (const int theHypType)
+  SMESH_subMesh::CheckConcurrentHypothesis( SMESH_Hypothesis* theHypothesis)
 {
   // is there local hypothesis on me?
-  if ( getSimilarAttached( _subShape, 0, theHypType ) )
+  if ( getSimilarAttached( _subShape, theHypothesis ) )
     return SMESH_Hypothesis::HYP_OK;
 
 
@@ -2261,7 +2272,7 @@ SMESH_Hypothesis::Hypothesis_Status
   for (; it.More(); it.Next())
   {
     const TopoDS_Shape& ancestor = it.Value();
-    const SMESH_Hypothesis* hyp = getSimilarAttached( ancestor, 0, theHypType );
+    const SMESH_Hypothesis* hyp = getSimilarAttached( ancestor, theHypothesis );
     if ( hyp )
     {
       if ( aPrevWithHyp.IsNull() || aPrevWithHyp.IsSame( ancestor ))
@@ -2298,7 +2309,7 @@ SMESH_subMesh::OwnListenerData::OwnListenerData( SMESH_subMesh* sm, EventListene
  * \param listener - the listener to store
  * \param data - the listener data to store
  * \param where - the submesh to store the listener and it's data
- * 
+ *
  * It remembers the submesh where it puts the listener in order to delete
  * them when HYP_OK algo_state is lost
  * After being set, event listener is notified on each event of where submesh.
@@ -2320,7 +2331,7 @@ void SMESH_subMesh::SetEventListener(EventListener*     listener,
  * \brief Sets an event listener and its data to a submesh
  * \param listener - the listener to store
  * \param data - the listener data to store
- * 
+ *
  * After being set, event listener is notified on each event of a submesh.
  */
 //================================================================================
@@ -2530,7 +2541,7 @@ void SMESH_subMesh::loadDependentMeshes()
  * \param subMesh - the submesh where the event occurs
  * \param data - listener data stored in the subMesh
  * \param hyp - hypothesis, if eventType is algo_event
- * 
+ *
  * The base implementation translates CLEAN event to the subMesh
  * stored in listener data. Also it sends SUBMESH_COMPUTED event in case of
  * successful COMPUTE event.
index a2eef50b11898393fc29623c061129fdfbe58f6d..0358cc6627db822bdf029efcfb4911dd81dd3f68 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -69,7 +69,7 @@ class SMESH_EXPORT SMESH_subMesh
   int GetId() const; // == meshDS->ShapeToIndex( aSubShape )
 
   SMESH_Mesh* GetFather() { return _father; }
-  
+
   SMESHDS_SubMesh *       GetSubMeshDS();
   const SMESHDS_SubMesh * GetSubMeshDS() const;
 
@@ -79,6 +79,7 @@ class SMESH_EXPORT SMESH_subMesh
   SMESH_subMesh *GetFirstToCompute();
 
   SMESH_Algo* GetAlgo() const;
+  SMESH_Algo* CopyAlgo() const;
 
   const std::map < int, SMESH_subMesh * >& DependsOn();
   bool DependsOn( const SMESH_subMesh* other ) const;
@@ -123,7 +124,7 @@ class SMESH_EXPORT SMESH_subMesh
   };
 
   // ==================================================================
-  // Members to track non hierarchical dependencies between sub-meshes 
+  // Members to track non hierarchical dependencies between sub-meshes
   // ==================================================================
 
   /*!
@@ -131,7 +132,7 @@ class SMESH_EXPORT SMESH_subMesh
     * \param listener - the listener to store
     * \param data - the listener data to store
     * \param where - the submesh to store the listener and it's data
-   * 
+   *
    * The method remembers the submesh \awhere it puts the listener in order to delete
    * it when HYP_OK algo_state is lost
    * After being set, event listener is notified on each event of \awhere submesh.
@@ -185,7 +186,7 @@ protected:
    * \brief Sets an event listener and its data to a submesh
     * \param listener - the listener to store
     * \param data - the listener data to store
-   * 
+   *
    * After being set, event listener is notified on each event of a submesh.
    */
   void setEventListener(EventListener* listener, EventListenerData* data);
@@ -245,8 +246,8 @@ public:
   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 CheckConcurrentHypothesis (const int theHypType);
+
+  SMESH_Hypothesis::Hypothesis_Status CheckConcurrentHypothesis (SMESH_Hypothesis* theHypothesis);
   // check if there are several applicable hypothesis on fathers
 
   /*!
@@ -277,7 +278,7 @@ public:
 
   int GetComputeCost() const;
   // how costly is to compute this sub-mesh
-  
+
   /*!
    * \brief  Find common submeshes (based on shared subshapes with other
    * \param theOther submesh to check
@@ -319,7 +320,7 @@ protected:
 
   /*!
    * \brief Return a hypothesis attached to theShape.
-   * 
+   *
    * If theHyp is provided, similar but not same hypotheses
    * is returned; else an applicable ones having theHypType
    * is returned
@@ -327,7 +328,7 @@ protected:
   const SMESH_Hypothesis* getSimilarAttached(const TopoDS_Shape&      theShape,
                                              const SMESH_Hypothesis * theHyp,
                                              const int                theHypType = 0);
-  // 
+  //
   int computeCost() const;
 
 protected:
index d30fc8bdfdd3869aa9c6daaaf4f2ccfdea2e25eb..a271676d9e26b184a7aeb552a62e45b8a3a67e62 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 11ac073ae1c995be802cb93c38c1945be58bef43..a1091b213043a49cc77b0795f572fdfec51bb54c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2010-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2010-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 1e67b66241d336bfb35cb960c904764ba7b2fa12..197c295fa6bdb41f2cba1c1caadd935a2a0930cd 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -26,6 +26,7 @@ INCLUDE_DIRECTORIES(
   ${Boost_INCLUDE_DIRS}
   ${OpenCASCADE_INCLUDE_DIR}
   ${OMNIORB_INCLUDE_DIR}
+  ${MEDCOUPLING_INCLUDE_DIRS}
   ${PROJECT_SOURCE_DIR}/src/Controls
   ${PROJECT_SOURCE_DIR}/src/Driver
   ${PROJECT_SOURCE_DIR}/src/DriverDAT
@@ -36,6 +37,7 @@ INCLUDE_DIRECTORIES(
   ${PROJECT_SOURCE_DIR}/src/SMESHDS
   ${PROJECT_SOURCE_DIR}/src/SMESH
   ${PROJECT_SOURCE_DIR}/src/SMESHUtils
+  ${PROJECT_SOURCE_DIR}/src/SMESH_I
   ${PROJECT_BINARY_DIR}/idl
 )
 
@@ -69,6 +71,7 @@ SET(_link_LIBRARIES
   SMESHimpl
   SMESHDS
   SMESHControls
+  SMESHEngine 
   MEDWrapper
 )
 
index 075d7292619efaa93039a02571fb29ae4a481b64..a8aa1d84c5fc0e18282e2eb4334e4e3b2853a1fd 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 0c1b1aeabd9e365bac26bb24e5ba8f89825f2a2a..f5251c2ff46e8c38fb17f26817689ea5fc07888c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #include "SMESH_Mesh.hxx"
 
 #include "SALOME_NamingService.hxx"
+#include "SALOME_Fake_NamingService.hxx"
 #include "SALOME_LifeCycleCORBA.hxx"
 
 #include <SALOMEconfig.h>
+#include <smIdType.hxx>
 #include CORBA_SERVER_HEADER(SALOME_Component)
 #include CORBA_SERVER_HEADER(SALOME_Exception)
 
 #include "Basics_Utils.hxx"
+#include "KernelBasis.hxx"
 #include "utilities.h"
 
 #ifdef WIN32
@@ -46,6 +49,7 @@
 #endif
 
 #include <stdexcept>
+#include <memory>
 
 #ifndef EXCEPTION
 #define EXCEPTION(TYPE, MSG) {\
 }
 #endif
 
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-#else
-static int MYDEBUG = 0;
-#endif
-
 namespace
 {
   using std::runtime_error;
@@ -88,14 +86,14 @@ namespace
   //=======================================================================
   inline void AddNodesWithID(SMDS_Mesh* theMesh,
                              SMESH::log_array_var& theSeq,
-                             CORBA::Long theId)
+                             SMESH::smIdType theId)
   {
     const SMESH::double_array& aCoords = theSeq[theId].coords;
     const SMESH::long_array& anIndexes = theSeq[theId].indexes;
-    CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number;
-    if(3*aNbElems != (CORBA::Long) aCoords.length())
+    SMESH::smIdType anElemId = 0, aNbElems = theSeq[theId].number;
+    if(3*aNbElems != (SMESH::smIdType) aCoords.length())
       EXCEPTION(runtime_error,"AddNodesWithID - 3*aNbElems != aCoords.length()");
-    for(CORBA::Long aCoordId = 0; anElemId < aNbElems; anElemId++, aCoordId+=3){
+    for(SMESH::smIdType aCoordId = 0; anElemId < aNbElems; anElemId++, aCoordId+=3){
       SMDS_MeshElement* anElem = theMesh->AddNodeWithID(aCoords[aCoordId],
                                                         aCoords[aCoordId+1],
                                                         aCoords[aCoordId+2],
@@ -111,13 +109,13 @@ namespace
   //=======================================================================
   inline void Add0DElementsWithID(SMDS_Mesh* theMesh,
                                   SMESH::log_array_var& theSeq,
-                                  CORBA::Long theId)
+                                  SMESH::smIdType theId)
   {
     const SMESH::long_array& anIndexes = theSeq[theId].indexes;
-    CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number;
-    if (2*aNbElems != (CORBA::Long) anIndexes.length())
+    SMESH::smIdType anElemId = 0, aNbElems = theSeq[theId].number;
+    if (2*aNbElems != (SMESH::smIdType) anIndexes.length())
       EXCEPTION(runtime_error,"AddEdgeWithID - 2*aNbElems != aCoords.length()");
-    CORBA::Long anIndexId = 0;
+    SMESH::smIdType anIndexId = 0;
     for (; anElemId < aNbElems; anElemId++, anIndexId+=2)
     {
       SMDS_MeshElement* anElem = theMesh->Add0DElementWithID(anIndexes[anIndexId+1],
@@ -133,16 +131,16 @@ namespace
   //=======================================================================
   inline void AddBallsWithID(SMDS_Mesh*            theMesh,
                              SMESH::log_array_var& theSeq,
-                             CORBA::Long           theId)
+                             SMESH::smIdType       theId)
   {
     const SMESH::double_array& aDiameter = theSeq[theId].coords;
     const SMESH::long_array& anIndexes   = theSeq[theId].indexes;
-    CORBA::Long anElemId = 0, aNbElems   = theSeq[theId].number;
-    if (2*aNbElems != (CORBA::Long) anIndexes.length() )
+    SMESH::smIdType anElemId = 0, aNbElems   = theSeq[theId].number;
+    if (2*aNbElems != (SMESH::smIdType) anIndexes.length() )
       EXCEPTION(runtime_error,"AddEdgeWithID - 2*aNbElems != anIndexes.length()");
-    if (aNbElems != (CORBA::Long) aDiameter.length())
+    if (aNbElems != (SMESH::smIdType) aDiameter.length())
       EXCEPTION(runtime_error,"AddEdgeWithID - aNbElems != aDiameter.length()");
-    CORBA::Long anIndexId = 0;
+    SMESH::smIdType anIndexId = 0;
     for (; anElemId < aNbElems; anElemId++, anIndexId+=2)
     {
       SMDS_MeshElement* anElem = theMesh->AddBallWithID(anIndexes[anIndexId+1],
@@ -159,13 +157,13 @@ namespace
   //=======================================================================
   inline void AddEdgesWithID(SMDS_Mesh* theMesh,
                              SMESH::log_array_var& theSeq,
-                             CORBA::Long theId)
+                             SMESH::smIdType theId)
   {
     const SMESH::long_array& anIndexes = theSeq[theId].indexes;
-    CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number;
-    if(3*aNbElems != (CORBA::Long) anIndexes.length())
+    SMESH::smIdType anElemId = 0, aNbElems = theSeq[theId].number;
+    if(3*aNbElems != (SMESH::smIdType) anIndexes.length())
       EXCEPTION(runtime_error,"AddEdgeWithID - 3*aNbElems != aCoords.length()");
-    for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=3){
+    for(SMESH::smIdType anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=3){
       SMDS_MeshElement* anElem = theMesh->AddEdgeWithID(anIndexes[anIndexId+1],
                                                         anIndexes[anIndexId+2],
                                                         anIndexes[anIndexId]);
@@ -180,13 +178,13 @@ namespace
   //=======================================================================
   inline void AddTriasWithID(SMDS_Mesh* theMesh,
                              SMESH::log_array_var& theSeq,
-                             CORBA::Long theId)
+                             SMESH::smIdType theId)
   {
     const SMESH::long_array& anIndexes = theSeq[theId].indexes;
-    CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number;
-    if(4*aNbElems != (CORBA::Long) anIndexes.length())
+    SMESH::smIdType anElemId = 0, aNbElems = theSeq[theId].number;
+    if(4*aNbElems != (SMESH::smIdType) anIndexes.length())
       EXCEPTION(runtime_error,"AddTriasWithID - 4*aNbElems != anIndexes.length()");
-    for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=4){
+    for(SMESH::smIdType anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=4){
       SMDS_MeshElement* anElem = theMesh->AddFaceWithID(anIndexes[anIndexId+1],
                                                         anIndexes[anIndexId+2],
                                                         anIndexes[anIndexId+3],
@@ -202,13 +200,13 @@ namespace
   //=======================================================================
   inline void AddQuadsWithID(SMDS_Mesh* theMesh,
                              SMESH::log_array_var theSeq,
-                             CORBA::Long theId)
+                             SMESH::smIdType theId)
   {
     const SMESH::long_array& anIndexes = theSeq[theId].indexes;
-    CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number;
-    if(5*aNbElems != (CORBA::Long) anIndexes.length())
+    SMESH::smIdType anElemId = 0, aNbElems = theSeq[theId].number;
+    if(5*aNbElems != (SMESH::smIdType) anIndexes.length())
       EXCEPTION(runtime_error,"AddQuadsWithID - 4*aNbElems != anIndexes.length()");
-    for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=5){
+    for(SMESH::smIdType anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=5){
       SMDS_MeshElement* anElem = theMesh->AddFaceWithID(anIndexes[anIndexId+1],
                                                         anIndexes[anIndexId+2],
                                                         anIndexes[anIndexId+3],
@@ -225,16 +223,16 @@ namespace
   //=======================================================================
   inline void AddPolygonsWithID(SMDS_Mesh* theMesh,
                                 SMESH::log_array_var& theSeq,
-                                CORBA::Long theId)
+                                SMESH::smIdType theId)
   {
     const SMESH::long_array& anIndexes = theSeq[theId].indexes;
-    CORBA::Long anIndexId = 0, aNbElems = theSeq[theId].number;
+    SMESH::smIdType anIndexId = 0, aNbElems = theSeq[theId].number;
 
-    for (CORBA::Long anElemId = 0; anElemId < aNbElems; anElemId++) {
-      int aFaceId = anIndexes[anIndexId++];
+    for (SMESH::smIdType anElemId = 0; anElemId < aNbElems; anElemId++) {
+      smIdType aFaceId = anIndexes[anIndexId++];
 
       int aNbNodes = anIndexes[anIndexId++];
-      std::vector<int> nodes_ids (aNbNodes);
+      std::vector<smIdType> nodes_ids (aNbNodes);
       for (int i = 0; i < aNbNodes; i++) {
         nodes_ids[i] = anIndexes[anIndexId++];
       }
@@ -252,16 +250,16 @@ namespace
   //=======================================================================
   inline void AddQuadPolygonsWithID(SMDS_Mesh* theMesh,
                                     SMESH::log_array_var& theSeq,
-                                    CORBA::Long theId)
+                                    SMESH::smIdType theId)
   {
     const SMESH::long_array& anIndexes = theSeq[theId].indexes;
-    CORBA::Long anIndexId = 0, aNbElems = theSeq[theId].number;
+    SMESH::smIdType anIndexId = 0, aNbElems = theSeq[theId].number;
 
-    for (CORBA::Long anElemId = 0; anElemId < aNbElems; anElemId++) {
-      int aFaceId = anIndexes[anIndexId++];
+    for (SMESH::smIdType anElemId = 0; anElemId < aNbElems; anElemId++) {
+      smIdType aFaceId = anIndexes[anIndexId++];
 
       int aNbNodes = anIndexes[anIndexId++];
-      std::vector<int> nodes_ids (aNbNodes);
+      std::vector<smIdType> nodes_ids (aNbNodes);
       for (int i = 0; i < aNbNodes; i++) {
         nodes_ids[i] = anIndexes[anIndexId++];
       }
@@ -279,13 +277,13 @@ namespace
   //=======================================================================
   inline void AddTetrasWithID(SMDS_Mesh* theMesh,
                               SMESH::log_array_var& theSeq,
-                              CORBA::Long theId)
+                              SMESH::smIdType theId)
   {
     const SMESH::long_array& anIndexes = theSeq[theId].indexes;
-    CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number;
-    if(5*aNbElems != (CORBA::Long) anIndexes.length())
+    SMESH::smIdType anElemId = 0, aNbElems = theSeq[theId].number;
+    if(5*aNbElems != (SMESH::smIdType) anIndexes.length())
       EXCEPTION(runtime_error,"AddTetrasWithID - 5*aNbElems != anIndexes.length()");
-    for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=5){
+    for(SMESH::smIdType anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=5){
       SMDS_MeshElement* anElem = theMesh->AddVolumeWithID(anIndexes[anIndexId+1],
                                                           anIndexes[anIndexId+2],
                                                           anIndexes[anIndexId+3],
@@ -302,13 +300,13 @@ namespace
   //=======================================================================
   inline void AddPiramidsWithID(SMDS_Mesh* theMesh,
                                 SMESH::log_array_var& theSeq,
-                                CORBA::Long theId)
+                                SMESH::smIdType theId)
   {
     const SMESH::long_array& anIndexes = theSeq[theId].indexes;
-    CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number;
-    if(6*aNbElems != (CORBA::Long) anIndexes.length())
+    SMESH::smIdType anElemId = 0, aNbElems = theSeq[theId].number;
+    if(6*aNbElems != (SMESH::smIdType) anIndexes.length())
       EXCEPTION(runtime_error,"AddPiramidsWithID - 6*aNbElems != anIndexes.length()");
-    for(CORBA::Long anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=6){
+    for(SMESH::smIdType anIndexId = 0; anElemId < aNbElems; anElemId++, anIndexId+=6){
       SMDS_MeshElement* anElem = theMesh->AddVolumeWithID(anIndexes[anIndexId+1],
                                                           anIndexes[anIndexId+2],
                                                           anIndexes[anIndexId+3],
@@ -326,7 +324,7 @@ namespace
   //=======================================================================
   inline void AddPrismsWithID(SMDS_Mesh* theMesh,
                               SMESH::log_array_var& theSeq,
-                              CORBA::Long theId)
+                              SMESH::smIdType theId)
   {
     const SMESH::long_array& anIndexes = theSeq[theId].indexes;
     CORBA::Long anElemId = 0, aNbElems = theSeq[theId].number;
@@ -414,10 +412,10 @@ namespace
     CORBA::Long anIndexId = 0, aNbElems = theSeq[theId].number;
 
     for (CORBA::Long anElemId = 0; anElemId < aNbElems; anElemId++) {
-      int aFaceId = anIndexes[anIndexId++];
+      smIdType aFaceId = anIndexes[anIndexId++];
 
       int aNbNodes = anIndexes[anIndexId++];
-      std::vector<int> nodes_ids (aNbNodes);
+      std::vector<smIdType> nodes_ids (aNbNodes);
       for (int i = 0; i < aNbNodes; i++) {
         nodes_ids[i] = anIndexes[anIndexId++];
       }
@@ -783,15 +781,24 @@ SMESH_Client::GetSMESHGen(CORBA::ORB_ptr theORB,
 {
   static SMESH::SMESH_Gen_var aMeshGen;
 
-  if(CORBA::is_nil(aMeshGen.in())){
+  if(CORBA::is_nil(aMeshGen.in()))
+  {
 #ifdef WIN32
     long aClientPID = (long)_getpid();
 #else
     long aClientPID =  (long)getpid();
 #endif
 
-    SALOME_NamingService aNamingService(theORB);
-    SALOME_LifeCycleCORBA aLifeCycleCORBA(&aNamingService);
+    std::unique_ptr<SALOME_NamingService_Abstract> aNamingService;
+    if(getSSLMode())
+    {
+      aNamingService.reset(new SALOME_Fake_NamingService);
+    }
+    else
+    {
+      aNamingService.reset(new SALOME_NamingService(theORB));
+    }
+    SALOME_LifeCycleCORBA aLifeCycleCORBA(aNamingService.get());
     Engines::EngineComponent_var aComponent = aLifeCycleCORBA.FindOrLoad_Component("FactoryServer","SMESH");
     aMeshGen = SMESH::SMESH_Gen::_narrow(aComponent);
 
@@ -802,7 +809,6 @@ SMESH_Client::GetSMESHGen(CORBA::ORB_ptr theORB,
     aMeshGen->SetEmbeddedMode((aClientPID == aServerPID) && (aClientHostName == aServerHostName.in()));
   }
   theIsEmbeddedMode = aMeshGen->IsEmbeddedMode();
-
   return aMeshGen;
 }
 
@@ -817,19 +823,19 @@ SMESH_Client::SMESH_Client(CORBA::ORB_ptr theORB,
   mySMESHDSMesh(NULL),
   mySMDSMesh(NULL)
 {
-  if ( MYDEBUG ) MESSAGE("SMESH_Client::SMESH_Client");
+  MESSAGE("SMESH_Client::SMESH_Client");
   myMeshServer->Register();
 
   CORBA::Boolean anIsEmbeddedMode;
   GetSMESHGen(theORB,anIsEmbeddedMode);
   if(anIsEmbeddedMode){
-    if ( MYDEBUG ) MESSAGE("Info: The same process, update mesh by pointer ");
+    MESSAGE("Info: The same process, update mesh by pointer ");
     // just set client mesh pointer to server mesh pointer
     //SMESH_Mesh* aMesh = reinterpret_cast<SMESH_Mesh*>(theMesh->GetMeshPtr());
     CORBA::LongLong pointeur = theMesh->GetMeshPtr();
-    if( MYDEBUG ) MESSAGE("SMESH_Client::SMESH_Client pointeur "<<pointeur);
+    MESSAGE("SMESH_Client::SMESH_Client pointeur "<<pointeur);
     SMESH_Mesh* aMesh = reinterpret_cast<SMESH_Mesh*> (pointeur);
-    if ( MYDEBUG ) MESSAGE("SMESH_Client::SMESH_Client aMesh "<<aMesh);
+    MESSAGE("SMESH_Client::SMESH_Client aMesh "<<aMesh);
     //if(aMesh->GetMeshDS()->IsEmbeddedMode()){
     if(anIsEmbeddedMode){
       mySMESHDSMesh = aMesh->GetMeshDS();
@@ -887,18 +893,18 @@ SMESH_Client::Update(bool theIsClear)
   bool anIsModified = true;
   if(mySMESHDSMesh)
   {
-    if ( MYDEBUG ) MESSAGE("Update mySMESHDSMesh");
+    MESSAGE("Update mySMESHDSMesh");
     SMESHDS_Script* aScript = mySMESHDSMesh->GetScript();
     anIsModified = aScript->IsModified();
     aScript->SetModified(false);
   }
   else
   {
-    if ( MYDEBUG ) MESSAGE("Update CORBA");
+    MESSAGE("Update CORBA");
     SMESH::log_array_var aSeq = myMeshServer->GetLog( theIsClear );
     CORBA::Long aLength = aSeq->length();
     anIsModified = aLength > 0;
-    if ( MYDEBUG ) MESSAGE( "Update: length of the script is "<<aLength );
+    MESSAGE( "Update: length of the script is "<<aLength );
 
     if ( !anIsModified )
       return false;
@@ -1009,7 +1015,7 @@ SMESH_Client::Update(bool theIsClear)
       INFOS("Unknown exception was cought !!!");
     }
 
-    if ( MYDEBUG && mySMDSMesh )
+    if (mySMDSMesh )
     {
       MESSAGE("Update - mySMDSMesh->NbNodes() = "<<mySMDSMesh->NbNodes());
       MESSAGE("Update - mySMDSMesh->Nb0DElements() = "<<mySMDSMesh->Nb0DElements());
index 64966f79484e9417f4708054153bc200a43ebc17..4fa82fbc7da3649f49b9561b55d56df18dfaa63a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 7a23f11b857bfcb4056c0f61e1000771efea2558..4d058b84da8cb3aacb52f215b6ae89bc24e3892e 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index e5e4002c812f0cb5ed353b69256ecdb3acb103db..ec1e293bb638c37effa2d3bf1f9524b3de191bbc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -52,7 +52,7 @@ SMESHDS_Command::~SMESHDS_Command()
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::AddNode(int NewNodeID, double x, double y, double z)
+void SMESHDS_Command::AddNode(smIdType NewNodeID, double x, double y, double z)
 {
         if ( myType != SMESHDS_AddNode)
         {
@@ -70,7 +70,7 @@ void SMESHDS_Command::AddNode(int NewNodeID, double x, double y, double z)
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::MoveNode(int NodeID, double x, double y, double z)
+void SMESHDS_Command::MoveNode(smIdType NodeID, double x, double y, double z)
 {
         if ( myType != SMESHDS_MoveNode)
         {
@@ -88,7 +88,7 @@ void SMESHDS_Command::MoveNode(int NodeID, double x, double y, double z)
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::Add0DElement(int New0DElementID, int idnode)
+void SMESHDS_Command::Add0DElement(smIdType New0DElementID, smIdType idnode)
 {
   if ( myType != SMESHDS_Add0DElement)
   {
@@ -104,7 +104,7 @@ void SMESHDS_Command::Add0DElement(int New0DElementID, int idnode)
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::AddEdge(int NewEdgeID, int idnode1, int idnode2)
+void SMESHDS_Command::AddEdge(smIdType NewEdgeID, smIdType idnode1, smIdType idnode2)
 {
         if ( myType != SMESHDS_AddEdge)
         {
@@ -121,8 +121,8 @@ void SMESHDS_Command::AddEdge(int NewEdgeID, int idnode1, int idnode2)
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::AddFace(int NewFaceID,
-        int idnode1, int idnode2, int idnode3)
+void SMESHDS_Command::AddFace(smIdType NewFaceID,
+        smIdType idnode1, smIdType idnode2, smIdType idnode3)
 {
         if ( myType != SMESHDS_AddTriangle)
         {
@@ -140,8 +140,8 @@ void SMESHDS_Command::AddFace(int NewFaceID,
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::AddFace(int NewFaceID,
-        int idnode1, int idnode2, int idnode3, int idnode4)
+void SMESHDS_Command::AddFace(smIdType NewFaceID,
+        smIdType idnode1, smIdType idnode2, smIdType idnode3, smIdType idnode4)
 {
         if ( myType != SMESHDS_AddQuadrangle)
         {
@@ -160,8 +160,8 @@ void SMESHDS_Command::AddFace(int NewFaceID,
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::AddVolume(int NewVolID,
-        int idnode1, int idnode2, int idnode3, int idnode4)
+void SMESHDS_Command::AddVolume(smIdType NewVolID,
+        smIdType idnode1, smIdType idnode2, smIdType idnode3, smIdType idnode4)
 {
         if ( myType != SMESHDS_AddTetrahedron)
         {
@@ -180,8 +180,8 @@ void SMESHDS_Command::AddVolume(int NewVolID,
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::AddVolume(int NewVolID,
-        int idnode1, int idnode2, int idnode3, int idnode4, int idnode5)
+void SMESHDS_Command::AddVolume(smIdType NewVolID,
+        smIdType idnode1, smIdType idnode2, smIdType idnode3, smIdType idnode4, smIdType idnode5)
 {
         if ( myType != SMESHDS_AddPyramid)
         {
@@ -201,9 +201,9 @@ void SMESHDS_Command::AddVolume(int NewVolID,
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::AddVolume(int NewVolID,
-        int idnode1,
-        int idnode2, int idnode3, int idnode4, int idnode5, int idnode6)
+void SMESHDS_Command::AddVolume(smIdType NewVolID,
+        smIdType idnode1,
+        smIdType idnode2, smIdType idnode3, smIdType idnode4, smIdType idnode5, smIdType idnode6)
 {
         if ( myType != SMESHDS_AddPrism)
         {
@@ -224,11 +224,11 @@ void SMESHDS_Command::AddVolume(int NewVolID,
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::AddVolume(int NewVolID,
-        int idnode1,
-        int idnode2,
-        int idnode3,
-        int idnode4, int idnode5, int idnode6, int idnode7, int idnode8)
+void SMESHDS_Command::AddVolume(smIdType NewVolID,
+        smIdType idnode1,
+        smIdType idnode2,
+        smIdType idnode3,
+        smIdType idnode4, smIdType idnode5, smIdType idnode6, smIdType idnode7, smIdType idnode8)
 {
         if ( myType != SMESHDS_AddHexahedron)
         {
@@ -247,10 +247,10 @@ void SMESHDS_Command::AddVolume(int NewVolID,
         myNumber++;
 }
 
-void SMESHDS_Command::AddVolume(int NewVolID,
-                                int idnode1,int idnode2,int idnode3,int idnode4,
-                                int idnode5, int idnode6, int idnode7, int idnode8,
-                                int idnode9, int idnode10, int idnode11, int idnode12)
+void SMESHDS_Command::AddVolume(smIdType NewVolID,
+                                smIdType idnode1,smIdType idnode2,smIdType idnode3,smIdType idnode4,
+                                smIdType idnode5, smIdType idnode6, smIdType idnode7, smIdType idnode8,
+                                smIdType idnode9, smIdType idnode10, smIdType idnode11, smIdType idnode12)
 {
   if (myType != SMESHDS_AddHexagonalPrism)
   {
@@ -277,8 +277,8 @@ void SMESHDS_Command::AddVolume(int NewVolID,
 //function : AddPolygonalFace
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::AddPolygonalFace (const int               ElementID,
-                                        const std::vector<int>& nodes_ids)
+void SMESHDS_Command::AddPolygonalFace (const smIdType               ElementID,
+                                        const std::vector<smIdType>& nodes_ids)
 {
   if ( myType != SMESHDS_AddPolygon) {
     MESSAGE("SMESHDS_Command::AddPolygonalFace : Bad Type");
@@ -286,7 +286,7 @@ void SMESHDS_Command::AddPolygonalFace (const int               ElementID,
   }
   myIntegers.push_back(ElementID);
 
-  int i, nbNodes = nodes_ids.size();
+  smIdType i, nbNodes = nodes_ids.size();
   myIntegers.push_back(nbNodes);
   for (i = 0; i < nbNodes; i++) {
     myIntegers.push_back(nodes_ids[i]);
@@ -299,8 +299,8 @@ void SMESHDS_Command::AddPolygonalFace (const int               ElementID,
 //function : AddQuadPolygonalFace
 //purpose  :
 //=======================================================================
-void SMESHDS_Command::AddQuadPolygonalFace (const int               ElementID,
-                                            const std::vector<int>& nodes_ids)
+void SMESHDS_Command::AddQuadPolygonalFace (const smIdType               ElementID,
+                                            const std::vector<smIdType>& nodes_ids)
 {
   if ( myType != SMESHDS_AddQuadPolygon) {
     MESSAGE("SMESHDS_Command::AddQuadraticPolygonalFace : Bad Type");
@@ -308,7 +308,7 @@ void SMESHDS_Command::AddQuadPolygonalFace (const int               ElementID,
   }
   myIntegers.push_back(ElementID);
 
-  int i, nbNodes = nodes_ids.size();
+  smIdType i, nbNodes = nodes_ids.size();
   myIntegers.push_back(nbNodes);
   for (i = 0; i < nbNodes; i++) {
     myIntegers.push_back(nodes_ids[i]);
@@ -321,9 +321,9 @@ void SMESHDS_Command::AddQuadPolygonalFace (const int               ElementID,
 //function : AddPolyhedralVolume
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::AddPolyhedralVolume (const int               ElementID,
-                                           const std::vector<int>& nodes_ids,
-                                           const std::vector<int>& quantities)
+void SMESHDS_Command::AddPolyhedralVolume (const smIdType               ElementID,
+                                           const std::vector<smIdType>& nodes_ids,
+                                           const std::vector<int>&      quantities)
 {
   if ( myType != SMESHDS_AddPolyhedron) {
     MESSAGE("SMESHDS_Command::AddPolyhedralVolume : Bad Type");
@@ -331,13 +331,13 @@ void SMESHDS_Command::AddPolyhedralVolume (const int               ElementID,
   }
   myIntegers.push_back(ElementID);
 
-  int i, nbNodes = nodes_ids.size();
+  smIdType i, nbNodes = nodes_ids.size();
   myIntegers.push_back(nbNodes);
   for (i = 0; i < nbNodes; i++) {
     myIntegers.push_back(nodes_ids[i]);
   }
 
-  int nbFaces = quantities.size();
+  smIdType nbFaces = quantities.size();
   myIntegers.push_back(nbFaces);
   for (i = 0; i < nbFaces; i++) {
     myIntegers.push_back(quantities[i]);
@@ -350,7 +350,7 @@ void SMESHDS_Command::AddPolyhedralVolume (const int               ElementID,
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::RemoveNode(int NodeID)
+void SMESHDS_Command::RemoveNode(smIdType NodeID)
 {
         if ( myType != SMESHDS_RemoveNode)
         {
@@ -365,7 +365,7 @@ void SMESHDS_Command::RemoveNode(int NodeID)
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::RemoveElement(int ElementID)
+void SMESHDS_Command::RemoveElement(smIdType ElementID)
 {
         if ( myType != SMESHDS_RemoveElement)
         {
@@ -381,7 +381,7 @@ void SMESHDS_Command::RemoveElement(int ElementID)
 //purpose  : 
 //=======================================================================
 
-void SMESHDS_Command::ChangeElementNodes(int ElementID, int nodes[], int nbnodes)
+void SMESHDS_Command::ChangeElementNodes(smIdType ElementID, smIdType nodes[], smIdType nbnodes)
 {
   if ( myType != SMESHDS_ChangeElementNodes)
   {
@@ -390,7 +390,7 @@ void SMESHDS_Command::ChangeElementNodes(int ElementID, int nodes[], int nbnodes
   }
   myIntegers.push_back(ElementID);
   myIntegers.push_back(nbnodes);
-  for ( int i = 0; i < nbnodes; i++ )
+  for ( smIdType i = 0; i < nbnodes; i++ )
     myIntegers.push_back( nodes[ i ] );
 
   myNumber++;
@@ -400,8 +400,8 @@ void SMESHDS_Command::ChangeElementNodes(int ElementID, int nodes[], int nbnodes
 //function : ChangePolyhedronNodes
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::ChangePolyhedronNodes (const int               ElementID,
-                                             const std::vector<int>& nodes_ids,
+void SMESHDS_Command::ChangePolyhedronNodes (const smIdType               ElementID,
+                                             const std::vector<smIdType>& nodes_ids,
                                              const std::vector<int>& quantities)
 {
   if (myType != SMESHDS_ChangePolyhedronNodes)
@@ -411,7 +411,7 @@ void SMESHDS_Command::ChangePolyhedronNodes (const int               ElementID,
   }
   myIntegers.push_back(ElementID);
 
-  int i, nbNodes = nodes_ids.size();
+  smIdType i, nbNodes = nodes_ids.size();
   myIntegers.push_back(nbNodes);
   for (i = 0; i < nbNodes; i++) {
     myIntegers.push_back(nodes_ids[i]);
@@ -431,7 +431,7 @@ void SMESHDS_Command::ChangePolyhedronNodes (const int               ElementID,
 //purpose  : 
 //=======================================================================
 
-void SMESHDS_Command::Renumber (const bool isNodes, const int startID, const int deltaID)
+void SMESHDS_Command::Renumber (const bool isNodes, const smIdType startID, const smIdType deltaID)
 {
   if ( myType != SMESHDS_Renumber)
   {
@@ -457,7 +457,7 @@ SMESHDS_CommandType SMESHDS_Command::GetType()
 //function : 
 //purpose  : 
 //=======================================================================
-int SMESHDS_Command::GetNumber()
+smIdType SMESHDS_Command::GetNumber()
 {
         return myNumber;
 }
@@ -466,7 +466,7 @@ int SMESHDS_Command::GetNumber()
 //function : 
 //purpose  : 
 //=======================================================================
-const list < int >&SMESHDS_Command::GetIndexes()
+const list < smIdType >&SMESHDS_Command::GetIndexes()
 {
         return myIntegers;
 }
@@ -489,7 +489,7 @@ const list < double >&SMESHDS_Command::GetCoords()
 //function : AddEdge
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::AddEdge(int NewEdgeID, int n1, int n2, int n12)
+void SMESHDS_Command::AddEdge(smIdType NewEdgeID, smIdType n1, smIdType n2, smIdType n12)
 {
   if ( myType != SMESHDS_AddQuadEdge) {
     MESSAGE("SMESHDS_Command::AddEdge : Bad Type");
@@ -506,9 +506,9 @@ void SMESHDS_Command::AddEdge(int NewEdgeID, int n1, int n2, int n12)
 //function : AddFace
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::AddFace(int NewFaceID,
-                              int n1, int n2, int n3,
-                              int n12, int n23, int n31)
+void SMESHDS_Command::AddFace(smIdType NewFaceID,
+                              smIdType n1, smIdType n2, smIdType n3,
+                              smIdType n12, smIdType n23, smIdType n31)
 {
   if ( myType != SMESHDS_AddQuadTriangle) {
     MESSAGE("SMESHDS_Command::AddFace : Bad Type");
@@ -528,9 +528,9 @@ void SMESHDS_Command::AddFace(int NewFaceID,
 //function : AddFace
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::AddFace(int NewFaceID,
-                              int n1, int n2, int n3,
-                              int n12, int n23, int n31, int nCenter)
+void SMESHDS_Command::AddFace(smIdType NewFaceID,
+                              smIdType n1, smIdType n2, smIdType n3,
+                              smIdType n12, smIdType n23, smIdType n31, smIdType nCenter)
 {
   if ( myType != SMESHDS_AddBiQuadTriangle) {
     MESSAGE("SMESHDS_Command::AddFace : Bad Type");
@@ -551,9 +551,9 @@ void SMESHDS_Command::AddFace(int NewFaceID,
 //function : AddFace
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::AddFace(int NewFaceID,
-                              int n1, int n2, int n3, int n4,
-                              int n12, int n23, int n34, int n41)
+void SMESHDS_Command::AddFace(smIdType NewFaceID,
+                              smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                              smIdType n12, smIdType n23, smIdType n34, smIdType n41)
 {
   if ( myType != SMESHDS_AddQuadQuadrangle) {
     MESSAGE("SMESHDS_Command::AddFace : Bad Type");
@@ -575,9 +575,9 @@ void SMESHDS_Command::AddFace(int NewFaceID,
 //function : AddFace
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::AddFace(int NewFaceID,
-                              int n1, int n2, int n3, int n4,
-                              int n12, int n23, int n34, int n41, int nCenter)
+void SMESHDS_Command::AddFace(smIdType NewFaceID,
+                              smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                              smIdType n12, smIdType n23, smIdType n34, smIdType n41, smIdType nCenter)
 {
   if (myType != SMESHDS_AddBiQuadQuadrangle) {
     MESSAGE("SMESHDS_Command::AddFace : Bad Type");
@@ -600,9 +600,9 @@ void SMESHDS_Command::AddFace(int NewFaceID,
 //function : AddVolume
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
-                                int n12, int n23, int n31,
-                                int n14, int n24, int n34)
+void SMESHDS_Command::AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                smIdType n12, smIdType n23, smIdType n31,
+                                smIdType n14, smIdType n24, smIdType n34)
 {
   if ( myType != SMESHDS_AddQuadTetrahedron) {
     MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
@@ -626,10 +626,10 @@ void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
 //function : AddVolume
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2,
-                                int n3, int n4, int n5,
-                                int n12, int n23, int n34, int n41,
-                                int n15, int n25, int n35, int n45)
+void SMESHDS_Command::AddVolume(smIdType NewVolID, smIdType n1, smIdType n2,
+                                smIdType n3, smIdType n4, smIdType n5,
+                                smIdType n12, smIdType n23, smIdType n34, smIdType n41,
+                                smIdType n15, smIdType n25, smIdType n35, smIdType n45)
 {
   if ( myType != SMESHDS_AddQuadPyramid) {
     MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
@@ -656,11 +656,11 @@ void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2,
 //function : AddVolume
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2,
-                                int n3, int n4, int n5,int n6,
-                                int n12, int n23, int n31,
-                                int n45, int n56, int n64,
-                                int n14, int n25, int n36)
+void SMESHDS_Command::AddVolume(smIdType NewVolID, smIdType n1, smIdType n2,
+                                smIdType n3, smIdType n4, smIdType n5,smIdType n6,
+                                smIdType n12, smIdType n23, smIdType n31,
+                                smIdType n45, smIdType n56, smIdType n64,
+                                smIdType n14, smIdType n25, smIdType n36)
 {
   if ( myType != SMESHDS_AddQuadPentahedron) {
     MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
@@ -688,12 +688,12 @@ void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2,
 //function : AddVolume
 //purpose  :
 //=======================================================================
-void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2,
-                                int n3, int n4, int n5,int n6,
-                                int n12, int n23, int n31,
-                                int n45, int n56, int n64,
-                                int n14, int n25, int n36,
-                                int n1245, int n2356, int n1346)
+void SMESHDS_Command::AddVolume(smIdType NewVolID, smIdType n1, smIdType n2,
+                                smIdType n3, smIdType n4, smIdType n5,smIdType n6,
+                                smIdType n12, smIdType n23, smIdType n31,
+                                smIdType n45, smIdType n56, smIdType n64,
+                                smIdType n14, smIdType n25, smIdType n36,
+                                smIdType n1245, smIdType n2356, smIdType n1346)
 {
   if ( myType != SMESHDS_AddBiQuadPentahedron) {
     MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
@@ -726,11 +726,11 @@ void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2,
 //function : AddVolume
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3,
-                                int n4, int n5, int n6, int n7, int n8,
-                                int n12, int n23, int n34, int n41,
-                                int n56, int n67, int n78, int n85,
-                                int n15, int n26, int n37, int n48)
+void SMESHDS_Command::AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3,
+                                smIdType n4, smIdType n5, smIdType n6, smIdType n7, smIdType n8,
+                                smIdType n12, smIdType n23, smIdType n34, smIdType n41,
+                                smIdType n56, smIdType n67, smIdType n78, smIdType n85,
+                                smIdType n15, smIdType n26, smIdType n37, smIdType n48)
 {
   if ( myType != SMESHDS_AddQuadHexahedron) {
     MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
@@ -764,13 +764,13 @@ void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3,
 //function : AddVolume
 //purpose  : 
 //=======================================================================
-void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3,
-                                int n4, int n5, int n6, int n7, int n8,
-                                int n12, int n23, int n34, int n41,
-                                int n56, int n67, int n78, int n85,
-                                int n15, int n26, int n37, int n48,
-                                int n1234,int n1256,int n2367,int n3478,
-                                int n1458,int n5678,int nCenter)
+void SMESHDS_Command::AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3,
+                                smIdType n4, smIdType n5, smIdType n6, smIdType n7, smIdType n8,
+                                smIdType n12, smIdType n23, smIdType n34, smIdType n41,
+                                smIdType n56, smIdType n67, smIdType n78, smIdType n85,
+                                smIdType n15, smIdType n26, smIdType n37, smIdType n48,
+                                smIdType n1234,smIdType n1256,smIdType n2367,smIdType n3478,
+                                smIdType n1458,smIdType n5678,smIdType nCenter)
 {
   if ( myType != SMESHDS_AddTriQuadHexa) {
     MESSAGE("SMESHDS_Command::AddVolume : Bad Type");
@@ -813,7 +813,7 @@ void SMESHDS_Command::AddVolume(int NewVolID, int n1, int n2, int n3,
  */
 //================================================================================
 
-void SMESHDS_Command::AddBall(int NewBallID, int node, double diameter)
+void SMESHDS_Command::AddBall(smIdType NewBallID, smIdType node, double diameter)
 {
   if ( myType != SMESHDS_AddBall)
   {
index 8c0c3a81b264b844264c606b3b67e98d761308d2..955de27942b5b3fefcaf15a5b30e517d5161247d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -30,6 +30,7 @@
 #include "SMESH_SMESHDS.hxx"
 
 #include "SMESHDS_CommandType.hxx"
+#include <smIdType.hxx>
 #include <list>
 #include <vector>
 
@@ -38,87 +39,87 @@ class SMESHDS_EXPORT SMESHDS_Command
 
   public:
         SMESHDS_Command(const SMESHDS_CommandType aType);
-        void AddNode(int NewNodeID, double x, double y, double z);
-        void Add0DElement(int New0DElementID, int idnode);
-        void AddEdge(int NewEdgeID, int idnode1, int idnode2);
-        void AddFace(int NewFaceID, int idnode1, int idnode2, int idnode3);
-        void AddFace(int NewFaceID, int idnode1, int idnode2, int idnode3,
-                     int idnode4);
-        void AddVolume(int NewVolID, int idnode1, int idnode2, int idnode3,
-                       int idnode4);
-        void AddVolume(int NewVolID, int idnode1, int idnode2, int idnode3,
-                       int idnode4, int idnode5);
-        void AddVolume(int NewVolID, int idnode1, int idnode2, int idnode3,
-                       int idnode4, int idnode5, int idnode6);
-        void AddVolume(int NewVolID, int idnode1, int idnode2, int idnode3,
-                       int idnode4, int idnode5, int idnode6, int idnode7, int idnode8);
-        void AddVolume(int NewVolID, int idnode1, int idnode2, int idnode3,
-                       int idnode4, int idnode5, int idnode6, int idnode7, int idnode8,
-                       int idnode9, int idnode10, int idnode11, int idnode12);
-        void AddPolygonalFace (const int               ElementID,
-                               const std::vector<int>& nodes_ids);
-        void AddQuadPolygonalFace (const int               ElementID,
-                                   const std::vector<int>& nodes_ids);
-        void AddPolyhedralVolume (const int               ElementID,
-                                  const std::vector<int>& nodes_ids,
-                                  const std::vector<int>& quantities);
-        void AddBall(int NewBallID, int node, double diameter);
+        void AddNode(smIdType NewNodeID, double x, double y, double z);
+        void Add0DElement(smIdType New0DElementID, smIdType idnode);
+        void AddEdge(smIdType NewEdgeID, smIdType idnode1, smIdType idnode2);
+        void AddFace(smIdType NewFaceID, smIdType idnode1, smIdType idnode2, smIdType idnode3);
+        void AddFace(smIdType NewFaceID, smIdType idnode1, smIdType idnode2, smIdType idnode3,
+                     smIdType idnode4);
+        void AddVolume(smIdType NewVolID, smIdType idnode1, smIdType idnode2, smIdType idnode3,
+                       smIdType idnode4);
+        void AddVolume(smIdType NewVolID, smIdType idnode1, smIdType idnode2, smIdType idnode3,
+                       smIdType idnode4, smIdType idnode5);
+        void AddVolume(smIdType NewVolID, smIdType idnode1, smIdType idnode2, smIdType idnode3,
+                       smIdType idnode4, smIdType idnode5, smIdType idnode6);
+        void AddVolume(smIdType NewVolID, smIdType idnode1, smIdType idnode2, smIdType idnode3,
+                       smIdType idnode4, smIdType idnode5, smIdType idnode6, smIdType idnode7, smIdType idnode8);
+        void AddVolume(smIdType NewVolID, smIdType idnode1, smIdType idnode2, smIdType idnode3,
+                       smIdType idnode4, smIdType idnode5, smIdType idnode6, smIdType idnode7, smIdType idnode8,
+                       smIdType idnode9, smIdType idnode10, smIdType idnode11, smIdType idnode12);
+        void AddPolygonalFace (const smIdType               ElementID,
+                               const std::vector<smIdType>& nodes_ids);
+        void AddQuadPolygonalFace (const smIdType               ElementID,
+                                   const std::vector<smIdType>& nodes_ids);
+        void AddPolyhedralVolume (const smIdType               ElementID,
+                                  const std::vector<smIdType>& nodes_ids,
+                                  const std::vector<int>&      quantities);
+        void AddBall(smIdType NewBallID, smIdType node, double diameter);
         // special methods for quadratic elements
-        void AddEdge(int NewEdgeID, int n1, int n2, int n12);
-        void AddFace(int NewFaceID, int n1, int n2, int n3,
-                     int n12, int n23, int n31);
-        void AddFace(int NewFaceID, int n1, int n2, int n3,
-                     int n12, int n23, int n31, int nCenter);
-        void AddFace(int NewFaceID, int n1, int n2, int n3, int n4,
-                     int n12, int n23, int n34, int n41);
-        void AddFace(int NewFaceID, int n1, int n2, int n3, int n4,
-                     int n12, int n23, int n34, int n41, int nCenter);
-        void AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
-                       int n12, int n23, int n31, int n14, int n24, int n34);
-        void AddVolume(int NewVolID, int n1, int n2, int n3, int n4, int n5,
-                       int n12, int n23, int n34, int n41,
-                       int n15, int n25, int n35, int n45);
-        void AddVolume(int NewVolID, int n1, int n2, int n3,
-                       int n4, int n5, int n6,
-                       int n12, int n23, int n31,
-                       int n45, int n56, int n64,
-                       int n14, int n25, int n36);
-        void AddVolume(int NewVolID, int n1, int n2, int n3,
-                       int n4, int n5, int n6,
-                       int n12, int n23, int n31,
-                       int n45, int n56, int n64,
-                       int n14, int n25, int n36,
-                       int n1245, int n2356, int n1346);
-        void AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
-                       int n5,  int n6,  int n7,  int n8,
-                       int n12, int n23, int n34, int n41,
-                       int n56, int n67, int n78, int n85,
-                       int n15, int n26, int n37, int n48);
-        void AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
-                       int n5,  int n6,  int n7,  int n8,
-                       int n12, int n23, int n34, int n41,
-                       int n56, int n67, int n78, int n85,
-                       int n15, int n26, int n37, int n48,
-                       int n1234,int n1256,int n2367,int n3478,
-                       int n1458,int n5678,int nCenter);
+        void AddEdge(smIdType NewEdgeID, smIdType n1, smIdType n2, smIdType n12);
+        void AddFace(smIdType NewFaceID, smIdType n1, smIdType n2, smIdType n3,
+                     smIdType n12, smIdType n23, smIdType n31);
+        void AddFace(smIdType NewFaceID, smIdType n1, smIdType n2, smIdType n3,
+                     smIdType n12, smIdType n23, smIdType n31, smIdType nCenter);
+        void AddFace(smIdType NewFaceID, smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                     smIdType n12, smIdType n23, smIdType n34, smIdType n41);
+        void AddFace(smIdType NewFaceID, smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                     smIdType n12, smIdType n23, smIdType n34, smIdType n41, smIdType nCenter);
+        void AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                       smIdType n12, smIdType n23, smIdType n31, smIdType n14, smIdType n24, smIdType n34);
+        void AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3, smIdType n4, smIdType n5,
+                       smIdType n12, smIdType n23, smIdType n34, smIdType n41,
+                       smIdType n15, smIdType n25, smIdType n35, smIdType n45);
+        void AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3,
+                       smIdType n4, smIdType n5, smIdType n6,
+                       smIdType n12, smIdType n23, smIdType n31,
+                       smIdType n45, smIdType n56, smIdType n64,
+                       smIdType n14, smIdType n25, smIdType n36);
+        void AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3,
+                       smIdType n4, smIdType n5, smIdType n6,
+                       smIdType n12, smIdType n23, smIdType n31,
+                       smIdType n45, smIdType n56, smIdType n64,
+                       smIdType n14, smIdType n25, smIdType n36,
+                       smIdType n1245, smIdType n2356, smIdType n1346);
+        void AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                       smIdType n5,  smIdType n6,  smIdType n7,  smIdType n8,
+                       smIdType n12, smIdType n23, smIdType n34, smIdType n41,
+                       smIdType n56, smIdType n67, smIdType n78, smIdType n85,
+                       smIdType n15, smIdType n26, smIdType n37, smIdType n48);
+        void AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                       smIdType n5,  smIdType n6,  smIdType n7,  smIdType n8,
+                       smIdType n12, smIdType n23, smIdType n34, smIdType n41,
+                       smIdType n56, smIdType n67, smIdType n78, smIdType n85,
+                       smIdType n15, smIdType n26, smIdType n37, smIdType n48,
+                       smIdType n1234,smIdType n1256,smIdType n2367,smIdType n3478,
+                       smIdType n1458,smIdType n5678,smIdType nCenter);
         
-        void MoveNode(int NewNodeID, double x, double y, double z);
-        void RemoveNode(int NodeID);
-        void RemoveElement(int ElementID);
-        void ChangeElementNodes(int ElementID, int nodes[], int nbnodes);
-        void ChangePolyhedronNodes(const int               ElementID,
-                                   const std::vector<int>& nodes_ids,
+        void MoveNode(smIdType NewNodeID, double x, double y, double z);
+        void RemoveNode(smIdType NodeID);
+        void RemoveElement(smIdType ElementID);
+        void ChangeElementNodes(smIdType ElementID, smIdType nodes[], smIdType nbnodes);
+        void ChangePolyhedronNodes(const smIdType               ElementID,
+                                   const std::vector<smIdType>& nodes_ids,
                                    const std::vector<int>& quantities);
-        void Renumber (const bool isNodes, const int startID, const int deltaID);
+        void Renumber (const bool isNodes, const smIdType startID, const smIdType deltaID);
         SMESHDS_CommandType GetType();
-        int GetNumber();
-        const std::list<int> & GetIndexes();
+        smIdType GetNumber();
+        const std::list<smIdType> & GetIndexes();
         const std::list<double> & GetCoords();
          ~SMESHDS_Command();
   private:
         SMESHDS_CommandType myType;
         int myNumber;
         std::list<double> myReals;
-        std::list<int> myIntegers;
+        std::list<smIdType> myIntegers;
 };
 #endif
index cf06f4a1992a3965f56aec010115263089b20282..58b706714edf008f1cea3f819df1ca12a0f22b93 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index ef4ff9b572fab96d02ff06adebd505b324ebf69d..200ac29c6b0687b61ebab57519703e281f6bae2c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 4089dcbdf827df434cd0effddb328a1775978c55..7eff635ca1566fc8185687cdecd0de623d2212c0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index b19861a7c72d3eb8bb3c191c903d5d78ee9831b5..6d253b1fcc60f3d456cea1cc69fdb047a73927f7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 4554e5adca1d0eead594716ed838256ab7f32594..8fb6ae6e062a5120ccbecd0682d1049cc2430abd 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -45,7 +45,7 @@ SMESHDS_Group::SMESHDS_Group (const int                 theID,
 //purpose  : 
 //=======================================================================
 
-int SMESHDS_Group::Extent() const
+smIdType SMESHDS_Group::Extent() const
 {
   return myGroup.Extent();
 }
@@ -66,7 +66,7 @@ bool SMESHDS_Group::IsEmpty()
  */
 //=============================================================================
 
-bool SMESHDS_Group::Contains (const int theID)
+bool SMESHDS_Group::Contains (const smIdType theID)
 {
   const SMDS_MeshElement* aElem = findInMesh (theID);
   if (aElem)
@@ -92,7 +92,7 @@ bool SMESHDS_Group::Contains (const SMDS_MeshElement* elem)
  */
 //=============================================================================
 
-bool SMESHDS_Group::Add (const int theID)
+bool SMESHDS_Group::Add (const smIdType theID)
 {
   return Add( findInMesh( theID ));
 }
@@ -121,7 +121,7 @@ bool SMESHDS_Group::Add (const SMDS_MeshElement* aElem )
  */
 //=============================================================================
 
-bool SMESHDS_Group::Remove (const int theID)
+bool SMESHDS_Group::Remove (const smIdType theID)
 {
   bool removed = false;
   if ( const SMDS_MeshElement* aElem = findInMesh( theID ))
index c17705ab83c4a930063788e42736f609ba8d07c5..d7a2b0c7e9bdc284417b745ddb97dda957004ec0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -46,11 +46,11 @@ class SMESHDS_EXPORT SMESHDS_Group : public SMESHDS_GroupBase
 
   virtual void SetType(SMDSAbs_ElementType theType);
 
-  virtual int Extent() const;
+  virtual smIdType Extent() const;
 
   virtual bool IsEmpty();
 
-  virtual bool Contains (const int theID);
+  virtual bool Contains (const smIdType theID);
 
   virtual bool Contains (const SMDS_MeshElement* elem);
 
@@ -58,11 +58,11 @@ class SMESHDS_EXPORT SMESHDS_Group : public SMESHDS_GroupBase
 
   virtual int GetTic() const;
 
-  bool Add (const int theID);
+  bool Add (const smIdType theID);
 
   bool Add (const SMDS_MeshElement* theElem );
 
-  bool Remove (const int theID);
+  bool Remove (const smIdType theID);
 
   void Clear();
 
index 50ac2ee748e09f96756ada094b685c4dd0c3026a..cc133c45599ad7a07c79558ae7f3c7fb0158fe96 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -55,7 +55,7 @@ SMESHDS_GroupBase::SMESHDS_GroupBase (const int                 theID,
  */
 //=============================================================================
 
-int SMESHDS_GroupBase::GetID (const int theIndex)
+smIdType SMESHDS_GroupBase::GetID (const int theIndex)
 {
   if (myCurIndex < 1 || myCurIndex > theIndex) {
     myIterator = GetElements();
@@ -75,7 +75,7 @@ int SMESHDS_GroupBase::GetID (const int theIndex)
  */
 //=============================================================================
 
-const SMDS_MeshElement* SMESHDS_GroupBase::findInMesh (const int theID) const
+const SMDS_MeshElement* SMESHDS_GroupBase::findInMesh (const smIdType theID) const
 {
   SMDSAbs_ElementType aType = GetType();
   const SMDS_MeshElement* aElem = NULL;
@@ -107,10 +107,10 @@ void SMESHDS_GroupBase::resetIterator()
 //purpose  : 
 //=======================================================================
 
-int SMESHDS_GroupBase::Extent() const
+smIdType SMESHDS_GroupBase::Extent() const
 {
   SMDS_ElemIteratorPtr it = GetElements();
-  int nb = 0;
+  smIdType nb = 0;
   if ( it )
     for ( ; it->more(); it->next() ) 
       nb++;
@@ -136,7 +136,7 @@ bool SMESHDS_GroupBase::IsEmpty()
 //purpose  : 
 //=======================================================================
 
-bool SMESHDS_GroupBase::Contains (const int theID)
+bool SMESHDS_GroupBase::Contains (const smIdType theID)
 {
   if ( SMDS_ElemIteratorPtr it = GetElements() ) {
     while ( it->more() )
@@ -184,9 +184,9 @@ void SMESHDS_GroupBase::SetColorGroup(int theColorGroup)
   if ( aR < 0. || aR > 1. || // PAL19395
        aG < 0. || aG > 1. ||
        aB < 0. || aB > 1. )
-// #ifdef _DEBUG_
-//     cout << "SMESHDS_GroupBase::SetColorGroup("<<theColorGroup<<"), invalid color ignored"<<endl;
-// #endif
+// if (SALOME::VerbosityActivated())
+//  cout << "SMESHDS_GroupBase::SetColorGroup("<<theColorGroup<<"), invalid color ignored"<<endl;
+
     return;
   Quantity_Color aColor( aR, aG, aB, Quantity_TOC_RGB );
   SetColor( aColor );
index f08b8a28908cd88ec18184f7296351a718093f11..7814d078781c33a3a18ef39f2420165b43cf8cb4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -58,17 +58,17 @@ class SMESHDS_EXPORT SMESHDS_GroupBase
 
   const char* GetStoreName () const { return myStoreName.c_str(); }
 
-  virtual int Extent() const;
+  virtual smIdType Extent() const;
 
   virtual bool IsEmpty();
 
-  virtual bool Contains (const int theID);
+  virtual bool Contains (const smIdType theID);
 
   virtual bool Contains (const SMDS_MeshElement* elem);
 
   virtual SMDS_ElemIteratorPtr GetElements() const = 0;
 
-  virtual int GetID (const int theIndex);
+  virtual smIdType GetID (const int theIndex);
   // DON'T use it for iterations 1..Extent()
 
   virtual int GetTic() const = 0;
@@ -89,7 +89,7 @@ class SMESHDS_EXPORT SMESHDS_GroupBase
   { myDefaultColor = theColor;}
 
  protected:
-  const SMDS_MeshElement* findInMesh (const int theID) const;
+  const SMDS_MeshElement* findInMesh (const smIdType theID) const;
   void resetIterator();
 
  private:
@@ -105,8 +105,8 @@ class SMESHDS_EXPORT SMESHDS_GroupBase
   Quantity_Color       myColor;
 
   // for GetID()
-  int                  myCurIndex;
-  int                  myCurID;
+  smIdType             myCurIndex;
+  smIdType             myCurID;
   SMDS_ElemIteratorPtr myIterator;
 
   static Quantity_Color myDefaultColor;
index 3d8f98fc993ffbc6e96cda6c1b2e855a8926c8c8..d8ea06fdac80901e5ac6c4349b697fb5c3af35ee 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -79,7 +79,7 @@ void SMESHDS_GroupOnFilter::SetPredicate( const SMESH_PredicatePtr& thePredicate
  */
 //================================================================================
 
-int SMESHDS_GroupOnFilter::Extent() const
+smIdType SMESHDS_GroupOnFilter::Extent() const
 {
   update();
   return std::accumulate( myMeshInfo.begin(), myMeshInfo.end(), 0 );
@@ -120,7 +120,7 @@ bool SMESHDS_GroupOnFilter::IsEmpty()
  */
 //================================================================================
 
-bool SMESHDS_GroupOnFilter::Contains (const int theID)
+bool SMESHDS_GroupOnFilter::Contains (const smIdType theID)
 {
   return myPredicate && myPredicate->IsSatisfy( theID );
 }
@@ -288,7 +288,7 @@ SMDS_ElemIteratorPtr SMESHDS_GroupOnFilter::GetElements() const
  */
 //================================================================================
 
-std::vector< int > SMESHDS_GroupOnFilter::GetMeshInfo() const
+std::vector< smIdType > SMESHDS_GroupOnFilter::GetMeshInfo() const
 {
   update();
   return myMeshInfo;
@@ -315,7 +315,7 @@ int SMESHDS_GroupOnFilter::getElementIds( void* ids, size_t idSize ) const
     if ( IsUpToDate() )
     {
       for ( ; elIt->more(); curID += idSize )
-        (*(int*) curID) = elIt->next()->GetID();
+        (*(smIdType*) curID) = elIt->next()->GetID();
     }
     else
     {
@@ -325,11 +325,11 @@ int SMESHDS_GroupOnFilter::getElementIds( void* ids, size_t idSize ) const
       me->myMeshInfo.assign( SMDSEntity_Last, 0 );
       me->myMeshInfo[ firstOkElem->GetEntityType() ]++;
 
-      (*(int*) curID) = firstOkElem->GetID();
+      (*(smIdType*) curID) = firstOkElem->GetID();
       for ( curID += idSize; elIt->more(); curID += idSize )
       {
         const SMDS_MeshElement* e = elIt->next();
-        (*(int*) curID) = e->GetID();
+        (*(smIdType*) curID) = e->GetID();
         me->myMeshInfo[ e->GetEntityType() ]++;
       }
     }
@@ -443,7 +443,7 @@ bool SMESHDS_GroupOnFilter::updateParallel() const
     return false; // no sense in parallel work
 
   SMDS_ElemIteratorPtr elemIt = GetMesh()->elementsIterator( GetType() );
-  const int minID = elemIt->next()->GetID();
+  const smIdType minID = elemIt->next()->GetID();
   myPredicate->IsSatisfy( minID ); // make myPredicate fully initialized for clone()
   SMESH_PredicatePtr clone( myPredicate->clone() );
   if ( !clone )
@@ -452,7 +452,7 @@ bool SMESHDS_GroupOnFilter::updateParallel() const
   TLocalPredicat threadPredicates;
   threadPredicates.local() = clone;
 
-  int maxID = ( GetType() == SMDSAbs_Node ) ? GetMesh()->MaxNodeID() : GetMesh()->MaxElementID();
+  smIdType maxID = ( GetType() == SMDSAbs_Node ) ? GetMesh()->MaxNodeID() : GetMesh()->MaxElementID();
   vector< char > isElemOK( 1 + maxID );
 
   tbb::parallel_for ( tbb::blocked_range<size_t>( 0, isElemOK.size() ),
index 9b729bebd2d706508d1eb05d6b40aa2db99c48ad..a011c255d94c4677aaa1e4295e768cbd208d2e97 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -47,20 +47,20 @@ class SMESHDS_EXPORT SMESHDS_GroupOnFilter: public SMESHDS_GroupBase, SMDS_Eleme
 
   SMESH_PredicatePtr GetPredicate() const { return myPredicate; }
 
-  std::vector< int > GetMeshInfo() const;
+  std::vector< smIdType > GetMeshInfo() const;
 
   template< typename IDTYPE >
-    int GetElementIds( IDTYPE* ids ) const
+    smIdType GetElementIds( IDTYPE* ids ) const
   {
     return getElementIds( (void*)ids, sizeof(IDTYPE));
   }
 
 
-  virtual int  Extent() const;
+  virtual smIdType  Extent() const;
 
   virtual bool IsEmpty();
 
-  virtual bool Contains (const int theID);
+  virtual bool Contains (const smIdType theID);
 
   virtual bool Contains (const SMDS_MeshElement* elem);
 
@@ -92,7 +92,7 @@ class SMESHDS_EXPORT SMESHDS_GroupOnFilter: public SMESHDS_GroupBase, SMDS_Eleme
   // 2) The case of enough free memory. Remember all OK elements (myElements).
 
   SMESH_PredicatePtr                    myPredicate;
-  std::vector< int >                    myMeshInfo;
+  std::vector< smIdType >               myMeshInfo;
   std::vector< const SMDS_MeshElement*> myElements;
   bool                                  myElementsOK;
   size_t                                myMeshModifTime; // when myMeshInfo was updated
index 8107798c19923e3262fd2f3889345f4fb7087501..8db8cf834089d3b99b28022cccde315082785b81 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -132,7 +132,7 @@ SMDS_ElemIteratorPtr SMESHDS_GroupOnGeom::GetElements() const
 //purpose  : 
 //=======================================================================
 
-bool SMESHDS_GroupOnGeom::Contains (const int theID)
+bool SMESHDS_GroupOnGeom::Contains (const smIdType theID)
 {
   return mySubMesh->Contains( findInMesh( theID ));
 }
index 3ea23e1e785553c4788d6210076dc5c19d18fefa..59ccaa7ee79eb919c88d44c684a37f5300cc8df8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -47,7 +47,7 @@ class SMESHDS_EXPORT SMESHDS_GroupOnGeom: public SMESHDS_GroupBase
 
   TopoDS_Shape GetShape() const { return myShape; }
 
-  virtual bool Contains (const int theID);
+  virtual bool Contains (const smIdType theID);
 
   virtual bool Contains (const SMDS_MeshElement* elem);
 
index 64e101b894e04d85221828cc0d79aa6c2b664e78..ec2a68078fd799be0035da35695af243b504bc39 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -114,3 +114,33 @@ bool SMESHDS_Hypothesis::IsSameName( const SMESHDS_Hypothesis& other) const
 {
   return _name == other._name;
 }
+
+//================================================================================
+/*!
+ * \brief Save a string to a stream
+ */
+//================================================================================
+
+void SMESHDS_Hypothesis::SaveStringToStream(std::ostream & save, const std::string& txt )
+{
+  save << " " << txt.size() << " " << txt;
+}
+
+//================================================================================
+/*!
+ * \brief Load a string from a stream
+ */
+//================================================================================
+
+bool SMESHDS_Hypothesis::LoadStringFromStream(std::istream & load, std::string& txt )
+{
+  txt.clear();
+  int size = -1;
+  if ( static_cast<bool>( load >> size ) && size > 0 )
+  {
+    txt.resize( size, '\0' );
+    load.get( txt[0] ); // remove a white-space
+    load.get( & txt[0], size + 1 );
+  }
+  return (int)txt.size() == size;
+}
index 8915d2623ff23c470f9200e93bcdbbb409398b8e..b9c4efa4d39b5bf2c92b6b4528eb2aa0c620c4e7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -48,6 +48,9 @@ class SMESHDS_EXPORT SMESHDS_Hypothesis
   virtual std::ostream & SaveTo(std::ostream & save)=0;
   virtual std::istream & LoadFrom(std::istream & load)=0;
 
+  static void SaveStringToStream(std::ostream & save, const std::string& txt );
+  static bool LoadStringFromStream(std::istream & load, std::string&       txt );
+
   bool IsSameName( const SMESHDS_Hypothesis& other) const;
   virtual bool operator==(const SMESHDS_Hypothesis& other) const;
   bool operator!=(const SMESHDS_Hypothesis& other) const { return !(*this==other); }
index e7429e5a25cb28fa086b6477eca1931fc94b2f18..adc79ad7574307ad6c55385ac447ab43eece83c3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -56,14 +56,14 @@ class SMESHDS_Mesh::SubMeshHolder : public SMESHDS_TSubMeshHolder< const SMESHDS
 
 //=======================================================================
 //function : Create
-//purpose  : 
+//purpose  :
 //=======================================================================
 SMESHDS_Mesh::SMESHDS_Mesh(int theMeshID, bool theIsEmbeddedMode):
-  myMeshID(theMeshID),
   mySubMeshHolder( new SubMeshHolder ),
   myIsEmbeddedMode(theIsEmbeddedMode)
 {
   myScript = new SMESHDS_Script(theIsEmbeddedMode);
+
   SetPersistentId(theMeshID);
 }
 
@@ -99,7 +99,7 @@ int SMESHDS_Mesh::GetPersistentId() const
 
 //=======================================================================
 //function : ShapeToMesh
-//purpose  : 
+//purpose  :
 //=======================================================================
 void SMESHDS_Mesh::ShapeToMesh(const TopoDS_Shape & S)
 {
@@ -141,7 +141,7 @@ void SMESHDS_Mesh::ShapeToMesh(const TopoDS_Shape & S)
 
 //=======================================================================
 //function : AddHypothesis
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 bool SMESHDS_Mesh::AddHypothesis(const TopoDS_Shape & SS,
@@ -165,7 +165,7 @@ bool SMESHDS_Mesh::AddHypothesis(const TopoDS_Shape & SS,
 
 //=======================================================================
 //function : RemoveHypothesis
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 bool SMESHDS_Mesh::RemoveHypothesis(const TopoDS_Shape &       S,
@@ -186,15 +186,17 @@ bool SMESHDS_Mesh::RemoveHypothesis(const TopoDS_Shape &       S,
 
 //=======================================================================
 //function : AddNode
-//purpose  : 
+//purpose  :
 //=======================================================================
-SMDS_MeshNode* SMESHDS_Mesh::AddNode(double x, double y, double z){
+SMDS_MeshNode* SMESHDS_Mesh::AddNode(double x, double y, double z)
+{
   SMDS_MeshNode* node = SMDS_Mesh::AddNode(x, y, z);
   if(node!=NULL) myScript->AddNode(node->GetID(), x, y, z);
   return node;
 }
 
-SMDS_MeshNode* SMESHDS_Mesh::AddNodeWithID(double x, double y, double z, int ID){
+SMDS_MeshNode* SMESHDS_Mesh::AddNodeWithID(double x, double y, double z, smIdType ID)
+{
   SMDS_MeshNode* node = SMDS_Mesh::AddNodeWithID(x,y,z,ID);
   if(node!=NULL) myScript->AddNode(node->GetID(), x, y, z);
   return node;
@@ -202,7 +204,7 @@ SMDS_MeshNode* SMESHDS_Mesh::AddNodeWithID(double x, double y, double z, int ID)
 
 //=======================================================================
 //function : MoveNode
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 void SMESHDS_Mesh::MoveNode(const SMDS_MeshNode *n, double x, double y, double z)
@@ -223,8 +225,8 @@ bool SMESHDS_Mesh::ChangeElementNodes(const SMDS_MeshElement * elem,
   if ( ! SMDS_Mesh::ChangeElementNodes( elem, nodes, nbnodes ))
     return false;
 
-  std::vector<int> IDs( nbnodes );
-  for ( int i = 0; i < nbnodes; i++ )
+  std::vector<smIdType> IDs( nbnodes );
+  for ( smIdType i = 0; i < nbnodes; i++ )
     IDs [ i ] = nodes[ i ]->GetID();
   myScript->ChangeElementNodes( elem->GetID(), &IDs[0], nbnodes);
 
@@ -233,11 +235,10 @@ bool SMESHDS_Mesh::ChangeElementNodes(const SMDS_MeshElement * elem,
 
 //=======================================================================
 //function : ChangePolygonNodes
-//purpose  : 
+//purpose  :
 //=======================================================================
-bool SMESHDS_Mesh::ChangePolygonNodes
-(const SMDS_MeshElement *     elem,
- std::vector<const SMDS_MeshNode*> nodes)
+bool SMESHDS_Mesh::ChangePolygonNodes (const SMDS_MeshElement *           elem,
+                                       std::vector<const SMDS_MeshNode*>& nodes)
 {
   ASSERT(nodes.size() > 3);
 
@@ -255,14 +256,14 @@ bool SMESHDS_Mesh
 {
   ASSERT(nodes.size() > 3);
 
+  size_t i, len = nodes.size();
+  std::vector<smIdType> nodes_ids( len );
+  for ( i = 0; i < len; i++ )
+    nodes_ids[i] = nodes[i]->GetID();
+
   if ( !SMDS_Mesh::ChangePolyhedronNodes( elem, nodes, quantities ))
     return false;
 
-  int i, len = nodes.size();
-  std::vector<int> nodes_ids (len);
-  for (i = 0; i < len; i++) {
-    nodes_ids[i] = nodes[i]->GetID();
-  }
   myScript->ChangePolyhedronNodes(elem->GetID(), nodes_ids, quantities);
 
   return true;
@@ -273,7 +274,7 @@ bool SMESHDS_Mesh
 //purpose  :
 //=======================================================================
 
-void SMESHDS_Mesh::Renumber (const bool /*isNodes*/, const int /*startID*/, const int /*deltaID*/)
+void SMESHDS_Mesh::Renumber (const bool /*isNodes*/, const smIdType /*startID*/, const smIdType /*deltaID*/)
 {
   // TODO not possible yet to have node numbers not starting to O and continuous.
   if ( !this->IsCompacted() )
@@ -286,7 +287,7 @@ void SMESHDS_Mesh::Renumber (const bool /*isNodes*/, const int /*startID*/, cons
 //function : Add0DElement
 //purpose  :
 //=======================================================================
-SMDS_Mesh0DElement* SMESHDS_Mesh::Add0DElementWithID(int nodeID, int ID)
+SMDS_Mesh0DElement* SMESHDS_Mesh::Add0DElementWithID(smIdType nodeID, smIdType ID)
 {
   SMDS_Mesh0DElement* anElem = SMDS_Mesh::Add0DElementWithID(nodeID, ID);
   if (anElem) myScript->Add0DElement(ID, nodeID);
@@ -294,7 +295,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, smIdType ID)
 {
   return Add0DElementWithID(node->GetID(), ID);
 }
@@ -308,10 +309,10 @@ SMDS_Mesh0DElement* SMESHDS_Mesh::Add0DElement(const SMDS_MeshNode * node)
 
 //=======================================================================
 //function :AddBallWithID
-//purpose  : 
+//purpose  :
 //=======================================================================
 
-SMDS_BallElement* SMESHDS_Mesh::AddBallWithID(int node, double diameter, int ID)
+SMDS_BallElement* SMESHDS_Mesh::AddBallWithID(smIdType node, double diameter, smIdType ID)
 {
   SMDS_BallElement* anElem = SMDS_Mesh::AddBallWithID(node,diameter,ID);
   if (anElem) myScript->AddBall(anElem->GetID(), node, diameter);
@@ -320,7 +321,7 @@ SMDS_BallElement* SMESHDS_Mesh::AddBallWithID(int node, double diameter, int ID)
 
 SMDS_BallElement* SMESHDS_Mesh::AddBallWithID(const SMDS_MeshNode * node,
                                               double                diameter,
-                                              int                   ID)
+                                              smIdType                   ID)
 {
   SMDS_BallElement* anElem = SMDS_Mesh::AddBallWithID(node,diameter,ID);
   if (anElem) myScript->AddBall(anElem->GetID(), node->GetID(), diameter);
@@ -337,10 +338,10 @@ SMDS_BallElement* SMESHDS_Mesh::AddBall (const SMDS_MeshNode * node,
 
 //=======================================================================
 //function :AddEdgeWithID
-//purpose  : 
+//purpose  :
 //=======================================================================
 
-SMDS_MeshEdge* SMESHDS_Mesh::AddEdgeWithID(int n1, int n2, int ID)
+SMDS_MeshEdge* SMESHDS_Mesh::AddEdgeWithID(smIdType n1, smIdType n2, smIdType ID)
 {
   SMDS_MeshEdge* anElem = SMDS_Mesh::AddEdgeWithID(n1,n2,ID);
   if(anElem) myScript->AddEdge(ID,n1,n2);
@@ -348,8 +349,8 @@ SMDS_MeshEdge* SMESHDS_Mesh::AddEdgeWithID(int n1, int n2, int ID)
 }
 
 SMDS_MeshEdge* SMESHDS_Mesh::AddEdgeWithID(const SMDS_MeshNode * n1,
-                                           const SMDS_MeshNode * n2, 
-                                           int ID)
+                                           const SMDS_MeshNode * n2,
+                                           smIdType ID)
 {
   return AddEdgeWithID(n1->GetID(),
                        n2->GetID(),
@@ -360,17 +361,17 @@ SMDS_MeshEdge* SMESHDS_Mesh::AddEdge(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2)
 {
   SMDS_MeshEdge* anElem = SMDS_Mesh::AddEdge(n1,n2);
-  if(anElem) myScript->AddEdge(anElem->GetID(), 
-                               n1->GetID(), 
+  if(anElem) myScript->AddEdge(anElem->GetID(),
+                               n1->GetID(),
                                n2->GetID());
   return anElem;
 }
 
 //=======================================================================
 //function :AddFace
-//purpose  : 
+//purpose  :
 //=======================================================================
-SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(int n1, int n2, int n3, int ID)
+SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(smIdType n1, smIdType n2, smIdType n3, smIdType ID)
 {
   SMDS_MeshFace *anElem = SMDS_Mesh::AddFaceWithID(n1, n2, n3, ID);
   if(anElem) myScript->AddFace(ID,n1,n2,n3);
@@ -379,8 +380,8 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(int n1, int n2, int n3, int ID)
 
 SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
-                                           const SMDS_MeshNode * n3, 
-                                           int ID)
+                                           const SMDS_MeshNode * n3,
+                                           smIdType ID)
 {
   return AddFaceWithID(n1->GetID(),
                        n2->GetID(),
@@ -393,8 +394,8 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFace( const SMDS_MeshNode * n1,
                                       const SMDS_MeshNode * n3)
 {
   SMDS_MeshFace *anElem = SMDS_Mesh::AddFace(n1, n2, n3);
-  if(anElem) myScript->AddFace(anElem->GetID(), 
-                               n1->GetID(), 
+  if(anElem) myScript->AddFace(anElem->GetID(),
+                               n1->GetID(),
                                n2->GetID(),
                                n3->GetID());
   return anElem;
@@ -402,9 +403,9 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFace( const SMDS_MeshNode * n1,
 
 //=======================================================================
 //function :AddFace
-//purpose  : 
+//purpose  :
 //=======================================================================
-SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(int n1, int n2, int n3, int n4, int ID)
+SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4, smIdType ID)
 {
   SMDS_MeshFace *anElem = SMDS_Mesh::AddFaceWithID(n1, n2, n3, n4, ID);
   if(anElem) myScript->AddFace(ID, n1, n2, n3, n4);
@@ -414,8 +415,8 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(int n1, int n2, int n3, int n4, int I
 SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
-                                           const SMDS_MeshNode * n4, 
-                                           int ID)
+                                           const SMDS_MeshNode * n4,
+                                           smIdType ID)
 {
   return AddFaceWithID(n1->GetID(),
                        n2->GetID(),
@@ -430,9 +431,9 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFace(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n4)
 {
   SMDS_MeshFace *anElem = SMDS_Mesh::AddFace(n1, n2, n3, n4);
-  if(anElem) myScript->AddFace(anElem->GetID(), 
-                               n1->GetID(), 
-                               n2->GetID(), 
+  if(anElem) myScript->AddFace(anElem->GetID(),
+                               n1->GetID(),
+                               n2->GetID(),
                                n3->GetID(),
                                n4->GetID());
   return anElem;
@@ -440,9 +441,9 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFace(const SMDS_MeshNode * n1,
 
 //=======================================================================
 //function :AddVolume
-//purpose  : 
+//purpose  :
 //=======================================================================
-SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4, int ID)
+SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4, smIdType ID)
 {
   SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, ID);
   if(anElem) myScript->AddVolume(ID, n1, n2, n3, n4);
@@ -452,11 +453,11 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4, i
 SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                                const SMDS_MeshNode * n2,
                                                const SMDS_MeshNode * n3,
-                                               const SMDS_MeshNode * n4, 
-                                               int ID)
+                                               const SMDS_MeshNode * n4,
+                                               smIdType ID)
 {
-  return AddVolumeWithID(n1->GetID(), 
-                         n2->GetID(), 
+  return AddVolumeWithID(n1->GetID(),
+                         n2->GetID(),
                          n3->GetID(),
                          n4->GetID(),
                          ID);
@@ -468,9 +469,9 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
                                          const SMDS_MeshNode * n4)
 {
   SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolume(n1, n2, n3, n4);
-  if(anElem) myScript->AddVolume(anElem->GetID(), 
-                                 n1->GetID(), 
-                                 n2->GetID(), 
+  if(anElem) myScript->AddVolume(anElem->GetID(),
+                                 n1->GetID(),
+                                 n2->GetID(),
                                  n3->GetID(),
                                  n4->GetID());
   return anElem;
@@ -478,9 +479,9 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
 
 //=======================================================================
 //function :AddVolume
-//purpose  : 
+//purpose  :
 //=======================================================================
-SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4, int n5, int ID)
+SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4, smIdType n5, smIdType ID)
 {
   SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, ID);
   if(anElem) myScript->AddVolume(ID, n1, n2, n3, n4, n5);
@@ -491,13 +492,13 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                                const SMDS_MeshNode * n2,
                                                const SMDS_MeshNode * n3,
                                                const SMDS_MeshNode * n4,
-                                               const SMDS_MeshNode * n5, 
-                                               int ID)
+                                               const SMDS_MeshNode * n5,
+                                               smIdType ID)
 {
-  return AddVolumeWithID(n1->GetID(), 
-                         n2->GetID(), 
+  return AddVolumeWithID(n1->GetID(),
+                         n2->GetID(),
                          n3->GetID(),
-                         n4->GetID(), 
+                         n4->GetID(),
                          n5->GetID(),
                          ID);
 }
@@ -509,20 +510,20 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
                                          const SMDS_MeshNode * n5)
 {
   SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolume(n1, n2, n3, n4, n5);
-  if(anElem) myScript->AddVolume(anElem->GetID(), 
-                                 n1->GetID(), 
-                                 n2->GetID(), 
+  if(anElem) myScript->AddVolume(anElem->GetID(),
+                                 n1->GetID(),
+                                 n2->GetID(),
                                  n3->GetID(),
-                                 n4->GetID(), 
+                                 n4->GetID(),
                                  n5->GetID());
   return anElem;
 }
 
 //=======================================================================
 //function :AddVolume
-//purpose  : 
+//purpose  :
 //=======================================================================
-SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4, int n5, int n6, int ID)
+SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4, smIdType n5, smIdType n6, smIdType ID)
 {
   SMDS_MeshVolume *anElem= SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, ID);
   if(anElem) myScript->AddVolume(ID, n1, n2, n3, n4, n5, n6);
@@ -534,14 +535,14 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                                const SMDS_MeshNode * n3,
                                                const SMDS_MeshNode * n4,
                                                const SMDS_MeshNode * n5,
-                                               const SMDS_MeshNode * n6, 
-                                               int ID)
+                                               const SMDS_MeshNode * n6,
+                                               smIdType ID)
 {
-  return AddVolumeWithID(n1->GetID(), 
-                         n2->GetID(), 
+  return AddVolumeWithID(n1->GetID(),
+                         n2->GetID(),
                          n3->GetID(),
-                         n4->GetID(), 
-                         n5->GetID(), 
+                         n4->GetID(),
+                         n5->GetID(),
                          n6->GetID(),
                          ID);
 }
@@ -554,21 +555,21 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
                                          const SMDS_MeshNode * n6)
 {
   SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolume(n1, n2, n3, n4, n5, n6);
-  if(anElem) myScript->AddVolume(anElem->GetID(), 
-                                 n1->GetID(), 
-                                 n2->GetID(), 
+  if(anElem) myScript->AddVolume(anElem->GetID(),
+                                 n1->GetID(),
+                                 n2->GetID(),
                                  n3->GetID(),
-                                 n4->GetID(), 
-                                 n5->GetID(), 
+                                 n4->GetID(),
+                                 n5->GetID(),
                                  n6->GetID());
   return anElem;
 }
 
 //=======================================================================
 //function :AddVolume
-//purpose  : 
+//purpose  :
 //=======================================================================
-SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4, int n5, int n6, int n7, int n8, int ID)
+SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4, smIdType n5, smIdType n6, smIdType n7, smIdType n8, smIdType ID)
 {
   SMDS_MeshVolume *anElem= SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, n7, n8, ID);
   if(anElem) myScript->AddVolume(ID, n1, n2, n3, n4, n5, n6, n7, n8);
@@ -582,16 +583,16 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                                const SMDS_MeshNode * n5,
                                                const SMDS_MeshNode * n6,
                                                const SMDS_MeshNode * n7,
-                                               const SMDS_MeshNode * n8, 
-                                               int ID)
+                                               const SMDS_MeshNode * n8,
+                                               smIdType ID)
 {
-  return AddVolumeWithID(n1->GetID(), 
-                         n2->GetID(), 
+  return AddVolumeWithID(n1->GetID(),
+                         n2->GetID(),
                          n3->GetID(),
-                         n4->GetID(), 
-                         n5->GetID(), 
-                         n6->GetID(), 
-                         n7->GetID(), 
+                         n4->GetID(),
+                         n5->GetID(),
+                         n6->GetID(),
+                         n7->GetID(),
                          n8->GetID(),
                          ID);
 }
@@ -606,14 +607,14 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
                                          const SMDS_MeshNode * n8)
 {
   SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolume(n1, n2, n3, n4, n5, n6, n7, n8);
-  if(anElem) myScript->AddVolume(anElem->GetID(), 
-                                 n1->GetID(), 
-                                 n2->GetID(), 
+  if(anElem) myScript->AddVolume(anElem->GetID(),
+                                 n1->GetID(),
+                                 n2->GetID(),
                                  n3->GetID(),
-                                 n4->GetID(), 
-                                 n5->GetID(), 
-                                 n6->GetID(), 
-                                 n7->GetID(), 
+                                 n4->GetID(),
+                                 n5->GetID(),
+                                 n6->GetID(),
+                                 n7->GetID(),
                                  n8->GetID());
   return anElem;
 }
@@ -623,10 +624,10 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
 //function :AddVolume
 //purpose  : add hexagonal prism
 //=======================================================================
-SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4,
-                                               int n5, int n6, int n7, int n8,
-                                               int n9, int n10, int n11, int n12,
-                                               int ID)
+SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                               smIdType n5, smIdType n6, smIdType n7, smIdType n8,
+                                               smIdType n9, smIdType n10, smIdType n11, smIdType n12,
+                                               smIdType ID)
 {
   SMDS_MeshVolume *anElem= SMDS_Mesh::AddVolumeWithID(n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12, ID);
   if(anElem) myScript->AddVolume(ID, n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12);
@@ -640,14 +641,14 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                                const SMDS_MeshNode * n5,
                                                const SMDS_MeshNode * n6,
                                                const SMDS_MeshNode * n7,
-                                               const SMDS_MeshNode * n8, 
-                                               const SMDS_MeshNode * n9, 
-                                               const SMDS_MeshNode * n10, 
-                                               const SMDS_MeshNode * n11, 
-                                               const SMDS_MeshNode * n12, 
-                                               int ID)
-{
-  return AddVolumeWithID(n1->GetID(), 
+                                               const SMDS_MeshNode * n8,
+                                               const SMDS_MeshNode * n9,
+                                               const SMDS_MeshNode * n10,
+                                               const SMDS_MeshNode * n11,
+                                               const SMDS_MeshNode * n12,
+                                               smIdType ID)
+{
+  return AddVolumeWithID(n1->GetID(),
                          n2->GetID(),
                          n3->GetID(),
                          n4->GetID(),
@@ -669,14 +670,14 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
                                          const SMDS_MeshNode * n5,
                                          const SMDS_MeshNode * n6,
                                          const SMDS_MeshNode * n7,
-                                         const SMDS_MeshNode * n8, 
-                                         const SMDS_MeshNode * n9, 
-                                         const SMDS_MeshNode * n10, 
-                                         const SMDS_MeshNode * n11, 
+                                         const SMDS_MeshNode * n8,
+                                         const SMDS_MeshNode * n9,
+                                         const SMDS_MeshNode * n10,
+                                         const SMDS_MeshNode * n11,
                                          const SMDS_MeshNode * n12)
 {
   SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolume(n1, n2, n3, n4, n5, n6, n7, n8, n9, n10, n11, n12);
-  if(anElem) myScript->AddVolume(anElem->GetID(), 
+  if(anElem) myScript->AddVolume(anElem->GetID(),
                                  n1->GetID(),
                                  n2->GetID(),
                                  n3->GetID(),
@@ -695,10 +696,10 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
 
 //=======================================================================
 //function : AddPolygonalFace
-//purpose  : 
+//purpose  :
 //=======================================================================
-SMDS_MeshFace* SMESHDS_Mesh::AddPolygonalFaceWithID (const std::vector<int>& nodes_ids,
-                                                     const int               ID)
+SMDS_MeshFace* SMESHDS_Mesh::AddPolygonalFaceWithID (const std::vector<smIdType>& nodes_ids,
+                                                     const smIdType               ID)
 {
   SMDS_MeshFace *anElem = SMDS_Mesh::AddPolygonalFaceWithID(nodes_ids, ID);
   if (anElem) {
@@ -709,12 +710,12 @@ SMDS_MeshFace* SMESHDS_Mesh::AddPolygonalFaceWithID (const std::vector<int>& nod
 
 SMDS_MeshFace*
 SMESHDS_Mesh::AddPolygonalFaceWithID (const std::vector<const SMDS_MeshNode*>& nodes,
-                                      const int                                ID)
+                                      const smIdType                                ID)
 {
   SMDS_MeshFace *anElem = SMDS_Mesh::AddPolygonalFaceWithID(nodes, ID);
   if (anElem) {
-    int i, len = nodes.size();
-    std::vector<int> nodes_ids (len);
+    smIdType i, len = nodes.size();
+    std::vector<smIdType> nodes_ids (len);
     for (i = 0; i < len; i++) {
       nodes_ids[i] = nodes[i]->GetID();
     }
@@ -728,8 +729,8 @@ SMESHDS_Mesh::AddPolygonalFace (const std::vector<const SMDS_MeshNode*>& nodes)
 {
   SMDS_MeshFace *anElem = SMDS_Mesh::AddPolygonalFace(nodes);
   if (anElem) {
-    int i, len = nodes.size();
-    std::vector<int> nodes_ids (len);
+    smIdType i, len = nodes.size();
+    std::vector<smIdType> nodes_ids (len);
     for (i = 0; i < len; i++) {
       nodes_ids[i] = nodes[i]->GetID();
     }
@@ -741,10 +742,10 @@ SMESHDS_Mesh::AddPolygonalFace (const std::vector<const SMDS_MeshNode*>& nodes)
 
 //=======================================================================
 //function : AddQuadPolygonalFace
-//purpose  : 
+//purpose  :
 //=======================================================================
-SMDS_MeshFace* SMESHDS_Mesh::AddQuadPolygonalFaceWithID (const std::vector<int>& nodes_ids,
-                                                         const int               ID)
+SMDS_MeshFace* SMESHDS_Mesh::AddQuadPolygonalFaceWithID (const std::vector<smIdType>& nodes_ids,
+                                                         const smIdType               ID)
 {
   SMDS_MeshFace *anElem = SMDS_Mesh::AddQuadPolygonalFaceWithID(nodes_ids, ID);
   if (anElem) {
@@ -755,12 +756,12 @@ SMDS_MeshFace* SMESHDS_Mesh::AddQuadPolygonalFaceWithID (const std::vector<int>&
 
 SMDS_MeshFace*
 SMESHDS_Mesh::AddQuadPolygonalFaceWithID (const std::vector<const SMDS_MeshNode*>& nodes,
-                                          const int                                ID)
+                                          const smIdType                                ID)
 {
   SMDS_MeshFace *anElem = SMDS_Mesh::AddQuadPolygonalFaceWithID(nodes, ID);
   if (anElem) {
-    int i, len = nodes.size();
-    std::vector<int> nodes_ids (len);
+    smIdType i, len = nodes.size();
+    std::vector<smIdType> nodes_ids (len);
     for (i = 0; i < len; i++) {
       nodes_ids[i] = nodes[i]->GetID();
     }
@@ -774,8 +775,8 @@ SMESHDS_Mesh::AddQuadPolygonalFace (const std::vector<const SMDS_MeshNode*>& nod
 {
   SMDS_MeshFace *anElem = SMDS_Mesh::AddQuadPolygonalFace(nodes);
   if (anElem) {
-    int i, len = nodes.size();
-    std::vector<int> nodes_ids (len);
+    smIdType i, len = nodes.size();
+    std::vector<smIdType> nodes_ids (len);
     for (i = 0; i < len; i++) {
       nodes_ids[i] = nodes[i]->GetID();
     }
@@ -787,11 +788,11 @@ SMESHDS_Mesh::AddQuadPolygonalFace (const std::vector<const SMDS_MeshNode*>& nod
 
 //=======================================================================
 //function : AddPolyhedralVolume
-//purpose  : 
+//purpose  :
 //=======================================================================
-SMDS_MeshVolume* SMESHDS_Mesh::AddPolyhedralVolumeWithID (const std::vector<int>& nodes_ids,
-                                                          const std::vector<int>& quantities,
-                                                          const int               ID)
+SMDS_MeshVolume* SMESHDS_Mesh::AddPolyhedralVolumeWithID (const std::vector<smIdType>& nodes_ids,
+                                                          const std::vector<int>&      quantities,
+                                                          const smIdType               ID)
 {
   SMDS_MeshVolume *anElem = SMDS_Mesh::AddPolyhedralVolumeWithID(nodes_ids, quantities, ID);
   if (anElem) {
@@ -803,12 +804,12 @@ 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 smIdType                           ID)
 {
   SMDS_MeshVolume *anElem = SMDS_Mesh::AddPolyhedralVolumeWithID(nodes, quantities, ID);
   if (anElem) {
-    int i, len = nodes.size();
-    std::vector<int> nodes_ids (len);
+    smIdType i, len = nodes.size();
+    std::vector<smIdType> nodes_ids (len);
     for (i = 0; i < len; i++) {
       nodes_ids[i] = nodes[i]->GetID();
     }
@@ -823,8 +824,8 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddPolyhedralVolume
 {
   SMDS_MeshVolume *anElem = SMDS_Mesh::AddPolyhedralVolume(nodes, quantities);
   if (anElem) {
-    int i, len = nodes.size();
-    std::vector<int> nodes_ids (len);
+    smIdType i, len = nodes.size();
+    std::vector<smIdType> nodes_ids (len);
     for (i = 0; i < len; i++) {
       nodes_ids[i] = nodes[i]->GetID();
     }
@@ -835,7 +836,7 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddPolyhedralVolume
 
 //=======================================================================
 //function : removeFromContainers
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 static void removeFromContainers (SMESHDS_Mesh*                         /*theMesh*/,
@@ -904,8 +905,8 @@ void SMESHDS_Mesh::RemoveNode(const SMDS_MeshNode * n)
   }
   if ( SMESHDS_SubMesh * sm = MeshElements( n->getshapeId() ))
     sm->RemoveNode( n );
-    
-  
+
+
   std::vector<const SMDS_MeshElement *> removedElems;
   std::vector<const SMDS_MeshElement *> removedNodes;
 
@@ -917,7 +918,7 @@ void SMESHDS_Mesh::RemoveNode(const SMDS_MeshNode * n)
 
 //=======================================================================
 //function : RemoveFreeNode
-//purpose  : 
+//purpose  :
 //=======================================================================
 bool SMESHDS_Mesh::RemoveFreeNode(const SMDS_MeshNode * n,
                                   SMESHDS_SubMesh *     subMesh,
@@ -970,20 +971,20 @@ void SMESHDS_Mesh::RemoveElement(const SMDS_MeshElement * elt)
     RemoveFreeElement( elt, subMesh, true );
     return;
   }
+
   myScript->RemoveElement(elt->GetID());
 
   std::vector<const SMDS_MeshElement *> removedElems;
   std::vector<const SMDS_MeshElement *> removedNodes;
 
   SMDS_Mesh::RemoveElement(elt, removedElems, removedNodes );
-  
+
   removeFromContainers( this, myGroups, removedElems );
 }
 
 //=======================================================================
 //function : RemoveFreeElement
-//purpose  : 
+//purpose  :
 //========================================================================
 void SMESHDS_Mesh::RemoveFreeElement(const SMDS_MeshElement * elt,
                                      SMESHDS_SubMesh *        subMesh,
@@ -1150,7 +1151,7 @@ void SMESHDS_Mesh::SetNodeOnVertex(const SMDS_MeshNode * aNode,
 
 //=======================================================================
 //function : UnSetNodeOnShape
-//purpose  : 
+//purpose  :
 //=======================================================================
 void SMESHDS_Mesh::UnSetNodeOnShape(const SMDS_MeshNode* aNode)
 {
@@ -1160,6 +1161,18 @@ void SMESHDS_Mesh::UnSetNodeOnShape(const SMDS_MeshNode* aNode)
       sm->RemoveNode(aNode);
 }
 
+//=======================================================================
+//function : UnSetElementOnShape
+//purpose  :
+//=======================================================================
+void SMESHDS_Mesh::UnSetElementOnShape(const SMDS_MeshElement * anElement)
+{
+  int shapeId = anElement->getshapeId();
+  if (shapeId > 0)
+    if ( SMESHDS_SubMesh* sm = MeshElements( shapeId ))
+      sm->RemoveElement(anElement);
+}
+
 //=======================================================================
 //function : SetMeshElementOnShape
 //purpose  :
@@ -1172,7 +1185,7 @@ void SMESHDS_Mesh::SetMeshElementOnShape(const SMDS_MeshElement * anElement,
 
 //=======================================================================
 //function : UnSetMeshElementOnShape
-//purpose  : 
+//purpose  :
 //=======================================================================
 void SMESHDS_Mesh::UnSetMeshElementOnShape(const SMDS_MeshElement * elem,
                                            const TopoDS_Shape &     S)
@@ -1183,7 +1196,7 @@ void SMESHDS_Mesh::UnSetMeshElementOnShape(const SMDS_MeshElement * elem,
 
 //=======================================================================
 //function : ShapeToMesh
-//purpose  : 
+//purpose  :
 //=======================================================================
 TopoDS_Shape SMESHDS_Mesh::ShapeToMesh() const
 {
@@ -1228,7 +1241,7 @@ SMESHDS_SubMesh * SMESHDS_Mesh::MeshElements(const int Index) const
 
 //=======================================================================
 //function : SubMeshIndices
-//purpose  : 
+//purpose  :
 //=======================================================================
 std::list<int> SMESHDS_Mesh::SubMeshIndices() const
 {
@@ -1242,7 +1255,7 @@ std::list<int> SMESHDS_Mesh::SubMeshIndices() const
 
 //=======================================================================
 //function : SubMeshes
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 SMESHDS_SubMeshIteratorPtr SMESHDS_Mesh::SubMeshes() const
@@ -1252,7 +1265,7 @@ SMESHDS_SubMeshIteratorPtr SMESHDS_Mesh::SubMeshes() const
 
 //=======================================================================
 //function : GetHypothesis
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 const std::list<const SMESHDS_Hypothesis*>&
@@ -1282,7 +1295,7 @@ bool SMESHDS_Mesh::IsUsedHypothesis(const SMESHDS_Hypothesis * H) const
 
 //=======================================================================
 //function : GetScript
-//purpose  : 
+//purpose  :
 //=======================================================================
 SMESHDS_Script* SMESHDS_Mesh::GetScript()
 {
@@ -1291,7 +1304,7 @@ SMESHDS_Script* SMESHDS_Mesh::GetScript()
 
 //=======================================================================
 //function : ClearScript
-//purpose  : 
+//purpose  :
 //=======================================================================
 void SMESHDS_Mesh::ClearScript()
 {
@@ -1300,7 +1313,7 @@ void SMESHDS_Mesh::ClearScript()
 
 //=======================================================================
 //function : HasMeshElements
-//purpose  : 
+//purpose  :
 //=======================================================================
 bool SMESHDS_Mesh::HasMeshElements(const TopoDS_Shape & S) const
 {
@@ -1310,7 +1323,7 @@ bool SMESHDS_Mesh::HasMeshElements(const TopoDS_Shape & S) const
 
 //=======================================================================
 //function : HasHypothesis
-//purpose  : 
+//purpose  :
 //=======================================================================
 bool SMESHDS_Mesh::HasHypothesis(const TopoDS_Shape & S)
 {
@@ -1318,8 +1331,8 @@ bool SMESHDS_Mesh::HasHypothesis(const TopoDS_Shape & S)
 }
 
 //=======================================================================
-//function : NewSubMesh 
-//purpose  : 
+//function : NewSubMesh
+//purpose  :
 //=======================================================================
 SMESHDS_SubMesh * SMESHDS_Mesh::NewSubMesh(int Index)
 {
@@ -1334,7 +1347,7 @@ SMESHDS_SubMesh * SMESHDS_Mesh::NewSubMesh(int Index)
 
 //=======================================================================
 //function : AddCompoundSubmesh
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 int SMESHDS_Mesh::AddCompoundSubmesh(const TopoDS_Shape& S,
@@ -1369,7 +1382,7 @@ int SMESHDS_Mesh::AddCompoundSubmesh(const TopoDS_Shape& S,
 
 //=======================================================================
 //function : IndexToShape
-//purpose  : 
+//purpose  :
 //=======================================================================
 const TopoDS_Shape& SMESHDS_Mesh::IndexToShape(int ShapeIndex) const
 {
@@ -1398,7 +1411,7 @@ int SMESHDS_Mesh::MaxSubMeshIndex() const
 
 //=======================================================================
 //function : ShapeToIndex
-//purpose  : 
+//purpose  :
 //=======================================================================
 int SMESHDS_Mesh::ShapeToIndex(const TopoDS_Shape & S) const
 {
@@ -1408,7 +1421,7 @@ int SMESHDS_Mesh::ShapeToIndex(const TopoDS_Shape & S) const
 
 //=======================================================================
 //function : SetNodeOnVolume
-//purpose  : 
+//purpose  :
 //=======================================================================
 void SMESHDS_Mesh::SetNodeInVolume(const SMDS_MeshNode* aNode, int Index)
 {
@@ -1456,7 +1469,7 @@ void SMESHDS_Mesh::SetNodeOnVertex(const SMDS_MeshNode* aNode, int Index)
 
 //=======================================================================
 //function : SetMeshElementOnShape
-//purpose  : 
+//purpose  :
 //=======================================================================
 void SMESHDS_Mesh::SetMeshElementOnShape(const SMDS_MeshElement* anElement,
                                          int                     Index)
@@ -1466,7 +1479,7 @@ void SMESHDS_Mesh::SetMeshElementOnShape(const SMDS_MeshElement* anElement,
 
 //=======================================================================
 //function : ~SMESHDS_Mesh
-//purpose  : 
+//purpose  :
 //=======================================================================
 SMESHDS_Mesh::~SMESHDS_Mesh()
 {
@@ -1487,9 +1500,9 @@ SMESHDS_Mesh::~SMESHDS_Mesh()
 
 //=======================================================================
 //function : AddEdgeWithID
-//purpose  : 
+//purpose  :
 //=======================================================================
-SMDS_MeshEdge* SMESHDS_Mesh::AddEdgeWithID(int n1, int n2, int n12, int ID) 
+SMDS_MeshEdge* SMESHDS_Mesh::AddEdgeWithID(smIdType n1, smIdType n2, smIdType n12, smIdType ID)
 {
   SMDS_MeshEdge* anElem = SMDS_Mesh::AddEdgeWithID(n1,n2,n12,ID);
   if(anElem) myScript->AddEdge(ID,n1,n2,n12);
@@ -1498,15 +1511,15 @@ SMDS_MeshEdge* SMESHDS_Mesh::AddEdgeWithID(int n1, int n2, int n12, int ID)
 
 //=======================================================================
 //function : AddEdge
-//purpose  : 
+//purpose  :
 //=======================================================================
 SMDS_MeshEdge* SMESHDS_Mesh::AddEdge(const SMDS_MeshNode* n1,
                                      const SMDS_MeshNode* n2,
                                      const SMDS_MeshNode* n12)
 {
   SMDS_MeshEdge* anElem = SMDS_Mesh::AddEdge(n1,n2,n12);
-  if(anElem) myScript->AddEdge(anElem->GetID(), 
-                               n1->GetID(), 
+  if(anElem) myScript->AddEdge(anElem->GetID(),
+                               n1->GetID(),
                                n2->GetID(),
                                n12->GetID());
   return anElem;
@@ -1514,12 +1527,12 @@ SMDS_MeshEdge* SMESHDS_Mesh::AddEdge(const SMDS_MeshNode* n1,
 
 //=======================================================================
 //function : AddEdgeWithID
-//purpose  : 
+//purpose  :
 //=======================================================================
 SMDS_MeshEdge* SMESHDS_Mesh::AddEdgeWithID(const SMDS_MeshNode * n1,
-                                           const SMDS_MeshNode * n2, 
-                                           const SMDS_MeshNode * n12, 
-                                           int ID)
+                                           const SMDS_MeshNode * n2,
+                                           const SMDS_MeshNode * n12,
+                                           smIdType ID)
 {
   return AddEdgeWithID(n1->GetID(),
                        n2->GetID(),
@@ -1530,7 +1543,7 @@ SMDS_MeshEdge* SMESHDS_Mesh::AddEdgeWithID(const SMDS_MeshNode * n1,
 
 //=======================================================================
 //function : AddFace
-//purpose  : 
+//purpose  :
 //=======================================================================
 SMDS_MeshFace* SMESHDS_Mesh::AddFace(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
@@ -1540,7 +1553,7 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFace(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n31)
 {
   SMDS_MeshFace *anElem = SMDS_Mesh::AddFace(n1,n2,n3,n12,n23,n31);
-  if(anElem) myScript->AddFace(anElem->GetID(), 
+  if(anElem) myScript->AddFace(anElem->GetID(),
                                n1->GetID(), n2->GetID(), n3->GetID(),
                                n12->GetID(), n23->GetID(), n31->GetID());
   return anElem;
@@ -1548,10 +1561,10 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFace(const SMDS_MeshNode * n1,
 
 //=======================================================================
 //function : AddFaceWithID
-//purpose  : 
+//purpose  :
 //=======================================================================
-SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(int n1, int n2, int n3,
-                                           int n12,int n23,int n31, int ID)
+SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(smIdType n1, smIdType n2, smIdType n3,
+                                           smIdType n12,smIdType n23,smIdType n31, smIdType ID)
 {
   SMDS_MeshFace *anElem = SMDS_Mesh::AddFaceWithID(n1,n2,n3,n12,n23,n31,ID);
   if(anElem) myScript->AddFace(ID,n1,n2,n3,n12,n23,n31);
@@ -1560,15 +1573,15 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(int n1, int n2, int n3,
 
 //=======================================================================
 //function : AddFaceWithID
-//purpose  : 
+//purpose  :
 //=======================================================================
 SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
                                            const SMDS_MeshNode * n12,
                                            const SMDS_MeshNode * n23,
-                                           const SMDS_MeshNode * n31, 
-                                           int ID)
+                                           const SMDS_MeshNode * n31,
+                                           smIdType ID)
 {
   return AddFaceWithID(n1->GetID(), n2->GetID(), n3->GetID(),
                        n12->GetID(), n23->GetID(), n31->GetID(),
@@ -1577,7 +1590,7 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
 
 //=======================================================================
 //function : AddFace
-//purpose  : 
+//purpose  :
 //=======================================================================
 SMDS_MeshFace* SMESHDS_Mesh::AddFace(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
@@ -1588,7 +1601,7 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFace(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * nCenter)
 {
   SMDS_MeshFace *anElem = SMDS_Mesh::AddFace(n1,n2,n3,n12,n23,n31,nCenter);
-  if(anElem) myScript->AddFace(anElem->GetID(), 
+  if(anElem) myScript->AddFace(anElem->GetID(),
                                n1->GetID(), n2->GetID(), n3->GetID(),
                                n12->GetID(), n23->GetID(), n31->GetID(),
                                nCenter->GetID());
@@ -1597,10 +1610,10 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFace(const SMDS_MeshNode * n1,
 
 //=======================================================================
 //function : AddFaceWithID
-//purpose  : 
+//purpose  :
 //=======================================================================
-SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(int n1, int n2, int n3,
-                                           int n12,int n23,int n31, int nCenter, int ID)
+SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(smIdType n1, smIdType n2, smIdType n3,
+                                           smIdType n12,smIdType n23,smIdType n31, smIdType nCenter, smIdType ID)
 {
   SMDS_MeshFace *anElem = SMDS_Mesh::AddFaceWithID(n1,n2,n3,n12,n23,n31,nCenter,ID);
   if(anElem) myScript->AddFace(ID,n1,n2,n3,n12,n23,n31,nCenter);
@@ -1609,16 +1622,16 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(int n1, int n2, int n3,
 
 //=======================================================================
 //function : AddFaceWithID
-//purpose  : 
+//purpose  :
 //=======================================================================
 SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
                                            const SMDS_MeshNode * n12,
                                            const SMDS_MeshNode * n23,
-                                           const SMDS_MeshNode * n31, 
-                                           const SMDS_MeshNode * nCenter, 
-                                           int ID)
+                                           const SMDS_MeshNode * n31,
+                                           const SMDS_MeshNode * nCenter,
+                                           smIdType ID)
 {
   return AddFaceWithID(n1->GetID(), n2->GetID(), n3->GetID(),
                        n12->GetID(), n23->GetID(), n31->GetID(),
@@ -1628,7 +1641,7 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
 
 //=======================================================================
 //function : AddFace
-//purpose  : 
+//purpose  :
 //=======================================================================
 SMDS_MeshFace* SMESHDS_Mesh::AddFace(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
@@ -1640,7 +1653,7 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFace(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n41)
 {
   SMDS_MeshFace *anElem = SMDS_Mesh::AddFace(n1,n2,n3,n4,n12,n23,n34,n41);
-  if(anElem) myScript->AddFace(anElem->GetID(), 
+  if(anElem) myScript->AddFace(anElem->GetID(),
                                n1->GetID(), n2->GetID(), n3->GetID(), n4->GetID(),
                                n12->GetID(), n23->GetID(), n34->GetID(), n41->GetID());
   return anElem;
@@ -1648,10 +1661,10 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFace(const SMDS_MeshNode * n1,
 
 //=======================================================================
 //function : AddFaceWithID
-//purpose  : 
+//purpose  :
 //=======================================================================
-SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(int n1, int n2, int n3, int n4,
-                                           int n12,int n23,int n34,int n41, int ID)
+SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                           smIdType n12,smIdType n23,smIdType n34,smIdType n41, smIdType ID)
 {
   SMDS_MeshFace *anElem = SMDS_Mesh::AddFaceWithID(n1,n2,n3,n4,n12,n23,n34,n41,ID);
   if(anElem) myScript->AddFace(ID,n1,n2,n3,n4,n12,n23,n34,n41);
@@ -1660,7 +1673,7 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(int n1, int n2, int n3, int n4,
 
 //=======================================================================
 //function : AddFaceWithID
-//purpose  : 
+//purpose  :
 //=======================================================================
 SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
@@ -1668,9 +1681,9 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n4,
                                            const SMDS_MeshNode * n12,
                                            const SMDS_MeshNode * n23,
-                                           const SMDS_MeshNode * n34, 
-                                           const SMDS_MeshNode * n41, 
-                                           int ID)
+                                           const SMDS_MeshNode * n34,
+                                           const SMDS_MeshNode * n41,
+                                           smIdType ID)
 {
   return AddFaceWithID(n1->GetID(), n2->GetID(), n3->GetID(), n4->GetID(),
                        n12->GetID(), n23->GetID(), n34->GetID(), n41->GetID(),
@@ -1680,7 +1693,7 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
 
 //=======================================================================
 //function : AddFace
-//purpose  : 
+//purpose  :
 //=======================================================================
 SMDS_MeshFace* SMESHDS_Mesh::AddFace(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
@@ -1689,11 +1702,11 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFace(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n12,
                                      const SMDS_MeshNode * n23,
                                      const SMDS_MeshNode * n34,
-                                     const SMDS_MeshNode * n41, 
+                                     const SMDS_MeshNode * n41,
                                      const SMDS_MeshNode * nCenter)
 {
   SMDS_MeshFace *anElem = SMDS_Mesh::AddFace(n1,n2,n3,n4,n12,n23,n34,n41,nCenter);
-  if(anElem) myScript->AddFace(anElem->GetID(), 
+  if(anElem) myScript->AddFace(anElem->GetID(),
                                n1->GetID(), n2->GetID(), n3->GetID(), n4->GetID(),
                                n12->GetID(), n23->GetID(), n34->GetID(), n41->GetID(),
                                nCenter->GetID());
@@ -1702,11 +1715,11 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFace(const SMDS_MeshNode * n1,
 
 //=======================================================================
 //function : AddFaceWithID
-//purpose  : 
+//purpose  :
 //=======================================================================
-SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(int n1, int n2, int n3, int n4,
-                                           int n12,int n23,int n34,int n41,
-                                           int nCenter, int ID)
+SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                           smIdType n12,smIdType n23,smIdType n34,smIdType n41,
+                                           smIdType nCenter, smIdType ID)
 {
   SMDS_MeshFace *anElem = SMDS_Mesh::AddFaceWithID(n1,n2,n3,n4,n12,n23,n34,n41,nCenter,ID);
   if(anElem) myScript->AddFace(ID,n1,n2,n3,n4,n12,n23,n34,n41,nCenter);
@@ -1715,7 +1728,7 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(int n1, int n2, int n3, int n4,
 
 //=======================================================================
 //function : AddFaceWithID
-//purpose  : 
+//purpose  :
 //=======================================================================
 SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
@@ -1723,10 +1736,10 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n4,
                                            const SMDS_MeshNode * n12,
                                            const SMDS_MeshNode * n23,
-                                           const SMDS_MeshNode * n34, 
-                                           const SMDS_MeshNode * n41, 
-                                           const SMDS_MeshNode * nCenter, 
-                                           int ID)
+                                           const SMDS_MeshNode * n34,
+                                           const SMDS_MeshNode * n41,
+                                           const SMDS_MeshNode * nCenter,
+                                           smIdType ID)
 {
   return AddFaceWithID(n1->GetID(), n2->GetID(), n3->GetID(), n4->GetID(),
                        n12->GetID(), n23->GetID(), n34->GetID(), n41->GetID(),
@@ -1736,21 +1749,21 @@ SMDS_MeshFace* SMESHDS_Mesh::AddFaceWithID(const SMDS_MeshNode * n1,
 
 //=======================================================================
 //function : AddVolume
-//purpose  : 
+//purpose  :
 //=======================================================================
 SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
-                                         const SMDS_MeshNode * n2, 
+                                         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 * n14,
                                          const SMDS_MeshNode * n24,
                                          const SMDS_MeshNode * n34)
 {
   SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolume(n1,n2,n3,n4,n12,n23,n31,n14,n24,n34);
-  if(anElem) myScript->AddVolume(anElem->GetID(), 
+  if(anElem) myScript->AddVolume(anElem->GetID(),
                                  n1->GetID(), n2->GetID(), n3->GetID(), n4->GetID(),
                                  n12->GetID(), n23->GetID(), n31->GetID(),
                                  n14->GetID(), n24->GetID(), n34->GetID());
@@ -1759,18 +1772,18 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
 
 //=======================================================================
 //function : AddVolumeWithID
-//purpose  : 
+//purpose  :
 //=======================================================================
-SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4,
-                                               int n12,int n23,int n31,
-                                               int n14,int n24,int n34, int ID)
+SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                               smIdType n12,smIdType n23,smIdType n31,
+                                               smIdType n14,smIdType n24,smIdType n34, smIdType ID)
 {
   SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolumeWithID(n1,n2,n3,n4,n12,n23,
                                                        n31,n14,n24,n34,ID);
   if(anElem) myScript->AddVolume(ID,n1,n2,n3,n4,n12,n23,n31,n14,n24,n34);
   return anElem;
 }
-        
+
 //=======================================================================
 //function : AddVolumeWithID
 //purpose  : 2d order tetrahedron of 10 nodes
@@ -1782,10 +1795,10 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                                const SMDS_MeshNode * n12,
                                                const SMDS_MeshNode * n23,
                                                const SMDS_MeshNode * n31,
-                                               const SMDS_MeshNode * n14, 
+                                               const SMDS_MeshNode * n14,
                                                const SMDS_MeshNode * n24,
                                                const SMDS_MeshNode * n34,
-                                               int ID)
+                                               smIdType ID)
 {
   return AddVolumeWithID(n1->GetID(), n2->GetID(), n3->GetID(), n4->GetID(),
                          n12->GetID(), n23->GetID(), n31->GetID(),
@@ -1795,18 +1808,18 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
 
 //=======================================================================
 //function : AddVolume
-//purpose  : 
+//purpose  :
 //=======================================================================
 SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
-                                         const SMDS_MeshNode * n2, 
+                                         const SMDS_MeshNode * n2,
                                          const SMDS_MeshNode * n3,
                                          const SMDS_MeshNode * n4,
-                                         const SMDS_MeshNode * n5, 
+                                         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 * n15,
                                          const SMDS_MeshNode * n25,
                                          const SMDS_MeshNode * n35,
                                          const SMDS_MeshNode * n45)
@@ -1823,11 +1836,11 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
 
 //=======================================================================
 //function : AddVolumeWithID
-//purpose  : 
+//purpose  :
 //=======================================================================
-SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4, int n5,
-                                               int n12,int n23,int n34,int n41,
-                                               int n15,int n25,int n35,int n45, int ID)
+SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4, smIdType n5,
+                                               smIdType n12,smIdType n23,smIdType n34,smIdType n41,
+                                               smIdType n15,smIdType n25,smIdType n35,smIdType n45, smIdType ID)
 {
   SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolumeWithID(n1,n2,n3,n4,n5,
                                                        n12,n23,n34,n41,
@@ -1836,7 +1849,7 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4, i
                                  n15,n25,n35,n45);
   return anElem;
 }
-        
+
 //=======================================================================
 //function : AddVolumeWithID
 //purpose  : 2d order pyramid of 13 nodes
@@ -1845,16 +1858,16 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                                const SMDS_MeshNode * n2,
                                                const SMDS_MeshNode * n3,
                                                const SMDS_MeshNode * n4,
-                                               const SMDS_MeshNode * n5, 
+                                               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 * n15,
                                                const SMDS_MeshNode * n25,
                                                const SMDS_MeshNode * n35,
                                                const SMDS_MeshNode * n45,
-                                               int ID)
+                                               smIdType ID)
 {
   return AddVolumeWithID(n1->GetID(), n2->GetID(), n3->GetID(),
                          n4->GetID(), n5->GetID(),
@@ -1869,17 +1882,17 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
 //purpose  : 2nd order pentahedron (prism) with 15 nodes
 //=======================================================================
 SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
-                                         const SMDS_MeshNode * n2, 
+                                         const SMDS_MeshNode * n2,
                                          const SMDS_MeshNode * n3,
                                          const SMDS_MeshNode * n4,
-                                         const SMDS_MeshNode * n5, 
-                                         const SMDS_MeshNode * n6, 
+                                         const SMDS_MeshNode * n5,
+                                         const SMDS_MeshNode * n6,
                                          const SMDS_MeshNode * n12,
                                          const SMDS_MeshNode * n23,
-                                         const SMDS_MeshNode * n31, 
+                                         const SMDS_MeshNode * n31,
                                          const SMDS_MeshNode * n45,
                                          const SMDS_MeshNode * n56,
-                                         const SMDS_MeshNode * n64, 
+                                         const SMDS_MeshNode * n64,
                                          const SMDS_MeshNode * n14,
                                          const SMDS_MeshNode * n25,
                                          const SMDS_MeshNode * n36)
@@ -1899,11 +1912,11 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
 //function : AddVolumeWithID
 //purpose  : 2nd order pentahedron (prism) with 15 nodes
 //=======================================================================
-SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(int n1, int n2, int n3,
-                                               int n4, int n5, int n6,
-                                               int n12,int n23,int n31,
-                                               int n45,int n56,int n64,
-                                               int n14,int n25,int n36, int ID)
+SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3,
+                                               smIdType n4, smIdType n5, smIdType n6,
+                                               smIdType n12,smIdType n23,smIdType n31,
+                                               smIdType n45,smIdType n56,smIdType n64,
+                                               smIdType n14,smIdType n25,smIdType n36, smIdType ID)
 {
   SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolumeWithID(n1,n2,n3,n4,n5,n6,
                                                        n12,n23,n31,
@@ -1933,7 +1946,7 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                                const SMDS_MeshNode * n14,
                                                const SMDS_MeshNode * n25,
                                                const SMDS_MeshNode * n36,
-                                               int ID)
+                                               smIdType ID)
 {
   return AddVolumeWithID(n1->GetID(), n2->GetID(), n3->GetID(),
                          n4->GetID(), n5->GetID(), n6->GetID(),
@@ -1982,13 +1995,13 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
 //function : AddVolumeWithID
 //purpose  : 2nd order pentahedron (prism) with 18 nodes
 //=======================================================================
-SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(int n1, int n2, int n3,
-                                               int n4, int n5, int n6,
-                                               int n12,int n23,int n31,
-                                               int n45,int n56,int n64,
-                                               int n14,int n25,int n36,
-                                               int n1245, int n2356, int n1346,
-                                               int ID)
+SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3,
+                                               smIdType n4, smIdType n5, smIdType n6,
+                                               smIdType n12,smIdType n23,smIdType n31,
+                                               smIdType n45,smIdType n56,smIdType n64,
+                                               smIdType n14,smIdType n25,smIdType n36,
+                                               smIdType n1245, smIdType n2356, smIdType n1346,
+                                               smIdType ID)
 {
   SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolumeWithID(n1,n2,n3,n4,n5,n6,
                                                        n12,n23,n31,
@@ -1999,7 +2012,7 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(int n1, int n2, int n3,
                                  n45,n56,n64,n14,n25,n36, n1245, n2356, n1346);
   return anElem;
 }
-        
+
 //=======================================================================
 //function : AddVolumeWithID
 //purpose  : 2d order Pentahedron with 18 nodes
@@ -2008,21 +2021,21 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(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 * n5,
+                                               const SMDS_MeshNode * n6,
                                                const SMDS_MeshNode * n12,
                                                const SMDS_MeshNode * n23,
-                                               const SMDS_MeshNode * n31, 
+                                               const SMDS_MeshNode * n31,
                                                const SMDS_MeshNode * n45,
                                                const SMDS_MeshNode * n56,
-                                               const SMDS_MeshNode * n64, 
+                                               const SMDS_MeshNode * n64,
                                                const SMDS_MeshNode * n14,
                                                const SMDS_MeshNode * n25,
                                                const SMDS_MeshNode * n36,
                                                const SMDS_MeshNode * n1245,
                                                const SMDS_MeshNode * n2356,
                                                const SMDS_MeshNode * n1346,
-                                               int ID)
+                                               smIdType ID)
 {
   return AddVolumeWithID(n1->GetID(), n2->GetID(), n3->GetID(),
                          n4->GetID(), n5->GetID(), n6->GetID(),
@@ -2038,21 +2051,21 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
 //purpose  : add quadratic hexahedron
 //=======================================================================
 SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
-                                         const SMDS_MeshNode * n2, 
+                                         const SMDS_MeshNode * n2,
                                          const SMDS_MeshNode * n3,
                                          const SMDS_MeshNode * n4,
-                                         const SMDS_MeshNode * n5, 
-                                         const SMDS_MeshNode * n6, 
+                                         const SMDS_MeshNode * n5,
+                                         const SMDS_MeshNode * n6,
                                          const SMDS_MeshNode * n7,
-                                         const SMDS_MeshNode * n8, 
+                                         const SMDS_MeshNode * n8,
                                          const SMDS_MeshNode * n12,
                                          const SMDS_MeshNode * n23,
                                          const SMDS_MeshNode * n34,
-                                         const SMDS_MeshNode * n41, 
+                                         const SMDS_MeshNode * n41,
                                          const SMDS_MeshNode * n56,
                                          const SMDS_MeshNode * n67,
                                          const SMDS_MeshNode * n78,
-                                         const SMDS_MeshNode * n85, 
+                                         const SMDS_MeshNode * n85,
                                          const SMDS_MeshNode * n15,
                                          const SMDS_MeshNode * n26,
                                          const SMDS_MeshNode * n37,
@@ -2074,13 +2087,13 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
 
 //=======================================================================
 //function : AddVolumeWithID
-//purpose  : 
+//purpose  :
 //=======================================================================
-SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4,
-                                               int n5, int n6, int n7, int n8,
-                                               int n12,int n23,int n34,int n41,
-                                               int n56,int n67,int n78,int n85,
-                                               int n15,int n26,int n37,int n48, int ID)
+SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                               smIdType n5, smIdType n6, smIdType n7, smIdType n8,
+                                               smIdType n12,smIdType n23,smIdType n34,smIdType n41,
+                                               smIdType n56,smIdType n67,smIdType n78,smIdType n85,
+                                               smIdType n15,smIdType n26,smIdType n37,smIdType n48, smIdType ID)
 {
   SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolumeWithID(n1,n2,n3,n4,n5,n6,n7,n8,
                                                        n12,n23,n34,n41,
@@ -2090,7 +2103,7 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4,
                                  n56,n67,n78,n85,n15,n26,n37,n48);
   return anElem;
 }
-        
+
 //=======================================================================
 //function : AddVolumeWithID
 //purpose  : 2d order Hexahedrons with 20 nodes
@@ -2099,23 +2112,23 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(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 * n5,
+                                               const SMDS_MeshNode * n6,
                                                const SMDS_MeshNode * n7,
-                                               const SMDS_MeshNode * n8, 
+                                               const SMDS_MeshNode * n8,
                                                const SMDS_MeshNode * n12,
                                                const SMDS_MeshNode * n23,
                                                const SMDS_MeshNode * n34,
-                                               const SMDS_MeshNode * n41, 
+                                               const SMDS_MeshNode * n41,
                                                const SMDS_MeshNode * n56,
                                                const SMDS_MeshNode * n67,
                                                const SMDS_MeshNode * n78,
-                                               const SMDS_MeshNode * n85, 
+                                               const SMDS_MeshNode * n85,
                                                const SMDS_MeshNode * n15,
                                                const SMDS_MeshNode * n26,
                                                const SMDS_MeshNode * n37,
                                                const SMDS_MeshNode * n48,
-                                               int ID)
+                                               smIdType ID)
 {
   return AddVolumeWithID(n1->GetID(), n2->GetID(), n3->GetID(), n4->GetID(),
                          n5->GetID(), n6->GetID(), n7->GetID(), n8->GetID(),
@@ -2131,25 +2144,25 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
 //=======================================================================
 
 SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
-                                         const SMDS_MeshNode * n2, 
+                                         const SMDS_MeshNode * n2,
                                          const SMDS_MeshNode * n3,
                                          const SMDS_MeshNode * n4,
-                                         const SMDS_MeshNode * n5, 
-                                         const SMDS_MeshNode * n6, 
+                                         const SMDS_MeshNode * n5,
+                                         const SMDS_MeshNode * n6,
                                          const SMDS_MeshNode * n7,
-                                         const SMDS_MeshNode * n8, 
+                                         const SMDS_MeshNode * n8,
                                          const SMDS_MeshNode * n12,
                                          const SMDS_MeshNode * n23,
                                          const SMDS_MeshNode * n34,
-                                         const SMDS_MeshNode * n41, 
+                                         const SMDS_MeshNode * n41,
                                          const SMDS_MeshNode * n56,
                                          const SMDS_MeshNode * n67,
                                          const SMDS_MeshNode * n78,
-                                         const SMDS_MeshNode * n85, 
+                                         const SMDS_MeshNode * n85,
                                          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,
@@ -2175,14 +2188,14 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolume(const SMDS_MeshNode * n1,
   return anElem;
 }
 
-SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(int n1, int n2, int n3, int n4,
-                                               int n5, int n6, int n7, int n8,
-                                               int n12,int n23,int n34,int n41,
-                                               int n56,int n67,int n78,int n85,
-                                               int n15,int n26,int n37,int n48,
-                                               int n1234,int n1256,int n2367,int n3478,
-                                               int n1458,int n5678,int nCenter,
-                                               int ID)
+SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                               smIdType n5, smIdType n6, smIdType n7, smIdType n8,
+                                               smIdType n12,smIdType n23,smIdType n34,smIdType n41,
+                                               smIdType n56,smIdType n67,smIdType n78,smIdType n85,
+                                               smIdType n15,smIdType n26,smIdType n37,smIdType n48,
+                                               smIdType n1234,smIdType n1256,smIdType n2367,smIdType n3478,
+                                               smIdType n1458,smIdType n5678,smIdType nCenter,
+                                               smIdType ID)
 {
   SMDS_MeshVolume *anElem = SMDS_Mesh::AddVolumeWithID(n1,n2,n3,n4,n5,n6,n7,n8,
                                                        n12,n23,n34,n41,
@@ -2225,7 +2238,7 @@ SMDS_MeshVolume* SMESHDS_Mesh::AddVolumeWithID(const SMDS_MeshNode * n1,
                                                const SMDS_MeshNode * n1458,
                                                const SMDS_MeshNode * n5678,
                                                const SMDS_MeshNode * nCenter,
-                                               int ID)
+                                               smIdType ID)
 {
   return AddVolumeWithID(n1->GetID(), n2->GetID(), n3->GetID(), n4->GetID(),
                          n5->GetID(), n6->GetID(), n7->GetID(), n8->GetID(),
@@ -2262,7 +2275,7 @@ void SMESHDS_Mesh::BuildDownWardConnectivity(bool withEdges)
  * @param localClonedNodeIds map old node id to new node id.
  * @return ok if success.
  */
-bool SMESHDS_Mesh::ModifyCellNodes(int vtkVolId, std::map<int,int> localClonedNodeIds)
+bool SMESHDS_Mesh::ModifyCellNodes(vtkIdType vtkVolId, std::map<int,int> localClonedNodeIds)
 {
   myGrid->ModifyCellNodes(vtkVolId, localClonedNodeIds);
   return true;
index cc31bda83c0752d4fc7a9d91d916cf285f570c8b..c90ba3e25bec7b0bef4fb88f0235d2535f6bd645 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -77,64 +77,64 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
   bool AddHypothesis(const TopoDS_Shape & SS, const SMESHDS_Hypothesis * H);
   bool RemoveHypothesis(const TopoDS_Shape & S, const SMESHDS_Hypothesis * H);
   
-  virtual SMDS_MeshNode* AddNodeWithID(double x, double y, double z, int ID);
+  virtual SMDS_MeshNode* AddNodeWithID(double x, double y, double z, smIdType ID);
   virtual SMDS_MeshNode* AddNode(double x, double y, double z);
   
-  virtual SMDS_Mesh0DElement* Add0DElementWithID(int nodeID, int ID);
-  virtual SMDS_Mesh0DElement* Add0DElementWithID(const SMDS_MeshNode * node, int ID);
+  virtual SMDS_Mesh0DElement* Add0DElementWithID(smIdType nodeID, smIdType ID);
+  virtual SMDS_Mesh0DElement* Add0DElementWithID(const SMDS_MeshNode * node, smIdType ID);
   virtual SMDS_Mesh0DElement* Add0DElement      (const SMDS_MeshNode * node);
   
-  virtual SMDS_BallElement* AddBallWithID(int n,                   double diameter, int ID);
-  virtual SMDS_BallElement* AddBallWithID(const SMDS_MeshNode * n, double diameter, int ID);
+  virtual SMDS_BallElement* AddBallWithID(smIdType n,                   double diameter, smIdType ID);
+  virtual SMDS_BallElement* AddBallWithID(const SMDS_MeshNode * n, double diameter, smIdType ID);
   virtual SMDS_BallElement* AddBall      (const SMDS_MeshNode * n, double diameter);
 
-  virtual SMDS_MeshEdge* AddEdgeWithID(int n1, int n2, int ID);
+  virtual SMDS_MeshEdge* AddEdgeWithID(smIdType n1, smIdType n2, smIdType ID);
   virtual SMDS_MeshEdge* AddEdgeWithID(const SMDS_MeshNode * n1,
                                        const SMDS_MeshNode * n2, 
-                                       int ID);
+                                       smIdType ID);
   virtual SMDS_MeshEdge* AddEdge(const SMDS_MeshNode * n1,
                                  const SMDS_MeshNode * n2);
   
   // 2d order edge with 3 nodes: n12 - node between n1 and n2
-  virtual SMDS_MeshEdge* AddEdgeWithID(int n1, int n2, int n12, int ID);
+  virtual SMDS_MeshEdge* AddEdgeWithID(smIdType n1, smIdType n2, smIdType n12, smIdType ID);
   virtual SMDS_MeshEdge* AddEdgeWithID(const SMDS_MeshNode * n1,
                                        const SMDS_MeshNode * n2, 
                                        const SMDS_MeshNode * n12, 
-                                       int ID);
+                                       smIdType ID);
   virtual SMDS_MeshEdge* AddEdge(const SMDS_MeshNode * n1,
                                  const SMDS_MeshNode * n2,
                                  const SMDS_MeshNode * n12);
   // tria 3
-  virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3, int ID);
+  virtual SMDS_MeshFace* AddFaceWithID(smIdType n1, smIdType n2, smIdType n3, smIdType ID);
   virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1,
                                        const SMDS_MeshNode * n2,
                                        const SMDS_MeshNode * n3, 
-                                       int ID);
+                                       smIdType ID);
   virtual SMDS_MeshFace* AddFace(const SMDS_MeshNode * n1,
                                  const SMDS_MeshNode * n2,
                                  const SMDS_MeshNode * n3);
   // quad 4
-  virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3, int n4, int ID);
+  virtual SMDS_MeshFace* AddFaceWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4, smIdType ID);
   virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1,
                                        const SMDS_MeshNode * n2,
                                        const SMDS_MeshNode * n3,
                                        const SMDS_MeshNode * n4, 
-                                       int ID);
+                                       smIdType ID);
   virtual SMDS_MeshFace* AddFace(const SMDS_MeshNode * n1,
                                  const SMDS_MeshNode * n2,
                                  const SMDS_MeshNode * n3,
                                  const SMDS_MeshNode * n4);
 
   // 2d order triangle of 6 nodes
-  virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3,
-                                       int n12,int n23,int n31, int ID);
+  virtual SMDS_MeshFace* AddFaceWithID(smIdType n1, smIdType n2, smIdType n3,
+                                       smIdType n12,smIdType n23,smIdType n31, smIdType ID);
   virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1,
                                        const SMDS_MeshNode * n2,
                                        const SMDS_MeshNode * n3, 
                                        const SMDS_MeshNode * n12,
                                        const SMDS_MeshNode * n23,
                                        const SMDS_MeshNode * n31, 
-                                       int ID);
+                                       smIdType ID);
   virtual SMDS_MeshFace* AddFace(const SMDS_MeshNode * n1,
                                  const SMDS_MeshNode * n2,
                                  const SMDS_MeshNode * n3,
@@ -143,8 +143,8 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                  const SMDS_MeshNode * n31);
 
   // biquadratic triangle of 7 nodes
-  virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3,
-                                       int n12,int n23,int n31, int nCenter, int ID);
+  virtual SMDS_MeshFace* AddFaceWithID(smIdType n1, smIdType n2, smIdType n3,
+                                       smIdType n12,smIdType n23,smIdType n31, smIdType nCenter, smIdType ID);
   virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1,
                                        const SMDS_MeshNode * n2,
                                        const SMDS_MeshNode * n3, 
@@ -152,7 +152,7 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                        const SMDS_MeshNode * n23,
                                        const SMDS_MeshNode * n31,
                                        const SMDS_MeshNode * nCenter, 
-                                       int ID);
+                                       smIdType ID);
   virtual SMDS_MeshFace* AddFace(const SMDS_MeshNode * n1,
                                  const SMDS_MeshNode * n2,
                                  const SMDS_MeshNode * n3,
@@ -162,8 +162,8 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                  const SMDS_MeshNode * nCenter);
 
   // 2d order quadrangle
-  virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3, int n4,
-                                       int n12,int n23,int n34,int n41, int ID);
+  virtual SMDS_MeshFace* AddFaceWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                       smIdType n12,smIdType n23,smIdType n34,smIdType n41, smIdType ID);
   virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1,
                                        const SMDS_MeshNode * n2,
                                        const SMDS_MeshNode * n3,
@@ -172,7 +172,7 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                        const SMDS_MeshNode * n23,
                                        const SMDS_MeshNode * n34,
                                        const SMDS_MeshNode * n41, 
-                                       int ID);
+                                       smIdType ID);
   virtual SMDS_MeshFace* AddFace(const SMDS_MeshNode * n1,
                                  const SMDS_MeshNode * n2,
                                  const SMDS_MeshNode * n3,
@@ -183,8 +183,8 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                  const SMDS_MeshNode * n41);
 
   // biquadratic quadrangle of 9 nodes
-  virtual SMDS_MeshFace* AddFaceWithID(int n1, int n2, int n3, int n4,
-                                       int n12,int n23,int n34,int n41, int nCenter, int ID);
+  virtual SMDS_MeshFace* AddFaceWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                       smIdType n12,smIdType n23,smIdType n34,smIdType n41, smIdType nCenter, smIdType ID);
   virtual SMDS_MeshFace* AddFaceWithID(const SMDS_MeshNode * n1,
                                        const SMDS_MeshNode * n2,
                                        const SMDS_MeshNode * n3,
@@ -194,7 +194,7 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                        const SMDS_MeshNode * n34,
                                        const SMDS_MeshNode * n41, 
                                        const SMDS_MeshNode * nCenter, 
-                                       int ID);
+                                       smIdType ID);
   virtual SMDS_MeshFace* AddFace(const SMDS_MeshNode * n1,
                                  const SMDS_MeshNode * n2,
                                  const SMDS_MeshNode * n3,
@@ -205,38 +205,38 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                  const SMDS_MeshNode * n41,
                                  const SMDS_MeshNode * nCenter);
   // tetra 4
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4, smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
                                            const SMDS_MeshNode * n4, 
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
                                      const SMDS_MeshNode * n4);
   // pyra 5
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int n5, int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4, smIdType n5, smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
                                            const SMDS_MeshNode * n4,
                                            const SMDS_MeshNode * n5, 
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
                                      const SMDS_MeshNode * n4,
                                      const SMDS_MeshNode * n5);
   // penta 6
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int n5, int n6, int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4, smIdType n5, smIdType n6, smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
                                            const SMDS_MeshNode * n4,
                                            const SMDS_MeshNode * n5,
                                            const SMDS_MeshNode * n6, 
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
@@ -244,7 +244,7 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                      const SMDS_MeshNode * n5,
                                      const SMDS_MeshNode * n6);
   // hexa 8
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int n5, int n6, int n7, int n8, int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4, smIdType n5, smIdType n6, smIdType n7, smIdType n8, smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
@@ -253,7 +253,7 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                            const SMDS_MeshNode * n6,
                                            const SMDS_MeshNode * n7,
                                            const SMDS_MeshNode * n8, 
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
@@ -263,8 +263,8 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                      const SMDS_MeshNode * n7,
                                      const SMDS_MeshNode * n8);
   // hexagonal prism of 12 nodes
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int n5, int n6,
-                                           int n7, int n8, int n9, int n10, int n11, int n12, int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4, smIdType n5, smIdType n6,
+                                           smIdType n7, smIdType n8, smIdType n9, smIdType n10, smIdType n11, smIdType n12, smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
@@ -277,7 +277,7 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                            const SMDS_MeshNode * n10, 
                                            const SMDS_MeshNode * n11, 
                                            const SMDS_MeshNode * n12, 
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
@@ -292,9 +292,9 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                      const SMDS_MeshNode * n12);
 
   // 2d order tetrahedron of 10 nodes
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4,
-                                           int n12,int n23,int n31,
-                                           int n14,int n24,int n34, int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                           smIdType n12,smIdType n23,smIdType n31,
+                                           smIdType n14,smIdType n24,smIdType n34, smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
@@ -305,7 +305,7 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                            const SMDS_MeshNode * n14, 
                                            const SMDS_MeshNode * n24,
                                            const SMDS_MeshNode * n34, 
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
@@ -318,10 +318,10 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                      const SMDS_MeshNode * n34);
 
   // 2d order pyramid of 13 nodes
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4, int n5,
-                                           int n12,int n23,int n34,int n41,
-                                           int n15,int n25,int n35,int n45,
-                                           int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4, smIdType n5,
+                                           smIdType n12,smIdType n23,smIdType n34,smIdType n41,
+                                           smIdType n15,smIdType n25,smIdType n35,smIdType n45,
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
@@ -335,7 +335,7 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                            const SMDS_MeshNode * n25,
                                            const SMDS_MeshNode * n35,
                                            const SMDS_MeshNode * n45, 
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
@@ -351,12 +351,12 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                      const SMDS_MeshNode * n45);
 
   // 2d order Pentahedron with 15 nodes
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3,
-                                           int n4, int n5, int n6,
-                                           int n12,int n23,int n31,
-                                           int n45,int n56,int n64,
-                                           int n14,int n25,int n36,
-                                           int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3,
+                                           smIdType n4, smIdType n5, smIdType n6,
+                                           smIdType n12,smIdType n23,smIdType n31,
+                                           smIdType n45,smIdType n56,smIdType n64,
+                                           smIdType n14,smIdType n25,smIdType n36,
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
@@ -372,7 +372,7 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                            const SMDS_MeshNode * n14,
                                            const SMDS_MeshNode * n25,
                                            const SMDS_MeshNode * n36, 
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
@@ -390,13 +390,13 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                      const SMDS_MeshNode * n36);
 
   // 2d order Pentahedron with 18 nodes
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3,
-                                           int n4, int n5, int n6,
-                                           int n12,int n23,int n31,
-                                           int n45,int n56,int n64,
-                                           int n14,int n25,int n36,
-                                           int n1245, int n2356, int n1346,
-                                           int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3,
+                                           smIdType n4, smIdType n5, smIdType n6,
+                                           smIdType n12,smIdType n23,smIdType n31,
+                                           smIdType n45,smIdType n56,smIdType n64,
+                                           smIdType n14,smIdType n25,smIdType n36,
+                                           smIdType n1245, smIdType n2356, smIdType n1346,
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
@@ -415,7 +415,7 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                            const SMDS_MeshNode * n1245,
                                            const SMDS_MeshNode * n2356,
                                            const SMDS_MeshNode * n1346,
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
@@ -436,12 +436,12 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                      const SMDS_MeshNode * n1346);
 
   // 2d order Hexahedrons with 20 nodes
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4,
-                                           int n5, int n6, int n7, int n8,
-                                           int n12,int n23,int n34,int n41,
-                                           int n56,int n67,int n78,int n85,
-                                           int n15,int n26,int n37,int n48,
-                                           int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                           smIdType n5, smIdType n6, smIdType n7, smIdType n8,
+                                           smIdType n12,smIdType n23,smIdType n34,smIdType n41,
+                                           smIdType n56,smIdType n67,smIdType n78,smIdType n85,
+                                           smIdType n15,smIdType n26,smIdType n37,smIdType n48,
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
@@ -462,7 +462,7 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                            const SMDS_MeshNode * n26,
                                            const SMDS_MeshNode * n37,
                                            const SMDS_MeshNode * n48, 
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
@@ -485,14 +485,14 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                      const SMDS_MeshNode * n48);
 
   // 2d order Hexahedrons with 27 nodes
-  virtual SMDS_MeshVolume* AddVolumeWithID(int n1, int n2, int n3, int n4,
-                                           int n5, int n6, int n7, int n8,
-                                           int n12,int n23,int n34,int n41,
-                                           int n56,int n67,int n78,int n85,
-                                           int n15,int n26,int n37,int n48,
-                                           int n1234,int n1256,int n2367,int n3478,
-                                           int n1458,int n5678,int nCenter,
-                                           int ID);
+  virtual SMDS_MeshVolume* AddVolumeWithID(smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                           smIdType n5, smIdType n6, smIdType n7, smIdType n8,
+                                           smIdType n12,smIdType n23,smIdType n34,smIdType n41,
+                                           smIdType n56,smIdType n67,smIdType n78,smIdType n85,
+                                           smIdType n15,smIdType n26,smIdType n37,smIdType n48,
+                                           smIdType n1234,smIdType n1256,smIdType n2367,smIdType n3478,
+                                           smIdType n1458,smIdType n5678,smIdType nCenter,
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolumeWithID(const SMDS_MeshNode * n1,
                                            const SMDS_MeshNode * n2,
                                            const SMDS_MeshNode * n3,
@@ -520,7 +520,7 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                            const SMDS_MeshNode * n1458,
                                            const SMDS_MeshNode * n5678,
                                            const SMDS_MeshNode * nCenter,
-                                           int ID);
+                                           smIdType ID);
   virtual SMDS_MeshVolume* AddVolume(const SMDS_MeshNode * n1,
                                      const SMDS_MeshNode * n2,
                                      const SMDS_MeshNode * n3,
@@ -549,31 +549,31 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
                                      const SMDS_MeshNode * n5678,
                                      const SMDS_MeshNode * nCenter);
 
-  virtual SMDS_MeshFace* AddPolygonalFaceWithID (const std::vector<int>& nodes_ids,
-                                                 const int               ID);
+  virtual SMDS_MeshFace* AddPolygonalFaceWithID (const std::vector<smIdType>& nodes_ids,
+                                                 const smIdType               ID);
 
   virtual SMDS_MeshFace* AddPolygonalFaceWithID (const std::vector<const SMDS_MeshNode*>& nodes,
-                                                 const int                                ID);
+                                                 const smIdType                                ID);
 
   virtual SMDS_MeshFace* AddPolygonalFace (const std::vector<const SMDS_MeshNode*>& nodes);
 
-  virtual SMDS_MeshFace* AddQuadPolygonalFaceWithID(const std::vector<int> & nodes_ids,
-                                                    const int                ID);
+  virtual SMDS_MeshFace* AddQuadPolygonalFaceWithID(const std::vector<smIdType> & nodes_ids,
+                                                    const smIdType                ID);
 
   virtual SMDS_MeshFace* AddQuadPolygonalFaceWithID(const std::vector<const SMDS_MeshNode*> & nodes,
-                                                    const int                                 ID);
+                                                    const smIdType                                 ID);
 
   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<smIdType>& nodes_ids,
+     const std::vector<int>&      quantities,
+     const smIdType               ID);
 
   virtual SMDS_MeshVolume* AddPolyhedralVolumeWithID
     (const std::vector<const SMDS_MeshNode*>& nodes,
      const std::vector<int>&                  quantities,
-     const int                                ID);
+     const smIdType                           ID);
 
   virtual SMDS_MeshVolume* AddPolyhedralVolume
     (const std::vector<const SMDS_MeshNode*>& nodes,
@@ -595,13 +595,13 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
   bool ChangeElementNodes(const SMDS_MeshElement * elem,
                           const SMDS_MeshNode    * nodes[],
                           const int                nbnodes);
-  bool ChangePolygonNodes(const SMDS_MeshElement * elem,
-                          std::vector<const SMDS_MeshNode*> nodes);
+  bool ChangePolygonNodes(const SMDS_MeshElement *           elem,
+                          std::vector<const SMDS_MeshNode*>& nodes);
   bool ChangePolyhedronNodes(const SMDS_MeshElement *                 elem,
                              const std::vector<const SMDS_MeshNode*>& nodes,
                              const std::vector<int>&                  quantities);
-  bool ModifyCellNodes(int smdsVolId, std::map<int,int> localClonedNodeIds);
-  void Renumber (const bool isNodes, const int startID=1, const int deltaID=1);
+  bool ModifyCellNodes(vtkIdType smdsVolId, std::map<int,int> localClonedNodeIds);
+  void Renumber (const bool isNodes, const smIdType startID=1, const smIdType deltaID=1);
 
   void SetNodeInVolume(const SMDS_MeshNode * aNode, const TopoDS_Shell & S);
   void SetNodeInVolume(const SMDS_MeshNode * aNode, const TopoDS_Solid & S);
@@ -609,6 +609,7 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
   void SetNodeOnEdge  (const SMDS_MeshNode * aNode, const TopoDS_Edge& S, double u=0.);
   void SetNodeOnVertex(const SMDS_MeshNode * aNode, const TopoDS_Vertex & S);
   void UnSetNodeOnShape(const SMDS_MeshNode * aNode);
+  void UnSetElementOnShape(const SMDS_MeshElement * anElt);
   void SetMeshElementOnShape  (const SMDS_MeshElement * anElt, const TopoDS_Shape & S);
   void UnSetMeshElementOnShape(const SMDS_MeshElement * anElt, const TopoDS_Shape & S);
   void SetNodeInVolume(const SMDS_MeshNode * aNode, int Index);
@@ -641,7 +642,7 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
   // Groups. SMESHDS_Mesh is not an owner of groups
   void AddGroup (SMESHDS_GroupBase* theGroup)      { myGroups.insert(theGroup); }
   void RemoveGroup (SMESHDS_GroupBase* theGroup)   { myGroups.erase(theGroup); }
-  int GetNbGroups() const                      { return myGroups.size(); }
+  size_t GetNbGroups() const                      { return myGroups.size(); }
   const std::set<SMESHDS_GroupBase*>& GetGroups() const { return myGroups; }
 
   bool IsGroupOfSubShapes (const TopoDS_Shape& aSubShape) const;
@@ -656,7 +657,7 @@ class SMESHDS_EXPORT SMESHDS_Mesh : public SMDS_Mesh
 
   ShapeToHypothesis          myShapeToHypothesis;
 
-  int                        myMeshID, myPersistentID;
+  int                        myPersistentID;
   TopoDS_Shape               myShape;
 
   class SubMeshHolder;
index 1250ddcf9fbaf0b7c02fa8bee7544b35453e762d..f1e484397d9542c73463f1d83bf39c4a999e9f4c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -89,7 +89,7 @@ SMESHDS_Command* SMESHDS_Script::getCommand(const SMESHDS_CommandType aType)
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddNode(int NewNodeID, double x, double y, double z)
+void SMESHDS_Script::AddNode(smIdType NewNodeID, double x, double y, double z)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -102,7 +102,7 @@ void SMESHDS_Script::AddNode(int NewNodeID, double x, double y, double z)
 //function :
 //purpose  :
 //=======================================================================
-void SMESHDS_Script::Add0DElement (int New0DElementID, int idnode)
+void SMESHDS_Script::Add0DElement (smIdType New0DElementID, smIdType idnode)
 {
   if (myIsEmbeddedMode) {
     myIsModified = true;
@@ -115,7 +115,7 @@ void SMESHDS_Script::Add0DElement (int New0DElementID, int idnode)
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddEdge(int NewEdgeID, int idnode1, int idnode2)
+void SMESHDS_Script::AddEdge(smIdType NewEdgeID, smIdType idnode1, smIdType idnode2)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -128,8 +128,8 @@ void SMESHDS_Script::AddEdge(int NewEdgeID, int idnode1, int idnode2)
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddFace(int NewFaceID,
-                             int idnode1, int idnode2, int idnode3)
+void SMESHDS_Script::AddFace(smIdType NewFaceID,
+                             smIdType idnode1, smIdType idnode2, smIdType idnode3)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -143,9 +143,9 @@ void SMESHDS_Script::AddFace(int NewFaceID,
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddFace(int NewFaceID,
-                             int idnode1, int idnode2,
-                             int idnode3, int idnode4)
+void SMESHDS_Script::AddFace(smIdType NewFaceID,
+                             smIdType idnode1, smIdType idnode2,
+                             smIdType idnode3, smIdType idnode4)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -160,9 +160,9 @@ void SMESHDS_Script::AddFace(int NewFaceID,
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddVolume(int NewID,
-                               int idnode1, int idnode2,
-                               int idnode3, int idnode4)
+void SMESHDS_Script::AddVolume(smIdType NewID,
+                               smIdType idnode1, smIdType idnode2,
+                               smIdType idnode3, smIdType idnode4)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -177,9 +177,9 @@ void SMESHDS_Script::AddVolume(int NewID,
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddVolume(int NewID,
-                               int idnode1, int idnode2,
-                               int idnode3, int idnode4, int idnode5)
+void SMESHDS_Script::AddVolume(smIdType NewID,
+                               smIdType idnode1, smIdType idnode2,
+                               smIdType idnode3, smIdType idnode4, smIdType idnode5)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -194,9 +194,9 @@ void SMESHDS_Script::AddVolume(int NewID,
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddVolume(int NewID,
-                               int idnode1, int idnode2, int idnode3,
-                               int idnode4, int idnode5, int idnode6)
+void SMESHDS_Script::AddVolume(smIdType NewID,
+                               smIdType idnode1, smIdType idnode2, smIdType idnode3,
+                               smIdType idnode4, smIdType idnode5, smIdType idnode6)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -211,9 +211,9 @@ void SMESHDS_Script::AddVolume(int NewID,
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddVolume(int NewID,
-                               int idnode1, int idnode2, int idnode3, int idnode4,
-                               int idnode5, int idnode6, int idnode7, int idnode8)
+void SMESHDS_Script::AddVolume(smIdType NewID,
+                               smIdType idnode1, smIdType idnode2, smIdType idnode3, smIdType idnode4,
+                               smIdType idnode5, smIdType idnode6, smIdType idnode7, smIdType idnode8)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -228,9 +228,9 @@ void SMESHDS_Script::AddVolume(int NewID,
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddVolume(int NewVolID, int idnode1, int idnode2, int idnode3,
-                               int idnode4, int idnode5, int idnode6, int idnode7, int idnode8,
-                               int idnode9, int idnode10, int idnode11, int idnode12)
+void SMESHDS_Script::AddVolume(smIdType NewVolID, smIdType idnode1, smIdType idnode2, smIdType idnode3,
+                               smIdType idnode4, smIdType idnode5, smIdType idnode6, smIdType idnode7, smIdType idnode8,
+                               smIdType idnode9, smIdType idnode10, smIdType idnode11, smIdType idnode12)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -246,7 +246,7 @@ void SMESHDS_Script::AddVolume(int NewVolID, int idnode1, int idnode2, int idnod
 //function : AddPolygonalFace
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddPolygonalFace (int NewFaceID, const std::vector<int>& nodes_ids)
+void SMESHDS_Script::AddPolygonalFace (smIdType NewFaceID, const std::vector<smIdType>& nodes_ids)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -259,7 +259,7 @@ void SMESHDS_Script::AddPolygonalFace (int NewFaceID, const std::vector<int>& no
 //function : AddQuadPolygonalFace
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddQuadPolygonalFace(int NewFaceID, const std::vector<int>& nodes_ids)
+void SMESHDS_Script::AddQuadPolygonalFace(smIdType NewFaceID, const std::vector<smIdType>& nodes_ids)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -272,9 +272,9 @@ void SMESHDS_Script::AddQuadPolygonalFace(int NewFaceID, const std::vector<int>&
 //function : AddPolyhedralVolume
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddPolyhedralVolume (int                     NewID,
-                                          const std::vector<int>& nodes_ids,
-                                          const std::vector<int>& quantities)
+void SMESHDS_Script::AddPolyhedralVolume (smIdType                     NewID,
+                                          const std::vector<smIdType>& nodes_ids,
+                                          const std::vector<int>&      quantities)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -289,7 +289,7 @@ void SMESHDS_Script::AddPolyhedralVolume (int                     NewID,
 //purpose  : Record adding a Ball
 //=======================================================================
 
-void SMESHDS_Script::AddBall(int NewBallID, int node, double diameter)
+void SMESHDS_Script::AddBall(smIdType NewBallID, smIdType node, double diameter)
 {
   if ( myIsEmbeddedMode )
     myIsModified = true;
@@ -301,7 +301,7 @@ void SMESHDS_Script::AddBall(int NewBallID, int node, double diameter)
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::MoveNode(int NewNodeID, double x, double y, double z)
+void SMESHDS_Script::MoveNode(smIdType NewNodeID, double x, double y, double z)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -314,7 +314,7 @@ void SMESHDS_Script::MoveNode(int NewNodeID, double x, double y, double z)
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::RemoveNode(int ID)
+void SMESHDS_Script::RemoveNode(smIdType ID)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -327,7 +327,7 @@ void SMESHDS_Script::RemoveNode(int ID)
 //function : 
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::RemoveElement(int ElementID)
+void SMESHDS_Script::RemoveElement(smIdType ElementID)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -341,7 +341,7 @@ void SMESHDS_Script::RemoveElement(int ElementID)
 //purpose  : 
 //=======================================================================
 
-void SMESHDS_Script::ChangeElementNodes(int ElementID, int nodes[], int nbnodes)
+void SMESHDS_Script::ChangeElementNodes(smIdType ElementID, smIdType nodes[], smIdType nbnodes)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -354,8 +354,8 @@ void SMESHDS_Script::ChangeElementNodes(int ElementID, int nodes[], int nbnodes)
 //function : ChangePolyhedronNodes
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::ChangePolyhedronNodes (const int               ElementID,
-                                            const std::vector<int>& nodes_ids,
+void SMESHDS_Script::ChangePolyhedronNodes (const smIdType               ElementID,
+                                            const std::vector<smIdType>& nodes_ids,
                                             const std::vector<int>& quantities)
 {
   if(myIsEmbeddedMode){
@@ -370,7 +370,7 @@ void SMESHDS_Script::ChangePolyhedronNodes (const int               ElementID,
 //function : Renumber
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::Renumber (const bool isNodes, const int startID, const int deltaID)
+void SMESHDS_Script::Renumber (const bool isNodes, const smIdType startID, const smIdType deltaID)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -424,7 +424,7 @@ const list<SMESHDS_Command*>& SMESHDS_Script::GetCommands()
 //function : AddEdge
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddEdge(int NewEdgeID, int n1, int n2, int n12)
+void SMESHDS_Script::AddEdge(smIdType NewEdgeID, smIdType n1, smIdType n2, smIdType n12)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -437,8 +437,8 @@ void SMESHDS_Script::AddEdge(int NewEdgeID, int n1, int n2, int n12)
 //function : AddFace
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddFace(int NewFaceID, int n1, int n2, int n3,
-                             int n12, int n23, int n31)
+void SMESHDS_Script::AddFace(smIdType NewFaceID, smIdType n1, smIdType n2, smIdType n3,
+                             smIdType n12, smIdType n23, smIdType n31)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -452,8 +452,8 @@ void SMESHDS_Script::AddFace(int NewFaceID, int n1, int n2, int n3,
 //function : AddFace
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddFace(int NewFaceID, int n1, int n2, int n3,
-                             int n12, int n23, int n31, int nCenter)
+void SMESHDS_Script::AddFace(smIdType NewFaceID, smIdType n1, smIdType n2, smIdType n3,
+                             smIdType n12, smIdType n23, smIdType n31, smIdType nCenter)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -467,8 +467,8 @@ void SMESHDS_Script::AddFace(int NewFaceID, int n1, int n2, int n3,
 //function : AddFace
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddFace(int NewFaceID, int n1, int n2, int n3, int n4,
-                             int n12, int n23, int n34, int n41)
+void SMESHDS_Script::AddFace(smIdType NewFaceID, smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                             smIdType n12, smIdType n23, smIdType n34, smIdType n41)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -482,8 +482,8 @@ void SMESHDS_Script::AddFace(int NewFaceID, int n1, int n2, int n3, int n4,
 //function : AddFace
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddFace(int NewFaceID, int n1, int n2, int n3, int n4,
-                             int n12, int n23, int n34, int n41, int nCenter)
+void SMESHDS_Script::AddFace(smIdType NewFaceID, smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                             smIdType n12, smIdType n23, smIdType n34, smIdType n41, smIdType nCenter)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -497,9 +497,9 @@ void SMESHDS_Script::AddFace(int NewFaceID, int n1, int n2, int n3, int n4,
 //function : AddVolume
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
-                               int n12, int n23, int n31,
-                               int n14, int n24, int n34)
+void SMESHDS_Script::AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                               smIdType n12, smIdType n23, smIdType n31,
+                               smIdType n14, smIdType n24, smIdType n34)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -514,9 +514,9 @@ void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
 //function : AddVolume
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
-                               int n5, int n12, int n23, int n34, int n41,
-                               int n15, int n25, int n35, int n45)
+void SMESHDS_Script::AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                               smIdType n5, smIdType n12, smIdType n23, smIdType n34, smIdType n41,
+                               smIdType n15, smIdType n25, smIdType n35, smIdType n45)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -531,10 +531,10 @@ void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
 //function : AddVolume
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
-                                int n5,int n6, int n12, int n23, int n31,
-                                int n45, int n56, int n64,
-                                int n14, int n25, int n36)
+void SMESHDS_Script::AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                smIdType n5,smIdType n6, smIdType n12, smIdType n23, smIdType n31,
+                                smIdType n45, smIdType n56, smIdType n64,
+                                smIdType n14, smIdType n25, smIdType n36)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -550,11 +550,11 @@ void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
 //function : AddVolume
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
-                                int n5,int n6, int n12, int n23, int n31,
-                                int n45, int n56, int n64,
-                                int n14, int n25, int n36,
-                                int n1245, int n2356, int n1346)
+void SMESHDS_Script::AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                                smIdType n5,smIdType n6, smIdType n12, smIdType n23, smIdType n31,
+                                smIdType n45, smIdType n56, smIdType n64,
+                                smIdType n14, smIdType n25, smIdType n36,
+                                smIdType n1245, smIdType n2356, smIdType n1346)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -571,11 +571,11 @@ void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
 //function : AddVolume
 //purpose  :
 //=======================================================================
-void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3,
-                               int n4, int n5, int n6, int n7, int n8,
-                               int n12, int n23, int n34, int n41,
-                               int n56, int n67, int n78, int n85,
-                               int n15, int n26, int n37, int n48)
+void SMESHDS_Script::AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3,
+                               smIdType n4, smIdType n5, smIdType n6, smIdType n7, smIdType n8,
+                               smIdType n12, smIdType n23, smIdType n34, smIdType n41,
+                               smIdType n56, smIdType n67, smIdType n78, smIdType n85,
+                               smIdType n15, smIdType n26, smIdType n37, smIdType n48)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
@@ -592,13 +592,13 @@ void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3,
 //function : AddVolume
 //purpose  : 
 //=======================================================================
-void SMESHDS_Script::AddVolume(int NewVolID, int n1, int n2, int n3,
-                               int n4, int n5, int n6, int n7, int n8,
-                               int n12, int n23, int n34, int n41,
-                               int n56, int n67, int n78, int n85,
-                               int n15, int n26, int n37, int n48,
-                               int n1234,int n1256,int n2367,int n3478,
-                               int n1458,int n5678,int nCenter)
+void SMESHDS_Script::AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3,
+                               smIdType n4, smIdType n5, smIdType n6, smIdType n7, smIdType n8,
+                               smIdType n12, smIdType n23, smIdType n34, smIdType n41,
+                               smIdType n56, smIdType n67, smIdType n78, smIdType n85,
+                               smIdType n15, smIdType n26, smIdType n37, smIdType n48,
+                               smIdType n1234,smIdType n1256,smIdType n2367,smIdType n3478,
+                               smIdType n1458,smIdType n5678,smIdType nCenter)
 {
   if(myIsEmbeddedMode){
     myIsModified = true;
index 0bf0f862643ff1c503f9d791442350252552f739..894645965431c73dd7f0f73405d2ef8f897ff9a3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -31,6 +31,8 @@
 
 #include "SMESHDS_Command.hxx"
 
+#include <smIdType.hxx>
+
 #include <list>
 #include <vector>
 
@@ -44,79 +46,79 @@ class SMESHDS_EXPORT SMESHDS_Script
         void SetModified(bool theModified);
         bool IsModified();
 
-        void AddNode(int NewNodeID, double x, double y, double z);
-        void Add0DElement(int New0DElementID, int idnode);
-        void AddEdge(int NewEdgeID, int idnode1, int idnode2);
-        void AddFace(int NewFaceID, int idnode1, int idnode2, int idnode3);
-        void AddFace(int NewFaceID, int idnode1, int idnode2, int idnode3,
-                int idnode4);
-        void AddVolume(int NewVolID, int idnode1, int idnode2, int idnode3,
-                int idnode4);
-        void AddVolume(int NewVolID, int idnode1, int idnode2, int idnode3,
-                int idnode4, int idnode5);
-        void AddVolume(int NewVolID, int idnode1, int idnode2, int idnode3,
-                int idnode4, int idnode5, int idnode6);
-        void AddVolume(int NewVolID, int idnode1, int idnode2, int idnode3,
-                int idnode4, int idnode5, int idnode6, int idnode7, int idnode8);
-        void AddVolume(int NewVolID, int idnode1, int idnode2, int idnode3,
-                       int idnode4, int idnode5, int idnode6, int idnode7, int idnode8,
-                       int idnode9, int idnode10, int idnode11, int idnode12);
+        void AddNode(smIdType NewNodeID, double x, double y, double z);
+        void Add0DElement(smIdType New0DElementID, smIdType idnode);
+        void AddEdge(smIdType NewEdgeID, smIdType idnode1, smIdType idnode2);
+        void AddFace(smIdType NewFaceID, smIdType idnode1, smIdType idnode2, smIdType idnode3);
+        void AddFace(smIdType NewFaceID, smIdType idnode1, smIdType idnode2, smIdType idnode3,
+                smIdType idnode4);
+        void AddVolume(smIdType NewVolID, smIdType idnode1, smIdType idnode2, smIdType idnode3,
+                smIdType idnode4);
+        void AddVolume(smIdType NewVolID, smIdType idnode1, smIdType idnode2, smIdType idnode3,
+                smIdType idnode4, smIdType idnode5);
+        void AddVolume(smIdType NewVolID, smIdType idnode1, smIdType idnode2, smIdType idnode3,
+                smIdType idnode4, smIdType idnode5, smIdType idnode6);
+        void AddVolume(smIdType NewVolID, smIdType idnode1, smIdType idnode2, smIdType idnode3,
+                smIdType idnode4, smIdType idnode5, smIdType idnode6, smIdType idnode7, smIdType idnode8);
+        void AddVolume(smIdType NewVolID, smIdType idnode1, smIdType idnode2, smIdType idnode3,
+                       smIdType idnode4, smIdType idnode5, smIdType idnode6, smIdType idnode7, smIdType idnode8,
+                       smIdType idnode9, smIdType idnode10, smIdType idnode11, smIdType idnode12);
 
-        void AddPolygonalFace (const int               NewFaceID,
-                               const std::vector<int>& nodes_ids);
-        void AddQuadPolygonalFace (const int               NewFaceID,
-                                        const std::vector<int>& nodes_ids);
-        void AddPolyhedralVolume (const int               NewVolID,
-                                  const std::vector<int>& nodes_ids,
-                                  const std::vector<int>& quantities);
-        void AddBall(int NewBallID, int node, double diameter);
+        void AddPolygonalFace (const smIdType               NewFaceID,
+                               const std::vector<smIdType>& nodes_ids);
+        void AddQuadPolygonalFace (const smIdType               NewFaceID,
+                                        const std::vector<smIdType>& nodes_ids);
+        void AddPolyhedralVolume (const smIdType               NewVolID,
+                                  const std::vector<smIdType>& nodes_ids,
+                                  const std::vector<int>&      quantities);
+        void AddBall(smIdType NewBallID, smIdType node, double diameter);
 
         // special methods for quadratic elements
-        void AddEdge(int NewEdgeID, int n1, int n2, int n12);
-        void AddFace(int NewFaceID, int n1, int n2, int n3,
-                     int n12, int n23, int n31);
-        void AddFace(int NewFaceID, int n1, int n2, int n3,
-                     int n12, int n23, int n31, int nCenter);
-        void AddFace(int NewFaceID, int n1, int n2, int n3, int n4,
-                     int n12, int n23, int n34, int n41);
-        void AddFace(int NewFaceID, int n1, int n2, int n3, int n4,
-                     int n12, int n23, int n34, int n41, int nCenter);
-        void AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
-                       int n12, int n23, int n31, int n14, int n24, int n34);
-        void AddVolume(int NewVolID, int n1, int n2, int n3, int n4, int n5,
-                       int n12, int n23, int n34, int n41,
-                       int n15, int n25, int n35, int n45);
-        void AddVolume(int NewVolID, int n1, int n2, int n3,
-                       int n4, int n5, int n6,
-                       int n12, int n23, int n31,
-                       int n45, int n56, int n64,
-                       int n14, int n25, int n36);
-        void AddVolume(int NewVolID, int n1, int n2, int n3,
-                       int n4, int n5, int n6,
-                       int n12, int n23, int n31,
-                       int n45, int n56, int n64,
-                       int n14, int n25, int n36,
-                       int n1245, int n2356, int n1346);
-        void AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
-                       int n5, int n6, int n7, int n8,
-                       int n12, int n23, int n34, int n41,
-                       int n56, int n67, int n78, int n85,
-                       int n15, int n26, int n37, int n48);
-        void AddVolume(int NewVolID, int n1, int n2, int n3, int n4,
-                       int n5,  int n6,  int n7,  int n8,
-                       int n12, int n23, int n34, int n41,
-                       int n56, int n67, int n78, int n85,
-                       int n15, int n26, int n37, int n48,
-                       int n1234,int n1256,int n2367,int n3478,
-                       int n1458,int n5678,int nCenter);
-        void MoveNode(int NewNodeID, double x, double y, double z);
-        void RemoveNode(int NodeID);
-        void RemoveElement(int ElementID);
-        void ChangeElementNodes(int ElementID, int nodes[], int nbnodes);
-        void ChangePolyhedronNodes(const int               ElementID,
-                                   const std::vector<int>& nodes_ids,
+        void AddEdge(smIdType NewEdgeID, smIdType n1, smIdType n2, smIdType n12);
+        void AddFace(smIdType NewFaceID, smIdType n1, smIdType n2, smIdType n3,
+                     smIdType n12, smIdType n23, smIdType n31);
+        void AddFace(smIdType NewFaceID, smIdType n1, smIdType n2, smIdType n3,
+                     smIdType n12, smIdType n23, smIdType n31, smIdType nCenter);
+        void AddFace(smIdType NewFaceID, smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                     smIdType n12, smIdType n23, smIdType n34, smIdType n41);
+        void AddFace(smIdType NewFaceID, smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                     smIdType n12, smIdType n23, smIdType n34, smIdType n41, smIdType nCenter);
+        void AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                       smIdType n12, smIdType n23, smIdType n31, smIdType n14, smIdType n24, smIdType n34);
+        void AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3, smIdType n4, smIdType n5,
+                       smIdType n12, smIdType n23, smIdType n34, smIdType n41,
+                       smIdType n15, smIdType n25, smIdType n35, smIdType n45);
+        void AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3,
+                       smIdType n4, smIdType n5, smIdType n6,
+                       smIdType n12, smIdType n23, smIdType n31,
+                       smIdType n45, smIdType n56, smIdType n64,
+                       smIdType n14, smIdType n25, smIdType n36);
+        void AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3,
+                       smIdType n4, smIdType n5, smIdType n6,
+                       smIdType n12, smIdType n23, smIdType n31,
+                       smIdType n45, smIdType n56, smIdType n64,
+                       smIdType n14, smIdType n25, smIdType n36,
+                       smIdType n1245, smIdType n2356, smIdType n1346);
+        void AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                       smIdType n5, smIdType n6, smIdType n7, smIdType n8,
+                       smIdType n12, smIdType n23, smIdType n34, smIdType n41,
+                       smIdType n56, smIdType n67, smIdType n78, smIdType n85,
+                       smIdType n15, smIdType n26, smIdType n37, smIdType n48);
+        void AddVolume(smIdType NewVolID, smIdType n1, smIdType n2, smIdType n3, smIdType n4,
+                       smIdType n5,  smIdType n6,  smIdType n7,  smIdType n8,
+                       smIdType n12, smIdType n23, smIdType n34, smIdType n41,
+                       smIdType n56, smIdType n67, smIdType n78, smIdType n85,
+                       smIdType n15, smIdType n26, smIdType n37, smIdType n48,
+                       smIdType n1234,smIdType n1256,smIdType n2367,smIdType n3478,
+                       smIdType n1458,smIdType n5678,smIdType nCenter);
+        void MoveNode(smIdType NewNodeID, double x, double y, double z);
+        void RemoveNode(smIdType NodeID);
+        void RemoveElement(smIdType ElementID);
+        void ChangeElementNodes(smIdType ElementID, smIdType nodes[], smIdType nbnodes);
+        void ChangePolyhedronNodes(const smIdType               ElementID,
+                                   const std::vector<smIdType>& nodes_ids,
                                    const std::vector<int>& quantities);
-        void Renumber (const bool isNodes, const int startID, const int deltaID);
+        void Renumber (const bool isNodes, const smIdType startID, const smIdType deltaID);
         void ClearMesh();
         void Clear();
         const std::list<SMESHDS_Command*> & GetCommands();
index 35746f138018bc285b1dc091f611a4a1ef739f2c..1a559f77c496ad883898658c56727a5b47eed3ae 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -235,12 +235,12 @@ bool SMESHDS_SubMesh::RemoveNode(const SMDS_MeshNode * N)
 //purpose  :
 //=======================================================================
 
-int SMESHDS_SubMesh::NbElements() const
+smIdType SMESHDS_SubMesh::NbElements() const
 {
   if ( !IsComplexSubmesh() )
     return myNbElements;
 
-  int nbElems = 0;
+  smIdType nbElems = 0;
   TSubMeshSet::const_iterator it = mySubMeshes.begin();
   for ( ; it != mySubMeshes.end(); it++ )
     nbElems += (*it)->NbElements();
@@ -253,12 +253,12 @@ int SMESHDS_SubMesh::NbElements() const
 //purpose  :
 //=======================================================================
 
-int SMESHDS_SubMesh::NbNodes() const
+smIdType SMESHDS_SubMesh::NbNodes() const
 {
   if ( !IsComplexSubmesh() )
     return myNbNodes;
 
-  int nbElems = 0;
+  smIdType nbElems = 0;
   TSubMeshSet::const_iterator it = mySubMeshes.begin();
   for ( ; it != mySubMeshes.end(); it++ )
     nbElems += (*it)->NbNodes();
index 902b65daf167634a5ac3783ded74983b7d83398c..741f897fe7caf5c01ee78e36c024d20ec0965130 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -31,6 +31,7 @@
 
 #include "SMDS_ElementHolder.hxx"
 #include "SMDS_Mesh.hxx"
+#include <smIdType.hxx>
 #include <vector>
 
 #include <boost/container/flat_set.hpp>
@@ -62,12 +63,12 @@ class SMESHDS_EXPORT SMESHDS_SubMesh : public SMDS_ElementHolder
   bool RemoveSubMesh( const SMESHDS_SubMesh* theSubMesh );
   void RemoveAllSubmeshes();
   bool ContainsSubMesh( const SMESHDS_SubMesh* theSubMesh ) const;
-  int  NbSubMeshes() const { return mySubMeshes.size(); }
+  size_t NbSubMeshes() const { return mySubMeshes.size(); }
   SMESHDS_SubMeshIteratorPtr GetSubMeshIterator() const;
 
   // for both types
-  virtual int NbElements() const;
-  virtual int NbNodes() const;
+  virtual smIdType NbElements() const;
+  virtual smIdType NbNodes() 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
@@ -89,8 +90,8 @@ class SMESHDS_EXPORT SMESHDS_SubMesh : public SMDS_ElementHolder
  private:
 
   int                     myIndex;
-  int                     myNbElements;
-  int                     myNbNodes;
+  smIdType                myNbElements;
+  smIdType                myNbNodes;
   const SMDS_MeshElement* my1stElemNode[2]; // elem and node with least ID, to optimize iteration
   const SMESHDS_Mesh *    myParent;
   TSubMeshSet             mySubMeshes;
index 0e9a09780ba51ff1c1bf192b57a9d78ec581a4d0..94c014e9d54ff17d3910d000b378aedb8fa4f00c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 442cc15319658fe129f37ff9a0045fbd88e68b02..6f5fae9a5230e0b99ebfbdb38804c7ab5900c755 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 0ca8232594e26d459e87330d98c3be8450837a24..13038b0c32a07cc1025d00809a6dbc7a5ebd9319 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 1863291c98f5b789d899685c146fa85cb2501820..89c98359b2d24d6176bfbd0b9131acd80cb3772c 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 6617fa6319cab80d6c5ed0d3d77a57e00149f9e2..7387316808bd0ba253079f7213c64d63aeaf4a4b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index d71daae15a1288e1db3a701c4187291b13be9f66..0ade526fa0356a39f302261cdb931372cf38ab82 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 78eed3a23804f0e99745a2b736bf8f2bdc25e25f..ca8d095d67910b365d35e8a5f74d758abb2dacda 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 67b273ae266fc2a9582477654f965753eb489e58..8570bad3965b27b4fd860300fecbeefbfaaaf06a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 1c0edb0a8868a6964de6250b4183842cd4f8a890..6e81cefd1976252a2dc8b07e47cb54dd233aa01a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -62,7 +62,8 @@ namespace SMESH {
     IDSOURCE,
     IDSOURCE_EDGE, // IDSource including edges
     IDSOURCE_FACE,
-    IDSOURCE_VOLUME
+    IDSOURCE_VOLUME,
+    NB_SMESH_TYPES
   };
 }
 #endif
index 8630ab6d9ca979dd57f8b9d40f58380a67dab33c..bc40205a1f7b7c6b8197710a2e918960a383495f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 9ba2c6291ccd354f20fa8b603cf47365a484791c..e5d445ebdfd83faf1af57d2552c6f6366e90bc2e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 5bd61d945362367770305fa6fa2d4c41b73a3d97..862ef5de0d00d630926b06aeb03cd315bc56ef18 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -34,6 +34,7 @@ INCLUDE_DIRECTORIES(
   ${Boost_INCLUDE_DIRS}
   ${OMNIORB_INCLUDE_DIR}
   ${HDF5_INCLUDE_DIRS}
+  ${MEDCOUPLING_INCLUDE_DIRS}
   ${PROJECT_SOURCE_DIR}/src/OBJECT
   ${PROJECT_SOURCE_DIR}/src/SMESHFiltersSelection
   ${PROJECT_SOURCE_DIR}/src/SMDS
@@ -42,6 +43,8 @@ INCLUDE_DIRECTORIES(
   ${PROJECT_SOURCE_DIR}/src/Controls
   ${PROJECT_SOURCE_DIR}/src/SMESHClient
   ${PROJECT_SOURCE_DIR}/src/MEDWrapper
+  ${PROJECT_SOURCE_DIR}/src/SMESH_I
+  ${PROJECT_SOURCE_DIR}/src/SMESH
   ${PROJECT_BINARY_DIR}
   ${PROJECT_BINARY_DIR}/idl
 )
@@ -73,6 +76,7 @@ SET(_link_LIBRARIES
   SMDS
   SMESHControls
   SMESHObject
+  SMESHEngine
 )
 
 # --- headers ---
@@ -132,6 +136,7 @@ SET(_moc_HEADERS
   SMESHGUI_MakeNodeAtPointDlg.h
   SMESHGUI_MeshInfosBox.h
   SMESHGUI_Make2DFrom3DOp.h
+  SMESHGUI_MakeFull2DFrom3DOp.h
   SMESHGUI_FindElemByPointDlg.h
   SMESHGUI_MeshOrderDlg.h
   SMESHGUI_CopyMeshDlg.h
@@ -145,6 +150,17 @@ SET(_moc_HEADERS
   SMESHGUI_SplitBiQuad.h
   SMESHGUI_IdPreview.h
   SMESHGUI_PreVisualObj.h
+  SMESHGUI_MG_ADAPTDRIVER.h
+  SMESHGUI_MgAdaptDlg.h
+  SMESHGUI_HomardAdaptDlg.h
+  SMESHGUI_HomardBoundaryDlg.h
+  SMESHGUI_HomardListGroup.h
+  SMESHGUI_RemoveNodeReconnectionDlg.h
+  SMESHGUI_AddNodeOnSegmentDlg.h
+  SMESHGUI_AddNodeOnFaceDlg.h
+  SMESHGUI_InteractiveOp.h
+  SMESHGUI_CreateDualMeshDlg.h
+  SMESHGUI_CreateDualMeshOp.h
 )
 
 # header files / no moc processing
@@ -167,6 +183,7 @@ SET(_other_HEADERS
   SMESHGUI_FileValidator.h
   SMESHGUI_SelectionProxy.h
   SMESH_SMESHGUI.hxx
+  SMESHGUI_HomardUtils.h
 )
 
 # header files / to install
@@ -233,6 +250,7 @@ SET(_other_SOURCES
   SMESHGUI_FileInfoDlg.cxx
   SMESHGUI_MeshInfosBox.cxx
   SMESHGUI_Make2DFrom3DOp.cxx
+  SMESHGUI_MakeFull2DFrom3DOp.cxx
   SMESHGUI_FindElemByPointDlg.cxx
   SMESHGUI_MeshOrderDlg.cxx
   SMESHGUI_CopyMeshDlg.cxx
@@ -260,6 +278,18 @@ SET(_other_SOURCES
   SMESHGUI_SplitBiQuad.cxx
   SMESHGUI_PreVisualObj.cxx
   SMESHGUI_IdPreview.cxx
+  SMESHGUI_MG_ADAPTDRIVER.cxx
+  SMESHGUI_MgAdaptDlg.cxx
+  SMESHGUI_HomardUtils.cxx
+  SMESHGUI_HomardAdaptDlg.cxx
+  SMESHGUI_HomardBoundaryDlg.cxx
+  SMESHGUI_HomardListGroup.cxx
+  SMESHGUI_RemoveNodeReconnectionDlg.cxx
+  SMESHGUI_AddNodeOnSegmentDlg.cxx
+  SMESHGUI_AddNodeOnFaceDlg.cxx
+  SMESHGUI_InteractiveOp.cxx
+  SMESHGUI_CreateDualMeshDlg.cxx
+  SMESHGUI_CreateDualMeshOp.cxx
 )
 
 # sources / to compile
@@ -273,7 +303,10 @@ SET(_ts_RESOURCES
   SMESH_msg_en.ts
   SMESH_msg_fr.ts
   SMESH_msg_ja.ts
-) 
+  SMESHGUI_Homard_msg_en.ts
+  SMESHGUI_Homard_msg_fr.ts
+  SMESHGUI_Homard_msg_ja.ts
+)
 
 # --- rules ---
 
index ff88035b1238d665f0230d67d0da51ea0eed8203..bbf36ce1eae6e140b7f6b591d570d37da8ea19b4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -32,6 +32,8 @@
 #include "SMESHGUI.h"
 #include "SMESHGUI_Add0DElemsOnAllNodesDlg.h"
 #include "SMESHGUI_AddMeshElementDlg.h"
+#include "SMESHGUI_AddNodeOnSegmentDlg.h"
+#include "SMESHGUI_AddNodeOnFaceDlg.h"
 #include "SMESHGUI_AddQuadraticElementDlg.h"
 #include "SMESHGUI_BuildCompoundDlg.h"
 #include "SMESHGUI_ClippingDlg.h"
 #include "SMESHGUI_GroupUtils.h"
 #include "SMESHGUI_Hypotheses.h"
 #include "SMESHGUI_HypothesesUtils.h"
+#include "SMESHGUI_MG_ADAPTDRIVER.h"
+#include "SMESHGUI_HomardAdaptDlg.h"
 #include "SMESHGUI_Make2DFrom3DOp.h"
+#include "SMESHGUI_MakeFull2DFrom3DOp.h"
 #include "SMESHGUI_MakeNodeAtPointDlg.h"
 #include "SMESHGUI_Measurements.h"
 #include "SMESHGUI_MergeDlg.h"
@@ -77,6 +82,7 @@
 #include "SMESHGUI_Preferences_ScalarBarDlg.h"
 #include "SMESHGUI_PropertiesDlg.h"
 #include "SMESHGUI_RemoveElementsDlg.h"
+#include "SMESHGUI_RemoveNodeReconnectionDlg.h"
 #include "SMESHGUI_RemoveNodesDlg.h"
 #include "SMESHGUI_RenumberingDlg.h"
 #include "SMESHGUI_ReorientFacesDlg.h"
@@ -92,6 +98,8 @@
 #include "SMESHGUI_SymmetryDlg.h"
 #include "SMESHGUI_TranslationDlg.h"
 #include "SMESHGUI_TransparencyDlg.h"
+#include "SMESHGUI_CreateDualMeshDlg.h"
+#include "SMESHGUI_CreateDualMeshOp.h"
 #include "SMESHGUI_Utils.h"
 #include "SMESHGUI_VTKUtils.h"
 
 #include CORBA_CLIENT_HEADER(SMESH_MeshEditor)
 #include CORBA_CLIENT_HEADER(SMESH_Measurements)
 #include CORBA_CLIENT_HEADER(SMESH_Mesh)
+#include CORBA_CLIENT_HEADER(SMESH_Homard)
 
 // Qt includes
 // #define       INCLUDE_MENUITEM_DEF // VSR commented ????????
 #include <vtkRenderer.h>
 
 // SALOME KERNEL includes
+#include <Basics_Utils.hxx>
 #include <SALOMEDSClient_ClientFactory.hxx>
 #include <SALOMEDSClient_IParameters.hxx>
 #include <SALOMEDSClient_SComponent.hxx>
 #include <SALOMEDSClient_StudyBuilder.hxx>
-#include <SALOMEDS_Study.hxx>
 #include <SALOMEDS_SObject.hxx>
-#include "utilities.h"
+#include <SALOMEDS_Study.hxx>
+#include <SALOME_GenericObj_wrap.hxx>
 #include <SALOME_LifeCycleCORBA.hxx>
+#include <utilities.h>
 
 // OCCT includes
 #include <Standard_ErrorHandler.hxx>
 #include <NCollection_DataMap.hxx>
 #include <NCollection_DoubleMap.hxx>
 
-#include <Basics_Utils.hxx>
-
 // Below macro, when uncommented, switches on simplified (more performant) algorithm
 // of auto-color picking up
 #define SIMPLE_AUTOCOLOR
@@ -237,11 +246,6 @@ namespace
               theCommandID == SMESHOp::OpPopupImportCGNS ) {
       filter.append( QObject::tr( "CGNS_FILES_FILTER" ) + " (*.cgns)" );
     }
-    else if ( theCommandID == SMESHOp::OpImportSAUV ||
-              theCommandID == SMESHOp::OpPopupImportSAUV ) {
-      filter.append( QObject::tr( "SAUV_FILES_FILTER" ) + " (*.sauv *.sauve)" );
-      filter.append( QObject::tr( "ALL_FILES_FILTER" ) + " (*)" );
-    }
     else if ( theCommandID == SMESHOp::OpImportGMF ||
               theCommandID == SMESHOp::OpPopupImportGMF ) {
       filter.append( QObject::tr( "GMF_ASCII_FILES_FILTER" ) + " (*.mesh)"  );
@@ -343,18 +347,6 @@ namespace
               }
               break;
             }
-          case SMESHOp::OpImportSAUV:
-          case SMESHOp::OpPopupImportSAUV:
-            {
-              // SAUV format
-              SMESH::DriverMED_ReadStatus res;
-              aMeshes = theComponentMesh->CreateMeshesFromSAUV( filename.toUtf8().constData(), res );
-              if ( res != SMESH::DRS_OK ) {
-                errors.append( QString( "%1 :\n\t%2" ).arg( filename ).
-                               arg( QObject::tr( QString( "SMESH_DRS_%1" ).arg( res ).toLatin1().data() ) ) );
-              }
-              break;
-            }
           case SMESHOp::OpImportGMF:
           case SMESHOp::OpPopupImportGMF:
             {
@@ -446,8 +438,6 @@ namespace
                          theCommandID == SMESHOp::OpPopupExportSTL );
     const bool isCGNS= ( theCommandID == SMESHOp::OpExportCGNS ||
                          theCommandID == SMESHOp::OpPopupExportCGNS );
-    const bool isSAUV= ( theCommandID == SMESHOp::OpExportSAUV ||
-                         theCommandID == SMESHOp::OpPopupExportSAUV );
     const bool isGMF = ( theCommandID == SMESHOp::OpExportGMF ||
                          theCommandID == SMESHOp::OpPopupExportGMF );
 
@@ -458,6 +448,7 @@ namespace
     bool aCheckWarn = true;
     if ( resMgr )
       aCheckWarn = resMgr->booleanValue( "SMESH", "show_warning", false );
+
     // get mesh object from selection and check duplication of their names
     bool hasDuplicatedMeshNames = false;
     QList< QPair< SMESH::SMESH_IDSource_var, QString > >           aMeshList;
@@ -526,7 +517,7 @@ namespace
     SMESH::SMESH_Mesh_var            aMesh = aMeshOrGroup->GetMesh();
     QString                      aMeshName = (*aMeshIter).second;
 
-    if ( isMED || isCGNS || isSAUV ) // formats where group names must be unique
+    if ( isMED || isCGNS ) // formats where group names must be unique
     {
       // check for equal group names within each mesh
       for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ ) {
@@ -578,18 +569,6 @@ namespace
       format = "CGNS";
       notSupportedElemTypes.push_back( SMESH::Entity_Ball );
     }
-    else if ( isSAUV )
-    {
-      format = "SAUV";
-      notSupportedElemTypes.push_back( SMESH::Entity_Ball );
-      notSupportedElemTypes.push_back( SMESH::Entity_BiQuad_Triangle );
-      notSupportedElemTypes.push_back( SMESH::Entity_BiQuad_Quadrangle );
-      notSupportedElemTypes.push_back( SMESH::Entity_TriQuad_Hexa );
-      notSupportedElemTypes.push_back( SMESH::Entity_Hexagonal_Prism );
-      notSupportedElemTypes.push_back( SMESH::Entity_Polygon );
-      notSupportedElemTypes.push_back( SMESH::Entity_Quad_Polygon );
-      notSupportedElemTypes.push_back( SMESH::Entity_Polyhedra );
-    }
     else if ( isGMF )
     {
       format = "GMF";
@@ -606,7 +585,7 @@ namespace
     }
     if ( ! notSupportedElemTypes.empty() )
     {
-      SMESH::long_array_var nbElems = aMeshOrGroup->GetMeshInfo();
+      SMESH::smIdType_array_var nbElems = aMeshOrGroup->GetMeshInfo();
       for ( size_t iType = 0; iType < notSupportedElemTypes.size(); ++iType )
         if ( nbElems[ notSupportedElemTypes[ iType ]] > 0 )
           presentNotSupported.push_back( notSupportedElemTypes[ iType ]);
@@ -626,8 +605,8 @@ namespace
         "SMESH_OCTAHEDRA","SMESH_POLYEDRONS","SMESH_QUADRATIC_POLYEDRONS","SMESH_BALLS"
       };
       // is typeMsg complete? (compilation failure mains that enum SMDSAbs_EntityType changed)
-      const int nbTypes = sizeof( typeMsg ) / sizeof( const char* );
-      int _assert[( nbTypes == SMESH::Entity_Last ) ? 2 : -1 ]; _assert[0]=_assert[1]=0;
+      static_assert( sizeof(typeMsg) / sizeof(const char*) == SMESH::Entity_Last,
+                     "Update names of EntityType's!!!" );
 
       QString andStr = " " + QObject::tr("SMESH_AND") + " ", comma(", ");
       for ( size_t iType = 0; iType < presentNotSupported.size(); ++iType ) {
@@ -653,12 +632,12 @@ namespace
 
     // Init the parameters with the default values
     bool aIsASCII_STL   = true;
-    bool toCreateGroups = false;
-    if ( resMgr )
-      toCreateGroups = resMgr->booleanValue( "SMESH", "auto_groups", false );
-    bool toOverwrite  = true;
-    bool toFindOutDim = true;
-    double       zTol = resMgr ? resMgr->doubleValue( "SMESH", "med_ztolerance", 0. ) : 0.;
+    bool toCreateGroups = resMgr->booleanValue( "SMESH", "auto_groups", false );
+    bool   toOverwrite  = true;
+    bool   toFindOutDim = true;
+    bool    saveNumbers = resMgr->booleanValue( "SMESH", "med_save_numbers", true );
+    bool     toRenumber = true;
+    double         zTol = resMgr->doubleValue( "SMESH", "med_ztolerance", 0. );
 
     QString aFilter, aTitle = QObject::tr("SMESH_EXPORT_MESH");
     QString anInitialPath = "";
@@ -668,44 +647,46 @@ namespace
     QList< QPair< GEOM::ListOfFields_var, QString > > aFieldList;
 
     // Get a file name to write in and additional options
-    if ( isUNV || isDAT || isGMF ) // Export w/o options
+    if ( isGMF ) // Export w/o options
     {
-      if ( isUNV )
-        aFilter = QObject::tr( "IDEAS_FILES_FILTER" ) + " (*.unv)";
-      else if ( isDAT )
-        aFilter = QObject::tr( "DAT_FILES_FILTER" ) + " (*.dat)";
-      else if ( isGMF )
-        aFilter = QObject::tr( "GMF_ASCII_FILES_FILTER" ) + " (*.mesh)" +
-          ";;" +  QObject::tr( "GMF_BINARY_FILES_FILTER" )  + " (*.meshb)";
-     if ( anInitialPath.isEmpty() ) anInitialPath = SUIT_FileDlg::getLastVisitedPath();
+      aFilter = QObject::tr( "GMF_ASCII_FILES_FILTER"  ) + " (*.mesh)" +
+        ";;" +  QObject::tr( "GMF_BINARY_FILES_FILTER" ) + " (*.meshb)";
+      if ( anInitialPath.isEmpty() ) anInitialPath = SUIT_FileDlg::getLastVisitedPath();
+
       aFilename = SUIT_FileDlg::getFileName(SMESHGUI::desktop(),
                                             anInitialPath + QString("/") + aMeshName,
                                             aFilter, aTitle, false);
     }
-    else if ( isCGNS )// Export to CGNS
+    else if ( isCGNS || isUNV || isDAT ) // Export to [ CGNS | UNV | DAT ] - one option
     {
-      const char* theByTypeResource = "cgns_group_elems_by_type";
-      toCreateGroups = SMESHGUI::resourceMgr()->booleanValue( "SMESH", theByTypeResource, false );
+      const char* theOptionResource = isCGNS ? "cgns_group_elems_by_type" : "export_renumber";
+      bool option = resMgr->booleanValue( "SMESH", theOptionResource, false );
 
       QStringList checkBoxes;
-      checkBoxes << QObject::tr("CGNS_EXPORT_ELEMS_BY_TYPE");
+      checkBoxes << QObject::tr( isCGNS ? "CGNS_EXPORT_ELEMS_BY_TYPE" : "SMESH_RENUMBER" );
 
       SalomeApp_CheckFileDlg* fd =
         new SalomeApp_CheckFileDlg ( SMESHGUI::desktop(), false, checkBoxes, true, true );
       fd->setWindowTitle( aTitle );
-      fd->setNameFilter( QObject::tr( "CGNS_FILES_FILTER" ) + " (*.cgns)" );
+      if ( isCGNS )
+        fd->setNameFilter( QObject::tr( "CGNS_FILES_FILTER" ) + " (*.cgns)" );
+      else if ( isUNV )
+        fd->setNameFilter( QObject::tr( "IDEAS_FILES_FILTER" ) + " (*.unv)" );
+      else if ( isDAT )
+        fd->setNameFilter( QObject::tr( "DAT_FILES_FILTER" ) + " (*.dat)" );
       if ( !anInitialPath.isEmpty() )
         fd->setDirectory( anInitialPath );
-      fd->selectFile(aMeshName);
+      fd->selectFile( aMeshName );
       SMESHGUI_FileValidator* fv = new SMESHGUI_FileValidator( fd );
       fd->setValidator( fv );
-      fd->SetChecked( toCreateGroups, 0 );
+      fd->SetChecked( option, 0 );
 
       if ( fd->exec() )
         aFilename = fd->selectedFile();
-      toOverwrite    = fv->isOverwrite(aFilename);
-      toCreateGroups = fd->IsChecked(0);
-      SMESHGUI::resourceMgr()->setValue("SMESH", theByTypeResource, toCreateGroups );
+      toOverwrite    = fv->isOverwrite( aFilename );
+      option = fd->IsChecked( 0 );
+      SMESHGUI::resourceMgr()->setValue("SMESH", theOptionResource, option );
+      ( isCGNS ? toCreateGroups : toRenumber ) = option;
 
       delete fd;
     }
@@ -736,27 +717,19 @@ namespace
       }
       delete fd;
     }
-    else if ( isMED || isSAUV ) // Export to MED or SAUV
+    else if ( isMED ) // Export to MED
     {
       int defaultVersion = 0;
       QMap<QString, int> aFilterMap;
-      if ( isMED ) {
-        //filters << QObject::tr( "MED_FILES_FILTER" ) + " (*.med)";
-        //QString vmed (aMesh->GetVersionString(-1, 2));
-        SMESH::long_array_var mvok = aMesh->GetMEDVersionsCompatibleForAppend();
-        if ( mvok->length() > 0)
-          defaultVersion = mvok[0]; // the current version to set the default filter on it
-        for ( CORBA::ULong i = 0; i < mvok->length(); ++i )
-        {
-          QString vs = (char*)( SMESH_Comment( mvok[i]/10 ) << "." << mvok[i]%10 );
-          MESSAGE("MED version: " << vs.toStdString());
-          aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( vs ) + " (*.med)",  mvok[i]);
-        }
-      }
-      else { // isSAUV
-        aFilterMap.insert("All files (*)", -1 );
-        aFilterMap.insert("SAUV files (*.sauv)", defaultVersion ); // 0 = default filter (defaultVersion)
-        aFilterMap.insert("SAUV files (*.sauve)", -1 );
+      //filters << QObject::tr( "MED_FILES_FILTER" ) + " (*.med)";
+      //QString vmed (aMesh->GetVersionString(-1, 2));
+      SMESH::long_array_var mvok = aMesh->GetMEDVersionsCompatibleForAppend();
+      if ( mvok->length() > 0)
+        defaultVersion = mvok[0]; // the current version to set the default filter on it
+      for ( CORBA::ULong i = 0; i < mvok->length(); ++i )
+      {
+        QString vs = (char*)( SMESH_Comment( mvok[i]/10 ) << "." << mvok[i]%10 );
+        aFilterMap.insert( QObject::tr( "MED_VX_FILES_FILTER" ).arg( vs ) + " (*.med)",  mvok[i]);
       }
       QStringList filters;
       QMap<QString, int>::const_iterator it = aFilterMap.begin();
@@ -767,7 +740,9 @@ namespace
           aDefaultFilter = it.key();
       }
       QStringList checkBoxes;
-      checkBoxes << QObject::tr("SMESH_AUTO_GROUPS") << QObject::tr("SMESH_AUTO_DIM");
+      checkBoxes << QObject::tr("SMESH_AUTO_GROUPS")
+                 << QObject::tr("SMESH_AUTO_DIM")
+                 << QObject::tr("SMESH_MED_SAVE_NUMS");
 
       SMESHGUI_FieldSelectorWdg* fieldSelWdg = new SMESHGUI_FieldSelectorWdg();
       QList< QWidget* > wdgList;
@@ -795,6 +770,7 @@ namespace
       fd->selectNameFilter( aDefaultFilter );
       fd->SetChecked( toCreateGroups, 0 );
       fd->SetChecked( toFindOutDim,   1 );
+      fd->SetChecked( saveNumbers,    2 );
       if ( !anInitialPath.isEmpty() )
         fd->setDirectory( anInitialPath );
       fd->selectFile(aMeshName);
@@ -885,6 +861,7 @@ namespace
       }
       toCreateGroups = fd->IsChecked(0);
       toFindOutDim   = fd->IsChecked(1);
+      saveNumbers    = fd->IsChecked(2);
       zTol           = zTolCheck->isChecked() ? zTolSpin->value() : -1;
       fieldSelWdg->GetSelectedFields();
       if ( resMgr ) resMgr->setValue( "SMESH", "enable_ztolerance", zTolCheck->isChecked() );
@@ -922,9 +899,8 @@ namespace
 //           if ( SMESHGUI::automaticUpdate() )
 //             SMESH::UpdateView();
 //         }
-        if ( isMED && isOkToWrite)
+        if ( isMED && isOkToWrite )
         {
-          MESSAGE("OK to write MED file "<< aFilename.toUtf8().constData());
           aMeshIter = aMeshList.begin();
           for( int aMeshIndex = 0; aMeshIter != aMeshList.end(); aMeshIter++, aMeshIndex++ )
           {
@@ -932,39 +908,26 @@ namespace
             SMESH::SMESH_Mesh_var        aMeshItem = aMeshOrGroup->GetMesh();
             const GEOM::ListOfFields&       fields = aFieldList[ aMeshIndex ].first.in();
             const QString&            geoAssFields = aFieldList[ aMeshIndex ].second;
-            const bool                   hasFields = ( fields.length() || !geoAssFields.isEmpty() );
-            if ( !hasFields && aMeshOrGroup->_is_equivalent( aMeshItem ) && zTol < 0 )
-              aMeshItem->ExportMED( aFilename.toUtf8().data(), toCreateGroups, aFormat,
-                                    toOverwrite && aMeshIndex == 0, toFindOutDim );
-            else
-              aMeshItem->ExportPartToMED( aMeshOrGroup, aFilename.toUtf8().data(),
-                                          toCreateGroups, aFormat,
-                                          toOverwrite && aMeshIndex == 0, toFindOutDim,
-                                          fields, geoAssFields.toLatin1().data(), zTol );
-          }
-        }
-        else if ( isSAUV )
-        {
-          for( aMeshIter = aMeshList.begin(); aMeshIter != aMeshList.end(); aMeshIter++ )
-          {
-            SMESH::SMESH_Mesh_var aMeshItem = SMESH::SMESH_Mesh::_narrow( (*aMeshIter).first );
-            if( !aMeshItem->_is_nil() )
-              aMeshItem->ExportSAUV( aFilename.toUtf8().data(), toCreateGroups );
+
+            aMeshItem->ExportPartToMED( aMeshOrGroup, aFilename.toUtf8().data(),
+                                        toCreateGroups, aFormat,
+                                        toOverwrite && aMeshIndex == 0, toFindOutDim,
+                                        fields, geoAssFields.toLatin1().data(), zTol, saveNumbers );
           }
         }
         else if ( isDAT )
         {
           if ( aMeshOrGroup->_is_equivalent( aMesh ))
-            aMesh->ExportDAT( aFilename.toUtf8().data() );
+            aMesh->ExportDAT( aFilename.toUtf8().data(), toRenumber );
           else
-            aMesh->ExportPartToDAT( aMeshOrGroup, aFilename.toUtf8().data() );
+            aMesh->ExportPartToDAT( aMeshOrGroup, aFilename.toUtf8().data(), toRenumber );
         }
         else if ( isUNV )
         {
           if ( aMeshOrGroup->_is_equivalent( aMesh ))
-            aMesh->ExportUNV( aFilename.toUtf8().data() );
+            aMesh->ExportUNV( aFilename.toUtf8().data(), toRenumber );
           else
-            aMesh->ExportPartToUNV( aMeshOrGroup, aFilename.toUtf8().data() );
+            aMesh->ExportPartToUNV( aMeshOrGroup, aFilename.toUtf8().data(), toRenumber );
         }
         else if ( isSTL )
         {
@@ -992,11 +955,19 @@ namespace
           aMesh->ExportGMF( aMeshOrGroup, aFilename.toUtf8().data(), toCreateGroups );
         }
       }
-      catch (const SALOME::SALOME_Exception& S_ex){
+      catch (const SALOME::SALOME_Exception& S_ex)
+      {
         wc.suspend();
-        SUIT_MessageBox::warning(SMESHGUI::desktop(),
-                                 QObject::tr("SMESH_WRN_WARNING"),
-                                 QObject::tr("SMESH_EXPORT_FAILED") + SalomeApp_Tools::ExceptionToString(S_ex));
+        if ( S_ex.details.type == SALOME::COMM && // communicate about too large mesh
+             strncmp( "format=", S_ex.details.sourceFile.in(), 7 ) == 0 )
+
+          SUIT_MessageBox::critical(SMESHGUI::desktop(),
+                                    QObject::tr("SMESH_WRN_WARNING"),
+                                    QObject::tr(S_ex.details.text.in() ));
+        else
+          SUIT_MessageBox::warning(SMESHGUI::desktop(),
+                                   QObject::tr("SMESH_WRN_WARNING"),
+                                   QObject::tr("SMESH_EXPORT_FAILED") + SalomeApp_Tools::ExceptionToString(S_ex));
         wc.resume();
       }
     }
@@ -1150,6 +1121,8 @@ namespace
       type = QObject::tr( "ASPECTRATIO_3D_ELEMENTS" );
     else if ( dynamic_cast< SMESH::Controls::Warping* >( f.get() ) )
       type = QObject::tr( "WARP_ELEMENTS" );
+    else if (dynamic_cast<SMESH::Controls::Warping3D*>(f.get()))
+      type = QObject::tr("WARP_3D_ELEMENTS");
     else if ( dynamic_cast< SMESH::Controls::Taper* >( f.get() ) )
       type = QObject::tr( "TAPER_ELEMENTS" );
     else if ( dynamic_cast< SMESH::Controls::Skew* >( f.get() ) )
@@ -1192,6 +1165,8 @@ namespace
       type = QObject::tr( "EQUAL_VOLUME" );
     else if ( dynamic_cast< SMESH::Controls::NodeConnectivityNumber* >( f.get() ) )
       type = QObject::tr( "NODE_CONNECTIVITY_NB" );
+    else if ( dynamic_cast< SMESH::Controls::ScaledJacobian* >( f.get() ) )
+      type = QObject::tr( "SCALED_JACOBIAN" );
     return type;
   }
 
@@ -1216,14 +1191,14 @@ namespace
             SMESH::Controls::NumericalFunctor* aNumFun =
               dynamic_cast<SMESH::Controls::NumericalFunctor*>( aFunctor.get() );
             if ( aNumFun ) {
-              std::vector<int> elements;
+              std::vector<smIdType> elements;
               SMESH::SMESH_Mesh_var mesh = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(anIO);
               if ( mesh->_is_nil() ) {
                 SMESH::SMESH_IDSource_var idSource =
                   SMESH::IObjectToInterface<SMESH::SMESH_IDSource>(anIO);
                 if ( !idSource->_is_nil() )
                 {
-                  SMESH::long_array_var ids = idSource->GetIDs();
+                  SMESH::smIdType_array_var ids = idSource->GetIDs();
                   elements.resize( ids->length() );
                   for ( unsigned i = 0; i < elements.size(); ++i )
                     elements[i] = ids[i];
@@ -1807,7 +1782,9 @@ namespace
     ActionControl.Bind( SMESHOp::OpMaxElementLength2D,    SMESH_Actor::eMaxElementLength2D );
     ActionControl.Bind( SMESHOp::OpEqualFace,             SMESH_Actor::eCoincidentElems2D );
     ActionControl.Bind( SMESHOp::OpAspectRatio3D,         SMESH_Actor::eAspectRatio3D );
+    ActionControl.Bind( SMESHOp::OpWarping3D,             SMESH_Actor::eWarping3D );
     ActionControl.Bind( SMESHOp::OpVolume,                SMESH_Actor::eVolume3D );
+    ActionControl.Bind( SMESHOp::OpScaledJacobian,        SMESH_Actor::eScaledJacobian );
     ActionControl.Bind( SMESHOp::OpMaxElementLength3D,    SMESH_Actor::eMaxElementLength3D );
     ActionControl.Bind( SMESHOp::OpBareBorderVolume,      SMESH_Actor::eBareBorderVolume );
     ActionControl.Bind( SMESHOp::OpOverConstrainedVolume, SMESH_Actor::eOverConstrainedVolume );
@@ -1851,7 +1828,7 @@ namespace
                 if ( anActor->GetControlMode() != aControl )
                   anActor->SetControlMode( aControl );
                 QString functorName = functorToString( anActor->GetFunctor() );
-                int anEntitiesCount = anActor->GetNumberControlEntities();
+                smIdType anEntitiesCount = anActor->GetNumberControlEntities();
                 if (anEntitiesCount >= 0)
                   functorName = functorName + ": " + QString::number(anEntitiesCount);
                 anActor->GetScalarBarActor()->SetTitle( functorName.toUtf8().constData() );
@@ -1970,12 +1947,12 @@ void SMESHGUI::OnEditDelete()
   int objectCount = 0;
   QString aNameList;
   QString aParentComponent = QString::null;
-  
+
   for( SALOME_ListIteratorOfListIO anIt( selected ); anIt.More(); anIt.Next() )
   {
     Handle(SALOME_InteractiveObject) anIO = anIt.Value();
     if ( anIO.IsNull() ) continue;
-    
+
     QString father = "unknown", name;
 
     _PTR(SObject) aSO = aStudy->FindObjectID( anIO->getEntry() );
@@ -2119,6 +2096,19 @@ void SMESHGUI::OnEditDelete()
         aStudyBuilder->RemoveObjectWithChildren( SO );
       }
       else {// default action: remove SObject from the study
+        // Find Sub-Meshes and Group and delete corresopning visual objects and actors
+        _PTR(ChildIterator) it1 = aStudy->NewChildIterator(SO);
+        for (it1->InitEx(false); it1->More(); it1->Next()) {
+          _PTR(SObject) SObj = it1->Value();
+          if (!SObj) continue;
+          if (SObj->FindAttribute(anAttr, "AttributeIOR")) {
+            SMESH::SMESH_GroupBase_var aGroup = SMESH::SMESH_GroupBase::_narrow(SMESH::SObjectToObject(SObj));
+            SMESH::SMESH_subMesh_var   aSubMesh = SMESH::SMESH_subMesh::_narrow(SMESH::SObjectToObject(SObj));
+            if (!aGroup->_is_nil() || !aSubMesh->_is_nil()) {
+              SMESH::RemoveVisualObjectWithActors(SObj->GetID().c_str(), true);
+            }
+          }
+        }
         // san - it's no use opening a transaction here until UNDO/REDO is provided in SMESH
         //SUIT_Operation *op = new SALOMEGUI_ImportOperation(myActiveStudy);
         //op->start();
@@ -2155,13 +2145,13 @@ SMESH::SMESH_Gen_var SMESHGUI::myComponentSMESH = SMESH::SMESH_Gen::_nil();
  *
  */
 //=============================================================================
-SMESHGUI::SMESHGUI() :
-SalomeApp_Module( "SMESH" )
+SMESHGUI::SMESHGUI() : SalomeApp_Module( "SMESH" )
 {
   if ( CORBA::is_nil( myComponentSMESH ) )
   {
     CORBA::Boolean anIsEmbeddedMode;
     myComponentSMESH = SMESH_Client::GetSMESHGen(getApp()->orb(),anIsEmbeddedMode);
+
     //MESSAGE("-------------------------------> anIsEmbeddedMode=" << anIsEmbeddedMode);
 
     //  0019923: EDF 765 SMESH : default values of hypothesis
@@ -2252,7 +2242,7 @@ bool SMESHGUI::automaticUpdate( SMESH::SMESH_IDSource_ptr theMesh,
   long updateLimit = resMgr->integerValue( "SMESH", "update_limit", 500000 );
   bool incrementalLimit = resMgr->booleanValue( "SMESH", "incremental_limit", false );
 
-  SMESH::long_array_var info = theMesh->GetMeshInfo();
+  SMESH::smIdType_array_var info = theMesh->GetMeshInfo();
   long nbOdElems = info[SMDSEntity_0D];
   long nbEdges   = info[SMDSEntity_Edge] + info[SMDSEntity_Quad_Edge];
   long nbFaces   = info[SMDSEntity_Triangle]   + info[SMDSEntity_Quad_Triangle]   + info[SMDSEntity_BiQuad_Triangle] +
@@ -2570,6 +2560,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
   SVTK_ViewWindow* vtkwnd = dynamic_cast<SVTK_ViewWindow*>( view );
 
   //QAction* act = action( theCommandID );
+  bool logAction(false);
 
   switch (theCommandID) {
   case SMESHOp::OpDelete:
@@ -2581,14 +2572,12 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
   case SMESHOp::OpImportMED:
   case SMESHOp::OpImportSTL:
   case SMESHOp::OpImportCGNS:
-  case SMESHOp::OpImportSAUV:
   case SMESHOp::OpImportGMF:
   case SMESHOp::OpPopupImportDAT:
   case SMESHOp::OpPopupImportUNV:
   case SMESHOp::OpPopupImportMED:
   case SMESHOp::OpPopupImportSTL:
   case SMESHOp::OpPopupImportCGNS:
-  case SMESHOp::OpPopupImportSAUV:
   case SMESHOp::OpPopupImportGMF:
     {
       if(isStudyLocked()) break;
@@ -2619,14 +2608,12 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
   case SMESHOp::OpExportUNV:
   case SMESHOp::OpExportSTL:
   case SMESHOp::OpExportCGNS:
-  case SMESHOp::OpExportSAUV:
   case SMESHOp::OpExportGMF:
   case SMESHOp::OpPopupExportDAT:
   case SMESHOp::OpPopupExportMED:
   case SMESHOp::OpPopupExportUNV:
   case SMESHOp::OpPopupExportSTL:
   case SMESHOp::OpPopupExportCGNS:
-  case SMESHOp::OpPopupExportSAUV:
   case SMESHOp::OpPopupExportGMF:
     {
       ::ExportMeshToFile(theCommandID);
@@ -2891,6 +2878,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     break;
   case SMESHOp::OpCopyMesh:
     {
+      logAction = true;
       if (isStudyLocked()) break;
       EmitSignalDeactivateDialog();
       ( new SMESHGUI_CopyMeshDlg( this ) )->show();
@@ -3034,9 +3022,49 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
       }
       break;
     }
+  // Adaptation - begin
+#ifndef DISABLE_MG_ADAPT
+  case SMESHOp::OpMGAdapt:
+    {
+      if ( isStudyLocked() )
+        break;
+      EmitSignalDeactivateDialog();
+
+      SALOME::GenericObj_wrap< SMESH::MG_ADAPT > model = GetSMESHGen()->CreateMG_ADAPT();
+      bool isCreation = false;
+      ( new SMESHGUI_MG_ADAPTDRIVER( this, model, isCreation ))->show();
+      break;
+    }
+#endif
+#ifndef DISABLE_HOMARD_ADAPT
+  case SMESHOp::OpHomardAdapt:
+    {
+      if ( isStudyLocked() )
+        break;
+      EmitSignalDeactivateDialog();
+
+      SALOME::GenericObj_wrap< SMESHHOMARD::HOMARD_Gen > homardGen;
+      try {
+        homardGen = GetSMESHGen()->CreateHOMARD_ADAPT();
+      }
+      catch ( const SALOME::SALOME_Exception& S_ex ) {
+        SUIT_MessageBox::critical(SMESHGUI::desktop(),
+                                  QObject::tr("SMESH_ERROR"),
+                                  QObject::tr(S_ex.details.text.in()));
+      }
+      if (!homardGen->_is_nil()) {
+        SMESHGUI_HomardAdaptDlg *aDlg = new SMESHGUI_HomardAdaptDlg(homardGen);
+        aDlg->show();
+      }
+      break;
+    }
+#endif
+  // Adaptation - end
   case SMESHOp::OpSplitBiQuadratic:
   case SMESHOp::OpConvertMeshToQuadratic:
+  case SMESHOp::OpCreateDualMesh:
   case SMESHOp::OpCreateBoundaryElements: // create 2D mesh from 3D
+  case SMESHOp::OpCreate2DElements: // create full 2D mesh from 3D
   case SMESHOp::OpReorientFaces:
   case SMESHOp::OpCreateGeometryGroup:
     {
@@ -3104,10 +3132,10 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
               try {
                 SMESH::SMESH_Mesh_var aMesh = aSubMesh->GetFather();
                 // get submesh elements list by types
-                SMESH::long_array_var aNodes = aSubMesh->GetElementsByType(SMESH::NODE);
-                SMESH::long_array_var aEdges = aSubMesh->GetElementsByType(SMESH::EDGE);
-                SMESH::long_array_var aFaces = aSubMesh->GetElementsByType(SMESH::FACE);
-                SMESH::long_array_var aVolumes = aSubMesh->GetElementsByType(SMESH::VOLUME);
+                SMESH::smIdType_array_var aNodes = aSubMesh->GetElementsByType(SMESH::NODE);
+                SMESH::smIdType_array_var aEdges = aSubMesh->GetElementsByType(SMESH::EDGE);
+                SMESH::smIdType_array_var aFaces = aSubMesh->GetElementsByType(SMESH::FACE);
+                SMESH::smIdType_array_var aVolumes = aSubMesh->GetElementsByType(SMESH::VOLUME);
                 // create group for each type o elements
                 QString aName = IObject->getName();
                 QStringList anEntryList;
@@ -3536,6 +3564,14 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
       }
       break;
     }
+  case SMESHOp::OpRemoveNodeWithReconn:
+    {
+      if(isStudyLocked()) break;
+      if ( warnOnGeomModif() )
+        break; // action forbidden as geometry modified
+      startOperation( SMESHOp::OpRemoveNodeWithReconn );
+      break;
+    }
   case SMESHOp::OpRemoveElements:                                    // REMOVES ELEMENTS
     {
       if(isStudyLocked()) break;
@@ -3615,7 +3651,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
             try {
               SUIT_OverrideCursor wc;
               SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor();
-              int removed = aMeshEditor->RemoveOrphanNodes();
+              smIdType removed = aMeshEditor->RemoveOrphanNodes();
               SUIT_MessageBox::information(SMESHGUI::desktop(),
                                            tr("SMESH_INFORMATION"),
                                            tr("NB_NODES_REMOVED").arg(removed));
@@ -3668,6 +3704,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpTranslation:
     {
+      logAction = true;
       if(isStudyLocked()) break;
       if ( warnOnGeomModif() )
         break; // action forbidden as geometry modified
@@ -3683,6 +3720,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpRotation:
     {
+      logAction = true;
       if(isStudyLocked()) break;
       if ( warnOnGeomModif() )
         break; // action forbidden as geometry modified
@@ -3698,6 +3736,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpSymmetry:
     {
+      logAction = true;
       if(isStudyLocked()) break;
       if ( warnOnGeomModif() )
         break; // action forbidden as geometry modified
@@ -3713,6 +3752,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     }
   case SMESHOp::OpScale:
     {
+      logAction = true;
       if(isStudyLocked()) break;
       if ( warnOnGeomModif() )
         break; // action forbidden as geometry modified
@@ -3729,6 +3769,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
 
   case SMESHOp::OpOffset:
     {
+      logAction = true;
       if(isStudyLocked()) break;
       if ( warnOnGeomModif() )
         break; // action forbidden as geometry modified
@@ -3745,6 +3786,7 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
 
   case SMESHOp::OpSewing:
     {
+      logAction = true;
       if(isStudyLocked()) break;
       if ( warnOnGeomModif() )
         break; // action forbidden as geometry modified
@@ -3794,6 +3836,24 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
     startOperation( SMESHOp::OpMoveNode );
     break;
 
+  case SMESHOp::OpMoveNodeInteractive:
+    if ( warnOnGeomModif() )
+      break; // action forbidden as geometry modified
+    startOperation( SMESHOp::OpMoveNodeInteractive );
+    break;
+
+  case SMESHOp::OpSplitEdgeInteract:
+    if ( warnOnGeomModif() )
+      break; // action forbidden as geometry modified
+    startOperation( SMESHOp::OpSplitEdgeInteract );
+    break;
+
+  case SMESHOp::OpSplitFaceInteract:
+    if ( warnOnGeomModif() )
+      break; // action forbidden as geometry modified
+    startOperation( SMESHOp::OpSplitFaceInteract );
+    break;
+
   case SMESHOp::OpDuplicateNodes:
     {
       if(isStudyLocked()) break;
@@ -3857,7 +3917,9 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
   case SMESHOp::OpMaxElementLength2D:
   case SMESHOp::OpEqualFace:
   case SMESHOp::OpAspectRatio3D:
+  case SMESHOp::OpWarping3D:
   case SMESHOp::OpVolume:
+  case SMESHOp::OpScaledJacobian:
   case SMESHOp::OpMaxElementLength3D:
   case SMESHOp::OpBareBorderVolume:
   case SMESHOp::OpOverConstrainedVolume:
@@ -3954,6 +4016,14 @@ bool SMESHGUI::OnGUIEvent( int theCommandID )
 
   anApp->updateActions(); //SRN: To update a Save button in the toolbar
   //updateObjBrowser();
+  if(logAction)
+  {
+    QAction* anAction = action( theCommandID );
+    CAM_Application::logStructuredUserEvent( "Mesh",
+                                             "Operation",
+                                             anAction->text(),
+                                             "activated" );
+  }
   return true;
 }
 
@@ -4081,7 +4151,6 @@ void SMESHGUI::initialize( CAM_Application* app )
 #ifdef WITH_CGNS
   createSMESHAction( SMESHOp::OpImportCGNS, "IMPORT_CGNS" );
 #endif
-  createSMESHAction( SMESHOp::OpImportSAUV, "IMPORT_SAUV" );
   createSMESHAction( SMESHOp::OpImportGMF,  "IMPORT_GMF"  );
   createSMESHAction( SMESHOp::OpPopupImportUNV, "IMPORT_UNV");
   createSMESHAction( SMESHOp::OpPopupImportMED, "IMPORT_MED");
@@ -4089,7 +4158,6 @@ void SMESHGUI::initialize( CAM_Application* app )
 #ifdef WITH_CGNS
   createSMESHAction( SMESHOp::OpPopupImportCGNS, "IMPORT_CGNS" );
 #endif
-  createSMESHAction( SMESHOp::OpPopupImportSAUV, "IMPORT_SAUV" );
   createSMESHAction( SMESHOp::OpPopupImportGMF,  "IMPORT_GMF"  );
 
   createSMESHAction( SMESHOp::OpExportDAT,  "DAT" );
@@ -4099,7 +4167,6 @@ void SMESHGUI::initialize( CAM_Application* app )
 #ifdef WITH_CGNS
   createSMESHAction( SMESHOp::OpExportCGNS, "CGNS");
 #endif
-  createSMESHAction( SMESHOp::OpExportSAUV,     "SAUV");
   createSMESHAction( SMESHOp::OpExportGMF,      "GMF" );
   createSMESHAction( SMESHOp::OpPopupExportDAT, "DAT" );
   createSMESHAction( SMESHOp::OpPopupExportMED, "MED" );
@@ -4108,7 +4175,6 @@ void SMESHGUI::initialize( CAM_Application* app )
 #ifdef WITH_CGNS
   createSMESHAction( SMESHOp::OpPopupExportCGNS, "CGNS");
 #endif
-  createSMESHAction( SMESHOp::OpPopupExportSAUV, "SAUV");
   createSMESHAction( SMESHOp::OpPopupExportGMF,  "GMF" );
   createSMESHAction( SMESHOp::OpFileInformation, "FILE_INFO" );
   createSMESHAction( SMESHOp::OpDelete,          "DELETE", "ICON_DELETE", Qt::Key_Delete );
@@ -4168,11 +4234,13 @@ void SMESHGUI::initialize( CAM_Application* app )
   createSMESHAction( SMESHOp::OpMaxElementLength2D,    "MAX_ELEMENT_LENGTH_2D",   "ICON_MAX_ELEMENT_LENGTH_2D",   0, true );
   createSMESHAction( SMESHOp::OpEqualFace,             "EQUAL_FACE",              "ICON_EQUAL_FACE",    0, true );
   createSMESHAction( SMESHOp::OpAspectRatio3D,         "ASPECT_3D",               "ICON_ASPECT_3D",     0, true );
+  createSMESHAction( SMESHOp::OpWarping3D,             "WARP_3D",                 "ICON_WARP",          0, true);
   createSMESHAction( SMESHOp::OpVolume,                "VOLUME_3D",               "ICON_VOLUME_3D",     0, true );
   createSMESHAction( SMESHOp::OpMaxElementLength3D,    "MAX_ELEMENT_LENGTH_3D",   "ICON_MAX_ELEMENT_LENGTH_3D",   0, true );
   createSMESHAction( SMESHOp::OpBareBorderVolume,      "BARE_BORDER_VOLUME",      "ICON_BARE_BORDER_VOLUME",      0, true );
   createSMESHAction( SMESHOp::OpOverConstrainedVolume, "OVER_CONSTRAINED_VOLUME", "ICON_OVER_CONSTRAINED_VOLUME", 0, true );
   createSMESHAction( SMESHOp::OpEqualVolume,           "EQUAL_VOLUME",            "ICON_EQUAL_VOLUME",  0, true );
+  createSMESHAction( SMESHOp::OpScaledJacobian,        "SCALED_JACOBIAN",         "ICON_SCALED_JACOBIAN",         0, true );
   createSMESHAction( SMESHOp::OpOverallMeshQuality,    "OVERALL_MESH_QUALITY",    "ICON_OVL_MESH_QUALITY" );
 
   createSMESHAction( SMESHOp::OpNode,                   "NODE",            "ICON_DLG_NODE" );
@@ -4205,6 +4273,7 @@ void SMESHGUI::initialize( CAM_Application* app )
   createSMESHAction( SMESHOp::OpRemoveNodes,       "REMOVE_NODES",          "ICON_DLG_REM_NODE" );
   createSMESHAction( SMESHOp::OpRemoveElements,    "REMOVE_ELEMENTS",       "ICON_DLG_REM_ELEMENT" );
   createSMESHAction( SMESHOp::OpRemoveOrphanNodes, "REMOVE_ORPHAN_NODES",   "ICON_DLG_REM_ORPHAN_NODES" );
+  createSMESHAction( SMESHOp::OpRemoveNodeWithReconn, "REMOVE_NODE_RECON",  "ICON_REM_NODE_RECON" );
   createSMESHAction( SMESHOp::OpClearMesh,         "CLEAR_MESH",            "ICON_CLEAR_MESH" );
 
   //createSMESHAction( SMESHOp::OpRenumberingNodes,    "RENUM_NODES",     "ICON_DLG_RENUMBERING_NODES" );
@@ -4219,6 +4288,9 @@ void SMESHGUI::initialize( CAM_Application* app )
   createSMESHAction( SMESHOp::OpMergeNodes,             "MERGE",           "ICON_SMESH_MERGE_NODES" );
   createSMESHAction( SMESHOp::OpMergeElements,          "MERGE_ELEMENTS",  "ICON_DLG_MERGE_ELEMENTS" );
   createSMESHAction( SMESHOp::OpMoveNode,               "MESH_THROU_POINT","ICON_DLG_MOVE_NODE" );
+  createSMESHAction( SMESHOp::OpMoveNodeInteractive,    "MOVE_NODE_INTRCT","ICON_DLG_MOVE_NODE_INTERACTIVE" );
+  createSMESHAction( SMESHOp::OpSplitEdgeInteract,  "SPLIT_DIAG_INTRC","ICON_SPLIT_DIAG_INTERACTIVE" );
+  createSMESHAction( SMESHOp::OpSplitFaceInteract,      "SPLIT_FACE_INTRC","ICON_SPLIT_FACE_INTERACTIVE" );
   createSMESHAction( SMESHOp::OpDuplicateNodes,         "DUPLICATE_NODES", "ICON_SMESH_DUPLICATE_NODES" );
   createSMESHAction( SMESHOp::OpDiagonalInversion,      "INV",             "ICON_DLG_MESH_DIAGONAL" );
   createSMESHAction( SMESHOp::OpUnionOfTwoTriangle,     "UNION2",          "ICON_UNION2TRI" );
@@ -4234,7 +4306,9 @@ void SMESHGUI::initialize( CAM_Application* app )
   createSMESHAction( SMESHOp::OpRevolution,             "REVOLUTION",      "ICON_REVOLUTION" );
   createSMESHAction( SMESHOp::OpPatternMapping,         "MAP",             "ICON_MAP" );
   createSMESHAction( SMESHOp::OpConvertMeshToQuadratic, "CONV_TO_QUAD",    "ICON_CONV_TO_QUAD" );
+  createSMESHAction( SMESHOp::OpCreateDualMesh,         "CREATE_DUAL_MESH","ICON_CREATE_DUAL_MESH" );
   createSMESHAction( SMESHOp::OpCreateBoundaryElements, "2D_FROM_3D",      "ICON_2D_FROM_3D" );
+  createSMESHAction( SMESHOp::OpCreate2DElements,    "2D_FROM_3D_ELEMENTS","ICON_2D_FROM_3D_ELEMENTS" );
 
   createSMESHAction( SMESHOp::OpReset,               "RESET" );
   createSMESHAction( SMESHOp::OpScalarBarProperties, "SCALAR_BAR_PROP" );
@@ -4271,6 +4345,15 @@ void SMESHGUI::initialize( CAM_Application* app )
   createSMESHAction( SMESHOp::OpAutoColor,        "AUTO_COLOR" );
   createSMESHAction( SMESHOp::OpDisableAutoColor, "DISABLE_AUTO_COLOR" );
 
+  // Adaptation - begin
+#ifndef DISABLE_MG_ADAPT
+  createSMESHAction( SMESHOp::OpMGAdapt, "MG_ADAPT", "ICON_MG_ADAPT" );
+#endif
+#ifndef DISABLE_HOMARD_ADAPT
+  createSMESHAction( SMESHOp::OpHomardAdapt, "HOMARD_ADAPT", "ICON_HOMARD_ADAPT" );
+#endif
+  // Adaptation - end
+
   createSMESHAction( SMESHOp::OpMinimumDistance,  "MEASURE_MIN_DIST", "ICON_MEASURE_MIN_DIST" );
   createSMESHAction( SMESHOp::OpBoundingBox,      "MEASURE_BND_BOX",  "ICON_MEASURE_BND_BOX" );
   createSMESHAction( SMESHOp::OpPropertiesLength, "MEASURE_LENGTH",   "ICON_MEASURE_LENGTH" );
@@ -4297,9 +4380,9 @@ void SMESHGUI::initialize( CAM_Application* app )
                << SMESHOp::OpMinimumAngle << SMESHOp::OpWarpingAngle << SMESHOp::OpSkew
                << SMESHOp::OpMaxElementLength2D << SMESHOp::OpBareBorderFace
                << SMESHOp::OpOverConstrainedFace << SMESHOp::OpEqualFace                // face controls
-               << SMESHOp::OpAspectRatio3D << SMESHOp::OpVolume
+               << SMESHOp::OpAspectRatio3D << SMESHOp::OpVolume << SMESHOp::OpWarping3D
                << SMESHOp::OpMaxElementLength3D << SMESHOp::OpBareBorderVolume
-               << SMESHOp::OpOverConstrainedVolume << SMESHOp::OpEqualVolume;           // volume controls
+               << SMESHOp::OpOverConstrainedVolume << SMESHOp::OpEqualVolume << SMESHOp::OpScaledJacobian; // volume controls
   QActionGroup* aCtrlGroup = new QActionGroup( application()->desktop() );
   aCtrlGroup->setExclusive( true );
   for( int i = 0; i < aCtrlActions.size(); i++ )
@@ -4312,6 +4395,9 @@ void SMESHGUI::initialize( CAM_Application* app )
       meshId    = createMenu( tr( "MEN_MESH" ),    -1, 70, 10 ),
       ctrlId    = createMenu( tr( "MEN_CTRL" ),    -1, 60, 10 ),
       modifyId  = createMenu( tr( "MEN_MODIFY" ),  -1, 40, 10 ),
+#if !defined(DISABLE_MG_ADAPT) || !defined(DISABLE_HOMARD_ADAPT)
+      adaptId   = createMenu( tr( "MEN_ADAPT" ),   -1, 80, 10 ),
+#endif
       measureId = createMenu( tr( "MEN_MEASURE" ), -1, 50, 10 ),
       viewId    = createMenu( tr( "MEN_VIEW" ),    -1,  2 );
 
@@ -4338,7 +4424,6 @@ void SMESHGUI::initialize( CAM_Application* app )
 #ifdef WITH_CGNS
   createMenu( SMESHOp::OpImportCGNS, importId, -1 );
 #endif
-  createMenu( SMESHOp::OpImportSAUV, importId, -1 );
   createMenu( SMESHOp::OpImportGMF,  importId, -1 );
   createMenu( SMESHOp::OpExportDAT,  exportId, -1 );
   createMenu( SMESHOp::OpExportMED,  exportId, -1 );
@@ -4347,7 +4432,6 @@ void SMESHGUI::initialize( CAM_Application* app )
 #ifdef WITH_CGNS
   createMenu( SMESHOp::OpExportCGNS, exportId, -1 );
 #endif
-  createMenu( SMESHOp::OpExportSAUV, exportId, -1 );
   createMenu( SMESHOp::OpExportGMF,  exportId, -1 );
   createMenu( separator(), fileId, 10 );
 
@@ -4360,6 +4444,7 @@ void SMESHGUI::initialize( CAM_Application* app )
   createMenu( SMESHOp::OpEditMeshOrSubMesh,    meshId, -1 );
   createMenu( SMESHOp::OpBuildCompoundMesh,    meshId, -1 );
   createMenu( SMESHOp::OpCopyMesh,             meshId, -1 );
+  createMenu( SMESHOp::OpCreateDualMesh,       meshId, -1 );
   createMenu( separator(),                     meshId, -1 );
   createMenu( SMESHOp::OpCompute,              meshId, -1 );
   createMenu( SMESHOp::OpPreCompute,           meshId, -1 );
@@ -4408,11 +4493,13 @@ void SMESHGUI::initialize( CAM_Application* app )
   createMenu( SMESHOp::OpEqualFace,             faceId,   -1 );
   createMenu( SMESHOp::OpDeflection2D,          faceId,   -1 );
   createMenu( SMESHOp::OpAspectRatio3D,         volumeId, -1 );
+  createMenu( SMESHOp::OpWarping3D,             volumeId, -1 );
   createMenu( SMESHOp::OpVolume,                volumeId, -1 );
   createMenu( SMESHOp::OpMaxElementLength3D,    volumeId, -1 );
   createMenu( SMESHOp::OpBareBorderVolume,      volumeId, -1 );
   createMenu( SMESHOp::OpOverConstrainedVolume, volumeId, -1 );
   createMenu( SMESHOp::OpEqualVolume,           volumeId, -1 );
+  createMenu( SMESHOp::OpScaledJacobian,        volumeId, -1 );
   createMenu( separator(),                      ctrlId,   -1 );
   createMenu( SMESHOp::OpReset,                 ctrlId,   -1 );
   createMenu( separator(),                      ctrlId,   -1 );
@@ -4445,14 +4532,18 @@ void SMESHGUI::initialize( CAM_Application* app )
   createMenu( SMESHOp::OpBiQuadraticPentahedron, addId, -1 );
   createMenu( SMESHOp::OpQuadraticHexahedron,    addId, -1 );
   createMenu( SMESHOp::OpTriQuadraticHexahedron, addId, -1 );
-
-  createMenu( SMESHOp::OpRemoveNodes,       removeId, -1 );
-  createMenu( SMESHOp::OpRemoveElements,    removeId, -1 );
-  createMenu( SMESHOp::OpRemoveOrphanNodes, removeId, -1 );
-  createMenu( separator(),                  removeId, -1 );
-  createMenu( SMESHOp::OpDeleteGroup,       removeId, -1 );
-  createMenu( separator(),                  removeId, -1 );
-  createMenu( SMESHOp::OpClearMesh,         removeId, -1 );
+  createMenu( separator(),                       addId, -1 );
+  createMenu( SMESHOp::OpSplitEdgeInteract,      addId, -1 );
+  createMenu( SMESHOp::OpSplitFaceInteract,      addId, -1 );
+
+  createMenu( SMESHOp::OpRemoveNodes,          removeId, -1 );
+  createMenu( SMESHOp::OpRemoveElements,       removeId, -1 );
+  createMenu( SMESHOp::OpRemoveOrphanNodes,    removeId, -1 );
+  createMenu( SMESHOp::OpRemoveNodeWithReconn, removeId, -1 );
+  createMenu( separator(),                     removeId, -1 );
+  createMenu( SMESHOp::OpDeleteGroup,          removeId, -1 );
+  createMenu( separator(),                     removeId, -1 );
+  createMenu( SMESHOp::OpClearMesh,            removeId, -1 );
 
   //createMenu( SMESHOp::OpRenumberingNodes,    renumId, -1 );
   //createMenu( SMESHOp::OpRenumberingElements, renumId, -1 );
@@ -4469,6 +4560,7 @@ void SMESHGUI::initialize( CAM_Application* app )
 
   createMenu( SMESHOp::OpConvertMeshToQuadratic, modifyId, -1 );
   createMenu( SMESHOp::OpCreateBoundaryElements, modifyId, -1 );
+  createMenu( SMESHOp::OpCreate2DElements,       modifyId, -1 );
   createMenu( SMESHOp::OpExtrusion,              modifyId, -1 );
   createMenu( SMESHOp::OpExtrusionAlongAPath,    modifyId, -1 );
   createMenu( SMESHOp::OpRevolution,             modifyId, -1 );
@@ -4484,6 +4576,15 @@ void SMESHGUI::initialize( CAM_Application* app )
   createMenu( SMESHOp::OpSmoothing,              modifyId, -1 );
   createMenu( SMESHOp::OpPatternMapping,         modifyId, -1 );
 
+  // Adaptation - begin
+#ifndef DISABLE_MG_ADAPT
+  createMenu( SMESHOp::OpMGAdapt, adaptId, -1 );
+#endif
+#ifndef DISABLE_HOMARD_ADAPT
+  createMenu( SMESHOp::OpHomardAdapt, adaptId, -1 );
+#endif
+  // Adaptation - end
+
   createMenu( SMESHOp::OpMinimumDistance,  measureId,   -1 );
   createMenu( SMESHOp::OpBoundingBox,      measureId,   -1 );
   createMenu( SMESHOp::OpAngle,            measureId,   -1 );
@@ -4498,22 +4599,7 @@ void SMESHGUI::initialize( CAM_Application* app )
   connect( volumeMenu, SIGNAL( aboutToShow() ), this, SLOT( onUpdateControlActions() ) );
 
   // ----- create toolbars --------------
-  int meshTb       = createTool( tr( "TB_MESH" ),      QString( "SMESHMeshToolbar" ) ),
-      info         = createTool( tr( "TB_INFO" ),      QString( "SMESHInformationToolbar" ) ),
-      groupTb      = createTool( tr( "TB_GROUP" ),     QString( "SMESHGroupToolbar" ) ),
-      ctrl0dTb     = createTool( tr( "TB_CTRL0D" ),    QString( "SMESHNodeControlsToolbar" ) ),
-      ctrl1dTb     = createTool( tr( "TB_CTRL1D" ),    QString( "SMESHEdgeControlsToolbar" ) ),
-      ctrl2dTb     = createTool( tr( "TB_CTRL2D" ),    QString( "SMESHFaceControlsToolbar" ) ),
-      ctrl3dTb     = createTool( tr( "TB_CTRL3D" ),    QString( "SMESHVolumeControlsToolbar" ) ),
-      addElemTb    = createTool( tr( "TB_ADD" ),       QString( "SMESHAddElementToolbar" ) ),
-      addNonElemTb = createTool( tr( "TB_ADDNON" ),    QString( "SMESHAddElementToolbar" ) ),
-      remTb        = createTool( tr( "TB_REM" ),       QString( "SMESHRemoveToolbar" ) ),
-    //renumbTb     = createTool( tr( "TB_RENUMBER" ),  QString( "SMESHRenumberingToolbar" ) ),
-      transformTb  = createTool( tr( "TB_TRANSFORM" ), QString( "SMESHTransformationToolbar" ) ),
-      modifyTb     = createTool( tr( "TB_MODIFY" ),    QString( "SMESHModificationToolbar" ) ),
-      measuremTb   = createTool( tr( "TB_MEASUREM" ),  QString( "SMESHMeasurementsToolbar" ) ),
-      dispModeTb   = createTool( tr( "TB_DISP_MODE" ), QString( "SMESHDisplayModeToolbar" ) );
-
+  int meshTb = createTool( tr( "TB_MESH" ), QString( "SMESHMeshToolbar" ) ) ;
   createTool( SMESHOp::OpCreateMesh,        meshTb );
   createTool( SMESHOp::OpCreateSubMesh,     meshTb );
   createTool( SMESHOp::OpEditMeshOrSubMesh, meshTb );
@@ -4525,25 +4611,30 @@ void SMESHGUI::initialize( CAM_Application* app )
   createTool( SMESHOp::OpEvaluate,          meshTb );
   createTool( SMESHOp::OpMeshOrder,         meshTb );
 
+  int infoTb = createTool( tr( "TB_INFO" ), QString( "SMESHInformationToolbar" ) ) ;
+  createTool( SMESHOp::OpMeshInformation,    infoTb );
+  //createTool( SMESHOp::OpStdInfo, meshTb );
+  //createTool( SMESHOp::OpWhatIs, meshTb ); // VSR: issue #0021242 (eliminate "Mesh Element Information" command)
+  createTool( SMESHOp::OpFindElementByPoint, infoTb );
+
+  int groupTb = createTool( tr( "TB_GROUP" ), QString( "SMESHGroupToolbar" ) ) ;
   createTool( SMESHOp::OpCreateGroup,         groupTb );
   createTool( SMESHOp::OpCreateGeometryGroup, groupTb );
   createTool( SMESHOp::OpConstructGroup,      groupTb );
   createTool( SMESHOp::OpEditGroup,           groupTb );
 
-  createTool( SMESHOp::OpMeshInformation,    info );
-  //createTool( SMESHOp::OpStdInfo, meshTb );
-  //createTool( SMESHOp::OpWhatIs, meshTb ); // VSR: issue #0021242 (eliminate "Mesh Element Information" command)
-  createTool( SMESHOp::OpFindElementByPoint, info );
-
+  int ctrl0dTb = createTool( tr( "TB_CTRL0D" ), QString( "SMESHNodeControlsToolbar" ) ) ;
   createTool( SMESHOp::OpFreeNode,  ctrl0dTb );
   createTool( SMESHOp::OpEqualNode, ctrl0dTb );
   //createTool( SMESHOp::OpNodeConnectivityNb, ctrl0dTb );
 
+  int ctrl1dTb = createTool( tr( "TB_CTRL1D" ), QString( "SMESHEdgeControlsToolbar" ) ) ;
   createTool( SMESHOp::OpFreeBorder, ctrl1dTb );
   createTool( SMESHOp::OpLength,     ctrl1dTb );
   createTool( SMESHOp::OpConnection, ctrl1dTb );
   createTool( SMESHOp::OpEqualEdge,  ctrl1dTb );
 
+  int ctrl2dTb = createTool( tr( "TB_CTRL2D" ), QString( "SMESHFaceControlsToolbar" ) ) ;
   createTool( SMESHOp::OpFreeEdge,            ctrl2dTb );
   createTool( SMESHOp::OpFreeFace,            ctrl2dTb );
   createTool( SMESHOp::OpBareBorderFace,      ctrl2dTb );
@@ -4560,13 +4651,17 @@ void SMESHGUI::initialize( CAM_Application* app )
   createTool( SMESHOp::OpEqualFace,           ctrl2dTb );
   createTool( SMESHOp::OpDeflection2D,        ctrl2dTb );
 
+  int ctrl3dTb = createTool( tr( "TB_CTRL3D" ), QString( "SMESHVolumeControlsToolbar" ) ) ;
   createTool( SMESHOp::OpAspectRatio3D,         ctrl3dTb );
+  createTool( SMESHOp::OpWarping3D,             ctrl3dTb );
   createTool( SMESHOp::OpVolume,                ctrl3dTb );
   createTool( SMESHOp::OpMaxElementLength3D,    ctrl3dTb );
   createTool( SMESHOp::OpBareBorderVolume,      ctrl3dTb );
   createTool( SMESHOp::OpOverConstrainedVolume, ctrl3dTb );
   createTool( SMESHOp::OpEqualVolume,           ctrl3dTb );
+  createTool( SMESHOp::OpScaledJacobian,        ctrl3dTb );
 
+  int addElemTb = createTool( tr( "TB_ADD" ), QString( "SMESHAddElementToolbar" ) ) ;
   createTool( SMESHOp::OpNode,              addElemTb );
   createTool( SMESHOp::OpElem0D,            addElemTb );
   createTool( SMESHOp::OpElem0DOnElemNodes, addElemTb );
@@ -4582,6 +4677,7 @@ void SMESHGUI::initialize( CAM_Application* app )
   createTool( SMESHOp::OpHexagonalPrism,    addElemTb );
   createTool( SMESHOp::OpPolyhedron,        addElemTb );
 
+  int addNonElemTb = createTool( tr( "TB_ADDNON" ), QString( "SMESHAddElementToolbar" ) ) ;
   createTool( SMESHOp::OpQuadraticEdge,          addNonElemTb );
   createTool( SMESHOp::OpQuadraticTriangle,      addNonElemTb );
   createTool( SMESHOp::OpBiQuadraticTriangle,    addNonElemTb );
@@ -4595,14 +4691,17 @@ void SMESHGUI::initialize( CAM_Application* app )
   createTool( SMESHOp::OpQuadraticHexahedron,    addNonElemTb );
   createTool( SMESHOp::OpTriQuadraticHexahedron, addNonElemTb );
 
+  int remTb = createTool( tr( "TB_REM" ), QString( "SMESHRemoveToolbar" ) ) ;
   createTool( SMESHOp::OpRemoveNodes,       remTb );
   createTool( SMESHOp::OpRemoveElements,    remTb );
   createTool( SMESHOp::OpRemoveOrphanNodes, remTb );
   createTool( SMESHOp::OpClearMesh,         remTb );
 
+//   int renumbTb     = createTool( tr( "TB_RENUMBER" ),  QString( "SMESHRenumberingToolbar" ) ) ;
   //createTool( SMESHOp::OpRenumberingNodes,    renumbTb );
   //createTool( SMESHOp::OpRenumberingElements, renumbTb );
 
+  int transformTb = createTool( tr( "TB_TRANSFORM" ), QString( "SMESHTransformationToolbar" ) ) ;
   createTool( SMESHOp::OpMergeNodes,     transformTb );
   createTool( SMESHOp::OpMergeElements,  transformTb );
   createTool( SMESHOp::OpTranslation,    transformTb );
@@ -4613,8 +4712,10 @@ void SMESHGUI::initialize( CAM_Application* app )
   createTool( SMESHOp::OpSewing,         transformTb );
   createTool( SMESHOp::OpDuplicateNodes, transformTb );
 
+  int modifyTb = createTool( tr( "TB_MODIFY" ), QString( "SMESHModificationToolbar" ) ) ;
   createTool( SMESHOp::OpConvertMeshToQuadratic, modifyTb );
   createTool( SMESHOp::OpCreateBoundaryElements, modifyTb );
+  createTool( SMESHOp::OpCreate2DElements,       modifyTb );
   createTool( SMESHOp::OpExtrusion,              modifyTb );
   createTool( SMESHOp::OpExtrusionAlongAPath,    modifyTb );
   createTool( SMESHOp::OpRevolution,             modifyTb );
@@ -4630,8 +4731,28 @@ void SMESHGUI::initialize( CAM_Application* app )
   createTool( SMESHOp::OpSmoothing,              modifyTb );
   createTool( SMESHOp::OpPatternMapping,         modifyTb );
 
+  int interactTb = createTool( tr( "TB_INTERACT" ), QString( "SMESHInteractiveToolbar" ) ) ;
+  createTool( SMESHOp::OpMoveNodeInteractive,   interactTb );
+  createTool( SMESHOp::OpRemoveNodeWithReconn,  interactTb );
+  createTool( SMESHOp::OpSplitEdgeInteract, interactTb );
+  createTool( SMESHOp::OpSplitFaceInteract,     interactTb );
+
+  // Adaptation - begin
+#if !defined(DISABLE_MG_ADAPT) || !defined(DISABLE_HOMARD_ADAPT)
+  int adaptTb = createTool( tr( "TB_ADAPTATION" ), QString( "SMESHAdaptationToolbar" ) ) ;
+#endif
+#ifndef DISABLE_MG_ADAPT
+  createTool( SMESHOp::OpMGAdapt, adaptTb );
+#endif
+#ifndef DISABLE_HOMARD_ADAPT
+  createTool( SMESHOp::OpHomardAdapt, adaptTb );
+#endif
+  // Adaptation - end
+
+  int measuremTb = createTool( tr( "TB_MEASUREM" ), QString( "SMESHMeasurementsToolbar" ) ) ;
   createTool( SMESHOp::OpMinimumDistance, measuremTb );
 
+  int dispModeTb = createTool( tr( "TB_DISP_MODE" ), QString( "SMESHDisplayModeToolbar" ) );
   createTool( SMESHOp::OpUpdate, dispModeTb );
 
   QString lc = "$";        // VSR : instead of QtxPopupSelection::defEquality();
@@ -4707,9 +4828,17 @@ void SMESHGUI::initialize( CAM_Application* app )
   popupMgr()->insert( separator(), -1, 0 );
   createPopupItem( SMESHOp::OpConvertMeshToQuadratic, OB, mesh_submesh, "&& " + hasElems );
   createPopupItem( SMESHOp::OpCreateBoundaryElements, OB, mesh_group, "&& selcount=1 && dim>=2");
-  //popupMgr()->insert( separator(), -1, 0 );
 
-  //popupMgr()->insert( separator(), -1, 0 );
+  // Adaptation - begin
+  popupMgr()->insert( separator(), -1, 0 );
+#ifndef DISABLE_MG_ADAPT
+  createPopupItem( SMESHOp::OpMGAdapt, OB, mesh );
+#endif
+#ifndef DISABLE_HOMARD_ADAPT
+  createPopupItem( SMESHOp::OpHomardAdapt, OB, mesh );
+#endif
+  popupMgr()->insert( separator(), -1, 0 );
+  // Adaptation - end
 
   QString only_one_non_empty = QString( " && %1=1 && numberOfNodes>0" ).arg( dc );
   QString multiple_non_empty = QString( " && %1>0 && numberOfNodes>0" ).arg( dc );
@@ -4723,7 +4852,6 @@ void SMESHGUI::initialize( CAM_Application* app )
 #ifdef WITH_CGNS
   createPopupItem( SMESHOp::OpPopupExportCGNS, OB, mesh_group, multiple_non_empty, anId );
 #endif
-  createPopupItem( SMESHOp::OpPopupExportSAUV, OB, mesh_group, only_one_non_empty, anId );
   createPopupItem( SMESHOp::OpPopupExportGMF,  OB, mesh_group, only_one_non_empty, anId );
   createPopupItem( SMESHOp::OpPopupExportDAT,  OB, mesh_group, only_one_non_empty, anId );
 
@@ -4734,7 +4862,6 @@ void SMESHGUI::initialize( CAM_Application* app )
 #ifdef WITH_CGNS
   createPopupItem( SMESHOp::OpPopupImportCGNS, OB, smesh, "", anId );
 #endif
-  createPopupItem( SMESHOp::OpPopupImportSAUV, OB, smesh, "", anId );
   createPopupItem( SMESHOp::OpPopupImportGMF,  OB, smesh, "", anId );
   createPopupItem( SMESHOp::OpPopupImportDAT,  OB, smesh, "", anId );
   popupMgr()->insert( separator(), -1, 0 );
@@ -4991,6 +5118,10 @@ void SMESHGUI::initialize( CAM_Application* app )
   popupMgr()->setRule( action( SMESHOp::OpAspectRatio3D ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule );
   popupMgr()->setRule( action( SMESHOp::OpAspectRatio3D ), "controlMode = 'eAspectRatio3D'", QtxPopupMgr::ToggleRule );
 
+  popupMgr()->insert ( action( SMESHOp::OpWarping3D ), aSubId, -1 );
+  popupMgr()->setRule( action( SMESHOp::OpWarping3D ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule );
+  popupMgr()->setRule( action( SMESHOp::OpWarping3D), "controlMode = 'eWarping3D'", QtxPopupMgr::ToggleRule );
+
   popupMgr()->insert ( action( SMESHOp::OpVolume ), aSubId, -1 );
   popupMgr()->setRule( action( SMESHOp::OpVolume ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule );
   popupMgr()->setRule( action( SMESHOp::OpVolume ), "controlMode = 'eVolume3D'", QtxPopupMgr::ToggleRule );
@@ -5011,6 +5142,10 @@ void SMESHGUI::initialize( CAM_Application* app )
   popupMgr()->setRule( action( SMESHOp::OpEqualVolume ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule );
   popupMgr()->setRule( action( SMESHOp::OpEqualVolume ), "controlMode = 'eCoincidentElems3D'", QtxPopupMgr::ToggleRule );
 
+  popupMgr()->insert ( action( SMESHOp::OpScaledJacobian  ), aSubId, -1 );
+  popupMgr()->setRule( action( SMESHOp::OpScaledJacobian ), aMeshInVtkHasVolumes, QtxPopupMgr::VisibleRule );
+  popupMgr()->setRule( action( SMESHOp::OpScaledJacobian ), "controlMode = 'eScaledJacobian'", QtxPopupMgr::ToggleRule );
+
   popupMgr()->insert( separator(), anId, -1 );
 
   popupMgr()->insert( action( SMESHOp::OpShowScalarBar ), anId, -1 );
@@ -5131,7 +5266,7 @@ bool SMESHGUI::activateModule( SUIT_Study* study )
   lab = lab + tr("INFO_COMPUTE") + "<br/>";
   lab = lab + tr("INFO_REFINE") + ":";
   items << wrap(tr("INFO_REFINE_LOCAL_SIZE"), "li")
-       << wrap(tr("INFO_REFINE_SUBMESH"), "li");
+        << wrap(tr("INFO_REFINE_SUBMESH"), "li");
   lab = lab + wrap(items.join(""), "ul");
   items.clear();
 
@@ -5139,26 +5274,25 @@ bool SMESHGUI::activateModule( SUIT_Study* study )
 
   gb = app->infoPanel()->addGroup(tr("INFO_GRP_IMPORT_MESH"));
   items << wrap("UNV", "li")
-       << wrap("MED", "li")
-       << wrap("STL", "li")
-       << wrap("CGNS", "li")
-       << wrap("SAUV", "li")
-       << wrap("GMF", "li");
+        << wrap("MED", "li")
+        << wrap("STL", "li")
+        << wrap("CGNS", "li")
+        << wrap("GMF", "li");
   lab = tr("INFO_AVAILABLE_FORMATS") + ":" + wrap(items.join(""), "ul");
   items.clear();
-  
+
   app->infoPanel()->addLabel(lab, gb);
-    
+
   gb = app->infoPanel()->addGroup(tr("INFO_GRP_CHECK_MESH"));
   lab = tr("INFO_DISPLAY") + "<br/>";
   items << wrap(tr("INFO_QUALITY_AREA"), "li")
-       << wrap(tr("INFO_QUALITY_VOLUME"), "li")
-       << wrap(tr("INFO_QUALITY_ASPECT_RATION"), "li")
-       << wrap("...", "li");
+        << wrap(tr("INFO_QUALITY_VOLUME"), "li")
+        << wrap(tr("INFO_QUALITY_ASPECT_RATION"), "li")
+        << wrap("...", "li");
   lab = lab + tr("INFO_QUALITY_INFO") + ":" + wrap(items.join(""), "ul");
   items.clear();
   lab = lab + tr("INFO_CLIPPING");
-  
+
   app->infoPanel()->addLabel(lab, gb);
   // << Help Panel
 
@@ -5366,7 +5500,7 @@ void SMESHGUI::createPreferences()
   setPreferenceProperty( dispgroup, "columns", 2 );
 
   addPreference( tr( "PREF_FITALL_ON_DISPLAYONLY" ), dispgroup, LightApp_Preferences::Bool, "SMESH", "fitall_on_displayonly" );
-  
+
   int dispmode = addPreference( tr( "PREF_DISPLAY_MODE" ), dispgroup, LightApp_Preferences::Selector, "SMESH", "display_mode" );
   QStringList modes;
   modes.append( tr("MEN_WIRE") );
@@ -5421,6 +5555,7 @@ void SMESHGUI::createPreferences()
   setPreferenceProperty( exportgroup, "columns", 2 );
   addPreference( tr( "PREF_AUTO_GROUPS" ), exportgroup, LightApp_Preferences::Bool, "SMESH", "auto_groups" );
   addPreference( tr( "PREF_SHOW_WARN" ), exportgroup, LightApp_Preferences::Bool, "SMESH", "show_warning" );
+  addPreference( tr( "PREF_MED_SAVE_NUMS" ), exportgroup, LightApp_Preferences::Bool, "SMESH", "med_save_numbers" );
   int zTol = addPreference( tr( "PREF_ZTOLERANCE" ), exportgroup, LightApp_Preferences::DblSpin, "SMESH", "med_ztolerance" );
   setPreferenceProperty( zTol, "precision", 10 );
   setPreferenceProperty( zTol, "min", 0.0000000001 );
@@ -5578,23 +5713,23 @@ void SMESHGUI::createPreferences()
   int size0d = addPreference(tr("PREF_SIZE_0D"), elemGroup,
                              LightApp_Preferences::IntSpin, "SMESH", "elem0d_size");
   /* int ballSize = addPreference(tr("PREF_BALL_SIZE"), elemGroup,
-                             LightApp_Preferences::IntSpin, "SMESH", "ball_elem_size"); */
-  double ballDiameter = addPreference(tr("PREF_BALL_DIAMETER"), elemGroup,
-                             LightApp_Preferences::DblSpin, "SMESH", "ball_elem_diameter");
-  double ballScale = addPreference(tr("PREF_BALL_SCALE"), elemGroup,
-                             LightApp_Preferences::DblSpin, "SMESH", "ball_elem_scale");
-  int elemW  = addPreference(tr("PREF_WIDTH"), elemGroup,
-                             LightApp_Preferences::IntSpin, "SMESH", "element_width");
-  int outW  = addPreference(tr("PREF_OUTLINE_WIDTH"), elemGroup,
-                             LightApp_Preferences::IntSpin, "SMESH", "outline_width");
-  int shrink = addPreference(tr("PREF_SHRINK_COEFF"), elemGroup,
-                             LightApp_Preferences::IntSpin, "SMESH", "shrink_coeff");
+     LightApp_Preferences::IntSpin, "SMESH", "ball_elem_size"); */
+  int ballDiameter = addPreference(tr("PREF_BALL_DIAMETER"), elemGroup,
+                                   LightApp_Preferences::DblSpin, "SMESH", "ball_elem_diameter");
+  int ballScale    = addPreference(tr("PREF_BALL_SCALE"), elemGroup,
+                                   LightApp_Preferences::DblSpin, "SMESH", "ball_elem_scale");
+  int elemW        = addPreference(tr("PREF_WIDTH"), elemGroup,
+                                   LightApp_Preferences::IntSpin, "SMESH", "element_width");
+  int outW         = addPreference(tr("PREF_OUTLINE_WIDTH"), elemGroup,
+                                   LightApp_Preferences::IntSpin, "SMESH", "outline_width");
+  int shrink       = addPreference(tr("PREF_SHRINK_COEFF"), elemGroup,
+                                   LightApp_Preferences::IntSpin, "SMESH", "shrink_coeff");
 
   setPreferenceProperty( size0d, "min", 1 );
   setPreferenceProperty( size0d, "max", 10 );
 
- // setPreferenceProperty( ballSize, "min", 1 );
- // setPreferenceProperty( ballSize, "max", 10 );
 // setPreferenceProperty( ballSize, "min", 1 );
 // setPreferenceProperty( ballSize, "max", 10 );
 
   setPreferenceProperty( ballDiameter, "min", 1e-7 );
   setPreferenceProperty( ballDiameter, "max", 1e9 );
@@ -5743,13 +5878,37 @@ void SMESHGUI::createPreferences()
   setPreferenceProperty( coloringType, "indexes", indices );
   addPreference( tr( "SMESH_DISTRIBUTION_COLOR" ), distributionGr, LightApp_Preferences::Color, "SMESH", "distribution_color" );
 
+  // Adaptation - begin
+#ifndef DISABLE_MG_ADAPT
+  // Adaptation tab ------------------------------------------------------------------------
+  int adaptTab = addPreference( tr( "ADAPT_PREF_TAB_GENERAL" ) );
+  int bloc, pref ;
+  // MG-Adapt
+  bloc = addPreference( tr( "ADAPT_PREF_MG_ADAPT" ), adaptTab );
+  setPreferenceProperty( bloc, "columns", 1 );
+  pref = addPreference( tr( "ADAPT_PREF_MG_ADAPT_FILE_MAILLAGE_OUT" ), bloc, LightApp_Preferences::Bool, "HOMARD", "mg_adapt_file_mesh_out" );
+  pref = addPreference( tr( "ADAPT_PREF_MG_ADAPT_PUBLICATION_MAILLAGE_OUT" ), bloc, LightApp_Preferences::Bool, "HOMARD", "mg_adapt_publish_mesh_out" );
+  pref = addPreference( tr( "ADAPT_PREF_MG_ADAPT_SIZE_MAP" ), bloc, LightApp_Preferences::Selector, "HOMARD", "mg_adapt_size_map" );
+  QStringList aListOfSizeMap;
+  aListOfSizeMap << tr( "ADAPT_PREF_MG_ADAPT_SIZE_MAP_LOCAL" );
+  aListOfSizeMap << tr( "ADAPT_PREF_MG_ADAPT_SIZE_MAP_BACKGROUND" );
+  aListOfSizeMap << tr( "ADAPT_PREF_NONE" );;
+  setPreferenceProperty( pref, "strings", aListOfSizeMap );
+  pref = addPreference( tr( "ADAPT_PREF_MG_ADAPT_TIME_STEP" ), bloc, LightApp_Preferences::Selector, "HOMARD", "mg_adapt_time_step" );
+  QStringList aListOfTimeStep;
+  aListOfTimeStep << tr( "ADAPT_PREF_NONE" );
+  aListOfTimeStep << tr( "ADAPT_PREF_MG_ADAPT_TIME_STEP_LAST" );
+  aListOfTimeStep << tr( "ADAPT_PREF_MG_ADAPT_TIME_STEP_C" );;
+  setPreferenceProperty( pref, "strings", aListOfTimeStep );
+#endif
+  // Adaptation - end
 }
 
 void SMESHGUI::preferencesChanged( const QString& sect, const QString& name )
 {
   if ( sect=="SMESH" ) {
-    float sbX1 = 0.01, sbY1 = 0.01, sbW = 0.08, sbH = 0.08;
-    float aTol = 1.00000009999999;
+    double sbX1 = 0.01, sbY1 = 0.01, sbW = 0.08, sbH = 0.08;
+    double aTol = 1.00000009999999;
     std::string aWarning;
     SUIT_ResourceMgr* aResourceMgr = SMESH::GetResourceMgr(this);
 
@@ -5914,6 +6073,12 @@ LightApp_Operation* SMESHGUI::createOperation( const int id ) const
   case SMESHOp::OpCreateBoundaryElements: // create 2D mesh as boundary on 3D
     op = new SMESHGUI_Make2DFrom3DOp();
     break;
+  case SMESHOp::OpCreateDualMesh:
+    op = new SMESHGUI_CreateDualMeshOp();
+    break;
+  case SMESHOp::OpCreate2DElements:
+    op = new SMESHGUI_MakeFull2DFrom3DOp();
+    break;
   case SMESHOp::OpReorientFaces:
     op = new SMESHGUI_ReorientFacesOp();
     break;
@@ -5953,6 +6118,18 @@ LightApp_Operation* SMESHGUI::createOperation( const int id ) const
   case SMESHOp::OpMoveNode: // Make mesh pass through point
     op = new SMESHGUI_MakeNodeAtPointOp();
     break;
+  case SMESHOp::OpMoveNodeInteractive: // Make mesh pass through point / by mouse
+    op = new SMESHGUI_MakeNodeAtPointOp( 2 );
+    break;
+  case SMESHOp::OpRemoveNodeWithReconn:
+    op = new SMESHGUI_RemoveNodeReconnectionOp();
+    break;
+  case SMESHOp::OpSplitEdgeInteract:
+    op = new SMESHGUI_AddNodeOnSegmentOp();
+    break;
+  case SMESHOp::OpSplitFaceInteract:
+    op = new SMESHGUI_AddNodeOnFaceOp();
+    break;
   case SMESHOp::OpElem0DOnElemNodes: // Create 0D elements on all nodes
     op = new SMESHGUI_Add0DElemsOnAllNodesOp();
     break;
index 0105465a26087108612fcf349ab31fed70cb05c7..08ecbdf51e117f3ac57a4803e5453334c7294960 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -212,6 +212,7 @@ private:
                                                   const bool = false);
 
   void                            connectView( const SUIT_ViewWindow* );
+  void                            logSmeshGUIEvent(int theCommandID);
  
 
 private :
index 39ad8f990c636511c0d89f14a6871664fdbff686..143b187b6a7b769bccf0fadd649492a5dc2a963b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -40,6 +40,7 @@
 #include <SUIT_MessageBox.h>
 #include <SVTK_Selector.h>
 #include <SalomeApp_Tools.h>
+#include <smIdType.hxx>
 
 // Qt includes
 #include <QButtonGroup>
@@ -426,7 +427,7 @@ bool SMESHGUI_Add0DElemsOnAllNodesOp::onApply()
         SUIT_MessageBox::warning( myDlg, tr( "SMESH_WRN_WARNING" ), tr( "SMESH_BAD_SELECTION" ) );
         return false;
       }
-      SMESH::long_array_var idArray = new SMESH::long_array;
+      SMESH::smIdType_array_var idArray = new SMESH::smIdType_array;
       idArray->length( idList.count() );
       QStringList::iterator idIt = idList.begin();
       for ( int i = 0; idIt != idList.end(); ++idIt, ++i )
@@ -438,14 +439,14 @@ bool SMESHGUI_Add0DElemsOnAllNodesOp::onApply()
 
     // Create 0D elements
 
-    int prevNb0D = mesh->Nb0DElements();
+    smIdType prevNb0D = mesh->Nb0DElements();
 
     QString groupName = myDlg->myGroupListCmBox->currentText();
     SMESH::SMESH_IDSource_var newObj =
       editor->Create0DElementsOnAllNodes( meshObject, groupName.toUtf8().data(),
                                           myDlg->myDuplicateElemsChkBox->isChecked() );
 
-    int newNb0D = mesh->Nb0DElements() - prevNb0D;
+    smIdType newNb0D = mesh->Nb0DElements() - prevNb0D;
     SUIT_MessageBox::information( myDlg, tr( "SMESH_INFORMATION" ),
                                   tr( "NB_NEW_0D" ).arg( newNb0D ),
                                   SUIT_MessageBox::Ok, SUIT_MessageBox::Ok);
index 47ed26ba5b71348aaed56290f9aeca2c26c5518d..bb98fbfd4b2d101c5270e7cc1993df0bcb55bb9e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 165b1487c4426442cdb0f8d1cfac28fb8d4a57ea..7d38aa51084a1e8aecc48df74529d59a9d8f302b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -553,7 +553,7 @@ void SMESHGUI_AddMeshElementDlg::ClickOnApply()
   if (myNbOkNodes && !SMESHGUI::isStudyLocked()) {
     myBusy = true;
     QStringList aListId = myEditCurrentArgument->text().split(" ", QString::SkipEmptyParts);
-    SMESH::long_array_var anArrayOfIndices = new SMESH::long_array;
+    SMESH::smIdType_array_var anArrayOfIndices = new SMESH::smIdType_array;
     anArrayOfIndices->length(aListId.count());
     const std::vector<int>& revIndex = SMDS_MeshCell::reverseSmdsOrder( myGeomType );
     if ( ReverseOrDulicate && ReverseOrDulicate->isChecked() && (int)revIndex.size() == aListId.count() )
@@ -598,10 +598,10 @@ void SMESHGUI_AddMeshElementDlg::ClickOnApply()
     }
 
     SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
-    SMESH::long_array_var anIdList = new SMESH::long_array;
+    SMESH::smIdType_array_var anIdList = new SMESH::smIdType_array;
     anIdList->length( 1 );
     anIdList[0] = -1;
-    int nbElemsBefore = 0;
+    smIdType nbElemsBefore = 0;
 
     switch (myElementType) {
     case SMDSAbs_0DElement: {
@@ -611,7 +611,7 @@ void SMESHGUI_AddMeshElementDlg::ClickOnApply()
       for ( size_t i = 0; i < anArrayOfIndices->length(); ++i )
         anIdList[i] = aMeshEditor->Add0DElement(anArrayOfIndices[i], duplicateElements);
 
-      CORBA::ULong nbAdded = myMesh->Nb0DElements() - nbElemsBefore;
+      SMESH::smIdType nbAdded = myMesh->Nb0DElements() - nbElemsBefore;
       if ( !duplicateElements && nbAdded < anArrayOfIndices->length() )
         SUIT_MessageBox::information(SMESHGUI::desktop(),
                                      tr("SMESH_INFORMATION"),
@@ -784,7 +784,7 @@ void SMESHGUI_AddMeshElementDlg::onTextChange (const QString& theNewText)
     aMesh = myActor->GetObject()->GetMesh();
 
   if (aMesh) {
-    TColStd_MapOfInteger newIndices;
+    SVTK_TVtkIDsMap newIndices;
 
     QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts);
     bool allOk = true;
index c9c58ac050c35309e91a9cc467be7e51ea455a45..4d739b2716ee27a22f6d9d9b4c2cc0e39e4ccd73 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
diff --git a/src/SMESHGUI/SMESHGUI_AddNodeOnFaceDlg.cxx b/src/SMESHGUI/SMESHGUI_AddNodeOnFaceDlg.cxx
new file mode 100644 (file)
index 0000000..529d4e3
--- /dev/null
@@ -0,0 +1,786 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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   : SMESHGUI_AddNodeOnFaceDlg.cxx
+// Author : Edward AGAPOV, Open CASCADE S.A.S.
+//
+#include "SMESHGUI_AddNodeOnFaceDlg.h"
+
+#include "SMESHGUI.h"
+#include "SMESHGUI_Filter.h"
+#include "SMESHGUI_IdValidator.h"
+#include "SMESHGUI_MeshEditPreview.h"
+#include "SMESHGUI_MeshUtils.h"
+#include "SMESHGUI_SpinBox.h"
+#include "SMESHGUI_VTKUtils.h"
+
+#include <SMDS_Mesh.hxx>
+#include <SMESH_Actor.h>
+#include <SMESH_ActorUtils.h>
+#include <SMESH_TypeDefs.hxx>
+#include <SMESH_MeshAlgos.hxx>
+
+// SALOME GUI includes
+#include <LightApp_SelectionMgr.h>
+#include <SALOME_ListIO.hxx>
+#include <SUIT_Desktop.h>
+#include <SVTK_ViewModel.h>
+#include <SVTK_ViewWindow.h>
+#include <SalomeApp_Tools.h>
+#include <SalomeApp_TypeFilter.h>
+#include <SUIT_ResourceMgr.h>
+#include <SUIT_OverrideCursor.h>
+#include <SUIT_MessageBox.h>
+#include <SVTK_RenderWindowInteractor.h>
+#include <SVTK_Renderer.h>
+#include <SVTK_Event.h>
+
+// Qt includes
+#include <QApplication>
+#include <QGroupBox>
+#include <QGridLayout>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QLineEdit>
+#include <QPushButton>
+#include <QLabel>
+#include <QRadioButton>
+#include <QCheckBox>
+#include <QButtonGroup>
+
+// VTK includes
+#include <vtkProperty.h>
+#include <vtkCellPicker.h>
+#include <vtkInteractorStyle.h>
+#include <vtkGenericRenderWindowInteractor.h>
+#include <vtkInteractorObserver.h>
+
+
+// IDL includes
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_Mesh)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
+
+#define SPACING 6
+#define MARGIN  11
+
+#define TOLERANCE 1e-3
+
+//=======================================================================
+/*!
+ * \brief Dialog to publish a sub-shape of the mesh main shape
+ *        by selecting mesh elements
+ */
+//=======================================================================
+
+SMESHGUI_AddNodeOnFaceDlg::SMESHGUI_AddNodeOnFaceDlg()
+  : SMESHGUI_Dialog( 0, false, true )
+{
+  setWindowTitle(tr("CAPTION"));
+
+  QVBoxLayout* aDlgLay = new QVBoxLayout (mainFrame());
+  aDlgLay->setMargin(0);
+  aDlgLay->setSpacing(SPACING);
+  myMainFrame = createMainFrame(mainFrame());
+
+  aDlgLay->addWidget(myMainFrame);
+
+  aDlgLay->setStretchFactor(myMainFrame, 1);
+}
+
+//=======================================================================
+// function : createMainFrame()
+// purpose  : Create frame containing dialog's input fields
+//=======================================================================
+
+QWidget* SMESHGUI_AddNodeOnFaceDlg::createMainFrame (QWidget* theParent)
+{
+  QWidget* aFrame = new QWidget(theParent);
+
+  SUIT_ResourceMgr* rm = SMESH::GetResourceMgr( SMESHGUI::GetSMESHGUI() );
+  QPixmap iconSelect( rm->loadPixmap("SMESH", tr("ICON_SELECT")));
+
+  // Face to split
+
+  QGroupBox* faceGrp = new QGroupBox(tr("FACE_GROUP"), aFrame);
+  faceGrp->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
+  QLabel* idLabel = new QLabel(tr("FACE_ID"), faceGrp);
+  myIdBtn = new QPushButton(faceGrp);
+  myIdBtn->setIcon(iconSelect);
+  myIdBtn->setCheckable(true);
+  myId = new QLineEdit(faceGrp);
+  myId->setValidator(new SMESHGUI_IdValidator(this, 1));
+
+  QGridLayout* faceGrpLayout = new QGridLayout(faceGrp);
+  faceGrpLayout->setSpacing(SPACING);
+  faceGrpLayout->setMargin(MARGIN);
+
+  faceGrpLayout->addWidget( idLabel, 0, 0 );
+  faceGrpLayout->addWidget( myIdBtn, 0, 1 );
+  faceGrpLayout->addWidget( myId,    0, 2 );
+
+  // Node location
+
+  QGroupBox* xyzGrp = new QGroupBox(tr("XYZ_GROUP"), aFrame);
+  xyzGrp->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
+
+  myDestBtn = new QPushButton(xyzGrp);
+  myDestBtn->setIcon(iconSelect);
+  myDestBtn->setCheckable(true);
+
+  QLabel* locationXLabel = new QLabel(tr("SMESH_X"), xyzGrp);
+  myDestinationX = new SMESHGUI_SpinBox(xyzGrp);
+  QLabel* locationYLabel = new QLabel(tr("SMESH_Y"), xyzGrp);
+  myDestinationY = new SMESHGUI_SpinBox(xyzGrp);
+  QLabel* locationZLabel = new QLabel(tr("SMESH_Z"), xyzGrp);
+  myDestinationZ = new SMESHGUI_SpinBox(xyzGrp);
+
+  myDestinationX->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision");
+  myDestinationY->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision");
+  myDestinationZ->RangeStepAndValidator(COORD_MIN, COORD_MAX, 10.0, "length_precision");
+
+  myPointOnFace = new QCheckBox(tr("XYZ_NODE_ON_FACE"), xyzGrp);
+
+  QGridLayout* aDestLayout = new QGridLayout(xyzGrp);
+  aDestLayout->setMargin(MARGIN);
+  aDestLayout->setSpacing(SPACING);
+  aDestLayout->addWidget(myDestBtn, 0, 0);
+  aDestLayout->addWidget(locationXLabel, 0, 1);
+  aDestLayout->addWidget(myDestinationX, 0, 2);
+  aDestLayout->addWidget(locationYLabel, 0, 3);
+  aDestLayout->addWidget(myDestinationY, 0, 4);
+  aDestLayout->addWidget(locationZLabel, 0, 5);
+  aDestLayout->addWidget(myDestinationZ, 0, 6);
+  aDestLayout->setColumnStretch(2, 1);
+  aDestLayout->setColumnStretch(4, 1);
+  aDestLayout->setColumnStretch(6, 1);
+  aDestLayout->addWidget(myPointOnFace, 1, 0, 1, 6);
+
+  // Preview
+  myPreviewChkBox = new QCheckBox( tr("PREVIEW"), aFrame);
+  myPreviewChkBox->setChecked( true );
+
+  QVBoxLayout* aLay = new QVBoxLayout(aFrame);
+  aLay->addWidget(faceGrp);
+  aLay->addWidget(xyzGrp);
+  aLay->addWidget(myPreviewChkBox);
+
+  connect(myDestBtn, SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool)));
+  connect(myIdBtn,   SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool)));
+
+  myIdBtn->setChecked(true);
+
+  return aFrame;
+}
+
+//================================================================================
+/*!
+ * \brief SLOT called when any button is toggled
+  * \param bool - on or off
+ */
+//================================================================================
+
+void SMESHGUI_AddNodeOnFaceDlg::ButtonToggled (bool on)
+{
+  const QObject* aSender = sender();
+  if ( on ) {
+    if ( aSender == myDestBtn ) // button to set coord by node selection
+    {
+      if ( myIdBtn->isEnabled() )
+        myIdBtn->setChecked( !on );
+    }
+    else if ( aSender == myIdBtn ) // button to select a node to move
+    {
+      myDestBtn->setChecked( !on );
+    }
+  }
+  emit selTypeChanged();
+}
+
+//================================================================================
+/*!
+ * \brief Constructor
+*/
+//================================================================================
+
+SMESHGUI_AddNodeOnFaceOp::SMESHGUI_AddNodeOnFaceOp() : 
+  SMESHGUI_InteractiveOp()
+{
+  mySimulation = 0;
+  mySMESHGUI = 0;
+  myDlg = new SMESHGUI_AddNodeOnFaceDlg;
+  myHelpFileName = "add_node_on_face.html";
+
+  myNoPreview = false;
+  myUpdateDestination = false;
+
+  // connect signals and slots
+  connect(myDlg->myDestinationX,  SIGNAL (valueChanged(double)), this, SLOT(onDestCoordChanged()));
+  connect(myDlg->myDestinationY,  SIGNAL (valueChanged(double)), this, SLOT(onDestCoordChanged()));
+  connect(myDlg->myDestinationZ,  SIGNAL (valueChanged(double)), this, SLOT(onDestCoordChanged()));
+  connect(myDlg->myId,            SIGNAL (textChanged(const QString&)),SLOT(redisplayPreview()));
+  connect(myDlg->myPreviewChkBox, SIGNAL (toggled(bool)),              SLOT(redisplayPreview()));
+  connect(myDlg,                  SIGNAL (selTypeChanged() ),          SLOT(onSelTypeChange()));
+  connect(myDlg->myId,            SIGNAL (textChanged(const QString&)),SLOT(onTextChange(const QString&)));
+  connect(myDlg->myPointOnFace,   SIGNAL(toggled(bool)),               SLOT(pointLocationChanged(bool)));
+
+  myFacePicker = vtkCellPicker::New();
+  myFacePicker->SetTolerance(0.005);
+  myFacePicker->PickFromListOn();
+
+}
+
+//================================================================================
+/*!
+ * \brief SLOT. Called upon change of selection type
+ */
+//================================================================================
+
+void SMESHGUI_AddNodeOnFaceOp::onSelTypeChange()
+{
+  if ( myDlg->myIdBtn->isChecked() )
+  {
+    setSelectionMode( FaceSelection );
+  }
+  else if ( myDlg->myDestBtn->isChecked() )
+  {
+    QString msg;
+    if (isValid(msg)) {
+      //Disconnect selectionChanged to keep selected element
+      disconnect(selectionMgr(), SIGNAL(selectionChanged()), this, SLOT(onSelectionDone()));
+      // Set selection mode to ActorSelection to avoid element's prehighlight during interactive selection
+      setSelectionMode(ActorSelection);
+      connect(selectionMgr(), SIGNAL(selectionChanged()), SLOT(onSelectionDone()));
+    }
+  }
+  else
+  {
+    setSelectionMode( ActorSelection );
+  }
+}
+
+//=======================================================================
+// function : startOperation()
+// purpose  : Init dialog fields, connect signals and slots, show dialog
+//=======================================================================
+
+void SMESHGUI_AddNodeOnFaceOp::startOperation()
+{
+  myNoPreview = false;
+  myMeshActor = 0;
+
+  // init simulation with a current View
+  if ( mySimulation ) delete mySimulation;
+  mySMESHGUI = getSMESHGUI();
+  mySimulation = new SMESHGUI_MeshEditPreview(SMESH::GetViewWindow( mySMESHGUI ) );
+  connect(mySMESHGUI, SIGNAL (SignalActivatedViewManager()), this, SLOT(onOpenView()));
+  connect(mySMESHGUI, SIGNAL (SignalCloseView()), this, SLOT(onCloseView()));
+  vtkProperty* aProp = vtkProperty::New();
+  aProp->SetRepresentationToWireframe();
+  aProp->SetColor(250, 0, 250);
+  aProp->SetPointSize(5);
+  aProp->SetLineWidth( SMESH::GetFloat("SMESH:element_width",1) + 1);
+  mySimulation->GetActor()->SetProperty(aProp);
+  aProp->Delete();
+
+  SMESHGUI_SelectionOp::startOperation();
+  SMESHGUI_InteractiveOp::startOperation();
+  myDlg->myId->setText("");
+  myUpdateDestination = true;
+  myDlg->myDestinationX->SetValue(0);
+  myDlg->myDestinationY->SetValue(0);
+  myDlg->myDestinationZ->SetValue(0);
+  myUpdateDestination = false;
+
+  addObserver();
+
+  myDlg->show();
+
+  onSelectionDone(); // init myMeshActor
+}
+
+//================================================================================
+/*!
+ * \brief Stops operation
+ */
+//================================================================================
+
+void SMESHGUI_AddNodeOnFaceOp::stopOperation()
+{
+  myNoPreview = true;
+  if ( mySimulation )
+  {
+    mySimulation->SetVisibility(false);
+    delete mySimulation;
+    mySimulation = 0;
+  }
+  if ( myMeshActor ) {
+    myMeshActor = 0;
+  }
+  // SMESH::SetPointRepresentation( false );
+  // SMESH::RepaintCurrentView();
+
+  disconnect(mySMESHGUI, SIGNAL (SignalActivatedViewManager()), this, SLOT(onOpenView()));
+  disconnect(mySMESHGUI, SIGNAL (SignalCloseView()),            this, SLOT(onCloseView()));
+  SMESHGUI_SelectionOp::stopOperation();
+  removeObserver();
+}
+
+//================================================================================
+/*!
+ * \brief perform it's intention action: split a face
+ */
+//================================================================================
+
+bool SMESHGUI_AddNodeOnFaceOp::onApply()
+{
+  if( SMESHGUI::isStudyLocked() )
+    return false;
+
+  if ( !myMeshActor ) {
+    SUIT_MessageBox::warning( dlg(), tr( "SMESH_WRN_WARNING" ), tr("INVALID_MESH") );
+    dlg()->show();
+    return false;
+  }
+
+  QString msg;
+  if ( !isValid( msg ) ) { // node id is invalid
+    if( !msg.isEmpty() )
+      SUIT_MessageBox::warning( dlg(), tr( "SMESH_WRN_WARNING" ), tr("INVALID_ID") );
+    dlg()->show();
+    return false;
+  }
+
+  QStringList aParameters;
+  aParameters << myDlg->myDestinationX->text();
+  aParameters << myDlg->myDestinationY->text();
+  aParameters << myDlg->myDestinationZ->text();
+
+  try {
+    SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO(myMeshActor->getIO());
+    if (aMesh->_is_nil()) {
+      SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"), tr("SMESHG_NO_MESH") );
+      return true;
+    }
+    SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor();
+    if (aMeshEditor->_is_nil())
+      return true;
+
+    aMesh->SetParameters( aParameters.join(":").toUtf8().constData() );
+
+    bool ok;
+    SMESH::smIdType anId = myDlg->myId->text().toLong( &ok );
+
+    aMeshEditor->AddNodeOnFace( anId,
+                                myDlg->myDestinationX->GetValue(),
+                                myDlg->myDestinationY->GetValue(),
+                                myDlg->myDestinationZ->GetValue() );
+    SALOME_ListIO aList;
+    selectionMgr()->setSelectedObjects(aList,false);
+    aList.Append(myMeshActor->getIO());
+    selectionMgr()->setSelectedObjects(aList,false);
+    onSelectionDone();
+    SMESH::UpdateView();
+    SMESHGUI::Modified();
+  }
+  catch (const SALOME::SALOME_Exception& S_ex) {
+    SalomeApp_Tools::QtCatchCorbaException(S_ex);
+  }
+  catch (...) {
+  }
+
+  return true;
+}
+
+//================================================================================
+/*!
+ * \brief Check selected face id validity
+ */
+//================================================================================
+
+bool SMESHGUI_AddNodeOnFaceOp::isValid( QString& msg )
+{
+  bool ok = false;
+  if ( myMeshActor )
+  {
+    SMESH::smIdType id = myDlg->myId->text().toLong();
+    if ( id > 0 )
+      if (SMDS_Mesh* aMesh = myMeshActor->GetObject()->GetMesh())
+        if ( const SMDS_MeshElement* face = aMesh->FindElement( id ))
+        {
+          if ( face->GetType() == SMDSAbs_Face )
+            ok = true;
+          else
+            msg += tr("NOT_FACE") + "\n";
+        }
+    if ( !ok )
+      msg += tr("INVALID_ID") + "\n";
+  }
+
+  ok = myDlg->myDestinationX->isValid( msg, !myNoPreview ) && ok;
+  ok = myDlg->myDestinationY->isValid( msg, !myNoPreview ) && ok;
+  ok = myDlg->myDestinationZ->isValid( msg, !myNoPreview ) && ok;
+
+  return ok;
+}
+
+//================================================================================
+/*!
+ * \brief SLOT called when selection changed
+ */
+//================================================================================
+
+void SMESHGUI_AddNodeOnFaceOp::onSelectionDone()
+{
+  if ( !myDlg->isVisible() || !myDlg->isEnabled() )
+    return;
+
+  myNoPreview = true;
+  QString idStr;
+  try {
+    SALOME_ListIO aList;
+    selectionMgr()->selectedObjects(aList, SVTK_Viewer::Type());
+    if (aList.Extent() != 1)
+      return;
+    Handle(SALOME_InteractiveObject) anIO = aList.First();
+    myMeshActor = SMESH::FindActorByEntry(anIO->getEntry());
+    myFacePicker->InitializePickList();
+    myFacePicker->AddPickList(myMeshActor);
+
+    QString aString;
+    int nbElems = SMESH::GetNameOfSelectedElements(selector(),anIO, aString);
+    if (nbElems == 1)
+      if ( SMDS_Mesh* aMesh = myMeshActor->GetObject()->GetMesh())
+        if ( const SMDS_MeshElement* face = aMesh->FindElement( aString.toLong() ))
+        {
+          idStr = aString;
+          // set coordinates to face gravity center
+          gp_XYZ faceGC( 0,0,0 );
+          for ( int i = 0; i < face->NbCornerNodes(); ++i )
+            faceGC += SMESH_NodeXYZ( face->GetNode( i ));
+          faceGC /= face->NbCornerNodes();
+          myUpdateDestination = true;
+          myDlg->myDestinationX->SetValue(faceGC.X());
+          myDlg->myDestinationY->SetValue(faceGC.Y());
+          myDlg->myDestinationZ->SetValue(faceGC.Z());
+          myUpdateDestination = false;
+        }
+  } catch (...) {
+  }
+  myDlg->myId->setText( idStr );
+
+  myNoPreview = false;
+  redisplayPreview();
+}
+
+//================================================================================
+/*!
+ * \brief update preview
+ */
+//================================================================================
+
+void SMESHGUI_AddNodeOnFaceOp::redisplayPreview()
+{
+  if ( myNoPreview )
+    return;
+  myNoPreview = true;
+
+  SMESH::MeshPreviewStruct_var aMeshPreviewStruct;
+
+  if ( myMeshActor && myDlg->myPreviewChkBox->isChecked() )
+  {
+    QString msg;
+    if ( isValid( msg ))
+    {
+      try {
+        SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO(myMeshActor->getIO());
+        if (!aMesh->_is_nil()) {
+          SMESH::SMESH_MeshEditor_var aPreviewer = aMesh->GetMeshEditPreviewer();
+          if (!aPreviewer->_is_nil())
+          {
+            SUIT_OverrideCursor aWaitCursor;
+
+            SMESH::smIdType anId = myDlg->myId->text().toLong();
+            aPreviewer->AddNodeOnFace(anId,
+                                      myDlg->myDestinationX->GetValue(),
+                                      myDlg->myDestinationY->GetValue(),
+                                      myDlg->myDestinationZ->GetValue());
+            aMeshPreviewStruct = aPreviewer->GetPreviewData();
+          }
+        }
+      }
+      catch (...) {
+      }
+    }
+  }
+  if (!mySimulation)
+    mySimulation = new SMESHGUI_MeshEditPreview(SMESH::GetViewWindow( mySMESHGUI ));
+  // display data
+  if ( & aMeshPreviewStruct.in() )
+  {
+    mySimulation->SetData( aMeshPreviewStruct.in() );
+  }
+  else
+  {
+    mySimulation->SetVisibility(false);
+  }
+
+  myNoPreview = false;
+}
+
+//=================================================================================
+/*!
+ * \brief SLOT called when the viewer opened
+ */
+//=================================================================================
+
+void SMESHGUI_AddNodeOnFaceOp::onOpenView()
+{
+  if ( mySimulation ) {
+    mySimulation->SetVisibility(false);
+    SMESH::SetPointRepresentation(false);
+  }
+  else {
+    mySimulation = new SMESHGUI_MeshEditPreview(SMESH::GetViewWindow( mySMESHGUI ));
+  }
+}
+
+//=================================================================================
+/*!
+ * \brief SLOT called when the viewer closed
+ */
+//=================================================================================
+
+void SMESHGUI_AddNodeOnFaceOp::onCloseView()
+{
+  delete mySimulation;
+  mySimulation = 0;
+}
+
+//================================================================================
+/*!
+ * \brief SLOT called when the face id is manually changed
+ */
+//================================================================================
+
+void SMESHGUI_AddNodeOnFaceOp::onTextChange( const QString& theText )
+{
+  if( myMeshActor )
+  {
+    if( SMDS_Mesh* aMesh = myMeshActor->GetObject()->GetMesh() )
+    {
+      Handle(SALOME_InteractiveObject) anIO = myMeshActor->getIO();
+      SALOME_ListIO aList;
+      aList.Append( anIO );
+      selectionMgr()->setSelectedObjects( aList, false );
+
+      if( const SMDS_MeshElement* face = aMesh->FindElement( theText.toLong() ) )
+      {
+        SVTK_TVtkIDsMap aListInd;
+        aListInd.Add( FromSmIdType<int>( face->GetID()) );
+        selector()->AddOrRemoveIndex( anIO, aListInd, false );
+        if( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( SMESHGUI::GetSMESHGUI() ) )
+          aViewWindow->highlight( anIO, true, true );
+      }
+    }
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Activate selection
+ */
+//================================================================================
+
+void SMESHGUI_AddNodeOnFaceOp::activateSelection()
+{
+  selectionMgr()->clearFilters();
+  SMESH::SetPointRepresentation( false );
+  onSelTypeChange();
+}
+
+//================================================================================
+/*!
+ * \brief Destructor
+*/
+//================================================================================
+
+SMESHGUI_AddNodeOnFaceOp::~SMESHGUI_AddNodeOnFaceOp()
+{
+  if ( myDlg )        delete myDlg;
+  if ( mySimulation ) delete mySimulation;
+  myFacePicker->Delete();
+}
+
+//================================================================================
+/*!
+ * \brief SLOT called when destination coordinates are changed
+*/
+//================================================================================
+void SMESHGUI_AddNodeOnFaceOp::onDestCoordChanged() 
+{
+  if (myUpdateDestination)
+    return;
+  pointLocationChanged(myDlg->myPointOnFace->isChecked());
+  redisplayPreview();
+}
+
+//================================================================================
+/*!
+ * \brief SLOT called when 'Node on face' checkbox is changed
+*/
+//================================================================================
+void SMESHGUI_AddNodeOnFaceOp::pointLocationChanged(bool onFace) {
+  if (onFace) {
+    QString msg;
+    if (myMeshActor && isValid(msg)) {
+      SMESH::smIdType id = myDlg->myId->text().toLong();
+      if (id > 0) {
+        if (SMDS_Mesh* aMesh = myMeshActor->GetObject()->GetMesh()) {
+          if (const SMDS_MeshElement* face = aMesh->FindElement(id))
+          {
+            if (face->GetType() == SMDSAbs_Face) {
+              gp_Pnt point(myDlg->myDestinationX->GetValue(), myDlg->myDestinationY->GetValue(),myDlg->myDestinationZ->GetValue());
+              gp_XYZ closestPnt;
+              double dist = SMESH_MeshAlgos::GetDistance( face, point, &closestPnt);
+              if (dist > TOLERANCE) {
+                myUpdateDestination = true;
+                myDlg->myDestinationX->SetValue(closestPnt.X());
+                myDlg->myDestinationY->SetValue(closestPnt.Y());
+                myDlg->myDestinationZ->SetValue(closestPnt.Z());
+                myUpdateDestination = false;
+                redisplayPreview();
+              }
+            }
+          }
+        }
+      }
+    }
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Gets dialog of this operation
+ * \retval LightApp_Dialog* - pointer to dialog of this operation
+ */
+//================================================================================
+
+LightApp_Dialog* SMESHGUI_AddNodeOnFaceOp::dlg() const
+{
+  return myDlg;
+}
+
+//================================================================================
+/*
+* \brief Process InteractiveSelectionChanged event
+*/
+//================================================================================
+void SMESHGUI_AddNodeOnFaceOp::processStyleEvents(unsigned long theEvent, void* theCallData)
+{
+  (void*)theCallData;
+  QString msg;
+  if (isValid(msg)) {
+    if (theEvent == SVTK::InteractiveSelectionChanged) {
+      if (myDlg->myPointOnFace->isChecked()) {
+        // Pick point on a mesh surface
+        QString msg;
+        if (myMeshActor && isValid(msg)) {
+          SMESH::smIdType id = myDlg->myId->text().toLong();
+          if (id > 0) {
+            if (SMDS_Mesh* aMesh = myMeshActor->GetObject()->GetMesh()) {
+              if (const SMDS_MeshElement* face = aMesh->FindElement(id))
+              {
+                if (face->GetType() == SMDSAbs_Face) {
+                  int xClick, yClick; // Last event (move or left button bown) position
+                  myRWInteractor->GetDevice()->GetEventPosition(xClick, yClick);
+                  gp_XYZ faceNode(0, 0, 0);
+                  SMDS_Mesh tmp;
+                  double Ni[3];
+                  std::vector<const SMDS_MeshNode*> tmpNodes;
+                  for (int i = 0; i < face->NbCornerNodes(); ++i) {
+                    faceNode = SMESH_NodeXYZ(face->GetNode(i));
+                    vtkInteractorObserver::ComputeWorldToDisplay(myRWInteractor->GetRenderer()->GetDevice(),
+                      faceNode.X(), faceNode.Y(), faceNode.Z(), Ni);
+                    tmpNodes.push_back(tmp.AddNode(Ni[0], Ni[1], 0));
+                  }
+                  SMDS_MeshFace* face2D = tmp.AddPolygonalFace(tmpNodes);
+                  gp_Pnt point(double(xClick), double(yClick), 0);
+                  gp_XYZ closestPnt;
+                  double dist = SMESH_MeshAlgos::GetDistance(face2D, point, &closestPnt);
+                  double xPick = 0, yPick = 0;
+                  if (dist < TOLERANCE) {
+                    xPick = xClick;
+                    yPick = yClick;
+                  }
+                  else {
+                    xPick = closestPnt.X();
+                    yPick = closestPnt.Y();
+                  }
+                  myFacePicker->Pick(xPick, yPick, 0.0, myRWInteractor->GetRenderer()->GetDevice());
+                  double closest[3];
+                  myFacePicker->GetPickPosition(closest);
+                  myUpdateDestination = true;
+                  myDlg->myDestinationX->SetValue(closest[0]);
+                  myDlg->myDestinationY->SetValue(closest[1]);
+                  myDlg->myDestinationZ->SetValue(closest[2]);
+                  myUpdateDestination = false;
+                  redisplayPreview();
+                }
+              }
+            }
+          }
+        }
+      }
+      else {
+        double* aCoord = (double*)theCallData;
+        myUpdateDestination = true;
+        myDlg->myDestinationX->SetValue(aCoord[0]);
+        myDlg->myDestinationY->SetValue(aCoord[1]);
+        myDlg->myDestinationZ->SetValue(aCoord[2]);
+        myUpdateDestination = false;
+        redisplayPreview();
+      }
+    }
+  }
+}
+
+//================================================================================
+/*
+* \brief Process LeftButtonPressEvent event: activate interactive selection
+*/
+//================================================================================
+void SMESHGUI_AddNodeOnFaceOp::processInteractorEvents(unsigned long theEvent, void* theCallData)
+{
+  (void*)theCallData;
+  if (theEvent == vtkCommand::LeftButtonPressEvent && myDlg->myDestBtn->isChecked()) {
+    bool control = myRWInteractor->GetDevice()->GetControlKey();
+    bool shift = myRWInteractor->GetDevice()->GetControlKey();
+    SVTK_ViewWindow* svtkViewWindow = SMESH::GetViewWindow(mySMESHGUI);
+    if (svtkViewWindow && !shift && !control) {
+      QString msg;
+      if (isValid(msg)) {
+        svtkViewWindow->activateInteractiveSelection();
+      }
+    }
+  }
+}
diff --git a/src/SMESHGUI/SMESHGUI_AddNodeOnFaceDlg.h b/src/SMESHGUI/SMESHGUI_AddNodeOnFaceDlg.h
new file mode 100644 (file)
index 0000000..ece7ede
--- /dev/null
@@ -0,0 +1,140 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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   : SMESHGUI_AddNodeOnFaceDlg.h
+// Author : Edward AGAPOV, Open CASCADE S.A.S.
+//
+#ifndef SMESHGUI_AddNodeOnFaceDLG_H
+#define SMESHGUI_AddNodeOnFaceDLG_H
+
+// SMESH includes
+#include "SMESH_SMESHGUI.hxx"
+
+#include "SMESHGUI_Dialog.h"
+#include "SMESHGUI_InteractiveOp.h"
+
+class QButtonGroup;
+class QCheckBox;
+class QGroupBox;
+class QLineEdit;
+class QPushButton;
+class QRadioButton;
+class SMESHGUI_SpinBox;
+class SMESHGUI_MeshEditPreview;
+class SMESHGUI_AddNodeOnFaceDlg;
+class vtkCellPicker;
+
+/*!
+ * \brief Operation to split a face into triangles by creating a new node
+ *        on the face and connecting it to the face nodes
+ */
+class SMESHGUI_EXPORT SMESHGUI_AddNodeOnFaceOp: public SMESHGUI_InteractiveOp
+{
+  Q_OBJECT
+
+public:
+  SMESHGUI_AddNodeOnFaceOp();
+  virtual ~SMESHGUI_AddNodeOnFaceOp();
+
+  virtual LightApp_Dialog*      dlg() const;  
+
+protected:
+
+  virtual void                  startOperation() override;
+  virtual void                  stopOperation() override;
+
+  virtual void                  activateSelection() override;
+
+  bool                          isValid( QString& );
+
+  virtual void                   processStyleEvents(unsigned long event,
+                                                    void* calldata)  override;
+
+  virtual void                   processInteractorEvents(unsigned long event,
+                                                         void* calldata) override;
+
+
+protected slots:
+  virtual bool                  onApply();
+
+private slots:
+  void                          onSelectionDone();
+  void                          redisplayPreview();
+  void                          onSelTypeChange();
+  void                          onTextChange( const QString& );
+//  void                          onDestCoordChanged();
+  void                          onOpenView();
+  void                          onCloseView();
+  void                          pointLocationChanged(bool);
+  void                          onDestCoordChanged();
+
+private:
+  SMESHGUI_AddNodeOnFaceDlg*    myDlg;
+
+  SUIT_SelectionFilter*         myFilter;
+  SMESHGUI*                     mySMESHGUI;
+  SMESHGUI_MeshEditPreview*     mySimulation;
+  SMESH_Actor*                  myMeshActor;
+  bool                          myNoPreview;
+  bool                          myUpdateDestination;
+  bool                          myDestCoordChanged;
+  vtkCellPicker*                myFacePicker;      
+};
+
+/*!
+ * \brief Dialog to split a face into triangles by creating a new node
+ *        on the face and connecting it to the face nodes
+ */
+
+class SMESHGUI_EXPORT SMESHGUI_AddNodeOnFaceDlg : public SMESHGUI_Dialog
+{
+  Q_OBJECT
+
+public:
+  SMESHGUI_AddNodeOnFaceDlg();
+
+private:
+  QWidget*                      createMainFrame( QWidget* );
+
+  QWidget*                      myMainFrame;
+
+  QPushButton*                  myDestBtn;
+  QPushButton*                  myIdBtn;
+  QLineEdit*                    myId;
+  SMESHGUI_SpinBox*             myDestinationX;
+  SMESHGUI_SpinBox*             myDestinationY;
+  SMESHGUI_SpinBox*             myDestinationZ;
+  QCheckBox*                    myPointOnFace;
+  QCheckBox*                    myPreviewChkBox;
+
+  QString                       myHelpFileName;
+
+  friend class SMESHGUI_AddNodeOnFaceOp;
+
+signals:
+  void                          selTypeChanged();
+
+ private slots:
+  void                          ButtonToggled( bool );
+};
+
+#endif // SMESHGUI_AddNodeOnFaceDLG_H
diff --git a/src/SMESHGUI/SMESHGUI_AddNodeOnSegmentDlg.cxx b/src/SMESHGUI/SMESHGUI_AddNodeOnSegmentDlg.cxx
new file mode 100644 (file)
index 0000000..12a4d4c
--- /dev/null
@@ -0,0 +1,701 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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   : SMESHGUI_AddNodeOnSegmentDlg.cxx
+// Author : Edward AGAPOV, Open CASCADE S.A.S.
+//
+#include "SMESHGUI_AddNodeOnSegmentDlg.h"
+
+#include "SMESHGUI.h"
+#include "SMESHGUI_MeshUtils.h"
+#include "SMESHGUI_VTKUtils.h"
+#include "SMESHGUI_SpinBox.h"
+#include "SMESHGUI_MeshEditPreview.h"
+
+#include <SMDS_Mesh.hxx>
+#include <SMESH_Actor.h>
+#include <SMESH_ActorUtils.h>
+#include <SMESH_TypeDefs.hxx>
+
+#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 <SVTK_ViewModel.h>
+#include <SVTK_ViewWindow.h>
+#include <SVTK_RenderWindowInteractor.h>
+#include <SVTK_Renderer.h>
+#include <SVTK_Event.h>
+#include <SalomeApp_Tools.h>
+
+// Qt includes
+#include <QApplication>
+#include <QGroupBox>
+#include <QGridLayout>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QLineEdit>
+#include <QPushButton>
+#include <QLabel>
+#include <QRadioButton>
+#include <QCheckBox>
+#include <QButtonGroup>
+
+// VTK includes
+#include <vtkProperty.h>
+#include <vtkInteractorStyle.h>
+#include <vtkGenericRenderWindowInteractor.h>
+#include <vtkInteractorObserver.h>
+#include <vtkLine.h>
+
+// IDL includes
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_Mesh)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
+
+#define SPACING 6
+#define MARGIN  11
+
+#define SPIN_TOLERANCE 1e-3
+
+//=======================================================================
+/*!
+ * \brief Dialog to split a diagonal of a quadrangle formed by two adjacent triangles
+ */
+//=======================================================================
+
+SMESHGUI_AddNodeOnSegmentDlg::SMESHGUI_AddNodeOnSegmentDlg()
+: SMESHGUI_Dialog( 0, false, true )
+{
+  setWindowTitle(tr("CAPTION"));
+
+  QVBoxLayout* aDlgLay = new QVBoxLayout (mainFrame());
+  aDlgLay->setMargin(0);
+  aDlgLay->setSpacing(SPACING);
+  QWidget* mainFr = createMainFrame(mainFrame());
+
+  aDlgLay->addWidget( mainFr );
+
+  aDlgLay->setStretchFactor( mainFr, 1);
+}
+
+//=======================================================================
+// function : createMainFrame()
+// purpose  : Create frame containing dialog's input fields
+//=======================================================================
+
+QWidget* SMESHGUI_AddNodeOnSegmentDlg::createMainFrame (QWidget* theParent)
+{
+  QWidget* aFrame = new QWidget(theParent);
+
+  SUIT_ResourceMgr* rm = SMESH::GetResourceMgr( SMESHGUI::GetSMESHGUI() );
+  QPixmap iconSelect( rm->loadPixmap("SMESH", tr("ICON_SELECT")));
+
+  // Segment
+
+  QGroupBox* segmentGrp = new QGroupBox(tr("SEGMENT_GROUP"), aFrame);
+  segmentGrp->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
+  QLabel* segmentLabel = new QLabel(tr("SEGMENT"), segmentGrp);
+  mySegmentBtn = new QPushButton(segmentGrp);
+  mySegmentBtn->setIcon(iconSelect);
+  mySegmentBtn->setCheckable(true);
+  mySegment = new QLineEdit(segmentGrp);
+  mySegment->setValidator(new QRegExpValidator(QRegExp("[\\d]*-[\\d]*"), this));
+
+  QGridLayout* segmentGrpLayout = new QGridLayout(segmentGrp);
+  segmentGrpLayout->setSpacing(SPACING);
+  segmentGrpLayout->setMargin(MARGIN);
+
+  segmentGrpLayout->addWidget( segmentLabel, 0, 0 );
+  segmentGrpLayout->addWidget( mySegmentBtn, 0, 1 );
+  segmentGrpLayout->addWidget( mySegment,    0, 2 );
+
+  // Position on segment
+
+  QGroupBox* positionGrp = new QGroupBox(tr("POSITION_GROUP"), aFrame);
+  positionGrp->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
+
+  myPositionBtn = new QPushButton(positionGrp);
+  myPositionBtn->setIcon(iconSelect);
+  myPositionBtn->setCheckable(true);
+
+  QLabel* positionLbl = new QLabel(tr("POSITION"), positionGrp);
+
+  myPositionSpin = new SMESHGUI_SpinBox(positionGrp);
+  myPositionSpin->setReadOnly(false);
+  myPositionSpin->RangeStepAndValidator(SPIN_TOLERANCE, 1- SPIN_TOLERANCE, 0.1, "length_precision");
+
+  QGridLayout* positionLayout = new QGridLayout(positionGrp);
+  positionLayout->setMargin(MARGIN);
+  positionLayout->setSpacing(SPACING);
+  positionLayout->addWidget(positionLbl, 0, 0);
+  positionLayout->addWidget(myPositionBtn, 0, 1);
+  positionLayout->addWidget(myPositionSpin, 0, 2);
+  positionLayout->setColumnStretch(2, 1);
+
+  // Preview
+
+  myPreviewChkBox = new QCheckBox( tr("PREVIEW"), aFrame);
+  myPreviewChkBox->setChecked( true );
+
+  QVBoxLayout* aLay = new QVBoxLayout(aFrame);
+  aLay->addWidget(segmentGrp);
+  aLay->addWidget(positionGrp);
+  aLay->addWidget(myPreviewChkBox);
+
+  connect(myPositionBtn, SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool)));
+  connect(mySegmentBtn,  SIGNAL (toggled(bool)), this, SLOT(ButtonToggled(bool)));
+
+  mySegmentBtn->setChecked(true);
+
+  return aFrame;
+}
+
+//================================================================================
+/*!
+ * \brief SLOT called when any button is toggled
+ * \param bool - on or off
+ */
+//================================================================================
+
+void SMESHGUI_AddNodeOnSegmentDlg::ButtonToggled (bool on)
+{
+  const QObject* aSender = sender();
+  if ( on ) {
+    if ( aSender == myPositionBtn )
+    {
+      mySegmentBtn->setChecked( !on );
+    }
+    else if ( aSender == mySegmentBtn )
+    {
+      myPositionBtn->setChecked( !on );
+    }
+  }
+  emit selTypeChanged();
+}
+
+//================================================================================
+/*!
+ * \brief Constructor
+ */
+//================================================================================
+
+SMESHGUI_AddNodeOnSegmentOp::SMESHGUI_AddNodeOnSegmentOp() :
+  SMESHGUI_InteractiveOp()
+{
+  mySimulation = 0;
+  mySMESHGUI = 0;
+  myDlg = new SMESHGUI_AddNodeOnSegmentDlg;
+  myHelpFileName = "add_node_on_segment.html";
+
+  myNoPreview = false;
+
+  // connect signals and slots
+  connect(myDlg->myPreviewChkBox, SIGNAL (toggled(bool)),              SLOT(redisplayPreview()));
+  connect(myDlg->myPositionSpin,  SIGNAL (valueChanged(double)),       SLOT(redisplayPreview()));
+  connect(myDlg->myPositionSpin,  SIGNAL (textChanged(const QString&)),SLOT(redisplayPreview()));
+  connect(myDlg,                  SIGNAL (selTypeChanged() ),          SLOT(onSelTypeChange()));
+  connect(myDlg->mySegment,       SIGNAL (textChanged(const QString&)),SLOT(onTextChange(const QString&)));
+}
+
+//================================================================================
+/*!
+ * \brief SLOT. Called upon change of selection type
+ */
+//================================================================================
+
+void SMESHGUI_AddNodeOnSegmentOp::onSelTypeChange()
+{
+  if ( myDlg->mySegmentBtn->isChecked() )
+  {
+    setSelectionMode( EdgeOfCellSelection );
+  }
+  else if ( myDlg->myPositionBtn->isChecked() )
+  {
+    if (SVTK_ViewWindow* svtkViewWindow = SMESH::GetViewWindow(mySMESHGUI)) {
+      QString msg;
+      SMESH::smIdType node1 = 0, node2 = 0;
+      if (isValid(msg, node1, node2)) {
+        //Disconnect selectionChanged to keep selected element
+        disconnect(selectionMgr(), SIGNAL(selectionChanged()), this, SLOT(onSelectionDone()));
+        // Set selection mode to ActorSelection to avoid element's prehighlight during interactive selection
+        setSelectionMode(ActorSelection);
+        connect(selectionMgr(), SIGNAL(selectionChanged()), SLOT(onSelectionDone()));
+      }      
+    }
+  }
+  else
+  {
+    setSelectionMode( ActorSelection );
+  }
+}
+
+//=======================================================================
+// function : startOperation()
+// purpose  : Init dialog fields, connect signals and slots, show dialog
+//=======================================================================
+
+void SMESHGUI_AddNodeOnSegmentOp::startOperation()
+{
+  myNoPreview = false;
+  myMeshActor = 0;
+
+  // init simulation with a current View
+  if ( mySimulation ) delete mySimulation;
+  mySMESHGUI = getSMESHGUI();
+  mySimulation = new SMESHGUI_MeshEditPreview(SMESH::GetViewWindow( mySMESHGUI ) );
+  connect(mySMESHGUI, SIGNAL (SignalActivatedViewManager()), this, SLOT(onOpenView()));
+  connect(mySMESHGUI, SIGNAL (SignalCloseView()), this, SLOT(onCloseView()));
+  vtkProperty* aProp = vtkProperty::New();
+  aProp->SetRepresentationToWireframe();
+  aProp->SetColor(250, 0, 250);
+  aProp->SetPointSize(5);
+  aProp->SetLineWidth( SMESH::GetFloat("SMESH:element_width",1) + 1);
+  mySimulation->GetActor()->SetProperty(aProp);
+  aProp->Delete();
+
+  SMESHGUI_SelectionOp::startOperation(); // this method should be called only after filter creation
+  SMESHGUI_InteractiveOp::startOperation();
+  myDlg->mySegment->setText("");
+  myDlg->myPositionSpin->SetValue(0.5);
+  myDlg->myPositionSpin->setReadOnly(false);
+
+  addObserver();
+
+  myDlg->show();
+
+  onSelectionDone(); // init myMeshActor
+}
+
+//================================================================================
+/*!
+ * \brief Stops operation
+ */
+//================================================================================
+
+void SMESHGUI_AddNodeOnSegmentOp::stopOperation()
+{
+  myNoPreview = true;
+  if ( mySimulation )
+  {
+    mySimulation->SetVisibility(false);
+    delete mySimulation;
+    mySimulation = 0;
+  }
+  if ( myMeshActor ) {
+    myMeshActor = 0;
+  }
+  SMESH::SetPointRepresentation( false );
+  SMESH::RepaintCurrentView();
+
+  disconnect(mySMESHGUI, SIGNAL (SignalActivatedViewManager()), this, SLOT(onOpenView()));
+  disconnect(mySMESHGUI, SIGNAL (SignalCloseView()),            this, SLOT(onCloseView()));
+  //selectionMgr()->removeFilter( myFilter );
+  SMESHGUI_SelectionOp::stopOperation();
+  removeObserver();
+}
+
+//================================================================================
+/*!
+ * \brief perform it's intention action: create a node on a segment
+ */
+//================================================================================
+
+bool SMESHGUI_AddNodeOnSegmentOp::onApply()
+{
+  if( SMESHGUI::isStudyLocked() )
+    return false;
+
+  QString msg;
+  SMESH::smIdType node1= 0, node2 = 0;
+  if ( !isValid( msg, node1, node2 ))
+  {
+    SUIT_MessageBox::warning( dlg(), tr( "SMESH_WRN_WARNING" ),
+                              msg.isEmpty() ? tr("INVALID_ID") : msg );
+    dlg()->show();
+    return false;
+  }
+
+  QStringList aParameters;
+  aParameters << myDlg->myPositionSpin->text();
+
+  try {
+    SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO( myMeshActor->getIO() );
+    if (aMesh->_is_nil()) {
+      SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"), tr("INVALID_MESH") );
+      return true;
+    }
+    SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor();
+    if (aMeshEditor->_is_nil())
+      return true;
+
+    aMesh->SetParameters( aParameters.join(":").toUtf8().constData() );
+
+    aMeshEditor->AddNodeOnSegment( node1, node2, myDlg->myPositionSpin->GetValue() );
+
+    selector()->ClearIndex();
+    selector()->ClearCompositeIndex();
+    SALOME_ListIO aList;
+    aList.Append( myMeshActor->getIO() );
+    selectionMgr()->setSelectedObjects(aList,false);
+    onSelectionDone();
+    SMESH::UpdateView();
+    SMESHGUI::Modified();
+  }
+  catch (const SALOME::SALOME_Exception& S_ex) {
+    SalomeApp_Tools::QtCatchCorbaException(S_ex);
+  }
+  catch (...) {
+  }
+
+  return true;
+}
+
+//================================================================================
+/*!
+ * \brief Check selected node id validity
+ */
+//================================================================================
+
+bool SMESHGUI_AddNodeOnSegmentOp::isValid( QString&          msg,
+                                           SMESH::smIdType & node1,
+                                           SMESH::smIdType & node2 )
+{
+  bool ok = false;
+  if ( !myMeshActor )
+  {
+    msg = tr("INVALID_MESH");
+  }
+  else
+  {
+    if ( SMDS_Mesh* mesh = myMeshActor->GetObject()->GetMesh() )
+    {
+      QString txt = myDlg->mySegment->text();
+      if ( txt.contains('-'))
+      {
+        QString str1 = txt.section('-', 0, 0, QString::SectionSkipEmpty);
+        QString str2 = txt.section('-', 1, 1, QString::SectionSkipEmpty);
+        node1 = str1.toLong();
+        node2 = str2.toLong();
+        const SMDS_MeshNode* n1 = mesh->FindNode( node1 );
+        const SMDS_MeshNode* n2 = mesh->FindNode( node2 );
+        std::vector<const SMDS_MeshNode *> nodes = { n1, n2 };
+        std::vector<const SMDS_MeshElement *> foundElems;
+        if ( !mesh->GetElementsByNodes( nodes, foundElems ))
+          msg = tr("NO_ELEMENTS");
+        else
+        {
+          for ( const SMDS_MeshElement * elem : foundElems )
+          {
+            if ( elem->GetGeomType() == SMDSGeom_TRIANGLE )
+              ok = true;
+            else
+            {
+              if ( elem->GetType() == SMDSAbs_Volume )
+                msg = tr("VOLUME_FOUND");
+              if ( elem->GetType() == SMDSAbs_Face )
+                msg = tr("NOT_TRIANGLE_FACE_FOUND");
+            }
+          }
+          if ( !msg.isEmpty() )
+            ok = false;
+        }
+      }
+    }
+  }
+  if ( !ok && msg.isEmpty() )
+  {
+    node1 = node2 = 0;
+    msg += tr("INVALID_EDGE") + "\n";
+  }
+
+  if ( ok && ! myDlg->myPositionSpin->isValid( msg, /*toCorrect=*/false ))
+  {
+    msg = tr("BAD_POSITION");
+    ok = false;
+  }
+
+  return ok;
+}
+
+//================================================================================
+/*!
+ * \brief SLOT called when selection changed
+ */
+//================================================================================
+
+void SMESHGUI_AddNodeOnSegmentOp::onSelectionDone()
+{
+  if ( !myDlg->isVisible() || !myDlg->isEnabled() )
+    return;
+
+  myNoPreview = true;
+  QString segmentStr;
+  try {
+    SALOME_ListIO aList;
+    selectionMgr()->selectedObjects(aList, SVTK_Viewer::Type());
+    if (aList.Extent() != 1)
+      return;
+    Handle(SALOME_InteractiveObject) anIO = aList.First();
+    if (( myMeshActor = SMESH::FindActorByEntry(anIO->getEntry()) ))
+    {
+      SVTK_IndexedMapOfVtkIds IDs;
+      selector()->GetCompositeIndex( anIO, IDs );
+      if ( IDs.Extent() == 1 && IDs(1).size() == 2 )
+      {
+        SMESH::smIdType id1 = IDs(1)[0];
+        SMESH::smIdType id2 = IDs(1)[1];
+        segmentStr = QString("%1-%2").arg( id1 ).arg( id2 );
+      }
+    }
+  } catch (...) {
+  }
+  myDlg->mySegment->setText( segmentStr );
+
+  myNoPreview = false;
+  redisplayPreview();
+}
+
+//================================================================================
+/*!
+ * \brief update preview
+ */
+//================================================================================
+
+void SMESHGUI_AddNodeOnSegmentOp::redisplayPreview()
+{
+  if ( myNoPreview || !myDlg->myPreviewChkBox->isChecked() )
+  {
+    if ( mySimulation )
+      mySimulation->SetVisibility(false);
+    return;
+  }
+  myNoPreview = true;
+
+  SMESH::MeshPreviewStruct_var aMeshPreviewStruct;
+
+  QString msg;
+  SMESH::smIdType node1, node2;
+  try {
+    if ( isValid( msg, node1, node2 ))
+    {
+      SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO(myMeshActor->getIO());
+      if ( !aMesh->_is_nil() )
+      {
+        SMESH::SMESH_MeshEditor_var aPreviewer = aMesh->GetMeshEditPreviewer();
+        if ( !aPreviewer->_is_nil() )
+        {
+          SUIT_OverrideCursor aWaitCursor;
+          double pos = myDlg->myPositionSpin->value();
+          aPreviewer->AddNodeOnSegment( node1, node2, pos );
+
+          aMeshPreviewStruct = aPreviewer->GetPreviewData();
+        }
+      }
+    }
+  }
+  catch (...) {
+  }
+
+  if (!mySimulation)
+    mySimulation = new SMESHGUI_MeshEditPreview(SMESH::GetViewWindow( mySMESHGUI ));
+  // display data
+  if ( & aMeshPreviewStruct.in() )
+  {
+    mySimulation->SetData( aMeshPreviewStruct.in() );
+  }
+  else
+  {
+    mySimulation->SetVisibility(false);
+  }
+
+  myNoPreview = false;
+}
+
+//=================================================================================
+/*!
+ * \brief SLOT called when the viewer opened
+ */
+//=================================================================================
+
+void SMESHGUI_AddNodeOnSegmentOp::onOpenView()
+{
+  if ( mySimulation ) {
+    mySimulation->SetVisibility(false);
+    SMESH::SetPointRepresentation(false);
+  }
+  else {
+    mySimulation = new SMESHGUI_MeshEditPreview(SMESH::GetViewWindow( mySMESHGUI ));
+  }
+}
+
+//=================================================================================
+/*!
+ * \brief SLOT called when the viewer closed
+ */
+//=================================================================================
+
+void SMESHGUI_AddNodeOnSegmentOp::onCloseView()
+{
+  delete mySimulation;
+  mySimulation = 0;
+}
+
+//================================================================================
+/*!
+ * \brief SLOT called when the node ids are manually changed
+ */
+//================================================================================
+
+void SMESHGUI_AddNodeOnSegmentOp::onTextChange( const QString& /*theText*/ )
+{
+  QString msg;
+  SMESH::smIdType node1= 0, node2 = 0;
+
+  if (( isValid( msg, node1, node2 )) ||
+      ( node1 && node2 )) // position only can be invalid
+  {
+    // highlight entered segment
+
+    Handle(SALOME_InteractiveObject) anIO = myMeshActor->getIO();
+    SALOME_ListIO aList;
+    aList.Append( anIO );
+    selectionMgr()->setSelectedObjects( aList, false );
+
+    SVTK_ListOfVtk newIndices = { node1, node2 };
+    selector()->AddOrRemoveCompositeIndex( anIO, newIndices, false );
+    SMESH::GetViewWindow(mySMESHGUI)->highlight( anIO, true, true );
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Activate Node selection
+ */
+//================================================================================
+
+void SMESHGUI_AddNodeOnSegmentOp::activateSelection()
+{
+  selectionMgr()->clearFilters();
+  SMESH::SetPointRepresentation( false );
+  onSelTypeChange();
+}
+
+//================================================================================
+/*!
+ * \brief Destructor
+ */
+//================================================================================
+
+SMESHGUI_AddNodeOnSegmentOp::~SMESHGUI_AddNodeOnSegmentOp()
+{
+  if ( myDlg )        delete myDlg;
+  if ( mySimulation ) delete mySimulation;
+}
+
+//================================================================================
+/*!
+ * \brief Gets dialog of this operation
+ * \retval LightApp_Dialog* - pointer to dialog of this operation
+ */
+//================================================================================
+
+LightApp_Dialog* SMESHGUI_AddNodeOnSegmentOp::dlg() const
+{
+  return myDlg;
+}
+
+//================================================================================
+/*
+* \brief Process InteractiveSelectionChanged event
+*/
+//================================================================================
+void SMESHGUI_AddNodeOnSegmentOp::processStyleEvents(unsigned long theEvent, void* theCallData) 
+{
+  (void*)theCallData;
+  QString msg;
+  SMESH::smIdType node1 = 0, node2 = 0;
+  if (isValid(msg, node1, node2)) {
+    if (theEvent == SVTK::InteractiveSelectionChanged) {
+      if (SMDS_Mesh* mesh = myMeshActor->GetObject()->GetMesh())
+        if(myRWInteractor && myRWInteractor->GetDevice() && myInteractorStyle) {
+        {
+          double N1[3];
+          double N2[3];
+          double pos;
+          double N1_SC[3];
+          double N2_SC[3];
+          double xyz[3];
+          double closest[3];
+
+          const SMDS_MeshNode* n1 = mesh->FindNode(node1);
+          const SMDS_MeshNode* n2 = mesh->FindNode(node2);
+          int xClick, yClick; // Last event (move or left button down) position
+          myRWInteractor->GetDevice()->GetEventPosition(xClick, yClick);
+
+          n1->GetXYZ(N1);
+          n2->GetXYZ(N2);
+          // Get 2D screen coordinates of each node
+          vtkInteractorObserver::ComputeWorldToDisplay(myRWInteractor->GetRenderer()->GetDevice(),
+            N1[0], N1[1], N1[2], N1_SC);
+          vtkInteractorObserver::ComputeWorldToDisplay(myRWInteractor->GetRenderer()->GetDevice(),
+            N2[0], N2[1], N2[2], N2_SC);
+          N1_SC[2] = N2_SC[2] = xyz[2] = 0;
+          xyz[0] = static_cast<double>(xClick);
+          xyz[1] = static_cast<double>(yClick);
+          // Parametric position of selected point on a line
+          vtkLine::DistanceToLine(xyz, N1_SC, N2_SC, pos, closest);
+          if (pos < 0)
+            pos = SPIN_TOLERANCE;
+          else if (pos > 1.0)
+            pos = 1.0 - SPIN_TOLERANCE;
+          myDlg->myPositionSpin->SetValue(pos);
+          redisplayPreview();
+        }
+      }
+    }
+  }
+}
+
+//================================================================================
+/*
+* \brief Process LeftButtonPressEvent event: activate interactive selection
+*/
+//================================================================================
+void SMESHGUI_AddNodeOnSegmentOp::processInteractorEvents(unsigned long theEvent, void* theCallData) 
+{
+  (void*)theCallData;
+  if (theEvent == vtkCommand::LeftButtonPressEvent && myDlg->myPositionBtn->isChecked()) {
+    bool control = myRWInteractor->GetDevice()->GetControlKey();
+    bool shift = myRWInteractor->GetDevice()->GetControlKey();
+    SVTK_ViewWindow* svtkViewWindow = SMESH::GetViewWindow(mySMESHGUI);
+    if (svtkViewWindow  && !shift && ! control) {
+      QString msg;
+      SMESH::smIdType node1 = 0, node2 = 0;
+      if (isValid(msg, node1, node2)) {
+        svtkViewWindow->activateInteractiveSelection();
+      }
+    }
+  }
+}
\ No newline at end of file
diff --git a/src/SMESHGUI/SMESHGUI_AddNodeOnSegmentDlg.h b/src/SMESHGUI/SMESHGUI_AddNodeOnSegmentDlg.h
new file mode 100644 (file)
index 0000000..f5dda94
--- /dev/null
@@ -0,0 +1,125 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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   : SMESHGUI_AddNodeOnSegmentDlg.h
+// Author : Edward AGAPOV, Open CASCADE S.A.S.
+//
+#ifndef SMESHGUI_AddNodeOnSegmentDLG_H
+#define SMESHGUI_AddNodeOnSegmentDLG_H
+
+#include "SMESHGUI_Dialog.h"
+#include "SMESHGUI_InteractiveOp.h"
+
+class QButtonGroup;
+class QCheckBox;
+class QGroupBox;
+class QLineEdit;
+class QPushButton;
+class QRadioButton;
+class SMESHGUI_SpinBox;
+class SMESHGUI_MeshEditPreview;
+class SMESHGUI_AddNodeOnSegmentDlg;
+
+/*!
+ * \brief Operation to make a mesh pass through a point
+ */
+class SMESHGUI_EXPORT SMESHGUI_AddNodeOnSegmentOp: public SMESHGUI_InteractiveOp
+{
+  Q_OBJECT
+
+public:
+  SMESHGUI_AddNodeOnSegmentOp();
+  virtual ~SMESHGUI_AddNodeOnSegmentOp();
+
+  virtual LightApp_Dialog*       dlg() const;  
+
+protected:
+
+  virtual void                   startOperation() override;
+  virtual void                   stopOperation() override;
+
+  virtual void                   activateSelection();
+
+  bool                           isValid( QString&, SMESH::smIdType& n1, SMESH::smIdType& n2 );
+
+  virtual void                   processStyleEvents(unsigned long event,
+    void* calldata)  override;
+
+  virtual void                   processInteractorEvents(unsigned long event,
+    void* calldata) override;
+
+
+protected slots:
+  virtual bool                   onApply() override;
+
+
+private slots:
+  void                           onSelectionDone();
+  void                           redisplayPreview();
+  void                           onTextChange( const QString& );
+  void                           onSelTypeChange();
+  void                           onOpenView();
+  void                           onCloseView();
+
+private:
+
+  SMESHGUI_AddNodeOnSegmentDlg* myDlg;
+
+  SMESHGUI*                     mySMESHGUI;
+  SMESHGUI_MeshEditPreview*     mySimulation;
+  SMESH_Actor*                  myMeshActor;
+  bool                          myNoPreview;
+};
+
+/*!
+ * \brief Dialog to make a mesh pass through a point
+ */
+
+class SMESHGUI_EXPORT SMESHGUI_AddNodeOnSegmentDlg : public SMESHGUI_Dialog
+{
+  Q_OBJECT
+
+public:
+  SMESHGUI_AddNodeOnSegmentDlg();
+
+signals:
+
+  void                          selTypeChanged();
+
+private:
+  QWidget*                      createMainFrame( QWidget* );
+
+  QPushButton*                  mySegmentBtn;
+  QLineEdit*                    mySegment;
+  QPushButton*                  myPositionBtn;
+  SMESHGUI_SpinBox*             myPositionSpin;
+  QCheckBox*                    myPreviewChkBox;
+
+  QString                       myHelpFileName;
+
+  friend class SMESHGUI_AddNodeOnSegmentOp;
+
+private slots:
+  void                          ButtonToggled( bool );
+};
+
+#endif // SMESHGUI_AddNodeOnSegmentDLG_H
index cc158fb1d96e72ffe846c2d921ce050e4eef070d..a348a1e18d7142510cff05ff7846cd06807a63f7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -741,7 +741,7 @@ bool SMESHGUI_AddQuadraticElementDlg::ClickOnApply()
     ReverseConnectivity( anIds, myGeomType, /*toReverse=*/true, /*toVtkOrder=*/false );
 
   int aNumberOfIds = anIds.size();
-  SMESH::long_array_var anArrayOfIdeces = new SMESH::long_array;
+  SMESH::smIdType_array_var anArrayOfIdeces = new SMESH::smIdType_array;
   anArrayOfIdeces->length( aNumberOfIds );
 
   for (int i = 0; i < aNumberOfIds; i++)
@@ -841,7 +841,7 @@ bool SMESHGUI_AddQuadraticElementDlg::ClickOnApply()
     }
 
     if ( !aGroupUsed->_is_nil() ) {
-      SMESH::long_array_var anIdList = new SMESH::long_array;
+      SMESH::smIdType_array_var anIdList = new SMESH::smIdType_array;
       anIdList->length( 1 );
       anIdList[0] = anElemId;
       aGroupUsed->Add( anIdList.inout() );
@@ -989,7 +989,7 @@ void SMESHGUI_AddQuadraticElementDlg::onTextChange (const QString& theNewText)
     myCurrentLineEdit = send;
 
   if (aMesh) {
-    TColStd_MapOfInteger newIndices;
+    SVTK_TVtkIDsMap newIndices;
 
     QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts);
     bool allOk = true;
index 74ae71579aa5a164826b492a42f135205d648f5a..b858421727226bfe454263116f86787b9d149d10 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 5130f4adb7398c668c450dd476bd4cd57d211b68..5abe633ca9acfbec247efacc26924f9abb8b7b90 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index ea2bf86e700845432987b71485a9e4a9002a6b1a..29f40f3aad715132e3f0861087714d6e5bb2300f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index cc115ba780621a8f2bf9a7a74c8a43b1481d302e..241826316a1c5b04fae4376a9df331c76cd8bef4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 592409d27b9dfc50df893c82aabf4dd7a787848f..a4bf07d210bdb1f20d34457db52dbaf0bd1285ed 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index a7cb0d0dc7840c6dd8231e4d28f67027bd08caaf..039a7cde27c92491bf39e3a770b24878b90dad0f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -896,6 +896,56 @@ void SMESHGUI_ComputeDlg_QThreadQDialog::closeEvent(QCloseEvent *event)
   event->accept();
 }
 
+//================================================================================
+void SMESHGUI_BaseComputeOp::logMeshSize()
+{
+  if(myMesh->_is_nil())
+  {
+    return;
+  }
+
+  SMESH::smIdType_array_var aRes = myMesh->GetMeshInfo();
+  QString aMessage = QString("%1").arg( aRes[SMDSAbs_EntityType::SMDSEntity_Node]) + " nodes";
+  CAM_Application::logStructuredUserEvent("Mesh",
+                                          "Result size",
+                                          "",
+                                          "",
+                                          aMessage);
+  
+  int nbEdges = aRes[SMDSAbs_EntityType::SMDSEntity_Edge] + aRes[SMDSAbs_EntityType::SMDSEntity_Quad_Edge];
+  aMessage = QString("%1").arg(nbEdges) + " edges";
+  CAM_Application::logStructuredUserEvent("Mesh",
+                                          "Result size",
+                                          "",
+                                          "",
+                                          aMessage);
+  
+  int nbFaces = aRes[SMDSAbs_EntityType::SMDSEntity_Triangle] + aRes[SMDSAbs_EntityType::SMDSEntity_Quad_Triangle] +
+                aRes[SMDSAbs_EntityType::SMDSEntity_BiQuad_Triangle] + aRes[SMDSAbs_EntityType::SMDSEntity_Quadrangle] +
+                aRes[SMDSAbs_EntityType::SMDSEntity_Quad_Quadrangle] + aRes[SMDSAbs_EntityType::SMDSEntity_BiQuad_Quadrangle] +
+                aRes[SMDSAbs_EntityType::SMDSEntity_Polygon] + aRes[SMDSAbs_EntityType::SMDSEntity_Quad_Polygon];
+  aMessage = QString("%1").arg(nbFaces) + " faces";
+  CAM_Application::logStructuredUserEvent("Mesh",
+                                          "Result size",
+                                          "",
+                                          "",
+                                          aMessage);
+  
+  int nbVolumes = aRes[SMDSAbs_EntityType::SMDSEntity_Tetra] + aRes[SMDSAbs_EntityType::SMDSEntity_Quad_Tetra] +
+                  aRes[SMDSAbs_EntityType::SMDSEntity_Pyramid] + aRes[SMDSAbs_EntityType::SMDSEntity_Quad_Pyramid] +
+                  aRes[SMDSAbs_EntityType::SMDSEntity_Hexa] + aRes[SMDSAbs_EntityType::SMDSEntity_Quad_Hexa] +
+                  aRes[SMDSAbs_EntityType::SMDSEntity_TriQuad_Hexa] + aRes[SMDSAbs_EntityType::SMDSEntity_Penta] +
+                  aRes[SMDSAbs_EntityType::SMDSEntity_Quad_Penta] + aRes[SMDSAbs_EntityType::SMDSEntity_BiQuad_Penta] +
+                  aRes[SMDSAbs_EntityType::SMDSEntity_Hexagonal_Prism] + aRes[SMDSAbs_EntityType::SMDSEntity_Polyhedra];
+  aMessage = QString("%1").arg(nbVolumes) + " volumes";
+  CAM_Application::logStructuredUserEvent("Mesh",
+                                          "Result size",
+                                          "",
+                                          "",
+                                          aMessage);
+
+}
+
 //================================================================================
 /*!
  * \brief computeMesh()
@@ -1060,9 +1110,9 @@ void SMESHGUI_BaseComputeOp::computeMesh()
               }
             }
             catch (...) {
-#ifdef _DEBUG_
+
               MESSAGE ( "Exception thrown during mesh visualization" );
-#endif
+
               if ( SMDS_Mesh::CheckMemory(true) ) { // has memory to show warning?
                 SMESH::OnVisuException();
               }
@@ -1122,9 +1172,13 @@ void SMESHGUI_BaseComputeOp::computeMesh()
     isShowResultDlg = true;
   }
 
+  //log Mesh size info
+  logMeshSize();
+
   // SHOW RESULTS
   if ( isShowResultDlg )
     showComputeResult( memoryLack, noCompError,aCompErrors, noHypoError, aHypErrors );
+
 }
 
 void SMESHGUI_BaseComputeOp::showComputeResult( const bool theMemoryLack,
@@ -1147,7 +1201,7 @@ void SMESHGUI_BaseComputeOp::showComputeResult( const bool theMemoryLack,
   }
   else if ( theNoCompError && theNoHypoError )
   {
-    SMESH::long_array_var aRes = myMesh->GetMeshInfo();
+    SMESH::smIdType_array_var aRes = myMesh->GetMeshInfo();
     aCompDlg->myFullInfo->SetMeshInfo( aRes );
     aCompDlg->myFullInfo->show();
     aCompDlg->myBriefInfo->hide();
@@ -1162,7 +1216,7 @@ void SMESHGUI_BaseComputeOp::showComputeResult( const bool theMemoryLack,
                        theCompErrors[ i ].code == SMESH::COMPERR_NO_MESH_ON_SHAPE );
 
     // full or brief mesh info
-    SMESH::long_array_var aRes = myMesh->GetMeshInfo();
+    SMESH::smIdType_array_var aRes = myMesh->GetMeshInfo();
     if ( onlyWarnings ) {
       aCompDlg->myFullInfo->SetMeshInfo( aRes );
       aCompDlg->myFullInfo->show();
@@ -2211,7 +2265,7 @@ void SMESHGUI_BaseComputeOp::evaluateMesh()
   QString                        aHypErrors;
 
   bool evaluateFailed = true, memoryLack = false;
-  SMESH::long_array_var aRes;
+  SMESH::smIdType_array_var aRes;
 
   _PTR(SObject) aMeshSObj = SMESH::FindSObject(myMesh);
   if ( !aMeshSObj ) //  IPAL21340
@@ -2286,7 +2340,7 @@ void SMESHGUI_BaseComputeOp::evaluateMesh()
 }
 
 
-void SMESHGUI_BaseComputeOp::showEvaluateResult(const SMESH::long_array& theRes,
+void SMESHGUI_BaseComputeOp::showEvaluateResult(const SMESH::smIdType_array& theRes,
                                                 const bool theMemoryLack,
                                                 const bool theNoCompError,
                                                 SMESH::compute_error_array_var& theCompErrors,
index c72fb097b33f2461454c21d804b32ea70e9bed31..869a3185a2319c35b1e9d317a551971f461b877b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -87,7 +87,7 @@ protected:
                                                     const QString& );
   SMESHGUI_ComputeDlg*           evaluateDlg() const;
   void                           evaluateMesh();
-  void                           showEvaluateResult(const SMESH::long_array& theRes,
+  void                           showEvaluateResult(const SMESH::smIdType_array& theRes,
                                                     const bool,
                                                     const bool,
                                                     SMESH::compute_error_array_var&,
@@ -95,6 +95,7 @@ protected:
                                                     const QString&);
 
   virtual bool                   isValid( SUIT_Operation* theOp ) const;
+  void                           logMeshSize();
     
 protected slots:
   virtual bool                   onApply();
index ec96e5357156df16df759b06747f2b6bdcd9eb89..920c42b387117cd538026e3037b6b2ca34923414 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 8292dc64240a7124f4e8f762af3df38840c0b56e..4887956243388d960f43a5559487d370e8dc51ef 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index e2989aeb2d0e1f5e885cef97aa806de58083dfa2..6a3fcf9b2dde3515f3797dc9ec502890813aad3c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -328,7 +328,7 @@ SMESHGUI_ConvToQuadOp::MeshDestinationType
 SMESHGUI_ConvToQuadOp::DestinationMesh( const SMESH::SMESH_IDSource_var& idSource,
                                         bool*                            isMixOrder)
 {
-  SMESH::long_array_var nbElemOfType = idSource->GetMeshInfo();
+  SMESH::smIdType_array_var nbElemOfType = idSource->GetMeshInfo();
 
   bool hasBiQuad     = ( nbElemOfType[SMDSEntity_BiQuad_Triangle   ] ||
                          nbElemOfType[SMDSEntity_BiQuad_Quadrangle ] ||
index bce534c23c2772d6d1d42eeabd982bfcd68029ac..f8a90b41be5fa4aad3fd98bfd2793b660f4a7632 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 9af0d8a4240d1932a2cf3083fa12d5804fdc468f..5deaaee81b29ee635fa6a0ad2511193ea392dfee 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -439,7 +439,7 @@ bool SMESHGUI_CopyMeshDlg::ClickOnApply()
     else
     {
       QStringList aListElementsId = myLineEditElements->text().split(" ", QString::SkipEmptyParts);
-      SMESH::long_array_var anElementsId = new SMESH::long_array;
+      SMESH::smIdType_array_var anElementsId = new SMESH::smIdType_array;
       anElementsId->length(aListElementsId.count());
       for (int i = 0; i < aListElementsId.count(); i++)
         anElementsId[i] = aListElementsId[i].toInt();
@@ -614,7 +614,7 @@ void SMESHGUI_CopyMeshDlg::onTextChange (const QString& theNewText)
   QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts);
   if (myActor && aMesh)
   {
-    TColStd_MapOfInteger newIndices;
+    SVTK_TVtkIDsMap newIndices;
     if (send == myLineEditElements) {
       for (int i = 0; i < aListId.count(); i++)
         if ( const SMDS_MeshElement * e = aMesh->FindElement(aListId[ i ].toInt()))
index ba675c081ff8f792a2ffb60bb56f873beff52ae1..ce1256a65817b4326c81f35316954642109cd01d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
diff --git a/src/SMESHGUI/SMESHGUI_CreateDualMeshDlg.cxx b/src/SMESHGUI/SMESHGUI_CreateDualMeshDlg.cxx
new file mode 100644 (file)
index 0000000..c4a08a1
--- /dev/null
@@ -0,0 +1,96 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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 SMESHGUI : GUI for SMESH component
+// File   : SMESHGUI_CreateDualMeshDlg.cxx
+// Author : Yoann AUDOUIN (EDF)
+// SMESH includes
+//
+#include "SMESHGUI_CreateDualMeshDlg.h"
+
+#include "SMESHGUI_CreateDualMeshOp.h"
+
+// Qt includes
+#include <QGroupBox>
+#include <QCheckBox>
+#include <QRadioButton>
+#include <QButtonGroup>
+#include <QGroupBox>
+#include <QFrame>
+#include <QHBoxLayout>
+#include <QGridLayout>
+#include <QLabel>
+#include <QLineEdit>
+
+#define SPACING 6
+#define MARGIN  11
+
+SMESHGUI_CreateDualMeshDlg::SMESHGUI_CreateDualMeshDlg()
+  : SMESHGUI_Dialog( 0, false, true )
+{
+  setWindowTitle( tr( "CAPTION" ) );
+
+  // Create top controls
+
+  // mesh
+  setObjectPixmap( "SMESH", tr( "ICON_SELECT" ) );
+  createObject( tr( "MESH" ), mainFrame(), 0 );
+
+  myMeshNameLabel = new QLabel(QString(tr("DUAL_MESH_NAME")), mainFrame());
+  myMeshName = new QLineEdit(mainFrame());
+
+  myProjShape = new QCheckBox(QString(tr("PROJ_SHAPE")), mainFrame());
+  myProjShape->toggle();
+
+  myWarning = new QLabel(QString("<b>%1</b>").arg(tr("NON_TETRA_MESH_WARNING")), mainFrame());
+
+  // Fill layout
+  QGridLayout* aLay = new QGridLayout( mainFrame() );
+  aLay->setMargin( 5 );
+  aLay->setSpacing( 5 );
+
+  aLay->addWidget( objectWg( 0,  Label ),   0, 0 );
+  aLay->addWidget( objectWg( 0,  Btn ),     0, 1 );
+  aLay->addWidget( objectWg( 0,  Control ), 0, 2 );
+  aLay->addWidget( myWarning,               3, 0, 1, 3 );
+  aLay->addWidget( myMeshNameLabel,         1, 0 );
+  aLay->addWidget( myMeshName,              1, 2 );
+  aLay->addWidget( myProjShape,              2, 0 );
+
+}
+
+SMESHGUI_CreateDualMeshDlg::~SMESHGUI_CreateDualMeshDlg()
+{
+}
+
+void SMESHGUI_CreateDualMeshDlg::ShowWarning(bool toShow)
+{
+  if ( toShow )
+    myWarning->show();
+  else
+    myWarning->hide();
+}
+
+bool SMESHGUI_CreateDualMeshDlg::isWarningShown()
+{
+  return myWarning->isVisible();
+}
\ No newline at end of file
diff --git a/src/SMESHGUI/SMESHGUI_CreateDualMeshDlg.h b/src/SMESHGUI/SMESHGUI_CreateDualMeshDlg.h
new file mode 100644 (file)
index 0000000..b38531b
--- /dev/null
@@ -0,0 +1,65 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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 SMESHGUI : GUI for SMESH component
+// File   : SMESHGUI_CreateDualMeshDlg.h
+// Author : Yoann Audouin (EDF)
+//
+#ifndef SMESHGUI_CREATEDUALMESHDLG_H
+#define SMESHGUI_CREATEDUALMESHDLG_H
+
+// SMESH includes
+#include "SMESH_SMESHGUI.hxx"
+
+#include "SMESHGUI_Dialog.h"
+
+class QCheckBox;
+class QRadioButton;
+class QButtonGroup;
+class QGroupBox;
+class QLabel;
+class QLineEdit;
+
+class SMESHGUI_EXPORT SMESHGUI_CreateDualMeshDlg : public SMESHGUI_Dialog
+{
+  Q_OBJECT
+
+public:
+  SMESHGUI_CreateDualMeshDlg();
+  virtual ~SMESHGUI_CreateDualMeshDlg();
+
+  void          ShowWarning(bool);
+  bool          isWarningShown();
+
+  QLineEdit* myMeshName;
+  QCheckBox* myProjShape;
+
+signals:
+  void          onClicked( int );
+
+
+private:
+  QLabel* myWarning;
+  QLabel* myMeshNameLabel;
+};
+
+#endif // SMESHGUI_CREATEDUALMESHDLG_H
diff --git a/src/SMESHGUI/SMESHGUI_CreateDualMeshOp.cxx b/src/SMESHGUI/SMESHGUI_CreateDualMeshOp.cxx
new file mode 100644 (file)
index 0000000..9ca334c
--- /dev/null
@@ -0,0 +1,293 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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 SMESHGUI : GUI for SMESH component
+// File   : SMESHGUI_CreateDualMeshOp.cxx
+// Author : Yoann AUDOUIN (EDF)
+// SMESH includes
+//
+#include "SMESHGUI_CreateDualMeshOp.h"
+
+#include "SMESHGUI.h"
+#include "SMESHGUI_CreateDualMeshDlg.h"
+#include "SMESHGUI_MeshEditPreview.h"
+#include "SMESHGUI_Utils.h"
+#include "SMESH_ActorUtils.h"
+#include "SMESH_TypeFilter.hxx"
+#include "SMDSAbs_ElementType.hxx"
+
+// SALOME GUI includes
+#include <LightApp_UpdateFlags.h>
+#include <SUIT_MessageBox.h>
+#include <SUIT_OverrideCursor.h>
+#include <SalomeApp_Tools.h>
+#include <SalomeApp_Application.h>
+#include <SALOME_Actor.h>
+
+// Qt includes
+#include <QLineEdit>
+#include <QCheckBox>
+
+// IDL includes
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
+
+// VTK includes
+#include <vtkProperty.h>
+
+//================================================================================
+/*!
+ * \brief Constructor
+ *
+ * Initialize operation
+*/
+//================================================================================
+SMESHGUI_CreateDualMeshOp::SMESHGUI_CreateDualMeshOp()
+  : SMESHGUI_SelectionOp(),
+    myDlg( 0 )
+{
+}
+
+//================================================================================
+/*!
+ * \brief Destructor
+*/
+//================================================================================
+SMESHGUI_CreateDualMeshOp::~SMESHGUI_CreateDualMeshOp()
+{
+  if ( myDlg ) delete myDlg;
+}
+
+//================================================================================
+/*!
+ * \brief Gets dialog of this operation
+  * \retval LightApp_Dialog* - pointer to dialog of this operation
+*/
+//================================================================================
+LightApp_Dialog* SMESHGUI_CreateDualMeshOp::dlg() const
+{
+  return myDlg;
+}
+
+//================================================================================
+/*!
+ * \brief Creates dialog if necessary and shows it
+ *
+ * Virtual method redefined from base class called when operation is started creates
+ * dialog if necessary and shows it, activates selection
+ */
+//================================================================================
+void SMESHGUI_CreateDualMeshOp::startOperation()
+{
+  if( !myDlg )
+  {
+    myDlg = new SMESHGUI_CreateDualMeshDlg( );
+  }
+  connect( myDlg, SIGNAL( onClicked( int ) ), SLOT( ConnectRadioButtons( int ) ) );
+
+  myHelpFileName = "create_dual_mesh.html";
+
+  SMESHGUI_SelectionOp::startOperation();
+
+  myDlg->activateObject( 0 );
+  myDlg->ShowWarning( false );
+  myDlg->show();
+
+  selectionDone();
+}
+
+//================================================================================
+/*!
+ * \brief Updates dialog's look and feel
+ *
+ * Virtual method redefined from the base class updates dialog's look and feel
+ */
+//================================================================================
+void SMESHGUI_CreateDualMeshOp::selectionDone()
+{
+  if ( !dlg()->isVisible() )
+    return;
+
+  SMESHGUI_SelectionOp::selectionDone();
+  try
+  {
+    QString anObjEntry = myDlg->selectedObject( 0 );
+    _PTR(SObject) pObj = SMESH::getStudy()->FindObjectID( anObjEntry.toUtf8().data() );
+    if ( !pObj ) return;
+
+    SMESH::SMESH_IDSource_var idSource =
+      SMESH::SObjectToInterface<SMESH::SMESH_IDSource>( pObj );
+
+    myDlg->setButtonEnabled( true, QtxDialog::OK | QtxDialog::Apply );
+    if( idSource->_is_nil() )
+    {
+      myDlg->setButtonEnabled( false, QtxDialog::OK | QtxDialog::Apply );
+      return;
+    }
+    SMESH::SMESH_Mesh_var      mesh = idSource->GetMesh();
+
+    // show warning on non-conformal result mesh
+    if ( ! idSource->_is_nil() )
+    {
+      SMESH::SMESH_subMesh_var subMesh =
+        SMESH::SObjectToInterface<SMESH::SMESH_subMesh>( pObj );
+      // Check that mesh is only tetra
+      if (!checkMesh(idSource)){
+        myDlg->ShowWarning( true );
+        myDlg->setButtonEnabled(false, QtxDialog::OK|QtxDialog::Apply);
+      }
+    }
+    std::string mesh_name = "dual_" + pObj->GetName();
+    myDlg->myMeshName->setText(QString(mesh_name.c_str()));
+
+  }
+  catch ( const SALOME::SALOME_Exception& S_ex )
+  {
+    SalomeApp_Tools::QtCatchCorbaException( S_ex );
+  }
+  catch ( ... )
+  {
+  }
+
+}
+
+//================================================================================
+/*!
+ * \brief Creates selection filter
+  * \param theId - identifier of current selection widget
+  * \retval SUIT_SelectionFilter* - pointer to the created filter or null
+ *
+ * Creates selection filter in accordance with identifier of current selection widget
+ */
+//================================================================================
+SUIT_SelectionFilter* SMESHGUI_CreateDualMeshOp::createFilter( const int theId ) const
+{
+  if ( theId == 0 )
+    return new SMESH_TypeFilter( SMESH::MESHorSUBMESH );
+  else
+    return 0;
+}
+
+//================================================================================
+/*!
+ * \brief Edits mesh
+ *
+ * Virtual slot redefined from the base class called when "Apply" button is clicked
+ */
+//================================================================================
+bool SMESHGUI_CreateDualMeshOp::onApply()
+{
+  SUIT_OverrideCursor aWaitCursor;
+
+  QString aMess;
+  QStringList anEntryList;
+
+  QString anObjEntry = myDlg->selectedObject( 0 );
+  _PTR(SObject) pObj = SMESH::getStudy()->FindObjectID( anObjEntry.toUtf8().data() );
+  if ( !pObj )
+  {
+    dlg()->show();
+    SUIT_MessageBox::warning( myDlg,
+                              tr( "SMESH_WRN_WARNING" ), tr("MESH_IS_NOT_SELECTED") );
+    return false;
+  }
+
+  SMESH::SMESH_Mesh_var mesh;
+  SMESH::SMESH_IDSource_var idSource =
+    SMESH::SObjectToInterface<SMESH::SMESH_IDSource>( pObj );
+  if( !CORBA::is_nil(idSource) )
+    mesh = idSource->GetMesh();
+
+  if( CORBA::is_nil(mesh) )
+  {
+    SUIT_MessageBox::warning( myDlg,
+                              tr( "SMESH_WRN_WARNING" ), tr("REF_IS_NULL") );
+    return false;
+  }
+
+  bool aResult = false;
+  SMESH::SMESH_Gen_var gen = SMESHGUI::GetSMESHGen();
+  SMESH::SMESH_Mesh_var newMesh;
+  QByteArray newMeshName=myDlg->myMeshName->text().toUtf8();
+  bool adapt_to_shape=myDlg->myProjShape->isChecked();
+  try
+  {
+    newMesh = gen->CreateDualMesh(mesh, newMeshName.constData(), adapt_to_shape);
+
+    if ( !newMesh->_is_nil() )
+      if ( _PTR(SObject) aSObject = SMESH::ObjectToSObject( newMesh ) )
+      {
+        anEntryList.append( aSObject->GetID().c_str() );
+
+        SMESH::SetName( aSObject, newMeshName );
+      }
+    aResult = true;
+  }
+  catch ( const SALOME::SALOME_Exception& S_ex )
+  {
+    SalomeApp_Tools::QtCatchCorbaException( S_ex );
+    aResult = false;
+  }
+  catch ( ... )
+  {
+    aResult = false;
+  }
+  if( aResult )
+  {
+    SMESHGUI::Modified();
+    selectionDone();
+    update( UF_ObjBrowser | UF_Model | UF_Viewer );
+
+  }
+  SMESHGUI::GetSMESHGUI()->getApp()->updateObjectBrowser();
+
+  // updateObjBrowser(true);
+  // SMESHGUI::Modified();
+
+  // if( LightApp_Application* anApp =
+  //     dynamic_cast<LightApp_Application*>( SUIT_Session::session()->activeApplication() ) )
+  //   anApp->browseObjects( anEntryList, true );
+
+  return true;
+
+}
+
+//================================================================================
+/*! checkMesh
+ *  Verify that mesh as only tetraheadrons as 3D elements
+ */
+//================================================================================
+
+bool
+SMESHGUI_CreateDualMeshOp::checkMesh( const SMESH::SMESH_IDSource_var& idSource)
+{
+  SMESH::smIdType_array_var nbElemOfType = idSource->GetMeshInfo();
+  // Checking that the mesh only has Tetrahedron
+  bool hasOnlyTetra  = (
+                    nbElemOfType[SMDSEntity_Tetra     ] &&
+                   !nbElemOfType[SMDSEntity_Hexa      ] &&
+                   !nbElemOfType[SMDSEntity_Pyramid   ] &&
+                   !nbElemOfType[SMDSEntity_Polygon   ] &&
+                   !nbElemOfType[SMDSEntity_Penta     ] );
+
+  return hasOnlyTetra;
+}
diff --git a/src/SMESHGUI/SMESHGUI_CreateDualMeshOp.h b/src/SMESHGUI/SMESHGUI_CreateDualMeshOp.h
new file mode 100644 (file)
index 0000000..15f0f87
--- /dev/null
@@ -0,0 +1,64 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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 SMESHGUI : GUI for SMESH component
+// File   : SMESHGUI_CreateDualMeshOp.h
+// Author : Yoann AUDOUIN (EDF)
+//
+#ifndef SMESHGUI_CREATEDUALMESHOP_H
+#define SMESHGUI_CREATEDUALMESHOP_H
+
+// SMESH includes
+#include "SMESH_SMESHGUI.hxx"
+
+#include "SMESHGUI_SelectionOp.h"
+
+// IDL includes
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_Mesh)
+
+class SMESHGUI_CreateDualMeshDlg;
+
+class SMESHGUI_EXPORT SMESHGUI_CreateDualMeshOp : public SMESHGUI_SelectionOp
+{
+  Q_OBJECT
+
+public:
+  SMESHGUI_CreateDualMeshOp();
+  virtual ~SMESHGUI_CreateDualMeshOp();
+
+  virtual LightApp_Dialog*       dlg() const;
+
+  static bool     checkMesh( const SMESH::SMESH_IDSource_var& );
+protected:
+  virtual void                   startOperation();
+  virtual void                   selectionDone();
+  virtual SUIT_SelectionFilter*  createFilter( const int ) const;
+
+protected slots:
+  virtual bool                   onApply();
+
+private:
+  SMESHGUI_CreateDualMeshDlg*        myDlg;
+};
+
+#endif // SMESHGUI_CREATEDUALMESHOP_H
index e501d95649b65c8bd2cb22caf82732acb0b6036f..07979cf42ca7477e852fb1e1a6a796cb3bc216e0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index a8157d8cce211ddffeed860b121604c2746c9700..61d491d97633733918c0c7adf8d549433472c045 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index faffadb33d74cbb9bfb8a8d1623770253316f581..07444af59a648a9a1600c4380fab6c20d97b6d2d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -480,7 +480,7 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::ClickOnApply()
 
       if (GetConstructorId() == 0)
         {
-          SMESH::long_array_var anIdsOfNodes = new SMESH::long_array;
+          SMESH::smIdType_array_var anIdsOfNodes = new SMESH::smIdType_array;
           SMESH::long_array_var aQuantities  = new SMESH::long_array;
 
           aQuantities->length( myFacesByNodes->count() );
@@ -518,7 +518,7 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::ClickOnApply()
         }
       else if (GetConstructorId() == 1)
         {
-          SMESH::long_array_var anIdsOfFaces = new SMESH::long_array;
+          SMESH::smIdType_array_var anIdsOfFaces = new SMESH::smIdType_array;
           
           QStringList aListId = myEditCurrentArgument->text().split( " ", QString::SkipEmptyParts );
           anIdsOfFaces->length(aListId.count());
@@ -562,7 +562,7 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::ClickOnApply()
         }
         
         if ( !aGroupUsed->_is_nil() ) {
-          SMESH::long_array_var anIdList = new SMESH::long_array;
+          SMESH::smIdType_array_var anIdList = new SMESH::smIdType_array;
           anIdList->length( 1 );
           anIdList[0] = anElemId;
           aGroupUsed->Add( anIdList.inout() );
@@ -688,7 +688,7 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::onTextChange(const QString& theNewText)
   if (GetConstructorId() == 0)
     {
       if ( aMesh ) {
-        TColStd_MapOfInteger newIndices;
+        SVTK_TVtkIDsMap newIndices;
       
         QStringList aListId = theNewText.split( " ", QString::SkipEmptyParts );
         for ( int i = 0; i < aListId.count(); i++ ) {
@@ -720,7 +720,7 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::onTextChange(const QString& theNewText)
         // check entered ids of faces and highlight them
         QStringList aListId;
         if ( aMesh ) {
-          TColStd_MapOfInteger newIndices;
+          SVTK_TVtkIDsMap newIndices;
       
           aListId = theNewText.split( " ", QString::SkipEmptyParts );
 
@@ -1147,7 +1147,7 @@ void SMESHGUI_CreatePolyhedralVolumeDlg::onListSelectionChanged()
 
   SALOME_ListIO aList;
   mySelectionMgr->setSelectedObjects( aList );
-  TColStd_MapOfInteger aIndexes;
+  SVTK_TVtkIDsMap aIndexes;
 
   QList<QListWidgetItem*> selItems = myFacesByNodes->selectedItems();
   QListWidgetItem* anItem;
index 23ba6cfab7829f9a39abf8644f42af5771e6dd49..fe12e2b7b1c5dd9abbabc0fddecb114051e16ac4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 093ab1075c61658676b99f1ef35d31a5641b413e..619569497fd67403c274bf6929253e96dcc9b4d6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 05e8c84d71529c198e096236b025edb4835ec286..ee9344f9d318fc94ea5091acc55aaddf078f9d35 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 445a5d092e7532aa5cc1064e20d07a7e5de41dfe..df3b0d9c33c0ec064d6865edfc6f3267d9796216 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index d00093fd7602ab3ca083364f83b1113ece0888b1..be482ca5240ee616e1afbf91bae2350127d22f1c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 378e2ae0d23beda1b9e283da253142d40594a042..74ebdf63095e17b23fd3cfdf0554dce4029fdc15 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2014-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -33,6 +33,7 @@
 #include <SUIT_OverrideCursor.h>
 #include <SUIT_ResourceMgr.h>
 #include <SUIT_Session.h>
+#include <smIdType.hxx>
 
 #include <QCheckBox>
 #include <QGridLayout>
@@ -81,7 +82,7 @@ SMESHGUI_DisplayEntitiesDlg::SMESHGUI_DisplayEntitiesDlg( QWidget* parent )
   QGridLayout* hl = new QGridLayout( anEntitiesGrp );
   hl->setMargin( MARGIN );
   hl->setSpacing( SPACING );
-  int nbElements;
+  smIdType nbElements;
 
   // 0DElements
   nbElements = myActor ? myActor->GetObject()->GetNbEntities( SMDSAbs_0DElement ) : aMesh->Nb0DElements();
index d130b30d781c3c0caa77f445fc422ac7600a5a58..b263b74f05d5ad63a420f73668dc57c050c95292 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2014-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2014-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 53bb6c4dd305710dd8f2f80e9c54676aadd8ad40..f722385ce486ee79b6d3b846e4da41c24822256b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #include <SUIT_ViewManager.h>
 #include <SVTK_ViewModel.h>
 #include <SVTK_ViewWindow.h>
+#include <SPV3D_Prs.h>
+#include <SPV3D_ViewModel.h>
+#include <PV3DViewer_ViewWindow.h>
 
+//For PV3D
+#include "SMESH_Actor.h"
 
 // IDL includes
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Group)
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 
+std::string SMESHGUI_Displayer::getName( const QString& entry )
+{
+  Handle( SALOME_InteractiveObject ) theIO = new SALOME_InteractiveObject();
+  theIO->setEntry( entry.toUtf8().constData() );
+  if ( !theIO.IsNull() )
+  {
+    //  Find SOBject (because shape should be published previously)
+    if ( study() )
+    {
+      _PTR(SObject) aSObj ( study()->studyDS()->FindObjectID( theIO->getEntry() ) );
+      _PTR(GenericAttribute) anAttr;
+
+      if ( aSObj && aSObj->FindAttribute( anAttr, "AttributeName") )
+      {
+        _PTR(AttributeName) aNameAttr( anAttr );
+        return aNameAttr->Value();
+      }
+    }
+  }
+  return "";
+}
 
 SMESHGUI_Displayer::SMESHGUI_Displayer( SalomeApp_Application* app )
 : LightApp_Displayer(),
@@ -57,7 +83,7 @@ SMESHGUI_Displayer::~SMESHGUI_Displayer()
 
 SALOME_Prs* SMESHGUI_Displayer::buildPresentation( const QString& entry, SALOME_View* theViewFrame )
 {
-  SALOME_Prs* prs = 0;
+  SALOME_Prs *prs = nullptr;
 
   SALOME_View* aViewFrame = theViewFrame ? theViewFrame : GetActiveView();
 
@@ -81,6 +107,28 @@ SALOME_Prs* SMESHGUI_Displayer::buildPresentation( const QString& entry, SALOME_
       else if( anActor )
         SMESH::RemoveActor( vtk_viewer->getViewManager()->getActiveView(), anActor );
     }
+    
+    SPV3D_ViewModel *pv3d_viewer = dynamic_cast<SPV3D_ViewModel *>( aViewFrame );
+    if(pv3d_viewer)
+    {
+      SUIT_ViewWindow* wnd = pv3d_viewer->getViewManager()->getActiveView();
+      SMESH_Actor* anActor = SMESH::FindActorByEntry( wnd, entry.toUtf8().data() );
+      if( !anActor )
+        anActor = SMESH::CreateActor( entry.toUtf8().data(), true );
+      if( anActor )
+      {
+        prs = LightApp_Displayer::buildPresentation( entry.toUtf8().data(), aViewFrame );
+        if( prs )
+        {
+          SPV3D_Prs *pv3dPrs = dynamic_cast<SPV3D_Prs*>( prs );
+          if( pv3dPrs )
+          {
+            pv3dPrs->SetName( getName( entry ) );
+            pv3dPrs->FillUsingActor( anActor );
+          }
+        }
+      }
+    }
   }
 
   return prs;
@@ -94,7 +142,7 @@ SalomeApp_Study* SMESHGUI_Displayer::study() const
 bool SMESHGUI_Displayer::canBeDisplayed( const QString& entry, const QString& viewer_type ) const
 {
   bool res = false;
-  if(viewer_type != SVTK_Viewer::Type())
+  if(viewer_type != SVTK_Viewer::Type() && viewer_type != SPV3D_ViewModel::Type())
     return res;
   
   _PTR(SObject) obj = SMESH::getStudy()->FindObjectID( (const char*)entry.toUtf8() );
index 3777cfcad5d52338b63eb7ec85b3f741f3e6255b..dd428354e7e0a3e9b4b856d61875193eff98c88c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -48,6 +48,7 @@ public:
 
 protected:
   SalomeApp_Study*         study() const;
+  std::string              getName( const QString& entry );
 
 private:
   SalomeApp_Application*   myApp;
index ec9640d9885885374fe2fed0e6ee64ca6075e735..227a2f8ab7700c8431eb07ebc9fc7a6b2094092c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 13f55dd71f7955504c11c2c4776dffa05dfb6b3d..3eca9299e002b94dcffd986e6e85a9d7ebd67d8e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index bd2cb645aff6ca2b28be71cb19b023a48e13e237..647db35d5c7dd89a9ead674b7305fc95940898bc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -264,13 +264,15 @@ SMESHGUI_ExtrusionAlongPathDlg::SMESHGUI_ExtrusionAlongPathDlg( SMESHGUI* theMod
   myPreviewCheckBox = new QCheckBox(tr("PREVIEW"), GroupArguments);
 
   // layouting
-  GroupArgumentsLayout->addWidget(SelectorWdg,          0, 0, 1, 2);
-  GroupArgumentsLayout->addWidget(PathGrp,              1, 0, 1, 2);
-  GroupArgumentsLayout->addWidget(BasePointGrp,         2, 0, 1, 2);
-  GroupArgumentsLayout->addWidget(AnglesGrp,            3, 0);
-  GroupArgumentsLayout->addWidget(ScalesGrp,            3, 1);
-  GroupArgumentsLayout->addWidget(myPreviewCheckBox,    4, 0);
-  GroupArgumentsLayout->addWidget(MakeGroupsCheck,      5, 0);
+  GroupArgumentsLayout->addWidget(SelectorWdg,          0, 0, 3, 2);
+  GroupArgumentsLayout->addWidget(PathGrp,              0, 2, 1, 2);
+  GroupArgumentsLayout->addWidget(BasePointGrp,         1, 2, 1, 2);
+  GroupArgumentsLayout->addWidget(AnglesGrp,            2, 2);
+  GroupArgumentsLayout->addWidget(ScalesGrp,            2, 3);
+  GroupArgumentsLayout->addWidget(myPreviewCheckBox,    3, 0);
+  GroupArgumentsLayout->addWidget(MakeGroupsCheck,      3, 1);
+  SelectorWdg->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
+  SelectorWdg->setMinimumWidth(320);
 
   /***************************************************************/
   // common buttons group box
@@ -688,7 +690,7 @@ void SMESHGUI_ExtrusionAlongPathDlg::onTextChange (const QString& theNewText)
         if (bOk) {
           const SMDS_MeshNode* n = aMesh->FindNode(ind);
           if (n) {
-            TColStd_MapOfInteger newIndices;
+            SVTK_TVtkIDsMap newIndices;
             newIndices.Add(n->GetID());
             mySelector->AddOrRemoveIndex( aPathActor->getIO(), newIndices, false );
             if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI ))
@@ -1147,7 +1149,7 @@ bool SMESHGUI_ExtrusionAlongPathDlg::isValuesValid()
   }
   else
   {
-    SMESH::long_array_var elems = mesh->GetNodeInverseElements( aNodeStart, SMESH::ALL );
+    SMESH::smIdType_array_var elems = mesh->GetNodeInverseElements( aNodeStart, SMESH::ALL );
     if ( elems->length() != 1 ||
          mesh->GetElementType( elems[0], true ) != SMESH::EDGE )
       return false;
index 5e7677a48c8cb7294341b3cd70b7b80b89ac2736..6b5d7358f22871028ac46c094d4ac39498e8306a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 3189a52c03ea17b5394767e1f66c896c02906e26..e62812954dc4882cae6f917ac950bdfed538767b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -289,12 +289,12 @@ void SMESHGUI_3TypesSelector::selectionIntoArgument()
     }
     else // get indices of selected elements
     {
-      TColStd_IndexedMapOfInteger aMapIndex;
+      SVTK_TIndexedMapOfVtkId aMapIndex;
       mySelector->GetIndex(IO,aMapIndex);
       int nbElements = aMapIndex.Extent();
       if ( nbElements > 0 )
       {
-        SMESH::long_array_var ids = new SMESH::long_array;
+        SMESH::smIdType_array_var ids = new SMESH::smIdType_array;
         ids->length( nbElements );
         for ( int i = 0; i < nbElements; ++i )
           aString += QString(" %1").arg( ids[ i ] = aMapIndex( i+1 ));
@@ -352,9 +352,9 @@ void SMESHGUI_3TypesSelector::onTextChange( const QString& theNewText )
       SMDSAbs_ElementType SMDSType = SMDSAbs_ElementType( iType+1 );
       const bool isNode = ( SMDSType == SMDSAbs_Node );
 
-      SMESH::long_array_var ids = new SMESH::long_array;
+      SMESH::smIdType_array_var ids = new SMESH::smIdType_array;
       ids->length( aListId.count() );
-      TColStd_MapOfInteger newIndices;
+      SVTK_TVtkIDsMap newIndices;
       for (int i = 0; i < aListId.count(); i++) {
         int id = aListId[ i ].toInt();
         bool validId = false;
@@ -392,7 +392,7 @@ void SMESHGUI_3TypesSelector::onTextChange( const QString& theNewText )
  */
 //================================================================================
 
-void SMESHGUI_3TypesSelector::addTmpIdSource( SMESH::long_array_var& ids, int iType, int index )
+void SMESHGUI_3TypesSelector::addTmpIdSource( SMESH::smIdType_array_var& ids, int iType, int index )
 {
   SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditor();
   SMESH::SMESH_IDSource_var idSrc =
@@ -766,38 +766,53 @@ SMESHGUI_ExtrusionDlg::SMESHGUI_ExtrusionDlg (SMESHGUI* theModule)
   AnglesGrpLayout->setRowMinimumHeight(1, 10);
   AnglesGrpLayout->setRowStretch(3, 10);
 
+  // Controls for advanced parameters
+  QGridLayout* AdvancedGrpLayout = new QGridLayout();
+  AdvancedGrpLayout->setSpacing(SPACING);
+
+  // layouting
+  AdvancedGrpLayout->addWidget(TextLabelDistance,      0, 0);
+  AdvancedGrpLayout->addWidget(TextLabelDx,            0, 2);
+  AdvancedGrpLayout->addWidget(SpinBox_Dx,             0, 3);
+  AdvancedGrpLayout->addWidget(TextLabelDy,            0, 4);
+  AdvancedGrpLayout->addWidget(SpinBox_Dy,             0, 5);
+  AdvancedGrpLayout->addWidget(TextLabelDz,            0, 6);
+  AdvancedGrpLayout->addWidget(SpinBox_Dz,             0, 7);
+  AdvancedGrpLayout->addWidget(TextLabelVector,        1, 0);
+  AdvancedGrpLayout->addWidget(SelectVectorButton,     1, 1);
+  AdvancedGrpLayout->addWidget(TextLabelVx,            1, 2);
+  AdvancedGrpLayout->addWidget(SpinBox_Vx,             1, 3);
+  AdvancedGrpLayout->addWidget(TextLabelVy,            1, 4);
+  AdvancedGrpLayout->addWidget(SpinBox_Vy,             1, 5);
+  AdvancedGrpLayout->addWidget(TextLabelVz,            1, 6);
+  AdvancedGrpLayout->addWidget(SpinBox_Vz,             1, 7);
+  AdvancedGrpLayout->addWidget(TextLabelDist,          2, 0);
+  AdvancedGrpLayout->addWidget(SpinBox_VDist,          2, 3);
+  AdvancedGrpLayout->addWidget(TextLabelNbSteps,       3, 0, 1, 3);
+  AdvancedGrpLayout->addWidget(SpinBox_NbSteps,        3, 3);
+  AdvancedGrpLayout->addWidget(ByAverageNormalCheck,   4, 0, 1, 4);
+  AdvancedGrpLayout->addWidget(UseInputElemsOnlyCheck, 4, 4, 1, 4);
+
+  // Controls for advanced parameters
+  QGroupBox* RbGrp = new QGroupBox();
+  QHBoxLayout* RBLayout = new QHBoxLayout(RbGrp);
+  RBLayout->setSpacing(SPACING); RBLayout->setMargin(MARGIN);
+  RBLayout->addWidget(ExtrMethod_RBut0);
+  RBLayout->addWidget(ExtrMethod_RBut1);
+  RBLayout->addWidget(ExtrMethod_RBut2);
+
   // layouting
-  GroupArgumentsLayout->addWidget(SelectorWdg,            0, 0, 1, 9);
-  GroupArgumentsLayout->addWidget(ExtrMethod_RBut0,       1, 0, 1, 3);
-  GroupArgumentsLayout->addWidget(ExtrMethod_RBut1,       1, 3, 1, 3);
-  GroupArgumentsLayout->addWidget(ExtrMethod_RBut2,       1, 6, 1, 3);
-  GroupArgumentsLayout->addWidget(TextLabelDistance,      2, 0);
-  GroupArgumentsLayout->addWidget(TextLabelDx,            2, 2);
-  GroupArgumentsLayout->addWidget(SpinBox_Dx,             2, 3);
-  GroupArgumentsLayout->addWidget(TextLabelDy,            2, 4);
-  GroupArgumentsLayout->addWidget(SpinBox_Dy,             2, 5);
-  GroupArgumentsLayout->addWidget(TextLabelDz,            2, 6);
-  GroupArgumentsLayout->addWidget(SpinBox_Dz,             2, 7);
-  GroupArgumentsLayout->addWidget(TextLabelVector,        3, 0);
-  GroupArgumentsLayout->addWidget(SelectVectorButton,     3, 1);
-  GroupArgumentsLayout->addWidget(TextLabelVx,            3, 2);
-  GroupArgumentsLayout->addWidget(SpinBox_Vx,             3, 3);
-  GroupArgumentsLayout->addWidget(TextLabelVy,            3, 4);
-  GroupArgumentsLayout->addWidget(SpinBox_Vy,             3, 5);
-  GroupArgumentsLayout->addWidget(TextLabelVz,            3, 6);
-  GroupArgumentsLayout->addWidget(SpinBox_Vz,             3, 7);
-  GroupArgumentsLayout->addWidget(TextLabelDist,          4, 0);
-  GroupArgumentsLayout->addWidget(SpinBox_VDist,          4, 3);
-  GroupArgumentsLayout->addWidget(TextLabelNbSteps,       5, 0, 1, 3);
-  GroupArgumentsLayout->addWidget(SpinBox_NbSteps,        5, 3);
-  GroupArgumentsLayout->addWidget(ByAverageNormalCheck,   6, 0, 1, 4);
-  GroupArgumentsLayout->addWidget(UseInputElemsOnlyCheck, 6, 4, 1, 4);
-  GroupArgumentsLayout->addWidget(BasePointGrp,           7, 0, 1, 9);
-  GroupArgumentsLayout->addWidget(ScalesGrp,              8, 0, 1, 4);
-  GroupArgumentsLayout->addWidget(AnglesGrp,              8, 5, 1, 4);
-  GroupArgumentsLayout->addWidget(myPreviewCheckBox,      9, 0, 1, 8);
-  GroupArgumentsLayout->addWidget(MakeGroupsCheck,        10,0, 1, 8);
-  GroupArgumentsLayout->addItem(new QSpacerItem(0, 0, QSizePolicy::Minimum, QSizePolicy::Expanding), 10, 0);
+  GroupArgumentsLayout->addWidget(RbGrp,                  0, 0, 1, 4);
+  GroupArgumentsLayout->addWidget(SelectorWdg,            1, 0, 3, 2);
+  GroupArgumentsLayout->addLayout(AdvancedGrpLayout,      1, 2, 1, 2);
+  GroupArgumentsLayout->addWidget(BasePointGrp,           2, 2, 1, 2);
+  GroupArgumentsLayout->addWidget(ScalesGrp,              3, 2, 1, 1);
+  GroupArgumentsLayout->addWidget(AnglesGrp,              3, 3, 1, 1);
+  GroupArgumentsLayout->addWidget(myPreviewCheckBox,      4, 0);
+  GroupArgumentsLayout->addWidget(MakeGroupsCheck,        4, 1);
+  GroupArgumentsLayout->setRowStretch(5, 10);
+  SelectorWdg->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
+  SelectorWdg->setMinimumWidth(320);
 
   /***************************************************************/
   GroupButtons = new QGroupBox(this);
@@ -1368,7 +1383,7 @@ void SMESHGUI_ExtrusionDlg::SelectionIntoArgument()
   if ( SelectVectorButton->isChecked() )
   {
     Handle(SALOME_InteractiveObject) IO = aList.First();
-    TColStd_IndexedMapOfInteger aMapIndex;
+    SVTK_TIndexedMapOfVtkId aMapIndex;
     mySelector->GetIndex(IO,aMapIndex);
     if ( aMapIndex.Extent() != 1 )
       return;
index f2be813ac214e5d6a5f91694b89554a5041f3dd6..df77ef9d918b079796664831562bc56c10bcebf2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -100,7 +100,7 @@ class SMESHGUI_EXPORT SMESHGUI_3TypesSelector : public QWidget
 
  private:
 
-  void                             addTmpIdSource( SMESH::long_array_var& ids,
+  void                             addTmpIdSource( SMESH::smIdType_array_var& ids,
                                                    int iType, int index);
 
   QGroupBox*                       myGroups   [3];
index 2dcac2e0c252aa6d3b1a80b33aab171a312916f3..ed1b50d2b13f6adf86bd7cab3f9c4c8b972eb5cf 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index f806667ae6bbbb31e11bc78586beb149016e7130..e28efdf2ee2c41d657ceb922da7ce84316581d1b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 598665a6ea9698f5db91cf089ccdd99835d7de56..ce92326a56aed4b1e9c14bb8eee9e5bbc951ff7c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 37e28256a6f088c3ced35864148b3b4552ba9298..497f446c2378e79799733312c2a54a3a3e2c2618 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 4b8dd982f9deb38ed4577689ece33c5d1005e1f4..1169933cbb4ed7ad63237dfafb1b82ee4d63f2d9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 5ba0240f1e60ecb34620f0193d5309e4d76ba6ba..cd7919c5b548207ccf27f3a23a841c50fdd992ba 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index b2a3785e846610cfe1fc4cb194817109dd526a62..39e5be0991f74177fb8031bcf61528eefa5ccec9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index c121a3e3ad9ce446e932dd0339444659ec7325b1..4e9ba78c53e63f3583344263566a9af872d51462 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index b9b27de547d715c09448cf5f00e0a773ba15ef30..0ccdd94b4f1f5916ae9a617b2a601b1cbcf63943 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -63,7 +63,7 @@ SMESHGUI_PredicateFilter::~SMESHGUI_PredicateFilter()
 // name    : SMESHGUI_PredicateFilter::IsValid
 // Purpose : Verify whether entry id satisfies to criterion of the filter
 //=======================================================================
-bool SMESHGUI_PredicateFilter::IsValid( const int theCellId ) const
+bool SMESHGUI_PredicateFilter::IsValid( const vtkIdType theCellId ) const
 {
   if ( myActor == 0 || myPred->_is_nil() )
     return false;
@@ -196,7 +196,7 @@ SMESHGUI_QuadrangleFilter::~SMESHGUI_QuadrangleFilter()
 // name    : SMESHGUI_QuadrangleFilter::IsValid
 // Purpose : Verify whether selected cell is quadrangle
 //=======================================================================
-bool SMESHGUI_QuadrangleFilter::IsValid( const int theCellId ) const
+bool SMESHGUI_QuadrangleFilter::IsValid( const vtkIdType theCellId ) const
 {
   if ( myActor == 0 )
     return false;
@@ -275,7 +275,7 @@ SMESHGUI_TriangleFilter::~SMESHGUI_TriangleFilter()
 // name    : SMESHGUI_TriangleFilter::IsValid
 // Purpose : Verify whether selected cell is triangle
 //=======================================================================
-bool SMESHGUI_TriangleFilter::IsValid( const int theCellId ) const
+bool SMESHGUI_TriangleFilter::IsValid( const vtkIdType theCellId ) const
 {
   if ( myActor == 0 )
     return false;
@@ -353,7 +353,7 @@ SMESHGUI_FacesFilter::~SMESHGUI_FacesFilter()
 // name    : SMESHGUI_FacesFilter::IsValid
 // Purpose : Verify whether selected cell is face
 //=======================================================================
-bool SMESHGUI_FacesFilter::IsValid( const int theCellId ) const
+bool SMESHGUI_FacesFilter::IsValid( const vtkIdType theCellId ) const
 {
   if ( myActor == 0 )
     return false;
@@ -430,7 +430,7 @@ SMESHGUI_VolumesFilter::~SMESHGUI_VolumesFilter()
 // name    : SMESHGUI_VolumesFilter::IsValid
 // Purpose : Verify whether selected cell is volume
 //=======================================================================
-bool SMESHGUI_VolumesFilter::IsValid( const int theCellId ) const
+bool SMESHGUI_VolumesFilter::IsValid( const vtkIdType theCellId ) const
 {
   if ( myActor == 0 || theCellId < 1 )
     return false;
@@ -503,7 +503,7 @@ SMESHGUI_VolumeShapeFilter::SMESHGUI_VolumeShapeFilter(const SMDSAbs_GeometryTyp
 // name    : SMESHGUI_VolumeShapeFilter::IsValid
 // Purpose : Verify whether selected cell is a volume of a certain shape
 //=======================================================================
-bool SMESHGUI_VolumeShapeFilter::IsValid( const int theCellId ) const
+bool SMESHGUI_VolumeShapeFilter::IsValid( const vtkIdType theCellId ) const
 {
   if ( myActor == 0 || theCellId < 1 )
     return false;
index 1a9ef31434c44bce7d1a2b6e0f419c41903b1076..d30ca443ba915ba4727b42c851643b9a3a2ca882 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -87,7 +87,7 @@ public:
   Standard_EXPORT SMESHGUI_PredicateFilter();
   Standard_EXPORT virtual ~SMESHGUI_PredicateFilter();
 
-  Standard_EXPORT virtual bool IsValid( const int ) const;
+  Standard_EXPORT virtual bool IsValid( const vtkIdType ) const;
   Standard_EXPORT virtual bool IsObjValid( const int ) const;
   Standard_EXPORT virtual int  GetId() const;
   Standard_EXPORT virtual bool IsNodeFilter() const;
@@ -115,7 +115,7 @@ public:
   Standard_EXPORT SMESHGUI_QuadrangleFilter();
   Standard_EXPORT virtual ~SMESHGUI_QuadrangleFilter();
 
-  Standard_EXPORT virtual bool IsValid( const int ) const;
+  Standard_EXPORT virtual bool IsValid( const vtkIdType ) const;
   Standard_EXPORT virtual bool IsObjValid( const int ) const;
   Standard_EXPORT virtual int  GetId() const;
   Standard_EXPORT virtual bool IsNodeFilter() const;
@@ -137,7 +137,7 @@ public:
   Standard_EXPORT SMESHGUI_TriangleFilter();
   Standard_EXPORT virtual ~SMESHGUI_TriangleFilter();
 
-  Standard_EXPORT virtual bool IsValid( const int ) const;
+  Standard_EXPORT virtual bool IsValid( const vtkIdType ) const;
   Standard_EXPORT virtual bool IsObjValid( const int ) const;
   Standard_EXPORT virtual int  GetId() const;
   Standard_EXPORT virtual bool IsNodeFilter() const;  
@@ -159,7 +159,7 @@ public:
   Standard_EXPORT SMESHGUI_FacesFilter();
   Standard_EXPORT virtual ~SMESHGUI_FacesFilter();
 
-  Standard_EXPORT virtual bool IsValid( const int ) const;
+  Standard_EXPORT virtual bool IsValid( const vtkIdType ) const;
   Standard_EXPORT virtual bool IsObjValid( const int ) const;
   Standard_EXPORT virtual int  GetId() const;
   Standard_EXPORT virtual bool IsNodeFilter() const;  
@@ -181,7 +181,7 @@ public:
   Standard_EXPORT SMESHGUI_VolumesFilter();
   Standard_EXPORT virtual ~SMESHGUI_VolumesFilter();
 
-  Standard_EXPORT virtual bool IsValid( const int ) const;
+  Standard_EXPORT virtual bool IsValid( const vtkIdType ) const;
   Standard_EXPORT virtual bool IsObjValid( const int ) const;
   Standard_EXPORT virtual int  GetId() const;
   Standard_EXPORT virtual bool IsNodeFilter() const;
@@ -203,7 +203,7 @@ class SMESHGUI_VolumeShapeFilter : public SMESHGUI_Filter
 public:
   Standard_EXPORT SMESHGUI_VolumeShapeFilter(const SMDSAbs_GeometryType shape);
 
-  Standard_EXPORT virtual bool IsValid( const int ) const;
+  Standard_EXPORT virtual bool IsValid( const vtkIdType ) const;
   Standard_EXPORT virtual bool IsObjValid( const int ) const;
   Standard_EXPORT virtual int  GetId() const;
   Standard_EXPORT virtual bool IsNodeFilter() const;
index 564e2f903a99ba341d26e597e8d9c1f871989de0..98439f06eb8ec44f0db59006c5218bd8fda6d8c7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -69,6 +69,7 @@
 // SALOME KERNEL includes
 #include <SALOMEDSClient_Study.hxx>
 #include <Basics_Utils.hxx>
+#include <smIdType.hxx>
 
 // OCCT includes
 #include <StdSelect_TypeOfFace.hxx>
@@ -1562,11 +1563,13 @@ void SMESHGUI_FilterTable::updateAdditionalWidget()
   bool isDbl = ( aCriterion == SMESH::FT_AspectRatio        ||
                  aCriterion == SMESH::FT_AspectRatio3D      ||
                  aCriterion == SMESH::FT_Warping            ||
+                 aCriterion == SMESH::FT_Warping3D          ||
                  aCriterion == SMESH::FT_MinimumAngle       ||
                  aCriterion == SMESH::FT_Taper              ||
                  aCriterion == SMESH::FT_Skew               ||
                  aCriterion == SMESH::FT_Area               ||
                  aCriterion == SMESH::FT_Volume3D           ||
+                 aCriterion == SMESH::FT_ScaledJacobian     ||
                  aCriterion == SMESH::FT_MaxElementLength2D ||
                  aCriterion == SMESH::FT_MaxElementLength3D ||
                  aCriterion == SMESH::FT_Length             ||
@@ -1604,6 +1607,7 @@ const char* SMESHGUI_FilterTable::getPrecision( const int aType )
   case SMESH::FT_Taper:
     retval = "parametric_precision"; break;
   case SMESH::FT_Warping:
+  case SMESH::FT_Warping3D:
   case SMESH::FT_MinimumAngle:
   case SMESH::FT_Skew:
   case SMESH::FT_CoplanarFaces:
@@ -1810,11 +1814,13 @@ void SMESHGUI_FilterTable::onCriterionChanged (const int row, const int /*col*/,
   case SMESH::FT_AspectRatio:
   case SMESH::FT_AspectRatio3D:
   case SMESH::FT_Warping:
+  case SMESH::FT_Warping3D:
   case SMESH::FT_MinimumAngle:
   case SMESH::FT_Taper:
   case SMESH::FT_Skew:
   case SMESH::FT_Area:
   case SMESH::FT_Volume3D:
+  case SMESH::FT_ScaledJacobian:
   case SMESH::FT_MaxElementLength2D:
   case SMESH::FT_MaxElementLength3D: anIsDoubleCriterion = true; break;
 
@@ -2267,6 +2273,7 @@ const QMap<int, QString>& SMESHGUI_FilterTable::getCriteria (const int theType)
     if (aCriteria.isEmpty())
     {
       aCriteria[ SMESH::FT_AspectRatio3D        ] = tr("ASPECT_RATIO_3D");
+      aCriteria[ SMESH::FT_Warping3D            ] = tr("WARPING_3D");
       aCriteria[ SMESH::FT_RangeOfIds           ] = tr("RANGE_OF_IDS");
       aCriteria[ SMESH::FT_BelongToMeshGroup    ] = tr("BELONG_TO_MESH_GROUP");
       aCriteria[ SMESH::FT_BelongToGeom         ] = tr("BELONG_TO_GEOM");
@@ -2283,6 +2290,7 @@ const QMap<int, QString>& SMESHGUI_FilterTable::getCriteria (const int theType)
       aCriteria[ SMESH::FT_EqualVolumes         ] = tr("EQUAL_VOLUME");
       aCriteria[ SMESH::FT_EntityType           ] = tr("ENTITY_TYPE");
       aCriteria[ SMESH::FT_ConnectedElements    ] = tr("CONNECTED_ELEMS");
+      aCriteria[ SMESH::FT_ScaledJacobian       ] = tr("SCALED_JACOBIAN");
     }
     return aCriteria;
   }
@@ -3005,13 +3013,13 @@ void SMESHGUI_FilterDlg::reject()
     SALOME_ListIO aList;
     mySelectionMgr->clearFilters();
     mySelectionMgr->clearSelected();
-    SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger anIter (myIObjects);
+    SALOME_DataMapIteratorOfIOMapOfVtk anIter (myIObjects);
     for ( ; anIter.More(); anIter.Next())
     {
       aList.Append(anIter.Key());
 
-      TColStd_MapOfInteger aResMap;
-      const TColStd_IndexedMapOfInteger& anIndMap = anIter.Value();
+      SVTK_TVtkIDsMap aResMap;
+      const SVTK_TIndexedMapOfVtkId& anIndMap = anIter.Value();
       for (int i = 1, n = anIndMap.Extent(); i <= n; i++)
         aResMap.Add(anIndMap(i));
 
@@ -3342,7 +3350,7 @@ void SMESHGUI_FilterDlg::SetSelection()
     const SALOME_ListIO& anObjs = mySelector->StoredIObjects(); 
     SALOME_ListIteratorOfListIO anIter (anObjs);
     for ( ; anIter.More(); anIter.Next()) {
-      TColStd_IndexedMapOfInteger aMap;
+      SVTK_TIndexedMapOfVtkId aMap;
       mySelector->GetIndex(anIter.Value(), aMap);
       myIObjects.Bind(anIter.Value(), aMap);
     }
@@ -3536,9 +3544,9 @@ void SMESHGUI_FilterDlg::filterSource (const int theType,
   {
     if (myMesh->_is_nil())
       return;
-    SMESH::long_array_var anIds = myFilter[ theType ]->GetElementsId(myMesh);
+    SMESH::smIdType_array_var anIds = myFilter[ theType ]->GetElementsId(myMesh);
     for (int i = 0, n = anIds->length(); i < n; i++)
-      theResIds.append(anIds[ i ]);
+      theResIds.append(FromSmIdType<int>(anIds[ i ]));
   }
   else if (aSourceId == Selection)
   {
@@ -3579,7 +3587,7 @@ void SMESHGUI_FilterDlg::filterSelectionSource (const int theType,
 
   // Create map of entities to be filtered
   TColStd_MapOfInteger aToBeFiltered;
-  SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger anIter(myIObjects);
+  SALOME_DataMapIteratorOfIOMapOfVtk anIter(myIObjects);
 
   for ( ; anIter.More(); anIter.Next())
   {
@@ -3589,10 +3597,10 @@ void SMESHGUI_FilterDlg::filterSelectionSource (const int theType,
     {
       if (aSubMesh->GetFather()->GetId() == myMesh->GetId())
       {
-        SMESH::long_array_var anIds =
+        SMESH::smIdType_array_var anIds =
           theType == SMESH::NODE ? aSubMesh->GetNodesId() : aSubMesh->GetElementsId();
         for (int i = 0, n = anIds->length(); i < n; i++)
-          aToBeFiltered.Add(anIds[ i ]);
+          aToBeFiltered.Add(FromSmIdType<int>(anIds[ i ]));
       }
     }
 
@@ -3603,9 +3611,9 @@ void SMESHGUI_FilterDlg::filterSelectionSource (const int theType,
     {
       if (aGroup->GetType() == theType && aGroup->GetMesh()->GetId() == myMesh->GetId())
       {
-        SMESH::long_array_var anIds = aGroup->GetListOfID();
+        SMESH::smIdType_array_var anIds = aGroup->GetListOfID();
         for (int i = 0, n = anIds->length(); i < n; i++)
-          aToBeFiltered.Add(anIds[ i ]);
+          aToBeFiltered.Add(FromSmIdType<int>(anIds[ i ]));
       }
     }
 
@@ -3613,7 +3621,7 @@ void SMESHGUI_FilterDlg::filterSelectionSource (const int theType,
     SMESH::SMESH_Mesh_var aMeshPtr = SMESH::IObjectToInterface<SMESH::SMESH_Mesh>(anIter.Key());
     if (!aMeshPtr->_is_nil() && aMeshPtr->GetId() == myMesh->GetId())
     {
-      const TColStd_IndexedMapOfInteger& aSelMap = anIter.Value();
+      const SVTK_TIndexedMapOfVtkId& aSelMap = anIter.Value();
 
       if (aSelMap.Extent() > 0)
       {
@@ -3646,7 +3654,7 @@ SMESH_Actor* SMESHGUI_FilterDlg::getActor()
   if ( meshActor && meshActor->GetVisibility() )
     return meshActor;
 
-  SALOME_DataMapIteratorOfDataMapOfIOMapOfInteger anIter(myIObjects);
+  SALOME_DataMapIteratorOfIOMapOfVtk anIter(myIObjects);
   for ( ; anIter.More(); anIter.Next())
   {
     Handle(SALOME_InteractiveObject) io = anIter.Key();
@@ -3706,7 +3714,7 @@ void SMESHGUI_FilterDlg::selectInViewer (const int theType, const QList<int>& th
   SMESH::RemoveFilter(aFilterId);
 
   // get vtk ids
-  TColStd_MapOfInteger aMap;
+  SVTK_TVtkIDsMap aMap;
   QList<int>::const_iterator anIter;
   for (anIter = theIds.begin(); anIter != theIds.end(); ++anIter) {
     aMap.Add(*anIter);
index 1240b7e72d8c063f718928004875d13c8bb66228..4ff5bf929bb33796dd6b1c29572d84f522b3d4b3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -39,6 +39,7 @@
 // SALOME GUI includes
 #include <SALOME_DataMapOfIOMapOfInteger.hxx>
 #include <SVTK_Selection.h>
+#include <SVTK_Hash.h>
 
 // IDL includes
 #include <SALOMEconfig.h>
@@ -59,6 +60,9 @@ class SMESHGUI_FilterLibraryDlg;
 class SMESH_Actor;
 class SVTK_Selector;
 
+typedef NCollection_DataMap<Handle(SALOME_InteractiveObject), SVTK_TIndexedMapOfVtkId> SALOME_DataMapOfIOMapOfVtk;
+typedef SALOME_DataMapOfIOMapOfVtk::Iterator SALOME_DataMapIteratorOfIOMapOfVtk;
+
 /*!
  *  Class       : SMESHGUI_FilterTable
  *  Description : Frame containing 
@@ -308,7 +312,7 @@ private:
   bool                      myDiffSourcesEnabled;
   QWidget*                  mySourceWg;
 
-  SALOME_DataMapOfIOMapOfInteger myIObjects;
+  SALOME_DataMapOfIOMapOfVtk     myIObjects;
   bool                           myIsSelectionChanged;
   QMap< int, SMESH::Filter_var > myFilter;
   QMap< int, bool >              myInsertState;
index d692e9ef71c97635bba05133ce3e6500b2298f5b..d22cbd373bf6958ecce6927c390d4086fc6ce2ac 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 08b93ede823a34469c6e58881581f16ce83dcda6..6156b014f2a7e1d280fa989eb59de3b0edeaec03 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 591ab46d195b451463a9fba0db25779086922bca..594ac9137f863ba8b056e950e161e58130f3d921 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 992ca94e32190a134cec9f4de560e59f5da72a5e..d71e3b4707976498f2b225bb26c73c6f2ff54614 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index aeaeb5bba50e21d79238a2d4faddda37e3c334e3..dfd43198d2036af8f18363955c2cc232127f999c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -361,7 +361,7 @@ void SMESHGUI_FindElemByPointOp::onElemSelected()
 
     QList<QListWidgetItem *> ids = myDlg->myFoundList->selectedItems();
     QList<QListWidgetItem*>::iterator id = ids.begin();
-    TColStd_MapOfInteger idMap;
+    SVTK_TVtkIDsMap idMap;
     for ( ; id != ids.end(); ++id )
       idMap.Add( (*id)->text().toInt() );
 
@@ -434,7 +434,7 @@ void SMESHGUI_FindElemByPointOp::onFind()
     if (aMeshEditor->_is_nil())
       return;
 
-    SMESH::long_array_var foundIds;
+    SMESH::smIdType_array_var foundIds;
     if ( aMesh->_is_equivalent( myMeshOrPart ) )
       foundIds =
         aMeshEditor->FindElementsByPoint( myDlg->myX->GetValue(),
index 0f3ff86d1e1fca916f8306a02542e3046479ac55..1f14f6d7880747c9c4dacc1a8f8abe628f0d8291 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index b366ff6f30114fc432b59c81c7eca743c72bfa80..6b9524458975aaf195e95ada39fb3ffb36ca83a0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 
 #include <QString>
 
+#include <TopExp.hxx>
+#include <TopExp_Explorer.hxx>
+#include <TopTools_IndexedMapOfShape.hxx>
+#include <TopoDS_Iterator.hxx>
+
 namespace SMESH
 {
   GEOM::GEOM_Gen_var GetGEOMGen( GEOM::GEOM_Object_ptr go )
@@ -244,4 +249,83 @@ namespace SMESH
   }
 
 
+  //================================================================================
+  /*!
+   * \brief Return type of shape contained in a group
+   */
+  //================================================================================
+
+  TopAbs_ShapeEnum _getGroupType(const TopoDS_Shape& group)
+  {
+    if ( group.ShapeType() != TopAbs_COMPOUND )
+      return group.ShapeType();
+
+    // iterate on a compound
+    TopoDS_Iterator it( group );
+    if ( it.More() )
+      return _getGroupType( it.Value() );
+
+    return TopAbs_SHAPE;
+  }
+
+
+  //================================================================================
+  /*!
+   * \brief Check if a subGeom contains sub-shapes of a mainGeom
+   */
+  //================================================================================
+
+  bool ContainsSubShape( GEOM::GEOM_Object_ptr mainGeom,
+                         GEOM::GEOM_Object_ptr subGeom, bool allowMainShape )
+  {
+    if ( CORBA::is_nil( mainGeom ) ||
+         CORBA::is_nil( subGeom ))
+      return false;
+
+    if (allowMainShape && mainGeom->IsSame(subGeom))
+      return true;
+
+    GEOM::GEOM_Gen_var geomGen = mainGeom->GetGen();
+    if ( geomGen->_is_nil() ) return false;
+
+    GEOM::GEOM_IGroupOperations_wrap op = geomGen->GetIGroupOperations();
+    if ( op->_is_nil() ) return false;
+
+    GEOM::GEOM_Object_var mainObj = op->GetMainShape( subGeom ); /* _var not _wrap as
+                                                                    mainObj already exists! */
+    while ( !mainObj->_is_nil() )
+    {
+      CORBA::String_var entry1 = mainObj->GetEntry();
+      CORBA::String_var entry2 = mainGeom->GetEntry();
+      if ( std::string( entry1.in() ) == entry2.in() )
+        return true;
+      mainObj = op->GetMainShape( mainObj );
+    }
+    if ( subGeom->GetShapeType() == GEOM::COMPOUND )
+    {
+      // is subGeom a compound of sub-shapes?
+      GEOM::GEOM_IShapesOperations_wrap sop = geomGen->GetIShapesOperations();
+      if ( sop->_is_nil() ) return false;
+      GEOM::ListOfLong_var ids = sop->GetAllSubShapesIDs( subGeom,
+                                                          GEOM::SHAPE,/*sorted=*/false);
+      if ( ids->length() > 0 )
+      {
+        GEOM_Client geomClient;
+        TopoDS_Shape  subShape = geomClient.GetShape( geomGen, subGeom );
+        TopoDS_Shape mainShape = geomClient.GetShape( geomGen, mainGeom );
+        if ( subShape.IsNull() || mainShape.IsNull() )
+          return false;
+
+        TopAbs_ShapeEnum subType = _getGroupType( subShape );
+        TopTools_IndexedMapOfShape subMap;
+        TopExp::MapShapes( subShape, subType, subMap );
+        for ( TopExp_Explorer exp( mainShape, subType ); exp.More(); exp.Next() )
+          if ( subMap.Contains( exp.Current() ))
+            return true;
+
+      }
+    }
+    return false;
+  }
+
 } // end of namespace SMESH
index e8b9b6e1fdeca80377849682de2096ae9b77f229..2278b64f8ad3b2b187da84924a2ca78a424936ea 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -59,6 +59,10 @@ namespace SMESH
 
   SMESHGUI_EXPORT bool GetGeomEntries( Handle(SALOME_InteractiveObject)& hypIO,
                                        QString& subGeom, QString& meshGeom);
+
+  SMESHGUI_EXPORT bool ContainsSubShape( GEOM::GEOM_Object_ptr mainShape,
+                                         GEOM::GEOM_Object_ptr subShape,
+                                         bool allowMainShape = true );
 }
 
 #endif // SMESHGUI_GEOMGENUTILS_H
index d3438261aa117bb9d517a684701a8094ece2bec7..018c75c2196fe3c1c88feaf79018e2adfa00a635 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -668,7 +668,7 @@ void SMESHGUI_GroupDlg::init (SMESH::SMESH_GroupBase_ptr theGroup,
 
     myIdList.clear();
     if (!theGroup->IsEmpty()) {
-      SMESH::long_array_var anElements = theGroup->GetListOfID();
+      SMESH::smIdType_array_var anElements = theGroup->GetListOfID();
       int k = anElements->length();
       for (int i = 0; i < k; i++) {
         myIdList.append(anElements[i]);
@@ -1003,7 +1003,7 @@ bool SMESHGUI_GroupDlg::onApply()
         }
         else
         {
-          SMESH::long_array_var anIdList = new SMESH::long_array;
+          SMESH::smIdType_array_var anIdList = new SMESH::smIdType_array;
           int i, k = myElements->count();
           anIdList->length(k);
           for (i = 0; i < k; i++) {
@@ -1037,7 +1037,7 @@ bool SMESHGUI_GroupDlg::onApply()
             myIdList.removeAt(idx);
         }
         if (!aAddList.empty()) {
-          SMESH::long_array_var anIdList = new SMESH::long_array;
+          SMESH::smIdType_array_var anIdList = new SMESH::smIdType_array;
           int added = aAddList.count();
           anIdList->length(added);
           for (i = 0; i < added; i++)
@@ -1045,7 +1045,7 @@ bool SMESHGUI_GroupDlg::onApply()
           myGroup->Add(anIdList.inout());
         }
         if (!myIdList.empty()) {
-          SMESH::long_array_var anIdList = new SMESH::long_array;
+          SMESH::smIdType_array_var anIdList = new SMESH::smIdType_array;
           int removed = myIdList.count();
           anIdList->length(removed);
           for (i = 0; i < removed; i++)
@@ -1263,7 +1263,7 @@ void SMESHGUI_GroupDlg::onListSelectionChanged()
 
   if (myCurrentLineEdit == 0) {
     mySelectionMgr->clearSelected();
-    TColStd_MapOfInteger aIndexes;
+    SVTK_TVtkIDsMap aIndexes;
     QList<QListWidgetItem*> selItems = myElements->selectedItems();
     QListWidgetItem* anItem;
     foreach(anItem, selItems) aIndexes.Add(anItem->text().toInt());
@@ -1405,72 +1405,23 @@ void SMESHGUI_GroupDlg::onObjectSelectionChanged()
     else if (myCurrentLineEdit == myGeomGroupLine)
     {
       myGeomObjects = new GEOM::ListOfGO();
+      myGeomObjects->length( aNbSel );
 
-      // The mesh SObject
-      _PTR(SObject) aMeshSO = SMESH::FindSObject(myMesh);
-
-      if (aNbSel == 0 || !aMeshSO)
+      if ( aNbSel == 0 || myMesh->_is_nil() )
       {
-        myGeomObjects->length(0);
         updateButtons();
         myIsBusy = false;
         return;
       }
 
-      myGeomObjects->length(aNbSel);
-
-      GEOM::GEOM_Object_var aGeomGroup;
+      GEOM::GEOM_Object_var mainGeom = myMesh->GetShapeToMesh();
       int i = 0;
-
-      SALOME_ListIteratorOfListIO anIt (aList);
-      for (; anIt.More(); anIt.Next())
+      for ( SALOME_ListIteratorOfListIO anIt( aList ); anIt.More(); anIt.Next() )
       {
-        CORBA::Object_var aGroupObj = SMESH::IObjectToObject(anIt.Value());
-        if (CORBA::is_nil(aGroupObj))
-          continue;
-        // Check if the object is a geometry group
-        aGeomGroup = GEOM::GEOM_Object::_narrow(aGroupObj);
-        if (CORBA::is_nil(aGeomGroup))
-          continue;
-
         // Check if group constructed on the same shape as a mesh or on its child
-
-        // The main shape of the group
-        GEOM::GEOM_Object_var aGroupMainShape;
-        if (aGeomGroup->GetType() == 37)
-        {
-          GEOM::GEOM_IGroupOperations_wrap anOp =
-            SMESH::GetGEOMGen( aGeomGroup )->GetIGroupOperations();
-          aGroupMainShape = anOp->GetMainShape( aGeomGroup );
-          // aGroupMainShape is an existing servant => GEOM_Object_var not GEOM_Object_wrap
-        }
-        else
-        {
-          aGroupMainShape = aGeomGroup;
-          aGroupMainShape->Register();
-        }
-        CORBA::String_var entry = aGroupMainShape->GetStudyEntry();
-        _PTR(SObject) aGroupMainShapeSO =
-          SMESH::getStudy()->FindObjectID( entry.in() );
-
-        _PTR(SObject) anObj, aRef;
-        bool isRefOrSubShape = false;
-        if (aMeshSO->FindSubObject(1, anObj) &&  anObj->ReferencedObject(aRef)) {
-          if (aRef->GetID() == aGroupMainShapeSO->GetID()) {
-            isRefOrSubShape = true;
-          } else {
-            _PTR(SObject) aFather = aGroupMainShapeSO->GetFather();
-            _PTR(SComponent) aComponent = aGroupMainShapeSO->GetFatherComponent();
-            while (!isRefOrSubShape && aFather->GetID() != aComponent->GetID()) {
-              if (aRef->GetID() == aFather->GetID())
-                isRefOrSubShape = true;
-              else
-                aFather = aFather->GetFather();
-            }
-          }
-        }
-        if (isRefOrSubShape)
-          myGeomObjects[i++] = aGeomGroup;
+        GEOM::GEOM_Object_var geomGroup = SMESH::GetGeom( anIt.Value() );
+        if ( SMESH::ContainsSubShape( mainGeom, geomGroup ))
+          myGeomObjects[ i++ ] = geomGroup;
       }
 
       myGeomObjects->length(i);
@@ -1956,7 +1907,7 @@ void SMESHGUI_GroupDlg::onAdd()
         // check if mesh is the same
         if (aSubMesh->GetFather()->GetId() == myMesh->GetId()) {
           try {
-            SMESH::long_array_var anElements = aSubMesh->GetElementsByType(aType);
+            SMESH::smIdType_array_var anElements = aSubMesh->GetElementsByType(aType);
             int k = anElements->length();
             for (int i = 0; i < k; i++) {
               QString aText = QString::number(anElements[i]);
@@ -2004,7 +1955,7 @@ void SMESHGUI_GroupDlg::onAdd()
       if (!aGroup->_is_nil()) {
         // check if mesh is the same
         if (aGroup->GetType() == aType && aGroup->GetMesh()->GetId() == myMesh->GetId()) {
-          SMESH::long_array_var anElements = aGroup->GetListOfID();
+          SMESH::smIdType_array_var anElements = aGroup->GetListOfID();
           int k = anElements->length();
           for (int i = 0; i < k; i++) {
             QString aText = QString::number(anElements[i]);
@@ -2062,7 +2013,7 @@ void SMESHGUI_GroupDlg::onAdd()
       aBelongToGeom->SetElementType(aType);
       aFilter->SetPredicate(aBelongToGeom);
 
-      SMESH::long_array_var anElements = aFilter->GetElementsId(myMesh);
+      SMESH::smIdType_array_var anElements = aFilter->GetElementsId(myMesh);
 
       int k = anElements->length();
       for (int i = 0; i < k; i++) {
@@ -2143,7 +2094,7 @@ void SMESHGUI_GroupDlg::onRemove()
           if (aSubMesh->GetFather()->GetId() == myMesh->GetId()) {
             if (aType == SMESH::NODE) {
               try {
-                SMESH::long_array_var anElements = aSubMesh->GetNodesId();
+                SMESH::smIdType_array_var anElements = aSubMesh->GetNodesId();
                 int k = anElements->length();
                 for (int i = 0; i < k; i++) {
                   QList<QListWidgetItem*> found = 
@@ -2158,7 +2109,7 @@ void SMESHGUI_GroupDlg::onRemove()
             }
             else {
               try {
-                SMESH::long_array_var anElements = aSubMesh->GetElementsId();
+                SMESH::smIdType_array_var anElements = aSubMesh->GetElementsId();
                 int k = anElements->length();
                 for (int i = 0; i < k; i++) {
                   QList<QListWidgetItem*> found = 
@@ -2185,7 +2136,7 @@ void SMESHGUI_GroupDlg::onRemove()
         if (!aGroup->_is_nil()) {
           // check if mesh is the same
           if (aGroup->GetType() == aType && aGroup->GetMesh()->GetId() == myMesh->GetId()) {
-            SMESH::long_array_var anElements = aGroup->GetListOfID();
+            SMESH::smIdType_array_var anElements = aGroup->GetListOfID();
             int k = anElements->length();
             for (int i = 0; i < k; i++) {
               QList<QListWidgetItem*> found = 
@@ -2213,15 +2164,19 @@ void SMESHGUI_GroupDlg::onSort()
   // PAL5412: sorts items in ascending by "string" value
   // myElements->sort(true);
   // myElements->update();
-  int i, k = myElements->count();
+  vtkIdType i, k = myElements->count();
   if (k > 0) {
     myIsBusy = true;
-    QList<int> aSelected;
-    std::vector<int> anArray(k);
+    QList<vtkIdType> aSelected;
+    std::vector<vtkIdType> anArray(k);
     //    QMemArray<int> anArray(k);
     // fill the array
     for (i = 0; i < k; i++) {
-      int id = myElements->item(i)->text().toInt();
+      vtkIdType id;
+      if (sizeof(vtkIdType)==8)
+        id = myElements->item(i)->text().toLongLong();
+      else
+        id = myElements->item(i)->text().toInt();
       anArray[i] = id;
       if (myElements->item(i)->isSelected())
         aSelected.append(id);
index 9b9f905aaecea9e47852b18934064e4740e8fff3..6a5fd6e5f81d45405449b9924d735a88a47d903a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -178,7 +178,7 @@ private:
   QPushButton*                  myAddBtn;
   QPushButton*                  myRemoveBtn;
   QPushButton*                  mySortBtn;
-  
+
   QGroupBox*                    mySelectBox;
   QCheckBox*                    mySelectSubMesh;
   QPushButton*                  mySubMeshBtn;
@@ -186,9 +186,9 @@ private:
   QCheckBox*                    mySelectGroup;
   QPushButton*                  myGroupBtn;
   QLineEdit*                    myGroupLine;
-  
+
   QtxColorButton*               myColorBtn;
-  
+
   QCheckBox*                    mySelectGeomGroup;
   QToolButton*                  myGeomGroupBtn;
   QLineEdit*                    myGeomGroupLine;
@@ -198,9 +198,9 @@ private:
   QPushButton*                  myApplyBtn;
   QPushButton*                  myCloseBtn;
   QPushButton*                  myHelpBtn;
-  
+
   SMESHGUI_ShapeByMeshOp*       myShapeByMeshOp;
-  
+
   SMESH::SMESH_Mesh_var         myMesh;
   QList<SMESH_Actor*>           myActorsList;
   SMESH::SMESH_Group_var        myGroup;
@@ -209,22 +209,19 @@ private:
   SMESH::Filter_var             myFilter;
   QList<int>                    myIdList;
   GEOM::ListOfGO_var            myGeomObjects;
-  
+
   int                           mySelectionMode;
-  //Handle(SMESH_TypeFilter)      myMeshFilter;
-  //Handle(SMESH_TypeFilter)      mySubMeshFilter;
-  //Handle(SMESH_TypeFilter)      myGroupFilter;
   SUIT_SelectionFilter*         myMeshFilter;
   SMESH_LogicalFilter*          mySubMeshFilter;
   SMESH_LogicalFilter*          myGroupFilter;
   SUIT_SelectionFilter*         myGeomFilter;
-  
+
   SMESHGUI_FilterDlg*           myFilterDlg;
-  
+
   bool                          myCreate, myIsBusy;
-  
+
   QString                       myHelpFileName;
-  
+
   QMap<QAction*, int>           myActions;
 
   bool                          myNameChanged; //added by skl for IPAL19574
index ed5674bfe9708d395bcf7b0cfd24bd5ded8c0f3d..746adb9941ca9dc3e280161a1dcfc92d60b275bd 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -463,29 +463,23 @@ void SMESHGUI_GroupOnShapeOp::selectionDone()
     // study
     if (_PTR(Study) aStudy = SMESH::getStudy()) {
       // mesh
-      if (_PTR(SObject)  meshSO = aStudy->FindObjectID( myMeshID.toUtf8().data() )) {
+      if (_PTR(SObject) meshSO = aStudy->FindObjectID( myMeshID.toUtf8().data() ))
+      {
         // shape to mesh
-        _PTR(SObject) anObj, shapeToMesh;
-        if (meshSO->FindSubObject(1, anObj) && anObj->ReferencedObject(shapeToMesh)) {
-          // loop on selected
-          QStringList::iterator name = names.begin(), id = ids.begin(), idEnd = ids.end();
-          for (; id != idEnd; ++id, ++name ) {
-            // shape SO
-            if (_PTR(SObject) shapeSO = aStudy->FindObjectID( id->toUtf8().data() )) {
-            // check if shape SO is a child of shape to mesh 
-              while ( shapeSO && shapeSO->GetID() != shapeToMesh->GetID() )
-                if  ( shapeSO->Depth() < 2 )
-                  shapeSO.reset();
-                else
-                  shapeSO = shapeSO->GetFather();
-              if ( shapeSO ) {
-                //printf( "selectionDone() %s %s\n", (*id).latin1(), (*name).latin1() );
-                if ( !goodIds.contains( *id )) {
-                  goodIds.append( *id );
-                  goodNames.append( *name );
-                }
-              }
-            }
+        GEOM::GEOM_Object_var mainGeom = SMESH::GetGeom( meshSO );
+        // loop on selected
+        QStringList::iterator name = names.begin(), id = ids.begin(), idEnd = ids.end();
+        for (; id != idEnd; ++id, ++name )
+        {
+          if ( goodIds.contains( *id ))
+            continue;
+          // shape SO
+          _PTR(SObject) shapeSO = aStudy->FindObjectID( id->toUtf8().data() );
+          GEOM::GEOM_Object_var subGeom = SMESH::GetGeom( shapeSO );
+          if ( SMESH::ContainsSubShape( mainGeom, subGeom ))
+          {
+            goodIds.append( *id );
+            goodNames.append( *name );
           }
         }
       }
index df7299aa5ad4abf6c78ec67de553fef6d30c25be..1a734b2cd43ac69a7cc5518b02ee989206fd07a8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -58,27 +58,15 @@ protected:
   virtual void                  startOperation();
   virtual void                  selectionDone();
   virtual SUIT_SelectionFilter* createFilter( const int ) const;
-  //virtual bool                  isValid( SUIT_Operation* ) const;
 
 private slots:
 
     bool                        onApply();
     void                        onButtonClick();
 
-
-//     void                        onSelectColor();
-
-
 private:
 
     void                        init();
-//     void                        setGroupColor( const SALOMEDS::Color& );
-//     SALOMEDS::Color             getGroupColor() const;
-
-//     void                        setGroupQColor( const QColor& );
-//     QColor                      getGroupQColor() const;
-
-//     void                        setDefaultGroupColor();
 
 private:
 
@@ -86,7 +74,6 @@ private:
 
   QString                       myMeshID;
   QStringList                   myElemGeoIDs, myNodeGeoIDs;
-  //GEOM::ListOfGO_var            myElemGObj;
 };
 
 class SMESHGUI_EXPORT SMESHGUI_GroupOnShapeDlg : public SMESHGUI_Dialog
@@ -104,22 +91,14 @@ public slots:
 
 private:
 
-  //QLineEdit*                    myGrpNameLine;
-
   QPushButton*                  myMeshBtn;
   QLineEdit*                    myMeshLine;
 
   QPushButton*                  myElemGeomBtn;
-  QListWidget*                     myElemGeomList;
+  QListWidget*                  myElemGeomList;
 
   QPushButton*                  myNodeGeomBtn;
-  QListWidget*                     myNodeGeomList;
-
-//   QPushButton*                  myColorBtn;
-
-//   bool                          myCreate, myIsBusy;
-
-//   QString                       myHelpFileName;
+  QListWidget*                  myNodeGeomList;
 
   friend class SMESHGUI_GroupOnShapeOp;
 };
index 2c3893bcbb1212d4a1a4ce0b2d24615cc1154f2b..1b6c9ba4caae01e964a206a1506711a910ae877e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 8b2e49032f1b5cebda3b3afe0a3ff41ae383062c..e1c2d023a111cd8a4acbc06b934804b1094be2a6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 3629c1701631757604f92b3b6cdd44843ce624c7..022eb68c7dd931c4dfdd5fcbfd658086b82f3f98 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index aa753dd4fc6c0cc2135c2d3b3cfe5e0cbfa733c0..73aae1c98560aaa644a46469da72c6a455e9b512 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
diff --git a/src/SMESHGUI/SMESHGUI_HomardAdaptDlg.cxx b/src/SMESHGUI/SMESHGUI_HomardAdaptDlg.cxx
new file mode 100644 (file)
index 0000000..d56527d
--- /dev/null
@@ -0,0 +1,1213 @@
+// Copyright (C) 2011-2024  CEA, EDF
+//
+// 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 "SMESHGUI_HomardAdaptDlg.h"
+
+#include "SMESHGUI.h"
+#include "SMESHGUI_HomardBoundaryDlg.h"
+#include "SMESHGUI_HomardUtils.h"
+#include "SMESHGUI_Utils.h"
+#include "SMESHGUI_VTKUtils.h"
+#include "SMESHGUI_MeshUtils.h"
+#include "SMESH_TryCatch.hxx"
+
+#include <SalomeApp_Tools.h>
+#include <SalomeApp_Module.h>
+#include <SalomeApp_Application.h>
+#include <LightApp_SelectionMgr.h>
+#include <SUIT_MessageBox.h>
+#include <SUIT_OverrideCursor.h>
+#include <SUIT_FileDlg.h>
+#include <SUIT_Desktop.h>
+#include <SUIT_Session.h>
+#include <SVTK_ViewWindow.h>
+
+#include <QFileDialog>
+#include <QMessageBox>
+#include <QButtonGroup>
+
+#include <utilities.h>
+
+#ifdef WIN32
+#include <direct.h>
+#endif
+
+using namespace std;
+
+// La gestion des repertoires
+#ifndef CHDIR
+  #ifdef WIN32
+    #define CHDIR _chdir
+  #else
+    #define CHDIR chdir
+  #endif
+#endif
+
+const int SPACING = 6;            // layout spacing
+const int MARGIN  = 9;            // layout margin
+
+//================================================================================
+/*!
+ * \brief Constructor
+ */
+//================================================================================
+SMESHGUI_HomardAdaptDlg::SMESHGUI_HomardAdaptDlg(SMESHHOMARD::HOMARD_Gen_ptr myHomardGen0)
+  : QDialog(SMESHGUI::desktop())
+{
+  MESSAGE("Debut du constructeur de SMESHGUI_HomardAdaptDlg");
+  myHomardGen = SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen0);
+  //myHomardGen = SMESHGUI::GetSMESHGen()->CreateHOMARD_ADAPT();
+  myHomardGen->Register();
+
+  setModal(false);
+  setAttribute( Qt::WA_DeleteOnClose, true );
+  setWindowTitle( tr( "ADAPT_WITH_HOMARD" ) );
+  setSizeGripEnabled( true );
+
+  QTabWidget* myTabWidget = new QTabWidget( this );
+
+  // Arguments
+  myArgs = new SMESHGUI_HomardAdaptArguments(myTabWidget);
+
+  // Advanced options
+  myAdvOpt = new SMESHGUI_HomardAdaptAdvanced(myTabWidget);
+
+  myTabWidget->addTab( myArgs, tr( "Args" ) );
+  myTabWidget->addTab( myAdvOpt, tr( "ADVOP" ) );
+
+  myAdvOpt->logGroupBox               ->setTitle(tr( "LOG_GROUP_TITLE" ));
+  myAdvOpt->workingDirectoryLabel     ->setText (tr( "WORKING_DIR" ));
+  myAdvOpt->workingDirectoryPushButton->setText (tr( "SELECT_DIR" ));
+  myAdvOpt->verboseLevelLabel         ->setText (tr( "VERBOSE_LEVEL" ));
+  myAdvOpt->logInFileCheck            ->setText (tr( "LOG_IN_FILE" ));
+  myAdvOpt->removeLogOnSuccessCheck   ->setText (tr( "REMOVE_LOG_ON_SUCCESS" ));
+  myAdvOpt->keepWorkingFilesCheck     ->setText (tr( "KEEP_WORKING_FILES" ));
+
+  //myAdvOpt->logInFileCheck->setChecked(true);
+  //myAdvOpt->removeLogOnSuccessCheck->setChecked(false);
+
+  // Working directory
+  QString aWorkingDir = QDir::tempPath();
+  char *aTmp_dir = getenv("SALOME_TMP_DIR");
+  if (aTmp_dir != NULL) {
+    QDir aTmpDir (aTmp_dir);
+    if (aTmpDir.exists()) {
+      aWorkingDir = aTmpDir.absolutePath();
+    }
+  }
+  myAdvOpt->workingDirectoryLineEdit->setText(aWorkingDir);
+
+  // Out med file and/or mesh publication
+  myArgs->myOutMedFileChk->setChecked(true);
+  myArgs->myOutPublishChk->setChecked(true);
+
+  // buttons
+  QHBoxLayout* btnLayout = new QHBoxLayout;
+  btnLayout->setSpacing( 6 );
+  btnLayout->setMargin( 0 );
+
+  buttonOk = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), this);
+  buttonOk->setAutoDefault(false);
+  btnLayout->addWidget(buttonOk);
+  btnLayout->addStretch( 10 );
+
+  buttonApply = new QPushButton(tr("SMESH_BUT_APPLY"), this);
+  buttonApply->setAutoDefault(false);
+  btnLayout->addWidget(buttonApply);
+  btnLayout->addStretch( 10 );
+
+  buttonCancel = new QPushButton(tr( "SMESH_BUT_CANCEL" ), this);
+  buttonCancel->setAutoDefault(false);
+  btnLayout->addWidget(buttonCancel);
+  btnLayout->addStretch( 10 );
+
+  buttonHelp = new QPushButton(tr( "SMESH_BUT_HELP" ), this);
+  buttonHelp->setAutoDefault(false);
+  btnLayout->addWidget(buttonHelp);
+
+  // dialog layout
+  QVBoxLayout* l = new QVBoxLayout ( this );
+  l->setMargin( 9 );
+  l->setSpacing( 6 );
+  l->addWidget( myTabWidget );
+  l->addStretch();
+  l->addLayout( btnLayout );
+
+  // dialog name and size
+  resize(600, 1000);
+  QSizePolicy sizePolicy(QSizePolicy::Preferred, QSizePolicy::Preferred);
+  sizePolicy.setHorizontalStretch(0);
+  sizePolicy.setVerticalStretch(0);
+  sizePolicy.setHeightForWidth(this->sizePolicy().hasHeightForWidth());
+  setSizePolicy(sizePolicy);
+  setMinimumSize(QSize(500, 320));
+  setSizeIncrement(QSize(1, 1));
+  setBaseSize(QSize(600, 600));
+  setAutoFillBackground(true);
+
+  SetBoundaryNo();
+  InitConnect();
+
+  myArgs->GBBoundaryC->setVisible(0);
+  myArgs->GBBoundaryN->setVisible(0);
+  myArgs->GBBoundaryA->setVisible(0);
+  myArgs->GBBoundaryD->setVisible(0);
+
+  adjustSize();
+
+  //MESSAGE("Fin du constructeur de SMESHGUI_HomardAdaptDlg");
+}
+
+//=================================================================================
+// function : ~SMESHGUI_HomardAdaptDlg()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+SMESHGUI_HomardAdaptDlg::~SMESHGUI_HomardAdaptDlg()
+{
+  // no need to delete child widgets, Qt does it all for us
+  myHomardGen->DeleteCase();
+}
+
+//=================================================================================
+// function : InitConnect
+// purpose  : 
+//=================================================================================
+void SMESHGUI_HomardAdaptDlg::InitConnect()
+{
+  connect( myArgs->mySelectInMedFileButton, SIGNAL(pressed()), this, SLOT(SetFileName()));
+
+  connect( myArgs->RBBoundaryNo,      SIGNAL(clicked()), this, SLOT(SetBoundaryNo()));
+  connect( myArgs->RBBoundaryCAO,     SIGNAL(clicked()), this, SLOT(SetBoundaryCAO()));
+  connect( myArgs->RBBoundaryNonCAO,  SIGNAL(clicked()), this, SLOT(SetBoundaryNonCAO()));
+
+  connect( myArgs->PBBoundaryCAONew,  SIGNAL(pressed()), this, SLOT(PushBoundaryCAONew()));
+  connect( myArgs->PBBoundaryCAOEdit, SIGNAL(pressed()), this, SLOT(PushBoundaryCAOEdit()) );
+  connect( myArgs->PBBoundaryCAOHelp, SIGNAL(pressed()), this, SLOT(PushBoundaryCAOHelp()) );
+  connect( myArgs->CBBoundaryD,       SIGNAL(stateChanged(int)), this, SLOT(SetBoundaryD()));
+  connect( myArgs->PBBoundaryDiNew,   SIGNAL(pressed()), this, SLOT(PushBoundaryDiNew()));
+  connect( myArgs->PBBoundaryDiEdit,  SIGNAL(pressed()), this, SLOT(PushBoundaryDiEdit()) );
+  connect( myArgs->PBBoundaryDiHelp,  SIGNAL(pressed()), this, SLOT(PushBoundaryDiHelp()) );
+  connect( myArgs->CBBoundaryA,       SIGNAL(stateChanged(int)), this, SLOT(SetBoundaryA()));
+  connect( myArgs->PBBoundaryAnNew,   SIGNAL(pressed()), this, SLOT(PushBoundaryAnNew()));
+  connect( myArgs->PBBoundaryAnEdit,  SIGNAL(pressed()), this, SLOT(PushBoundaryAnEdit()) );
+  connect( myArgs->PBBoundaryAnHelp,  SIGNAL(pressed()), this, SLOT(PushBoundaryAnHelp()) );
+
+  connect( buttonOk,       SIGNAL(pressed()), this, SLOT(PushOnOK()));
+  connect( buttonApply,    SIGNAL(pressed()), this, SLOT(PushOnApply()));
+  connect( buttonCancel,   SIGNAL(pressed()), this, SLOT(close()));
+  connect( buttonHelp,     SIGNAL(pressed()), this, SLOT(PushOnHelp()));
+
+  connect(myArgs, SIGNAL(updateSelection()), this, SLOT(updateSelection()));
+}
+
+//=================================================================================
+// function : InitBoundarys
+// purpose  : Initialisation des menus avec les frontieres deja enregistrees
+//=================================================================================
+void SMESHGUI_HomardAdaptDlg::InitBoundarys()
+{
+  MESSAGE("InitBoundarys");
+  //myArgs->TWBoundary->clearContents();
+  //myArgs->TWBoundary->clear();
+  // Pour les frontieres analytiques : la colonne des groupes
+  SMESHHOMARD::ListGroupType_var _listeGroupesCas = myCase->GetGroups();
+  QTableWidgetItem *__colItem = new QTableWidgetItem();
+  __colItem->setText(tr(""));
+  myArgs->TWBoundary->setHorizontalHeaderItem(0, __colItem);
+  for ( int i = 0; i < (int)_listeGroupesCas->length(); i++ ) {
+    myArgs->TWBoundary->insertRow(i);
+    myArgs->TWBoundary->setItem( i, 0, new QTableWidgetItem(QString((_listeGroupesCas)[i]).trimmed()));
+    myArgs->TWBoundary->item( i, 0 )->setFlags(Qt::ItemIsEnabled |Qt::ItemIsSelectable );
+  }
+  // Pour les frontieres CAO : la liste a saisir
+  // Pour les frontieres discretes : la liste a saisir
+  // Pour les frontieres analytiques : les colonnes de chaque frontiere
+  SMESHHOMARD::HOMARD_Boundary_var myBoundary ;
+  SMESHHOMARD::listeBoundarys_var  mesBoundarys = myHomardGen->GetAllBoundarysName();
+  //MESSAGE("Nombre de frontieres enregistrees : "<<mesBoundarys->length());
+  for (int i=0; i < (int)mesBoundarys->length(); i++) {
+    myBoundary = myHomardGen->GetBoundary(mesBoundarys[i]);
+    int type_obj = myBoundary->GetType() ;
+    if ( type_obj==-1 )     { myArgs->CBBoundaryCAO->addItem(QString(mesBoundarys[i])); }
+    else if ( type_obj==0 ) { myArgs->CBBoundaryDi->addItem(QString(mesBoundarys[i])); }
+    else                    { AddBoundaryAn(QString(mesBoundarys[i])); }
+  }
+  // Ajustement
+  myArgs->TWBoundary->resizeColumnsToContents();
+  myArgs->TWBoundary->resizeRowsToContents();
+  myArgs->TWBoundary->clearSelection();
+}
+
+//=================================================================================
+// function : CheckCase
+// purpose  : 
+//=================================================================================
+bool SMESHGUI_HomardAdaptDlg::CheckCase(bool fixCase)
+{
+  MESSAGE("CheckCase");
+
+  QString aWorkingDir = myAdvOpt->workingDirectoryLineEdit->text().trimmed();
+  if (aWorkingDir == QString("")) {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_CASE_DIRECTORY_1") );
+    return false;
+  }
+
+  if (CHDIR(aWorkingDir.toStdString().c_str()) != 0) {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_CASE_DIRECTORY_3") );
+    return false;
+  }
+
+  QString aMeshName, aFileName;
+  if (myArgs->myInMedFileRadio->isChecked()) {
+    aFileName = myArgs->mySelectInMedFileLineEdit->text().trimmed();
+    if (aFileName == QString("")) {
+      QMessageBox::critical(0, QObject::tr("HOM_ERROR"), QObject::tr("HOM_CASE_MESH"));
+      return false;
+    }
+
+    // In mesh name
+    aMeshName = SMESH_HOMARD_QT_COMMUN::LireNomMaillage(aFileName);
+    if (aMeshName == "") {
+      QMessageBox::critical(0, QObject::tr("HOM_ERROR"), QObject::tr("HOM_MED_FILE_2"));
+      return false;
+    }
+  }
+  else {
+    aMeshName = myArgs->myInBrowserObject->text();
+    if (aMeshName == "" || myMesh->_is_nil()) {
+      QMessageBox::critical(0, QObject::tr("HOM_ERROR"),
+                            QObject::tr("Mesh object is not selected"));
+      return false;
+    }
+  }
+
+  // On verifie qu'un groupe n'est pas associe a deux frontieres differentes
+  if (myArgs->CBBoundaryA->isChecked()) {
+    QStringList ListeGroup;
+    QString NomGroup;
+    int nbcol = myArgs->TWBoundary->columnCount();
+    int nbrow = myArgs->TWBoundary->rowCount();
+    for ( int col=1; col< nbcol; col++) {
+      for ( int row=0; row< nbrow; row++) {
+        if ( myArgs->TWBoundary->item( row, col )->checkState() ==  Qt::Checked ) {
+          // Group name
+          NomGroup = QString(myArgs->TWBoundary->item(row, 0)->text()) ;
+          for ( int nugr = 0 ; nugr < ListeGroup.size(); nugr++) {
+            if ( NomGroup == ListeGroup[nugr] ) {
+              QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                        QObject::tr("HOM_CASE_GROUP").arg(NomGroup) );
+              return false;
+            }
+          }
+          ListeGroup.insert(0, NomGroup );
+        }
+      }
+    }
+  }
+
+  if (!fixCase) return true;
+
+  // Creation du cas
+  if (myCase->_is_nil()) {
+    try {
+      if (myArgs->myInMedFileRadio->isChecked()) {
+        // create case from MED file
+        myCase = myHomardGen->CreateCase
+          (CORBA::string_dup(aMeshName.toStdString().c_str()),
+           CORBA::string_dup(aFileName.toStdString().c_str()),
+           aWorkingDir.toStdString().c_str());
+      }
+      else {
+        // create case from SMESH_Mesh
+        myCase = myHomardGen->CreateCaseOnMesh
+          (CORBA::string_dup(aMeshName.toStdString().c_str()),
+           myMesh,
+           aWorkingDir.toStdString().c_str());
+      }
+    }
+    catch( SALOME::SALOME_Exception& S_ex ) {
+      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                             QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+      return false;
+    }
+    // Prevent changing case data
+    myArgs->myInMedFileRadio->setEnabled(false);
+    myArgs->myInBrowserRadio->setEnabled(false);
+    myArgs->mySelectInMedFileLineEdit->setReadOnly(true);
+    myArgs->mySelectInMedFileButton->setEnabled(false);
+    myArgs->myInBrowserObject->setReadOnly(true);
+    myAdvOpt->workingDirectoryLineEdit->setReadOnly(true);
+    myAdvOpt->workingDirectoryPushButton->setEnabled(false);
+    InitBoundarys();
+  }
+
+  // Menage des eventuelles frontieres deja enregistrees
+  myCase->SupprBoundaryGroup();
+
+  return true;
+}
+
+//=================================================================================
+// function : PushOnApply
+// purpose  : 
+//=================================================================================
+bool SMESHGUI_HomardAdaptDlg::PushOnApply()
+{
+  MESSAGE("PushOnApply");
+
+  // Check data, create Case if not yet
+  if (!CheckCase(true))
+    return false;
+
+  // Create boundaries
+  if (myArgs->RBBoundaryCAO->isChecked()) {
+    QString monBoundaryCAOName = myArgs->CBBoundaryCAO->currentText();
+    if (monBoundaryCAOName != "" ) {
+      myCase->AddBoundary(monBoundaryCAOName.toStdString().c_str());
+    }
+  }
+  if (myArgs->CBBoundaryD->isChecked()) {
+    QString monBoundaryDiName = myArgs->CBBoundaryDi->currentText();
+    if (monBoundaryDiName != "" ) {
+      myCase->AddBoundary(monBoundaryDiName.toStdString().c_str());
+    }
+  }
+  if (myArgs->CBBoundaryA->isChecked()) {
+    QString NomGroup;
+    int nbcol = myArgs->TWBoundary->columnCount();
+    int nbrow = myArgs->TWBoundary->rowCount();
+    for ( int col = 1; col < nbcol; col++) {
+      for ( int row = 0; row < nbrow; row++) {
+        if ( myArgs->TWBoundary->item( row, col )->checkState() == Qt::Checked ) {
+          // Nom du groupe
+          NomGroup = QString(myArgs->TWBoundary->item(row, 0)->text()) ;
+          // Nom de la frontiere
+          QTableWidgetItem *__colItem = myArgs->TWBoundary->horizontalHeaderItem(col);
+          myCase->AddBoundaryGroup(QString(__colItem->text()).toStdString().c_str(),
+                                   NomGroup.toStdString().c_str());
+        }
+      }
+    }
+  }
+
+  // Output MED and MESH parameters
+  myHomardGen->SetKeepMedOUT(myArgs->myOutMedFileChk->isChecked());
+  myHomardGen->SetPublishMeshOUT(myArgs->myOutPublishChk->isChecked());
+  QString anOutMeshName = myArgs->myOutMeshNameLineEdit->text();
+  if (anOutMeshName.isEmpty()) anOutMeshName = "DEFAULT_MESH_NAME";
+  myHomardGen->SetMeshNameOUT(anOutMeshName.toStdString().c_str());
+
+  std::string aMeshFileOUT;
+  if (myArgs->myOutMedFileChk->isChecked()) {
+    QString anOutMed = myArgs->mySelectOutMedFileLineEdit->text();
+    if (anOutMed.isEmpty()) {
+      // store in working directory and with default name
+      QString aWorkingDir = myAdvOpt->workingDirectoryLineEdit->text().trimmed();
+      QFileInfo aFileInfo (QDir(aWorkingDir), "Uniform_R.med");
+      anOutMed = aFileInfo.absoluteFilePath();
+      // show it
+      myArgs->mySelectOutMedFileLineEdit->setText(anOutMed);
+    }
+    else {
+      QFileInfo aFileInfo (anOutMed);
+      anOutMed = aFileInfo.absoluteFilePath();
+    }
+    aMeshFileOUT = anOutMed.toStdString();
+  }
+  else {
+    // Set file name without path for it to be created in current directory
+    // (it will be iteration's dir, and it will be destroyed after)
+    aMeshFileOUT = "Uniform_R.med";
+  }
+  myHomardGen->SetMeshFileOUT(aMeshFileOUT.c_str());
+
+  // Conformity type
+  myHomardGen->SetConfType(myArgs->RBConforme->isChecked() ? 0 : 1);
+
+  // Advanced options
+  myHomardGen->SetVerboseLevel(myAdvOpt->verboseLevelSpin->value());
+  myHomardGen->SetKeepWorkingFiles(myAdvOpt->keepWorkingFilesCheck->isChecked());
+  myHomardGen->SetLogInFile(myAdvOpt->logInFileCheck->isChecked());
+  myHomardGen->SetRemoveLogOnSuccess(myAdvOpt->removeLogOnSuccessCheck->isChecked());
+
+  // Log file
+  if (myAdvOpt->logInFileCheck->isChecked()) {
+    // Write log file in the working dir
+    QString aLogBaseName;
+    if (myArgs->myInMedFileRadio->isChecked()) {
+      // Name of log file will be "<name_of_input_med_file>_Uniform_R.log"
+      QString aMedFileIn = myArgs->mySelectInMedFileLineEdit->text().trimmed();
+      QFileInfo aFileInfoIn (aMedFileIn);
+      aLogBaseName = aFileInfoIn.fileName();
+    }
+    else {
+      // Name of log file will be "SMESH_Mesh_<name_of_input_mesh>_Uniform_R.log"
+      aLogBaseName = "SMESH_Mesh_";
+      aLogBaseName += myArgs->myInBrowserObject->text();
+    }
+    QString aWorkingDir = myAdvOpt->workingDirectoryLineEdit->text().trimmed();
+    QFileInfo aFileInfo (QDir(aWorkingDir), aLogBaseName + "_Uniform_R.log");
+    QString anOutLog = aFileInfo.absoluteFilePath();
+    MESSAGE("myHomardGen->SetLogFile(" << anOutLog.toStdString().c_str() << ")");
+    myHomardGen->SetLogFile(anOutLog.toStdString().c_str());
+  }
+
+  // Compute and publish
+  bool isSuccess = true;
+  try {
+    SUIT_OverrideCursor aWaitCursor;
+    isSuccess = myHomardGen->Compute() == 0;
+  }
+  catch( SALOME::SALOME_Exception& S_ex ) {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                           QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+    isSuccess = false;
+  }
+
+  // Update Object Browser
+  if (isSuccess) {
+    SMESHGUI::GetSMESHGUI()->updateObjBrowser();
+
+    // Clean case, as it is deleted after successful Compute
+    myCase = SMESHHOMARD::HOMARD_Cas::_nil();
+  }
+
+  // Enable new case data selection
+  myArgs->myInMedFileRadio->setEnabled(true);
+  myArgs->myInBrowserRadio->setEnabled(true);
+  myArgs->mySelectInMedFileLineEdit->setReadOnly(false);
+  myArgs->mySelectInMedFileButton->setEnabled(true);
+  myArgs->myInBrowserObject->setReadOnly(false);
+  myAdvOpt->workingDirectoryLineEdit->setReadOnly(false);
+  myAdvOpt->workingDirectoryPushButton->setEnabled(true);
+
+  return isSuccess;
+}
+
+//=================================================================================
+// function : PushOnOK
+// purpose  : 
+//=================================================================================
+void SMESHGUI_HomardAdaptDlg::PushOnOK()
+{
+  bool bOK = PushOnApply();
+  if ( bOK ) this->close();
+}
+
+void SMESHGUI_HomardAdaptDlg::PushOnHelp()
+{
+  SMESH::ShowHelpFile("adaptation.html#_homard_adapt_anchor");
+}
+
+void SMESHGUI_HomardAdaptDlg::updateSelection()
+{
+  LightApp_SelectionMgr *selMgr = SMESHGUI::selectionMgr();
+  disconnect(selMgr, 0, this, 0);
+  selMgr->clearFilters();
+
+  if (!myArgs->myInBrowserRadio->isChecked())
+    return;
+
+  SMESH::SetPointRepresentation(false);
+  if (SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow())
+    aViewWindow->SetSelectionMode(ActorSelection);
+  if (myArgs->myInBrowserRadio->isChecked()) {
+    connect(selMgr, SIGNAL(currentSelectionChanged()), this, SLOT(selectionChanged()));
+    selectionChanged();
+  }
+}
+
+void SMESHGUI_HomardAdaptDlg::selectionChanged()
+{
+  if (!myArgs->myInBrowserRadio->isChecked())
+    return;
+
+  //SUIT_OverrideCursor aWaitCursor;
+  LightApp_SelectionMgr *selMgr = SMESHGUI::selectionMgr();
+
+  // get selected mesh
+  SALOME_ListIO aList;
+  selMgr->selectedObjects(aList);
+  QString aMeshName = "";
+
+  if (aList.Extent() == 1) {
+    Handle(SALOME_InteractiveObject) IO = aList.First();
+    myMesh = SMESH::GetMeshByIO(IO);
+    SMESH::GetNameOfSelectedIObjects(selMgr, aMeshName);
+    if (aMeshName.isEmpty()) aMeshName = " ";
+    else                     aMeshName = aMeshName.trimmed();
+  }
+  else {
+    myMesh = SMESH::SMESH_Mesh::_nil();
+  }
+
+  myArgs->myInBrowserObject->setText(aMeshName);
+
+  // Out mesh name default value
+  myArgs->myOutMeshNameLineEdit->setText(aMeshName + "_Uniform_R");
+
+  // Output med file default value
+  // Construct it from Input mesh name and working directory
+  //if (myArgs->myOutMedFileChk->isChecked()) {
+  if (aMeshName.isEmpty()) {
+    myArgs->mySelectOutMedFileLineEdit->setText("");
+  }
+  else {
+    QString aWorkingDir = myAdvOpt->workingDirectoryLineEdit->text().trimmed();
+    QFileInfo aFileInfo (QDir(aWorkingDir), aMeshName + QString("_Uniform_R.med"));
+    for (int ii = 1; aFileInfo.exists(); ii++) {
+      QString anUniqueName = QString("%1_Uniform_R_%2.med").arg(aMeshName).arg(ii);
+      aFileInfo.setFile(QDir(aWorkingDir), anUniqueName);
+    }
+    myArgs->mySelectOutMedFileLineEdit->setText(aFileInfo.absoluteFilePath());
+  }
+  //}
+
+  // Check data
+  if (!aMeshName.isEmpty())
+    CheckCase(false);
+}
+
+void SMESHGUI_HomardAdaptDlg::SetFileName()
+{
+  // Input med file
+  QString fileName0 = myArgs->mySelectInMedFileLineEdit->text().trimmed();
+  QString fileName = SMESH_HOMARD_QT_COMMUN::PushNomFichier(false, QString("med"));
+  //SUIT_OverrideCursor aWaitCursor;
+  if (fileName.isEmpty()) {
+    fileName = fileName0;
+    if (fileName.isEmpty()) return;
+  }
+  QFileInfo aFileInInfo (fileName);
+  fileName = aFileInInfo.absoluteFilePath();
+  myArgs->mySelectInMedFileLineEdit->setText(fileName);
+
+  // Out mesh name default value
+  QString aMeshName = SMESH_HOMARD_QT_COMMUN::LireNomMaillage(fileName);
+  myArgs->myOutMeshNameLineEdit->setText(aMeshName + "_Uniform_R");
+
+  // Output med file default value
+  // Construct it from Input med file name and path
+  //if (myArgs->myOutMedFileChk->isChecked()) {
+  std::string fname = fileName.toStdString();
+  size_t lastdot = fname.find_last_of(".");
+  if (lastdot != std::string::npos)
+    fname = fname.substr(0, lastdot);
+  QString fileNameOut = fname.c_str();
+  QFileInfo aFileInfo (fileNameOut + QString("_Uniform_R.med"));
+  for (int ii = 1; aFileInfo.exists(); ii++) {
+    QString anUniqueName = QString("%1_Uniform_R_%2.med").arg(fileNameOut).arg(ii);
+    aFileInfo.setFile(anUniqueName);
+  }
+  myArgs->mySelectOutMedFileLineEdit->setText(aFileInfo.absoluteFilePath());
+  //}
+
+  // Check data
+  CheckCase(false);
+}
+
+// ------------------------------------------------------------------------
+void SMESHGUI_HomardAdaptDlg::SetBoundaryNo()
+{
+  myArgs->GBBoundaryC->setVisible(0);
+  myArgs->GBBoundaryN->setVisible(0);
+  adjustSize();
+}
+
+// ------------------------------------------------------------------------
+void SMESHGUI_HomardAdaptDlg::SetBoundaryCAO()
+{
+  if (CheckCase(true)) {
+    myArgs->GBBoundaryC->setVisible(1);
+    myArgs->GBBoundaryN->setVisible(0);
+    resize(600, 550);
+    //adjustSize();
+  }
+  else {
+    myArgs->RBBoundaryNo->click();
+  }
+}
+// ------------------------------------------------------------------------
+void SMESHGUI_HomardAdaptDlg::SetBoundaryNonCAO()
+{
+  myArgs->GBBoundaryC->setVisible(0);
+  myArgs->GBBoundaryN->setVisible(1);
+  int aH = 550;
+  if (myArgs->GBBoundaryD->isVisible()) aH += 50;
+  if (myArgs->GBBoundaryA->isVisible()) aH += 150;
+  resize(600, aH);
+  //adjustSize();
+}
+// ------------------------------------------------------------------------
+void SMESHGUI_HomardAdaptDlg::AddBoundaryCAO(QString newBoundary)
+// ------------------------------------------------------------------------
+{
+  myArgs->CBBoundaryCAO->insertItem(0,newBoundary);
+  myArgs->CBBoundaryCAO->setCurrentIndex(0);
+}
+// ------------------------------------------------------------------------
+void SMESHGUI_HomardAdaptDlg::PushBoundaryCAONew()
+// ------------------------------------------------------------------------
+{
+   SMESH_CreateBoundaryCAO *BoundaryDlg = new SMESH_CreateBoundaryCAO
+     (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen), "Case_1", "");
+   BoundaryDlg->show();
+}
+// ------------------------------------------------------------------------
+void SMESHGUI_HomardAdaptDlg::PushBoundaryCAOEdit()
+// ------------------------------------------------------------------------
+{
+  if (myArgs->CBBoundaryCAO->currentText() == QString(""))  return;
+  SMESH_EditBoundaryCAO *BoundaryDlg = new SMESH_EditBoundaryCAO
+    (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen),
+     "Case_1", myArgs->CBBoundaryCAO->currentText());
+  BoundaryDlg->show();
+}
+
+// ------------------------------------------------------------------------
+void SMESHGUI_HomardAdaptDlg::PushBoundaryCAOHelp()
+{
+  SMESH::ShowHelpFile(QString("homard_create_boundary.html#cao-boundary"));
+}
+
+// ------------------------------------------------------------------------
+void SMESHGUI_HomardAdaptDlg::SetBoundaryD()
+{
+  MESSAGE("Debut de SetBoundaryD ");
+  if (myArgs->CBBoundaryD->isChecked()) {
+    bool bOK = CheckCase(true);
+    if (bOK) {
+      myArgs->GBBoundaryD->setVisible(1);
+    }
+    else {
+      myArgs->GBBoundaryD->setVisible(0);
+      myArgs->CBBoundaryD->setChecked(0);
+      myArgs->CBBoundaryD->setCheckState(Qt::Unchecked);
+    }
+  }
+  else {
+    myArgs->GBBoundaryD->setVisible(0);
+  }
+
+  //myArgs->mySelectInMedFileLineEdit->setReadOnly(true);
+  //myArgs->mySelectInMedFileButton->hide();
+
+  int aH = 550;
+  if (myArgs->GBBoundaryD->isVisible()) aH += 50;
+  if (myArgs->GBBoundaryA->isVisible()) aH += 150;
+  resize(600, aH);
+  //adjustSize();
+}
+// ------------------------------------------------------------------------
+void SMESHGUI_HomardAdaptDlg::AddBoundaryDi(QString newBoundary)
+// ------------------------------------------------------------------------
+{
+  myArgs->CBBoundaryDi->insertItem(0,newBoundary);
+  myArgs->CBBoundaryDi->setCurrentIndex(0);
+}
+// ------------------------------------------------------------------------
+void SMESHGUI_HomardAdaptDlg::PushBoundaryDiNew()
+// ------------------------------------------------------------------------
+{
+   SMESH_CreateBoundaryDi *BoundaryDlg = new SMESH_CreateBoundaryDi(this, true,
+                SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen), "Case_1", "");
+   BoundaryDlg->show();
+}
+// ------------------------------------------------------------------------
+void SMESHGUI_HomardAdaptDlg::PushBoundaryDiEdit()
+// ------------------------------------------------------------------------
+{
+  if (myArgs->CBBoundaryDi->currentText() == QString(""))  return;
+  SMESH_EditBoundaryDi *BoundaryDlg = new SMESH_EditBoundaryDi
+    (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen),
+     "Case_1", myArgs->CBBoundaryDi->currentText());
+  BoundaryDlg->show();
+}
+
+// ------------------------------------------------------------------------
+void SMESHGUI_HomardAdaptDlg::PushBoundaryDiHelp()
+{
+  SMESH::ShowHelpFile(QString("homard_create_boundary.html#discrete-boundary"));
+}
+
+// ------------------------------------------------------------------------
+void SMESHGUI_HomardAdaptDlg::SetBoundaryA()
+{
+  MESSAGE("Debut de SetBoundaryA ");
+  if (myArgs->CBBoundaryA->isChecked()) {
+    bool bOK = CheckCase(true);
+    if (bOK) {
+      myArgs->GBBoundaryA->setVisible(1);
+    }
+    else {
+      myArgs->GBBoundaryA->setVisible(0);
+      myArgs->CBBoundaryA->setChecked(0);
+      myArgs->CBBoundaryA->setCheckState(Qt::Unchecked);
+    }
+  }
+  else {
+    myArgs->GBBoundaryA->setVisible(0);
+  }
+
+  //myArgs->mySelectInMedFileLineEdit->setReadOnly(true);
+  //myArgs->mySelectInMedFileButton->hide();
+
+  int aH = 550;
+  if (myArgs->GBBoundaryD->isVisible()) aH += 50;
+  if (myArgs->GBBoundaryA->isVisible()) aH += 150;
+  resize(600, aH);
+  //adjustSize();
+}
+// ------------------------------------------------------------------------
+void SMESHGUI_HomardAdaptDlg::AddBoundaryAn(QString newBoundary)
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de AddBoundaryAn ");
+// Ajout d'une nouvelle colonne
+  int nbcol = myArgs->TWBoundary->columnCount();
+//   MESSAGE("nbcol " <<  nbcol);
+  nbcol += 1 ;
+  myArgs->TWBoundary->setColumnCount ( nbcol ) ;
+  QTableWidgetItem *__colItem = new QTableWidgetItem();
+  __colItem->setText(tr(newBoundary.toStdString().c_str()));
+  myArgs->TWBoundary->setHorizontalHeaderItem(nbcol-1, __colItem);
+/*  TWBoundary->horizontalHeaderItem(nbcol-1)->setFlags( Qt::ItemIsSelectable|Qt::ItemIsEnabled );*/
+// Chaque case est a cocher
+  int nbrow = myArgs->TWBoundary->rowCount();
+//   MESSAGE("nbrow " <<  nbrow);
+  for ( int i = 0; i < nbrow; i++ )
+  {
+    myArgs->TWBoundary->setItem( i, nbcol-1, new QTableWidgetItem( QString ("") ) );
+    myArgs->TWBoundary->item( i, nbcol-1 )->setFlags( 0 );
+    myArgs->TWBoundary->item( i, nbcol-1 )->setFlags( Qt::ItemIsUserCheckable|Qt::ItemIsEnabled  );
+    myArgs->TWBoundary->item( i, nbcol-1 )->setCheckState( Qt::Unchecked );
+  }
+  myArgs->TWBoundary->resizeColumnToContents(nbcol-1);
+//   TWBoundary->resizeRowsToContents();
+//   MESSAGE("Fin de AddBoundaryAn ");
+}
+// ------------------------------------------------------------------------
+void SMESHGUI_HomardAdaptDlg::PushBoundaryAnNew()
+// ------------------------------------------------------------------------
+{
+   SMESH_CreateBoundaryAn *BoundaryDlg = new SMESH_CreateBoundaryAn
+     (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen), "Case_1");
+   BoundaryDlg->show();
+}
+// ------------------------------------------------------------------------
+void SMESHGUI_HomardAdaptDlg::PushBoundaryAnEdit()
+// ------------------------------------------------------------------------
+{
+  QString nom="";
+  int nbcol = myArgs->TWBoundary->columnCount();
+  for ( int i = 1; i < nbcol; i++ ) {
+    QTableWidgetItem *__colItem = new QTableWidgetItem();
+    __colItem = myArgs->TWBoundary->horizontalHeaderItem(i);
+    nom = QString(__colItem->text()) ;
+    MESSAGE("nom "<<nom.toStdString().c_str());
+    if (nom != QString("")) {
+      SMESH_EditBoundaryAn *BoundaryDlg = new SMESH_EditBoundaryAn
+        (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen), "Case_1", nom);
+      BoundaryDlg->show();
+    }
+  }
+}
+// ------------------------------------------------------------------------
+void SMESHGUI_HomardAdaptDlg::PushBoundaryAnHelp()
+// ------------------------------------------------------------------------
+{
+  SMESH::ShowHelpFile(QString("homard_create_boundary.html#analytical-boundary"));
+}
+
+//=================================================================================
+// function : SMESHGUI_HomardAdaptArguments()
+// purpose  :
+//=================================================================================
+SMESHGUI_HomardAdaptArguments::SMESHGUI_HomardAdaptArguments(QWidget* parent)
+  : QWidget(parent)
+{
+  setupUi();
+}
+
+SMESHGUI_HomardAdaptArguments::~SMESHGUI_HomardAdaptArguments()
+{
+}
+
+void SMESHGUI_HomardAdaptArguments::setupUi()
+{
+  // Mesh in
+  QGroupBox* aMeshIn    = new QGroupBox( tr( "MeshIn" ), this );
+  myInMedFileRadio      = new QRadioButton( tr( "MEDFile" ), aMeshIn );
+  myInBrowserRadio      = new QRadioButton( tr( "Browser" ), aMeshIn );
+  myInBrowserObject     = new QLineEdit( aMeshIn );
+  mySelectInMedFileButton   = new QPushButton("...", aMeshIn);
+  mySelectInMedFileLineEdit = new QLineEdit( aMeshIn );
+
+  QGridLayout* meshIn = new QGridLayout( aMeshIn );
+
+  meshIn->setMargin( 9 );
+  meshIn->setSpacing( 6 );
+  meshIn->addWidget( myInMedFileRadio,          0, 0, 1, 1 );
+  meshIn->addWidget( myInBrowserRadio,          0, 1, 1, 1 );
+  meshIn->addWidget( mySelectInMedFileButton,   1, 0, 1, 1 );
+  meshIn->addWidget( mySelectInMedFileLineEdit, 1, 1, 1, 2 );
+  meshIn->addWidget( myInBrowserObject,         0, 2, 1, 1 );
+
+  myInMeshGroup = new QButtonGroup( this );
+  myInMeshGroup->addButton( myInMedFileRadio, 0 );
+  myInMeshGroup->addButton( myInBrowserRadio, 1 );
+
+  // Mesh out
+  QGroupBox* aMeshOut = new QGroupBox( tr( "MeshOut" ), this );
+  QLabel* meshName = new QLabel(tr("MeshName"), aMeshOut);
+  QSpacerItem* secondHspacer = new QSpacerItem(100, 30);
+  myOutMeshNameLineEdit = new QLineEdit(aMeshOut);
+  myOutMedFileChk = new QCheckBox(tr("MEDFile"), aMeshOut);
+  mySelectOutMedFileButton = new QPushButton("...", aMeshOut);
+  mySelectOutMedFileLineEdit = new QLineEdit(aMeshOut);
+  myOutPublishChk = new QCheckBox(tr("Publish_MG_ADAPT"), aMeshOut);
+
+  QGridLayout* meshOut = new QGridLayout( aMeshOut );
+
+  meshOut->setMargin( 9 );
+  meshOut->setSpacing( 6 );
+  meshOut->addWidget( meshName,  0, 0, 1,1 );
+  meshOut->addItem( secondHspacer,  0, 1, 1, 1 );
+  meshOut->addWidget( myOutMeshNameLineEdit, 0, 2,1,1);
+  meshOut->addWidget( myOutMedFileChk,  1, 0,1,1 );
+  meshOut->addWidget( mySelectOutMedFileButton,  1, 1,1,1 );
+  meshOut->addWidget( mySelectOutMedFileLineEdit,  1, 2,1,1);
+  meshOut->addWidget( myOutPublishChk,  2, 0,1,1 );
+
+  // Conformity type
+  QGroupBox *GBTypeConf = new QGroupBox(tr("Conformity type"), this);
+  RBConforme = new QRadioButton(tr("Conformal"), GBTypeConf);
+  RBNonConforme = new QRadioButton(tr("Non conformal"), GBTypeConf);
+  RBConforme->setChecked(true);
+
+  QHBoxLayout *hboxLayout2 = new QHBoxLayout(GBTypeConf);
+  hboxLayout2->setSpacing(6);
+  hboxLayout2->setContentsMargins(9, 9, 9, 9);
+  hboxLayout2->addWidget(RBConforme);
+  hboxLayout2->addWidget(RBNonConforme);
+
+  // Boundary type
+  GBTypeBoun = new QGroupBox(tr("Boundary type"), this);
+
+  RBBoundaryNo     = new QRadioButton(tr("No boundary"), GBTypeBoun);
+  RBBoundaryCAO    = new QRadioButton(tr("CAO"), GBTypeBoun);
+  RBBoundaryNonCAO = new QRadioButton(tr("Non CAO"), GBTypeBoun);
+  RBBoundaryNo->setChecked(true);
+
+  //     CAO
+  GBBoundaryC = new QGroupBox(tr("CAO"), GBTypeBoun);
+  /*
+  QSizePolicy sizePolicy1(QSizePolicy::Fixed, QSizePolicy::Fixed);
+  sizePolicy1.setHorizontalStretch(0);
+  sizePolicy1.setVerticalStretch(0);
+  sizePolicy1.setHeightForWidth(GBBoundaryC->sizePolicy().hasHeightForWidth());
+  GBBoundaryC->setSizePolicy(sizePolicy1);
+  */
+  GBBoundaryC->setMinimumSize(QSize(450, 50));
+
+  CBBoundaryCAO = new QComboBox(GBBoundaryC);
+  CBBoundaryCAO->setSizeAdjustPolicy(QComboBox::AdjustToContents);
+
+  PBBoundaryCAONew = new QPushButton(tr("New"), GBBoundaryC);
+  PBBoundaryCAOEdit = new QPushButton(tr("Edit"), GBBoundaryC);
+  PBBoundaryCAOHelp = new QPushButton(tr("Help"), GBBoundaryC);
+
+  PBBoundaryCAONew->setAutoDefault(false);
+  PBBoundaryCAOEdit->setAutoDefault(false);
+  PBBoundaryCAOHelp->setAutoDefault(false);
+
+  QGridLayout* gridLayout2 = new QGridLayout(GBBoundaryC);
+  gridLayout2->setSpacing(6);
+  gridLayout2->setContentsMargins(9, 9, 9, 9);
+  gridLayout2->addWidget(CBBoundaryCAO, 0, 0, 1, 1);
+  QSpacerItem* spacerItem3 = new QSpacerItem(40, 13, QSizePolicy::Fixed, QSizePolicy::Minimum);
+  gridLayout2->addItem(spacerItem3, 0, 1, 1, 1);
+  gridLayout2->addWidget(PBBoundaryCAONew, 0, 2, 1, 1);
+  gridLayout2->addWidget(PBBoundaryCAOEdit, 0, 3, 1, 1);
+  gridLayout2->addWidget(PBBoundaryCAOHelp, 0, 4, 1, 1);
+  gridLayout2->setRowMinimumHeight(0, 80);
+
+  //     Non CAO (discrete / analytical)
+  GBBoundaryN = new QGroupBox(tr("Non CAO"), GBTypeBoun);
+  GBBoundaryN->setMinimumSize(QSize(450, 80));
+
+  CBBoundaryD = new QCheckBox(tr("Discrete boundary"), GBBoundaryN);
+  CBBoundaryA = new QCheckBox(tr("Analytical boundary"), GBBoundaryN);
+
+  //          discrete
+  GBBoundaryD = new QGroupBox(tr("Discrete boundary"), GBBoundaryN);
+  //sizePolicy1.setHeightForWidth(GBBoundaryD->sizePolicy().hasHeightForWidth());
+  //GBBoundaryD->setSizePolicy(sizePolicy1);
+  QGridLayout* gridLayoutD = new QGridLayout(GBBoundaryD);
+  gridLayoutD->setSpacing(6);
+  gridLayoutD->setContentsMargins(9, 9, 9, 9);
+  CBBoundaryDi = new QComboBox(GBBoundaryD);
+  CBBoundaryDi->setSizeAdjustPolicy(QComboBox::AdjustToContents);
+
+  gridLayoutD->addWidget(CBBoundaryDi, 0, 0, 1, 1);
+
+  QSpacerItem* spacerItem5 = new QSpacerItem(40, 13, QSizePolicy::Fixed, QSizePolicy::Minimum);
+  gridLayoutD->addItem(spacerItem5, 0, 1, 1, 1);
+
+  PBBoundaryDiNew  = new QPushButton(tr("New"), GBBoundaryD);
+  PBBoundaryDiEdit = new QPushButton(tr("Edit"), GBBoundaryD);
+  PBBoundaryDiHelp = new QPushButton(tr("Help"), GBBoundaryD);
+
+  PBBoundaryDiNew->setAutoDefault(false);
+  PBBoundaryDiEdit->setAutoDefault(false);
+  PBBoundaryDiHelp->setAutoDefault(false);
+
+  gridLayoutD->addWidget(PBBoundaryDiNew,  0, 2, 1, 1);
+  gridLayoutD->addWidget(PBBoundaryDiEdit, 0, 3, 1, 1);
+  gridLayoutD->addWidget(PBBoundaryDiHelp, 0, 4, 1, 1);
+
+  //          analytical
+  GBBoundaryA = new QGroupBox(tr("Analytical boundary"), GBBoundaryN);
+  GBBoundaryA->setMinimumSize(QSize(548, 200));
+  formLayout = new QFormLayout(GBBoundaryA);
+  TWBoundary = new QTableWidget(GBBoundaryA);
+  if (TWBoundary->columnCount() < 1)
+    TWBoundary->setColumnCount(1);
+  QTableWidgetItem *__qtablewidgetitem = new QTableWidgetItem();
+  TWBoundary->setHorizontalHeaderItem(0, __qtablewidgetitem);
+  TWBoundary->setEditTriggers(QAbstractItemView::AnyKeyPressed|QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed|QAbstractItemView::SelectedClicked);
+  TWBoundary->setShowGrid(true);
+  TWBoundary->setRowCount(0);
+  TWBoundary->setColumnCount(1);
+
+  formLayout->setWidget(0, QFormLayout::LabelRole, TWBoundary);
+
+  QGridLayout* gridLayout1 = new QGridLayout();
+  gridLayout1->setSpacing(6);
+  gridLayout1->setContentsMargins(0, 0, 0, 0);
+
+  PBBoundaryAnNew  = new QPushButton(tr("New"), GBBoundaryA);
+  PBBoundaryAnEdit = new QPushButton(tr("Edit"), GBBoundaryA);
+  PBBoundaryAnHelp = new QPushButton(tr("Help"), GBBoundaryA);
+
+  PBBoundaryAnNew->setAutoDefault(false);
+  PBBoundaryAnEdit->setAutoDefault(false);
+  PBBoundaryAnHelp->setAutoDefault(false);
+
+  gridLayout1->addWidget(PBBoundaryAnNew,  0, 0, 1, 1);
+  gridLayout1->addWidget(PBBoundaryAnEdit, 1, 0, 1, 1);
+  gridLayout1->addWidget(PBBoundaryAnHelp, 2, 0, 1, 1);
+
+  formLayout->setLayout(0, QFormLayout::FieldRole, gridLayout1);
+
+  // Boundary No Layout
+  QGridLayout* aBoundaryNoLayout = new QGridLayout(GBBoundaryN);
+  //aBoundaryNoLayout->addLayout(hboxLayout3, 0, 0);
+  aBoundaryNoLayout->addWidget(CBBoundaryD, 0, 0);
+  aBoundaryNoLayout->addWidget(CBBoundaryA, 0, 1);
+  aBoundaryNoLayout->addWidget(GBBoundaryD, 1, 0, 1, 2);
+  aBoundaryNoLayout->addWidget(GBBoundaryA, 2, 0, 1, 2);
+
+  // Boundary type Layout
+  QGridLayout* aBoundTypeLayout = new QGridLayout(GBTypeBoun);
+  aBoundTypeLayout->addWidget(RBBoundaryNo,     0, 0);
+  aBoundTypeLayout->addWidget(RBBoundaryCAO,    0, 1);
+  aBoundTypeLayout->addWidget(RBBoundaryNonCAO, 0, 2);
+
+  aBoundTypeLayout->addWidget(GBBoundaryC, 1, 0, 1, 3);
+  aBoundTypeLayout->addWidget(GBBoundaryN, 2, 0, 1, 3);
+
+  // Arguments layout
+  QGridLayout *argumentsLayout = new QGridLayout(this);
+  argumentsLayout->addWidget(aMeshIn,     0, 0, 1, 3);
+  argumentsLayout->addWidget(aMeshOut,    1, 0, 1, 3);
+  argumentsLayout->addWidget(GBTypeConf,  2, 0, 1, 3);
+  argumentsLayout->addWidget(GBTypeBoun,  3, 0, 1, 3);
+  argumentsLayout->setColumnStretch( 1, 5 );
+  argumentsLayout->setRowStretch( 4, 5 );
+
+  QTableWidgetItem *___qtablewidgetitem = TWBoundary->horizontalHeaderItem(0);
+  ___qtablewidgetitem->setText(tr("a_virer"));
+
+  // Initial state
+  myInMedFileRadio->setChecked( true );
+  modeInChanged( MedFile );
+  RBBoundaryNo->setChecked( true );
+  //SetBoundaryNo();
+
+  myOutMedFileChk->setChecked(true);
+  CBBoundaryCAO->setCurrentIndex(-1);
+  CBBoundaryDi->setCurrentIndex(-1);
+
+  // Connections
+  connect(myInMeshGroup,            SIGNAL(buttonClicked(int)), this, SLOT(modeInChanged(int)));
+  connect(myOutMedFileChk,          SIGNAL(stateChanged(int)),  this, SLOT(onOutMedFileChk(int)));
+  connect(myOutPublishChk,          SIGNAL(stateChanged(int)),  this, SLOT(onOutPublishChk(int)));
+  connect(mySelectOutMedFileButton, SIGNAL(pressed()), this, SLOT(onSelectOutMedFileButton()));
+  emit updateSelection();
+}
+
+void SMESHGUI_HomardAdaptArguments::modeInChanged( int theMode )
+{
+  clear();
+  if (theMode == MedFile) {
+    mySelectInMedFileLineEdit->show();
+    mySelectInMedFileButton->show();
+    myInBrowserObject->hide();
+  }
+  else {
+    mySelectInMedFileLineEdit->hide();
+    mySelectInMedFileButton->hide();
+    myInBrowserObject->show();
+    emit updateSelection();
+  }
+}
+
+void SMESHGUI_HomardAdaptArguments::onSelectOutMedFileButton()
+{
+  // Current value
+  QString fileName0 = mySelectOutMedFileLineEdit->text().trimmed();
+
+  // Ask user for the new value
+  QString filtre = QString("Med");
+  filtre += QString(" files (*.") + QString("med") + QString(");;");
+  QString fileName = QFileDialog::getSaveFileName(this, tr("SAVE_MED"), QString(""), filtre);
+
+  // Check the new value
+  if (fileName.isEmpty()) fileName = fileName0;
+
+  QFileInfo aFileInfo (fileName);
+  mySelectOutMedFileLineEdit->setText(aFileInfo.absoluteFilePath());
+}
+
+void SMESHGUI_HomardAdaptArguments::clear()
+{
+  mySelectInMedFileLineEdit->clear();
+  myInBrowserObject->clear();
+
+  myOutMeshNameLineEdit->clear();
+  mySelectOutMedFileLineEdit->clear();
+}
+
+void SMESHGUI_HomardAdaptArguments::onOutMedFileChk(int state)
+{
+  if (state == Qt::Checked) {
+    mySelectOutMedFileButton->show();
+    mySelectOutMedFileLineEdit->show();
+    mySelectOutMedFileButton->setEnabled(true);
+    mySelectOutMedFileLineEdit->setEnabled(true);
+  }
+  else {
+    mySelectOutMedFileButton->setEnabled(false);
+    mySelectOutMedFileLineEdit->setEnabled(false);
+    myOutPublishChk->setChecked(true);
+  }
+}
+
+void SMESHGUI_HomardAdaptArguments::onOutPublishChk(int state)
+{
+  if (state == Qt::Unchecked) {
+    myOutMedFileChk->setChecked(true);
+  }
+}
+
+//////////////////////////////////////////
+// SMESHGUI_HomardAdaptAdvanced
+//////////////////////////////////////////
+
+SMESHGUI_HomardAdaptAdvanced::SMESHGUI_HomardAdaptAdvanced(QWidget* parent)
+  : QWidget(parent)
+{
+  setupWidget();
+  connect(workingDirectoryPushButton, SIGNAL(pressed()),
+          this, SLOT(onWorkingDirectoryPushButton()));
+}
+
+SMESHGUI_HomardAdaptAdvanced::~SMESHGUI_HomardAdaptAdvanced()
+{
+}
+
+void SMESHGUI_HomardAdaptAdvanced::setupWidget()
+{
+  //this->resize(337, 369);
+
+  // Logs and debug
+  logGroupBox = new QGroupBox(this);
+  QGridLayout* logGroupBoxLayout = new QGridLayout(this);
+  logGroupBoxLayout->setMargin( 9 );
+  logGroupBoxLayout->setSpacing( 6 );
+  logGroupBoxLayout->addWidget(logGroupBox, 0, 0, 1, 1);
+
+  QGridLayout* logsLayout = new QGridLayout(logGroupBox);
+  logsLayout->setMargin( 9 );
+  logsLayout->setSpacing( 6 );
+
+  // Working directory + Verbose level layout
+  QGridLayout* gridLayout = new QGridLayout();
+
+  // Working directory
+  workingDirectoryLabel = new QLabel(logGroupBox);
+  workingDirectoryLineEdit = new QLineEdit(logGroupBox);
+  workingDirectoryPushButton = new QPushButton(logGroupBox);
+
+  gridLayout->addWidget(workingDirectoryLabel,      0, 0, 1, 1);
+  gridLayout->addWidget(workingDirectoryLineEdit,   0, 1, 1, 1);
+  gridLayout->addWidget(workingDirectoryPushButton, 0, 2, 1, 1);
+
+  // Verbose level
+  verboseLevelLabel = new QLabel(logGroupBox);
+  verboseLevelSpin = new QSpinBox(logGroupBox);
+
+  gridLayout->addWidget(verboseLevelLabel, 1, 0, 1, 1);
+  gridLayout->addWidget(verboseLevelSpin,  1, 1, 1, 1);
+
+  logsLayout->addLayout(gridLayout, 0, 0, 1, 1);
+
+  // logInFileCheck + removeLogOnSuccessCheck
+  QHBoxLayout* horizontalLayout = new QHBoxLayout();
+
+  logInFileCheck = new QCheckBox(logGroupBox);
+  removeLogOnSuccessCheck = new QCheckBox(logGroupBox);
+
+  logInFileCheck->setChecked(true);
+  removeLogOnSuccessCheck->setChecked(true);
+
+  horizontalLayout->addWidget(logInFileCheck);
+  horizontalLayout->addWidget(removeLogOnSuccessCheck);
+
+  logsLayout->addLayout(horizontalLayout, 1, 0, 1, 1);
+
+  // Keep Working Files Check
+  keepWorkingFilesCheck = new QCheckBox(logGroupBox);
+  keepWorkingFilesCheck->setAutoExclusive(false);
+  keepWorkingFilesCheck->setChecked(false);
+
+  logsLayout->addWidget(keepWorkingFilesCheck, 2, 0, 1, 1);
+
+  //logsLayout->setColumnStretch( 1, 5 );
+  logsLayout->setRowStretch( 3, 5 );
+}
+
+void SMESHGUI_HomardAdaptAdvanced::onWorkingDirectoryPushButton()
+{
+  QString aWorkingDir = QFileDialog::getExistingDirectory();
+  if (!(aWorkingDir.isEmpty())) workingDirectoryLineEdit->setText(aWorkingDir);
+}
diff --git a/src/SMESHGUI/SMESHGUI_HomardAdaptDlg.h b/src/SMESHGUI/SMESHGUI_HomardAdaptDlg.h
new file mode 100644 (file)
index 0000000..87b6707
--- /dev/null
@@ -0,0 +1,233 @@
+// Copyright (C) 2011-2024  CEA, EDF
+//
+// 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 SMESHGUI_HOMARDADAPTDLG_HXX
+#define SMESHGUI_HOMARDADAPTDLG_HXX
+
+#include "SMESH_SMESHGUI.hxx"
+
+#include <SALOMEconfig.h>
+#include CORBA_CLIENT_HEADER(SMESH_Homard)
+#include CORBA_SERVER_HEADER(SMESH_Mesh)
+#include <SALOME_GenericObj_wrap.hxx>
+
+#include <SalomeApp_Module.h>
+
+#include <QtCore/QVariant>
+#include <QtWidgets/QApplication>
+#include <QtWidgets/QCheckBox>
+#include <QtWidgets/QComboBox>
+#include <QtWidgets/QDialog>
+#include <QtWidgets/QFormLayout>
+#include <QtWidgets/QGridLayout>
+#include <QtWidgets/QGroupBox>
+#include <QtWidgets/QHBoxLayout>
+#include <QtWidgets/QHeaderView>
+#include <QtWidgets/QLabel>
+#include <QtWidgets/QLineEdit>
+#include <QtWidgets/QPushButton>
+#include <QtWidgets/QRadioButton>
+#include <QtWidgets/QSpacerItem>
+#include <QtWidgets/QTableWidget>
+#include <QtWidgets/QWidget>
+#include <QtWidgets/QTabWidget>
+#include <QtWidgets/QSpinBox>
+
+class SMESHGUI_HomardAdaptArguments;
+class SMESHGUI_HomardAdaptAdvanced;
+
+//=================================================================================
+// class    : SMESHGUI_HomardAdaptDlg
+// purpose  :
+//=================================================================================
+class SMESHGUI_EXPORT SMESHGUI_HomardAdaptDlg : public QDialog
+{
+  Q_OBJECT
+
+ public:
+  SMESHGUI_HomardAdaptDlg(SMESHHOMARD::HOMARD_Gen_ptr theHomardGen);
+  ~SMESHGUI_HomardAdaptDlg();
+
+  void AddBoundaryCAO(QString newBoundary);
+  void AddBoundaryAn(QString newBoundary);
+  void AddBoundaryDi(QString newBoundary);
+
+ protected:
+  QString myWorkingDir;
+
+  SMESHHOMARD::HOMARD_Cas_var myCase;
+  SALOME::GenericObj_wrap< SMESHHOMARD::HOMARD_Gen > myHomardGen;
+
+  virtual void InitConnect();
+  virtual void InitBoundarys();
+
+ public slots:
+  virtual void SetFileName();
+
+  virtual void SetBoundaryNo();
+  virtual void SetBoundaryCAO();
+  virtual void SetBoundaryNonCAO();
+
+  virtual void PushBoundaryCAONew();
+  virtual void PushBoundaryCAOEdit();
+  virtual void PushBoundaryCAOHelp();
+
+  virtual void SetBoundaryD();
+  virtual void PushBoundaryDiNew();
+  virtual void PushBoundaryDiEdit();
+  virtual void PushBoundaryDiHelp();
+
+  virtual void SetBoundaryA();
+  virtual void PushBoundaryAnNew();
+  virtual void PushBoundaryAnEdit();
+  virtual void PushBoundaryAnHelp();
+
+  bool CheckCase(bool fixCase);
+
+  virtual void PushOnOK();
+  virtual bool PushOnApply();
+  virtual void PushOnHelp();
+
+  void selectionChanged();
+  void updateSelection();
+
+ private:
+  SMESHGUI_HomardAdaptArguments* myArgs;
+  SMESHGUI_HomardAdaptAdvanced* myAdvOpt;
+
+  SMESH::SMESH_Mesh_var myMesh;
+
+  QPushButton *buttonHelp;
+  QPushButton *buttonApply;
+  QPushButton *buttonOk;
+  QPushButton *buttonCancel;
+};
+
+//=================================================================================
+// class    : SMESHGUI_HomardAdaptArguments
+// purpose  :
+//=================================================================================
+class SMESHGUI_HomardAdaptArguments : public QWidget
+{
+  Q_OBJECT
+
+public:
+  enum ModeIn { MedFile, Browser };
+
+  SMESHGUI_HomardAdaptArguments (QWidget* parent);
+  ~SMESHGUI_HomardAdaptArguments();
+
+  void setupUi();
+
+public:
+  // Mesh In
+  QButtonGroup* myInMeshGroup;
+  QRadioButton* myInMedFileRadio;
+  QRadioButton* myInBrowserRadio;
+
+  QPushButton*  mySelectInMedFileButton;
+  QLineEdit*    mySelectInMedFileLineEdit; // LEFileName
+
+  QLineEdit*    myInBrowserObject;
+
+  // Mesh Out
+  QLineEdit*    myOutMeshNameLineEdit;
+  QCheckBox*    myOutMedFileChk;
+
+  QPushButton*  mySelectOutMedFileButton;
+  QLineEdit*    mySelectOutMedFileLineEdit;
+
+  QCheckBox*    myOutPublishChk;
+
+  // Conformity type
+  QRadioButton *RBConforme;
+  QRadioButton *RBNonConforme;
+
+  // Boundary type
+  QGroupBox *GBTypeBoun;
+  QRadioButton *RBBoundaryNo;
+  QRadioButton *RBBoundaryCAO;
+  QRadioButton *RBBoundaryNonCAO;
+  QHBoxLayout *hboxLayout3;
+  QCheckBox *CBBoundaryD;
+  QCheckBox *CBBoundaryA;
+
+  QGroupBox *GBBoundaryC; // CAO boundary
+  QPushButton *PBBoundaryCAOEdit;
+  QPushButton *PBBoundaryCAOHelp;
+  QComboBox *CBBoundaryCAO;
+  QPushButton *PBBoundaryCAONew;
+  QGroupBox *GBBoundaryN; // Non CAO boundary
+  QGroupBox *GBBoundaryD;
+  QComboBox *CBBoundaryDi;
+  QPushButton *PBBoundaryDiEdit;
+  QPushButton *PBBoundaryDiHelp;
+  QPushButton *PBBoundaryDiNew;
+  QGroupBox *GBBoundaryA;
+  QFormLayout *formLayout;
+  QTableWidget *TWBoundary;
+  QPushButton *PBBoundaryAnEdit;
+  QPushButton *PBBoundaryAnNew;
+  QPushButton *PBBoundaryAnHelp;
+
+signals:
+  void updateSelection();
+
+private slots:
+  void modeInChanged(int);
+  void clear();
+  void onOutMedFileChk(int);
+  void onOutPublishChk(int);
+  void onSelectOutMedFileButton();
+};
+
+//=================================================================================
+// class    : SMESHGUI_HomardAdaptAdvanced
+// purpose  :
+//=================================================================================
+class SMESHGUI_HomardAdaptAdvanced : public QWidget
+{
+  Q_OBJECT
+
+public:
+  SMESHGUI_HomardAdaptAdvanced(QWidget* = 0);
+  ~SMESHGUI_HomardAdaptAdvanced();
+
+  void setupWidget();
+
+public:
+  QGroupBox   *logGroupBox;
+
+  QLabel      *workingDirectoryLabel;
+  QLineEdit   *workingDirectoryLineEdit;
+  QPushButton *workingDirectoryPushButton;
+
+  QLabel      *verboseLevelLabel;
+  QSpinBox    *verboseLevelSpin;
+
+  QCheckBox   *logInFileCheck;
+  QCheckBox   *removeLogOnSuccessCheck;
+
+  QCheckBox   *keepWorkingFilesCheck;
+
+private slots:
+  void onWorkingDirectoryPushButton();
+};
+
+#endif // SMESHGUI_HOMARDADAPTDLG_HXX
diff --git a/src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.cxx b/src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.cxx
new file mode 100644 (file)
index 0000000..2c69cbe
--- /dev/null
@@ -0,0 +1,1641 @@
+// Copyright (C) 2011-2024  CEA, EDF
+//
+// 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 "SMESHGUI_HomardBoundaryDlg.h"
+
+#include "SMESHGUI_HomardAdaptDlg.h"
+#include "SMESHGUI_HomardListGroup.h"
+
+#include "SMESHGUI_Utils.h"
+
+#include <QFileDialog>
+#include <QMessageBox>
+
+#include "SalomeApp_Tools.h"
+#include "SMESHGUI_HomardUtils.h"
+#include <utilities.h>
+
+#include <SUIT_Desktop.h>
+#include <SUIT_MessageBox.h>
+#include <SUIT_ResourceMgr.h>
+#include <SUIT_Session.h>
+#include <SUIT_ViewManager.h>
+
+#include "math.h"
+#define PI 3.141592653589793
+
+using namespace std;
+
+// ----------------------------------------------------------------------------------
+SMESH_CreateBoundaryAn::SMESH_CreateBoundaryAn(SMESHGUI_HomardAdaptDlg* parent, bool modal,
+                                               SMESHHOMARD::HOMARD_Gen_var myHomardGen0,
+                                               QString caseName) :
+/* Constructs a SMESH_CreateBoundaryAn
+   appele pour une vraie creation
+   initialise un cylindre et non une sphere
+*/
+    QDialog(0), SMESH_Ui_CreateBoundaryAn(),
+    _parent(parent),
+    _Name (""),
+    _Type(1),
+    _BoundaryAnXcentre(0), _BoundaryAnYcentre(0), _BoundaryAnZcentre(0), _BoundaryAnRayon(0),
+    _BoundaryAnXaxis(0), _BoundaryAnYaxis(0), _BoundaryAnZaxis(0),
+    _Xcentre(0), _Ycentre(0), _Zcentre(0), _Rayon(0),
+    _Xmin(0), _Xmax(0), _Xincr(0), _Ymin(0), _Ymax(0), _Yincr(0), _Zmin(0), _Zmax(0), _Zincr(0), _DMax(0),
+    _BoundaryAnXcone1(0), _BoundaryAnYcone1(0), _BoundaryAnZcone1(0), _BoundaryAnRayon1(0),
+    _BoundaryAnXcone2(0), _BoundaryAnYcone2(0), _BoundaryAnZcone2(0), _BoundaryAnRayon2(0),
+    _BoundaryAnXaxisCone(0), _BoundaryAnYaxisCone(0), _BoundaryAnZaxisCone(0),
+    _BoundaryAnXorigCone(0), _BoundaryAnYorigCone(0), _BoundaryAnZorigCone(0),
+    _BoundaryAngle(0),
+    _BoundaryAnToreXcentre(0), _BoundaryAnToreYcentre(0), _BoundaryAnToreZcentre(0),
+    _BoundaryAnToreXaxe(0), _BoundaryAnToreYaxe(0), _BoundaryAnToreZaxe(0),
+    _BoundaryAnToreRRev(0), _BoundaryAnToreRPri(0),
+    Chgt (false)
+    {
+      MESSAGE("Constructeur") ;
+      myHomardGen = SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen0);
+      setupUi(this);
+      setModal(modal);
+
+      // Gestion des icones
+      QPixmap pix ;
+      QIcon IS ;
+      SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+      pix = resMgr->loadPixmap( "HOMARD", "spherepoint.png" );
+      IS=QIcon(pix);
+      RBSphere->setIcon(IS);
+      pix = resMgr->loadPixmap( "HOMARD", "cylinderpointvector.png" );
+      IS=QIcon(pix);
+      RBCylindre->setIcon(IS);
+      pix = resMgr->loadPixmap( "HOMARD", "cone.png" );
+      IS=QIcon(pix);
+      RBCone->setIcon(IS);
+      pix = resMgr->loadPixmap( "HOMARD", "conepointvector.png" );
+      IS=QIcon(pix);
+      RB_Def_angle->setIcon(IS);
+      pix = resMgr->loadPixmap( "HOMARD", "conedxyz.png" );
+      IS=QIcon(pix);
+      RB_Def_radius->setIcon(IS);
+      pix = resMgr->loadPixmap( "HOMARD", "toruspointvector.png" );
+      IS=QIcon(pix);
+      RBTore->setIcon(IS);
+
+      InitConnect( );
+
+      SetNewName() ;
+      InitValBoundaryAn();          // Cherche les valeurs de la boite englobante le maillage
+      InitMinMax();                 // Initialise les bornes des boutons
+      SetCylinder();                // Propose un cylindre en premier choix
+    }
+
+// -------------------------------------------------------------------------------
+SMESH_CreateBoundaryAn::SMESH_CreateBoundaryAn(SMESHGUI_HomardAdaptDlg* parent,
+                                               SMESHHOMARD::HOMARD_Gen_var myHomardGen0,
+                                               QString caseName):
+    QDialog(0), SMESH_Ui_CreateBoundaryAn(),
+    _parent(parent),
+    _Name (""),
+    _Type(1),
+    _BoundaryAnXcentre(0), _BoundaryAnYcentre(0), _BoundaryAnZcentre(0), _BoundaryAnRayon(0),
+    _BoundaryAnXaxis(0), _BoundaryAnYaxis(0), _BoundaryAnZaxis(0),
+    // Pour affichage lors de l edition d une BoundaryAn sans nom de Cas
+    _Xcentre(0), _Ycentre(0), _Zcentre(0), _Rayon(0),
+    _Xmin(1), _Xmax(1), _Xincr(1), _Ymin(1), _Ymax(1), _Yincr(1), _Zmin(1), _Zmax(1), _Zincr(1), _DMax(1),
+     Chgt (false)
+    {
+  //  MESSAGE("Debut de  SMESH_CreateBoundaryAn")
+      myHomardGen = SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen0);
+      setupUi(this);
+      SUIT_ResourceMgr* resMgr = SUIT_Session::session()->resourceMgr();
+      QPixmap pix = resMgr->loadPixmap( "HOMARD", "spherepoint.png" );
+      QIcon IS=QIcon(pix);
+      RBSphere->setIcon(IS);
+      QPixmap pix2 = resMgr->loadPixmap( "HOMARD", "cylinderpointvector.png" );
+      QIcon IS2=QIcon(pix2);
+      RBCylindre->setIcon(IS2);
+      QPixmap pix3 = resMgr->loadPixmap( "HOMARD", "cone.png" );
+      QIcon IS3=QIcon(pix3);
+      RBCone->setIcon(IS3);
+      QPixmap pix4 = resMgr->loadPixmap( "HOMARD", "conepointvector.png" );
+      QIcon IS4=QIcon(pix4);
+      RB_Def_angle->setIcon(IS4);
+      QPixmap pix5 = resMgr->loadPixmap( "HOMARD", "conedxyz.png" );
+      QIcon IS5=QIcon(pix5);
+      RB_Def_radius->setIcon(IS5);
+      setModal(true);
+      InitConnect();
+    }
+
+// ------------------------------------------------------------------------
+SMESH_CreateBoundaryAn::~SMESH_CreateBoundaryAn()
+// ------------------------------------------------------------------------
+{
+    // no need to delete child widgets, Qt does it all for us
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryAn::InitConnect()
+// ------------------------------------------------------------------------
+{
+    connect( RBCylindre,    SIGNAL(clicked()) , this, SLOT(SetCylinder()) ) ;
+    connect( RBSphere,      SIGNAL(clicked()) , this, SLOT(SetSphere()) ) ;
+    connect( RBCone,        SIGNAL(clicked()) , this, SLOT(SetCone()) ) ;
+    connect( RB_Def_radius, SIGNAL(clicked()) , this, SLOT(SetConeR()) );
+    connect( RB_Def_angle,  SIGNAL(clicked()) , this, SLOT(SetConeA()) );
+    connect( RBTore,        SIGNAL(clicked()) , this, SLOT(SetTore()) ) ;
+    connect( buttonOk,     SIGNAL( pressed() ), this, SLOT( PushOnOK() ) );
+    connect( buttonApply,  SIGNAL( pressed() ), this, SLOT( PushOnApply() ) );
+    connect( buttonCancel, SIGNAL( pressed() ), this, SLOT( close() ) );
+    connect( buttonHelp,   SIGNAL( pressed() ), this, SLOT( PushOnHelp() ) );
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryAn::InitValBoundaryAn()
+// ------------------------------------------------------------------------
+{
+  //
+  //  1. Les coordonnees extremes du maillage
+  //
+    SMESHHOMARD::HOMARD_Cas_var aCas = myHomardGen->GetCase();
+    SMESHHOMARD::extrema_var  MesExtremes = aCas->GetBoundingBox();
+    int num = MesExtremes->length() ;
+    ASSERT(num == 10);
+    _Xmin=MesExtremes[0]; _Xmax=MesExtremes[1]; _Xincr=MesExtremes[2];
+    _Ymin=MesExtremes[3]; _Ymax=MesExtremes[4]; _Yincr=MesExtremes[5];
+    _Zmin=MesExtremes[6]; _Zmax=MesExtremes[7]; _Zincr=MesExtremes[8];
+    _DMax=MesExtremes[9];
+     MESSAGE ("_Xmin : " << _Xmin << " _Xmax : " << _Xmax << " _Xincr : " << _Xincr ) ;
+     MESSAGE ("_Ymin : " << _Ymin << " _Ymax : " << _Ymax << " _Yincr : " << _Yincr ) ;
+     MESSAGE ("_Zmin : " << _Zmin << " _Zmax : " << _Zmax << " _Zincr : " << _Zincr) ;
+     MESSAGE ("_DMax : " << _DMax);
+
+//  2. Caracteristiques des frontieres
+// en X
+    _Xcentre=(_Xmin + _Xmax)/2.;
+// en Y
+    _Ycentre=(_Ymin + _Ymax)/2.;
+// en Z
+    _Zcentre=(_Zmin + _Zmax)/2.;
+// Rayon
+    _Rayon= _DMax/4.;
+}
+
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryAn::InitMinMax()
+// ------------------------------------------------------------------------
+{
+  // Cylindre
+  // . X du centre
+  SpinBox_Xcent->setValue(_Xcentre);
+  SpinBox_Xcent->setSingleStep(_Xincr);
+  // . Y du centre
+  SpinBox_Ycent->setValue(_Ycentre);
+  SpinBox_Ycent->setSingleStep(_Yincr);
+  // . Z du centre
+  SpinBox_Zcent->setValue(_Zcentre);
+  SpinBox_Zcent->setSingleStep(_Zincr);
+  // . X de l'axe
+  SpinBox_Xaxis->setValue(0.);
+  SpinBox_Xaxis->setSingleStep(0.1);
+  // . Y de l'axe
+  SpinBox_Yaxis->setValue(0.);
+  SpinBox_Yaxis->setSingleStep(0.1);
+  // . Z de l'axe
+  SpinBox_Zaxis->setValue(1.);
+  SpinBox_Zaxis->setSingleStep(0.1);
+  // . Rayon
+  SpinBox_Radius->setValue(_Rayon);
+  SpinBox_Radius->setSingleStep(_Rayon/10.);
+
+  // Sphere
+  // . X du centre
+  SpinBox_Xcentre->setValue(_Xcentre);
+  SpinBox_Xcentre->setSingleStep(_Xincr);
+  // . Y du centre
+  SpinBox_Ycentre->setValue(_Ycentre);
+  SpinBox_Ycentre->setSingleStep(_Yincr);
+  // . Z du centre
+  SpinBox_Zcentre->setValue(_Zcentre);
+  SpinBox_Zcentre->setSingleStep(_Zincr);
+  // . Rayon
+  SpinBox_Rayon->setValue(_Rayon);
+  SpinBox_Rayon->setSingleStep(_Rayon/10.);
+
+  // Cone en rayons
+  // . X des centres
+  _BoundaryAnXcone1 = _Xcentre ;
+  SpinBox_Cone_X1->setSingleStep(_Xincr);
+  _BoundaryAnXcone2 = _Xcentre ;
+  SpinBox_Cone_X2->setSingleStep(_Xincr);
+  // . Y des centres
+  _BoundaryAnYcone1 = _Ycentre ;
+  SpinBox_Cone_Y1->setSingleStep(_Yincr);
+  _BoundaryAnYcone2 = _Ycentre ;
+  SpinBox_Cone_Y2->setSingleStep(_Yincr);
+  // . Z des centres
+  _BoundaryAnZcone1 = _Zmin ;
+  SpinBox_Cone_Z1->setSingleStep(_Zincr);
+  _BoundaryAnZcone2 = _Zmax ;
+  SpinBox_Cone_Z2->setSingleStep(_Zincr);
+  // . Rayons/Angles
+  _BoundaryAnRayon1 = 0. ;
+  _BoundaryAnRayon2 = _Rayon ;
+  SpinBox_Cone_V2->setSingleStep(_Rayon/10.);
+
+  // Cone en angle
+  convertRayonAngle(1) ;
+  SpinBox_Cone_X1->setValue(_BoundaryAnXaxisCone);
+  SpinBox_Cone_Y1->setValue(_BoundaryAnYaxisCone);
+  SpinBox_Cone_Z1->setValue(_BoundaryAnZaxisCone);
+  SpinBox_Cone_V1->setValue(_BoundaryAngle);
+  SpinBox_Cone_X2->setValue(_BoundaryAnXorigCone);
+  SpinBox_Cone_Y2->setValue(_BoundaryAnYorigCone);
+  SpinBox_Cone_Z2->setValue(_BoundaryAnZorigCone);
+
+  // Tore
+  // . X du centre
+  SpinBoxToreXcent->setValue(_Xcentre);
+  SpinBoxToreXcent->setSingleStep(_Xincr);
+  // . Y du centre
+  SpinBoxToreYcent->setValue(_Ycentre);
+  SpinBoxToreYcent->setSingleStep(_Yincr);
+  // . Z du centre
+  SpinBoxToreZcent->setValue(_Zcentre);
+  SpinBoxToreZcent->setSingleStep(_Zincr);
+  // . X de l'axe
+  SpinBoxToreXaxe->setValue(0.);
+  SpinBoxToreXaxe->setSingleStep(0.1);
+  // . Y de l'axe
+  SpinBoxToreYaxe->setValue(0.);
+  SpinBoxToreYaxe->setSingleStep(0.1);
+  // . Z de l'axe
+  SpinBoxToreZaxe->setValue(1.);
+  SpinBoxToreZaxe->setSingleStep(0.1);
+  // . Rayon de revolution
+  SpinBoxToreRRev->setValue(_Rayon);
+  SpinBoxToreRRev->setSingleStep(_Rayon/10.);
+  // . Rayon primaire
+  SpinBoxToreRPri->setValue(_Rayon/3.);
+  SpinBoxToreRPri->setSingleStep(_Rayon/20.);
+}
+// ------------------------------------------------------------------------
+bool SMESH_CreateBoundaryAn::PushOnApply()
+// ------------------------------------------------------------------------
+// Appele lorsque l'un des boutons Ok ou Apply est presse
+//
+{
+  if (LEName->text().trimmed()=="")
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_BOUN_NAME") );
+    return false;
+  }
+
+  switch (_Type)
+  {
+      case 1 : // il s agit d un cylindre
+      {
+        if ((_BoundaryAnXcentre != SpinBox_Xcent->value())  ||
+            (_BoundaryAnYcentre != SpinBox_Ycent->value())  ||
+            (_BoundaryAnZcentre != SpinBox_Zcent->value())  ||
+            (_BoundaryAnRayon   != SpinBox_Radius->value()) ||
+            (_BoundaryAnXaxis   != SpinBox_Xaxis->value()) ||
+            (_BoundaryAnYaxis   != SpinBox_Yaxis->value()) ||
+            (_BoundaryAnZaxis   != SpinBox_Zaxis->value()) )
+        {
+          Chgt = true;
+          _BoundaryAnXaxis= SpinBox_Xaxis->value();
+          _BoundaryAnYaxis= SpinBox_Yaxis->value();
+          _BoundaryAnZaxis= SpinBox_Zaxis->value();
+          _BoundaryAnXcentre=SpinBox_Xcent->value();
+          _BoundaryAnYcentre=SpinBox_Ycent->value();
+          _BoundaryAnZcentre=SpinBox_Zcent->value();
+          _BoundaryAnRayon=SpinBox_Radius->value();
+        }
+        break;
+      }
+
+      case 2 : // il s agit d une sphere
+      {
+        if ((_BoundaryAnXcentre != SpinBox_Xcentre->value()) ||
+            (_BoundaryAnYcentre != SpinBox_Ycentre->value()) ||
+            (_BoundaryAnZcentre != SpinBox_Zcentre->value()) ||
+            (_BoundaryAnRayon   != SpinBox_Rayon->value())  )
+        {
+           Chgt = true;
+          _BoundaryAnXcentre=SpinBox_Xcentre->value();
+          _BoundaryAnYcentre=SpinBox_Ycentre->value();
+          _BoundaryAnZcentre=SpinBox_Zcentre->value();
+          _BoundaryAnRayon=SpinBox_Rayon->value();
+        }
+        break;
+      }
+
+      case 3 : // il s agit d un cone defini par un axe et un angle
+      {
+        if ((_BoundaryAnXaxisCone != SpinBox_Cone_X1->value())  ||
+            (_BoundaryAnYaxisCone != SpinBox_Cone_Y1->value())  ||
+            (_BoundaryAnZaxisCone != SpinBox_Cone_Z1->value())  ||
+            (_BoundaryAnXorigCone != SpinBox_Cone_X2->value())  ||
+            (_BoundaryAnYorigCone != SpinBox_Cone_Y2->value())  ||
+            (_BoundaryAnZorigCone != SpinBox_Cone_Z2->value())  ||
+            (_BoundaryAngle       != SpinBox_Cone_V1->value()) )
+        {
+           Chgt = true;
+          _BoundaryAnXaxisCone = SpinBox_Cone_X1->value() ;
+          _BoundaryAnYaxisCone = SpinBox_Cone_Y1->value() ;
+          _BoundaryAnZaxisCone = SpinBox_Cone_Z1->value() ;
+          _BoundaryAnXorigCone = SpinBox_Cone_X2->value() ;
+          _BoundaryAnYorigCone = SpinBox_Cone_Y2->value() ;
+          _BoundaryAnZorigCone = SpinBox_Cone_Z2->value() ;
+          _BoundaryAngle       = SpinBox_Cone_V1->value() ;
+        }
+        break;
+      }
+
+      case 4 : // il s agit d un cone defini par les 2 rayons
+      {
+        if ((_BoundaryAnXcone1 != SpinBox_Cone_X1->value())  ||
+            (_BoundaryAnYcone1 != SpinBox_Cone_Y1->value())  ||
+            (_BoundaryAnZcone1 != SpinBox_Cone_Z1->value())  ||
+            (_BoundaryAnRayon1 != SpinBox_Cone_V1->value())  ||
+            (_BoundaryAnXcone2 != SpinBox_Cone_X2->value())  ||
+            (_BoundaryAnYcone2 != SpinBox_Cone_Y2->value())  ||
+            (_BoundaryAnZcone2 != SpinBox_Cone_Z2->value())  ||
+            (_BoundaryAnRayon2 != SpinBox_Cone_V2->value()) )
+        {
+           Chgt = true;
+          _BoundaryAnXcone1 = SpinBox_Cone_X1->value() ;
+          _BoundaryAnYcone1 = SpinBox_Cone_Y1->value() ;
+          _BoundaryAnZcone1 = SpinBox_Cone_Z1->value() ;
+          _BoundaryAnRayon1 = SpinBox_Cone_V1->value() ;
+          _BoundaryAnXcone2 = SpinBox_Cone_X2->value() ;
+          _BoundaryAnYcone2 = SpinBox_Cone_Y2->value() ;
+          _BoundaryAnZcone2 = SpinBox_Cone_Z2->value() ;
+          _BoundaryAnRayon2 = SpinBox_Cone_V2->value() ;
+        }
+        break;
+      }
+      case 5 : // il s agit d un tore
+      {
+        if ((_BoundaryAnToreXcentre != SpinBoxToreXcent->value())  ||
+            (_BoundaryAnToreYcentre != SpinBoxToreYcent->value())  ||
+            (_BoundaryAnToreZcentre != SpinBoxToreZcent->value())  ||
+            (_BoundaryAnToreRRev   != SpinBoxToreRRev->value()) ||
+            (_BoundaryAnToreRPri   != SpinBoxToreRPri->value()) ||
+            (_BoundaryAnToreXaxe   != SpinBoxToreXaxe->value()) ||
+            (_BoundaryAnToreYaxe   != SpinBoxToreYaxe->value()) ||
+            (_BoundaryAnToreZaxe   != SpinBoxToreZaxe->value()) )
+        {
+          Chgt = true;
+          _BoundaryAnToreXcentre= SpinBoxToreXcent->value();
+          _BoundaryAnToreYcentre= SpinBoxToreYcent->value();
+          _BoundaryAnToreZcentre= SpinBoxToreZcent->value();
+          _BoundaryAnToreRRev=SpinBoxToreRRev->value();
+          _BoundaryAnToreRPri=SpinBoxToreRPri->value();
+          _BoundaryAnToreXaxe=SpinBoxToreXaxe->value();
+          _BoundaryAnToreYaxe=SpinBoxToreYaxe->value();
+          _BoundaryAnToreZaxe=SpinBoxToreZaxe->value();
+        }
+        break;
+      }
+
+ }
+
+// Controles
+// L'axe pour un cylindre
+  if ( _Type == 5 )
+  {
+    double daux = _BoundaryAnXaxis*_BoundaryAnXaxis + _BoundaryAnYaxis*_BoundaryAnYaxis + _BoundaryAnZaxis*_BoundaryAnZaxis ;
+    if ( daux < 0.0000001 )
+    {
+      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                QObject::tr("HOM_AXE") );
+      return false;
+    }
+  }
+
+  //
+  // Création ou mise à jour de la frontière
+  //
+  bool bOK = CreateOrUpdateBoundaryAn();
+
+  //if ( bOK ) { HOMARD_UTILS::updateObjBrowser() ; }
+
+  return bOK;
+
+}
+// ---------------------------------------------------
+bool SMESH_CreateBoundaryAn::CreateOrUpdateBoundaryAn()
+//----------------------------------------------------
+//  Creation de l'objet boundary
+{
+  MESSAGE("Debut de CreateOrUpdateBoundaryAn avec _Type ="<<_Type<<", _Name ="<<_Name.toStdString().c_str()<<" et LEName ="<<LEName->text().trimmed().toStdString().c_str());
+//
+  if (_Name != LEName->text().trimmed())
+  {
+    _Name = LEName->text().trimmed() ;
+    try
+    {
+      switch (_Type)
+      {
+        case 1 : // il s agit d un cylindre
+        { aBoundaryAn = myHomardGen->CreateBoundaryCylinder(CORBA::string_dup(_Name.toStdString().c_str()), \
+            _BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnXaxis, _BoundaryAnYaxis, _BoundaryAnZaxis, _BoundaryAnRayon );
+          break;
+        }
+        case 2 : // il s agit d une sphere
+        { aBoundaryAn = myHomardGen->CreateBoundarySphere(CORBA::string_dup(_Name.toStdString().c_str()), \
+            _BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnRayon);
+          break;
+       }
+        case 3 : // il s agit d un cone defini par un axe et un angle
+        { aBoundaryAn = myHomardGen->CreateBoundaryConeA(CORBA::string_dup(_Name.toStdString().c_str()), \
+            _BoundaryAnXaxisCone, _BoundaryAnYaxisCone, _BoundaryAnZaxisCone, _BoundaryAngle, \
+            _BoundaryAnXorigCone, _BoundaryAnYorigCone, _BoundaryAnYorigCone);
+          break;
+        }
+        case 4 : // il s agit d un cone defini par les 2 rayons
+        { aBoundaryAn = myHomardGen->CreateBoundaryConeR(CORBA::string_dup(_Name.toStdString().c_str()), \
+            _BoundaryAnXcone1, _BoundaryAnYcone1, _BoundaryAnZcone1, _BoundaryAnRayon1, \
+            _BoundaryAnXcone2, _BoundaryAnYcone2, _BoundaryAnZcone2, _BoundaryAnRayon2);
+          break;
+        }
+        case 5 : // il s agit d un tore
+        { aBoundaryAn = myHomardGen->CreateBoundaryTorus(CORBA::string_dup(_Name.toStdString().c_str()), \
+            _BoundaryAnToreXcentre, _BoundaryAnToreYcentre, _BoundaryAnToreZcentre, _BoundaryAnToreXaxe, _BoundaryAnToreYaxe, _BoundaryAnToreZaxe, _BoundaryAnToreRRev, _BoundaryAnToreRPri );
+          break;
+        }
+      }
+    }
+    catch( SALOME::SALOME_Exception& S_ex )
+    {
+      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+      return false ;
+    }
+    _parent->AddBoundaryAn(_Name);
+
+    return true;
+  }
+  else {
+    QMessageBox::warning( 0, QObject::tr("HOM_WARNING"),
+                             QObject::tr("HOM_SELECT_OBJECT_4") );
+    return false ;
+  }
+  MESSAGE("Fin de CreateOrUpdateBoundaryAn");
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryAn::PushOnOK()
+// ------------------------------------------------------------------------
+{
+     if (PushOnApply()) this->close();
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryAn::PushOnHelp()
+// ------------------------------------------------------------------------
+{
+  SMESH::ShowHelpFile(QString("homard_create_boundary.html#analytical-boundary"));
+}
+
+// -----------------------------------
+void SMESH_CreateBoundaryAn::SetNewName()
+// -----------------------------------
+{
+// Recherche d'un nom par defaut qui n'existe pas encore
+
+  SMESHHOMARD::listeBoundarys_var MyObjects = myHomardGen->GetAllBoundarysName();
+  int num = 0; QString aName="";
+  while (aName=="" )
+  {
+    aName.setNum(num+1) ;
+    aName.insert(0, QString("Boun_")) ;
+    for ( int i=0; i<MyObjects->length(); i++)
+    {
+      if ( aName ==  QString(MyObjects[i]))
+      {
+        num ++ ;
+        aName = "" ;
+        break ;
+      }
+   }
+  }
+  LEName->setText(aName);
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryAn::SetCylinder()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SetCylinder");
+  gBCylindre->setVisible(1);
+  gBSphere->setVisible(0);
+  gBCone->setVisible(0);
+  gBTore->setVisible(0);
+//
+  _Type=1;
+//
+  adjustSize();
+//   MESSAGE("Fin de SetCylinder")
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryAn::SetSphere()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SetSphere");
+  gBCylindre->setVisible(0);
+  gBSphere->setVisible(1);
+  gBCone->setVisible(0);
+  gBTore->setVisible(0);
+//
+  _Type=2;
+//
+  adjustSize();
+//   MESSAGE("Fin de SetSphere")
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryAn::SetConeR()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SetConeR");
+//
+// Stockage et conversion des valeurs si elles ont change
+  if ((_BoundaryAnXaxisCone != SpinBox_Cone_X1->value())  ||
+      (_BoundaryAnYaxisCone != SpinBox_Cone_Y1->value())  ||
+      (_BoundaryAnZaxisCone != SpinBox_Cone_Z1->value())  ||
+      (_BoundaryAnXorigCone != SpinBox_Cone_X2->value())  ||
+      (_BoundaryAnYorigCone != SpinBox_Cone_Y2->value())  ||
+      (_BoundaryAnZorigCone != SpinBox_Cone_Z2->value())  ||
+      (_BoundaryAngle       != SpinBox_Cone_V1->value()) )
+  {
+    MESSAGE("Stockage et conversion");
+    _BoundaryAnXaxisCone = SpinBox_Cone_X1->value() ;
+    _BoundaryAnYaxisCone = SpinBox_Cone_Y1->value() ;
+    _BoundaryAnZaxisCone = SpinBox_Cone_Z1->value() ;
+    _BoundaryAnXorigCone = SpinBox_Cone_X2->value() ;
+    _BoundaryAnYorigCone = SpinBox_Cone_Y2->value() ;
+    _BoundaryAnZorigCone = SpinBox_Cone_Z2->value() ;
+    _BoundaryAngle       = SpinBox_Cone_V1->value() ;
+    convertRayonAngle(-1) ;
+  }
+//
+  _Type=4;
+//
+  TLCone_X1->setText(QApplication::translate("CreateBoundaryAn", "X centre 1", 0));
+  SpinBox_Cone_X1->setValue(_BoundaryAnXcone1);
+  TLCone_Y1->setText(QApplication::translate("CreateBoundaryAn", "Y centre 1", 0));
+  SpinBox_Cone_Y1->setValue(_BoundaryAnYcone1);
+  TLCone_Z1->setText(QApplication::translate("CreateBoundaryAn", "Z centre 1", 0));
+  SpinBox_Cone_Z1->setValue(_BoundaryAnZcone1);
+//
+  TLCone_V1->setText(QApplication::translate("CreateBoundaryAn", "Radius 1", 0));
+  SpinBox_Cone_V1->setSingleStep(_Rayon/10.);
+  SpinBox_Cone_V1->setMaximum(100000.*_DMax);
+  SpinBox_Cone_V1->setValue(_BoundaryAnRayon1);
+//
+  TLCone_X2->setText(QApplication::translate("CreateBoundaryAn", "X centre 2", 0));
+  SpinBox_Cone_X2->setValue(_BoundaryAnXcone2);
+  TLCone_Y2->setText(QApplication::translate("CreateBoundaryAn", "Y centre 2", 0));
+  SpinBox_Cone_Y2->setValue(_BoundaryAnYcone2);
+  TLCone_Z2->setText(QApplication::translate("CreateBoundaryAn", "Z centre 2", 0));
+  SpinBox_Cone_Z2->setValue(_BoundaryAnZcone2);
+//
+  TLCone_V2->setVisible(1);
+  SpinBox_Cone_V2->setVisible(1);
+  TLCone_V2->setText(QApplication::translate("CreateBoundaryAn", "Radius 2", 0));
+  SpinBox_Cone_V2->setValue(_BoundaryAnRayon2);
+//
+//   MESSAGE("Fin de SetConeR")
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryAn::SetConeA()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SetConeA");
+// Stockage et conversion des valeurs si elles ont change
+  if ((_BoundaryAnXcone1 != SpinBox_Cone_X1->value())  ||
+      (_BoundaryAnYcone1 != SpinBox_Cone_Y1->value())  ||
+      (_BoundaryAnZcone1 != SpinBox_Cone_Z1->value())  ||
+      (_BoundaryAnRayon1 != SpinBox_Cone_V1->value())  ||
+      (_BoundaryAnXcone2 != SpinBox_Cone_X2->value())  ||
+      (_BoundaryAnYcone2 != SpinBox_Cone_Y2->value())  ||
+      (_BoundaryAnZcone2 != SpinBox_Cone_Z2->value())  ||
+      (_BoundaryAnRayon2 != SpinBox_Cone_V2->value()) )
+  {
+    MESSAGE("Stockage et conversion");
+    _BoundaryAnXcone1 = SpinBox_Cone_X1->value() ;
+    _BoundaryAnYcone1 = SpinBox_Cone_Y1->value() ;
+    _BoundaryAnZcone1 = SpinBox_Cone_Z1->value() ;
+    _BoundaryAnRayon1 = SpinBox_Cone_V1->value() ;
+    _BoundaryAnXcone2 = SpinBox_Cone_X2->value() ;
+    _BoundaryAnYcone2 = SpinBox_Cone_Y2->value() ;
+    _BoundaryAnZcone2 = SpinBox_Cone_Z2->value() ;
+    _BoundaryAnRayon2 = SpinBox_Cone_V2->value() ;
+    convertRayonAngle(1) ;
+  }
+//
+  _Type=3;
+//
+  TLCone_X1->setText(QApplication::translate("CreateBoundaryAn", "X axis", 0));
+  SpinBox_Cone_X1->setValue(_BoundaryAnXaxisCone);
+  TLCone_Y1->setText(QApplication::translate("CreateBoundaryAn", "Y axis", 0));
+  SpinBox_Cone_Y1->setValue(_BoundaryAnYaxisCone);
+  TLCone_Z1->setText(QApplication::translate("CreateBoundaryAn", "Z axis", 0));
+  SpinBox_Cone_Z1->setValue(_BoundaryAnZaxisCone);
+//
+  TLCone_X2->setText(QApplication::translate("CreateBoundaryAn", "X centre", 0));
+  SpinBox_Cone_X2->setValue(_BoundaryAnXorigCone);
+  TLCone_Y2->setText(QApplication::translate("CreateBoundaryAn", "Y centre", 0));
+  SpinBox_Cone_Y2->setValue(_BoundaryAnYorigCone);
+  TLCone_Z2->setText(QApplication::translate("CreateBoundaryAn", "Z centre", 0));
+  SpinBox_Cone_Z2->setValue(_BoundaryAnZorigCone);
+//
+  TLCone_V1->setText(QApplication::translate("CreateBoundaryAn", "Angle", 0));
+  SpinBox_Cone_V1->setValue(_BoundaryAngle);
+  SpinBox_Cone_V1->setSingleStep(1.);
+  SpinBox_Cone_V1->setMaximum(90.);
+//
+  TLCone_V2->setVisible(0);
+  SpinBox_Cone_V2->setVisible(0);
+//   MESSAGE("Fin de SetConeA")
+}
+
+
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryAn::SetCone()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SetCone");
+  gBCylindre->setVisible(0);
+  gBSphere->setVisible(0);
+  gBCone->setVisible(1);
+  gBTore->setVisible(0);
+//
+  if ( RB_Def_radius->isChecked() )
+  {
+    SetConeR();
+  }
+  else
+  {
+    SetConeA();
+  }
+//
+  adjustSize();
+//   MESSAGE("Fin de SetCone")
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryAn::SetTore()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SetTore");
+  gBCylindre->setVisible(0);
+  gBSphere->setVisible(0);
+  gBCone->setVisible(0);
+  gBTore->setVisible(1);
+//
+  _Type=5;
+//
+  adjustSize();
+//   MESSAGE("Fin de SetTore")
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryAn::convertRayonAngle(int option)
+// ------------------------------------------------------------------------
+// Conversion entre les deux formulations du cone :
+// par deux rayons ou avec un axe et un angle.
+// Voir sfcoi1 de HOMARD
+{
+  MESSAGE("Debut de convertRayonAngle, option = "<<option);
+//
+//         o
+//         !    .
+//         !        .
+//       RA!            .
+//         !                o
+//         !              RB!   .
+//         !                !       .
+//         A----------------B----------O
+//
+//   Thales : RA/RB = AO/BO  ==> BO = AB*RB/(RA-RB)
+//   Angle  : tg(alpha) = RA/AO
+//
+  double daux ;
+// De rayon vers angle :
+  if ( option == 1 )
+  {
+    double xa, ya, za, ra ;
+    double xb, yb, zb, rb ;
+// Positionnement de A vers B, avec RA>RB
+    if ( _BoundaryAnRayon1 > _BoundaryAnRayon2 )
+    {
+      xa = _BoundaryAnXcone1 ;
+      ya = _BoundaryAnYcone1 ;
+      za = _BoundaryAnZcone1 ;
+      ra = _BoundaryAnRayon1 ;
+      xb = _BoundaryAnXcone2 ;
+      yb = _BoundaryAnYcone2 ;
+      zb = _BoundaryAnZcone2 ;
+      rb = _BoundaryAnRayon2 ;
+    }
+    else
+    {
+      xa = _BoundaryAnXcone2 ;
+      ya = _BoundaryAnYcone2 ;
+      za = _BoundaryAnZcone2 ;
+      ra = _BoundaryAnRayon2 ;
+      xb = _BoundaryAnXcone1 ;
+      yb = _BoundaryAnYcone1 ;
+      zb = _BoundaryAnZcone1 ;
+      rb = _BoundaryAnRayon1 ;
+    }
+// Axe : relie les deux centres, de A vers B.  L'axe est normalise
+    _BoundaryAnXaxisCone = xb - xa ;
+    _BoundaryAnYaxisCone = yb - ya ;
+    _BoundaryAnZaxisCone = zb - za ;
+    daux = sqrt ( _BoundaryAnXaxisCone*_BoundaryAnXaxisCone + _BoundaryAnYaxisCone*_BoundaryAnYaxisCone + _BoundaryAnZaxisCone*_BoundaryAnZaxisCone ) ;
+    _BoundaryAnXaxisCone = _BoundaryAnXaxisCone/daux ;
+    _BoundaryAnYaxisCone = _BoundaryAnYaxisCone/daux ;
+    _BoundaryAnZaxisCone = _BoundaryAnZaxisCone/daux ;
+// Origine
+    daux = daux * rb / (ra-rb) ;
+    _BoundaryAnXorigCone = xb + daux*_BoundaryAnXaxisCone ;
+    _BoundaryAnYorigCone = yb + daux*_BoundaryAnYaxisCone ;
+    _BoundaryAnZorigCone = zb + daux*_BoundaryAnZaxisCone ;
+// Angle en degre
+    daux = ra / sqrt((_BoundaryAnXorigCone-xa)*(_BoundaryAnXorigCone-xa) + (_BoundaryAnYorigCone-ya)*(_BoundaryAnYorigCone-ya) + (_BoundaryAnZorigCone-za)*(_BoundaryAnZorigCone-za) ) ;
+    _BoundaryAngle = atan(daux)*180./PI ;
+  }
+// D'angle vers rayon :
+  else
+  {
+    double xax, yax, zax ;
+// L'axe est normalise
+    daux = sqrt ( _BoundaryAnXaxisCone*_BoundaryAnXaxisCone + _BoundaryAnYaxisCone*_BoundaryAnYaxisCone + _BoundaryAnZaxisCone*_BoundaryAnZaxisCone ) ;
+    xax = _BoundaryAnXaxisCone/daux ;
+    yax = _BoundaryAnYaxisCone/daux ;
+    zax = _BoundaryAnZaxisCone/daux ;
+// Centre 1 : l'origine
+    _BoundaryAnXcone1 = _BoundaryAnXorigCone ;
+    _BoundaryAnYcone1 = _BoundaryAnYorigCone ;
+    _BoundaryAnZcone1 = _BoundaryAnZorigCone ;
+// Rayon 1 : nul
+    _BoundaryAnRayon1 = 0. ;
+// Centre 2 : l'origine decalee d'une longueur arbitraire le long de l'axe
+    _BoundaryAnXcone2 = _BoundaryAnXorigCone + _DMax*xax ;
+    _BoundaryAnYcone2 = _BoundaryAnYorigCone + _DMax*yax ;
+    _BoundaryAnZcone2 = _BoundaryAnZorigCone + _DMax*zax ;
+// Rayon 2 : a calculer
+    _BoundaryAnRayon2 = _DMax*tan(_BoundaryAngle*PI/180.) ;
+  }
+//   MESSAGE("Fin de convertRayonAngle")
+}
+
+// -------------------------------------------------------------------------------
+SMESH_CreateBoundaryCAO::SMESH_CreateBoundaryCAO(SMESHGUI_HomardAdaptDlg* parent, bool modal,
+                                                 SMESHHOMARD::HOMARD_Gen_var myHomardGen0,
+                                                 QString caseName, QString aName)
+// ---------------------------------------------------------------------------------
+/* Constructs a SMESH_CreateBoundaryCAO */
+    :
+    QDialog(0), SMESH_Ui_CreateBoundaryCAO(),
+    _parent(parent), _aName(aName),
+    myHomardGen(SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen0))
+    {
+      MESSAGE("Constructeur");
+      setupUi(this);
+      setModal(modal);
+      InitConnect();
+
+     if ( _aName == QString("") ) {SetNewName();};
+    }
+
+// ------------------------------------------------------------------------
+SMESH_CreateBoundaryCAO::~SMESH_CreateBoundaryCAO()
+// ------------------------------------------------------------------------
+{
+    // no need to delete child widgets, Qt does it all for us
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryCAO::InitConnect()
+// ------------------------------------------------------------------------
+{
+    connect( PushFichier,  SIGNAL(pressed()), this, SLOT(SetCAOFile()));
+    connect( buttonOk,     SIGNAL(pressed()), this, SLOT( PushOnOK()));
+    connect( buttonApply,  SIGNAL(pressed()), this, SLOT( PushOnApply()));
+    connect( buttonCancel, SIGNAL(pressed()), this, SLOT(close()));
+    connect( buttonHelp,   SIGNAL(pressed()), this, SLOT( PushOnHelp()));
+    connect( CBGroupe,     SIGNAL(stateChanged(int)), this, SLOT( SetFiltrage()));
+}
+
+// ------------------------------------------------------------------------
+bool SMESH_CreateBoundaryCAO::PushOnApply()
+// ------------------------------------------------------------------------
+// Appele lorsque l'un des boutons Ok ou Apply est presse
+//
+{
+// Verifications
+
+  QString aName=LEName->text().trimmed();
+  if (aName=="") {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_BOUN_NAME") );
+    return false;
+  }
+
+//  La CAO
+  QString aCAOFile=LEFileName->text().trimmed();
+  if (aCAOFile ==QString(""))
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_BOUN_CAO") );
+    return false;
+  }
+
+// Creation de l'objet CORBA si ce n'est pas deja fait sous le meme nom
+  if ( _aName != aName )
+  {
+   try
+   {
+     _aName=aName;
+     aBoundary=myHomardGen->CreateBoundaryCAO(CORBA::string_dup(_aName.toStdString().c_str()), aCAOFile.toStdString().c_str());
+     _parent->AddBoundaryCAO(_aName);
+   }
+   catch( SALOME::SALOME_Exception& S_ex )
+   {
+      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+      return false;
+   }
+  }
+
+// Les groupes
+  AssocieLesGroupes();
+
+  //HOMARD_UTILS::updateObjBrowser();
+  return true;
+}
+
+
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryCAO::PushOnOK()
+// ------------------------------------------------------------------------
+{
+     if (PushOnApply()) this->close();
+     if ( _parent ) { _parent->raise(); _parent->activateWindow(); };
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryCAO::PushOnHelp()
+// ------------------------------------------------------------------------
+{
+  SMESH::ShowHelpFile(QString("homard_create_boundary.html#cao-boundary"));
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryCAO::AssocieLesGroupes()
+// ------------------------------------------------------------------------
+{
+  SMESHHOMARD::ListGroupType_var aSeqGroupe = new SMESHHOMARD::ListGroupType;
+  aSeqGroupe->length(_listeGroupesBoundary.size());
+  QStringList::const_iterator it;
+  int i=0;
+  for (it = _listeGroupesBoundary.constBegin(); it != _listeGroupesBoundary.constEnd(); it++)
+     aSeqGroupe[i++]=(*it).toStdString().c_str();
+  aBoundary->SetGroups(aSeqGroupe);
+
+}
+
+// -------------------------------------------------
+void SMESH_CreateBoundaryCAO::SetNewName()
+// --------------------------------------------------
+{
+
+  SMESHHOMARD::listeBoundarys_var  MyObjects = myHomardGen->GetAllBoundarysName();
+  int num = 0; QString aName="";
+  while (aName == QString("") )
+  {
+    aName.setNum(num+1) ;
+    aName.insert(0, QString("Boun_")) ;
+    for ( int i=0; i<MyObjects->length(); i++)
+    {
+      if ( aName ==  QString(MyObjects[i]))
+      {
+        num ++ ;
+        aName = "" ;
+        break ;
+      }
+   }
+  }
+  LEName->setText(aName);
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryCAO::SetCAOFile()
+// ------------------------------------------------------------------------
+{
+  QString aCAOFile = SMESH_HOMARD_QT_COMMUN::PushNomFichier( false, QString("xao") );
+  if (!(aCAOFile.isEmpty())) LEFileName->setText(aCAOFile);
+}
+
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryCAO::setGroups (QStringList listGroup)
+// ------------------------------------------------------------------------
+{
+    _listeGroupesBoundary = listGroup;
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryCAO::SetFiltrage()
+// ------------------------------------------------------------------------
+{
+  if (!CBGroupe->isChecked()) return;
+
+  SMESH_CreateListGroupCAO *aDlg = new SMESH_CreateListGroupCAO
+    (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen),
+     "Case_1", _listeGroupesBoundary);
+  aDlg->show();
+}
+
+// -------------------------------------------------------------------------------
+SMESH_CreateBoundaryDi::SMESH_CreateBoundaryDi(SMESHGUI_HomardAdaptDlg* parent, bool modal,
+                                               SMESHHOMARD::HOMARD_Gen_var myHomardGen0,
+                                               QString caseName, QString aName)
+// ---------------------------------------------------------------------------------
+/* Constructs a SMESH_CreateBoundaryDi */
+    :
+    QDialog(0), SMESH_Ui_CreateBoundaryDi(),
+    _parent(parent), _aName(aName),
+    myHomardGen(SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen0))
+    {
+      MESSAGE("Constructeur") ;
+      setupUi(this);
+      setModal(modal);
+      InitConnect();
+
+     if ( _aName == QString("") ) {SetNewName();};
+    }
+
+// ------------------------------------------------------------------------
+SMESH_CreateBoundaryDi::~SMESH_CreateBoundaryDi()
+// ------------------------------------------------------------------------
+{
+    // no need to delete child widgets, Qt does it all for us
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryDi::InitConnect()
+// ------------------------------------------------------------------------
+{
+    connect( PushFichier,  SIGNAL(pressed()), this, SLOT(SetMeshFile()));
+    connect( buttonOk,     SIGNAL(pressed()), this, SLOT( PushOnOK()));
+    connect( buttonApply,  SIGNAL(pressed()), this, SLOT( PushOnApply()));
+    connect( buttonCancel, SIGNAL(pressed()), this, SLOT(close()));
+    connect( buttonHelp,   SIGNAL(pressed()), this, SLOT( PushOnHelp()));
+    connect( CBGroupe,     SIGNAL(stateChanged(int)), this, SLOT( SetFiltrage()));
+}
+
+// ------------------------------------------------------------------------
+bool SMESH_CreateBoundaryDi::PushOnApply()
+// ------------------------------------------------------------------------
+// Appele lorsque l'un des boutons Ok ou Apply est presse
+//
+{
+// Verifications
+
+  QString aName=LEName->text().trimmed();
+  if (aName=="") {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_BOUN_NAME") );
+    return false;
+  }
+
+//  Le maillage de la frontiere discrete
+  QString aMeshFile=LEFileName->text().trimmed();
+  if (aMeshFile ==QString(""))
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_BOUN_MESH") );
+    return false;
+  }
+
+  //  Le nom du maillage de la frontiere discrete
+  QString aMeshName = SMESH_HOMARD_QT_COMMUN::LireNomMaillage(aMeshFile);
+  if (aMeshName == "" )
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_MED_FILE_2") );
+    return false;
+  }
+
+// Creation de l'objet CORBA si ce n'est pas deja fait sous le meme nom
+  if ( _aName != aName )
+  {
+   try
+   {
+     _aName=aName;
+     aBoundary=myHomardGen->CreateBoundaryDi(CORBA::string_dup(_aName.toStdString().c_str()), aMeshName.toStdString().c_str(), aMeshFile.toStdString().c_str());
+     _parent->AddBoundaryDi(_aName);
+   }
+   catch( SALOME::SALOME_Exception& S_ex )
+   {
+      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+      return false;
+   }
+  }
+
+// Les groupes
+  AssocieLesGroupes();
+
+  //HOMARD_UTILS::updateObjBrowser();
+  return true;
+}
+
+
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryDi::PushOnOK()
+// ------------------------------------------------------------------------
+{
+     if (PushOnApply()) this->close();
+     if ( _parent ) { _parent->raise(); _parent->activateWindow(); };
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryDi::PushOnHelp()
+// ------------------------------------------------------------------------
+{
+  SMESH::ShowHelpFile(QString("homard_create_boundary.html#discrete-boundary"));
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryDi::AssocieLesGroupes()
+// ------------------------------------------------------------------------
+{
+  SMESHHOMARD::ListGroupType_var aSeqGroupe = new SMESHHOMARD::ListGroupType;
+  aSeqGroupe->length(_listeGroupesBoundary.size());
+  QStringList::const_iterator it;
+  int i=0;
+  for (it = _listeGroupesBoundary.constBegin(); it != _listeGroupesBoundary.constEnd(); it++)
+     aSeqGroupe[i++]=(*it).toStdString().c_str();
+  aBoundary->SetGroups(aSeqGroupe);
+
+}
+
+// -------------------------------------------------
+void SMESH_CreateBoundaryDi::SetNewName()
+// --------------------------------------------------
+{
+
+  SMESHHOMARD::listeBoundarys_var  MyObjects = myHomardGen->GetAllBoundarysName();
+  int num = 0; QString aName="";
+  while (aName == QString("") )
+  {
+    aName.setNum(num+1) ;
+    aName.insert(0, QString("Boun_")) ;
+    for ( int i=0; i<MyObjects->length(); i++)
+    {
+      if ( aName ==  QString(MyObjects[i]))
+      {
+        num ++ ;
+        aName = "" ;
+        break ;
+      }
+   }
+  }
+  LEName->setText(aName);
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryDi::SetMeshFile()
+// ------------------------------------------------------------------------
+{
+  QString aMeshFile = SMESH_HOMARD_QT_COMMUN::PushNomFichier( false, QString("med") );
+  if (!(aMeshFile.isEmpty())) LEFileName->setText(aMeshFile);
+}
+
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryDi::setGroups (QStringList listGroup)
+// ------------------------------------------------------------------------
+{
+    _listeGroupesBoundary = listGroup;
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateBoundaryDi::SetFiltrage()
+// // ------------------------------------------------------------------------
+{
+  if (!CBGroupe->isChecked()) return;
+
+  SMESH_CreateListGroup *aDlg = new SMESH_CreateListGroup
+    (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen),
+     "Case_1", _listeGroupesBoundary);
+  aDlg->show();
+}
+
+// ------------------------------------------------------------------------
+SMESH_EditBoundaryAn::SMESH_EditBoundaryAn( SMESHGUI_HomardAdaptDlg* parent, bool modal,
+                                            SMESHHOMARD::HOMARD_Gen_var myHomardGen0,
+                                            QString caseName, QString Name ):
+// ------------------------------------------------------------------------
+/* Constructs a SMESH_EditBoundaryAn
+    herite de SMESH_CreateBoundaryAn
+*/
+    SMESH_CreateBoundaryAn(parent, myHomardGen0, caseName)
+{
+    MESSAGE("Debut de SMESH_EditBoundaryAn pour " << Name.toStdString().c_str());
+    setWindowTitle(QObject::tr("HOM_BOUN_A_EDIT_WINDOW_TITLE"));
+    _Name=Name;
+    aBoundaryAn = myHomardGen->GetBoundary(_Name.toStdString().c_str());
+    InitValEdit();
+}
+// ------------------------------------------------------------------------
+SMESH_EditBoundaryAn::~SMESH_EditBoundaryAn()
+// ------------------------------------------------------------------------
+{
+    // no need to delete child widgets, Qt does it all for us
+}
+// ------------------------------------------------------------------------
+void SMESH_EditBoundaryAn::InitValEdit()
+// ------------------------------------------------------------------------
+{
+  LEName->setText(_Name);
+  LEName->setReadOnly(true);
+  _Type = aBoundaryAn->GetType();
+  MESSAGE("_Type : "<<_Type);
+  InitValBoundaryAnLimit();
+  InitValBoundaryAn();
+  switch (_Type)
+  {
+    case 1 : // il s agit d un cylindre
+    {
+      InitValBoundaryAnCylindre();
+      SetCylinder();
+      break;
+    }
+    case 2: // il s agit d une sphere
+    {
+      InitValBoundaryAnSphere();
+      SetSphere();
+      break;
+    }
+    case 3: // il s agit d un cone defini par un axe et un angle
+    {
+      InitValBoundaryAnConeA();
+      SetConeA();
+      break;
+    }
+    case 4: // il s agit d un cone defini par les 2 rayons
+    {
+      InitValBoundaryAnConeR();
+      SetConeR();
+      break;
+    }
+    case 5: // il s agit d un tore
+    {
+      InitValBoundaryAnTore();
+      SetTore();
+      break;
+    }
+  };
+}
+// ------------------------------------------------------------------------
+void SMESH_EditBoundaryAn::InitValBoundaryAnLimit()
+// ------------------------------------------------------------------------
+{
+  SMESHHOMARD::double_array_var  mesCoordLimits = aBoundaryAn->GetLimit();
+  ASSERT(mesCoordLimits->length() == 3 );
+  _Xincr=mesCoordLimits[0];
+  _Yincr=mesCoordLimits[1];
+  _Zincr=mesCoordLimits[2];
+}
+// ------------------------------------------------------------------------
+void SMESH_EditBoundaryAn::InitValBoundaryAnCylindre()
+// ------------------------------------------------------------------------
+{
+  SMESHHOMARD::double_array_var  mesCoordBoundary = aBoundaryAn->GetCoords();
+  ASSERT(mesCoordBoundary->length() == 7 );
+  _BoundaryAnXcentre=mesCoordBoundary[0];
+  _BoundaryAnYcentre=mesCoordBoundary[1];
+  _BoundaryAnZcentre=mesCoordBoundary[2];
+  _BoundaryAnXaxis=mesCoordBoundary[3];
+  _BoundaryAnYaxis=mesCoordBoundary[4];
+  _BoundaryAnZaxis=mesCoordBoundary[5];
+  _BoundaryAnRayon=mesCoordBoundary[6];
+}
+// ------------------------------------------------------------------------
+void SMESH_EditBoundaryAn::InitValBoundaryAnSphere()
+// ------------------------------------------------------------------------
+{
+  SMESHHOMARD::double_array_var  mesCoordBoundary = aBoundaryAn->GetCoords();
+  ASSERT(mesCoordBoundary->length() == 4 );
+  _BoundaryAnXcentre=mesCoordBoundary[0];
+  _BoundaryAnYcentre=mesCoordBoundary[1];
+  _BoundaryAnZcentre=mesCoordBoundary[2];
+  _BoundaryAnRayon=mesCoordBoundary[3];
+}
+// ------------------------------------------------------------------------
+void SMESH_EditBoundaryAn::InitValBoundaryAnConeA()
+// ------------------------------------------------------------------------
+{
+  SMESHHOMARD::double_array_var  mesCoordBoundary = aBoundaryAn->GetCoords();
+  ASSERT(mesCoordBoundary->length() == 7 );
+  _BoundaryAnXaxisCone=mesCoordBoundary[0];
+  _BoundaryAnYaxisCone=mesCoordBoundary[1];
+  _BoundaryAnZaxisCone=mesCoordBoundary[2];
+  _BoundaryAngle=mesCoordBoundary[3];
+  _BoundaryAnXorigCone=mesCoordBoundary[4];
+  _BoundaryAnYorigCone=mesCoordBoundary[5];
+  _BoundaryAnZorigCone=mesCoordBoundary[6];
+  convertRayonAngle(-1) ;
+}
+// ------------------------------------------------------------------------
+void SMESH_EditBoundaryAn::InitValBoundaryAnConeR()
+// ------------------------------------------------------------------------
+{
+  SMESHHOMARD::double_array_var  mesCoordBoundary = aBoundaryAn->GetCoords();
+  ASSERT(mesCoordBoundary->length() == 8 );
+  _BoundaryAnXcone1=mesCoordBoundary[0];
+  _BoundaryAnYcone1=mesCoordBoundary[1];
+  _BoundaryAnZcone1=mesCoordBoundary[2];
+  _BoundaryAnRayon1=mesCoordBoundary[3];
+  _BoundaryAnXcone2=mesCoordBoundary[4];
+  _BoundaryAnYcone2=mesCoordBoundary[5];
+  _BoundaryAnZcone2=mesCoordBoundary[6];
+  _BoundaryAnRayon2=mesCoordBoundary[7];
+  convertRayonAngle(1) ;
+}
+// ------------------------------------------------------------------------
+void SMESH_EditBoundaryAn::InitValBoundaryAnTore()
+// ------------------------------------------------------------------------
+{
+  SMESHHOMARD::double_array_var  mesCoordBoundary = aBoundaryAn->GetCoords();
+  ASSERT(mesCoordBoundary->length() == 8 );
+  _BoundaryAnXcentre=mesCoordBoundary[0];
+  _BoundaryAnYcentre=mesCoordBoundary[1];
+  _BoundaryAnZcentre=mesCoordBoundary[2];
+  _BoundaryAnXaxis=mesCoordBoundary[3];
+  _BoundaryAnYaxis=mesCoordBoundary[4];
+  _BoundaryAnZaxis=mesCoordBoundary[5];
+  _BoundaryAnRayon1=mesCoordBoundary[6];
+  _BoundaryAnRayon2=mesCoordBoundary[7];
+}
+// ------------------------------------------------------------------------
+void SMESH_EditBoundaryAn::SetCylinder()
+// ------------------------------------------------------------------------
+{
+  gBCylindre->setVisible(1);
+  gBSphere->setVisible(0);
+  gBCone->setVisible(0);
+  gBTore->setVisible(0);
+  RBCylindre->setChecked(1);
+  _Type=1;
+  RBSphere->setDisabled(true);
+  RBCone->setDisabled(true);
+  RBTore->setDisabled(true);
+
+  SpinBox_Xcent->setValue(_BoundaryAnXcentre);
+  SpinBox_Ycent->setValue(_BoundaryAnYcentre);
+  SpinBox_Zcent->setValue(_BoundaryAnZcentre);
+
+  SpinBox_Xaxis->setValue(_BoundaryAnXaxis);
+  SpinBox_Yaxis->setValue(_BoundaryAnYaxis);
+  SpinBox_Zaxis->setValue(_BoundaryAnZaxis);
+
+
+  SpinBox_Xaxis->setSingleStep(0.1);
+  SpinBox_Xcentre->setSingleStep(_Xincr);
+  SpinBox_Yaxis->setSingleStep(0.1);
+  SpinBox_Ycentre->setSingleStep(_Yincr);
+  SpinBox_Zaxis->setSingleStep(0.1);
+  SpinBox_Zcentre->setSingleStep(_Zincr);
+// Rayon
+  SpinBox_Radius->setValue(_BoundaryAnRayon);
+  SpinBox_Radius->setSingleStep(_BoundaryAnRayon/10.);
+//
+  adjustSize();
+}
+// ------------------------------------------------------------------------
+void SMESH_EditBoundaryAn::SetSphere()
+// ------------------------------------------------------------------------
+{
+  gBCylindre->setVisible(0);
+  gBSphere->setVisible(1);
+  RBSphere->setChecked(1);
+  gBCone->setVisible(0);
+  gBTore->setVisible(0);
+  RBCylindre->setDisabled(true);
+  RBCone->setDisabled(true);
+  RBTore->setDisabled(true);
+  _Type=2 ;
+
+  SpinBox_Xcentre->setValue(_BoundaryAnXcentre);
+  if ( _Xincr > 0) { SpinBox_Xcentre->setSingleStep(_Xincr); }
+  else             { SpinBox_Xcentre->setSingleStep(1) ; }
+
+  SpinBox_Ycentre->setValue(_BoundaryAnYcentre);
+  if ( _Yincr > 0) { SpinBox_Ycentre->setSingleStep(_Yincr); }
+  else             { SpinBox_Ycentre->setSingleStep(1) ; }
+
+  SpinBox_Zcentre->setValue(_BoundaryAnZcentre);
+  if ( _Zincr > 0) { SpinBox_Zcentre->setSingleStep(_Zincr); }
+  else             { SpinBox_Zcentre->setSingleStep(1);}
+
+  SpinBox_Rayon->setValue(_BoundaryAnRayon);
+//
+  adjustSize();
+}
+// ------------------------------------------------------------------------
+void SMESH_EditBoundaryAn::SetConeA()
+// ------------------------------------------------------------------------
+{
+  gBCylindre->setVisible(0);
+  gBSphere->setVisible(0);
+  gBCone->setVisible(1);
+  RBCone->setChecked(1);
+  gBTore->setVisible(0);
+  RB_Def_angle->setChecked(1);
+  RBCylindre->setDisabled(true);
+  RBSphere->setDisabled(true);
+  RBTore->setDisabled(true);
+  _Type=3;
+//
+  TLCone_X1->setText(QApplication::translate("CreateBoundaryAn", "X axis", 0));
+  SpinBox_Cone_X1->setValue(_BoundaryAnXaxisCone);
+  TLCone_Y1->setText(QApplication::translate("CreateBoundaryAn", "Y axis", 0));
+  SpinBox_Cone_Y1->setValue(_BoundaryAnYaxisCone);
+  TLCone_Z1->setText(QApplication::translate("CreateBoundaryAn", "Z axis", 0));
+  SpinBox_Cone_Z1->setValue(_BoundaryAnZaxisCone);
+//
+  TLCone_X2->setText(QApplication::translate("CreateBoundaryAn", "X centre", 0));
+  SpinBox_Cone_X2->setValue(_BoundaryAnXorigCone);
+  TLCone_Y2->setText(QApplication::translate("CreateBoundaryAn", "Y centre", 0));
+  SpinBox_Cone_Y2->setValue(_BoundaryAnYorigCone);
+  TLCone_Z2->setText(QApplication::translate("CreateBoundaryAn", "Z centre", 0));
+  SpinBox_Cone_Z2->setValue(_BoundaryAnZorigCone);
+//
+  TLCone_V1->setText(QApplication::translate("CreateBoundaryAn", "Angle", 0));
+  SpinBox_Cone_V1->setValue(_BoundaryAngle);
+  SpinBox_Cone_V1->setSingleStep(1.);
+  SpinBox_Cone_V1->setMaximum(90.);
+//
+  TLCone_V2->setVisible(0);
+  SpinBox_Cone_V2->setVisible(0);
+//
+  adjustSize();
+}
+// ------------------------------------------------------------------------
+void SMESH_EditBoundaryAn::SetConeR()
+// ------------------------------------------------------------------------
+{
+  gBCylindre->setVisible(0);
+  gBSphere->setVisible(0);
+  gBCone->setVisible(1);
+  gBTore->setVisible(0);
+  RBCone->setChecked(1);
+  RB_Def_radius->setChecked(1);
+  RBCylindre->setDisabled(true);
+  RBSphere->setDisabled(true);
+  RBTore->setDisabled(true);
+  _Type=4;
+//
+  TLCone_X1->setText(QApplication::translate("CreateBoundaryAn", "X centre 1", 0));
+  SpinBox_Cone_X1->setValue(_BoundaryAnXcone1);
+  TLCone_Y1->setText(QApplication::translate("CreateBoundaryAn", "Y centre 1", 0));
+  SpinBox_Cone_Y1->setValue(_BoundaryAnYcone1);
+  TLCone_Z1->setText(QApplication::translate("CreateBoundaryAn", "Z centre 1", 0));
+  SpinBox_Cone_Z1->setValue(_BoundaryAnZcone1);
+//
+  TLCone_V1->setText(QApplication::translate("CreateBoundaryAn", "Radius 1", 0));
+  SpinBox_Cone_V1->setSingleStep(_Rayon/10.);
+  SpinBox_Cone_V1->setMaximum(100000.*_DMax);
+  SpinBox_Cone_V1->setValue(_BoundaryAnRayon1);
+//
+  TLCone_X2->setText(QApplication::translate("CreateBoundaryAn", "X centre 2", 0));
+  SpinBox_Cone_X2->setValue(_BoundaryAnXcone2);
+  TLCone_Y2->setText(QApplication::translate("CreateBoundaryAn", "Y centre 2", 0));
+  SpinBox_Cone_Y2->setValue(_BoundaryAnYcone2);
+  TLCone_Z2->setText(QApplication::translate("CreateBoundaryAn", "Z centre 2", 0));
+  SpinBox_Cone_Z2->setValue(_BoundaryAnZcone2);
+//
+  TLCone_V2->setVisible(1);
+  SpinBox_Cone_V2->setVisible(1);
+  TLCone_V2->setText(QApplication::translate("CreateBoundaryAn", "Radius 2", 0));
+  SpinBox_Cone_V2->setValue(_BoundaryAnRayon2);
+//
+  adjustSize();
+}
+// ------------------------------------------------------------------------
+void SMESH_EditBoundaryAn::SetTore()
+// ------------------------------------------------------------------------
+{
+  gBCylindre->setVisible(0);
+  gBSphere->setVisible(0);
+  gBCone->setVisible(0);
+  gBTore->setVisible(1);
+  RBTore->setChecked(1);
+  _Type=5;
+  RBCylindre->setDisabled(true);
+  RBSphere->setDisabled(true);
+  RBCone->setDisabled(true);
+
+  SpinBoxToreXcent->setValue(_BoundaryAnXcentre);
+  SpinBoxToreYcent->setValue(_BoundaryAnYcentre);
+  SpinBoxToreZcent->setValue(_BoundaryAnZcentre);
+
+  SpinBoxToreXaxe->setValue(_BoundaryAnXaxis);
+  SpinBoxToreYaxe->setValue(_BoundaryAnYaxis);
+  SpinBoxToreZaxe->setValue(_BoundaryAnZaxis);
+
+
+  SpinBoxToreXaxe->setSingleStep(0.1);
+  SpinBoxToreXcent->setSingleStep(_Xincr);
+  SpinBoxToreYaxe->setSingleStep(0.1);
+  SpinBoxToreYcent->setSingleStep(_Yincr);
+  SpinBoxToreZaxe->setSingleStep(0.1);
+  SpinBoxToreZcent->setSingleStep(_Zincr);
+// Rayon de revolution
+  SpinBoxToreRRev->setValue(_BoundaryAnRayon1);
+  SpinBoxToreRRev->setSingleStep(_BoundaryAnRayon1/10.);
+// Rayon primaire
+  SpinBoxToreRPri->setValue(_BoundaryAnRayon2);
+  SpinBoxToreRPri->setSingleStep(_BoundaryAnRayon2/10.);
+//
+  adjustSize();
+}
+// ---------------------------------------------------
+bool SMESH_EditBoundaryAn::CreateOrUpdateBoundaryAn()
+//----------------------------------------------------
+//  Mise a jour des attributs de la BoundaryAn
+{
+  switch (_Type)
+  {
+    case 1 : // il s agit d un cylindre
+    {
+      aBoundaryAn->SetCylinder(_BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnXaxis, _BoundaryAnYaxis, _BoundaryAnZaxis, _BoundaryAnRayon );
+      break;
+    }
+    case 2 : // il s agit d une sphere
+    {
+      aBoundaryAn->SetSphere(_BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnRayon);
+      break;
+    }
+    case 3 : // il s agit d un cone defini par un axe et un angle
+    {
+      aBoundaryAn = myHomardGen->CreateBoundaryConeA(CORBA::string_dup(_Name.toStdString().c_str()), \
+      _BoundaryAnXaxisCone, _BoundaryAnYaxisCone, _BoundaryAnZaxisCone, _BoundaryAngle, \
+      _BoundaryAnXorigCone, _BoundaryAnYorigCone, _BoundaryAnYorigCone);
+      break;
+    }
+    case 4 : // il s agit d un cone defini par les 2 rayons
+    {
+      aBoundaryAn = myHomardGen->CreateBoundaryConeR(CORBA::string_dup(_Name.toStdString().c_str()), \
+        _BoundaryAnXcone1, _BoundaryAnYcone1, _BoundaryAnZcone1, _BoundaryAnRayon1, \
+        _BoundaryAnXcone2, _BoundaryAnYcone2, _BoundaryAnZcone2, _BoundaryAnRayon2);
+      break;
+    }
+    case 5 : // il s agit d un tore
+    {
+      aBoundaryAn->SetTorus(_BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnXaxis, _BoundaryAnYaxis, _BoundaryAnZaxis, _BoundaryAnRayon1, _BoundaryAnRayon2 );
+      break;
+    }
+  }
+  if (Chgt) myHomardGen->InvalideBoundary(_Name.toStdString().c_str());
+  //HOMARD_UTILS::updateObjBrowser();
+  return true;
+}
+
+// --------------------------------------------------------------------------------------
+/* Constructs a SMESH_EditBoundaryCAO
+    herite de SMESH_CreateBoundaryCAO
+*/
+// --------------------------------------------------------------------------------------
+SMESH_EditBoundaryCAO::SMESH_EditBoundaryCAO( SMESHGUI_HomardAdaptDlg* parent, bool modal,
+                                              SMESHHOMARD::HOMARD_Gen_var myHomardGen0,
+                                              QString caseName, QString Name):
+    SMESH_CreateBoundaryCAO(parent, modal, myHomardGen0, caseName, Name)
+{
+    MESSAGE("Debut de Boundary pour " << Name.toStdString().c_str());
+    setWindowTitle(QObject::tr("HOM_BOUN_C_EDIT_WINDOW_TITLE"));
+    try {
+      aBoundary = myHomardGen->GetBoundary(CORBA::string_dup(_aName.toStdString().c_str()));
+      InitValEdit();
+    }
+    catch( SALOME::SALOME_Exception& S_ex ) {
+      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+      return;
+    }
+
+    SMESHHOMARD::ListGroupType_var maListe = aBoundary->GetGroups();
+    for ( int i = 0; i < maListe->length(); i++ )
+       _listeGroupesBoundary << QString(maListe[i]);
+
+}
+// ------------------------------
+SMESH_EditBoundaryCAO::~SMESH_EditBoundaryCAO()
+// ------------------------------
+{
+}
+// ------------------------------
+void SMESH_EditBoundaryCAO::InitValEdit()
+// ------------------------------
+{
+      LEName->setText(_aName);
+      LEName->setReadOnly(true);
+
+      QString aDataFile = aBoundary->GetDataFile();
+      LEFileName->setText(aDataFile);
+      LEFileName->setReadOnly(1);
+      PushFichier->setVisible(0);
+//
+      adjustSize();
+}
+// ------------------------------
+bool SMESH_EditBoundaryCAO::PushOnApply()
+// ------------------------------
+{
+     return true;
+}
+// ------------------------------------------------------------------------
+void SMESH_EditBoundaryCAO::SetFiltrage()
+// ------------------------------------------------------------------------
+{
+  if (!CBGroupe->isChecked()) return;
+  //SMESHHOMARD::HOMARD_Cas_var monCas = myHomardGen->GetCase();
+  //SMESHHOMARD::ListGroupType_var _listeGroupesCas = monCas->GetGroups();
+
+  SMESH_EditListGroupCAO *aDlg = new SMESH_EditListGroupCAO
+    (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen),
+     "Case_1", _listeGroupesBoundary) ;
+  aDlg->show();
+}
+
+// ------------------------------------------------------------------------------------
+/* Constructs a SMESH_EditBoundaryDi
+    herite de SMESH_CreateBoundaryDi
+*/
+// ------------------------------------------------------------------------------------
+SMESH_EditBoundaryDi::SMESH_EditBoundaryDi( SMESHGUI_HomardAdaptDlg* parent, bool modal,
+                                            SMESHHOMARD::HOMARD_Gen_var myHomardGen0,
+                                            QString caseName, QString Name):
+  SMESH_CreateBoundaryDi(parent, modal, myHomardGen0, caseName, Name)
+{
+    MESSAGE("Debut de Boundary pour " << Name.toStdString().c_str());
+    setWindowTitle(QObject::tr("HOM_BOUN_D_EDIT_WINDOW_TITLE"));
+    try {
+      aBoundary = myHomardGen->GetBoundary(CORBA::string_dup(_aName.toStdString().c_str()));
+      InitValEdit();
+    }
+    catch( SALOME::SALOME_Exception& S_ex ) {
+      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                QObject::tr(CORBA::string_dup(S_ex.details.text)) );
+      return;
+    }
+
+    SMESHHOMARD::ListGroupType_var maListe = aBoundary->GetGroups();
+    for ( int i = 0; i < maListe->length(); i++ )
+       _listeGroupesBoundary << QString(maListe[i]);
+
+}
+// ------------------------------
+SMESH_EditBoundaryDi::~SMESH_EditBoundaryDi()
+// ------------------------------
+{
+}
+// ------------------------------
+void SMESH_EditBoundaryDi::InitValEdit()
+// ------------------------------
+{
+      LEName->setText(_aName);
+      LEName->setReadOnly(true);
+
+      QString aDataFile = aBoundary->GetDataFile();
+      LEFileName->setText(aDataFile);
+      LEFileName->setReadOnly(1);
+      PushFichier->setVisible(0);
+//
+      adjustSize();
+}
+// ------------------------------
+bool SMESH_EditBoundaryDi::PushOnApply()
+// ------------------------------
+{
+     return true;
+}
+// ------------------------------------------------------------------------
+void SMESH_EditBoundaryDi::SetFiltrage()
+// // ------------------------------------------------------------------------
+{
+  if (!CBGroupe->isChecked()) return;
+  SMESHHOMARD::HOMARD_Cas_var monCas = myHomardGen->GetCase();
+  SMESHHOMARD::ListGroupType_var _listeGroupesCas = monCas->GetGroups();
+
+  SMESH_EditListGroup *aDlg = new SMESH_EditListGroup
+    (this, true, SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen),
+     "Case_1", _listeGroupesBoundary);
+  aDlg->show();
+}
diff --git a/src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.h b/src/SMESHGUI/SMESHGUI_HomardBoundaryDlg.h
new file mode 100644 (file)
index 0000000..cf713b1
--- /dev/null
@@ -0,0 +1,1244 @@
+// Copyright (C) 2011-2024  CEA, EDF
+//
+// 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 MON_CREATEBOUNDARY_H
+#define MON_CREATEBOUNDARY_H
+
+#include "SMESH_SMESHGUI.hxx"
+
+#include <SALOMEconfig.h>
+#include <SalomeApp_Module.h>
+
+#include CORBA_CLIENT_HEADER(SMESH_Homard)
+
+#include <QDialog>
+
+#include <QtCore/QVariant>
+#include <QtGui/QIcon>
+#include <QtWidgets/QApplication>
+#include <QtWidgets/QCheckBox>
+#include <QtWidgets/QDialog>
+#include <QtWidgets/QDoubleSpinBox>
+#include <QtWidgets/QGridLayout>
+#include <QtWidgets/QGroupBox>
+#include <QtWidgets/QLabel>
+#include <QtWidgets/QLineEdit>
+#include <QtWidgets/QPushButton>
+#include <QtWidgets/QRadioButton>
+
+class SMESHGUI_HomardAdaptDlg;
+
+class SMESH_Ui_CreateBoundaryAn
+{
+public:
+    QGridLayout *gridLayout_5;
+    QLabel *Name;
+    QLineEdit *LEName;
+    QGroupBox *TypeBoundary;
+    QGridLayout *gridLayout;
+    QRadioButton *RBCylindre;
+    QRadioButton *RBSphere;
+    QRadioButton *RBCone;
+    QRadioButton *RBTore;
+    QGroupBox *gBCylindre;
+    QGridLayout *gridLayout1;
+    QDoubleSpinBox *SpinBox_Xcent;
+    QLabel *TLXcent;
+    QDoubleSpinBox *SpinBox_Radius;
+    QDoubleSpinBox *SpinBox_Zcent;
+    QLabel *TLradius;
+    QLabel *TLZcent;
+    QLabel *TLYcent;
+    QDoubleSpinBox *SpinBox_Ycent;
+    QLabel *TLXaxis;
+    QLabel *TLYaxis;
+    QLabel *TLZaxis;
+    QDoubleSpinBox *SpinBox_Zaxis;
+    QDoubleSpinBox *SpinBox_Yaxis;
+    QDoubleSpinBox *SpinBox_Xaxis;
+    QGroupBox *gBSphere;
+    QGridLayout *gridLayout2;
+    QDoubleSpinBox *SpinBox_Rayon;
+    QDoubleSpinBox *SpinBox_Zcentre;
+    QLabel *TLRayon;
+    QLabel *TLZcentre;
+    QLabel *TLYcentre;
+    QDoubleSpinBox *SpinBox_Ycentre;
+    QDoubleSpinBox *SpinBox_Xcentre;
+    QLabel *TLXcentre;
+    QGroupBox *gBCone;
+    QGridLayout *gridLayout_3;
+    QGroupBox *groupBox;
+    QGridLayout *gridLayout_2;
+    QRadioButton *RB_Def_radius;
+    QRadioButton *RB_Def_angle;
+    QLabel *TLCone_X1;
+    QDoubleSpinBox *SpinBox_Cone_X1;
+    QLabel *TLCone_X2;
+    QDoubleSpinBox *SpinBox_Cone_X2;
+    QLabel *TLCone_Y1;
+    QDoubleSpinBox *SpinBox_Cone_Y1;
+    QLabel *TLCone_Y2;
+    QDoubleSpinBox *SpinBox_Cone_Y2;
+    QLabel *TLCone_Z1;
+    QDoubleSpinBox *SpinBox_Cone_Z1;
+    QLabel *TLCone_Z2;
+    QDoubleSpinBox *SpinBox_Cone_Z2;
+    QLabel *TLCone_V1;
+    QDoubleSpinBox *SpinBox_Cone_V1;
+    QLabel *TLCone_V2;
+    QDoubleSpinBox *SpinBox_Cone_V2;
+    QGroupBox *gBTore;
+    QGridLayout *gridLayout_4;
+    QLabel *TLToreXcent;
+    QDoubleSpinBox *SpinBoxToreXcent;
+    QLabel *TLToreXaxe;
+    QDoubleSpinBox *SpinBoxToreXaxe;
+    QLabel *TLToreYcent;
+    QDoubleSpinBox *SpinBoxToreYcent;
+    QLabel *TLToreYaxe;
+    QDoubleSpinBox *SpinBoxToreYaxe;
+    QLabel *TLToreZcent;
+    QDoubleSpinBox *SpinBoxToreZcent;
+    QLabel *TLToreZaxe;
+    QDoubleSpinBox *SpinBoxToreZaxe;
+    QLabel *TLToreRayRev;
+    QDoubleSpinBox *SpinBoxToreRRev;
+    QLabel *TLToreRayPri;
+    QDoubleSpinBox *SpinBoxToreRPri;
+    QGroupBox *GBButtons;
+    QGridLayout *gridLayout3;
+    QPushButton *buttonHelp;
+    QPushButton *buttonCancel;
+    QPushButton *buttonApply;
+    QPushButton *buttonOk;
+
+    void setupUi(QDialog *CreateBoundaryAn)
+    {
+        if (CreateBoundaryAn->objectName().isEmpty())
+            CreateBoundaryAn->setObjectName(QString::fromUtf8("CreateBoundaryAn"));
+        CreateBoundaryAn->resize(522, 835);
+        CreateBoundaryAn->setAutoFillBackground(true);
+        CreateBoundaryAn->setSizeGripEnabled(true);
+        gridLayout_5 = new QGridLayout(CreateBoundaryAn);
+        gridLayout_5->setObjectName(QString::fromUtf8("gridLayout_5"));
+        Name = new QLabel(CreateBoundaryAn);
+        Name->setObjectName(QString::fromUtf8("Name"));
+
+        gridLayout_5->addWidget(Name, 0, 0, 1, 1);
+
+        LEName = new QLineEdit(CreateBoundaryAn);
+        LEName->setObjectName(QString::fromUtf8("LEName"));
+        LEName->setMaxLength(32);
+
+        gridLayout_5->addWidget(LEName, 0, 1, 1, 1);
+
+        TypeBoundary = new QGroupBox(CreateBoundaryAn);
+        TypeBoundary->setObjectName(QString::fromUtf8("TypeBoundary"));
+        QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+        sizePolicy.setHorizontalStretch(0);
+        sizePolicy.setVerticalStretch(0);
+        sizePolicy.setHeightForWidth(TypeBoundary->sizePolicy().hasHeightForWidth());
+        TypeBoundary->setSizePolicy(sizePolicy);
+        TypeBoundary->setMinimumSize(QSize(340, 0));
+        gridLayout = new QGridLayout(TypeBoundary);
+        gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+        RBCylindre = new QRadioButton(TypeBoundary);
+        RBCylindre->setObjectName(QString::fromUtf8("RBCylindre"));
+        QIcon icon;
+        icon.addFile(QString::fromUtf8("../../resources/cylinderpointvector.png"), QSize(), QIcon::Normal, QIcon::Off);
+        RBCylindre->setIcon(icon);
+        RBCylindre->setCheckable(true);
+        RBCylindre->setChecked(true);
+
+        gridLayout->addWidget(RBCylindre, 0, 0, 1, 1);
+
+        RBSphere = new QRadioButton(TypeBoundary);
+        RBSphere->setObjectName(QString::fromUtf8("RBSphere"));
+        QIcon icon1;
+        icon1.addFile(QString::fromUtf8("../../resources/zone_spherepoint.png"), QSize(), QIcon::Normal, QIcon::Off);
+        RBSphere->setIcon(icon1);
+
+        gridLayout->addWidget(RBSphere, 0, 1, 1, 1);
+
+        RBCone = new QRadioButton(TypeBoundary);
+        RBCone->setObjectName(QString::fromUtf8("RBCone"));
+        QIcon icon2;
+        icon2.addFile(QString::fromUtf8("../../resources/cone.png"), QSize(), QIcon::Normal, QIcon::Off);
+        RBCone->setIcon(icon2);
+
+        gridLayout->addWidget(RBCone, 0, 2, 1, 1);
+
+        RBTore = new QRadioButton(TypeBoundary);
+        RBTore->setObjectName(QString::fromUtf8("RBTore"));
+        QIcon icon3;
+        icon3.addFile(QString::fromUtf8("../../resources/toruspointvector.png"), QSize(), QIcon::Normal, QIcon::Off);
+        RBTore->setIcon(icon3);
+        RBTore->setCheckable(true);
+        RBTore->setChecked(false);
+
+        gridLayout->addWidget(RBTore, 0, 3, 1, 1);
+
+
+        gridLayout_5->addWidget(TypeBoundary, 1, 0, 1, 2);
+
+        gBCylindre = new QGroupBox(CreateBoundaryAn);
+        gBCylindre->setObjectName(QString::fromUtf8("gBCylindre"));
+        sizePolicy.setHeightForWidth(gBCylindre->sizePolicy().hasHeightForWidth());
+        gBCylindre->setSizePolicy(sizePolicy);
+        gridLayout1 = new QGridLayout(gBCylindre);
+#ifndef Q_OS_MAC
+        gridLayout1->setSpacing(6);
+#endif
+#ifndef Q_OS_MAC
+        gridLayout1->setContentsMargins(9, 9, 9, 9);
+#endif
+        gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
+        SpinBox_Xcent = new QDoubleSpinBox(gBCylindre);
+        SpinBox_Xcent->setObjectName(QString::fromUtf8("SpinBox_Xcent"));
+        SpinBox_Xcent->setDecimals(5);
+        SpinBox_Xcent->setMinimum(-999999999.000000000000000);
+        SpinBox_Xcent->setMaximum(999999999.000000000000000);
+        SpinBox_Xcent->setValue(0.000000000000000);
+
+        gridLayout1->addWidget(SpinBox_Xcent, 0, 1, 1, 1);
+
+        TLXcent = new QLabel(gBCylindre);
+        TLXcent->setObjectName(QString::fromUtf8("TLXcent"));
+        sizePolicy.setHeightForWidth(TLXcent->sizePolicy().hasHeightForWidth());
+        TLXcent->setSizePolicy(sizePolicy);
+        TLXcent->setWordWrap(false);
+
+        gridLayout1->addWidget(TLXcent, 0, 0, 1, 1);
+
+        SpinBox_Radius = new QDoubleSpinBox(gBCylindre);
+        SpinBox_Radius->setObjectName(QString::fromUtf8("SpinBox_Radius"));
+        SpinBox_Radius->setDecimals(5);
+        SpinBox_Radius->setMaximum(1000000000.000000000000000);
+
+        gridLayout1->addWidget(SpinBox_Radius, 3, 1, 1, 2);
+
+        SpinBox_Zcent = new QDoubleSpinBox(gBCylindre);
+        SpinBox_Zcent->setObjectName(QString::fromUtf8("SpinBox_Zcent"));
+        SpinBox_Zcent->setDecimals(5);
+        SpinBox_Zcent->setMinimum(-999999999.000000000000000);
+        SpinBox_Zcent->setMaximum(999999999.000000000000000);
+        SpinBox_Zcent->setValue(0.000000000000000);
+
+        gridLayout1->addWidget(SpinBox_Zcent, 2, 1, 1, 1);
+
+        TLradius = new QLabel(gBCylindre);
+        TLradius->setObjectName(QString::fromUtf8("TLradius"));
+        sizePolicy.setHeightForWidth(TLradius->sizePolicy().hasHeightForWidth());
+        TLradius->setSizePolicy(sizePolicy);
+        TLradius->setWordWrap(false);
+
+        gridLayout1->addWidget(TLradius, 3, 0, 1, 1);
+
+        TLZcent = new QLabel(gBCylindre);
+        TLZcent->setObjectName(QString::fromUtf8("TLZcent"));
+        sizePolicy.setHeightForWidth(TLZcent->sizePolicy().hasHeightForWidth());
+        TLZcent->setSizePolicy(sizePolicy);
+        TLZcent->setWordWrap(false);
+
+        gridLayout1->addWidget(TLZcent, 2, 0, 1, 1);
+
+        TLYcent = new QLabel(gBCylindre);
+        TLYcent->setObjectName(QString::fromUtf8("TLYcent"));
+        sizePolicy.setHeightForWidth(TLYcent->sizePolicy().hasHeightForWidth());
+        TLYcent->setSizePolicy(sizePolicy);
+        TLYcent->setWordWrap(false);
+
+        gridLayout1->addWidget(TLYcent, 1, 0, 1, 1);
+
+        SpinBox_Ycent = new QDoubleSpinBox(gBCylindre);
+        SpinBox_Ycent->setObjectName(QString::fromUtf8("SpinBox_Ycent"));
+        SpinBox_Ycent->setDecimals(5);
+        SpinBox_Ycent->setMinimum(-999999999.000000000000000);
+        SpinBox_Ycent->setMaximum(999999999.000000000000000);
+        SpinBox_Ycent->setValue(0.000000000000000);
+
+        gridLayout1->addWidget(SpinBox_Ycent, 1, 1, 1, 1);
+
+        TLXaxis = new QLabel(gBCylindre);
+        TLXaxis->setObjectName(QString::fromUtf8("TLXaxis"));
+        sizePolicy.setHeightForWidth(TLXaxis->sizePolicy().hasHeightForWidth());
+        TLXaxis->setSizePolicy(sizePolicy);
+        TLXaxis->setWordWrap(false);
+
+        gridLayout1->addWidget(TLXaxis, 0, 2, 1, 1);
+
+        TLYaxis = new QLabel(gBCylindre);
+        TLYaxis->setObjectName(QString::fromUtf8("TLYaxis"));
+        sizePolicy.setHeightForWidth(TLYaxis->sizePolicy().hasHeightForWidth());
+        TLYaxis->setSizePolicy(sizePolicy);
+        TLYaxis->setWordWrap(false);
+
+        gridLayout1->addWidget(TLYaxis, 1, 2, 1, 1);
+
+        TLZaxis = new QLabel(gBCylindre);
+        TLZaxis->setObjectName(QString::fromUtf8("TLZaxis"));
+        sizePolicy.setHeightForWidth(TLZaxis->sizePolicy().hasHeightForWidth());
+        TLZaxis->setSizePolicy(sizePolicy);
+        TLZaxis->setWordWrap(false);
+
+        gridLayout1->addWidget(TLZaxis, 2, 2, 1, 1);
+
+        SpinBox_Zaxis = new QDoubleSpinBox(gBCylindre);
+        SpinBox_Zaxis->setObjectName(QString::fromUtf8("SpinBox_Zaxis"));
+        SpinBox_Zaxis->setDecimals(5);
+        SpinBox_Zaxis->setMinimum(-999999999.000000000000000);
+        SpinBox_Zaxis->setMaximum(999999999.000000000000000);
+        SpinBox_Zaxis->setValue(0.000000000000000);
+
+        gridLayout1->addWidget(SpinBox_Zaxis, 2, 3, 1, 1);
+
+        SpinBox_Yaxis = new QDoubleSpinBox(gBCylindre);
+        SpinBox_Yaxis->setObjectName(QString::fromUtf8("SpinBox_Yaxis"));
+        SpinBox_Yaxis->setDecimals(5);
+        SpinBox_Yaxis->setMinimum(-999999999.000000000000000);
+        SpinBox_Yaxis->setMaximum(999999999.000000000000000);
+        SpinBox_Yaxis->setValue(0.000000000000000);
+
+        gridLayout1->addWidget(SpinBox_Yaxis, 1, 3, 1, 1);
+
+        SpinBox_Xaxis = new QDoubleSpinBox(gBCylindre);
+        SpinBox_Xaxis->setObjectName(QString::fromUtf8("SpinBox_Xaxis"));
+        SpinBox_Xaxis->setDecimals(5);
+        SpinBox_Xaxis->setMinimum(-999999999.000000000000000);
+        SpinBox_Xaxis->setMaximum(999999999.000000000000000);
+        SpinBox_Xaxis->setValue(0.000000000000000);
+
+        gridLayout1->addWidget(SpinBox_Xaxis, 0, 3, 1, 1);
+
+
+        gridLayout_5->addWidget(gBCylindre, 2, 0, 1, 2);
+
+        gBSphere = new QGroupBox(CreateBoundaryAn);
+        gBSphere->setObjectName(QString::fromUtf8("gBSphere"));
+        sizePolicy.setHeightForWidth(gBSphere->sizePolicy().hasHeightForWidth());
+        gBSphere->setSizePolicy(sizePolicy);
+        gridLayout2 = new QGridLayout(gBSphere);
+#ifndef Q_OS_MAC
+        gridLayout2->setSpacing(6);
+#endif
+#ifndef Q_OS_MAC
+        gridLayout2->setContentsMargins(9, 9, 9, 9);
+#endif
+        gridLayout2->setObjectName(QString::fromUtf8("gridLayout2"));
+        SpinBox_Rayon = new QDoubleSpinBox(gBSphere);
+        SpinBox_Rayon->setObjectName(QString::fromUtf8("SpinBox_Rayon"));
+        SpinBox_Rayon->setDecimals(5);
+        SpinBox_Rayon->setMinimum(0.000000000000000);
+        SpinBox_Rayon->setMaximum(999999999.000000000000000);
+        SpinBox_Rayon->setValue(0.000000000000000);
+
+        gridLayout2->addWidget(SpinBox_Rayon, 1, 3, 1, 1);
+
+        SpinBox_Zcentre = new QDoubleSpinBox(gBSphere);
+        SpinBox_Zcentre->setObjectName(QString::fromUtf8("SpinBox_Zcentre"));
+        SpinBox_Zcentre->setDecimals(5);
+        SpinBox_Zcentre->setMinimum(-999999999.000000000000000);
+        SpinBox_Zcentre->setMaximum(999999999.000000000000000);
+        SpinBox_Zcentre->setValue(0.000000000000000);
+
+        gridLayout2->addWidget(SpinBox_Zcentre, 2, 1, 1, 1);
+
+        TLRayon = new QLabel(gBSphere);
+        TLRayon->setObjectName(QString::fromUtf8("TLRayon"));
+        sizePolicy.setHeightForWidth(TLRayon->sizePolicy().hasHeightForWidth());
+        TLRayon->setSizePolicy(sizePolicy);
+        TLRayon->setWordWrap(false);
+
+        gridLayout2->addWidget(TLRayon, 1, 2, 1, 1);
+
+        TLZcentre = new QLabel(gBSphere);
+        TLZcentre->setObjectName(QString::fromUtf8("TLZcentre"));
+        sizePolicy.setHeightForWidth(TLZcentre->sizePolicy().hasHeightForWidth());
+        TLZcentre->setSizePolicy(sizePolicy);
+        TLZcentre->setWordWrap(false);
+
+        gridLayout2->addWidget(TLZcentre, 2, 0, 1, 1);
+
+        TLYcentre = new QLabel(gBSphere);
+        TLYcentre->setObjectName(QString::fromUtf8("TLYcentre"));
+        sizePolicy.setHeightForWidth(TLYcentre->sizePolicy().hasHeightForWidth());
+        TLYcentre->setSizePolicy(sizePolicy);
+        TLYcentre->setWordWrap(false);
+
+        gridLayout2->addWidget(TLYcentre, 1, 0, 1, 1);
+
+        SpinBox_Ycentre = new QDoubleSpinBox(gBSphere);
+        SpinBox_Ycentre->setObjectName(QString::fromUtf8("SpinBox_Ycentre"));
+        SpinBox_Ycentre->setDecimals(5);
+        SpinBox_Ycentre->setMinimum(-999999999.000000000000000);
+        SpinBox_Ycentre->setMaximum(999999999.000000000000000);
+        SpinBox_Ycentre->setValue(0.000000000000000);
+
+        gridLayout2->addWidget(SpinBox_Ycentre, 1, 1, 1, 1);
+
+        SpinBox_Xcentre = new QDoubleSpinBox(gBSphere);
+        SpinBox_Xcentre->setObjectName(QString::fromUtf8("SpinBox_Xcentre"));
+        SpinBox_Xcentre->setDecimals(5);
+        SpinBox_Xcentre->setMinimum(-999999999.000000000000000);
+        SpinBox_Xcentre->setMaximum(999999999.000000000000000);
+        SpinBox_Xcentre->setValue(0.000000000000000);
+
+        gridLayout2->addWidget(SpinBox_Xcentre, 0, 1, 1, 1);
+
+        TLXcentre = new QLabel(gBSphere);
+        TLXcentre->setObjectName(QString::fromUtf8("TLXcentre"));
+        sizePolicy.setHeightForWidth(TLXcentre->sizePolicy().hasHeightForWidth());
+        TLXcentre->setSizePolicy(sizePolicy);
+        TLXcentre->setWordWrap(false);
+
+        gridLayout2->addWidget(TLXcentre, 0, 0, 1, 1);
+
+
+        gridLayout_5->addWidget(gBSphere, 3, 0, 1, 2);
+
+        gBCone = new QGroupBox(CreateBoundaryAn);
+        gBCone->setObjectName(QString::fromUtf8("gBCone"));
+        sizePolicy.setHeightForWidth(gBCone->sizePolicy().hasHeightForWidth());
+        gBCone->setSizePolicy(sizePolicy);
+        gridLayout_3 = new QGridLayout(gBCone);
+        gridLayout_3->setObjectName(QString::fromUtf8("gridLayout_3"));
+        groupBox = new QGroupBox(gBCone);
+        groupBox->setObjectName(QString::fromUtf8("groupBox"));
+        gridLayout_2 = new QGridLayout(groupBox);
+        gridLayout_2->setObjectName(QString::fromUtf8("gridLayout_2"));
+        RB_Def_radius = new QRadioButton(groupBox);
+        RB_Def_radius->setObjectName(QString::fromUtf8("RB_Def_radius"));
+        QIcon icon4;
+        icon4.addFile(QString::fromUtf8("../../resources/conedxyz.png"), QSize(), QIcon::Normal, QIcon::Off);
+        RB_Def_radius->setIcon(icon4);
+        RB_Def_radius->setChecked(true);
+
+        gridLayout_2->addWidget(RB_Def_radius, 0, 0, 1, 1);
+
+        RB_Def_angle = new QRadioButton(groupBox);
+        RB_Def_angle->setObjectName(QString::fromUtf8("RB_Def_angle"));
+        QIcon icon5;
+        icon5.addFile(QString::fromUtf8("../../resources/conepointvector.png"), QSize(), QIcon::Normal, QIcon::Off);
+        RB_Def_angle->setIcon(icon5);
+
+        gridLayout_2->addWidget(RB_Def_angle, 0, 1, 1, 1);
+
+
+        gridLayout_3->addWidget(groupBox, 0, 0, 1, 2);
+
+        TLCone_X1 = new QLabel(gBCone);
+        TLCone_X1->setObjectName(QString::fromUtf8("TLCone_X1"));
+        sizePolicy.setHeightForWidth(TLCone_X1->sizePolicy().hasHeightForWidth());
+        TLCone_X1->setSizePolicy(sizePolicy);
+        TLCone_X1->setWordWrap(false);
+
+        gridLayout_3->addWidget(TLCone_X1, 1, 0, 1, 1);
+
+        SpinBox_Cone_X1 = new QDoubleSpinBox(gBCone);
+        SpinBox_Cone_X1->setObjectName(QString::fromUtf8("SpinBox_Cone_X1"));
+        SpinBox_Cone_X1->setDecimals(5);
+        SpinBox_Cone_X1->setMinimum(-999999999.000000000000000);
+        SpinBox_Cone_X1->setMaximum(999999999.000000000000000);
+        SpinBox_Cone_X1->setValue(0.000000000000000);
+
+        gridLayout_3->addWidget(SpinBox_Cone_X1, 1, 1, 1, 1);
+
+        TLCone_X2 = new QLabel(gBCone);
+        TLCone_X2->setObjectName(QString::fromUtf8("TLCone_X2"));
+        sizePolicy.setHeightForWidth(TLCone_X2->sizePolicy().hasHeightForWidth());
+        TLCone_X2->setSizePolicy(sizePolicy);
+        TLCone_X2->setWordWrap(false);
+
+        gridLayout_3->addWidget(TLCone_X2, 1, 2, 1, 1);
+
+        SpinBox_Cone_X2 = new QDoubleSpinBox(gBCone);
+        SpinBox_Cone_X2->setObjectName(QString::fromUtf8("SpinBox_Cone_X2"));
+        SpinBox_Cone_X2->setDecimals(5);
+        SpinBox_Cone_X2->setMinimum(-999999999.000000000000000);
+        SpinBox_Cone_X2->setMaximum(999999999.000000000000000);
+        SpinBox_Cone_X2->setValue(0.000000000000000);
+
+        gridLayout_3->addWidget(SpinBox_Cone_X2, 1, 3, 1, 1);
+
+        TLCone_Y1 = new QLabel(gBCone);
+        TLCone_Y1->setObjectName(QString::fromUtf8("TLCone_Y1"));
+        sizePolicy.setHeightForWidth(TLCone_Y1->sizePolicy().hasHeightForWidth());
+        TLCone_Y1->setSizePolicy(sizePolicy);
+        TLCone_Y1->setWordWrap(false);
+
+        gridLayout_3->addWidget(TLCone_Y1, 2, 0, 1, 1);
+
+        SpinBox_Cone_Y1 = new QDoubleSpinBox(gBCone);
+        SpinBox_Cone_Y1->setObjectName(QString::fromUtf8("SpinBox_Cone_Y1"));
+        SpinBox_Cone_Y1->setDecimals(5);
+        SpinBox_Cone_Y1->setMinimum(-999999999.000000000000000);
+        SpinBox_Cone_Y1->setMaximum(999999999.000000000000000);
+        SpinBox_Cone_Y1->setValue(0.000000000000000);
+
+        gridLayout_3->addWidget(SpinBox_Cone_Y1, 2, 1, 1, 1);
+
+        TLCone_Y2 = new QLabel(gBCone);
+        TLCone_Y2->setObjectName(QString::fromUtf8("TLCone_Y2"));
+        sizePolicy.setHeightForWidth(TLCone_Y2->sizePolicy().hasHeightForWidth());
+        TLCone_Y2->setSizePolicy(sizePolicy);
+        TLCone_Y2->setWordWrap(false);
+
+        gridLayout_3->addWidget(TLCone_Y2, 2, 2, 1, 1);
+
+        SpinBox_Cone_Y2 = new QDoubleSpinBox(gBCone);
+        SpinBox_Cone_Y2->setObjectName(QString::fromUtf8("SpinBox_Cone_Y2"));
+        SpinBox_Cone_Y2->setDecimals(5);
+        SpinBox_Cone_Y2->setMinimum(-999999999.000000000000000);
+        SpinBox_Cone_Y2->setMaximum(999999999.000000000000000);
+        SpinBox_Cone_Y2->setValue(0.000000000000000);
+
+        gridLayout_3->addWidget(SpinBox_Cone_Y2, 2, 3, 1, 1);
+
+        TLCone_Z1 = new QLabel(gBCone);
+        TLCone_Z1->setObjectName(QString::fromUtf8("TLCone_Z1"));
+        sizePolicy.setHeightForWidth(TLCone_Z1->sizePolicy().hasHeightForWidth());
+        TLCone_Z1->setSizePolicy(sizePolicy);
+        TLCone_Z1->setWordWrap(false);
+
+        gridLayout_3->addWidget(TLCone_Z1, 3, 0, 1, 1);
+
+        SpinBox_Cone_Z1 = new QDoubleSpinBox(gBCone);
+        SpinBox_Cone_Z1->setObjectName(QString::fromUtf8("SpinBox_Cone_Z1"));
+        SpinBox_Cone_Z1->setDecimals(5);
+        SpinBox_Cone_Z1->setMinimum(-999999999.000000000000000);
+        SpinBox_Cone_Z1->setMaximum(999999999.000000000000000);
+        SpinBox_Cone_Z1->setValue(0.000000000000000);
+
+        gridLayout_3->addWidget(SpinBox_Cone_Z1, 3, 1, 1, 1);
+
+        TLCone_Z2 = new QLabel(gBCone);
+        TLCone_Z2->setObjectName(QString::fromUtf8("TLCone_Z2"));
+        sizePolicy.setHeightForWidth(TLCone_Z2->sizePolicy().hasHeightForWidth());
+        TLCone_Z2->setSizePolicy(sizePolicy);
+        TLCone_Z2->setWordWrap(false);
+
+        gridLayout_3->addWidget(TLCone_Z2, 3, 2, 1, 1);
+
+        SpinBox_Cone_Z2 = new QDoubleSpinBox(gBCone);
+        SpinBox_Cone_Z2->setObjectName(QString::fromUtf8("SpinBox_Cone_Z2"));
+        SpinBox_Cone_Z2->setDecimals(5);
+        SpinBox_Cone_Z2->setMinimum(-999999999.000000000000000);
+        SpinBox_Cone_Z2->setMaximum(999999999.000000000000000);
+        SpinBox_Cone_Z2->setValue(0.000000000000000);
+
+        gridLayout_3->addWidget(SpinBox_Cone_Z2, 3, 3, 1, 1);
+
+        TLCone_V1 = new QLabel(gBCone);
+        TLCone_V1->setObjectName(QString::fromUtf8("TLCone_V1"));
+        sizePolicy.setHeightForWidth(TLCone_V1->sizePolicy().hasHeightForWidth());
+        TLCone_V1->setSizePolicy(sizePolicy);
+        TLCone_V1->setWordWrap(false);
+
+        gridLayout_3->addWidget(TLCone_V1, 4, 0, 1, 1);
+
+        SpinBox_Cone_V1 = new QDoubleSpinBox(gBCone);
+        SpinBox_Cone_V1->setObjectName(QString::fromUtf8("SpinBox_Cone_V1"));
+        SpinBox_Cone_V1->setDecimals(5);
+        SpinBox_Cone_V1->setMaximum(1000000000.000000000000000);
+
+        gridLayout_3->addWidget(SpinBox_Cone_V1, 4, 1, 1, 1);
+
+        TLCone_V2 = new QLabel(gBCone);
+        TLCone_V2->setObjectName(QString::fromUtf8("TLCone_V2"));
+        sizePolicy.setHeightForWidth(TLCone_V2->sizePolicy().hasHeightForWidth());
+        TLCone_V2->setSizePolicy(sizePolicy);
+        TLCone_V2->setWordWrap(false);
+
+        gridLayout_3->addWidget(TLCone_V2, 4, 2, 1, 1);
+
+        SpinBox_Cone_V2 = new QDoubleSpinBox(gBCone);
+        SpinBox_Cone_V2->setObjectName(QString::fromUtf8("SpinBox_Cone_V2"));
+        SpinBox_Cone_V2->setDecimals(5);
+        SpinBox_Cone_V2->setMaximum(1000000000.000000000000000);
+
+        gridLayout_3->addWidget(SpinBox_Cone_V2, 4, 3, 1, 1);
+
+
+        gridLayout_5->addWidget(gBCone, 4, 0, 1, 2);
+
+        gBTore = new QGroupBox(CreateBoundaryAn);
+        gBTore->setObjectName(QString::fromUtf8("gBTore"));
+        sizePolicy.setHeightForWidth(gBTore->sizePolicy().hasHeightForWidth());
+        gBTore->setSizePolicy(sizePolicy);
+        gridLayout_4 = new QGridLayout(gBTore);
+        gridLayout_4->setObjectName(QString::fromUtf8("gridLayout_4"));
+        TLToreXcent = new QLabel(gBTore);
+        TLToreXcent->setObjectName(QString::fromUtf8("TLToreXcent"));
+        sizePolicy.setHeightForWidth(TLToreXcent->sizePolicy().hasHeightForWidth());
+        TLToreXcent->setSizePolicy(sizePolicy);
+        TLToreXcent->setWordWrap(false);
+
+        gridLayout_4->addWidget(TLToreXcent, 0, 0, 1, 1);
+
+        SpinBoxToreXcent = new QDoubleSpinBox(gBTore);
+        SpinBoxToreXcent->setObjectName(QString::fromUtf8("SpinBoxToreXcent"));
+        SpinBoxToreXcent->setDecimals(5);
+        SpinBoxToreXcent->setMinimum(-999999999.000000000000000);
+        SpinBoxToreXcent->setMaximum(999999999.000000000000000);
+        SpinBoxToreXcent->setValue(0.000000000000000);
+
+        gridLayout_4->addWidget(SpinBoxToreXcent, 0, 1, 1, 1);
+
+        TLToreXaxe = new QLabel(gBTore);
+        TLToreXaxe->setObjectName(QString::fromUtf8("TLToreXaxe"));
+        sizePolicy.setHeightForWidth(TLToreXaxe->sizePolicy().hasHeightForWidth());
+        TLToreXaxe->setSizePolicy(sizePolicy);
+        TLToreXaxe->setWordWrap(false);
+
+        gridLayout_4->addWidget(TLToreXaxe, 0, 2, 1, 1);
+
+        SpinBoxToreXaxe = new QDoubleSpinBox(gBTore);
+        SpinBoxToreXaxe->setObjectName(QString::fromUtf8("SpinBoxToreXaxe"));
+        SpinBoxToreXaxe->setDecimals(5);
+        SpinBoxToreXaxe->setMinimum(-999999999.000000000000000);
+        SpinBoxToreXaxe->setMaximum(999999999.000000000000000);
+        SpinBoxToreXaxe->setValue(0.000000000000000);
+
+        gridLayout_4->addWidget(SpinBoxToreXaxe, 0, 3, 1, 1);
+
+        TLToreYcent = new QLabel(gBTore);
+        TLToreYcent->setObjectName(QString::fromUtf8("TLToreYcent"));
+        sizePolicy.setHeightForWidth(TLToreYcent->sizePolicy().hasHeightForWidth());
+        TLToreYcent->setSizePolicy(sizePolicy);
+        TLToreYcent->setWordWrap(false);
+
+        gridLayout_4->addWidget(TLToreYcent, 1, 0, 1, 1);
+
+        SpinBoxToreYcent = new QDoubleSpinBox(gBTore);
+        SpinBoxToreYcent->setObjectName(QString::fromUtf8("SpinBoxToreYcent"));
+        SpinBoxToreYcent->setDecimals(5);
+        SpinBoxToreYcent->setMinimum(-999999999.000000000000000);
+        SpinBoxToreYcent->setMaximum(999999999.000000000000000);
+        SpinBoxToreYcent->setValue(0.000000000000000);
+
+        gridLayout_4->addWidget(SpinBoxToreYcent, 1, 1, 1, 1);
+
+        TLToreYaxe = new QLabel(gBTore);
+        TLToreYaxe->setObjectName(QString::fromUtf8("TLToreYaxe"));
+        sizePolicy.setHeightForWidth(TLToreYaxe->sizePolicy().hasHeightForWidth());
+        TLToreYaxe->setSizePolicy(sizePolicy);
+        TLToreYaxe->setWordWrap(false);
+
+        gridLayout_4->addWidget(TLToreYaxe, 1, 2, 1, 1);
+
+        SpinBoxToreYaxe = new QDoubleSpinBox(gBTore);
+        SpinBoxToreYaxe->setObjectName(QString::fromUtf8("SpinBoxToreYaxe"));
+        SpinBoxToreYaxe->setDecimals(5);
+        SpinBoxToreYaxe->setMinimum(-999999999.000000000000000);
+        SpinBoxToreYaxe->setMaximum(999999999.000000000000000);
+        SpinBoxToreYaxe->setValue(0.000000000000000);
+
+        gridLayout_4->addWidget(SpinBoxToreYaxe, 1, 3, 1, 1);
+
+        TLToreZcent = new QLabel(gBTore);
+        TLToreZcent->setObjectName(QString::fromUtf8("TLToreZcent"));
+        sizePolicy.setHeightForWidth(TLToreZcent->sizePolicy().hasHeightForWidth());
+        TLToreZcent->setSizePolicy(sizePolicy);
+        TLToreZcent->setWordWrap(false);
+
+        gridLayout_4->addWidget(TLToreZcent, 2, 0, 1, 1);
+
+        SpinBoxToreZcent = new QDoubleSpinBox(gBTore);
+        SpinBoxToreZcent->setObjectName(QString::fromUtf8("SpinBoxToreZcent"));
+        SpinBoxToreZcent->setDecimals(5);
+        SpinBoxToreZcent->setMinimum(-999999999.000000000000000);
+        SpinBoxToreZcent->setMaximum(999999999.000000000000000);
+        SpinBoxToreZcent->setValue(0.000000000000000);
+
+        gridLayout_4->addWidget(SpinBoxToreZcent, 2, 1, 1, 1);
+
+        TLToreZaxe = new QLabel(gBTore);
+        TLToreZaxe->setObjectName(QString::fromUtf8("TLToreZaxe"));
+        sizePolicy.setHeightForWidth(TLToreZaxe->sizePolicy().hasHeightForWidth());
+        TLToreZaxe->setSizePolicy(sizePolicy);
+        TLToreZaxe->setWordWrap(false);
+
+        gridLayout_4->addWidget(TLToreZaxe, 2, 2, 1, 1);
+
+        SpinBoxToreZaxe = new QDoubleSpinBox(gBTore);
+        SpinBoxToreZaxe->setObjectName(QString::fromUtf8("SpinBoxToreZaxe"));
+        SpinBoxToreZaxe->setDecimals(5);
+        SpinBoxToreZaxe->setMinimum(-999999999.000000000000000);
+        SpinBoxToreZaxe->setMaximum(999999999.000000000000000);
+        SpinBoxToreZaxe->setValue(0.000000000000000);
+
+        gridLayout_4->addWidget(SpinBoxToreZaxe, 2, 3, 1, 1);
+
+        TLToreRayRev = new QLabel(gBTore);
+        TLToreRayRev->setObjectName(QString::fromUtf8("TLToreRayRev"));
+        sizePolicy.setHeightForWidth(TLToreRayRev->sizePolicy().hasHeightForWidth());
+        TLToreRayRev->setSizePolicy(sizePolicy);
+        TLToreRayRev->setWordWrap(false);
+
+        gridLayout_4->addWidget(TLToreRayRev, 3, 0, 1, 1);
+
+        SpinBoxToreRRev = new QDoubleSpinBox(gBTore);
+        SpinBoxToreRRev->setObjectName(QString::fromUtf8("SpinBoxToreRRev"));
+        SpinBoxToreRRev->setDecimals(5);
+        SpinBoxToreRRev->setMaximum(1000000000.000000000000000);
+
+        gridLayout_4->addWidget(SpinBoxToreRRev, 3, 1, 1, 1);
+
+        TLToreRayPri = new QLabel(gBTore);
+        TLToreRayPri->setObjectName(QString::fromUtf8("TLToreRayPri"));
+        sizePolicy.setHeightForWidth(TLToreRayPri->sizePolicy().hasHeightForWidth());
+        TLToreRayPri->setSizePolicy(sizePolicy);
+        TLToreRayPri->setWordWrap(false);
+
+        gridLayout_4->addWidget(TLToreRayPri, 3, 2, 1, 1);
+
+        SpinBoxToreRPri = new QDoubleSpinBox(gBTore);
+        SpinBoxToreRPri->setObjectName(QString::fromUtf8("SpinBoxToreRPri"));
+        SpinBoxToreRPri->setDecimals(5);
+        SpinBoxToreRPri->setMaximum(1000000000.000000000000000);
+
+        gridLayout_4->addWidget(SpinBoxToreRPri, 3, 3, 1, 1);
+
+
+        gridLayout_5->addWidget(gBTore, 5, 0, 1, 2);
+
+        GBButtons = new QGroupBox(CreateBoundaryAn);
+        GBButtons->setObjectName(QString::fromUtf8("GBButtons"));
+        sizePolicy.setHeightForWidth(GBButtons->sizePolicy().hasHeightForWidth());
+        GBButtons->setSizePolicy(sizePolicy);
+        gridLayout3 = new QGridLayout(GBButtons);
+#ifndef Q_OS_MAC
+        gridLayout3->setSpacing(6);
+#endif
+#ifndef Q_OS_MAC
+        gridLayout3->setContentsMargins(9, 9, 9, 9);
+#endif
+        gridLayout3->setObjectName(QString::fromUtf8("gridLayout3"));
+        buttonHelp = new QPushButton(GBButtons);
+        buttonHelp->setObjectName(QString::fromUtf8("buttonHelp"));
+
+        gridLayout3->addWidget(buttonHelp, 0, 3, 1, 1);
+
+        buttonCancel = new QPushButton(GBButtons);
+        buttonCancel->setObjectName(QString::fromUtf8("buttonCancel"));
+
+        gridLayout3->addWidget(buttonCancel, 0, 2, 1, 1);
+
+        buttonApply = new QPushButton(GBButtons);
+        buttonApply->setObjectName(QString::fromUtf8("buttonApply"));
+
+        gridLayout3->addWidget(buttonApply, 0, 1, 1, 1);
+
+        buttonOk = new QPushButton(GBButtons);
+        buttonOk->setObjectName(QString::fromUtf8("buttonOk"));
+
+        gridLayout3->addWidget(buttonOk, 0, 0, 1, 1);
+
+
+        gridLayout_5->addWidget(GBButtons, 6, 0, 1, 2);
+
+
+        retranslateUi(CreateBoundaryAn);
+
+        QMetaObject::connectSlotsByName(CreateBoundaryAn);
+    } // setupUi
+
+    void retranslateUi(QDialog *CreateBoundaryAn)
+    {
+        CreateBoundaryAn->setWindowTitle(QApplication::translate("CreateBoundaryAn", "Create an analytical boundary", nullptr));
+        Name->setText(QApplication::translate("CreateBoundaryAn", "Name", nullptr));
+        TypeBoundary->setTitle(QApplication::translate("CreateBoundaryAn", "Type of boundary", nullptr));
+        RBCylindre->setText(QApplication::translate("CreateBoundaryAn", "Cylinder", nullptr));
+        RBSphere->setText(QApplication::translate("CreateBoundaryAn", "Sphere", nullptr));
+        RBCone->setText(QApplication::translate("CreateBoundaryAn", "Cone", nullptr));
+        RBTore->setText(QApplication::translate("CreateBoundaryAn", "Torus", nullptr));
+        gBCylindre->setTitle(QApplication::translate("CreateBoundaryAn", "Coordinates", nullptr));
+        TLXcent->setText(QApplication::translate("CreateBoundaryAn", "X centre", nullptr));
+        TLradius->setText(QApplication::translate("CreateBoundaryAn", "Radius", nullptr));
+        TLZcent->setText(QApplication::translate("CreateBoundaryAn", "Z centre", nullptr));
+        TLYcent->setText(QApplication::translate("CreateBoundaryAn", "Y centre", nullptr));
+        TLXaxis->setText(QApplication::translate("CreateBoundaryAn", "X axis", nullptr));
+        TLYaxis->setText(QApplication::translate("CreateBoundaryAn", "Y axis", nullptr));
+        TLZaxis->setText(QApplication::translate("CreateBoundaryAn", "Z axis", nullptr));
+        gBSphere->setTitle(QApplication::translate("CreateBoundaryAn", "Coordinates", nullptr));
+        TLRayon->setText(QApplication::translate("CreateBoundaryAn", "Radius", nullptr));
+        TLZcentre->setText(QApplication::translate("CreateBoundaryAn", "Z centre", nullptr));
+        TLYcentre->setText(QApplication::translate("CreateBoundaryAn", "Y centre", nullptr));
+        TLXcentre->setText(QApplication::translate("CreateBoundaryAn", "X centre", nullptr));
+        gBCone->setTitle(QApplication::translate("CreateBoundaryAn", "Coordinates", nullptr));
+        groupBox->setTitle(QApplication::translate("CreateBoundaryAn", "Definition", nullptr));
+        RB_Def_radius->setText(QApplication::translate("CreateBoundaryAn", "Radius", nullptr));
+        RB_Def_angle->setText(QApplication::translate("CreateBoundaryAn", "Angle", nullptr));
+        TLCone_X1->setText(QApplication::translate("CreateBoundaryAn", "X 1", nullptr));
+        TLCone_X2->setText(QApplication::translate("CreateBoundaryAn", "X 2", nullptr));
+        TLCone_Y1->setText(QApplication::translate("CreateBoundaryAn", "Y 1", nullptr));
+        TLCone_Y2->setText(QApplication::translate("CreateBoundaryAn", "Y 2", nullptr));
+        TLCone_Z1->setText(QApplication::translate("CreateBoundaryAn", "Z 1", nullptr));
+        TLCone_Z2->setText(QApplication::translate("CreateBoundaryAn", "Z 2", nullptr));
+        TLCone_V1->setText(QApplication::translate("CreateBoundaryAn", "V 1", nullptr));
+        TLCone_V2->setText(QApplication::translate("CreateBoundaryAn", "V 2", nullptr));
+        gBTore->setTitle(QApplication::translate("CreateBoundaryAn", "Coordinates", nullptr));
+        TLToreXcent->setText(QApplication::translate("CreateBoundaryAn", "X centre", nullptr));
+        TLToreXaxe->setText(QApplication::translate("CreateBoundaryAn", "X axis", nullptr));
+        TLToreYcent->setText(QApplication::translate("CreateBoundaryAn", "Y centre", nullptr));
+        TLToreYaxe->setText(QApplication::translate("CreateBoundaryAn", "Y axis", nullptr));
+        TLToreZcent->setText(QApplication::translate("CreateBoundaryAn", "Z centre", nullptr));
+        TLToreZaxe->setText(QApplication::translate("CreateBoundaryAn", "Z axis", nullptr));
+        TLToreRayRev->setText(QApplication::translate("CreateBoundaryAn", "R revolution", nullptr));
+        TLToreRayPri->setText(QApplication::translate("CreateBoundaryAn", "Primary R", nullptr));
+        GBButtons->setTitle(QString());
+        buttonHelp->setText(QApplication::translate("CreateBoundaryAn", "Help", nullptr));
+        buttonCancel->setText(QApplication::translate("CreateBoundaryAn", "Cancel", nullptr));
+        buttonApply->setText(QApplication::translate("CreateBoundaryAn", "Apply", nullptr));
+        buttonOk->setText(QApplication::translate("CreateBoundaryAn", "OK", nullptr));
+    } // retranslateUi
+};
+
+class SMESH_Ui_CreateBoundaryCAO
+{
+public:
+    QGridLayout *gridLayout;
+    QGroupBox *GBButtons;
+    QGridLayout *gridLayout1;
+    QPushButton *buttonHelp;
+    QPushButton *buttonCancel;
+    QPushButton *buttonApply;
+    QPushButton *buttonOk;
+    QCheckBox *CBGroupe;
+    QLineEdit *LEFileName;
+    QPushButton *PushFichier;
+    QLabel *XAO;
+    QLineEdit *LEName;
+    QLabel *Name;
+
+    void setupUi(QDialog *CreateBoundaryCAO)
+    {
+        if (CreateBoundaryCAO->objectName().isEmpty())
+            CreateBoundaryCAO->setObjectName(QString::fromUtf8("CreateBoundaryCAO"));
+        CreateBoundaryCAO->resize(566, 195);
+        QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+        sizePolicy.setHorizontalStretch(0);
+        sizePolicy.setVerticalStretch(0);
+        sizePolicy.setHeightForWidth(CreateBoundaryCAO->sizePolicy().hasHeightForWidth());
+        CreateBoundaryCAO->setSizePolicy(sizePolicy);
+        CreateBoundaryCAO->setAutoFillBackground(true);
+        CreateBoundaryCAO->setSizeGripEnabled(true);
+        gridLayout = new QGridLayout(CreateBoundaryCAO);
+#ifndef Q_OS_MAC
+        gridLayout->setSpacing(6);
+#endif
+#ifndef Q_OS_MAC
+        gridLayout->setContentsMargins(9, 9, 9, 9);
+#endif
+        gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+        GBButtons = new QGroupBox(CreateBoundaryCAO);
+        GBButtons->setObjectName(QString::fromUtf8("GBButtons"));
+        gridLayout1 = new QGridLayout(GBButtons);
+#ifndef Q_OS_MAC
+        gridLayout1->setSpacing(6);
+#endif
+#ifndef Q_OS_MAC
+        gridLayout1->setContentsMargins(9, 9, 9, 9);
+#endif
+        gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
+        buttonHelp = new QPushButton(GBButtons);
+        buttonHelp->setObjectName(QString::fromUtf8("buttonHelp"));
+
+        gridLayout1->addWidget(buttonHelp, 0, 3, 1, 1);
+
+        buttonCancel = new QPushButton(GBButtons);
+        buttonCancel->setObjectName(QString::fromUtf8("buttonCancel"));
+
+        gridLayout1->addWidget(buttonCancel, 0, 2, 1, 1);
+
+        buttonApply = new QPushButton(GBButtons);
+        buttonApply->setObjectName(QString::fromUtf8("buttonApply"));
+
+        gridLayout1->addWidget(buttonApply, 0, 1, 1, 1);
+
+        buttonOk = new QPushButton(GBButtons);
+        buttonOk->setObjectName(QString::fromUtf8("buttonOk"));
+
+        gridLayout1->addWidget(buttonOk, 0, 0, 1, 1);
+
+
+        gridLayout->addWidget(GBButtons, 3, 0, 1, 3);
+
+        CBGroupe = new QCheckBox(CreateBoundaryCAO);
+        CBGroupe->setObjectName(QString::fromUtf8("CBGroupe"));
+
+        gridLayout->addWidget(CBGroupe, 2, 0, 1, 3);
+
+        LEFileName = new QLineEdit(CreateBoundaryCAO);
+        LEFileName->setObjectName(QString::fromUtf8("LEFileName"));
+        LEFileName->setMinimumSize(QSize(370, 21));
+
+        gridLayout->addWidget(LEFileName, 1, 2, 1, 1);
+
+        PushFichier = new QPushButton(CreateBoundaryCAO);
+        PushFichier->setObjectName(QString::fromUtf8("PushFichier"));
+
+        gridLayout->addWidget(PushFichier, 1, 1, 1, 1);
+
+        XAO = new QLabel(CreateBoundaryCAO);
+        XAO->setObjectName(QString::fromUtf8("XAO"));
+
+        gridLayout->addWidget(XAO, 1, 0, 1, 1);
+
+        LEName = new QLineEdit(CreateBoundaryCAO);
+        LEName->setObjectName(QString::fromUtf8("LEName"));
+        LEName->setMinimumSize(QSize(382, 21));
+        LEName->setMaxLength(32);
+
+        gridLayout->addWidget(LEName, 0, 1, 1, 2);
+
+        Name = new QLabel(CreateBoundaryCAO);
+        Name->setObjectName(QString::fromUtf8("Name"));
+
+        gridLayout->addWidget(Name, 0, 0, 1, 1);
+
+
+        retranslateUi(CreateBoundaryCAO);
+
+        QMetaObject::connectSlotsByName(CreateBoundaryCAO);
+    } // setupUi
+
+    void retranslateUi(QDialog *CreateBoundaryCAO)
+    {
+        CreateBoundaryCAO->setWindowTitle(QApplication::translate("CreateBoundaryCAO", "Get CAO", nullptr));
+        GBButtons->setTitle(QString());
+        buttonHelp->setText(QApplication::translate("CreateBoundaryCAO", "Help", nullptr));
+        buttonCancel->setText(QApplication::translate("CreateBoundaryCAO", "Cancel", nullptr));
+        buttonApply->setText(QApplication::translate("CreateBoundaryCAO", "Apply", nullptr));
+        buttonOk->setText(QApplication::translate("CreateBoundaryCAO", "OK", nullptr));
+        CBGroupe->setText(QApplication::translate("CreateBoundaryCAO", "Filtering with groups", nullptr));
+        PushFichier->setText(QString());
+        XAO->setText(QApplication::translate("CreateBoundaryCAO", "XAO", nullptr));
+        Name->setText(QApplication::translate("CreateBoundaryCAO", "Name", nullptr));
+    } // retranslateUi
+};
+
+class SMESH_Ui_CreateBoundaryDi
+{
+public:
+    QGridLayout *gridLayout;
+    QGroupBox *GBButtons;
+    QGridLayout *gridLayout1;
+    QPushButton *buttonHelp;
+    QPushButton *buttonCancel;
+    QPushButton *buttonApply;
+    QPushButton *buttonOk;
+    QCheckBox *CBGroupe;
+    QLineEdit *LEFileName;
+    QPushButton *PushFichier;
+    QLabel *Mesh;
+    QLineEdit *LEName;
+    QLabel *Name;
+
+    void setupUi(QDialog *CreateBoundaryDi)
+    {
+        if (CreateBoundaryDi->objectName().isEmpty())
+            CreateBoundaryDi->setObjectName(QString::fromUtf8("CreateBoundaryDi"));
+        CreateBoundaryDi->resize(566, 169);
+        QSizePolicy sizePolicy(QSizePolicy::Fixed, QSizePolicy::Fixed);
+        sizePolicy.setHorizontalStretch(0);
+        sizePolicy.setVerticalStretch(0);
+        sizePolicy.setHeightForWidth(CreateBoundaryDi->sizePolicy().hasHeightForWidth());
+        CreateBoundaryDi->setSizePolicy(sizePolicy);
+        CreateBoundaryDi->setAutoFillBackground(true);
+        CreateBoundaryDi->setSizeGripEnabled(true);
+        gridLayout = new QGridLayout(CreateBoundaryDi);
+#ifndef Q_OS_MAC
+        gridLayout->setSpacing(6);
+#endif
+#ifndef Q_OS_MAC
+        gridLayout->setContentsMargins(9, 9, 9, 9);
+#endif
+        gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+        GBButtons = new QGroupBox(CreateBoundaryDi);
+        GBButtons->setObjectName(QString::fromUtf8("GBButtons"));
+        gridLayout1 = new QGridLayout(GBButtons);
+#ifndef Q_OS_MAC
+        gridLayout1->setSpacing(6);
+#endif
+#ifndef Q_OS_MAC
+        gridLayout1->setContentsMargins(9, 9, 9, 9);
+#endif
+        gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
+        buttonHelp = new QPushButton(GBButtons);
+        buttonHelp->setObjectName(QString::fromUtf8("buttonHelp"));
+
+        gridLayout1->addWidget(buttonHelp, 0, 3, 1, 1);
+
+        buttonCancel = new QPushButton(GBButtons);
+        buttonCancel->setObjectName(QString::fromUtf8("buttonCancel"));
+
+        gridLayout1->addWidget(buttonCancel, 0, 2, 1, 1);
+
+        buttonApply = new QPushButton(GBButtons);
+        buttonApply->setObjectName(QString::fromUtf8("buttonApply"));
+
+        gridLayout1->addWidget(buttonApply, 0, 1, 1, 1);
+
+        buttonOk = new QPushButton(GBButtons);
+        buttonOk->setObjectName(QString::fromUtf8("buttonOk"));
+
+        gridLayout1->addWidget(buttonOk, 0, 0, 1, 1);
+
+
+        gridLayout->addWidget(GBButtons, 3, 0, 1, 3);
+
+        CBGroupe = new QCheckBox(CreateBoundaryDi);
+        CBGroupe->setObjectName(QString::fromUtf8("CBGroupe"));
+
+        gridLayout->addWidget(CBGroupe, 2, 0, 1, 3);
+
+        LEFileName = new QLineEdit(CreateBoundaryDi);
+        LEFileName->setObjectName(QString::fromUtf8("LEFileName"));
+        LEFileName->setMinimumSize(QSize(370, 21));
+
+        gridLayout->addWidget(LEFileName, 1, 2, 1, 1);
+
+        PushFichier = new QPushButton(CreateBoundaryDi);
+        PushFichier->setObjectName(QString::fromUtf8("PushFichier"));
+
+        gridLayout->addWidget(PushFichier, 1, 1, 1, 1);
+
+        Mesh = new QLabel(CreateBoundaryDi);
+        Mesh->setObjectName(QString::fromUtf8("Mesh"));
+
+        gridLayout->addWidget(Mesh, 1, 0, 1, 1);
+
+        LEName = new QLineEdit(CreateBoundaryDi);
+        LEName->setObjectName(QString::fromUtf8("LEName"));
+        LEName->setMinimumSize(QSize(382, 21));
+        LEName->setMaxLength(32);
+
+        gridLayout->addWidget(LEName, 0, 1, 1, 2);
+
+        Name = new QLabel(CreateBoundaryDi);
+        Name->setObjectName(QString::fromUtf8("Name"));
+
+        gridLayout->addWidget(Name, 0, 0, 1, 1);
+
+
+        retranslateUi(CreateBoundaryDi);
+
+        QMetaObject::connectSlotsByName(CreateBoundaryDi);
+    } // setupUi
+
+    void retranslateUi(QDialog *CreateBoundaryDi)
+    {
+        CreateBoundaryDi->setWindowTitle(QApplication::translate("CreateBoundaryDi", "Create a discrete boundary", nullptr));
+        GBButtons->setTitle(QString());
+        buttonHelp->setText(QApplication::translate("CreateBoundaryDi", "Help", nullptr));
+        buttonCancel->setText(QApplication::translate("CreateBoundaryDi", "Cancel", nullptr));
+        buttonApply->setText(QApplication::translate("CreateBoundaryDi", "Apply", nullptr));
+        buttonOk->setText(QApplication::translate("CreateBoundaryDi", "OK", nullptr));
+        CBGroupe->setText(QApplication::translate("CreateBoundaryDi", "Filtering with groups", nullptr));
+        PushFichier->setText(QString());
+        Mesh->setText(QApplication::translate("CreateBoundaryDi", "Mesh", nullptr));
+        Name->setText(QApplication::translate("CreateBoundaryDi", "Name", nullptr));
+    } // retranslateUi
+};
+
+class SMESHGUI_EXPORT SMESH_CreateBoundaryAn : public QDialog, public SMESH_Ui_CreateBoundaryAn
+{
+  Q_OBJECT
+
+public:
+  SMESH_CreateBoundaryAn (SMESHGUI_HomardAdaptDlg* parent, bool modal,
+                          SMESHHOMARD::HOMARD_Gen_var myHomardGen0,
+                          QString caseName);
+  virtual ~SMESH_CreateBoundaryAn();
+
+protected :
+  SMESH_CreateBoundaryAn (SMESHGUI_HomardAdaptDlg* parent,
+                          SMESHHOMARD::HOMARD_Gen_var myHomardGen0,
+                          QString caseName);
+
+  SMESHGUI_HomardAdaptDlg * _parent;
+
+  QString _Name;
+
+  int _Type;
+  double _BoundaryAnXcentre, _BoundaryAnYcentre, _BoundaryAnZcentre, _BoundaryAnRayon;
+  double _BoundaryAnXaxis, _BoundaryAnYaxis, _BoundaryAnZaxis;
+  double _Xcentre, _Ycentre, _Zcentre, _Rayon ;
+  double _Xmin, _Xmax, _Xincr, _Ymin, _Ymax, _Yincr, _Zmin, _Zmax, _Zincr, _DMax ;
+  double _BoundaryAnXcone1, _BoundaryAnYcone1, _BoundaryAnZcone1, _BoundaryAnRayon1;
+  double _BoundaryAnXcone2, _BoundaryAnYcone2, _BoundaryAnZcone2, _BoundaryAnRayon2;
+  double _BoundaryAnXaxisCone, _BoundaryAnYaxisCone, _BoundaryAnZaxisCone;
+  double _BoundaryAnXorigCone, _BoundaryAnYorigCone, _BoundaryAnZorigCone;
+  double _BoundaryAngle;
+  double _BoundaryAnToreXcentre, _BoundaryAnToreYcentre, _BoundaryAnToreZcentre;
+  double _BoundaryAnToreXaxe, _BoundaryAnToreYaxe, _BoundaryAnToreZaxe;
+  double _BoundaryAnToreRRev, _BoundaryAnToreRPri;
+
+  bool Chgt;
+
+  SMESHHOMARD::HOMARD_Boundary_var aBoundaryAn;
+  SMESHHOMARD::HOMARD_Gen_var myHomardGen;
+
+  virtual void InitConnect();
+  virtual void InitValBoundaryAn();
+  virtual void InitMinMax();
+  virtual void SetNewName();
+  virtual bool CreateOrUpdateBoundaryAn();
+  virtual void convertRayonAngle(int option);
+
+public slots:
+    virtual void SetCylinder();
+    virtual void SetSphere();
+    virtual void SetCone();
+    virtual void SetConeR();
+    virtual void SetConeA();
+    virtual void SetTore();
+    virtual void PushOnOK();
+    virtual bool PushOnApply();
+    virtual void PushOnHelp();
+};
+
+class SMESHGUI_EXPORT SMESH_EditBoundaryAn : public SMESH_CreateBoundaryAn
+{
+    Q_OBJECT
+public:
+    SMESH_EditBoundaryAn( SMESHGUI_HomardAdaptDlg* parent, bool modal,
+                          SMESHHOMARD::HOMARD_Gen_var myHomardGen0,
+                          QString caseName, QString Name);
+    virtual ~SMESH_EditBoundaryAn();
+
+protected :
+    bool CreateOrUpdateBoundaryAn();
+    void InitValEdit();
+    void InitValBoundaryAnLimit();
+    void SetCylinder();
+    void SetSphere();
+    void SetConeR();
+    void SetConeA();
+    void SetTore();
+    void InitValBoundaryAnCylindre();
+    void InitValBoundaryAnSphere();
+    void InitValBoundaryAnConeR();
+    void InitValBoundaryAnConeA();
+    void InitValBoundaryAnTore();
+};
+
+class SMESHGUI_EXPORT SMESH_CreateBoundaryCAO : public QDialog, public SMESH_Ui_CreateBoundaryCAO
+{
+    Q_OBJECT
+
+public:
+    SMESH_CreateBoundaryCAO( SMESHGUI_HomardAdaptDlg* parent, bool modal,
+                             SMESHHOMARD::HOMARD_Gen_var myHomardGen0,
+                             QString caseName, QString BoundaryName );
+    ~SMESH_CreateBoundaryCAO();
+    virtual void setGroups (QStringList listGroup);
+
+protected :
+
+    SMESHGUI_HomardAdaptDlg *_parent;
+
+    QString _aName;
+
+    SMESHHOMARD::HOMARD_Boundary_var aBoundary;
+    SMESHHOMARD::HOMARD_Gen_var myHomardGen;
+
+    QStringList  _listeGroupesBoundary;
+
+    virtual void AssocieLesGroupes();
+    virtual void InitConnect();
+    virtual void SetNewName();
+
+public slots:
+
+    virtual void SetCAOFile();
+    virtual void SetFiltrage();
+    virtual void PushOnOK();
+    virtual bool PushOnApply();
+    virtual void PushOnHelp();
+};
+
+class SMESHGUI_EXPORT SMESH_EditBoundaryCAO : public SMESH_CreateBoundaryCAO
+{
+    Q_OBJECT
+public:
+    SMESH_EditBoundaryCAO( SMESHGUI_HomardAdaptDlg* parent, bool modal,
+                           SMESHHOMARD::HOMARD_Gen_var myHomardGen0,
+                           QString caseName, QString Name );
+    virtual ~SMESH_EditBoundaryCAO();
+
+protected :
+    virtual void InitValEdit();
+    virtual bool PushOnApply();
+    virtual void SetFiltrage();
+};
+
+class SMESHGUI_EXPORT SMESH_CreateBoundaryDi : public QDialog, public SMESH_Ui_CreateBoundaryDi
+{
+    Q_OBJECT
+
+public:
+    SMESH_CreateBoundaryDi( SMESHGUI_HomardAdaptDlg* parent, bool modal,
+                            SMESHHOMARD::HOMARD_Gen_var myHomardGen0,
+                            QString caseName, QString BoundaryName );
+    ~SMESH_CreateBoundaryDi();
+    virtual void setGroups (QStringList listGroup);
+
+protected :
+
+    SMESHGUI_HomardAdaptDlg *_parent;
+
+    QString _aName;
+
+    SMESHHOMARD::HOMARD_Boundary_var aBoundary;
+    SMESHHOMARD::HOMARD_Gen_var myHomardGen;
+
+    QStringList  _listeGroupesBoundary;
+
+    virtual void AssocieLesGroupes();
+    virtual void InitConnect();
+    virtual void SetNewName();
+
+public slots:
+
+    virtual void SetMeshFile();
+    virtual void SetFiltrage();
+    virtual void PushOnOK();
+    virtual bool PushOnApply();
+    virtual void PushOnHelp();
+};
+
+class SMESHGUI_EXPORT SMESH_EditBoundaryDi : public SMESH_CreateBoundaryDi
+{
+    Q_OBJECT
+public:
+    SMESH_EditBoundaryDi( SMESHGUI_HomardAdaptDlg* parent, bool modal,
+                          SMESHHOMARD::HOMARD_Gen_var myHomardGen0,
+                          QString caseName, QString Name );
+    virtual ~SMESH_EditBoundaryDi();
+
+protected :
+    virtual void InitValEdit();
+    virtual bool PushOnApply();
+    virtual void SetFiltrage();
+};
+
+#endif // MON_CREATEBOUNDARY_H
diff --git a/src/SMESHGUI/SMESHGUI_HomardListGroup.cxx b/src/SMESHGUI/SMESHGUI_HomardListGroup.cxx
new file mode 100644 (file)
index 0000000..b1f7240
--- /dev/null
@@ -0,0 +1,326 @@
+// Copyright (C) 2011-2024  CEA, EDF
+//
+// 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 "SMESHGUI_HomardListGroup.h"
+
+#include "SMESHGUI_HomardBoundaryDlg.h"
+#include "SMESHGUI_HomardUtils.h"
+#include "SMESHGUI_Utils.h"
+
+#include "SalomeApp_Tools.h"
+
+#include <SUIT_Desktop.h>
+#include <SUIT_MessageBox.h>
+#include <SUIT_ResourceMgr.h>
+#include <SUIT_Session.h>
+#include <SUIT_ViewManager.h>
+
+#include <utilities.h>
+
+#include <QFileDialog>
+
+using namespace std;
+
+// ------------------------------------------------------------------------------------
+SMESH_CreateListGroupCAO::SMESH_CreateListGroupCAO(SMESH_CreateBoundaryCAO* parentBound,
+                                                   bool modal,
+                                                   SMESHHOMARD::HOMARD_Gen_var myHomardGen0,
+                                                   QString aCaseName,
+                                                   QStringList listeGroupesHypo)
+  : QDialog(0), SMESH_Ui_CreateListGroup(),
+    _aCaseName (aCaseName),
+    _listeGroupesHypo (listeGroupesHypo),
+    _parentBound(parentBound)
+{
+  MESSAGE("Debut de SMESH_CreateListGroupCAO");
+  myHomardGen = SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen0);
+  setupUi(this);
+  setModal(modal);
+  InitConnect();
+  InitGroupes();
+}
+// ------------------------------------------------------------------------------------
+SMESH_CreateListGroupCAO::SMESH_CreateListGroupCAO(SMESH_CreateBoundaryCAO* parentBound,
+                                                   SMESHHOMARD::HOMARD_Gen_var myHomardGen0,
+                                                   QString aCaseName,
+                                                   QStringList listeGroupesHypo)
+  : QDialog(0), SMESH_Ui_CreateListGroup(),
+    _aCaseName (aCaseName),
+    _listeGroupesHypo (listeGroupesHypo),
+    _parentBound(parentBound)
+{
+    myHomardGen = SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen0);
+    setupUi(this);
+    InitConnect();
+}
+
+// ------------------------------------------------------------------------
+SMESH_CreateListGroupCAO::~SMESH_CreateListGroupCAO()
+// ------------------------------------------------------------------------
+{
+    // no need to delete child widgets, Qt does it all for us
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateListGroupCAO::InitConnect()
+// ------------------------------------------------------------------------
+{
+    connect( buttonOk,     SIGNAL( pressed() ), this, SLOT( PushOnOK() ) );
+    connect( buttonApply,  SIGNAL( pressed() ), this, SLOT( PushOnApply() ) );
+    connect( buttonCancel, SIGNAL( pressed() ), this, SLOT( close() ) );
+    connect( buttonHelp,   SIGNAL( pressed() ), this, SLOT( PushOnHelp() ) );
+}
+// ------------------------------------------------------------------------
+bool SMESH_CreateListGroupCAO::PushOnApply()
+// ------------------------------------------------------------------------
+// Appele lorsque l'un des boutons Ok ou Apply est presse
+//
+{
+  QStringList ListeGroup ;
+  for ( int row=0; row< TWGroupe->rowCount(); row++)
+  {
+      if ( TWGroupe->item( row, 0 )->checkState() ==  Qt::Checked )
+          ListeGroup.insert(0, QString(TWGroupe->item(row, 1)->text()) );
+  }
+  if ( _parentBound ) { _parentBound->setGroups(ListeGroup);};
+  return true;
+}
+
+
+// ------------------------------------------------------------------------
+void SMESH_CreateListGroupCAO::PushOnOK()
+// ------------------------------------------------------------------------
+{
+     if (PushOnApply()) this->close();
+     if ( _parentBound ) { _parentBound->raise(); _parentBound->activateWindow(); };
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateListGroupCAO::PushOnHelp()
+// ------------------------------------------------------------------------
+{
+  SMESH::ShowHelpFile(QString("homard_create_boundary.html#filtering-by-the-groups"));
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateListGroupCAO::InitGroupes()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SMESH_CreateListGroupCAO::InitGroupes ");
+  for ( int row=0; row< TWGroupe->rowCount(); row++)
+      TWGroupe->removeRow(row);
+  TWGroupe->setRowCount(0);
+  if (_aCaseName == QString("")) { return; };
+  SMESHHOMARD::HOMARD_Cas_var monCas = myHomardGen->GetCase();
+  SMESHHOMARD::ListGroupType_var _listeGroupesCas = monCas->GetGroups();
+  for ( int i = 0; i < _listeGroupesCas->length(); i++ ) {
+    TWGroupe->insertRow(i);
+    TWGroupe->setItem( i, 0, new QTableWidgetItem( QString ("") ) );
+    TWGroupe->item( i, 0 )->setFlags( 0 );
+    TWGroupe->item( i, 0 )->setFlags( Qt::ItemIsUserCheckable|Qt::ItemIsEnabled  );
+    if (_listeGroupesHypo.contains (QString((_listeGroupesCas)[i])))
+      {TWGroupe->item( i, 0 )->setCheckState( Qt::Checked );}
+    else
+      {TWGroupe->item( i, 0 )->setCheckState( Qt::Unchecked );}
+    TWGroupe->setItem( i, 1, new QTableWidgetItem(QString((_listeGroupesCas)[i]).trimmed()));
+    TWGroupe->item( i, 1 )->setFlags(Qt::ItemIsEnabled |Qt::ItemIsSelectable );
+  }
+  TWGroupe->resizeColumnsToContents();
+  TWGroupe->resizeRowsToContents();
+  TWGroupe->clearSelection();
+//   MESSAGE("Fin de SMESH_CreateListGroupCAO::InitGroupes ");
+}
+
+
+// ------------------------------------------------------------------------
+SMESH_CreateListGroup::SMESH_CreateListGroup(SMESH_CreateBoundaryDi* parentBound, bool modal,
+                                             SMESHHOMARD::HOMARD_Gen_var myHomardGen0,
+                                             QString aCaseName,  QStringList listeGroupesHypo)
+  : QDialog(0), SMESH_Ui_CreateListGroup(),
+    _aCaseName (aCaseName),
+    _listeGroupesHypo (listeGroupesHypo),
+    _parentBound(parentBound)
+{
+  MESSAGE("Debut de SMESH_CreateListGroup");
+  myHomardGen = SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen0);
+  setupUi(this);
+  setModal(modal);
+  InitConnect();
+  InitGroupes();
+}
+
+// ------------------------------------------------------------------------
+SMESH_CreateListGroup::SMESH_CreateListGroup(SMESH_CreateBoundaryDi* parentBound,
+                                             SMESHHOMARD::HOMARD_Gen_var myHomardGen0,
+                                             QString aCaseName,  QStringList listeGroupesHypo)
+  : QDialog(0), SMESH_Ui_CreateListGroup(),
+    _aCaseName (aCaseName),
+    _listeGroupesHypo (listeGroupesHypo),
+    _parentBound(parentBound)
+{
+  myHomardGen = SMESHHOMARD::HOMARD_Gen::_duplicate(myHomardGen0);
+  setupUi(this);
+  InitConnect();
+}
+
+// ------------------------------------------------------------------------
+SMESH_CreateListGroup::~SMESH_CreateListGroup()
+{
+  // no need to delete child widgets, Qt does it all for us
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateListGroup::InitConnect()
+// ------------------------------------------------------------------------
+{
+    connect( buttonOk,     SIGNAL( pressed() ), this, SLOT( PushOnOK() ) );
+    connect( buttonApply,  SIGNAL( pressed() ), this, SLOT( PushOnApply() ) );
+    connect( buttonCancel, SIGNAL( pressed() ), this, SLOT( close() ) );
+    connect( buttonHelp,   SIGNAL( pressed() ), this, SLOT( PushOnHelp() ) );
+}
+// ------------------------------------------------------------------------
+bool SMESH_CreateListGroup::PushOnApply()
+// ------------------------------------------------------------------------
+// Appele lorsque l'un des boutons Ok ou Apply est presse
+//
+{
+  QStringList ListeGroup ;
+  for ( int row=0; row< TWGroupe->rowCount(); row++)
+  {
+      if ( TWGroupe->item( row, 0 )->checkState() ==  Qt::Checked )
+          ListeGroup.insert(0, QString(TWGroupe->item(row, 1)->text()) );
+  }
+  if ( _parentBound ) { _parentBound->setGroups(ListeGroup);};
+  return true;
+}
+
+
+// ------------------------------------------------------------------------
+void SMESH_CreateListGroup::PushOnOK()
+// ------------------------------------------------------------------------
+{
+    if (PushOnApply())
+    {
+      this->close();
+      if ( _parentBound ) { _parentBound->raise(); _parentBound->activateWindow(); };
+    }
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateListGroup::PushOnHelp()
+// ------------------------------------------------------------------------
+{
+  SMESH::ShowHelpFile(QString("homard_create_boundary.html#filtering-by-the-groups"));
+}
+// ------------------------------------------------------------------------
+void SMESH_CreateListGroup::InitGroupes()
+// ------------------------------------------------------------------------
+{
+  MESSAGE("Debut de SMESH_CreateListGroup::InitGroupes ");
+  for ( int row=0; row< TWGroupe->rowCount(); row++)
+      TWGroupe->removeRow(row);
+  TWGroupe->setRowCount(0);
+  if (_aCaseName == QString("")) { return; };
+  SMESHHOMARD::HOMARD_Cas_var monCas = myHomardGen->GetCase();
+  SMESHHOMARD::ListGroupType_var _listeGroupesCas = monCas->GetGroups();
+  for ( int i = 0; i < _listeGroupesCas->length(); i++ )
+  {
+    TWGroupe->insertRow(i);
+    TWGroupe->setItem( i, 0, new QTableWidgetItem( QString ("") ) );
+    TWGroupe->item( i, 0 )->setFlags( 0 );
+    TWGroupe->item( i, 0 )->setFlags( Qt::ItemIsUserCheckable|Qt::ItemIsEnabled  );
+    if (_listeGroupesHypo.contains (QString((_listeGroupesCas)[i])))
+      {TWGroupe->item( i, 0 )->setCheckState( Qt::Checked );}
+    else
+      {TWGroupe->item( i, 0 )->setCheckState( Qt::Unchecked );}
+    TWGroupe->setItem( i, 1, new QTableWidgetItem(QString((_listeGroupesCas)[i]).trimmed()));
+    TWGroupe->item( i, 1 )->setFlags(Qt::ItemIsEnabled |Qt::ItemIsSelectable );
+  }
+  TWGroupe->resizeColumnsToContents();
+  TWGroupe->resizeRowsToContents();
+  TWGroupe->clearSelection();
+//   MESSAGE("Fin de SMESH_CreateListGroup::InitGroupes ");
+}
+
+//---------------------------------------------------------------------
+SMESH_EditListGroupCAO::SMESH_EditListGroupCAO( SMESH_CreateBoundaryCAO* parentBound,
+                                                bool modal,
+                                                SMESHHOMARD::HOMARD_Gen_var myHomardGen0,
+                                                QString aCaseName,
+                                                QStringList listeGroupesHypo):
+//---------------------------------------------------------------------
+SMESH_CreateListGroupCAO(parentBound,myHomardGen0,aCaseName,listeGroupesHypo)
+{
+  MESSAGE("Debut de SMESH_EditListGroupCAO");
+    setWindowTitle(QObject::tr("HOM_GROU_EDIT_WINDOW_TITLE"));
+  setModal(true);
+  InitGroupes();
+}
+
+//------------------------------------
+SMESH_EditListGroupCAO:: ~SMESH_EditListGroupCAO()
+//------------------------------------
+{
+}
+// -------------------------------------
+void SMESH_EditListGroupCAO:: InitGroupes()
+// -------------------------------------
+{
+  for (int i = 0; i < _listeGroupesHypo.size(); i++ )
+  {
+     std::cerr << _listeGroupesHypo[i].toStdString().c_str() << std::endl;
+     TWGroupe->insertRow(i);
+     TWGroupe->setItem( i, 0, new QTableWidgetItem( QString ("") ) );
+     TWGroupe->item( i, 0 )->setFlags( 0 );
+     TWGroupe->item( i, 0 )->setCheckState( Qt::Checked );
+     TWGroupe->setItem( i, 1, new QTableWidgetItem(_listeGroupesHypo[i]));
+   }
+   TWGroupe->resizeRowsToContents();
+}
+
+//---------------------------------------------------------------------
+SMESH_EditListGroup::SMESH_EditListGroup( SMESH_CreateBoundaryDi* parentBound,
+                                          bool modal,
+                                          SMESHHOMARD::HOMARD_Gen_var myHomardGen0,
+                                          QString aCaseName,
+                                          QStringList listeGroupesHypo):
+//---------------------------------------------------------------------
+SMESH_CreateListGroup(parentBound,myHomardGen0,aCaseName,listeGroupesHypo)
+{
+  MESSAGE("Debut de SMESH_EditListGroup");
+    setWindowTitle(QObject::tr("HOM_GROU_EDIT_WINDOW_TITLE"));
+  setModal(true);
+  InitGroupes();
+}
+
+//------------------------------------
+SMESH_EditListGroup::~SMESH_EditListGroup()
+//------------------------------------
+{
+}
+// -------------------------------------
+void SMESH_EditListGroup::InitGroupes()
+// -------------------------------------
+{
+  for (int i = 0; i < _listeGroupesHypo.size(); i++ )
+  {
+     std::cerr << _listeGroupesHypo[i].toStdString().c_str() << std::endl;
+     TWGroupe->insertRow(i);
+     TWGroupe->setItem( i, 0, new QTableWidgetItem( QString ("") ) );
+     TWGroupe->item( i, 0 )->setFlags( 0 );
+     TWGroupe->item( i, 0 )->setCheckState( Qt::Checked );
+     TWGroupe->setItem( i, 1, new QTableWidgetItem(_listeGroupesHypo[i]));
+   }
+   TWGroupe->resizeRowsToContents();
+}
diff --git a/src/SMESHGUI/SMESHGUI_HomardListGroup.h b/src/SMESHGUI/SMESHGUI_HomardListGroup.h
new file mode 100644 (file)
index 0000000..4963fce
--- /dev/null
@@ -0,0 +1,254 @@
+// Copyright (C) 2011-2024  CEA, EDF
+//
+// 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 MON_CREATELISTGROUPCAO_H
+#define MON_CREATELISTGROUPCAO_H
+
+#include "SMESH_SMESHGUI.hxx"
+
+#include <SALOMEconfig.h>
+#include <SalomeApp_Module.h>
+
+//#include CORBA_CLIENT_HEADER(SALOMEDS_Attributes)
+#include CORBA_CLIENT_HEADER(SMESH_Homard)
+
+#include <QDialog>
+#include <QtCore/QVariant>
+#include <QtWidgets/QApplication>
+#include <QtWidgets/QDialog>
+#include <QtWidgets/QGridLayout>
+#include <QtWidgets/QGroupBox>
+#include <QtWidgets/QHeaderView>
+#include <QtWidgets/QPushButton>
+#include <QtWidgets/QTableWidget>
+
+class SMESH_CreateBoundaryCAO;
+class SMESH_CreateBoundaryDi;
+
+
+QT_BEGIN_NAMESPACE
+
+class SMESH_Ui_CreateListGroup
+{
+public:
+    QGridLayout *gridLayout;
+    QGroupBox *GBButtons;
+    QGridLayout *gridLayout1;
+    QPushButton *buttonHelp;
+    QPushButton *buttonCancel;
+    QPushButton *buttonApply;
+    QPushButton *buttonOk;
+    QGroupBox *GBOptions;
+    QGridLayout *gridLayout2;
+    QTableWidget *TWGroupe;
+
+    void setupUi(QDialog *CreateListGroup)
+    {
+        if (CreateListGroup->objectName().isEmpty())
+            CreateListGroup->setObjectName(QString::fromUtf8("CreateListGroup"));
+        CreateListGroup->resize(717, 600);
+        QSizePolicy sizePolicy(static_cast<QSizePolicy::Policy>(0), static_cast<QSizePolicy::Policy>(0));
+        sizePolicy.setHorizontalStretch(0);
+        sizePolicy.setVerticalStretch(0);
+        sizePolicy.setHeightForWidth(CreateListGroup->sizePolicy().hasHeightForWidth());
+        CreateListGroup->setSizePolicy(sizePolicy);
+        CreateListGroup->setAutoFillBackground(true);
+        CreateListGroup->setSizeGripEnabled(true);
+        gridLayout = new QGridLayout(CreateListGroup);
+#ifndef Q_OS_MAC
+        gridLayout->setSpacing(6);
+#endif
+#ifndef Q_OS_MAC
+        gridLayout->setContentsMargins(9, 9, 9, 9);
+#endif
+        gridLayout->setObjectName(QString::fromUtf8("gridLayout"));
+        GBButtons = new QGroupBox(CreateListGroup);
+        GBButtons->setObjectName(QString::fromUtf8("GBButtons"));
+        gridLayout1 = new QGridLayout(GBButtons);
+#ifndef Q_OS_MAC
+        gridLayout1->setSpacing(6);
+#endif
+#ifndef Q_OS_MAC
+        gridLayout1->setContentsMargins(9, 9, 9, 9);
+#endif
+        gridLayout1->setObjectName(QString::fromUtf8("gridLayout1"));
+        buttonHelp = new QPushButton(GBButtons);
+        buttonHelp->setObjectName(QString::fromUtf8("buttonHelp"));
+
+        gridLayout1->addWidget(buttonHelp, 0, 3, 1, 1);
+
+        buttonCancel = new QPushButton(GBButtons);
+        buttonCancel->setObjectName(QString::fromUtf8("buttonCancel"));
+
+        gridLayout1->addWidget(buttonCancel, 0, 2, 1, 1);
+
+        buttonApply = new QPushButton(GBButtons);
+        buttonApply->setObjectName(QString::fromUtf8("buttonApply"));
+
+        gridLayout1->addWidget(buttonApply, 0, 1, 1, 1);
+
+        buttonOk = new QPushButton(GBButtons);
+        buttonOk->setObjectName(QString::fromUtf8("buttonOk"));
+
+        gridLayout1->addWidget(buttonOk, 0, 0, 1, 1);
+
+
+        gridLayout->addWidget(GBButtons, 1, 0, 1, 1);
+
+        GBOptions = new QGroupBox(CreateListGroup);
+        GBOptions->setObjectName(QString::fromUtf8("GBOptions"));
+        gridLayout2 = new QGridLayout(GBOptions);
+#ifndef Q_OS_MAC
+        gridLayout2->setSpacing(6);
+#endif
+#ifndef Q_OS_MAC
+        gridLayout2->setContentsMargins(9, 9, 9, 9);
+#endif
+        gridLayout2->setObjectName(QString::fromUtf8("gridLayout2"));
+        TWGroupe = new QTableWidget(GBOptions);
+        if (TWGroupe->columnCount() < 2)
+            TWGroupe->setColumnCount(2);
+        QTableWidgetItem *__qtablewidgetitem = new QTableWidgetItem();
+        TWGroupe->setHorizontalHeaderItem(0, __qtablewidgetitem);
+        QTableWidgetItem *__qtablewidgetitem1 = new QTableWidgetItem();
+        TWGroupe->setHorizontalHeaderItem(1, __qtablewidgetitem1);
+        TWGroupe->setObjectName(QString::fromUtf8("TWGroupe"));
+        TWGroupe->setShowGrid(true);
+        TWGroupe->setRowCount(0);
+        TWGroupe->setColumnCount(2);
+
+        gridLayout2->addWidget(TWGroupe, 0, 0, 1, 1);
+
+
+        gridLayout->addWidget(GBOptions, 0, 0, 1, 1);
+
+
+        retranslateUi(CreateListGroup);
+
+        QMetaObject::connectSlotsByName(CreateListGroup);
+    } // setupUi
+
+    void retranslateUi(QDialog *CreateListGroup)
+    {
+        CreateListGroup->setWindowTitle(QApplication::translate("CreateListGroup", "Selection of groups", nullptr));
+        GBButtons->setTitle(QString());
+        buttonHelp->setText(QApplication::translate("CreateListGroup", "Help", nullptr));
+        buttonCancel->setText(QApplication::translate("CreateListGroup", "Cancel", nullptr));
+        buttonApply->setText(QApplication::translate("CreateListGroup", "Apply", nullptr));
+        buttonOk->setText(QApplication::translate("CreateListGroup", "OK", nullptr));
+        GBOptions->setTitle(QApplication::translate("CreateListGroup", "Selected groups", nullptr));
+        QTableWidgetItem *___qtablewidgetitem = TWGroupe->horizontalHeaderItem(0);
+        ___qtablewidgetitem->setText(QApplication::translate("CreateListGroup", "Selection", nullptr));
+        QTableWidgetItem *___qtablewidgetitem1 = TWGroupe->horizontalHeaderItem(1);
+        ___qtablewidgetitem1->setText(QApplication::translate("CreateListGroup", "Group", nullptr));
+    } // retranslateUi
+
+};
+
+namespace Ui {
+    class CreateListGroup: public SMESH_Ui_CreateListGroup {};
+} // namespace Ui
+
+QT_END_NAMESPACE
+
+class SMESHGUI_EXPORT SMESH_CreateListGroupCAO : public QDialog, public SMESH_Ui_CreateListGroup
+{
+    Q_OBJECT
+
+public:
+    SMESH_CreateListGroupCAO( SMESH_CreateBoundaryCAO* parentBound, bool modal, SMESHHOMARD::HOMARD_Gen_var myHomardGen, QString aCaseName,  QStringList listeGroupesHypo);
+    SMESH_CreateListGroupCAO( SMESH_CreateBoundaryCAO* parentBound, SMESHHOMARD::HOMARD_Gen_var myHomardGen, QString aCaseName, QStringList listeGroupesHypo);
+    virtual ~SMESH_CreateListGroupCAO();
+
+protected :
+
+    SMESHHOMARD::HOMARD_Gen_var myHomardGen;
+
+    SMESH_CreateBoundaryCAO * _parentBound;
+    QString _aCaseName;
+    QStringList _listeGroupesHypo;
+
+    virtual void InitConnect();
+    virtual void InitGroupes();
+
+public slots:
+    virtual void PushOnOK();
+    virtual bool PushOnApply();
+    virtual void PushOnHelp();
+
+};
+
+class SMESHGUI_EXPORT SMESH_CreateListGroup : public QDialog, public SMESH_Ui_CreateListGroup
+{
+    Q_OBJECT
+
+public:
+    SMESH_CreateListGroup( SMESH_CreateBoundaryDi* parentBound, bool modal, SMESHHOMARD::HOMARD_Gen_var myHomardGen, QString aCaseName,  QStringList listeGroupesHypo);
+    SMESH_CreateListGroup( SMESH_CreateBoundaryDi* parentBound, SMESHHOMARD::HOMARD_Gen_var myHomardGen, QString aCaseName, QStringList listeGroupesHypo);
+    virtual ~SMESH_CreateListGroup();
+
+protected :
+
+    SMESHHOMARD::HOMARD_Gen_var myHomardGen;
+
+    SMESH_CreateBoundaryDi * _parentBound;
+    QString _aCaseName;
+    QStringList _listeGroupesHypo;
+
+    virtual void InitConnect();
+    virtual void InitGroupes();
+
+public slots:
+    virtual void PushOnOK();
+    virtual bool PushOnApply();
+    virtual void PushOnHelp();
+
+};
+
+class SMESHGUI_EXPORT SMESH_EditListGroupCAO : public SMESH_CreateListGroupCAO
+{
+    Q_OBJECT
+
+public:
+    SMESH_EditListGroupCAO( SMESH_CreateBoundaryCAO* parentBound, bool modal, SMESHHOMARD::HOMARD_Gen_var myHomardGen, QString aCaseName,  QStringList listeGroupesHypo);
+    virtual ~SMESH_EditListGroupCAO();
+
+protected :
+
+    virtual void InitGroupes();
+
+};
+
+class SMESHGUI_EXPORT SMESH_EditListGroup : public SMESH_CreateListGroup
+{
+    Q_OBJECT
+
+public:
+    SMESH_EditListGroup( SMESH_CreateBoundaryDi* parentBound, bool modal,
+                      SMESHHOMARD::HOMARD_Gen_var myHomardGen,
+                      QString aCaseName, QStringList listeGroupesHypo);
+    virtual ~SMESH_EditListGroup();
+
+protected :
+
+    virtual void InitGroupes();
+
+};
+
+#endif // MON_CREATELISTGROUPCAO_H
diff --git a/src/SMESHGUI/SMESHGUI_HomardUtils.cxx b/src/SMESHGUI/SMESHGUI_HomardUtils.cxx
new file mode 100644 (file)
index 0000000..afbf6cc
--- /dev/null
@@ -0,0 +1,659 @@
+// Copyright (C) 2011-2024  CEA, EDF
+//
+// 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 "SMESHGUI_HomardUtils.h"
+
+#include <utilities.h>
+
+#include "OB_Browser.h"
+
+#include "SUIT_Desktop.h"
+#include "SUIT_Application.h"
+#include "SUIT_Session.h"
+
+#include "LightApp_SelectionMgr.h"
+#include "SalomeApp_Application.h"
+#include "SalomeApp_Module.h"
+#include "SalomeApp_Study.h"
+
+#include "SALOME_ListIO.hxx"
+
+#include "SALOMEconfig.h"
+#include <string>
+
+#include <qmessagebox.h>
+#include <qcombobox.h>
+#include <qfiledialog.h>
+#include <qstring.h>
+#include <stdlib.h>
+#include <qstringlist.h>
+
+#include <sys/stat.h>
+#ifndef WIN32
+#include <dirent.h>
+#include <unistd.h>
+#endif
+
+#include "SalomeApp_Tools.h"
+
+#include <med.h>
+
+SALOME_ListIO SMESH_HOMARD_UTILS::mySelected;
+
+//================================================================
+// Function : GetActiveStudy
+// Returne un pointeur sur l'etude active
+//================================================================
+SUIT_Study* SMESH_HOMARD_UTILS::GetActiveStudy()
+{
+    SUIT_Application* app = SUIT_Session::session()->activeApplication();
+    if (app)
+      return app->activeStudy();
+    else
+      return NULL;
+}
+
+//================================================================
+// Function : getStudy
+// Returne un pointeur sur l'etude active
+//================================================================
+_PTR(Study) SMESH_HOMARD_UTILS::getStudy()
+{
+  static _PTR(Study) _study;
+  if(!_study)
+    _study = SalomeApp_Application::getStudy();
+  return _study;
+}
+
+//================================================================
+// Function : updateObjBrowser
+// Purpose  : met a jour l arbre d 'etude pour Homard
+//================================================================
+void SMESH_HOMARD_UTILS::updateObjBrowser()
+{
+    SalomeApp_Application* app = dynamic_cast<SalomeApp_Application*>(SUIT_Session::session()->activeApplication());
+    if (app) {
+      //  Le nom identifiant doit etre la valeur du parametre
+      // name de la section HOMARD du fichier SalomeApp.xml
+      CAM_Module* module = app->module("Homard" );
+      SalomeApp_Module* appMod = dynamic_cast<SalomeApp_Module*>( module );
+      if ( appMod ) {
+        app->updateObjectBrowser();
+        appMod->updateObjBrowser( true );
+      }
+      else
+        MESSAGE( "---   SMESHHOMARD::updateObjBrowser: appMod = NULL");
+    }
+}
+
+//================================================================
+// Function : selectedIO
+// Return the list of selected SALOME_InteractiveObject's
+//================================================================
+const SALOME_ListIO& SMESH_HOMARD_UTILS::selectedIO()
+{
+      SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* > ( SUIT_Session::session()->activeApplication() );
+      LightApp_SelectionMgr* aSelectionMgr = app->selectionMgr();
+      if( aSelectionMgr )
+      {
+             aSelectionMgr->selectedObjects( mySelected );
+        for (SALOME_ListIteratorOfListIO it (mySelected); it.More(); it.Next())
+        SCRUTE(it.Value()->getEntry());
+      };
+      return mySelected;
+}
+
+//================================================================
+// Function : IObjectCount
+// Return the number of selected objects
+//================================================================
+int SMESH_HOMARD_UTILS::IObjectCount()
+{
+      SalomeApp_Application* app = dynamic_cast< SalomeApp_Application* >( SUIT_Session::session()->activeApplication() );
+      LightApp_SelectionMgr* aSelectionMgr = app->selectionMgr();
+      if( aSelectionMgr )
+      {
+             aSelectionMgr->selectedObjects( mySelected );
+             SCRUTE(mySelected.Extent());
+        return mySelected.Extent();
+      }
+      return 0;
+}
+
+//================================================================
+// Function : firstIObject
+// Purpose  :  Return the first selected object in the selected object list
+//================================================================
+Handle(SALOME_InteractiveObject) SMESH_HOMARD_UTILS::firstIObject()
+{
+      const SALOME_ListIO& aList = selectedIO();
+      return aList.Extent() > 0 ? aList.First() : Handle(SALOME_InteractiveObject)();
+}
+
+//================================================================
+// Function : lastIObject
+// Return the last selected object in the selected object list
+//================================================================
+Handle(SALOME_InteractiveObject) SMESH_HOMARD_UTILS::lastIObject()
+{
+      const SALOME_ListIO& aList = selectedIO();
+      return aList.Extent() > 0 ? aList.Last() : Handle(SALOME_InteractiveObject)();
+}
+
+//================================================================
+// Retourne vrai si l'objet est du type voulu
+// . Dans le cas d'un cas, d'une hypothese, d'une zone, on se contente
+// d'une comparaison simple entre le type stocke et TypeObject.
+// . Pour l'iteration, le type stocke en attribut est sous la forme
+// "IterationHomard" + le nom de l'iteration precedente.
+// Il faut donc regarder si la chaine commence par TypeObject.
+// . Idem pour le fichier de messages : "Mess " + numero d'iteration
+//
+// On filtre ce genre de situation avec option :
+//  -1 : comparaison totale
+//   0 : comparaison sur le debut de la chaine
+//================================================================
+bool SMESH_HOMARD_UTILS::isObject(_PTR(SObject) MonObj, QString TypeObject, int option)
+{
+//   MESSAGE("isObject, TypeObject = "<<TypeObject.toStdString().c_str()<<", option = "<<option);
+// Existence d'un attribut ?
+  _PTR(GenericAttribute) anAttr;
+  if ( !MonObj->FindAttribute(anAttr, "AttributeComment") ) return false;
+// Quel type ?
+  _PTR(AttributeComment) aComment (anAttr);
+  QString Type = QString(aComment->Value().c_str());
+//   MESSAGE("Type = "<<Type.toStdString().c_str());
+// Est-ce le bon ?
+  bool bOK = false ;
+  if ( option == 0 )
+  {
+    int position = Type.lastIndexOf(TypeObject);
+//     MESSAGE("position = "<<position);
+    if ( position == 0 ) { bOK = true ; }
+  }
+  else
+  {
+    if ( Type == TypeObject ) { bOK = true ; }
+  }
+  return bOK ;
+}
+//================================================================
+// Retourne vrai si l'objet est une frontiere CAO
+//================================================================
+bool SMESH_HOMARD_UTILS::isBoundaryCAO(_PTR(SObject) MonObj)
+{
+   return isObject( MonObj, QString("BoundaryCAOHomard"), -1 ) ;
+}
+//================================================================
+// Retourne vrai si l'objet est une frontiere analytique
+//================================================================
+bool SMESH_HOMARD_UTILS::isBoundaryAn(_PTR(SObject) MonObj)
+{
+   return isObject( MonObj, QString("BoundaryAnHomard"), -1 ) ;
+}
+//================================================================
+// Retourne vrai si l'objet est une frontiere discrete
+//================================================================
+bool SMESH_HOMARD_UTILS::isBoundaryDi(_PTR(SObject) MonObj)
+{
+   return isObject( MonObj, QString("BoundaryDiHomard"), -1 ) ;
+}
+//================================================================
+// Retourne vrai si l'objet est un cas
+//================================================================
+bool SMESH_HOMARD_UTILS::isCase(_PTR(SObject) MonObj)
+{
+   return isObject( MonObj, QString("CasHomard"), -1 ) ;
+}
+//================================================================
+// Retourne vrai si l'objet est une Hypothese
+//================================================================
+bool SMESH_HOMARD_UTILS::isHypo(_PTR(SObject) MonObj)
+{
+   return isObject( MonObj, QString("HypoHomard"), -1 ) ;
+}
+//================================================================
+// Retourne vrai si l'objet est une iteration
+//================================================================
+bool SMESH_HOMARD_UTILS::isIter(_PTR(SObject) MonObj)
+{
+   return isObject( MonObj, QString("IterationHomard"), 0 ) ;
+}
+//================================================================
+// Retourne vrai si l'objet est un fichier de type TypeFile
+//================================================================
+bool SMESH_HOMARD_UTILS::isFileType(_PTR(SObject) MonObj, QString TypeFile)
+{
+   return isObject( MonObj, TypeFile, 0 ) ;
+}
+
+// ============================================================================
+QString SMESH_HOMARD_QT_COMMUN::SelectionArbreEtude(QString commentaire, int option )
+// ============================================================================
+// Retourne l'objet selectionne dans l'arbre d'etudes
+// commentaire :
+// . si le commentaire est une chaine vide, on ne tient pas compte du type de l'objet
+//   et on retourne le nom de cet objet
+// . sinon :
+//   . si l'objet est du type defini par commentaire, retourne le nom de cet objet
+//   . sinon on retourne une QString("")
+// option :
+// . Si option = 0, ce n'est pas grave de ne rien trouver ; aucun message n'est emis
+// . Si option = 1, ce n'est pas grave de ne rien trouver mais on emet un message
+{
+//   MESSAGE("SelectionArbreEtude : commentaire = " << commentaire.toStdString().c_str() << " et option = " << option);
+  int nbSel = SMESH_HOMARD_UTILS::IObjectCount() ;
+  if ( nbSel == 0 )
+  {
+    if ( option == 1 )
+    {
+      QMessageBox::warning( 0, QObject::tr("HOM_WARNING"),
+                               QObject::tr("HOM_SELECT_OBJECT_1") );
+    }
+    return QString("");
+  }
+  if ( nbSel > 1 )
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_SELECT_OBJECT_2") );
+    return QString("");
+  }
+//
+  Handle(SALOME_InteractiveObject) aIO = SMESH_HOMARD_UTILS::firstIObject();
+  if ( aIO->hasEntry() )
+  {
+//     MESSAGE("aIO->getEntry() = " << aIO->getEntry());
+    _PTR(Study) aStudy = SMESH_HOMARD_UTILS::getStudy();
+    _PTR(SObject) aSO ( aStudy->FindObjectID( aIO->getEntry() ) );
+    _PTR(GenericAttribute) anAttr;
+    if (aSO->FindAttribute(anAttr, "AttributeComment") )
+    {
+      if ( commentaire != "" )
+      {
+        _PTR(AttributeComment) attributComment = anAttr;
+        QString aComment= QString(attributComment->Value().data());
+//         MESSAGE("... aComment = " << aComment.toStdString().c_str());
+        int iaux = aComment.lastIndexOf(commentaire);
+//         MESSAGE("... iaux = " << iaux);
+        if ( iaux !=0  )
+        {
+          QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                    QObject::tr("HOM_SELECT_OBJECT_3").arg(commentaire) );
+          return QString("");
+        }
+      }
+      if (aSO->FindAttribute(anAttr, "AttributeName") )
+      {
+        _PTR(AttributeName) attributName = anAttr;
+        QString aName= QString(attributName->Value().data());
+        return aName;
+      }
+    }
+  }
+//
+  return QString("");
+}
+
+// =======================================================================
+QString SMESH_HOMARD_QT_COMMUN::SelectionCasEtude()
+// =======================================================================
+{
+  QString aName    = QString("");
+  int nbSel = SMESH_HOMARD_UTILS::IObjectCount() ;
+  if ( nbSel == 0 )
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_SELECT_OBJECT_1") );
+    return QString("");
+  }
+  if ( nbSel > 1 )
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_SELECT_OBJECT_2") );
+    return QString("");
+  }
+  Handle(SALOME_InteractiveObject) aIO = SMESH_HOMARD_UTILS::firstIObject();
+  if ( aIO->hasEntry() )
+  {
+       _PTR(Study) aStudy = SMESH_HOMARD_UTILS::getStudy();
+       _PTR(SObject) aSO ( aStudy->FindObjectID( aIO->getEntry() ) );
+        _PTR(SObject) aSObjCas = aSO->GetFather();
+       _PTR(GenericAttribute) anAttr;
+       if (aSObjCas->FindAttribute(anAttr, "AttributeName") )
+        {
+            _PTR(AttributeName) attributName = anAttr;
+            aName= QString(attributName->Value().data());
+        }
+        return aName;
+    }
+    return QString("");
+}
+
+// =======================================================================
+QString SMESH_HOMARD_QT_COMMUN::PushNomFichier(bool avertir, QString TypeFichier)
+// =======================================================================
+// Gestion les boutons qui permettent  de
+// 1) retourne le nom d'un fichier par une fenetre de dialogue si aucun
+//    objet est selectionne dans l arbre d etude
+// 2) retourne le nom du fichier asocie a l objet
+//    selectionne dans l arbre d etude
+{
+//   MESSAGE("PushNomFichier avec avertir "<<avertir<<" et TypeFichier = "<<TypeFichier.toStdString().c_str());
+  QString aFile = QString::null;
+//
+  // A. Filtre
+  QString filtre  ;
+//
+  if ( TypeFichier == "med" )     { filtre = QString("Med") ; }
+  else if ( TypeFichier == "py" ) { filtre = QString("Python") ; }
+  else                            { filtre = TypeFichier ; }
+  //
+  if ( TypeFichier != "" ) { filtre += QString(" files (*.") + TypeFichier + QString(");;") ; }
+  //
+  filtre += QString("all (*) ") ;
+  //
+  // B. Selection
+  //int nbSel = SMESH_HOMARD_UTILS::IObjectCount() ;
+  int nbSel = 0;
+  //   MESSAGE("nbSel ="<<nbSel);
+  // B.1. Rien n'est selectionne
+  if ( nbSel == 0 )
+  {
+    //aFile = QFileDialog::getOpenFileName(0, QObject::tr("HOM_SELECT_FILE_0"), QString(""), QString("Med files (*.med);;all (*) ") );
+    aFile = QFileDialog::getOpenFileName(0, QObject::tr("HOM_SELECT_FILE_0"), QString(""), filtre );
+  }
+  // B.2. Un objet est selectionne
+  else if (nbSel == 1)
+  {
+    Handle(SALOME_InteractiveObject) aIO = SMESH_HOMARD_UTILS::firstIObject();
+    if ( aIO->hasEntry() )
+    {
+      _PTR(Study) aStudy = SMESH_HOMARD_UTILS::getStudy();
+      _PTR(SObject) aSO ( aStudy->FindObjectID( aIO->getEntry() ) );
+      _PTR(GenericAttribute) anAttr;
+      _PTR(AttributeFileType) aFileType;
+      _PTR(AttributeExternalFileDef) aFileName;
+      if (aSO) {
+        if (aSO->FindAttribute(anAttr, "AttributeFileType") ) {
+          aFileType=anAttr;
+          QString fileType=QString(aFileType->Value().data());
+          if ( fileType==QString("FICHIERMED")) {
+            if (aSO->FindAttribute(anAttr,"AttributeExternalFileDef")) {
+            aFileName=anAttr;
+            aFile= QString(aFileName->Value().data()); }
+          }
+        }
+      }
+    }
+
+    if ( aFile==QString::null )
+    {
+      if ( avertir ) {
+        QMessageBox::warning( 0, QObject::tr("HOM_WARNING"),
+                                 QObject::tr("HOM_SELECT_STUDY") );
+      }
+      aFile = QFileDialog::getOpenFileName(0, QObject::tr("HOM_SELECT_FILE_0"), QString(""), filtre );
+    }
+  }
+  // B.3. Bizarre
+  else
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_SELECT_FILE_2") );
+  }
+
+  return aFile;
+}
+// =======================================================================
+med_idt SMESH_HOMARD_QT_COMMUN::OuvrirFichier(QString aFile)
+// =======================================================================
+// renvoie le medId associe au fichier Med apres ouverture
+{
+  med_idt medIdt = MEDfileOpen(aFile.toStdString().c_str(),MED_ACC_RDONLY);
+  if (medIdt <0)
+  {
+    QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                              QObject::tr("HOM_MED_FILE_1") );
+  }
+  return medIdt;
+}
+
+// ======================================================
+QString SMESH_HOMARD_QT_COMMUN::LireNomMaillage(QString aFile)
+// ========================================================
+{
+  QString nomMaillage = "" ;
+  int erreur = 0 ;
+  med_idt medIdt ;
+  while ( erreur == 0 )
+  {
+    //  Ouverture du fichier
+    medIdt = SMESH_HOMARD_QT_COMMUN::OuvrirFichier(aFile);
+    if ( medIdt < 0 )
+    {
+      erreur = 1 ;
+      break ;
+    }
+    med_int numberOfMeshes = MEDnMesh(medIdt) ;
+    if (numberOfMeshes == 0 )
+    {
+      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                QObject::tr("HOM_MED_FILE_2") );
+      erreur = 2 ;
+      break ;
+    }
+    if (numberOfMeshes > 1 )
+    {
+      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                QObject::tr("HOM_MED_FILE_3") );
+      erreur = 3 ;
+      break ;
+    }
+
+    nomMaillage = SMESH_HOMARD_QT_COMMUN::LireNomMaillage2(medIdt,1);
+    break ;
+  }
+  // Fermeture du fichier
+  if ( medIdt > 0 ) MEDfileClose(medIdt);
+
+  return nomMaillage;
+}
+// =======================================================================
+QString SMESH_HOMARD_QT_COMMUN::LireNomMaillage2(med_idt medIdt ,int meshId)
+// =======================================================================
+{
+  QString NomMaillage=QString::null;
+  char meshname[MED_NAME_SIZE+1];
+  med_int spacedim,meshdim;
+  med_mesh_type meshtype;
+  char descriptionription[MED_COMMENT_SIZE+1];
+  char dtunit[MED_SNAME_SIZE+1];
+  med_sorting_type sortingtype;
+  med_int nstep;
+  med_axis_type axistype;
+  int naxis = MEDmeshnAxis(medIdt,1);
+  char *axisname=new char[naxis*MED_SNAME_SIZE+1];
+  char *axisunit=new char[naxis*MED_SNAME_SIZE+1];
+  med_err aRet = MEDmeshInfo(medIdt,
+                          meshId,
+                          meshname,
+                          &spacedim,
+                          &meshdim,
+                          &meshtype,
+                          descriptionription,
+                          dtunit,
+                          &sortingtype,
+                          &nstep,
+                          &axistype,
+                          axisname,
+                          axisunit);
+
+  if ( aRet < 0 ) { QMessageBox::critical( 0, QObject::tr("HOM_ERROR"), \
+                                              QObject::tr("HOM_MED_FILE_4") );  }
+  else            { NomMaillage=QString(meshname); }
+
+  delete[] axisname ;
+  delete[] axisunit ;
+
+  return NomMaillage;
+}
+
+
+// =======================================================================
+std::list<QString> SMESH_HOMARD_QT_COMMUN::GetListeChamps(QString aFile)
+// =======================================================================
+{
+// Il faut voir si plusieurs maillages
+
+  MESSAGE("GetListeChamps");
+  std::list<QString> ListeChamp ;
+
+  med_err erreur = 0 ;
+  med_idt medIdt ;
+
+  while ( erreur == 0 )
+  {
+    // Ouverture du fichier
+    SCRUTE(aFile.toStdString());
+    medIdt = SMESH_HOMARD_QT_COMMUN::OuvrirFichier(aFile);
+    if ( medIdt < 0 )
+    {
+      erreur = 1 ;
+      break ;
+    }
+  // Lecture du nombre de champs
+    med_int ncha = MEDnField(medIdt) ;
+    if (ncha < 1 )
+    {
+      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                QObject::tr("HOM_MED_FILE_5") );
+      erreur = 2 ;
+      break ;
+    }
+  // Lecture des caracteristiques des champs
+    for (int i=0; i< ncha; i++)
+    {
+//       Lecture du nombre de composantes
+      med_int ncomp = MEDfieldnComponent(medIdt,i+1);
+//       Lecture du type du champ, des noms des composantes et du nom de l'unite
+      char nomcha  [MED_NAME_SIZE+1];
+      char meshname[MED_NAME_SIZE+1];
+      char * comp = (char*) malloc(ncomp*MED_SNAME_SIZE+1);
+      char * unit = (char*) malloc(ncomp*MED_SNAME_SIZE+1);
+      char dtunit[MED_SNAME_SIZE+1];
+      med_bool local;
+      med_field_type typcha;
+      med_int nbofcstp;
+      erreur = MEDfieldInfo(medIdt,i+1,nomcha,meshname,&local,&typcha,comp,unit,dtunit,&nbofcstp) ;
+      free(comp);
+      free(unit);
+      if ( erreur < 0 )
+      {
+        QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                  QObject::tr("HOM_MED_FILE_6") );
+        break ;
+      }
+      ListeChamp.push_back(QString(nomcha));
+    }
+    break ;
+  }
+  // Fermeture du fichier
+  if ( medIdt > 0 ) MEDfileClose(medIdt);
+
+  return ListeChamp;
+}
+
+// ======================================================================================
+std::list<QString> SMESH_HOMARD_QT_COMMUN::GetListeComposants(QString aFile, QString aChamp)
+// ======================================================================================
+{
+  MESSAGE ( "GetListeComposants pour le fichier " << aFile.toStdString().c_str());
+  MESSAGE ( "GetListeComposants pour le champ " << aChamp.toStdString().c_str());
+
+  std::list<QString> ListeComposants;
+
+  med_err erreur = 0 ;
+  med_idt medIdt ;
+
+  while ( erreur == 0 )
+  {
+    // Ouverture du fichier
+    SCRUTE(aFile.toStdString());
+    medIdt = SMESH_HOMARD_QT_COMMUN::OuvrirFichier(aFile);
+    if ( medIdt < 0 )
+    {
+      erreur = 1 ;
+      break ;
+    }
+  // Lecture du nombre de champs
+    med_int ncha = MEDnField(medIdt) ;
+    if (ncha < 1 )
+    {
+      QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                QObject::tr("HOM_MED_FILE_5") );
+      erreur = 2 ;
+      break ;
+    }
+  // Lecture des caracteristiques des champs
+    for (int i=0; i< ncha; i++)
+    {
+//       Lecture du nombre de composantes
+      med_int ncomp = MEDfieldnComponent(medIdt,i+1);
+//       Lecture du type du champ, des noms des composantes et du nom de l'unite
+      char nomcha  [MED_NAME_SIZE+1];
+      char meshname[MED_NAME_SIZE+1];
+      char * comp = (char*) malloc(ncomp*MED_SNAME_SIZE+1);
+      char * unit = (char*) malloc(ncomp*MED_SNAME_SIZE+1);
+      char dtunit[MED_SNAME_SIZE+1];
+      med_bool local;
+      med_field_type typcha;
+      med_int nbofcstp;
+      erreur = MEDfieldInfo(medIdt,i+1,nomcha,meshname,&local,&typcha,comp,unit,dtunit,&nbofcstp) ;
+      free(unit);
+      if ( erreur < 0 )
+      {
+        free(comp);
+        QMessageBox::critical( 0, QObject::tr("HOM_ERROR"),
+                                  QObject::tr("HOM_MED_FILE_6") );
+        break ;
+      }
+      // Lecture des composantes si c'est le bon champ
+      if ( QString(nomcha) == aChamp )
+      {
+        for (int j = 0; j <ncomp; j++)
+        {
+          char cible[MED_SNAME_SIZE +1];
+          strncpy(cible,comp+j*MED_SNAME_SIZE,MED_SNAME_SIZE );
+          cible[MED_SNAME_SIZE ]='\0';
+          ListeComposants.push_back(QString(cible));
+        }
+      }
+      // Menage
+      free(comp);
+      // Sortie si c'est bon
+      if ( QString(nomcha) == aChamp ) { break ; }
+    }
+    break ;
+  }
+  // Fermeture du fichier
+  if ( medIdt > 0 ) MEDfileClose(medIdt);
+
+  return ListeComposants;
+}
diff --git a/src/SMESHGUI/SMESHGUI_HomardUtils.h b/src/SMESHGUI/SMESHGUI_HomardUtils.h
new file mode 100644 (file)
index 0000000..afdc52d
--- /dev/null
@@ -0,0 +1,112 @@
+// Copyright (C) 2011-2024  CEA, EDF
+//
+// 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 SMESH_HOMARD_H_UTILS
+#define SMESH_HOMARD_H_UTILS
+
+#include "SMESH_SMESHGUI.hxx"
+
+#include <SALOMEconfig.h>
+
+#include <omniORB4/CORBA.h>
+//#include CORBA_CLIENT_HEADER(SALOMEDS_Attributes)
+#include CORBA_CLIENT_HEADER(SMESH_Homard)
+
+#include <SALOMEDSClient_definitions.hxx>
+#include <SALOME_InteractiveObject.hxx>
+#include <LightApp_DataOwner.h>
+#include <SalomeApp_Application.h>
+#include <SALOME_ListIO.hxx>
+//#include <SALOME_Selection.h>
+#include <SalomeApp_Module.h>
+
+#include <med.h>
+
+#include <qstring.h>
+#include <vector>
+#include <set>
+
+class QString;
+class QStringList;
+class QComboBox;
+
+class SUIT_ViewWindow;
+class SUIT_Desktop;
+class SUIT_Study;
+class SUIT_ResourceMgr;
+
+class CAM_Module;
+
+class SALOMEDSClient_Study;
+class SALOMEDSClient_SObject;
+
+class SalomeApp_Study;
+class SalomeApp_Module;
+class LightApp_SelectionMgr;
+
+namespace SMESH_HOMARD_UTILS {
+
+  SMESHGUI_EXPORT SUIT_Study* GetActiveStudy();
+  SMESHGUI_EXPORT _PTR(Study) getStudy();
+
+  SMESHGUI_EXPORT void updateObjBrowser();
+
+  // Function returns a list of SALOME_InteractiveObject's from
+  // selection manager in GUI
+  SMESHGUI_EXPORT const SALOME_ListIO& selectedIO();
+
+  // Function returns the number of selected objects
+  SMESHGUI_EXPORT int   IObjectCount();
+
+  // Function returns the first selected object in the list
+  // of selected objects
+  SMESHGUI_EXPORT Handle(SALOME_InteractiveObject) firstIObject() ;
+
+  // Function returns the last selected object in the list
+  // of selected objects
+  SMESHGUI_EXPORT Handle(SALOME_InteractiveObject) lastIObject() ;
+
+  SMESHGUI_EXPORT bool isBoundaryCAO(_PTR(SObject)  MonObj);
+  SMESHGUI_EXPORT bool isBoundaryAn(_PTR(SObject)  MonObj);
+  SMESHGUI_EXPORT bool isBoundaryDi(_PTR(SObject)  MonObj);
+  SMESHGUI_EXPORT bool isCase(_PTR(SObject)  MonObj);
+  SMESHGUI_EXPORT bool isHypo(_PTR(SObject)  MonObj);
+  SMESHGUI_EXPORT bool isIter(_PTR(SObject)  MonObj);
+  SMESHGUI_EXPORT bool isFileType(_PTR(SObject)  MonObj, QString TypeFile);
+  SMESHGUI_EXPORT bool isObject(_PTR(SObject)  MonObj, QString TypeObject, int option );
+
+  extern SALOME_ListIO mySelected;
+}
+
+namespace SMESH_HOMARD_QT_COMMUN
+{
+    SMESHGUI_EXPORT QString PushNomFichier(bool avertir, QString TypeFichier="");
+    SMESHGUI_EXPORT QString LireNomMaillage(QString aFile);
+    SMESHGUI_EXPORT QString LireNomMaillage2(med_idt Medidt,int MeshId);
+
+    SMESHGUI_EXPORT med_idt OuvrirFichier(QString aFile);
+
+    SMESHGUI_EXPORT std::list<QString> GetListeChamps(QString aFile);
+    SMESHGUI_EXPORT std::list<QString> GetListeComposants(QString aFile, QString aChamp);
+
+    SMESHGUI_EXPORT QString SelectionArbreEtude(QString commentaire, int grave );
+    SMESHGUI_EXPORT QString SelectionCasEtude();
+};
+
+#endif // ifndef SMESH_HOMARD_H_UTILS
diff --git a/src/SMESHGUI/SMESHGUI_Homard_msg_en.ts b/src/SMESHGUI/SMESHGUI_Homard_msg_en.ts
new file mode 100644 (file)
index 0000000..e1ebe2e
--- /dev/null
@@ -0,0 +1,255 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="en_US">
+<context>
+    <name>@default</name>
+    <message>
+        <source>ADAPT_WITH_HOMARD</source>
+        <translation>Adaptation with HOMARD</translation>
+    </message>
+    <message>
+        <source>HOM_WARNING</source>
+        <translation>Warning</translation>
+    </message>
+    <message>
+        <source>HOM_ERROR</source>
+        <translation>Error</translation>
+    </message>
+    <message>
+        <source>HOM_INACTIVE_BUTTON</source>
+        <translation>Inactive button</translation>
+    </message>
+    <message>
+        <source>HOM_SELECT_OBJECT_1</source>
+        <translation>Select an object.</translation>
+    </message>
+    <message>
+        <source>HOM_SELECT_OBJECT_2</source>
+        <translation>Select only one object.</translation>
+    </message>
+    <message>
+        <source>HOM_SELECT_OBJECT_3</source>
+        <translation>Select an object with type %1.</translation>
+    </message>
+    <message>
+        <source>HOM_SELECT_OBJECT_4</source>
+        <translation>The name of the object is already selected. Modify it or cancel.</translation>
+    </message>
+    <message>
+        <source>HOM_SELECT_FILE_0</source>
+        <translation>File selection</translation>
+    </message>
+    <message>
+        <source>HOM_SELECT_FILE_1</source>
+        <translation>Select a file.</translation>
+    </message>
+    <message>
+        <source>HOM_SELECT_FILE_2</source>
+        <translation>Select only one file.</translation>
+    </message>
+    <message>
+        <source>HOM_SELECT_FILE_3</source>
+        <translation>This file cannot be opened.</translation>
+    </message>
+    <message>
+        <source>HOM_SCRIPT_FILE</source>
+        <translation>A script file must be given.</translation>
+    </message>
+    <message>
+        <source>HOM_MED_FILE_1</source>
+        <translation>This MED file cannot be read.</translation>
+    </message>
+    <message>
+        <source>HOM_MED_FILE_2</source>
+        <translation>No mesh in this MED file.</translation>
+    </message>
+    <message>
+        <source>HOM_MED_FILE_3</source>
+        <translation>More than one mesh in this MED file.</translation>
+    </message>
+    <message>
+        <source>HOM_MED_FILE_4</source>
+        <translation>The mesh in this MED file cannot be read.</translation>
+    </message>
+    <message>
+        <source>HOM_SELECT_STUDY</source>
+        <translation>Select a study object with associated MED file \n or select a MED file.</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_NAME</source>
+        <translation>The case must be named.</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_DIRECTORY_1</source>
+        <translation>A directory for the case must be selected.</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_DIRECTORY_2</source>
+        <translation>This directory is already used by the case </translation>
+    </message>
+    <message>
+        <source>HOM_CASE_DIRECTORY_3</source>
+        <translation>A valid directory for the case must be selected.</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_DIRECTORY_4</source>
+        <translation>A directory for the computation must be selected.</translation>
+    </message>
+    <message>
+        <source>HOM_START_DIRECTORY_1</source>
+        <translation>A starting directory for the pursuit must be selected.</translation>
+    </message>
+    <message>
+        <source>HOM_START_DIRECTORY_3</source>
+        <translation>A valid directory for the pursuit must be selected.</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_MESH</source>
+        <translation>The file of the initial mesh must be selected.</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_GROUP</source>
+        <translation>The group &quot;%1&quot; cannot be given for more than 1 boundary.</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_EDIT_WINDOW_TITLE</source>
+        <translation>Edition of a case</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_EDIT_STATE_0</source>
+        <translation>Initial mesh.</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_EDIT_STATE</source>
+        <translation>Pursuit of an iteration.</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_PURSUE_WINDOW_TITLE</source>
+        <translation>Case: pursuit of a stored iteration</translation>
+    </message>
+    <message>
+        <source>HOM_ITER_NAME</source>
+        <translation>The iteration must be named.</translation>
+    </message>
+    <message>
+        <source>HOM_ITER_STARTING_POINT</source>
+        <translation>The previous iteration must be given.</translation>
+    </message>
+    <message>
+        <source>HOM_ITER_MESH</source>
+        <translation>Give a name for the final mesh.</translation>
+    </message>
+    <message>
+        <source>HOM_ITER_HYPO</source>
+        <translation>A hypothesis must be selected.</translation>
+    </message>
+    <message>
+        <source>HOM_ITER_STARTING_POINT_0</source>
+        <translation>Mesh</translation>
+    </message>
+    <message>
+        <source>HOM_ITER_STARTING_POINT_1</source>
+        <translation>First iteration of the case.</translation>
+    </message>
+    <message>
+        <source>HOM_ITER_STARTING_POINT_2</source>
+        <translation>First iteration of the case for the pursuit.</translation>
+    </message>
+    <message>
+        <source>HOM_ITER_EDIT_WINDOW_TITLE</source>
+        <translation>Edition of an iteration</translation>
+    </message>
+    <message>
+        <source>HOM_HYPO_NAME</source>
+        <translation>The hypothesis must be named.</translation>
+    </message>
+    <message>
+        <source>HOM_HYPO_NORM_L2</source>
+        <translation>L2 norm</translation>
+    </message>
+    <message>
+        <source>HOM_HYPO_NORM_INF</source>
+        <translation>Infinite norm</translation>
+    </message>
+    <message>
+        <source>HOM_HYPO_NORM_ABS</source>
+        <translation>Absolute</translation>
+    </message>
+    <message>
+        <source>HOM_HYPO_NORM_REL</source>
+        <translation>Relative</translation>
+    </message>
+    <message>
+        <source>HOM_HYPO_COMP</source>
+        <translation>At least, one component must be selected.</translation>
+    </message>
+    <message>
+        <source>HOM_HYPO_EDIT_WINDOW_TITLE</source>
+        <translation>Edition of a hypothesis</translation>
+    </message>
+    <message>
+        <source>HOM_BOUN_NAME</source>
+        <translation>The boundary must be named.</translation>
+    </message>
+    <message>
+        <source>HOM_BOUN_MESH</source>
+        <translation>The file for the mesh of the boundary must be selected.</translation>
+    </message>
+    <message>
+        <source>HOM_BOUN_CAO</source>
+        <translation>The file for the CAO must be selected.</translation>
+    </message>
+    <message>
+        <source>HOM_BOUN_CASE</source>
+        <translation>The meshfile of the case is unknown.</translation>
+    </message>
+    <message>
+        <source>HOM_AXE</source>
+        <translation>The axis must be a non 0 vector.</translation>
+    </message>
+    <message>
+        <source>HOM_BOUN_C_EDIT_WINDOW_TITLE</source>
+        <translation>Edition of a CAO based boundary</translation>
+    </message>
+    <message>
+        <source>HOM_BOUN_A_EDIT_WINDOW_TITLE</source>
+        <translation>Edition of an analytical boundary</translation>
+    </message>
+    <message>
+        <source>HOM_BOUN_D_EDIT_WINDOW_TITLE</source>
+        <translation>Edition of a discrete boundary</translation>
+    </message>
+    <message>
+        <source>HOM_GROU_EDIT_WINDOW_TITLE</source>
+        <translation>Selected groups</translation>
+    </message>
+    <message>
+        <source>HOM_MESH_INFO_0</source>
+        <translation>Mesh analysis</translation>
+    </message>
+    <message>
+        <source>HOM_MESH_INFO_1</source>
+        <translation>Select at least one option.</translation>
+    </message>
+    <message>
+        <source>HOM_MESH_INFO_2</source>
+        <translation>Analysis in the object browser, file </translation>
+    </message>
+    <message>
+        <source>PREF_TAB_GENERAL</source>
+        <translation>General</translation>
+    </message>
+    <message>
+        <source>PREF_PUBLICATION</source>
+        <translation>Publication</translation>
+    </message>
+    <message>
+        <source>PREF_PUBLICATION_MAILLAGE_IN</source>
+        <translation>IN meshes</translation>
+    </message>
+    <message>
+        <source>PREF_PUBLICATION_MAILLAGE_OUT</source>
+        <translation>OUT meshes</translation>
+    </message>
+</context>
+</TS>
diff --git a/src/SMESHGUI/SMESHGUI_Homard_msg_fr.ts b/src/SMESHGUI/SMESHGUI_Homard_msg_fr.ts
new file mode 100644 (file)
index 0000000..77cd8ed
--- /dev/null
@@ -0,0 +1,871 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="fr_FR">
+<context>
+    <name>@default</name>
+    <message>
+        <source>HOM_WARNING</source>
+        <translation>Avertissement</translation>
+    </message>
+    <message>
+        <source>HOM_ERROR</source>
+        <translation>Erreur</translation>
+    </message>
+    <message>
+        <source>HOM_INACTIVE_BUTTON</source>
+        <translation>Bouton inactif</translation>
+    </message>
+    <message>
+        <source>OK</source>
+        <translation>Appliquer et fermer</translation>
+    </message>
+    <message>
+        <source>Apply</source>
+        <translation>Appliquer</translation>
+    </message>
+    <message>
+        <source>Cancel</source>
+        <translation>Annuler</translation>
+    </message>
+    <message>
+        <source>Help</source>
+        <translation>Aide</translation>
+    </message>
+    <message>
+        <source>New</source>
+        <translation>Nouveau</translation>
+    </message>
+    <message>
+        <source>Edit</source>
+        <translation>Editer</translation>
+    </message>
+    <message>
+        <source>Quit</source>
+        <translation>Quitter</translation>
+    </message>
+    <message>
+        <source>Name</source>
+        <translation>Nom</translation>
+    </message>
+    <message>
+        <source>Directory</source>
+        <translation>Répertoire</translation>
+    </message>
+    <message>
+        <source>Mesh</source>
+        <translation>Maillage</translation>
+    </message>
+    <message>
+        <source>Selection</source>
+        <translation>Sélection</translation>
+    </message>
+    <message>
+        <source>None</source>
+        <translation>Aucun</translation>
+    </message>
+    <message>
+        <source>All</source>
+        <translation>Tout</translation>
+    </message>
+    <message>
+        <source>HOM_SELECT_OBJECT_1</source>
+        <translation>Sélectionner un objet.</translation>
+    </message>
+    <message>
+        <source>HOM_SELECT_OBJECT_2</source>
+        <translation>Sélectionner un seul objet.</translation>
+    </message>
+    <message>
+        <source>HOM_SELECT_OBJECT_3</source>
+        <translation>Sélectionner un objet de type %1.</translation>
+    </message>
+    <message>
+        <source>HOM_SELECT_OBJECT_4</source>
+        <translation>Le nom est déjà choisi. Modifiez le ou annulez la saisie.</translation>
+    </message>
+    <message>
+        <source>HOM_SELECT_FILE_0</source>
+        <translation>Choix de fichier</translation>
+    </message>
+    <message>
+        <source>HOM_SELECT_FILE_1</source>
+        <translation>Sélectionner un fichier.</translation>
+    </message>
+    <message>
+        <source>HOM_SELECT_FILE_2</source>
+        <translation>Sélectionner un seul fichier.</translation>
+    </message>
+    <message>
+        <source>HOM_SELECT_FILE_3</source>
+        <translation>Impossible d'ouvrir ce fichier.</translation>
+    </message>
+    <message>
+        <source>HOM_SCRIPT_FILE</source>
+        <translation>Il faut donner un fichier pour le script python.</translation>
+    </message>
+    <message>
+        <source>HOM_MED_FILE_1</source>
+        <translation>Ce fichier MED est illisible.</translation>
+    </message>
+    <message>
+        <source>HOM_MED_FILE_2</source>
+        <translation>Ce fichier MED ne contient aucun maillage.</translation>
+    </message>
+    <message>
+        <source>HOM_MED_FILE_3</source>
+        <translation>Ce fichier MED contient plus d'un maillage.</translation>
+    </message>
+    <message>
+        <source>HOM_MED_FILE_4</source>
+        <translation>Impossible de lire le maillage de ce fichier MED.</translation>
+    </message>
+    <message>
+        <source>HOM_SELECT_STUDY</source>
+        <translation>Sélectionner une étude avec un fichier MED associé\n ou sélectionner un fichier MED.</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_DIRECTORY_3</source>
+        <translation>Un répertoire valide doit être choisi.</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_DIRECTORY_4</source>
+        <translation>Il faut choisir un répertoire de travail pour le calcul.</translation>
+    </message>
+    <message>
+        <source>HOM_START_DIRECTORY_1</source>
+        <translation>Il faut choisir un répertoire contenant l'itération à poursuivre.</translation>
+    </message>
+    <message>
+        <source>HOM_START_DIRECTORY_3</source>
+        <translation>Un répertoire valide contenant l'itération à poursuivre doit être choisi.</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_MESH</source>
+        <translation>Il faut choisir le maillage initial.</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_GROUP</source>
+        <translation>Le groupe &quot;%1&quot; ne peut pas être attribué à plus d'une frontière.</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_EDIT_WINDOW_TITLE</source>
+        <translation>Edition d'un cas</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_EDIT_STATE_0</source>
+        <translation>Maillage initial.</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_EDIT_STATE</source>
+        <translation>Poursuite d'une itération.</translation>
+    </message>
+    <message>
+        <source>HOM_CASE_PURSUE_WINDOW_TITLE</source>
+        <translation>Cas de poursuite d'une itération</translation>
+    </message>
+    <message>
+        <source>The configuration file cannot be found.</source>
+        <translation>Le fichier de configuration de HOMARD est introuvable.</translation>
+    </message>
+    <message>
+        <source>The configuration file cannot be read.</source>
+        <translation>Le fichier de configuration de HOMARD est illisible.</translation>
+    </message>
+    <message>
+        <source>The HOMARD mesh file cannot be found.</source>
+        <translation>Le fichier de maillage de HOMARD est introuvable.</translation>
+    </message>
+    <message>
+        <source>HOM_ITER_NAME</source>
+        <translation>Il faut donner un nom à l'itération.</translation>
+    </message>
+    <message>
+        <source>HOM_ITER_STARTING_POINT</source>
+        <translation>Il faut désigner l'itération précédente.</translation>
+    </message>
+    <message>
+        <source>HOM_ITER_MESH</source>
+        <translation>Donner le nom du maillage final.</translation>
+    </message>
+    <message>
+        <source>HOM_ITER_HYPO</source>
+        <translation>Choisir une hypothèse.</translation>
+    </message>
+    <message>
+        <source>HOM_ITER_STARTING_POINT_0</source>
+        <translation>Maillage</translation>
+    </message>
+    <message>
+        <source>HOM_ITER_STARTING_POINT_1</source>
+        <translation>Itération initiale du cas.</translation>
+    </message>
+    <message>
+        <source>HOM_ITER_STARTING_POINT_2</source>
+        <translation>Itération initiale du cas pour la poursuite.</translation>
+    </message>
+    <message>
+        <source>HOM_ITER_EDIT_WINDOW_TITLE</source>
+        <translation>Edition d'une itération</translation>
+    </message>
+    <message>
+        <source>Boundary type</source>
+        <translation>Type de frontière</translation>
+    </message>
+    <message>
+        <source>No boundary</source>
+        <translation>Pas de frontière</translation>
+    </message>
+    <message>
+        <source>Non CAO</source>
+        <translation>Autre que CAO</translation>
+    </message>
+    <message>
+        <source>Discrete boundary</source>
+        <translation>Frontière discrète</translation>
+    </message>
+    <message>
+        <source>Analytical boundary</source>
+        <translation>Frontière analytique</translation>
+    </message>
+    <message>
+        <source>Conformity type</source>
+        <translation>Type de conformité</translation>
+    </message>
+    <message>
+        <source>Conformal</source>
+        <translation>Conforme</translation>
+    </message>
+    <message>
+        <source>Non conformal</source>
+        <translation>Non conforme</translation>
+    </message>
+    <message>
+        <source>Non conformal option</source>
+        <translation>Option de non conformité</translation>
+    </message>
+    <message>
+        <source>Conformity +</source>
+        <translation>Conformité +</translation>
+    </message>
+    <message>
+        <source>Free</source>
+        <translation>Libre</translation>
+    </message>
+    <message>
+        <source>1 hanging node per mesh</source>
+        <translation>1 noeud pendant par maille</translation>
+    </message>
+    <message>
+        <source>1 node per edge</source>
+        <translation>1 noeud pendant par arête</translation>
+    </message>
+    <message>
+        <source>Advanced options</source>
+        <translation>Options avancées</translation>
+    </message>
+    <message>
+        <source>Authorized pyramids</source>
+        <translation>Pyramides autorisées</translation>
+    </message>
+    <message>
+        <source>Minimal diameter</source>
+        <translation>Diamètre minimal</translation>
+    </message>
+    <message>
+        <source>Initialization of adaptation</source>
+        <translation>Initialisation de l'adaptation</translation>
+    </message>
+    <message>
+        <source>Maximal level</source>
+        <translation>Niveau maximal</translation>
+    </message>
+    <message>
+        <source>Output of the level of refinement</source>
+        <translation>Sortie du niveau de raffinement</translation>
+    </message>
+    <message>
+        <source>Output of the qualities</source>
+        <translation>Sortie des qualités</translation>
+    </message>
+    <message>
+        <source>Output of the diameters</source>
+        <translation>Sortie des diamètres</translation>
+    </message>
+    <message>
+        <source>Output of the parents</source>
+        <translation>Sortie des parents</translation>
+    </message>
+    <message>
+        <source>Output of the neighbours</source>
+        <translation>Sortie des voisins</translation>
+    </message>
+    <message>
+        <source>Create an iteration</source>
+        <translation>Création d'une itération</translation>
+    </message>
+    <message>
+        <source>Iteration Name</source>
+        <translation>Nom de l'itération</translation>
+    </message>
+    <message>
+        <source>Previous iteration</source>
+        <translation>Itération précédente</translation>
+    </message>
+    <message>
+        <source>Invalid boundary</source>
+        <translation>Frontière non valable</translation>
+    </message>
+    <message>
+        <source>Invalid case</source>
+        <translation>Cas non valable</translation>
+    </message>
+    <message>
+        <source>Invalid case context</source>
+        <translation>Cas contextuel non valable</translation>
+    </message>
+    <message>
+        <source>Invalid hypothesis</source>
+        <translation>Hypothèse non valable</translation>
+    </message>
+    <message>
+        <source>Invalid iteration</source>
+        <translation>Itération non valable</translation>
+    </message>
+    <message>
+        <source>This boundary has already been defined.</source>
+        <translation>Cette frontière est déjà définie.</translation>
+    </message>
+    <message>
+        <source>This case has already been defined.</source>
+        <translation>Ce cas est déjà défini.</translation>
+    </message>
+    <message>
+        <source>This hypothesis has already been defined.</source>
+        <translation>Cette hypothèse est déjà définie.</translation>
+    </message>
+    <message>
+        <source>This iteration has already been defined.</source>
+        <translation>Cette itération est déjà définie.</translation>
+    </message>
+    <message>
+        <source>The parent iteration is not defined.</source>
+        <translation>L'itération parent n'est pas définie.</translation>
+    </message>
+    <message>
+        <source>Unable to create the iteration.</source>
+        <translation>Impossible de créer l'itération.</translation>
+    </message>
+    <message>
+        <source>The directory for the computation cannot be created.</source>
+        <translation>Impossible de créer le répertoire pour le calcul de l'itération.</translation>
+    </message>
+    <message>
+        <source>This iteration is the first of the case and cannot be computed.</source>
+        <translation>Cette itération définit le point de départ du cas. Elle ne peut pas être calculée.</translation>
+    </message>
+    <message>
+        <source>This iteration does not have any associated hypothesis.</source>
+        <translation>Cette itération n'est associée à aucune hypothèse.</translation>
+    </message>
+    <message>
+        <source>The mesh file does not exist.</source>
+        <translation>Le fichier du maillage n'existe pas.</translation>
+    </message>
+    <message>
+        <source>The mesh file cannot be deleted.</source>
+        <translation>Impossible de supprimer le fichier du maillage.</translation>
+    </message>
+    <message>
+        <source>Mesh n</source>
+        <translation>Maillage n</translation>
+    </message>
+    <message>
+        <source>Mesh n+1</source>
+        <translation>Maillage n+1</translation>
+    </message>
+    <message>
+        <source>Rank</source>
+        <translation>Numéro d'ordre</translation>
+    </message>
+    <message>
+        <source>Hypothesis</source>
+        <translation>Hypothèse</translation>
+    </message>
+    <message>
+        <source>Create a hypothesis</source>
+        <translation>Création d'une hypothèse</translation>
+    </message>
+    <message>
+        <source>HOM_HYPO_NAME</source>
+        <translation>Il faut donner un nom à l'hypothèse.</translation>
+    </message>
+    <message>
+        <source>HOM_HYPO_NORM_L2</source>
+        <translation>Norme L2</translation>
+    </message>
+    <message>
+        <source>HOM_HYPO_NORM_INF</source>
+        <translation>Norme infinie</translation>
+    </message>
+    <message>
+        <source>HOM_HYPO_NORM_ABS</source>
+        <translation>Absolu</translation>
+    </message>
+    <message>
+        <source>HOM_HYPO_NORM_REL</source>
+        <translation>Relatif</translation>
+    </message>
+    <message>
+        <source>HOM_HYPO_COMP</source>
+        <translation>Il faut choisir au moins une composante.</translation>
+    </message>
+    <message>
+        <source>HOM_HYPO_EDIT_WINDOW_TITLE</source>
+        <translation>Edition d'une hypothèse</translation>
+    </message>
+    <message>
+        <source>Type of adaptation</source>
+        <translation>Type d'adaptation</translation>
+    </message>
+    <message>
+        <source>Uniform</source>
+        <translation>Uniforme</translation>
+    </message>
+    <message>
+        <source>Uniform adaptation</source>
+        <translation>Adaptation uniforme</translation>
+    </message>
+    <message>
+        <source>Coarsening</source>
+        <translation>Déraffinement</translation>
+    </message>
+    <message>
+        <source>Refinement</source>
+        <translation>Raffinement</translation>
+    </message>
+    <message>
+        <source>Nothing</source>
+        <translation>Rien</translation>
+    </message>
+    <message>
+        <source>Jump between elements</source>
+        <translation>Saut entre éléments</translation>
+    </message>
+    <message>
+        <source>Component</source>
+        <translation>Composante</translation>
+    </message>
+    <message>
+        <source>Refinement threshold</source>
+        <translation>Seuil de raffinement</translation>
+    </message>
+    <message>
+        <source>Coarsening threshold</source>
+        <translation>Seuil de déraffinement</translation>
+    </message>
+    <message>
+        <source>Percentage of meshes</source>
+        <translation>Pourcentage de mailles</translation>
+    </message>
+    <message>
+        <source>Mean + n*(std deviation)</source>
+        <translation>Moyenne + n*(ecart-type)</translation>
+    </message>
+    <message>
+        <source>No refinement</source>
+        <translation>Sans raffinement</translation>
+    </message>
+    <message>
+        <source>Mean - n*(std deviation)</source>
+        <translation>Moyenne - n*(ecart-type)</translation>
+    </message>
+    <message>
+        <source>No coarsening</source>
+        <translation>Sans déraffinement</translation>
+    </message>
+    <message>
+        <source>Chosen</source>
+        <translation>Choisi</translation>
+    </message>
+    <message>
+        <source>Box</source>
+        <translation>Boîte</translation>
+    </message>
+    <message>
+        <source>Sphere</source>
+        <translation>Sphère</translation>
+    </message>
+    <message>
+        <source>Cylinder</source>
+        <translation>Cylindre</translation>
+    </message>
+    <message>
+        <source>Disk</source>
+        <translation>Disque</translation>
+    </message>
+    <message>
+        <source>Disk with hole</source>
+        <translation>Disque avec trou</translation>
+    </message>
+    <message>
+        <source>Pipe</source>
+        <translation>Tuyau</translation>
+    </message>
+    <message>
+        <source>Coordinates</source>
+        <translation>Coordonnées</translation>
+    </message>
+    <message>
+        <source>Get CAO</source>
+        <translation>Acquisition de la CAO</translation>
+    </message>
+    <message>
+        <source>Create an analytical boundary</source>
+        <translation>Création d'une frontière analytique</translation>
+    </message>
+    <message>
+        <source>Create a discrete boundary</source>
+        <translation>Création d'une frontière discrète</translation>
+    </message>
+    <message>
+        <source>Type of boundary</source>
+        <translation>Type de la frontière</translation>
+    </message>
+    <message>
+        <source>Torus</source>
+        <translation>Tore</translation>
+    </message>
+    <message>
+        <source>Radius</source>
+        <translation>Rayon</translation>
+    </message>
+    <message>
+        <source>Radius 1</source>
+        <translation>Rayon 1</translation>
+    </message>
+    <message>
+        <source>Radius 2</source>
+        <translation>Rayon 2</translation>
+    </message>
+    <message>
+        <source>External radius</source>
+        <translation>Rayon externe</translation>
+    </message>
+    <message>
+        <source>Internal radius</source>
+        <translation>Rayon interne</translation>
+    </message>
+    <message>
+        <source>Height</source>
+        <translation>Hauteur</translation>
+    </message>
+    <message>
+        <source>X axis</source>
+        <translation>X axe</translation>
+    </message>
+    <message>
+        <source>Y axis</source>
+        <translation>Y axe</translation>
+    </message>
+    <message>
+        <source>Z axis</source>
+        <translation>Z axe</translation>
+    </message>
+    <message>
+        <source>R revolution</source>
+        <translation>R révolution</translation>
+    </message>
+    <message>
+        <source>Primary R</source>
+        <translation>R primaire</translation>
+    </message>
+    <message>
+        <source>HOM_BOUN_NAME</source>
+        <translation>Il faut donner un nom à la frontière.</translation>
+    </message>
+    <message>
+        <source>HOM_BOUN_MESH</source>
+        <translation>Il faut choisir le fichier qui contient le maillage de la frontière discrète.</translation>
+    </message>
+    <message>
+        <source>HOM_BOUN_CAO</source>
+        <translation>Il faut choisir le fichier qui contient la CAO.</translation>
+    </message>
+    <message>
+        <source>HOM_BOUN_CASE</source>
+        <translation>Le fichier du maillage du cas est inconnu.</translation>
+    </message>
+    <message>
+        <source>HOM_AXE</source>
+        <translation>L'axe doit être un vecteur non nul.</translation>
+    </message>
+    <message>
+        <source>HOM_BOUN_C_EDIT_WINDOW_TITLE</source>
+        <translation>Edition d'une frontière basée sur une CAO</translation>
+    </message>
+    <message>
+        <source>HOM_BOUN_A_EDIT_WINDOW_TITLE</source>
+        <translation>Edition d'une frontière analytique</translation>
+    </message>
+    <message>
+        <source>HOM_BOUN_D_EDIT_WINDOW_TITLE</source>
+        <translation>Edition d'une frontière discrète</translation>
+    </message>
+    <message>
+        <source>HOM_GROU_EDIT_WINDOW_TITLE</source>
+        <translation>Groupes choisis</translation>
+    </message>
+    <message>
+        <source>The height must be positive.</source>
+        <translation>La hauteur doit être positive.</translation>
+    </message>
+    <message>
+        <source>The radius must be positive.</source>
+        <translation>Un rayon doit être positif.</translation>
+    </message>
+    <message>
+        <source>The axis must be a non 0 vector.</source>
+        <translation>L'axe doit être un vecteur non nul.</translation>
+    </message>
+    <message>
+        <source>The angle must be included higher than 0 degree and lower than 90 degrees.</source>
+        <translation>L'angle doit être compris entre 0 et 90 degrés.</translation>
+    </message>
+    <message>
+        <source>The radius must be different.</source>
+        <translation>Les rayons doivent être différents.</translation>
+    </message>
+    <message>
+        <source>The centers must be different.</source>
+        <translation>Les centres doivent être différents.</translation>
+    </message>
+    <message>
+        <source>The external radius must be higher than the internal radius.</source>
+        <translation>Le rayon externe doit être supérieur au rayon interne.</translation>
+    </message>
+    <message>
+        <source>The X coordinates are not coherent.</source>
+        <translation>Les coordonnées en X ne sont pas cohérentes.</translation>
+    </message>
+    <message>
+        <source>The Y coordinates are not coherent.</source>
+        <translation>Les coordonnées en Y ne sont pas cohérentes.</translation>
+    </message>
+    <message>
+        <source>The Z coordinates are not coherent.</source>
+        <translation>Les coordonnées en Z ne sont pas cohérentes.</translation>
+    </message>
+    <message>
+        <source>The first coordinates are not coherent.</source>
+        <translation>Les premières coordonnées ne sont pas cohérentes.</translation>
+    </message>
+    <message>
+        <source>The second coordinates are not coherent.</source>
+        <translation>Les secondes coordonnées ne sont pas cohérentes.</translation>
+    </message>
+    <message>
+        <source>The orientation must be 1, 2 or 3.</source>
+        <translation>L'orientation vaut 1, 2 ou 3.</translation>
+    </message>
+    <message>
+        <source>HOM_MESH_INFO_0</source>
+        <translation>Analyse de maillage</translation>
+    </message>
+    <message>
+        <source>HOM_MESH_INFO_1</source>
+        <translation>Choisir au moins une option.</translation>
+    </message>
+    <message>
+        <source>HOM_MESH_INFO_2</source>
+        <translation>Bilan de l'analyse dans l'arbre d'études, fichier </translation>
+    </message>
+    <message>
+        <source>Filtering with groups</source>
+        <translation>Filtrage par les groupes</translation>
+    </message>
+    <message>
+        <source>Selection of groups</source>
+        <translation>Choix des groupes</translation>
+    </message>
+    <message>
+        <source>Selected groups</source>
+        <translation>Groupes choisis</translation>
+    </message>
+    <message>
+        <source>Group</source>
+        <translation>Groupe</translation>
+    </message>
+    <message>
+        <source>Information on a mesh</source>
+        <translation>Analyse d'un maillage</translation>
+    </message>
+    <message>
+        <source>Group size</source>
+        <translation>Taille des domaines</translation>
+    </message>
+    <message>
+        <source>Quality</source>
+        <translation>Qualité</translation>
+    </message>
+    <message>
+        <source>Connection</source>
+        <translation>Connexité</translation>
+    </message>
+    <message>
+        <source>Diametre</source>
+        <translation>Diamètre</translation>
+    </message>
+    <message>
+        <source>Entanglement</source>
+        <translation>Interpénétration</translation>
+    </message>
+    <message>
+        <source>No change is allowed in a boundary. Ask for evolution.</source>
+        <translation>Impossible de changer une donnée dans une frontière. Demander une évolution.</translation>
+    </message>
+    <message>
+        <source>This boundary is used in a case and cannot be deleted.</source>
+        <translation>Cette frontière est utilisée dans un cas ; elle ne peut pas être détruite.</translation>
+    </message>
+    <message>
+        <source>This hypothesis is used and cannot be deleted.</source>
+        <translation>Cette hypothèse est utilisée dans une itération ; elle ne peut pas être détruite.</translation>
+    </message>
+    <message>
+        <source>This iteration cannot be deleted.</source>
+        <translation>Cette itération ne peut pas être détruite.</translation>
+    </message>
+    <message>
+        <source>The directory for the calculation cannot be cleared.</source>
+        <translation>Menage du repertoire de calcul impossible</translation>
+    </message>
+    <message>
+        <source>Starting point</source>
+        <translation>Point de départ</translation>
+    </message>
+    <message>
+        <source>From an iteration</source>
+        <translation>A partir d'une itération</translation>
+    </message>
+    <message>
+        <source>From a case</source>
+        <translation>A partir d'un cas</translation>
+    </message>
+    <message>
+        <source>Iteration into the case</source>
+        <translation>Choix d'une itération dans le cas</translation>
+    </message>
+    <message>
+        <source>Last iteration</source>
+        <translation>A partir de la dernière itération</translation>
+    </message>
+    <message>
+        <source>Iteration number</source>
+        <translation>A partir d'une itération numérotée</translation>
+    </message>
+    <message>
+        <source>The directory of the case does not exist.</source>
+        <translation>Le répertoire du cas n'existe pas.</translation>
+    </message>
+    <message>
+        <source>The directory for the case cannot be modified because some iterations are already defined.</source>
+        <translation>Impossible de changer le répertoire du cas car des itérations ont déjà été définies.</translation>
+    </message>
+    <message>
+        <source>The directory for the case cannot be reached.</source>
+        <translation>Impossible d'atteindre ce répertoire pour le cas.</translation>
+    </message>
+    <message>
+        <source>The starting point for the case cannot be copied into the working directory.</source>
+        <translation>Impossible de copier le point de départ du cas dans le répertoire de travail.</translation>
+    </message>
+    <message>
+        <source>The starting point for the case cannot be moved into the new directory.</source>
+        <translation>Impossible de déplacer le point de départ du cas dans le nouveau répertoire.</translation>
+    </message>
+    <message>
+        <source>The directory of the case for the pursuit does not exist.</source>
+        <translation>Le répertoire du cas de reprise n'existe pas.</translation>
+    </message>
+    <message>
+        <source>The directory of the iteration does not exist.</source>
+        <translation>Le répertoire de l'itération de reprise n'existe pas.</translation>
+    </message>
+    <message>
+        <source>The number of iteration must be positive.</source>
+        <translation>Le numéro de l'itération doit etre positif.</translation>
+    </message>
+    <message>
+        <source>Number of iteration</source>
+        <translation>Numéro de l'itération</translation>
+    </message>
+    <message>
+        <source>Case</source>
+        <translation>Cas</translation>
+    </message>
+    <message>
+        <source>Mesh file</source>
+        <translation>Maillage initial</translation>
+    </message>
+    <message>
+        <source>Constant</source>
+        <translation>Constant</translation>
+    </message>
+    <message>
+        <source>Variable</source>
+        <translation>Variable</translation>
+    </message>
+    <message>
+        <source>Type of schema</source>
+        <translation>Type de schema</translation>
+    </message>
+    <message>
+        <source>Maximum of ...</source>
+        <translation>Maximum de ...</translation>
+    </message>
+    <message>
+        <source>Iterations</source>
+        <translation>Itérations</translation>
+    </message>
+    <message>
+        <source>Nodes</source>
+        <translation>Noeuds</translation>
+    </message>
+    <message>
+        <source>Elements</source>
+        <translation>Eléments</translation>
+    </message>
+    <message>
+        <source>Test of convergence</source>
+        <translation>Test de convergence</translation>
+    </message>
+    <message>
+        <source>Edit a file</source>
+        <translation>Affichage d'un fichier</translation>
+    </message>
+    <message>
+        <source>Print</source>
+        <translation>Imprimer</translation>
+    </message>
+    <message>
+        <source>Invalid study context</source>
+        <translation>Etude contextuelle non valable</translation>
+    </message>
+    <message>
+        <source>PREF_TAB_GENERAL</source>
+        <translation>Général</translation>
+    </message>
+    <message>
+        <source>PREF_PUBLICATION</source>
+        <translation>Publication</translation>
+    </message>
+    <message>
+        <source>PREF_PUBLICATION_MAILLAGE_IN</source>
+        <translation>Les maillages d'entrée</translation>
+    </message>
+    <message>
+        <source>PREF_PUBLICATION_MAILLAGE_OUT</source>
+        <translation>Les maillages de sortie</translation>
+    </message>
+</context>
+</TS>
diff --git a/src/SMESHGUI/SMESHGUI_Homard_msg_ja.ts b/src/SMESHGUI/SMESHGUI_Homard_msg_ja.ts
new file mode 100644 (file)
index 0000000..94cd094
--- /dev/null
@@ -0,0 +1,868 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE TS>
+<TS version="2.0" language="ja" sourcelanguage="en">
+  <context>
+    <name>@default</name>
+    <message>
+      <source>HOM_WARNING</source>
+      <translation>警告</translation>
+    </message>
+    <message>
+      <source>HOM_ERROR</source>
+      <translation>エラー</translation>
+    </message>
+    <message>
+      <source>HOM_INACTIVE_BUTTON</source>
+      <translation>アクティブでないボタン</translation>
+    </message>
+    <message>
+      <source>OK</source>
+      <translation>Ok</translation>
+    </message>
+    <message>
+      <source>Apply</source>
+      <translation>適用</translation>
+    </message>
+    <message>
+      <source>Cancel</source>
+      <translation>キャンセル</translation>
+    </message>
+    <message>
+      <source>Help</source>
+      <translation>ヘルプ</translation>
+    </message>
+    <message>
+      <source>New</source>
+      <translation>新規</translation>
+    </message>
+    <message>
+      <source>Edit</source>
+      <translation>編集</translation>
+    </message>
+    <message>
+      <source>Quit</source>
+      <translation>終了</translation>
+    </message>
+    <message>
+      <source>Name</source>
+      <translation>名前</translation>
+    </message>
+    <message>
+      <source>Directory</source>
+      <translation>ディレクトリ</translation>
+    </message>
+    <message>
+      <source>Mesh</source>
+      <translation>メッシュ</translation>
+    </message>
+    <message>
+      <source>Selection</source>
+      <translation>選択</translation>
+    </message>
+    <message>
+      <source>None</source>
+      <translation>なし</translation>
+    </message>
+    <message>
+      <source>All</source>
+      <translation>全て</translation>
+    </message>
+    <message>
+      <source>HOM_SELECT_OBJECT_1</source>
+      <translation>オブジェクトを選択します。</translation>
+    </message>
+    <message>
+      <source>HOM_SELECT_OBJECT_2</source>
+      <translation>1 つのオブジェクトを選択します。</translation>
+    </message>
+    <message>
+      <source>HOM_SELECT_OBJECT_3</source>
+      <translation>型 %1 のオブジェクトを選択します。</translation>
+    </message>
+    <message>
+      <source>HOM_SELECT_OBJECT_4</source>
+      <translation>The name of the object is already selected. Modify it or cancel.</translation>
+    </message>
+    <message>
+      <source>HOM_SELECT_FILE_0</source>
+      <translation>ファイル選択</translation>
+    </message>
+    <message>
+      <source>HOM_SELECT_FILE_1</source>
+      <translation>ファイルを選択します。</translation>
+    </message>
+    <message>
+      <source>HOM_SELECT_FILE_2</source>
+      <translation>1 つのファイルを選択します。</translation>
+    </message>
+    <message>
+      <source>HOM_SELECT_FILE_3</source>
+      <translation>このファイルを開くことができません。</translation>
+    </message>
+    <message>
+      <source>HOM_SCRIPT_FILE</source>
+      <translation>我々 は python スクリプトにファイルを与える必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_MED_FILE_1</source>
+      <translation>この医学ファイルは読み取り不可能です。</translation>
+    </message>
+    <message>
+      <source>HOM_MED_FILE_2</source>
+      <translation>この医学のファイルには、メッシュが含まれていません。</translation>
+    </message>
+    <message>
+      <source>HOM_MED_FILE_3</source>
+      <translation>この医学のファイルにはよりも 1 つのメッシュが含まれています。</translation>
+    </message>
+    <message>
+      <source>HOM_MED_FILE_4</source>
+      <translation>音楽配信マック & ファイルのメッシュを読み取れませんでした。</translation>
+    </message>
+    <message>
+      <source>HOM_MED_FILE_5</source>
+      <translation>この医学のファイルには、フィールドが含まれていません。</translation>
+    </message>
+    <message>
+      <source>HOM_MED_FILE_6</source>
+      <translation>医学ファイル (秒) (秒) フィールドを読み取ることができません。</translation>
+    </message>
+    <message>
+      <source>HOM_SELECT_STUDY</source>
+      <translation>研究医 associe
+ のファイルを選択または医学ファイルを選択します。</translation>
+    </message>
+    <message>
+      <source>Create a case</source>
+      <translation>ケースの作成</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_NAME</source>
+      <translation>場合に名前を付ける必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_DIRECTORY_1</source>
+      <translation>1 つの場合を動作するようにディレクトリを選択する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_DIRECTORY_2</source>
+      <translation>このディレクトリは、既に使用中です。</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_DIRECTORY_3</source>
+      <translation>有効なディレクトリを選択する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_DIRECTORY_4</source>
+      <translation>計算のための作業ディレクトリを選択する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_START_DIRECTORY_1</source>
+      <translation>追跡のため開始点を選択する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_START_DIRECTORY_3</source>
+      <translation>追跡のため有効な方向を選択する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_MESH</source>
+      <translation>1 つは、初期のメッシュを選択する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_GROUP</source>
+      <translation>グループ"%1"は、以上の境界線に割り当てることはできません。</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_EDIT_WINDOW_TITLE</source>
+      <translation>場合の編集</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_EDIT_STATE_0</source>
+      <translation>初期メッシュ。</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_EDIT_STATE</source>
+      <translation>イテレーションの継続。</translation>
+    </message>
+    <message>
+      <source>HOM_CASE_PURSUE_WINDOW_TITLE</source>
+      <translation>イテレーションの追跡</translation>
+    </message>
+    <message>
+      <source>The configuration file cannot be found.</source>
+      <translation>コンフィギュレーションファイルが見つかりません。</translation>
+    </message>
+    <message>
+      <source>The configuration file cannot be read.</source>
+      <translation>コンフィギュレーションファイルが読み込めません。</translation>
+    </message>
+    <message>
+      <source>The HOMARD mesh file cannot be found.</source>
+      <translation>HOMARDメッシュファイルが見つかりません。</translation>
+    </message>
+    <message>
+      <source>HOM_ITER_NAME</source>
+      <translation>名前を反復処理する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_ITER_STARTING_POINT</source>
+      <translation>これは、前のイテレーションを指定する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_ITER_MESH</source>
+      <translation>最終的なメッシュの名前。</translation>
+    </message>
+    <message>
+      <source>HOM_ITER_HYPO</source>
+      <translation>仮説を選択します。</translation>
+    </message>
+    <message>
+      <source>HOM_ITER_STARTING_POINT_0</source>
+      <translation>メッシュ</translation>
+    </message>
+    <message>
+      <source>HOM_ITER_STARTING_POINT_1</source>
+      <translation>ケースの最初のイテレーションです。</translation>
+    </message>
+    <message>
+      <source>HOM_ITER_STARTING_POINT_2</source>
+      <translation>検察側の事件の最初のイテレーションです。</translation>
+    </message>
+    <message>
+      <source>HOM_ITER_EDIT_WINDOW_TITLE</source>
+      <translation>イテレーションの編集</translation>
+    </message>
+    <message>
+      <source>Discrete boundary</source>
+      <translation>離散境界</translation>
+    </message>
+    <message>
+      <source>Analytical boundary</source>
+      <translation>解析的境界</translation>
+    </message>
+    <message>
+      <source>Conformity type</source>
+      <translation>適合タイプ</translation>
+    </message>
+    <message>
+      <source>Conformal</source>
+      <translation>等角</translation>
+    </message>
+    <message>
+      <source>Non conformal</source>
+      <translation>非共形</translation>
+    </message>
+    <message>
+      <source>Non conformal option</source>
+      <translation>非共形オプション</translation>
+    </message>
+    <message>
+      <source>Conformity +</source>
+      <translation>適合性 +</translation>
+    </message>
+    <message>
+      <source>Free</source>
+      <translation>Free</translation>
+    </message>
+    <message>
+      <source>1 hanging node per mesh</source>
+      <translation>メッシュあたりの1接続節点</translation>
+    </message>
+    <message>
+      <source>1 node per edge</source>
+      <translation>エッジ辺りの1節点</translation>
+    </message>
+    <message>
+      <source>Advanced options</source>
+      <translation>詳細オプション</translation>
+    </message>
+    <message>
+      <source>Authorized pyramids</source>
+      <translation>認定済みピラミッド</translation>
+    </message>
+    <message>
+      <source>Minimal diameter</source>
+      <translation>最小径</translation>
+    </message>
+    <message>
+      <source>Initialization of adaptation</source>
+      <translation>適応の初期化</translation>
+    </message>
+    <message>
+      <source>Maximal level</source>
+      <translation>最大レベル</translation>
+    </message>
+    <message>
+      <source>Output of the level of refinement</source>
+      <translation>リファインレベルの出力</translation>
+    </message>
+    <message>
+      <source>Output of the qualities</source>
+      <translation>品質の出力</translation>
+    </message>
+    <message>
+      <source>Output of the diameters</source>
+      <translation>直径の出力</translation>
+    </message>
+    <message>
+      <source>Output of the parents</source>
+      <translation>親直径の出力</translation>
+    </message>
+    <message>
+      <source>Output of the neighbours</source>
+      <translation>隣の直径の出力</translation>
+    </message>
+    <message>
+      <source>Create an iteration</source>
+      <translation>イテレーションの作成</translation>
+    </message>
+    <message>
+      <source>Iteration Name</source>
+      <translation>イテレーションの名前</translation>
+    </message>
+    <message>
+      <source>Previous iteration</source>
+      <translation>以前のイテレーション</translation>
+    </message>
+    <message>
+      <source>Invalid boundary</source>
+      <translation>無効な境界</translation>
+    </message>
+    <message>
+      <source>Invalid case</source>
+      <translation>無効なケース</translation>
+    </message>
+    <message>
+      <source>Invalid case context</source>
+      <translation>ケースの内容が無効です</translation>
+    </message>
+    <message>
+      <source>Invalid hypothesis</source>
+      <translation>無効なhypothesis</translation>
+    </message>
+    <message>
+      <source>Invalid iteration</source>
+      <translation>無効なイテレーション</translation>
+    </message>
+    <message>
+      <source>This boundary has already been defined.</source>
+      <translation>この境界は既に定義されています。</translation>
+    </message>
+    <message>
+      <source>This case has already been defined.</source>
+      <translation>このケースは既に定義されています。</translation>
+    </message>
+    <message>
+      <source>This hypothesis has already been defined.</source>
+      <translation>このhypothesisは既に定義されています。</translation>
+    </message>
+    <message>
+      <source>This iteration has already been defined.</source>
+      <translation>このイテレーションは既に定義されています。</translation>
+    </message>
+    <message>
+      <source>The parent iteration is not defined.</source>
+      <translation>親イテレーションは、定義されていません。</translation>
+    </message>
+    <message>
+      <source>Unable to create the iteration.</source>
+      <translation>イテレーションを作成することができません。</translation>
+    </message>
+    <message>
+      <source>The directory for the computation cannot be created.</source>
+      <translation>計算のためのディレクトリを作成できません。</translation>
+    </message>
+    <message>
+      <source>This iteration is the first of the case and cannot be computed.</source>
+      <translation>このイタレーションはケースの最初であり、計算できません。</translation>
+    </message>
+    <message>
+      <source>This iteration does not have any associated hypothesis.</source>
+      <translation>このイタレーションは関連した hypothesis がありません。</translation>
+    </message>
+    <message>
+      <source>The mesh file does not exist.</source>
+      <translation>メッシュ ファイルは存在しません。</translation>
+    </message>
+    <message>
+      <source>The mesh file cannot be deleted.</source>
+      <translation>メッシュ ファイルを削除できません。</translation>
+    </message>
+    <message>
+      <source>Mesh n</source>
+      <translation>メッシュ n</translation>
+    </message>
+    <message>
+      <source>Mesh n+1</source>
+      <translation>メッシュ n + 1</translation>
+    </message>
+    <message>
+      <source>Rank</source>
+      <translation>ランク</translation>
+    </message>
+    <message>
+      <source>Hypothesis</source>
+      <translation>Hypothesis</translation>
+    </message>
+    <message>
+      <source>Create a hypothesis</source>
+      <translation>hypothesis の作成</translation>
+    </message>
+    <message>
+      <source>HOM_HYPO_NAME</source>
+      <translation>仮説に名前を付ける必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_HYPO_NORM_L2</source>
+      <translation>標準の L2</translation>
+    </message>
+    <message>
+      <source>HOM_HYPO_NORM_INF</source>
+      <translation>無限の標準</translation>
+    </message>
+    <message>
+      <source>HOM_HYPO_NORM_ABS</source>
+      <translation>絶対値</translation>
+    </message>
+    <message>
+      <source>HOM_HYPO_NORM_REL</source>
+      <translation>関係</translation>
+    </message>
+    <message>
+      <source>HOM_HYPO_COMP</source>
+      <translation>1 つ以上のコンポーネントを選択する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_HYPO_EDIT_WINDOW_TITLE</source>
+      <translation>仮説の編集</translation>
+    </message>
+    <message>
+      <source>Type of adaptation</source>
+      <translation>適合のタイプ</translation>
+    </message>
+    <message>
+      <source>Uniform</source>
+      <translation>均一</translation>
+    </message>
+    <message>
+      <source>Uniform adaptation</source>
+      <translation>均一な適応</translation>
+    </message>
+    <message>
+      <source>Refinement</source>
+      <translation>リファインメント</translation>
+    </message>
+    <message>
+      <source>Nothing</source>
+      <translation>なし</translation>
+    </message>
+    <message>
+      <source>Jump between elements</source>
+      <translation>要素間ジャンプ</translation>
+    </message>
+    <message>
+      <source>Component</source>
+      <translation>コンポーネント</translation>
+    </message>
+    <message>
+      <source>Refinement threshold</source>
+      <translation>リファインメント閾値</translation>
+    </message>
+    <message>
+      <source>Coarsening threshold</source>
+      <translation>粗大化閾値</translation>
+    </message>
+    <message>
+      <source>Percentage of meshes</source>
+      <translation>メッシュの割合</translation>
+    </message>
+    <message>
+      <source>Mean + n*(std deviation)</source>
+      <translation>平均 + n * (標準偏差)</translation>
+    </message>
+    <message>
+      <source>No refinement</source>
+      <translation>リファインメントなし</translation>
+    </message>
+    <message>
+      <source>Mean - n*(std deviation)</source>
+      <translation>平均 - n * (標準偏差)</translation>
+    </message>
+    <message>
+      <source>No coarsening</source>
+      <translation>粗大化なし</translation>
+    </message>
+    <message>
+      <source>Chosen</source>
+      <translation>選択済み</translation>
+    </message>
+    <message>
+      <source>Box</source>
+      <translation>Box</translation>
+    </message>
+    <message>
+      <source>Sphere</source>
+      <translation>球</translation>
+    </message>
+    <message>
+      <source>Cylinder</source>
+      <translation>円筒</translation>
+    </message>
+    <message>
+      <source>Disk</source>
+      <translation>円盤</translation>
+    </message>
+    <message>
+      <source>Disk with hole</source>
+      <translation>穴付き円盤</translation>
+    </message>
+    <message>
+      <source>Pipe</source>
+      <translation>パイプ</translation>
+    </message>
+    <message>
+      <source>Coordinates</source>
+      <translation>座標</translation>
+    </message>
+    <message>
+      <source>Create an analytical boundary</source>
+      <translation>分析境界の作成</translation>
+    </message>
+    <message>
+      <source>Create a discrete boundary</source>
+      <translation>離散境界の作成</translation>
+    </message>
+    <message>
+      <source>Type of boundary</source>
+      <translation>境界のタイプ</translation>
+    </message>
+    <message>
+      <source>Torus</source>
+      <translation>環状体</translation>
+    </message>
+    <message>
+      <source>Radius</source>
+      <translation>半径</translation>
+    </message>
+    <message>
+      <source>Radius 1</source>
+      <translation>半径1</translation>
+    </message>
+    <message>
+      <source>Radius 2</source>
+      <translation>半径2</translation>
+    </message>
+    <message>
+      <source>External radius</source>
+      <translation>外半径</translation>
+    </message>
+    <message>
+      <source>Internal radius</source>
+      <translation>内半径</translation>
+    </message>
+    <message>
+      <source>Height</source>
+      <translation>高さ</translation>
+    </message>
+    <message>
+      <source>X axis</source>
+      <translation>X 軸</translation>
+    </message>
+    <message>
+      <source>Y axis</source>
+      <translation>Y 軸</translation>
+    </message>
+    <message>
+      <source>Z axis</source>
+      <translation>Z 軸</translation>
+    </message>
+    <message>
+      <source>R revolution</source>
+      <translation>R 回転</translation>
+    </message>
+    <message>
+      <source>Primary R</source>
+      <translation>主 R</translation>
+    </message>
+    <message>
+      <source>HOM_BOUN_NAME</source>
+      <translation>名前の国境に与えする必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_BOUN_MESH</source>
+      <translation>1 つの枠を含むメッシュを選択する必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_BOUN_CASE</source>
+      <translation>場合ファイルのメッシュが知られています。</translation>
+    </message>
+    <message>
+      <source>HOM_AXE</source>
+      <translation>軸は、ゼロ以外のベクトルでなければなりません。</translation>
+    </message>
+    <message>
+      <source>HOM_BOUN_A_EDIT_WINDOW_TITLE</source>
+      <translation>分析のフロンティアの編集</translation>
+    </message>
+    <message>
+      <source>HOM_BOUN_D_EDIT_WINDOW_TITLE</source>
+      <translation>離散境界の編集</translation>
+    </message>
+    <message>
+      <source>HOM_GROU_EDIT_WINDOW_TITLE</source>
+      <translation>選択したグループ</translation>
+    </message>
+    <message>
+      <source>The height must be positive.</source>
+      <translation>高さは正でなければなりません。</translation>
+    </message>
+    <message>
+      <source>The radius must be positive.</source>
+      <translation>半径は正でなければなりません。</translation>
+    </message>
+    <message>
+      <source>The axis must be a non 0 vector.</source>
+      <translation>軸は非 0 のベクトルでなければなりません。</translation>
+    </message>
+    <message>
+      <source>The angle must be included higher than 0 degree and lower than 90 degrees.</source>
+      <translation>角度は0 °よりも大きく 90 °未満である必要があります。</translation>
+    </message>
+    <message>
+      <source>The radius must be different.</source>
+      <translation>半径が異なる必要があります。</translation>
+    </message>
+    <message>
+      <source>The centers must be different.</source>
+      <translation>中心が異なる必要があります。</translation>
+    </message>
+    <message>
+      <source>The external radius must be higher than the internal radius.</source>
+      <translation>外部の半径は内部の半径より大きい必要があります。</translation>
+    </message>
+    <message>
+      <source>The X coordinates are not coherent.</source>
+      <translation>X座標は論理上問題があります。</translation>
+    </message>
+    <message>
+      <source>The Y coordinates are not coherent.</source>
+      <translation>Y座標は論理上問題があります。</translation>
+    </message>
+    <message>
+      <source>The Z coordinates are not coherent.</source>
+      <translation>Z座標は論理上問題があります。</translation>
+    </message>
+    <message>
+      <source>The first coordinates are not coherent.</source>
+      <translation>最初の座標に論理上問題があります。</translation>
+    </message>
+    <message>
+      <source>The second coordinates are not coherent.</source>
+      <translation>2番目の座標に論理上問題があります。</translation>
+    </message>
+    <message>
+      <source>The orientation must be 1, 2 or 3.</source>
+      <translation>方向は1、2、3のどれかにする必要があります。</translation>
+    </message>
+    <message>
+      <source>HOM_MESH_INFO_0</source>
+      <translation>メッシュの解析</translation>
+    </message>
+    <message>
+      <source>HOM_MESH_INFO_1</source>
+      <translation>少なくとも 1 つのオプションを選択します。</translation>
+    </message>
+    <message>
+      <source>HOM_MESH_INFO_2</source>
+      <translation>バランス シート分析結果をスタディ ツリーで、ファイル</translation>
+    </message>
+    <message>
+      <source>Filtering with groups</source>
+      <translation>グループでフィルタリング</translation>
+    </message>
+    <message>
+      <source>Selection of groups</source>
+      <translation>グループの選択</translation>
+    </message>
+    <message>
+      <source>Selected groups</source>
+      <translation>選択されたグループ</translation>
+    </message>
+    <message>
+      <source>Group</source>
+      <translation>グループ :</translation>
+    </message>
+    <message>
+      <source>Information on a mesh</source>
+      <translation>メッシュに関する情報</translation>
+    </message>
+    <message>
+      <source>Group size</source>
+      <translation>グループのサイズ</translation>
+    </message>
+    <message>
+      <source>Quality</source>
+      <translation>品質</translation>
+    </message>
+    <message>
+      <source>Connection</source>
+      <translation>接続</translation>
+    </message>
+    <message>
+      <source>Diametre</source>
+      <translation>直径</translation>
+    </message>
+    <message>
+      <source>Entanglement</source>
+      <translation>縺れ合い</translation>
+    </message>
+    <message>
+      <source>No change is allowed in a boundary. Ask for evolution.</source>
+      <translation>境界内に許可された変更はありません。旋回について尋ねます。</translation>
+    </message>
+    <message>
+      <source>This boundary is used in a case and cannot be deleted.</source>
+      <translation>この境界はケースで使用されており、削除できません。</translation>
+    </message>
+    <message>
+      <source>This hypothesis is used and cannot be deleted.</source>
+      <translation>このhypothesisは使用されており、削除できません。</translation>
+    </message>
+    <message>
+      <source>This iteration cannot be deleted.</source>
+      <translation>このイテレーションは削除できません。</translation>
+    </message>
+    <message>
+      <source>The directory for the calculation cannot be cleared.</source>
+      <translation>計算用ディレクトリは削除できません。</translation>
+    </message>
+    <message>
+      <source>Starting point</source>
+      <translation>始点</translation>
+    </message>
+    <message>
+      <source>From an iteration</source>
+      <translation>イテレーションから</translation>
+    </message>
+    <message>
+      <source>From a case</source>
+      <translation>ケースから</translation>
+    </message>
+    <message>
+      <source>Iteration into the case</source>
+      <translation>ケースへのイテレーション</translation>
+    </message>
+    <message>
+      <source>Last iteration</source>
+      <translation>最後のイテレーション</translation>
+    </message>
+    <message>
+      <source>Iteration number</source>
+      <translation>イテレーション数</translation>
+    </message>
+    <message>
+      <source>The directory of the case does not exist.</source>
+      <translation>ケースのディレクトリは存在しません。</translation>
+    </message>
+    <message>
+      <source>The directory for the case cannot be modified because some iterations are already defined.</source>
+      <translation>いくつかのイテレーションが既に定義されているため、ケースのディレクトリを変更できません。</translation>
+    </message>
+    <message>
+      <source>The directory for the case cannot be reached.</source>
+      <translation>ケースのディレクトリに到達できません。</translation>
+    </message>
+    <message>
+      <source>The starting point for the case cannot be copied into the working directory.</source>
+      <translation>ケースの開始点は作業ディレクトリにコピーできません。</translation>
+    </message>
+    <message>
+      <source>The starting point for the case cannot be moved into the new directory.</source>
+      <translation>ケースの開始点は新しいディレクトリに移動できません。</translation>
+    </message>
+    <message>
+      <source>The directory of the case for the pursuit does not exist.</source>
+      <translation>追跡用ケースのディレクトリは存在しません。</translation>
+    </message>
+    <message>
+      <source>The directory of the iteration does not exist.</source>
+      <translation>イテレーションのディレクトリが存在しません。</translation>
+    </message>
+    <message>
+      <source>The number of iteration must be positive.</source>
+      <translation>イテレーション数は正である必要があります。</translation>
+    </message>
+    <message>
+      <source>Number of iteration</source>
+      <translation>イテレーション数</translation>
+    </message>
+    <message>
+      <source>Case</source>
+      <translation>ケース</translation>
+    </message>
+    <message>
+      <source>Mesh file</source>
+      <translation>メッシュファイル</translation>
+    </message>
+    <message>
+      <source>Constant</source>
+      <translation>定数</translation>
+    </message>
+    <message>
+      <source>Variable</source>
+      <translation>変数</translation>
+    </message>
+    <message>
+      <source>Type of schema</source>
+      <translation>スキーマタイプ</translation>
+    </message>
+    <message>
+      <source>Maximum of ...</source>
+      <translation>最大の...</translation>
+    </message>
+    <message>
+      <source>Iterations</source>
+      <translation>イテレーション</translation>
+    </message>
+    <message>
+      <source>Nodes</source>
+      <translation>節点</translation>
+    </message>
+    <message>
+      <source>Elements</source>
+      <translation>要素</translation>
+    </message>
+    <message>
+      <source>Test of convergence</source>
+      <translation>収束テスト</translation>
+    </message>
+    <message>
+      <source>Edit a file</source>
+      <translation>ファイルの編集</translation>
+    </message>
+    <message>
+      <source>Print</source>
+      <translation>印刷</translation>
+    </message>
+    <message>
+      <source>Invalid study context</source>
+      <translation>無効なスタディの内容</translation>
+    </message>
+    <message>
+      <source>PREF_TAB_GENERAL</source>
+      <translation>一般的な</translation>
+    </message>
+    <message>
+      <source>PREF_PUBLICATION</source>
+      <translation>発行</translation>
+    </message>
+    <message>
+      <source>PREF_PUBLICATION_MAILLAGE_IN</source>
+      <translation>メッシュ入力</translation>
+    </message>
+    <message>
+      <source>PREF_PUBLICATION_MAILLAGE_OUT</source>
+      <translation>メッシュ出力</translation>
+    </message>
+  </context>
+</TS>
index 8256f88835a454ffeced21fa31ff6f586c5045a9..4e206fe07c717cd2ce46b9022a7e9e1a4b0bbb59 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 7d69d34b5d09185c338daeaf188989cb1df3baeb..2cde76518a93d92777af37c52d3e54ec8012a047 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 251bcc78c76a6a8d6b5edc6130885986e41eeeb6..8a07c2b9b206b7bd60e86e4946c2270f445b1951 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -34,7 +34,8 @@
 #include "SMESHGUI_VTKUtils.h"
 #include "SMESHGUI_XmlHandler.h"
 
-#include "SMESH_Actor.h"
+#include <SMESH_Actor.h>
+#include <SMESH_TryCatch.hxx>
 
 // SALOME GUI includes
 #include <SUIT_Desktop.h>
  #define env_sep ":"
 #endif // WIN32
 
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-#else
-static int MYDEBUG = 0;
-#endif
-
 namespace SMESH
 {
   typedef IMap<QString,HypothesisData*> THypothesisDataMap;
@@ -496,7 +491,7 @@ namespace SMESH
 
   SMESHGUI_GenericHypothesisCreator* GetHypothesisCreator(const QString& aHypType)
   {
-    if(MYDEBUG) MESSAGE("Get HypothesisCreator for " << aHypType.toLatin1().data());
+    MESSAGE("Get HypothesisCreator for " << aHypType.toLatin1().data());
 
     SMESHGUI_GenericHypothesisCreator* aCreator = 0;
 
@@ -521,7 +516,7 @@ namespace SMESH
       // 3. Load Client Plugin Library
       try {
         // load plugin library
-        if(MYDEBUG) MESSAGE("Loading client meshers plugin library ...");
+        MESSAGE("Loading client meshers plugin library ...");
 #ifdef WIN32
 #ifdef UNICODE
         LPTSTR path = new TCHAR[aClientLibName.length() + 1];
@@ -551,21 +546,21 @@ namespace SMESH
         }
         else {
           // get method, returning hypothesis creator
-          if(MYDEBUG) MESSAGE("Find GetHypothesisCreator() method ...");
+          MESSAGE("Find GetHypothesisCreator() method ...");
           typedef SMESHGUI_GenericHypothesisCreator* (*GetHypothesisCreator) \
             ( const QString& );
           GetHypothesisCreator procHandle =
             (GetHypothesisCreator)GetProc(libHandle, "GetHypothesisCreator");
           if (!procHandle) {
-            if(MYDEBUG) MESSAGE("bad hypothesis client plugin library");
+            MESSAGE("bad hypothesis client plugin library");
             UnLoadLib(libHandle);
           }
           else {
             // get hypothesis creator
-            if(MYDEBUG) MESSAGE("Get Hypothesis Creator for " << aHypType.toLatin1().data());
+            MESSAGE("Get Hypothesis Creator for " << aHypType.toLatin1().data());
             aCreator = procHandle( aHypType );
             if (!aCreator) {
-              if(MYDEBUG) MESSAGE("no such a hypothesis in this plugin");
+              MESSAGE("no such a hypothesis in this plugin");
             }
             else {
               // map hypothesis creator to a hypothesis name
@@ -594,7 +589,7 @@ namespace SMESH
                                                const QString& aHypName,
                                                const bool /*isAlgo*/)
   {
-    if(MYDEBUG) MESSAGE("Create " << aHypType.toLatin1().data() <<
+    MESSAGE("Create " << aHypType.toLatin1().data() <<
                         " with name " << aHypName.toLatin1().data());
     HypothesisData* aHypData = GetHypothesisData(aHypType);
     QString aServLib = aHypData->ServerLibName;
@@ -628,16 +623,19 @@ namespace SMESH
 
     HypothesisData* aHypData = GetHypothesisData(aHypType);
     QString aServLib = aHypData->ServerLibName;
+    SMESH_TRY;
     return SMESHGUI::GetSMESHGen()->IsApplicable( aHypType.toLatin1().data(),
                                                   aServLib.toUtf8().data(),
                                                   theGeomObject,
                                                   toCheckAll);
+    SMESH_CATCH( SMESH::printErrorInDebugMode );
+    return false;
   }
 
 
   bool AddHypothesisOnMesh (SMESH::SMESH_Mesh_ptr aMesh, SMESH::SMESH_Hypothesis_ptr aHyp)
   {
-    if(MYDEBUG) MESSAGE ("SMESHGUI::AddHypothesisOnMesh");
+    MESSAGE ("SMESHGUI::AddHypothesisOnMesh");
     int res = SMESH::HYP_UNKNOWN_FATAL;
     SUIT_OverrideCursor wc;
 
@@ -647,6 +645,7 @@ namespace SMESH
       try {
         CORBA::String_var error;
         res = aMesh->AddHypothesis(aShapeObject, aHyp, error.out());
+        UpdateViewer(aMesh);
         if (res > SMESH::HYP_OK) {
           wc.suspend();
           processHypothesisStatus(res, aHyp, true, error.in() );
@@ -665,7 +664,7 @@ namespace SMESH
 
   bool AddHypothesisOnSubMesh (SMESH::SMESH_subMesh_ptr aSubMesh, SMESH::SMESH_Hypothesis_ptr aHyp)
   {
-    if(MYDEBUG) MESSAGE("SMESHGUI::AddHypothesisOnSubMesh() ");
+    MESSAGE("SMESHGUI::AddHypothesisOnSubMesh() ");
     int res = SMESH::HYP_UNKNOWN_FATAL;
     SUIT_OverrideCursor wc;
 
@@ -678,6 +677,7 @@ namespace SMESH
         {
           CORBA::String_var error;
           res = aMesh->AddHypothesis( aShapeObject, aHyp, error.out() );
+          UpdateViewer(aMesh);
           if (res > SMESH::HYP_OK) {
             wc.suspend();
             processHypothesisStatus( res, aHyp, true, error.in() );
@@ -766,12 +766,7 @@ namespace SMESH
             processHypothesisStatus(res, anHyp, false);
             wc.resume();
           }
-          if ( _PTR(SObject) meshSO = SMESH::FindSObject(aMesh) )
-          {
-            if ( SMESH_Actor* actor = SMESH::FindActorByEntry( meshSO->GetID().c_str() ))
-              if( actor->GetVisibility() )
-                actor->Update();
-          }
+          UpdateViewer(aMesh);
         }
       } catch(const SALOME::SALOME_Exception& S_ex) {
         wc.suspend();
@@ -780,6 +775,16 @@ namespace SMESH
       }
     }
     return res < SMESH::HYP_UNKNOWN_FATAL;
+  } 
+
+  void UpdateViewer(SMESH::SMESH_Mesh_ptr theMesh)
+  {
+    if (_PTR(SObject) meshSO = SMESH::FindSObject(theMesh))
+    {
+      if (SMESH_Actor* actor = SMESH::FindActorByEntry(meshSO->GetID().c_str()))
+        if (actor->GetVisibility())
+          actor->Update();
+    }
   }
 
   SObjectList GetMeshesUsingAlgoOrHypothesis(SMESH::SMESH_Hypothesis_ptr AlgoOrHyp)
@@ -793,7 +798,7 @@ namespace SMESH
       if (SO_Hypothesis) {
         SObjectList listSO = SMESH::getStudy()->FindDependances(SO_Hypothesis);
 
-        if(MYDEBUG) MESSAGE("SMESHGUI::GetMeshesUsingAlgoOrHypothesis(): dependency number ="<<listSO.size());
+        MESSAGE("SMESHGUI::GetMeshesUsingAlgoOrHypothesis(): dependency number ="<<listSO.size());
         for (unsigned int i = 0; i < listSO.size(); i++) {
           _PTR(SObject) SO = listSO[i];
           if (SO) {
@@ -801,7 +806,7 @@ namespace SMESH
             if (aFather) {
               _PTR(SObject) SOfatherFather = aFather->GetFather();
               if (SOfatherFather) {
-                if(MYDEBUG) MESSAGE("SMESHGUI::GetMeshesUsingAlgoOrHypothesis(): dependency added to list");
+                MESSAGE("SMESHGUI::GetMeshesUsingAlgoOrHypothesis(): dependency added to list");
                 index++;
                 listSOmesh.resize(index);
                 listSOmesh[index - 1] = SOfatherFather;
@@ -811,7 +816,7 @@ namespace SMESH
         }
       }
     }
-    if (MYDEBUG) MESSAGE("SMESHGUI::GetMeshesUsingAlgoOrHypothesis(): completed");
+    MESSAGE("SMESHGUI::GetMeshesUsingAlgoOrHypothesis(): completed");
     return listSOmesh;
   }
 
index ddfd6dd29977a83dec07c7f540972e37e73298cd..01ca837ea21bac0b9669c8a5b04073d3fa957e80 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -115,6 +115,8 @@ namespace SMESH
   bool RemoveHypothesisOrAlgorithmOnMesh( _PTR(SObject),
                                           SMESH::SMESH_Hypothesis_ptr );
 
+  SMESHGUI_EXPORT void UpdateViewer(SMESH::SMESH_Mesh_ptr);
+
   typedef std::vector<_PTR(SObject)> SObjectList;
   SMESHGUI_EXPORT
   SObjectList GetMeshesUsingAlgoOrHypothesis( SMESH::SMESH_Hypothesis_ptr );
index baa1a73143c90eb32f4e21c6908bc7101697d9f0..308cf0d5ac2a7fe8089ff085b0a008b597758f83 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 
 #include "SMESHGUI_IdPreview.h"
 
-#include <SALOME_Actor.h>
 #include <SMDS_Mesh.hxx>
+
+#include <SALOME_Actor.h>
+#include <SUIT_ResourceMgr.h>
+#include <SUIT_Session.h>
 #include <SVTK_ViewWindow.h>
 
 #include <TColStd_MapIteratorOfMapOfInteger.hxx>
@@ -71,21 +74,27 @@ SMESHGUI_IdPreview::SMESHGUI_IdPreview(SVTK_ViewWindow* theViewWindow):
   myPtsSelectVisiblePoints->SetInputConnection(myPtsMaskPoints->GetOutputPort());
   myPtsSelectVisiblePoints->SelectInvisibleOff();
   myPtsSelectVisiblePoints->SetTolerance(0.1);
-    
+
   myPtsLabeledDataMapper = vtkLabeledDataMapper::New();
   myPtsLabeledDataMapper->SetInputConnection(myPtsSelectVisiblePoints->GetOutputPort());
   myPtsLabeledDataMapper->SetLabelModeToLabelScalars();
-    
+
   vtkTextProperty* aPtsTextProp = vtkTextProperty::New();
   aPtsTextProp->SetFontFamilyToTimes();
-  static int aPointsFontSize = 12;
+  int aPointsFontSize = 12;
+  if ( SUIT_ResourceMgr* mgr = SUIT_Session::session()->resourceMgr() )
+    if ( mgr->hasValue( "SMESH", "numbering_node_font" ) )
+    {
+      QFont f = mgr->fontValue( "SMESH", "numbering_node_font" );
+      aPointsFontSize = f.pointSize();
+    }
   aPtsTextProp->SetFontSize(aPointsFontSize);
   aPtsTextProp->SetBold(1);
   aPtsTextProp->SetItalic(0);
   aPtsTextProp->SetShadow(0);
   myPtsLabeledDataMapper->SetLabelTextProperty(aPtsTextProp);
   aPtsTextProp->Delete();
-  
+
   myIsPointsLabeled = false;
 
   myPointLabels = vtkActor2D::New();
@@ -97,13 +106,13 @@ SMESHGUI_IdPreview::SMESHGUI_IdPreview(SVTK_ViewWindow* theViewWindow):
 }
 
 void SMESHGUI_IdPreview::SetPointsData ( SMDS_Mesh*                   theMesh,
-                                         const TColStd_MapOfInteger & theNodesIdMap )
+                                         const SVTK_TVtkIDsMap & theNodesIdMap )
 {
   vtkPoints* aPoints = vtkPoints::New();
   aPoints->SetNumberOfPoints(theNodesIdMap.Extent());
   myIDs.clear();
 
-  TColStd_MapIteratorOfMapOfInteger idIter( theNodesIdMap );
+  SVTK_TVtkIDsMapIterator idIter( theNodesIdMap );
   for( int i = 0; idIter.More(); idIter.Next(), i++ )
   {
     const SMDS_MeshNode* aNode = theMesh->FindNode(idIter.Key());
index 6f1e14b44382f043f30c4789abee4cc629da91cb..a3a03de26a5908d74c1d57ccd28affe932ff1fe8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -29,6 +29,7 @@
 #include <vector>
 
 #include <TColStd_MapOfInteger.hxx>
+#include <SVTK_Hash.h>
 
 #include <gp_XYZ.hxx>
 
@@ -46,13 +47,13 @@ class vtkUnstructuredGrid;
 /*!
  * \brief To display in the viewer IDs of selected elements or nodes
  */
-class SMESHGUI_IdPreview
+class SMESHGUI_EXPORT SMESHGUI_IdPreview
 {
 public:
   SMESHGUI_IdPreview(SVTK_ViewWindow* theViewWindow);
   ~SMESHGUI_IdPreview();
 
-  void SetPointsData( SMDS_Mesh* theMesh, const TColStd_MapOfInteger & theNodesIdMap );
+  void SetPointsData( SMDS_Mesh* theMesh, const SVTK_TVtkIDsMap & theNodesIdMap );
   void SetElemsData ( const std::vector<int> &  theElemsIdMap,
                       const std::list<gp_XYZ> & theGrCentersXYZ );
   template< class INT_ITER, class XYZ_ITER >
index c58bc380e66f430c3de986c81ffaa4d9592336cb..988e4cc722e901d674b6ea5864939ee708ec2faa 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
diff --git a/src/SMESHGUI/SMESHGUI_InteractiveOp.cxx b/src/SMESHGUI/SMESHGUI_InteractiveOp.cxx
new file mode 100644 (file)
index 0000000..e4c7bf3
--- /dev/null
@@ -0,0 +1,181 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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   : SMESHGUI_InteractiveOp.cxx
+// Author : Roman NIKOLAEV, Open CASCADE S.A.S.
+
+// SMESH includes
+//
+#include "SMESHGUI.h"
+#include "SMESHGUI_InteractiveOp.h"
+#include "SMESHGUI_VTKUtils.h"
+
+// GUI includes
+#include <SVTK_ViewWindow.h>
+#include <SVTK_RenderWindowInteractor.h>
+#include <SVTK_Event.h>
+
+// VTK includes
+#include <vtkInteractorStyle.h>
+#include <vtkCallbackCommand.h>
+#include <vtkGenericRenderWindowInteractor.h>
+#include <vtkInteractorObserver.h>
+
+
+//================================================================================
+/*!
+ * \brief Constructor
+*/
+//================================================================================
+
+SMESHGUI_InteractiveOp::SMESHGUI_InteractiveOp() :
+  SMESHGUI_SelectionOp(),
+  myInteractorStyle(0),
+  myRWInteractor(0),
+  myStyleEventCallbackCommand(vtkCallbackCommand::New()),
+  myInteractorStypePriority(0.0),
+  myInteractorEventCallbackCommand(vtkCallbackCommand::New()),
+  myInteractorPriority(1.0)
+{
+  myStyleEventCallbackCommand->Delete();
+  myStyleEventCallbackCommand->SetClientData(this);
+  myStyleEventCallbackCommand->SetCallback(SMESHGUI_InteractiveOp::ProcessStyleEvents);
+
+  myInteractorEventCallbackCommand->Delete();
+  myInteractorEventCallbackCommand->SetClientData(this);
+  myInteractorEventCallbackCommand->SetCallback(SMESHGUI_InteractiveOp::ProcessInteractorEvents);
+}
+
+//================================================================================
+/*!
+ * \brief Destructor
+*/
+//================================================================================
+SMESHGUI_InteractiveOp::~SMESHGUI_InteractiveOp() 
+{
+}
+
+//=======================================================================
+// function : addObserver()
+// purpose  : Add VTK observers to process SVTK_InteractorStyle and vtkGenericRenderWindowInteractor events
+//======================================================================
+void SMESHGUI_InteractiveOp::addObserver()
+{
+  if (myInteractorStyle && !myInteractorStyle->HasObserver(SVTK::InteractiveSelectionChanged, myStyleEventCallbackCommand.GetPointer())) {
+    myInteractorStyle->AddObserver(SVTK::InteractiveSelectionChanged, myStyleEventCallbackCommand.GetPointer(),
+      myInteractorStypePriority);
+  }
+  if (myRWInteractor && myRWInteractor->GetDevice() &&
+    !myRWInteractor->GetDevice()->HasObserver(vtkCommand::LeftButtonPressEvent, myInteractorEventCallbackCommand.GetPointer())) {
+    myRWInteractor->GetDevice()->AddObserver(vtkCommand::LeftButtonPressEvent, myInteractorEventCallbackCommand.GetPointer(),
+      myInteractorPriority);
+  }
+}
+
+//=======================================================================
+// function : removeObserver()
+// purpose  : Remove VTK observers
+//======================================================================
+void SMESHGUI_InteractiveOp::removeObserver() {
+  if (myInteractorStyle && myInteractorStyle->HasObserver(SVTK::InteractiveSelectionChanged, myStyleEventCallbackCommand.GetPointer())) {
+    myInteractorStyle->RemoveObserver(myStyleEventCallbackCommand.GetPointer());
+  }
+  if (myRWInteractor && myRWInteractor->GetDevice() &&
+    myRWInteractor->GetDevice()->HasObserver(vtkCommand::LeftButtonPressEvent, myInteractorEventCallbackCommand.GetPointer())) {
+    myRWInteractor->GetDevice()->RemoveObserver(myInteractorEventCallbackCommand.GetPointer());
+  }
+}
+
+//=======================================================================
+// function : startOperation()
+// purpose  : Init dialog fields, connect signals and slots, show dialog
+//=======================================================================
+
+void SMESHGUI_InteractiveOp::startOperation()
+{
+  SVTK_ViewWindow* svtkViewWindow = SMESH::GetViewWindow(getSMESHGUI());
+  if (svtkViewWindow) {
+    myInteractorStyle = svtkViewWindow->GetInteractorStyle();
+    myRWInteractor = svtkViewWindow->GetInteractor();
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Process interactor style events
+          Static method. Used by vtkCallbackCommand->SetCallback method.
+ */
+ //===============================================================================
+void SMESHGUI_InteractiveOp::ProcessStyleEvents(vtkObject* vtkNotUsed(theObject),
+  unsigned long theEvent,
+  void* theClientData,
+  void* theCallData) {
+  SMESHGUI_InteractiveOp* self = reinterpret_cast<SMESHGUI_InteractiveOp*>(theClientData);
+  if (self)
+    self->processStyleEvents(theEvent, theCallData);
+}
+
+//================================================================================
+/*!
+ * \brief Process Generic Render Window Interactor events.
+          Static method. Used by vtkCallbackCommand->SetCallback method.
+ */
+ //===============================================================================
+void SMESHGUI_InteractiveOp::ProcessInteractorEvents(vtkObject* vtkNotUsed(theObject),
+  unsigned long theEvent,
+  void* theClientData,
+  void* theCallData) {
+  SMESHGUI_InteractiveOp* self = reinterpret_cast<SMESHGUI_InteractiveOp*>(theClientData);
+  if (self)
+    self->processInteractorEvents(theEvent, theCallData);
+}
+
+//================================================================================
+/*!
+ * \brief Process interactor style events ()
+          Virtual method. Should be overridden in inherited classes.
+ */
+ //===============================================================================
+
+void SMESHGUI_InteractiveOp::processStyleEvents(unsigned long theEvent, void* theCallData) {
+}
+
+//================================================================================
+/*!
+ * \brief Process Generic Render Window Interactor events.
+          Virtual method. Should be overridden in inherited classes.
+ */
+ //===============================================================================
+void SMESHGUI_InteractiveOp::processInteractorEvents(unsigned long theEvent, void* theCallData)
+{
+}
+
+//================================================================================
+/*!
+ * \brief Deactivate current operation in active VTK viewer
+ */
+ //===============================================================================
+void SMESHGUI_InteractiveOp::deactivateCurrentViewOperation() {
+  if (SVTK_ViewWindow* svtkViewWindow = SMESH::GetViewWindow(getSMESHGUI())) {
+    svtkViewWindow->deactivateCurrectOperation();
+  }
+}
\ No newline at end of file
diff --git a/src/SMESHGUI/SMESHGUI_InteractiveOp.h b/src/SMESHGUI/SMESHGUI_InteractiveOp.h
new file mode 100644 (file)
index 0000000..4d83ebe
--- /dev/null
@@ -0,0 +1,88 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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   : SMESHGUI_InteractiveOp.h
+// Author : Roman NIKOLAEV, Open CASCADE S.A.S.
+//
+
+#pragma once
+
+// SMESH includes
+#include "SMESH_SMESHGUI.hxx"
+#include "SMESHGUI_SelectionOp.h"
+
+// VTK includes
+#include <vtkSmartPointer.h>
+
+/*
+  Class       : SMESHGUI_InteractiveOp
+  Description : Base operation for all interactive operations in the VTK 3D Viewer
+*/
+
+class vtkInteractorStyle;
+class vtkCallbackCommand;
+class vtkObject;
+class SVTK_RenderWindowInteractor;
+
+class SMESHGUI_EXPORT SMESHGUI_InteractiveOp: public SMESHGUI_SelectionOp {
+  Q_OBJECT
+public:
+  SMESHGUI_InteractiveOp();
+  virtual ~SMESHGUI_InteractiveOp();
+
+  virtual void deactivateCurrentViewOperation();
+
+protected:
+  virtual void                   startOperation() override;
+
+  static void                    ProcessStyleEvents(vtkObject* object,
+                                                    unsigned long event,
+                                                    void* clientdata,
+                                                    void* calldata);
+  virtual void                   processStyleEvents(unsigned long event,
+                                                    void* calldata);
+
+  static void                    ProcessInteractorEvents(vtkObject* object,
+                                                         unsigned long event,
+                                                         void* clientdata,
+                                                          void* calldata);
+  virtual void                   processInteractorEvents(unsigned long event,
+                                                         void* calldata);
+
+  virtual void addObserver();
+  virtual void removeObserver();
+
+
+protected:
+  vtkInteractorStyle*           myInteractorStyle;
+  SVTK_RenderWindowInteractor*  myRWInteractor;
+
+  // Priority at which  events are processed:
+  //   Interactor Stype events
+  double myInteractorStypePriority;
+  //   Interactor events
+  double myInteractorPriority;
+
+  // Used to process events
+  vtkSmartPointer<vtkCallbackCommand> myStyleEventCallbackCommand;
+  vtkSmartPointer<vtkCallbackCommand> myInteractorEventCallbackCommand;
+};
diff --git a/src/SMESHGUI/SMESHGUI_MG_ADAPTDRIVER.cxx b/src/SMESHGUI/SMESHGUI_MG_ADAPTDRIVER.cxx
new file mode 100644 (file)
index 0000000..1de5fdb
--- /dev/null
@@ -0,0 +1,428 @@
+// Copyright (C) 2020-2024  CEA, EDF
+//
+// 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 "SMESHGUI_MG_ADAPTDRIVER.h"
+
+#include "SMESHGUI.h"
+#include "SMESHGUI_VTKUtils.h"
+#include "SMESHGUI_MeshUtils.h"
+#include "SMESH_TryCatch.hxx"
+
+#include <LightApp_SelectionMgr.h>
+#include <SUIT_Application.h>
+#include <SUIT_Desktop.h>
+#include <SUIT_MessageBox.h>
+#include <SUIT_Session.h>
+#include <SVTK_ViewWindow.h>
+#include <SalomeApp_Application.h>
+
+#include <QLineEdit>
+#include <QRadioButton>
+#include <QKeyEvent>
+
+// SALOME KERNEL includes
+
+const int SPACING = 6; // layout spacing
+const int MARGIN  = 9; // layout margin
+
+// bool createMgAdaptObject(MgAdapt *myMgAdapt )
+// {
+//   // SMESH::SMESH_Mesh_var newMesh = SMESHGUI::GetSMESHGen()->CreateEmptyMesh();
+
+//   // _PTR(SObject) aHypothesis;
+//   _PTR(Study) aStudy = SMESH::getStudy();
+//   QStringList anEntryList;
+//   _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
+//   _PTR(SComponent) mgadapt = aStudy->FindComponent("MG-ADAPT");
+//   _PTR(GenericAttribute) ga;
+//   if (!aBuilder->FindAttribute(mgadapt, ga, "AttributeName") )
+//   {
+//     mgadapt = aBuilder->NewComponent("MG-ADAPT");
+//     _PTR(AttributeName) Name = aBuilder->FindOrCreateAttribute(mgadapt, "AttributeName");
+//     Name->SetValue("MG-ADAPT");
+//     _PTR(AttributePixMap) myPixmap = aBuilder->FindOrCreateAttribute( mgadapt, "AttributePixMap" );
+//     myPixmap->SetPixMap( "ICON_MG_ADAPT" );
+//     anEntryList.append( mgadapt->GetID().c_str() );
+//   }
+
+//   _PTR(SObject) obj = aBuilder->NewObject(mgadapt);
+//   _PTR(AttributeName) myName = aBuilder->FindOrCreateAttribute(obj, "AttributeName");
+//   myName->SetValue("hypo");
+//   _PTR(AttributePixMap) aPixmap = aBuilder->FindOrCreateAttribute( obj, "AttributePixMap" );
+//   aPixmap->SetPixMap( "ICON_SMESH_TREE_HYPO" );
+//   anEntryList.append( obj->GetID().c_str() );
+
+//   SMESHGUI::GetSMESHGUI()->updateObjBrowser();
+
+//   // // browse to the published meshes
+//   if( LightApp_Application* anApp =
+//               dynamic_cast<LightApp_Application*>( SUIT_Session::session()->activeApplication() ) )
+//       anApp->browseObjects( anEntryList );
+//   return true;
+// }
+
+
+SMESHGUI_MG_ADAPTDRIVER::SMESHGUI_MG_ADAPTDRIVER( SMESHGUI* theModule, SMESH::MG_ADAPT_ptr myModel, bool isCreation )
+  : SMESHGUI_MgAdaptDlg((SalomeApp_Module*)theModule, myModel, SMESHGUI::desktop(), isCreation),
+    mySMESHGUI( theModule ),
+    myIsApplyAndClose( false )
+{
+
+  //resMgr = mySMESHGUI->resourceMgr();
+
+  selMgr = selectionMgr();
+
+  // connections
+  connect(myArgs, SIGNAL(updateSelection()), this, SLOT(updateSelection()));
+  connect(myArgs, SIGNAL(toExportMED(const char*)), this, SLOT(exportMED(const char*)));
+}
+
+// SUIT_ResourceMgr* SMESHGUI_MG_ADAPTDRIVER::resourceMgr()
+// {
+//   return dynamic_cast<SUIT_ResourceMgr*>( SUIT_Session::session()->resourceMgr() );
+// }
+
+LightApp_SelectionMgr* SMESHGUI_MG_ADAPTDRIVER::selectionMgr()
+{
+  SalomeApp_Application* anApp = dynamic_cast<SalomeApp_Application*>( SUIT_Session::session()->activeApplication() );
+  if( anApp )
+    return dynamic_cast<LightApp_SelectionMgr*>( anApp->selectionMgr() );
+  else
+    return 0;
+}
+
+void SMESHGUI_MG_ADAPTDRIVER::updateSelection()
+{
+  disconnect( selMgr, 0, this, 0 );
+  selMgr->clearFilters();
+
+  SMESH::SetPointRepresentation( false );
+  if ( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow() )
+    aViewWindow->SetSelectionMode( ActorSelection );
+  if (myArgs->aBrowser->isChecked())
+  {
+    connect( selMgr, SIGNAL( currentSelectionChanged() ), this, SLOT( selectionChanged() ));
+    selectionChanged();
+  }
+
+}
+void SMESHGUI_MG_ADAPTDRIVER::selectionChanged()
+{
+  //~ get selected mesh
+  SALOME_ListIO aList;
+  selMgr->selectedObjects(aList);
+  QString aString = "";
+  int nbSel = aList.Extent();
+  if (nbSel != 1)
+    return;
+
+  Handle(SALOME_InteractiveObject) IO = aList.First();
+  SMESH::SMESH_Mesh_var mesh = SMESH::GetMeshByIO(IO);
+  if ( !mesh->_is_nil() )
+  {
+    myMesh = mesh;
+
+    SMESH::SMESH_IDSource_var sSelectedObj = SMESH::IObjectToInterface<SMESH::SMESH_IDSource>( IO );
+    if ( sSelectedObj->_is_nil() )
+      return;
+  }
+  else
+    return;
+
+  SMESH::GetNameOfSelectedIObjects( selMgr, aString );
+  if ( aString.isEmpty() ) aString = " ";
+  else                     aString = aString.trimmed();
+
+
+  //bool ok = !aString.isEmpty();
+  if ( !mesh->_is_nil() )
+  {
+    myArgs->aBrowserObject->setText( aString );
+    myArgs->meshNameLineEdit->setText( aString );
+    myArgs->selectOutMedFileLineEdit->setText(aString+QString(".med"));
+    ADAPTATION_MODE aMode;
+    int nbVolumes = myMesh->NbVolumes();
+    int nbFaces = myMesh->NbFaces();
+    if(nbFaces > 0 && nbVolumes > 0) aMode = ADAPTATION_MODE::BOTH;
+    else if(nbFaces > 0) aMode = ADAPTATION_MODE::SURFACE;
+    else aMode = ADAPTATION_MODE::VOLUME;
+    emit myArgs->meshDimSignal(aMode);
+  }
+
+}
+void SMESHGUI_MG_ADAPTDRIVER::exportMED(const char* tmp_file)
+{
+  bool toOverwrite = true;
+  bool toFindOutDim = true;
+  myMesh->ExportMED(tmp_file, false, -1, toOverwrite, toFindOutDim);
+}
+void SMESHGUI_MG_ADAPTDRIVER::setMyMesh(SMESH::SMESH_Mesh_var mesh)
+{
+  myMesh = mesh;
+}
+SMESH::SMESH_Mesh_var SMESHGUI_MG_ADAPTDRIVER::getMyMesh()
+{
+  return myMesh;
+}
+
+//=================================================================================
+// function : PushOnOk()
+// purpose  :
+//=================================================================================
+void SMESHGUI_MG_ADAPTDRIVER::PushOnOK()
+{
+  setIsApplyAndClose( true );
+  bool ret = PushOnApply();
+//   std::cout  << "SMESHGUI_MG_ADAPTDRIVER::PushOnOK ret : " <<ret<<std::endl;
+  if ( ret ) reject();
+}
+
+bool SMESHGUI_MG_ADAPTDRIVER::PushOnApply()
+{
+  if ( SMESHGUI::isStudyLocked() )
+    return false;
+  if( !isValid() )
+    return false;
+
+  bool ok = SMESHGUI_MgAdaptDlg::PushOnApply();
+//   std::cout  << "SMESHGUI_MG_ADAPTDRIVER::PushOnApply ok 1 : " <<ok<<std::endl;
+
+  if ( ok )
+  {
+    ok = execute();
+    if (getModel()->getPublish()) this->createMeshInObjectBrowser();
+//     std::cout  << "SMESHGUI_MG_ADAPTDRIVER::PushOnApply ok 2 : " <<ok<<std::endl;
+    if ( ok )
+    {
+      QMessageBox::information( 0, QObject::tr(""),
+                                   QObject::tr("MG_ADAPT_DIAG_1") );
+    }
+    else
+    {
+      QMessageBox::critical( 0, QObject::tr("MG_ADAPT_ERROR"),
+                                QObject::tr("MG_ADAPT_DIAG_2") );
+    }
+  }
+
+  return ok;
+}
+
+// macro used to initialize errStr by exception description
+// returned by SMESH_CATCH( SMESH::returnError )
+#undef SMESH_CAUGHT
+#define SMESH_CAUGHT errStr =
+
+#undef SMY_OWN_CATCH
+#define SMY_OWN_CATCH catch ( SALOME::SALOME_Exception & e ) { errStr = e.details.text; }
+
+bool SMESHGUI_MG_ADAPTDRIVER::execute()
+{
+  int err = 1;
+  std::string errStr;
+  SMESH_TRY;
+  {
+    getModel()->compute();
+    err = 0;
+    errStr = SMESH::toStdStr( getModel()->getErrMsg() );
+  }
+  SMESH_CATCH( SMESH::returnError );
+
+  std::string msg = " ok";
+  if ( !errStr.empty() || err != 0 )
+  {
+    msg = "Not ok \n" + errStr + "\n";
+    std::cerr << msg;
+    err = 1;
+  }
+  return err == 0;
+}
+#undef SMESH_CAUGHT
+#define SMESH_CAUGHT
+
+//=================================================================================
+// function : enterEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_MG_ADAPTDRIVER::enterEvent (QEvent*)
+{
+
+  // if ( !ConstructorsBox->isEnabled() ) {
+  //   SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( mySMESHGUI );
+  //   if ( aViewWindow && !mySelector ) {
+  //     mySelector = aViewWindow->GetSelector();
+  //   }
+  //   activateThisDialog();
+  // }
+
+}
+
+//=================================================================================
+// function : keyPressEvent()
+// purpose  :
+//=================================================================================
+void SMESHGUI_MG_ADAPTDRIVER::keyPressEvent( QKeyEvent* e )
+{
+
+  QDialog::keyPressEvent( e );
+  if ( e->isAccepted() )
+      return;
+
+  if ( e->key() == Qt::Key_F1 )
+  {
+    e->accept();
+    PushOnHelp();
+  }
+
+}
+
+//=================================================================================
+// function : PushOnHelp()
+// purpose  :
+//=================================================================================
+void SMESHGUI_MG_ADAPTDRIVER::PushOnHelp()
+{
+
+  QString aHelpFile = "adaptation.html#_mg_adapt_anchor";
+
+  SMESH::ShowHelpFile( aHelpFile );
+
+}
+
+//=================================================================================
+// function : isValid
+// purpose  :
+//=================================================================================
+
+bool SMESHGUI_MG_ADAPTDRIVER::isValid()
+{
+  bool ok = true;
+  return ok;
+}
+
+bool SMESHGUI_MG_ADAPTDRIVER::createMeshInObjectBrowser()
+{
+  QString filename( SMESH::toQStr( getModel()->getMedFileOut() ));
+  QStringList errors;
+  QStringList anEntryList;
+  bool isEmpty = false;
+  //  bool ok = false;
+  SMESH::SMESH_Gen_var SMESH_Gen_ptr = SMESHGUI::GetSMESHGen();
+  if ( SMESH_Gen_ptr->_is_nil() ) {
+    QMessageBox::critical( 0, QObject::tr("MG_ADAPT_ERROR"),
+                           QObject::tr("Could not retrieve SMESH_Gen_ptr") );
+    return false;
+  }
+  SMESH::mesh_array_var aMeshes = new SMESH::mesh_array;
+  aMeshes->length( 1 ); // one mesh only
+  SMESH::DriverMED_ReadStatus res;
+  aMeshes = SMESH_Gen_ptr->CreateMeshesFromMED( filename.toUtf8().constData(), res );
+  if ( res != SMESH::DRS_OK ) {
+    errors.append( QString( "%1 :\n\t%2" ).arg( filename ).arg( QObject::tr( QString( "SMESH_DRS_%1" ).arg( res ).toLatin1().data() ) ) );
+  }
+  _PTR(Study) aStudy = SMESH::getStudy();
+  for ( int i = 0, iEnd = aMeshes->length(); i < iEnd; i++ )
+  {
+    _PTR(SObject) aMeshSO = SMESH::FindSObject( aMeshes[i] );
+    if ( aMeshSO )
+    {
+      _PTR(StudyBuilder) aBuilder = aStudy->NewBuilder();
+      _PTR(AttributePixMap) aPixmap = aBuilder->FindOrCreateAttribute( aMeshSO, "AttributePixMap" );
+      aPixmap->SetPixMap( "ICON_SMESH_TREE_MESH_IMPORTED" ); // put REFINED mesh ico
+      anEntryList.append( aMeshSO->GetID().c_str() );
+    }
+    else
+    {
+      isEmpty = true;
+    }
+  }
+  // update Object browser
+  SMESHGUI::GetSMESHGUI()->updateObjBrowser();
+  // browse to the published meshes
+  if( LightApp_Application* anApp =
+      dynamic_cast<LightApp_Application*>( SUIT_Session::session()->activeApplication() ) )
+    anApp->browseObjects( anEntryList );
+
+  // show Error message box if there were errors
+  if ( errors.count() > 0 ) {
+    SUIT_MessageBox::critical( SMESHGUI::desktop(),
+                               QObject::tr( "SMESH_ERROR" ),
+                               QObject::tr( "SMESH_IMPORT_ERRORS" ) + "\n" + errors.join( "\n" ) );
+  }
+
+  // show warning message box, if some imported mesh is empty
+  if ( isEmpty ) {
+    SUIT_MessageBox::warning( SMESHGUI::desktop(),
+                              QObject::tr( "SMESH_WRN_WARNING" ),
+                              QObject::tr( "SMESH_DRS_SOME_EMPTY" ) );
+  }
+  return true;
+}
+
+//================================================================
+// function : setIsApplyAndClose
+// Purpose  : Set value of the flag indicating that the dialog is
+//            accepted by Apply & Close button
+//================================================================
+void SMESHGUI_MG_ADAPTDRIVER::setIsApplyAndClose( const bool theFlag )
+{
+  myIsApplyAndClose = theFlag;
+}
+//================================================================
+// function : isApplyAndClose
+// Purpose  : Get value of the flag indicating that the dialog is
+//            accepted by Apply & Close button
+//================================================================
+bool SMESHGUI_MG_ADAPTDRIVER::isApplyAndClose() const
+{
+  return myIsApplyAndClose;
+}
+
+//=================================================================================
+// function : DeactivateActiveDialog()
+// purpose  :
+//=================================================================================
+void SMESHGUI_MG_ADAPTDRIVER::deactivateActiveDialog()
+{
+  // if (isEnabled())
+  // {
+  //   mySMESHGUI->ResetState();
+  //   mySMESHGUI->SetActiveDialogBox(0);
+  //   setEnabled( false );
+  // }
+}
+
+//=================================================================================
+// function : ActivateThisDialog()
+// purpose  :
+//=================================================================================
+void SMESHGUI_MG_ADAPTDRIVER::activateThisDialog()
+{
+
+  /* Emit a signal to deactivate the active dialog */
+  // mySMESHGUI->EmitSignalDeactivateDialog();
+  // ConstructorsBox->setEnabled(true);
+  // GroupArguments->setEnabled(true);
+  // GroupButtons->setEnabled(true);
+
+  // mySMESHGUI->SetActiveDialogBox((QDialog*)this);
+
+  // onSelectIdSource( myIdSourceCheck->isChecked() );
+
+  // SelectionIntoArgument();
+}
diff --git a/src/SMESHGUI/SMESHGUI_MG_ADAPTDRIVER.h b/src/SMESHGUI/SMESHGUI_MG_ADAPTDRIVER.h
new file mode 100644 (file)
index 0000000..58388da
--- /dev/null
@@ -0,0 +1,90 @@
+// Copyright (C) 2020-2024  CEA, EDF
+//
+// 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 SMESHGUI_MG_ADAPTDRIVER_H
+#define SMESHGUI_MG_ADAPTDRIVER_H
+
+#include "SMESH_SMESHGUI.hxx"
+
+// model
+#include "SMESHGUI_MgAdaptDlg.h"
+
+// IDL includes
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_Mesh)
+#include CORBA_SERVER_HEADER(MG_ADAPT)
+
+class SMESHGUI;
+class LightApp_SelectionMgr;
+//class MgAdapt;
+
+// int IObjectCount();
+// const SALOME_ListIO& selectedIO();
+// _PTR(Study) getStudy();
+// Handle(SALOME_InteractiveObject) firstIObject();
+// bool createAndPublishMed(QString fileName);
+// bool createMgAdaptObject(MgAdapt* myMgAdapt = 0);
+
+
+class  SMESHGUI_MG_ADAPTDRIVER : public SMESHGUI_MgAdaptDlg
+{
+    Q_OBJECT
+
+public :
+    SMESHGUI_MG_ADAPTDRIVER( SMESHGUI*, SMESH::MG_ADAPT_ptr, bool isCreation = true );
+    void setMyMesh(SMESH::SMESH_Mesh_var);
+    SMESH::SMESH_Mesh_var getMyMesh() ;
+
+private :
+
+    SMESHGUI*              mySMESHGUI;              /* Current SMESHGUI object */
+    LightApp_SelectionMgr* selMgr ;
+    LightApp_SelectionMgr* selectionMgr();
+    SMESH::SMESH_Mesh_var  myMesh ;
+    bool                   myIsApplyAndClose;
+
+    void                   enterEvent( QEvent* );           /* mouse enter the QWidget */
+    void                   keyPressEvent( QKeyEvent* );
+
+    bool                   isValid();
+    bool                   createMeshInObjectBrowser();
+    void                   setIsApplyAndClose( const bool theFlag );
+    bool                   isApplyAndClose() const;
+    bool                   execute();
+
+
+private slots:
+    void selectionChanged();
+    void updateSelection();
+
+protected slots :
+
+private slots:
+
+    void exportMED(const char* );
+
+    virtual bool PushOnApply();
+    virtual void PushOnOK();
+    virtual void PushOnHelp();
+
+    void         deactivateActiveDialog();
+    void         activateThisDialog();
+};
+
+#endif // SMESHGUI_MG_ADAPTDRIVER_H
index ceff2a4d242ca5f02b627949e3e4eb30df434794..76d04e0cd86621d4e12e8636c265f89ec006560b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -73,17 +73,16 @@ SMESHGUI_Make2DFrom3DDlg::SMESHGUI_Make2DFrom3DDlg( QWidget* parent )
   setWindowTitle( tr("CAPTION") );
 
   // mode
-  QGroupBox* aModeGrp = new QGroupBox( tr( "MODE" ), mainFrame() );
-  QHBoxLayout* aModeGrpLayout = new QHBoxLayout( aModeGrp );
+  myModeGrp = new QGroupBox( tr( "MODE" ), mainFrame() );
+  QHBoxLayout* aModeGrpLayout = new QHBoxLayout( myModeGrp );
   aModeGrpLayout->setMargin( MARGIN );
   aModeGrpLayout->setSpacing( SPACING );
-  my2dFrom3dRB = new QRadioButton( tr( "2D_FROM_3D" ), aModeGrp );
-  my1dFrom2dRB = new QRadioButton( tr( "1D_FROM_2D" ), aModeGrp );
+  my2dFrom3dRB = new QRadioButton( tr( "2D_FROM_3D" ), myModeGrp );
+  my1dFrom2dRB = new QRadioButton( tr( "1D_FROM_2D" ), myModeGrp );
   //my1dFrom3dRB = new QRadioButton( tr( "1D_FROM_3D" ), aModeGrp );
   aModeGrpLayout->addWidget( my2dFrom3dRB );
   aModeGrpLayout->addWidget( my1dFrom2dRB );
   //aModeGrpLayout->addWidget( my1dFrom3dRB );
-
 //   // Groups of mesh faces
 //   setObjectPixmap( "SMESH", tr( "ICON_SELECT" ) );
 //   createObject( tr( "Groups" ), mainFrame(), Groups );
@@ -116,7 +115,7 @@ SMESHGUI_Make2DFrom3DDlg::SMESHGUI_Make2DFrom3DDlg( QWidget* parent )
   QGridLayout* aDlgLay = new QGridLayout( mainFrame() );
   aDlgLay->setMargin( 0 );
   aDlgLay->setSpacing( SPACING );
-  aDlgLay->addWidget( aModeGrp,     0, 0, 1, 3 );
+  aDlgLay->addWidget( myModeGrp,     0, 0, 1, 3 );
   aDlgLay->addWidget( objectWg( MeshOrGroups,  Label ),   1, 0 );
   aDlgLay->addWidget( objectWg( MeshOrGroups,  Control ), 1, 1 );
   aDlgLay->addWidget( aTargetGrp,   2, 0, 1, 3 );
@@ -409,6 +408,7 @@ bool SMESHGUI_Make2DFrom3DOp::compute2DMesh( QStringList& theEntryList )
   SUIT_OverrideCursor wc;
 
   bool ok = false;
+  bool toCreateAllElements = false;
   try {
     SMESH::Bnd_Dimension mode = myDlg->mode();
     QString meshName          = myDlg->needNewMesh() ? myDlg->getNewMeshName() : QString();
@@ -453,6 +453,7 @@ bool SMESHGUI_Make2DFrom3DOp::compute2DMesh( QStringList& theEntryList )
                                                                groupName.toUtf8().constData(),
                                                                meshName.toUtf8().constData(),
                                                                copyAll,
+                                                               toCreateAllElements,
                                                                groups,
                                                                newMesh.out(),
                                                                newGrp.out() );
index ef16ab9cddfa9d692c66746e63a48cbca2dea4c6..414d471025bc714c2540edf4bfe715f00ab44e41 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -33,6 +33,7 @@
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 
 class QCheckBox;
+class QGroupBox;
 class QLineEdit;
 class QRadioButton;
 class SMESHGUI_Make2DFrom3DOp;
@@ -65,6 +66,9 @@ public:
 
   bool                 copySource() const;
 
+protected:
+  QGroupBox*    myModeGrp;
+
 private slots:
   void                 onTargetChanged();
   void                 onGroupChecked();
diff --git a/src/SMESHGUI/SMESHGUI_MakeFull2DFrom3DOp.cxx b/src/SMESHGUI/SMESHGUI_MakeFull2DFrom3DOp.cxx
new file mode 100644 (file)
index 0000000..211a639
--- /dev/null
@@ -0,0 +1,340 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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_MakeFull2DFrom3DOp.cxx
+// Author : Cesar Conopoima, Open CASCADE S.A.S. (cesar.conopoima@opencascade.com)
+
+#include "SMESHGUI_MakeFull2DFrom3DOp.h"
+
+#include "SMESHGUI.h"
+#include "SMESHGUI_Utils.h"
+#include "SMESHGUI_MeshUtils.h"
+#include "SMESH_TypeFilter.hxx"
+#include "SMESH_LogicalFilter.hxx"
+#include "SMESHGUI_VTKUtils.h"
+#include "SMESH_Actor.h"
+
+// SALOME GUI includes
+#include <LightApp_Application.h>
+#include <LightApp_SelectionMgr.h>
+#include <LightApp_UpdateFlags.h>
+#include <SALOME_ListIO.hxx>
+#include <SUIT_Desktop.h>
+#include <SUIT_MessageBox.h>
+#include <SUIT_OverrideCursor.h>
+#include <SUIT_Session.h>
+#include <SVTK_ViewModel.h>
+//#include <SVTK_ViewWindow.h>
+#include <SalomeApp_Study.h>
+#include <SalomeApp_Tools.h>
+
+// IDL includes
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_Group)
+
+// Qt includes
+#include <QGroupBox>
+
+#include <Standard_ErrorHandler.hxx>
+
+/*!
+  \class SMESHGUI_Make2DFrom3DDlg
+  \brief Copy Mesh dialog box
+*/
+
+SMESHGUI_MakeFull2DFrom3DDlg::SMESHGUI_MakeFull2DFrom3DDlg( QWidget* parent )
+  : SMESHGUI_Make2DFrom3DDlg( parent )
+{
+  // title
+  setWindowTitle( tr("CAPTION") );
+  myModeGrp->setVisible(false);
+}
+
+SMESHGUI_MakeFull2DFrom3DDlg::~SMESHGUI_MakeFull2DFrom3DDlg()
+{
+}
+
+
+/*!
+  \class SMESHGUI_MakeFull2DFrom3DOp
+  \brief Copy Mesh operation class
+*/
+SMESHGUI_MakeFull2DFrom3DOp::SMESHGUI_MakeFull2DFrom3DOp()
+   : SMESHGUI_SelectionOp(),
+    myMeshFilter(SMESH::MESH),
+    myGroupFilter(SMESH::GROUP)
+{
+}
+
+SMESHGUI_MakeFull2DFrom3DOp::~SMESHGUI_MakeFull2DFrom3DOp()
+{
+}
+
+LightApp_Dialog* SMESHGUI_MakeFull2DFrom3DOp::dlg() const
+{
+  return myDlg;
+}
+
+void SMESHGUI_MakeFull2DFrom3DOp::startOperation()
+{
+  if( !myDlg )
+    myDlg = new SMESHGUI_MakeFull2DFrom3DDlg( desktop() );
+
+
+  myHelpFileName = "make_2dmesh_from_3d_elements.html";
+
+  SMESHGUI_SelectionOp::startOperation();
+
+  myDlg->setNewMeshName( SMESH::UniqueName( "Mesh_1" ) );
+  myDlg->setGroupName( SMESH::UniqueName( "Group" ) );
+  myDlg->show();
+
+  myDlg->activateObject( SMESHGUI_MakeFull2DFrom3DDlg::MeshOrGroups );
+  selectionDone();
+}
+
+void SMESHGUI_MakeFull2DFrom3DOp::selectionDone()
+{
+  myDlg->clearSelection( SMESHGUI_MakeFull2DFrom3DDlg::MeshOrGroups );
+  mySrcMesh = SMESH::SMESH_Mesh::_nil();
+
+  if ( !dlg() ) return;
+  if ( dlg()->isVisible() ) {
+    try {
+      QStringList names, ids;
+      LightApp_Dialog::TypesList types;
+      selected( names, types, ids );
+      for ( int i = 0; i < names.count(); ++i )
+        names[i] = names[i].trimmed();
+      myDlg->selectObject( names, types, ids );
+
+      // enable/desable "new mesh" button
+      bool isMesh = true;
+      for ( int i = 0; i < ids.count() && isMesh; ++i )
+      {
+        _PTR(SObject) sobj = SMESH::getStudy()->FindObjectID( ids[i].toUtf8().constData() );
+        mySrcMesh = SMESH::SObjectToInterface<SMESH::SMESH_Mesh>( sobj );  
+      }
+      myDlg->setNewMeshEnabled( isMesh );
+    }
+    catch ( const SALOME::SALOME_Exception& S_ex ) {
+      SalomeApp_Tools::QtCatchCorbaException( S_ex );
+    }
+    catch ( ... ) {
+    }
+  }
+}
+
+SUIT_SelectionFilter* SMESHGUI_MakeFull2DFrom3DOp::createFilter( const int /*theId*/ ) const
+{
+  SMESHGUI_MakeFull2DFrom3DOp* me = (SMESHGUI_MakeFull2DFrom3DOp*) this;
+
+  QList<SUIT_SelectionFilter*> subFilters;
+  subFilters.append( & me->myMeshFilter );
+  subFilters.append( & me->myGroupFilter );
+
+  SUIT_SelectionFilter* f = new SMESH_LogicalFilter( subFilters, SMESH_LogicalFilter::LO_OR );
+  return f;
+}
+
+bool SMESHGUI_MakeFull2DFrom3DOp::isValid( QString& msg ) const
+{
+  if ( !dlg() ) return false;
+  
+  // check if a mesh is selected
+  if ( !myDlg->hasSelection( SMESHGUI_MakeFull2DFrom3DDlg::MeshOrGroups ))
+  {
+    msg = tr( "SMESH_ERR_NO_INPUT_MESH" );
+    return false;
+  }
+
+  QStringList entries;
+  dlg()->selectedObject( SMESHGUI_MakeFull2DFrom3DDlg::MeshOrGroups, entries );
+  const bool isMeshSelected = ( !mySrcMesh->_is_nil() );
+  if ( isMeshSelected )
+  {
+    // only one mesh is allowed
+    if ( entries.size() > 1 ) {
+      msg = tr( "SMESH_TOO_MANY_MESHES" );
+      return false;
+    }
+  }
+  else
+  {
+    // check if only groups are selected
+    for ( int i = 0; i < entries.count(); ++i )
+    {
+      SMESH::SMESH_GroupBase_var grp;
+      if ( _PTR(SObject) sobj = SMESH::getStudy()->FindObjectID( entries[i].toUtf8().constData() ))
+        grp = SMESH::SObjectToInterface<SMESH::SMESH_GroupBase>( sobj );
+      if ( grp->_is_nil() ) {
+        msg = tr( "SMESH_NOT_ONLY_GROUPS" );
+        return false;
+      }
+    }
+  }
+  // check if the selected objects contains elements of required type
+  bool hasVolumes = false;
+  
+  for ( int i = 0; i < entries.count(); ++i )
+  {
+    SMESH::SMESH_IDSource_var idSource;
+    if ( _PTR(SObject) sobj = SMESH::getStudy()->FindObjectID( entries[i].toUtf8().constData() ))
+      idSource = SMESH::SObjectToInterface<SMESH::SMESH_IDSource>( sobj );
+    if ( !idSource->_is_nil() ) {
+      SMESH::array_of_ElementType_var types = idSource->GetTypes();
+      for ( int j = 0; j < (int) types->length(); ++j )
+        if ( types[j] == SMESH::VOLUME )
+          hasVolumes = true;
+    }
+  }
+  if ( !hasVolumes ) {
+    msg = tr( "SMESH_ERR_NO_3D_ELEMENTS" );
+    return false;
+  } 
+
+  // check if new mesh name is specified
+  if ( myDlg->needNewMesh() && myDlg->getNewMeshName().isEmpty() ) {
+    msg = tr( "SMESH_ERR_MESH_NAME_NOT_SPECIFIED" );
+    return false;
+  }
+
+  // check if group name is specified
+  if ( myDlg->needGroup() && myDlg->getGroupName().isEmpty() ) {
+    msg = tr( "SMESH_ERR_GRP_NAME_NOT_SPECIFIED" );
+    return false;
+  }
+
+  return true;
+}
+
+bool SMESHGUI_MakeFull2DFrom3DOp::compute2DMesh( QStringList& theEntryList )
+{
+  SUIT_OverrideCursor wc;
+
+  bool ok = false;
+  try {
+    QString meshName          = myDlg->needNewMesh() ? myDlg->getNewMeshName() : QString();
+    QString groupName         = myDlg->needGroup()   ? myDlg->getGroupName()   : QString();
+    bool copyAll              = myDlg->copySource();
+
+    QStringList entries;
+    dlg()->selectedObject( SMESHGUI_MakeFull2DFrom3DDlg::MeshOrGroups, entries );
+    SMESH::ListOfIDSources_var groups = new SMESH::ListOfIDSources;
+    QString wrongGroups = "";
+
+    if ( mySrcMesh->_is_nil() ) // get selected groups, find groups of wrong type
+    {
+      int nbGroups = 0;      
+      groups->length( entries.count() );
+      for ( int i = 0; i < entries.count(); ++i )
+      {
+        _PTR(SObject) sobj = SMESH::getStudy()->FindObjectID( entries[i].toUtf8().constData() );
+        SMESH::SMESH_IDSource_var grp = SMESH::SObjectToInterface<SMESH::SMESH_IDSource>( sobj );  
+        SMESH::array_of_ElementType_var types = grp->GetTypes();
+        if ( types->length() < 1 || types[0] != SMESH::VOLUME )
+        {
+          if ( !wrongGroups.isEmpty() )
+            wrongGroups += ", ";
+          wrongGroups += sobj->GetName().c_str();
+        }
+        else
+        {
+          groups[ nbGroups++ ] = grp;
+        }
+      }
+      groups->length( nbGroups );
+      mySrcMesh = groups[0]->GetMesh();
+    }
+
+    if ( !CORBA::is_nil( mySrcMesh ) ) {
+      SMESH::SMESH_MeshEditor_var aMeshEditor = mySrcMesh->GetMeshEditor();
+      SMESH::SMESH_Group_var newGrp;
+      SMESH::SMESH_Mesh_var newMesh;
+      CORBA::Long nbAdded = aMeshEditor->MakeBoundaryElements( SMESH::BND_2DFROM3D,
+                                                               groupName.toUtf8().constData(),
+                                                               meshName.toUtf8().constData(),
+                                                               copyAll,
+                                                               true,
+                                                               groups,
+                                                               newMesh.out(),
+                                                               newGrp.out() );
+      QString msg = tr("NB_ADDED").arg( nbAdded );
+      if ( !wrongGroups.isEmpty() )
+        msg += ".\n" + tr("WRONG_GROUPS").arg( wrongGroups );
+      SUIT_MessageBox::information( myDlg, tr("SMESH_INFORMATION"), msg);
+
+      if ( !newMesh->_is_nil() ) {
+        if( _PTR(SObject) aSObject = SMESH::ObjectToSObject( newMesh ) )
+          theEntryList.append( aSObject->GetID().c_str() );
+      }
+      ok = true;
+
+      for ( int i = 0; i < entries.count(); ++i )
+        if ( SMESH_Actor* actor = SMESH::FindActorByEntry( entries[i].toUtf8().constData() ))
+        {
+          actor->SetEntityMode( actor->GetEntityMode() | SMESH_Actor::eFaces );
+          SMESH::Update( actor->getIO(), actor->GetVisibility() );
+        }
+      SMESH::RepaintCurrentView();
+    }
+  }
+  catch ( ... ) {
+  }
+  return ok;
+}
+
+bool SMESHGUI_MakeFull2DFrom3DOp::onApply()
+{
+  if ( SMESHGUI::isStudyLocked() )
+    return false;
+
+  QString msg;
+  if ( !isValid( msg ) ) {
+    dlg()->show();
+    if ( msg != "" )
+      SUIT_MessageBox::warning( myDlg, tr( "SMESH_ERROR" ), msg );
+    return false;
+  }
+
+  QStringList anEntryList;
+  bool res = false;
+  try {
+    res = compute2DMesh( anEntryList );
+  }
+  catch ( const SALOME::SALOME_Exception& S_ex ) {
+    SalomeApp_Tools::QtCatchCorbaException( S_ex );
+  }
+  catch ( ... ) {
+  }
+
+  if ( res ) {
+    SMESHGUI::Modified();
+    update( UF_ObjBrowser | UF_Model );
+    if( LightApp_Application* anApp =
+        dynamic_cast<LightApp_Application*>( SUIT_Session::session()->activeApplication() ) )
+      anApp->browseObjects( anEntryList, isApplyAndClose() );
+    myDlg->setNewMeshName( SMESH::UniqueName( "Mesh_1" ) );
+    myDlg->setGroupName( SMESH::UniqueName( "Group" ) );
+  }
+  else {
+    SUIT_MessageBox::warning( myDlg, tr( "SMESH_ERROR" ), tr( "SMESH_OPERATION_FAILED" ) );
+  }
+
+  return res;
+}
diff --git a/src/SMESHGUI/SMESHGUI_MakeFull2DFrom3DOp.h b/src/SMESHGUI/SMESHGUI_MakeFull2DFrom3DOp.h
new file mode 100644 (file)
index 0000000..b3d6ff1
--- /dev/null
@@ -0,0 +1,77 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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_MakeFull2DFrom3DOp.h
+// Author : Cesar Conopoima, Open CASCADE S.A.S. (cesar.conopoima@opencascade.com)
+
+#ifndef SMESHGUI_MakeFull2DFrom3DOp_H
+#define SMESHGUI_MakeFull2DFrom3DOp_H
+
+// SMESH includes
+#include "SMESHGUI_Make2DFrom3DOp.h"
+
+/*!
+ * \brief Dialog for options of generating 2D mesh from 3D.
+ */
+
+class SMESHGUI_EXPORT SMESHGUI_MakeFull2DFrom3DDlg :  public SMESHGUI_Make2DFrom3DDlg
+{
+  Q_OBJECT
+
+public:
+  SMESHGUI_MakeFull2DFrom3DDlg( QWidget* );
+  virtual ~SMESHGUI_MakeFull2DFrom3DDlg();
+
+  friend class SMESHGUI_MakeFull2DFrom3DOp;
+};
+
+/*!
+ * \brief Operation to compute 2D mesh from 3D mesh
+ */
+
+class SMESHGUI_EXPORT SMESHGUI_MakeFull2DFrom3DOp : public SMESHGUI_SelectionOp
+{
+  Q_OBJECT
+
+public:
+  SMESHGUI_MakeFull2DFrom3DOp();
+  virtual ~SMESHGUI_MakeFull2DFrom3DOp();
+
+  virtual LightApp_Dialog*           dlg() const;
+
+protected:
+  virtual void                       startOperation();
+  virtual void                       selectionDone();
+  virtual SUIT_SelectionFilter*      createFilter( const int ) const;
+  bool                               isValid( QString& ) const;
+
+protected slots:
+  virtual bool                       onApply();
+
+private:
+  bool                               compute2DMesh( QStringList& );
+
+private:
+  SMESH::SMESH_Mesh_var              mySrcMesh;
+  QPointer<SMESHGUI_MakeFull2DFrom3DDlg> myDlg;
+
+  SMESH_TypeFilter                   myMeshFilter;
+  SMESH_TypeFilter                   myGroupFilter;
+};
+
+#endif // SMESHGUI_MakeFull2DFrom3DOp_H
index 5c06fe86fed9469c0ce96262bedc3558de69d141..49ee4b4cba6d57a138fbc5ea21a03539d102fd15 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -48,6 +48,9 @@
 #include <SUIT_Desktop.h>
 #include <SVTK_ViewModel.h>
 #include <SVTK_ViewWindow.h>
+#include <SVTK_Renderer.h>
+#include <SVTK_RenderWindowInteractor.h>
+#include <SVTK_Event.h>
 #include <SalomeApp_Tools.h>
 #include <SalomeApp_TypeFilter.h>
 #include <SUIT_ResourceMgr.h>
 #include <QButtonGroup>
 
 // VTK includes
+#include <vtkObject.h>
 #include <vtkProperty.h>
+#include <vtkGenericRenderWindowInteractor.h>
+#include <vtkInteractorObserver.h>
 
 // IDL includes
 #include <SALOMEconfig.h>
 
 namespace
 {
-  enum { MANUAL_MODE = 0, SEARCH_MODE }; // how a node to move is specified
+  enum { MANUAL_MODE = 0, SEARCH_MODE, INTERACTIVE_MODE };
 }
 
+//#define SELECTION_PRECISION 4
+
+//=======================================================================
 /*!
  * \brief Dialog to publish a sub-shape of the mesh main shape
  *        by selecting mesh elements
  */
+//=======================================================================
+
 SMESHGUI_MakeNodeAtPointDlg::SMESHGUI_MakeNodeAtPointDlg()
   : SMESHGUI_Dialog( 0, false, true )
 {
@@ -112,6 +123,7 @@ SMESHGUI_MakeNodeAtPointDlg::SMESHGUI_MakeNodeAtPointDlg()
 // function : createMainFrame()
 // purpose  : Create frame containing dialog's input fields
 //=======================================================================
+
 QWidget* SMESHGUI_MakeNodeAtPointDlg::createMainFrame (QWidget* theParent)
 {
   QWidget* aFrame = new QWidget(theParent);
@@ -119,8 +131,9 @@ QWidget* SMESHGUI_MakeNodeAtPointDlg::createMainFrame (QWidget* theParent)
   SUIT_ResourceMgr* rm = SMESH::GetResourceMgr( SMESHGUI::GetSMESHGUI() );
   QPixmap iconMoveNode        (rm->loadPixmap("SMESH", tr("ICON_DLG_MOVE_NODE")));
   QPixmap iconMoveWithoutNode (rm->loadPixmap("SMESH", tr("ICON_DLG_MOVE_WITHOUT_NODE")));
+  QPixmap iconMoveInteractive (rm->loadPixmap("SMESH", tr("ICON_DLG_MOVE_NODE_INTERACTIVE")));
   QPixmap iconSelect          (rm->loadPixmap("SMESH", tr("ICON_SELECT")));
-
+  
   // constructor
   QGroupBox* aPixGrp = new QGroupBox(tr("MOVE_NODE"), this);
   aPixGrp->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
@@ -129,16 +142,20 @@ QWidget* SMESHGUI_MakeNodeAtPointDlg::createMainFrame (QWidget* theParent)
   aPixGrpLayout->setMargin(MARGIN);
   aPixGrpLayout->setSpacing(SPACING);
 
-  myRButNodeToMove = new QRadioButton(aPixGrp);
+  myRButNodeToMove      = new QRadioButton(aPixGrp);
   myRButMoveWithoutNode = new QRadioButton(aPixGrp);
+  myRButMoveInteractive = new QRadioButton(aPixGrp);
   myRButNodeToMove->setIcon(iconMoveNode);
   myRButMoveWithoutNode->setIcon(iconMoveWithoutNode);
+  myRButMoveInteractive->setIcon(iconMoveInteractive);
   myRButNodeToMove->setChecked(true);
 
   aPixGrpLayout->addWidget(myRButNodeToMove);
   aPixGrpLayout->addWidget(myRButMoveWithoutNode);
-  myButtonGroup->addButton(myRButNodeToMove, 0);
+  aPixGrpLayout->addWidget(myRButMoveInteractive);
+  myButtonGroup->addButton(myRButNodeToMove,      0);
   myButtonGroup->addButton(myRButMoveWithoutNode, 1);
+  myButtonGroup->addButton(myRButMoveInteractive, 2);
 
   // Node to move
 
@@ -302,11 +319,15 @@ void SMESHGUI_MakeNodeAtPointDlg::ButtonToggled (bool on)
   * \param int - number of the button
  */
 //================================================================================
+
 void SMESHGUI_MakeNodeAtPointDlg::ConstructorsClicked (int constructorId)
 {
   switch (constructorId) {
-  case 0:
+  case MANUAL_MODE:
+  case INTERACTIVE_MODE:
     {
+      myUpdateBtn->setVisible( constructorId == MANUAL_MODE );
+      myDestinationGrp->setTitle( tr( constructorId == MANUAL_MODE ? "DESTINATION" : "DESTINATION_BY_MOUSE"));
       myDestDXLabel->show();
       myDestDYLabel->show();
       myDestDZLabel->show();
@@ -317,9 +338,10 @@ void SMESHGUI_MakeNodeAtPointDlg::ConstructorsClicked (int constructorId)
       myCurrentY->SetValue(0);
       myCurrentZ->SetValue(0);
       if (!myNodeToMoveGrp->isVisible()) myNodeToMoveGrp->show();
+      myIdBtn->setChecked( true );
       break;
     }
-  case 1:
+  case SEARCH_MODE:
     {
       myId->setText("");
       myCurrentX->SetValue(0);
@@ -349,8 +371,10 @@ void SMESHGUI_MakeNodeAtPointDlg::ConstructorsClicked (int constructorId)
 */
 //================================================================================
 
-SMESHGUI_MakeNodeAtPointOp::SMESHGUI_MakeNodeAtPointOp()
+SMESHGUI_MakeNodeAtPointOp::SMESHGUI_MakeNodeAtPointOp(int defaultConstructor) : 
+  SMESHGUI_InteractiveOp()
 {
+  myDefaultConstructor = defaultConstructor;
   mySimulation = 0;
   mySMESHGUI = 0;
   myDlg = new SMESHGUI_MakeNodeAtPointDlg;
@@ -370,7 +394,7 @@ SMESHGUI_MakeNodeAtPointOp::SMESHGUI_MakeNodeAtPointOp()
   connect(myDlg->myDestDZ,        SIGNAL (valueChanged(double)), this, SLOT(onDestCoordChanged()));
   connect(myDlg->myId,            SIGNAL (textChanged(const QString&)),SLOT(redisplayPreview()));
   connect(myDlg->myPreviewChkBox, SIGNAL (toggled(bool)),              SLOT(redisplayPreview()));
-  connect(myDlg->myButtonGroup,   SIGNAL (buttonClicked(int)),         SLOT(redisplayPreview()));
+  connect(myDlg->myButtonGroup,   SIGNAL (buttonClicked(int)),         SLOT(constructorChanged()));
 
   // IPAL22913: TC6.5.0: selected in "Move node" dialog box node is not highlighted
   // note: this slot seems to be lost together with removed obsolete SMESHGUI_MoveNodesDlg class
@@ -378,6 +402,12 @@ SMESHGUI_MakeNodeAtPointOp::SMESHGUI_MakeNodeAtPointOp()
   connect(myDlg->myUpdateBtn, SIGNAL (clicked()), this, SLOT(onUpdateDestination()));
 }
 
+//================================================================================
+/*!
+ * \brief SLOT. Update preview upon [Update destination] clicked
+ */
+//================================================================================
+
 void SMESHGUI_MakeNodeAtPointOp::onUpdateDestination()
 {
   myUpdateDestination = true;
@@ -385,6 +415,12 @@ void SMESHGUI_MakeNodeAtPointOp::onUpdateDestination()
   myUpdateDestination = false;
 }
 
+//================================================================================
+/*!
+ * \brief SLOT. Update preview upon Destination coordinates change
+ */
+//================================================================================
+
 void SMESHGUI_MakeNodeAtPointOp::onDestCoordChanged()
 {
   myDestCoordChanged = false;
@@ -392,10 +428,12 @@ void SMESHGUI_MakeNodeAtPointOp::onDestCoordChanged()
   myDestCoordChanged = true;
 }
 
+
 //=======================================================================
 // function : startOperation()
 // purpose  : Init dialog fields, connect signals and slots, show dialog
 //=======================================================================
+
 void SMESHGUI_MakeNodeAtPointOp::startOperation()
 {
   myNoPreview = false;
@@ -404,7 +442,8 @@ void SMESHGUI_MakeNodeAtPointOp::startOperation()
   // init simulation with a current View
   if ( mySimulation ) delete mySimulation;
   mySMESHGUI = getSMESHGUI();
-  mySimulation = new SMESHGUI_MeshEditPreview(SMESH::GetViewWindow( mySMESHGUI ) );
+  mySimulation = new SMESHGUI_MeshEditPreview(SMESH::GetViewWindow(mySMESHGUI));
+
   connect(mySMESHGUI, SIGNAL (SignalActivatedViewManager()), this, SLOT(onOpenView()));
   connect(mySMESHGUI, SIGNAL (SignalCloseView()), this, SLOT(onCloseView()));
   vtkProperty* aProp = vtkProperty::New();
@@ -427,6 +466,7 @@ void SMESHGUI_MakeNodeAtPointOp::startOperation()
   // IPAL19360
   SMESHGUI_SelectionOp::startOperation(); // this method should be called only after filter creation
   //activateSelection(); // set filters   // called inside of previous statement
+  SMESHGUI_InteractiveOp::startOperation();
   myDlg->myId->setText("");
   myDlg->myDestinationX->SetValue(0);
   myDlg->myDestinationY->SetValue(0);
@@ -442,6 +482,10 @@ void SMESHGUI_MakeNodeAtPointOp::startOperation()
   myDlg->myDestDZ->setReadOnly(true);
   myDlg->myRButNodeToMove->setChecked(true);
 
+  if ( myDefaultConstructor == INTERACTIVE_MODE ) {
+    addObserver();
+    myDlg->myButtonGroup->button( INTERACTIVE_MODE )->setChecked(true);
+  }
   myDlg->ConstructorsClicked( GetConstructorId() );
 
   myDlg->show();
@@ -453,6 +497,7 @@ void SMESHGUI_MakeNodeAtPointOp::startOperation()
 // function : GetConstructorId()
 // purpose  :
 //=================================================================================
+
 int SMESHGUI_MakeNodeAtPointOp::GetConstructorId()
 {
   return myDlg->myButtonGroup->checkedId();
@@ -483,6 +528,7 @@ void SMESHGUI_MakeNodeAtPointOp::stopOperation()
   disconnect(mySMESHGUI, SIGNAL (SignalCloseView()),            this, SLOT(onCloseView()));
   selectionMgr()->removeFilter( myFilter );
   SMESHGUI_SelectionOp::stopOperation();
+  removeObserver();
 }
 
 //================================================================================
@@ -533,9 +579,9 @@ bool SMESHGUI_MakeNodeAtPointOp::onApply()
     bool ok;
     int anId = myDlg->myId->text().toInt( &ok );
     if( !ok || anId < 1 )
-      anId = aMeshEditor->FindNodeClosestTo(myDlg->myDestinationX->GetValue(),
-                                            myDlg->myDestinationY->GetValue(),
-                                            myDlg->myDestinationZ->GetValue());
+      anId = FromSmIdType<int>(aMeshEditor->FindNodeClosestTo(myDlg->myDestinationX->GetValue(),
+                                                            myDlg->myDestinationY->GetValue(),
+                                                            myDlg->myDestinationZ->GetValue()));
 
     int aResult = aMeshEditor->MoveNode(anId,
                                         myDlg->myDestinationX->GetValue(),
@@ -770,9 +816,9 @@ void SMESHGUI_MakeNodeAtPointOp::redisplayPreview()
               myDlg->myDestDZ->setReadOnly(true);
             }
             if ( isPreview && isMoveNode && anId == 0 )
-              anId = aPreviewer->FindNodeClosestTo(myDlg->myDestinationX->GetValue(),
-                                                   myDlg->myDestinationY->GetValue(),
-                                                   myDlg->myDestinationZ->GetValue());
+              anId = FromSmIdType<int>(aPreviewer->FindNodeClosestTo(myDlg->myDestinationX->GetValue(),
+                                                                   myDlg->myDestinationY->GetValue(),
+                                                                   myDlg->myDestinationZ->GetValue()));
             // find id and/or just compute preview
             aPreviewer->MoveNode(anId,
                                  myDlg->myDestinationX->GetValue(),
@@ -828,6 +874,7 @@ void SMESHGUI_MakeNodeAtPointOp::redisplayPreview()
  * \brief SLOT called when the viewer opened
  */
 //=================================================================================
+
 void SMESHGUI_MakeNodeAtPointOp::onOpenView()
 {
   if ( mySimulation ) {
@@ -839,11 +886,29 @@ void SMESHGUI_MakeNodeAtPointOp::onOpenView()
   }
 }
 
+//=================================================================================
+/*!
+ * \brief SLOT called when the creation mode is changed 
+ */
+ //=================================================================================
+
+void SMESHGUI_MakeNodeAtPointOp::constructorChanged() {
+  redisplayPreview();
+  if (GetConstructorId() == INTERACTIVE_MODE) {
+    addObserver();
+  }
+  else {
+    removeObserver();
+  }
+}
+
+
 //=================================================================================
 /*!
  * \brief SLOT called when the viewer closed
  */
 //=================================================================================
+
 void SMESHGUI_MakeNodeAtPointOp::onCloseView()
 {
   delete mySimulation;
@@ -869,8 +934,8 @@ void SMESHGUI_MakeNodeAtPointOp::onTextChange( const QString& theText )
 
       if( const SMDS_MeshNode* aNode = aMesh->FindNode( theText.toInt() ) )
       {
-        TColStd_MapOfInteger aListInd;
-        aListInd.Add( aNode->GetID() );
+        SVTK_TVtkIDsMap aListInd;
+        aListInd.Add( FromSmIdType<int>(aNode->GetID()) );
         selector()->AddOrRemoveIndex( anIO, aListInd, false );
         if( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( SMESHGUI::GetSMESHGUI() ) )
           aViewWindow->highlight( anIO, true, true );
@@ -918,3 +983,54 @@ LightApp_Dialog* SMESHGUI_MakeNodeAtPointOp::dlg() const
   return myDlg;
 }
 
+
+//================================================================================
+/*
+* \brief Process InteractiveSelectionChanged event
+*/
+//================================================================================
+
+void SMESHGUI_MakeNodeAtPointOp::processStyleEvents(unsigned long theEvent, void* theCallData) {
+  if (theEvent == SVTK::InteractiveSelectionChanged) {
+    double* aCoord = (double*)theCallData;
+    myDlg->myDestinationX->SetValue(aCoord[0]);
+    myDlg->myDestinationY->SetValue(aCoord[1]);
+    myDlg->myDestinationZ->SetValue(aCoord[2]);
+    redisplayPreview();
+  }
+}
+
+//================================================================================
+/*
+* \brief Process LeftButtonPressEvent event
+*/
+//================================================================================
+void SMESHGUI_MakeNodeAtPointOp::processInteractorEvents(unsigned long theEvent, void* theCallData) {
+  (void*)theCallData;
+  if (theEvent == vtkCommand::LeftButtonPressEvent) {
+    bool control = myRWInteractor->GetDevice()->GetControlKey();
+    bool shift = myRWInteractor->GetDevice()->GetControlKey();
+    if (GetConstructorId() == INTERACTIVE_MODE && myDlg->myDestBtn->isChecked() && !shift && !control) {
+      if (SVTK_ViewWindow* svtkViewWindow = SMESH::GetViewWindow(SMESHGUI::GetSMESHGUI())) {
+        svtkViewWindow->activateInteractiveSelection();
+      }
+    }
+  }
+   /*
+   if ( myRWInteractor && myRWInteractor->GetDevice() && myInteractorStyle ) {
+      int xClick, yClick; // Last click position
+      myRWInteractor->GetDevice()->GetEventPosition(xClick, yClick);
+      double nodeCoords[3];
+      vtkInteractorObserver::ComputeWorldToDisplay(myRWInteractor->GetRenderer()->GetDevice(),
+                                                   myDlg->myDestinationX->GetValue(),
+                                                   myDlg->myDestinationY->GetValue(),
+                                                   myDlg->myDestinationZ->GetValue(),
+                                                   nodeCoords);
+      double rad = std::sqrt(std::pow(xClick - nodeCoords[0], 2) + std::pow(yClick - nodeCoords[1], 2));
+      if (rad < SELECTION_PRECISION) {
+        if (SVTK_ViewWindow* svtkViewWindow = SMESH::GetViewWindow(mySMESHGUI)) {
+          svtkViewWindow->activateInteractiveSelection();
+        }
+      }
+  }*/
+}
index 947c0a5581df56d3b94a768045927024485b885e..0cb611c3cc79686f747519f7849abd5fcd5703a3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -30,7 +30,9 @@
 #include "SMESH_SMESHGUI.hxx"
 
 #include "SMESHGUI_Dialog.h"
-#include "SMESHGUI_SelectionOp.h"
+#include "SMESHGUI_InteractiveOp.h"
+
+#include <vtkSmartPointer.h>
 
 class QButtonGroup;
 class QCheckBox;
@@ -42,28 +44,35 @@ class SMESHGUI_SpinBox;
 class SMESHGUI_MeshEditPreview;
 class SMESHGUI_MakeNodeAtPointDlg;
 
+
 /*!
  * \brief Operation to make a mesh pass through a point
  */
-class SMESHGUI_EXPORT SMESHGUI_MakeNodeAtPointOp: public SMESHGUI_SelectionOp
+class SMESHGUI_EXPORT SMESHGUI_MakeNodeAtPointOp: public SMESHGUI_InteractiveOp
 {
   Q_OBJECT
 
 public:
-  SMESHGUI_MakeNodeAtPointOp();
+  SMESHGUI_MakeNodeAtPointOp(int defaultConstructor = 0);
   virtual ~SMESHGUI_MakeNodeAtPointOp();
 
   virtual LightApp_Dialog*       dlg() const;  
 
 protected:
 
-  virtual void                   startOperation();
-  virtual void                   stopOperation();
+  virtual void                   startOperation() override;
+  virtual void                   stopOperation() override;
 
-  virtual void                   activateSelection();
+  virtual void                   activateSelection() override;
 
   bool                           isValid( QString& );
 
+  virtual void                   processStyleEvents(unsigned long event,
+                                                    void* calldata)  override;
+
+  virtual void                   processInteractorEvents(unsigned long event,
+                                                         void* calldata) override;
+
 protected slots:
   virtual bool                   onApply();
 
@@ -75,14 +84,15 @@ private slots:
   void                           onDestCoordChanged();
   void                           onOpenView();
   void                           onCloseView();
+  void                           constructorChanged();
 
 private:
   int                           GetConstructorId();
 
+  int                           myDefaultConstructor;
   SMESHGUI_MakeNodeAtPointDlg*  myDlg;
 
   SUIT_SelectionFilter*         myFilter;
-  int                           myMeshOldDisplayMode;
   SMESHGUI*                     mySMESHGUI;
   SMESHGUI_MeshEditPreview*     mySimulation;
   SMESH_Actor*                  myMeshActor;
@@ -110,6 +120,7 @@ private:
   QButtonGroup*                 myButtonGroup;
   QRadioButton*                 myRButNodeToMove;
   QRadioButton*                 myRButMoveWithoutNode;
+  QRadioButton*                 myRButMoveInteractive;
   QPushButton*                  myDestBtn;
   QPushButton*                  myUpdateBtn;
   QGroupBox*                    myDestinationGrp;
index a2373378e2f40088b76213abf6d48e9a3b4c0ff2..c74246a1bda5d15cfcdd3ba3444afef3b3880b7a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -60,7 +60,7 @@
 #include <vtkCellArray.h>
 #include <vtkUnsignedCharArray.h>
 #include <vtkDataSetMapper.h>
-#include <VTKViewer_CellLocationsArray.h>
+//#include <VTKViewer_CellLocationsArray.h>
 #include <vtkProperty.h>
 
 #include <ElCLib.hxx>
@@ -357,7 +357,7 @@ void SMESHGUI_MinDistance::createPreview( double x1, double y1, double z1, doubl
   aCells->InsertNextCell( anIdList );
   aCellTypesArray->InsertNextValue( VTK_LINE );
   anIdList->Delete();
-  VTKViewer_CellLocationsArray* aCellLocationsArray = VTKViewer_CellLocationsArray::New();
+  vtkIdTypeArray* aCellLocationsArray = vtkIdTypeArray::New();
   aCellLocationsArray->SetNumberOfComponents( 1 );
   aCellLocationsArray->SetNumberOfTuples( 1 );
   aCells->InitTraversal();
@@ -492,7 +492,7 @@ void SMESHGUI_MinDistance::firstEdited()
   if ( myFirstActor && selector ) {
     Handle(SALOME_InteractiveObject) IO = myFirstActor->getIO();
     if ( myFirst->checkedId() == NodeTgt || myFirst->checkedId() == ElementTgt ) {
-      TColStd_MapOfInteger ID;
+      SVTK_TVtkIDsMap ID;
       ID.Add( myFirstTgt->text().toLong() );
       selector->AddOrRemoveIndex( IO, ID, false );
     }
@@ -520,7 +520,7 @@ void SMESHGUI_MinDistance::secondEdited()
     Handle(SALOME_InteractiveObject) IO = mySecondActor->getIO();
     if ( mySecond->checkedId() == NodeTgt || mySecond->checkedId() == ElementTgt ) {
       if ( !text.isEmpty() ) {
-        TColStd_MapOfInteger ID;
+        SVTK_TVtkIDsMap ID;
         ID.Add( text.toLong() );
         selector->AddOrRemoveIndex( IO, ID, false );
       }
@@ -546,7 +546,7 @@ void SMESHGUI_MinDistance::compute()
       SMESH::SMESH_Mesh_var m = myFirstSrc->GetMesh();
       long id = myFirstTgt->text().toLong();
       if ( !CORBA::is_nil( m ) && id ) {
-        SMESH::long_array_var ids = new SMESH::long_array();
+        SMESH::smIdType_array_var ids = new SMESH::smIdType_array();
         ids->length( 1 );
         ids[0] = id;
         SMESH::SMESH_MeshEditor_var me = m->GetMeshEditor();
@@ -565,7 +565,7 @@ void SMESHGUI_MinDistance::compute()
       SMESH::SMESH_Mesh_var m = mySecondSrc->GetMesh();
       long id = mySecondTgt->text().toLong();
       if ( !CORBA::is_nil( m ) && id ) {
-        SMESH::long_array_var ids = new SMESH::long_array();
+        SMESH::smIdType_array_var ids = new SMESH::smIdType_array();
         ids->length( 1 );
         ids[0] = id;
         SMESH::SMESH_MeshEditor_var me = m->GetMeshEditor();
@@ -891,7 +891,7 @@ void SMESHGUI_BoundingBox::createPreview( double minX, double maxX, double minY,
   aCells->InsertNextCell( anIdList );
   aCellTypesArray->InsertNextValue( VTK_LINE );
   anIdList->Delete();
-  VTKViewer_CellLocationsArray* aCellLocationsArray = VTKViewer_CellLocationsArray::New();
+  vtkIdTypeArray* aCellLocationsArray = vtkIdTypeArray::New();
   aCellLocationsArray->SetNumberOfComponents( 1 );
   aCellLocationsArray->SetNumberOfTuples( 12 );
   aCells->InitTraversal();
@@ -1022,7 +1022,7 @@ void SMESHGUI_BoundingBox::sourceEdited()
   if ( myActor && selector ) {
     Handle(SALOME_InteractiveObject) IO = myActor->getIO();
     if ( mySourceMode->checkedId() == NodesSrc || mySourceMode->checkedId() == ElementsSrc ) {
-      TColStd_MapOfInteger ID;
+      SVTK_TVtkIDsMap ID;
       if ( !mySource->isReadOnly() )
         myIDs = mySource->text();
       QStringList ids = myIDs.split( " ", QString::SkipEmptyParts );
@@ -1047,7 +1047,7 @@ void SMESHGUI_BoundingBox::compute()
       SMESH::SMESH_Mesh_var m = mySrc[0]->GetMesh();
       QStringList ids = myIDs.split( " ", QString::SkipEmptyParts );
       if ( !CORBA::is_nil( m ) && ids.count() > 0 ) {
-        SMESH::long_array_var ids_in = new SMESH::long_array();
+        SMESH::smIdType_array_var ids_in = new SMESH::smIdType_array();
         ids_in->length( ids.count() );
         for( int i = 0; i < ids.count(); i++ )
           ids_in[i] = ids[i].trimmed().toLong();
@@ -1420,7 +1420,7 @@ void SMESHGUI_Angle::selectionChanged()
   clear();
   QString nodesString;
 
-  TColStd_IndexedMapOfInteger idsMap;
+  SVTK_TIndexedMapOfVtkId idsMap;
   SALOME_ListIO selected;
   SMESHGUI::selectionMgr()->selectedObjects( selected );
   selected.Reverse(); // to keep order of selection
@@ -1528,7 +1528,7 @@ void SMESHGUI_Angle::nodesEdited()
 {
   clear();
 
-  TColStd_MapOfInteger ID;
+  SVTK_TVtkIDsMap ID;
   QStringList ids = myNodes->text().split( " ", QString::SkipEmptyParts );
   foreach ( QString idStr, ids )
   {
index 66ecc6e0c12a8b4ed8dac8091831b5b950290cdb..e261be53217495e3001613415e097118983dfa9d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 63d4b9d306308f296bbd0193adcf28e6f1f66307..48aeb4eb49e9b062aa1d9f644a4363d82fef6c9f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -469,7 +469,7 @@ void SMESHGUI_MergeDlg::Init()
 // function : FindGravityCenter()
 // purpose  :
 //=================================================================================
-void SMESHGUI_MergeDlg::FindGravityCenter(TColStd_MapOfInteger & theElemsIdMap,
+void SMESHGUI_MergeDlg::FindGravityCenter(SVTK_TVtkIDsMap &      theElemsIdMap,
                                           std::vector<int>&      theIDs,
                                           std::list< gp_XYZ > &  theGrCentersXYZ)
 {
@@ -484,7 +484,7 @@ void SMESHGUI_MergeDlg::FindGravityCenter(TColStd_MapOfInteger & theElemsIdMap,
   int nbNodes;
 
   theIDs.reserve( theElemsIdMap.Extent() );
-  TColStd_MapIteratorOfMapOfInteger idIter( theElemsIdMap );
+  SVTK_TVtkIDsMapIterator idIter( theElemsIdMap );
   for( ; idIter.More(); idIter.Next() ) {
     const SMDS_MeshElement* anElem = aMesh->FindElement(idIter.Key());
     if ( !anElem )
@@ -556,7 +556,7 @@ bool SMESHGUI_MergeDlg::ClickOnApply()
       int i, nb = KeepList->count();
       if ( isKeepIDsSelection() )
       {
-        SMESH::long_array_var anIdList = new SMESH::long_array();
+        SMESH::smIdType_array_var anIdList = new SMESH::smIdType_array();
         anIdList->length(nb);
         for (i = 0; i < nb; i++)
           anIdList[i] = KeepList->item(i)->text().toInt();
@@ -845,7 +845,7 @@ void SMESHGUI_MergeDlg::onSelectGroup()
   myIsBusy = true;
   ListEdit->clear();
 
-  TColStd_MapOfInteger anIndices;
+  SVTK_TVtkIDsMap anIndices;
   QList<QListWidgetItem*> selItems = ListCoincident->selectedItems();
   QListWidgetItem* anItem;
   QStringList aListIds;
@@ -908,7 +908,7 @@ void SMESHGUI_MergeDlg::onSelectElementFromGroup()
   if (myIsBusy || !myActor)
     return;
 
-  TColStd_MapOfInteger anIndices;
+  SVTK_TVtkIDsMap anIndices;
   QList<QListWidgetItem*> selItems = ListEdit->selectedItems();
   QListWidgetItem* anItem;
 
@@ -1595,7 +1595,7 @@ void SMESHGUI_MergeDlg::onSelectKeep()
     if ( myActor )
     {
       mySelectionMgr->clearSelected();
-      TColStd_MapOfInteger aIndexes;
+      SVTK_TVtkIDsMap aIndexes;
       QList<QListWidgetItem*> selItems = KeepList->selectedItems();
       QListWidgetItem* anItem;
       foreach(anItem, selItems) aIndexes.Add(anItem->text().toInt());
index 5cecfd2f63ff746c7417c1a9d8c933c1e2e9e46c..89c9275ae250ca03bb96aeeeb20ef147a5c7a6af 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -30,8 +30,9 @@
 // SMESH includes
 #include "SMESH_SMESHGUI.hxx"
 
-// Qt includes
+// GUI and Qt includes
 #include <QDialog>
+#include <SVTK_Hash.h>
 
 // OCCT includes
 #include <gp_XYZ.hxx>
@@ -88,7 +89,7 @@ private:
   bool                      isKeepIDsSelection();
   bool                      isNewKeepGroup( const char* entry );
 
-  void                      FindGravityCenter( TColStd_MapOfInteger&,
+  void                      FindGravityCenter( SVTK_TVtkIDsMap&,
                                                std::vector<int>& , 
                                                std::list<gp_XYZ>& );
   // add the centers of gravity of ElemsIdMap elements to the GrCentersXYZ list
index 8df6279d3c58f6f062d2f63ce9570ff109e65212..c9af382bfa0f8cb451d14e3ccbdd15c78c407103 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -891,6 +891,7 @@ void SMESHGUI_MeshDlg::setAvailableMeshType( const QStringList& theTypeMesh )
 {
   myMeshType->clear();
   myMeshType->addItems(theTypeMesh);
+  myMeshType->setEnabled( theTypeMesh.size() > 1 );
 }
 //================================================================================
 /*!
index 71c64864d0693573ec4ec6f6c1cf5b1d289c114d..4c91302bf9fd1ebdd50b843f154eae559d691d50 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 878819bf6165765e0f23e711e1a8c49a54ec0044..878714827705226d5150a6da86034a21b5cbe809 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -34,7 +34,7 @@
 // SALOME GUI includes
 #include <SVTK_Renderer.h>
 #include <SVTK_ViewWindow.h>
-#include <VTKViewer_CellLocationsArray.h>
+//#include <VTKViewer_CellLocationsArray.h>
 
 // VTK includes
 #include <vtkCellArray.h>
@@ -217,7 +217,7 @@ void SMESHGUI_MeshEditPreview::SetData (const SMESH::MeshPreviewStruct& previewD
   anIdList->Delete();
 
   // Insert cells in grid
-  VTKViewer_CellLocationsArray* aCellLocationsArray = VTKViewer_CellLocationsArray::New();
+  vtkIdTypeArray* aCellLocationsArray = vtkIdTypeArray::New();
   aCellLocationsArray->SetNumberOfComponents( 1 );
   aCellLocationsArray->SetNumberOfTuples( aNbCells );
 
index df56d23f1d728ce02f81ab0886314803f545700b..84c97a83dff8165cc10527da9942c99b0b663b89 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 66db3c27f787ad495f4d9a62071581c1c89ad4ab..24c610d783233a1976abede0dbb3a83fbff5d3af 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #include <QVBoxLayout>
 
 ////////////////////////////////////////////////////////////////////////////////
-/// \class Field
-/// \brief Field widget.
+/// \class FieldInfo
+/// \brief FieldInfo widget.
 /// \internal
 ////////////////////////////////////////////////////////////////////////////////
 
-class Field : public QLabel
+class FieldInfo : public QLabel
 {
 public:
-  Field( QWidget*, const QString& = QString() );
+  FieldInfo( QWidget*, const QString& = QString() );
   bool event( QEvent* );
 };
 
 /*!
   \brief Constructor.
   \param parent Parent widget.
-  \param name Field name. Defaults to null string.
+  \param name FieldInfo name. Defaults to null string.
 */
-Field::Field( QWidget* parent, const QString& name ): QLabel( parent )
+FieldInfo::FieldInfo( QWidget* parent, const QString& name ): QLabel( parent )
 {
   setFrameStyle( QLabel::StyledPanel | QLabel::Sunken );
   setAlignment( Qt::AlignCenter );
@@ -100,7 +100,7 @@ Field::Field( QWidget* parent, const QString& name ): QLabel( parent )
 /*!
   \brief Event handler. Redefined from QLabel.
 */
-bool Field::event( QEvent* e )
+bool FieldInfo::event( QEvent* e )
 {
   if ( e->type() == QEvent::DynamicPropertyChange )
   {
@@ -332,12 +332,12 @@ namespace
   /*!
     \brief Create information field.
     \param parent Parent widget.
-    \param name Field's object. Default to null string.
-    \return New field.
+    \param name FieldInfo's object. Default to null string.
+    \return New FieldInfo.
   */
   QLabel* createField( QWidget* parent, const QString& name = QString() )
   {
-    return new Field( parent, name );
+    return new FieldInfo( parent, name );
   }
 
   /*!
@@ -1674,6 +1674,8 @@ QString SMESHGUI_ElemInfo::ctrl2str( int control )
     title = tr( "ASPECTRATIO_3D_ELEMENTS" ); break;
   case SMESH::FT_Warping:
     title = tr( "WARP_ELEMENTS" ); break;
+  case SMESH::FT_Warping3D:
+    title = tr( "WARP_3D_ELEMENTS" ); break;
   case SMESH::FT_MinimumAngle:
     title = tr( "MINIMUMANGLE_ELEMENTS" ); break;
   case SMESH::FT_Taper:
@@ -1684,6 +1686,8 @@ QString SMESHGUI_ElemInfo::ctrl2str( int control )
     title = tr( "AREA_ELEMENTS" ); break;
   case SMESH::FT_Volume3D:
     title = tr( "VOLUME_3D_ELEMENTS" ); break;
+  case SMESH::FT_ScaledJacobian:
+    title = tr( "SCALED_JACOBIAN" ); break;  
   case SMESH::FT_MaxElementLength2D:
     title = tr( "MAX_ELEMENT_LENGTH_2D" ); break;
   case SMESH::FT_MaxElementLength3D:
@@ -3315,7 +3319,7 @@ void SMESHGUI_MeshInfoDlg::idChanged()
   myIDPreview->SetPointsLabeled( false );
 
   if ( myProxy ) {
-    TColStd_MapOfInteger ID;
+    SVTK_TVtkIDsMap      ID;
     QSet<uint>           ids;
     std::vector<int>     idVec;
     std::list< gp_XYZ >  aGrCentersXYZ;
@@ -3432,6 +3436,9 @@ SMESHGUI_CtrlInfo::SMESHGUI_CtrlInfo( QWidget* parent ): SMESHGUI_Info( parent )
   QIcon aComputeIcon( SUIT_Session::session()->resourceMgr()->loadPixmap( "SMESH", tr( "ICON_COMPUTE" ) ) );
   SMESH::FilterManager_var aFilterMgr = SMESH::GetFilterManager();
 
+  // QToolBox with MeshInfo
+  myMeshTB = new QToolBox(this);
+
   // name
   QLabel* aNameLab = createLabel( tr( "NAME_LAB" ), this, Bold );
   QLabel* aName = createField( this, "ctrlName" );
@@ -3546,51 +3553,84 @@ SMESHGUI_CtrlInfo::SMESHGUI_CtrlInfo( QWidget* parent ): SMESHGUI_Info( parent )
   connect( aDoubleVolumesBtn, SIGNAL( clicked() ), this, SLOT( computeDoubleVolumesInfo() ) );
   connect( aOverContVolumesBtn,SIGNAL( clicked() ), this, SLOT( computeOverConstrainedVolumesInfo() ) );
   connect( myToleranceWidget, SIGNAL( valueChanged( double ) ), this, SLOT( setTolerance( double ) ) );
+  this->setTolerance(myToleranceWidget->GetValue());
 
-  l->addWidget( aNameLab,           0, 0 );       //0
-  l->addWidget( aName,              0, 1, 1, 2 ); //1
-  l->addWidget( aNodesLab,          1, 0, 1, 3 ); //2
-  l->addWidget( aNodesFreeLab,      2, 0 );       //3
-  l->addWidget( aNodesFree,         2, 1 );       //4
-  l->addWidget( aFreeNodesBtn,      2, 2 );       //5
-  l->addWidget( aNodesNbConnLab,    3, 0 );       //6
-  l->addWidget( aNodesNbConn,       3, 1 );       //7
-  l->addWidget( aNodesNbConnBtn,    3, 2 );       //8
-  l->addWidget( aNodesDoubleLab,    4, 0 );       //9
-  l->addWidget( aNodesDouble,       4, 1 );       //10
-  l->addWidget( aDoubleNodesBtn,    4, 2 );       //11
-  l->addWidget( aToleranceLab,      5, 0 );       //12
-  l->addWidget( myToleranceWidget,  5, 1 );       //13
-  l->addWidget( anEdgesLab,         6, 0, 1, 3 ); //14
-  l->addWidget( anEdgesDoubleLab,   7, 0 );       //15
-  l->addWidget( anEdgesDouble,      7, 1 );       //16
-  l->addWidget( aDoubleEdgesBtn,    7, 2 );       //17
-  l->addWidget( aFacesLab,          8, 0, 1, 3 ); //18
-  l->addWidget( aFacesDoubleLab,    9, 0 );       //19
-  l->addWidget( aFacesDouble,       9, 1 );       //20
-  l->addWidget( aDoubleFacesBtn,    9, 2 );       //21
-  l->addWidget( aFacesOverLab,      10, 0 );      //22
-  l->addWidget( aFacesOver,         10, 1 );      //23
-  l->addWidget( aOverContFacesBtn,  10, 2 );      //24
-  l->addWidget( anAspectRatioLab,   11, 0 );      //25
-  l->addWidget( aComputeFaceBtn,    11, 2 );      //26
-  l->addWidget( myPlot,             12, 0, 1, 3 );//27
-  l->addWidget( aVolumesLab,        13, 0, 1, 3 );//28
-  l->addWidget( aVolumesDoubleLab,  14, 0 );      //29
-  l->addWidget( aVolumesDouble,     14, 1 );      //30
-  l->addWidget( aDoubleVolumesBtn,  14, 2 );      //31
-  l->addWidget( aVolumesOverLab,    15, 0 );      //32
-  l->addWidget( aVolumesOver,       15, 1 );      //33
-  l->addWidget( aOverContVolumesBtn,15, 2 );      //34
-  l->addWidget( anAspectRatio3DLab, 16, 0 );      //35
-  l->addWidget( aComputeVolumeBtn,  16, 2 );      //36
-  l->addWidget( myPlot3D,           17, 0, 1, 3 );//37
-  l->setColumnStretch(  0,  0 );
-  l->setColumnStretch(  1,  5 );
-  l->setRowStretch   ( 12,  5 );
-  l->setRowStretch   ( 17,  5 );
-  l->setRowStretch   ( 18,  1 );
+  l->addWidget( aNameLab,           0, 0 ); //0
+  l->addWidget( aName,              0, 1 ); //1
+  
+  // Node group
+  QWidget* NodeGrp = new QWidget();
+  QGridLayout* NodeLayout = new QGridLayout(NodeGrp);
+  NodeLayout->setSpacing(SPACING); NodeLayout->setMargin(MARGIN);
+
+  NodeLayout->addWidget( aNodesFreeLab,      0, 0 );
+  NodeLayout->addWidget( aNodesFree,         0, 1 );
+  NodeLayout->addWidget( aFreeNodesBtn,      0, 2 );
+  NodeLayout->addWidget( aNodesNbConnLab,    1, 0 );
+  NodeLayout->addWidget( aNodesNbConn,       1, 1 );
+  NodeLayout->addWidget( aNodesNbConnBtn,    1, 2 );
+  NodeLayout->addWidget( aNodesDoubleLab,    2, 0 );
+  NodeLayout->addWidget( aNodesDouble,       2, 1 );
+  NodeLayout->addWidget( aDoubleNodesBtn,    2, 2 );
+  NodeLayout->addWidget( aToleranceLab,      3, 0 );
+  NodeLayout->addWidget( myToleranceWidget,  3, 1 );
+  NodeLayout->addWidget( myToleranceWidget,  3, 1 );
+  NodeLayout->setRowStretch(4, 5);
+
+  myMeshTB->addItem(NodeGrp, aNodesLab->text());
+  aNodesLab->setVisible(false);
+
+  // Edge group
+  QWidget* EdgeGrp = new QWidget();
+  QGridLayout* EdgeLayout = new QGridLayout(EdgeGrp);
+  EdgeLayout->setSpacing(SPACING); EdgeLayout->setMargin(MARGIN);
+
+  EdgeLayout->addWidget( anEdgesDoubleLab,   0, 0 );
+  EdgeLayout->addWidget( anEdgesDouble,      0, 1 );
+  EdgeLayout->addWidget( aDoubleEdgesBtn,    0, 2 );
+  EdgeLayout->setRowStretch(1, 5);
+
+  myMeshTB->addItem(EdgeGrp, anEdgesLab->text());
+  anEdgesLab->setVisible(false);
+
+  // Face group
+  QWidget* FaceGrp = new QWidget();
+  QGridLayout* FaceLayout = new QGridLayout(FaceGrp);
+  FaceLayout->setSpacing(SPACING); FaceLayout->setMargin(MARGIN);
+
+  FaceLayout->addWidget( aFacesDoubleLab,    0, 0 );
+  FaceLayout->addWidget( aFacesDouble,       0, 1 );
+  FaceLayout->addWidget( aDoubleFacesBtn,    0, 2 );
+  FaceLayout->addWidget( aFacesOverLab,      1, 0 );
+  FaceLayout->addWidget( aFacesOver,         1, 1 );
+  FaceLayout->addWidget( aOverContFacesBtn,  1, 2 );
+  FaceLayout->addWidget( anAspectRatioLab,   2, 0 );
+  FaceLayout->addWidget( aComputeFaceBtn,    2, 2 );
+  FaceLayout->addWidget( myPlot,             3, 0, 1, 3 );
+
+  myMeshTB->addItem(FaceGrp, aFacesLab->text());
+  aFacesLab->setVisible(false);
+
+  // Volume group
+  QWidget* VolumeGrp = new QWidget();
+  QGridLayout* VolumeLayout = new QGridLayout(VolumeGrp);
+  VolumeLayout->setSpacing(SPACING); VolumeLayout->setMargin(MARGIN);
+
+  VolumeLayout->addWidget( aVolumesDoubleLab,  0, 0 );
+  VolumeLayout->addWidget( aVolumesDouble,     0, 1 );
+  VolumeLayout->addWidget( aDoubleVolumesBtn,  0, 2 );
+  VolumeLayout->addWidget( aVolumesOverLab,    1, 0 );
+  VolumeLayout->addWidget( aVolumesOver,       1, 1 );
+  VolumeLayout->addWidget( aOverContVolumesBtn,1, 2 );
+  VolumeLayout->addWidget( anAspectRatio3DLab, 2, 0 );
+  VolumeLayout->addWidget( aComputeVolumeBtn,  2, 2 );
+  VolumeLayout->addWidget( myPlot3D,           3, 0, 1, 3 );
+
+  myMeshTB->addItem(VolumeGrp, aVolumesLab->text());
+  aVolumesLab->setVisible(false);
+
+  l->addWidget( myMeshTB,                1, 0, 1, 2 ); //2
+  l->setRowStretch( 2,  5 );
 
   clearInternal();
 }
@@ -3646,14 +3686,14 @@ void SMESHGUI_CtrlInfo::showInfo( const SMESH::SelectionProxy& proxy )
     for ( int i = 0; i < myButtons.count(); ++i )
       myButtons[i]->setEnabled( true );
 
-  SMESH::long_array_var nbElemsByType = obj->GetNbElementsByType();
+  SMESH::smIdType_array_var nbElemsByType = obj->GetNbElementsByType();
   if ( ! &nbElemsByType.in() ) return;
 
   const CORBA::Long ctrlLimit =
     meshLoaded ? SMESHGUI::resourceMgr()->integerValue( "SMESH", "info_controls_limit", 3000 ) : -1;
 
   // nodes info
-  const CORBA::Long nbNodes =   nbElemsByType[ SMESH::NODE ];
+  const SMESH::smIdType nbNodes =  nbElemsByType[ SMESH::NODE ];
   // const CORBA::Long nbElems = ( nbElemsByType[ SMESH::EDGE ] +
   //                               nbElemsByType[ SMESH::FACE ] +
   //                               nbElemsByType[ SMESH::VOLUME ] );
@@ -3673,8 +3713,8 @@ void SMESHGUI_CtrlInfo::showInfo( const SMESH::SelectionProxy& proxy )
     }
   }
   else {
-    for( int i=2; i<=13; i++)
-      dynamic_cast<QGridLayout*>(layout())->itemAt(i)->widget()->setVisible( false );
+    myMeshTB->setItemEnabled(0, false );
+    myMeshTB->widget(0)->setVisible( false );
   }
 
   // edges info
@@ -3686,8 +3726,8 @@ void SMESHGUI_CtrlInfo::showInfo( const SMESH::SelectionProxy& proxy )
       myButtons[3]->setEnabled( true );
   }
   else {
-    for( int i=14; i<=17; i++)
-      dynamic_cast<QGridLayout*>(layout())->itemAt(i)->widget()->setVisible( false );
+    myMeshTB->setItemEnabled(1, false );
+    myMeshTB->widget(1)->setVisible( false );
   }
 
   // faces info
@@ -3705,14 +3745,10 @@ void SMESHGUI_CtrlInfo::showInfo( const SMESH::SelectionProxy& proxy )
       myButtons[5]->setEnabled( true );
       myButtons[6]->setEnabled( true );
     }
-#ifdef DISABLE_PLOT2DVIEWER
-    for( int i=25; i<=27; i++)
-      dynamic_cast<QGridLayout*>(layout())->itemAt(i)->widget()->setVisible( false );
-#endif
   }
   else {
-    for( int i=18; i<=27; i++)
-      dynamic_cast<QGridLayout*>(layout())->itemAt(i)->widget()->setVisible( false );
+    myMeshTB->setItemEnabled(2, false );
+    myMeshTB->widget(2)->setVisible( false );
   }
 
   // volumes info
@@ -3730,15 +3766,15 @@ void SMESHGUI_CtrlInfo::showInfo( const SMESH::SelectionProxy& proxy )
       myButtons[8]->setEnabled( true );
       myButtons[9]->setEnabled( true );
     }
-#ifdef DISABLE_PLOT2DVIEWER
-    for( int i=35; i<=37; i++)
-      dynamic_cast<QGridLayout*>(layout())->itemAt(i)->widget()->setVisible( false );
-#endif
   }
   else {
-    for( int i=28; i<=37; i++)
-      dynamic_cast<QGridLayout*>(layout())->itemAt(i)->widget()->setVisible( false );
+    myMeshTB->setItemEnabled(3, false );
+    myMeshTB->widget(3)->setVisible( false );
   }
+  myMeshTB->setCurrentIndex(0);
+  myMeshTB->setVisible( (nbNodes + nbElemsByType[ SMESH::EDGE ] + 
+                                   nbElemsByType[ SMESH::FACE ] + 
+                                   nbElemsByType[ SMESH::VOLUME ]) > 0 );
 }
 
 //================================================================================
@@ -3892,8 +3928,10 @@ void SMESHGUI_CtrlInfo::computeAspectRatio3D()
 */
 void SMESHGUI_CtrlInfo::clearInternal()
 {
-  for( int i=0; i<=37; i++)
-    dynamic_cast<QGridLayout*>(layout())->itemAt(i)->widget()->setVisible( true );
+  for (int i=0; i<=3;i++) {
+    myMeshTB->setItemEnabled(i, true );
+    myMeshTB->widget(i)->setVisible( true );
+  }
   for( int i=0; i<=9; i++)
     myButtons[i]->setEnabled( false );
   myPlot->detachItems();
index 1358a65ed7b9d00d14fb5a1863fa472728e4f1ce..d595c1c94dd465e2bd4c40cda76930902e1adace 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -36,6 +36,7 @@
 #include <QList>
 #include <QMap>
 #include <QSet>
+#include <QToolBox>
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Filter)
@@ -345,6 +346,7 @@ private:
   ObjectType myObjectType;
   SMESHGUI_SpinBox* myToleranceWidget;
   QList<QLabel*> myWidgets;
+  QToolBox* myMeshTB;
   QwtPlot* myPlot;
   QwtPlot* myPlot3D;
   QList<QAbstractButton*> myButtons;
index 72daba57a21e82ef99bc073b12dce3008e69cd0f..bd0e0dbe6991c6e029706fd828e7ff3d266d4962 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -418,7 +418,7 @@ SMESHGUI_MeshInfosBox::SMESHGUI_MeshInfosBox(const bool full, QWidget* theParent
  */
 // =========================================================================================
 
-void SMESHGUI_MeshInfosBox::SetMeshInfo(const SMESH::long_array& theInfo)
+void SMESHGUI_MeshInfosBox::SetMeshInfo(const SMESH::smIdType_array& theInfo)
 {
   // nodes
   myNbNode       ->setText( QString("%1").arg( theInfo[SMDSEntity_Node] ));
index 83200135904ef60efce9f37b5f2b5a31760d082c..6aa85788fce011bd04c888447d9b6f9ce91da66f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -46,7 +46,7 @@ class SMESHGUI_EXPORT SMESHGUI_MeshInfosBox : public QGroupBox
 public:
   SMESHGUI_MeshInfosBox( const bool, QWidget* );
 
-  void    SetMeshInfo( const SMESH::long_array& theInfo );
+  void    SetMeshInfo( const SMESH::smIdType_array& theInfo );
 
 private:
   bool    myFull;
index 10366f210c28e569e26ad3d491c402323a552968..50132b41eee3cc0ea8f78e9816099d0e92af0036 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #include "SMESH_NumberFilter.hxx"
 #include "SMESH_TypeDefs.hxx"
 #include "SMESH_TypeFilter.hxx"
+#include "SMESH_Gen_i.hxx"
 
 #include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
 
 // SALOME GEOM includes
 #include <GEOMBase.h>
 #include <GEOMImpl_Types.hxx>
+#include <GEOM_Client.hxx>
 #include <GEOM_SelectionFilter.h>
 #include <GEOM_wrap.hxx>
 #include <GeometryGUI.h>
@@ -123,6 +125,57 @@ LightApp_Dialog* SMESHGUI_MeshOp::dlg() const
   return myDlg;
 }
 
+//================================================================================
+/*!
+ * \brief Log meshers info
+*/
+//================================================================================
+void SMESHGUI_MeshOp::logSmeshParams()
+{
+  QString mesherType;
+  int curMeshType = myDlg->currentMeshType();
+  switch ( curMeshType ) {
+  case MT_ANY:
+    mesherType = "Any";
+    break;
+  case MT_TRIANGULAR:
+    mesherType = "Triangular";
+    break;
+  case MT_QUADRILATERAL:
+    mesherType = "Quadrilateral";
+    break;
+  case MT_TETRAHEDRAL:
+    mesherType = "Tetrahedral";
+    break;
+  case MT_HEXAHEDRAL:
+    mesherType = "Hexahedral";
+    break;
+  default:
+    mesherType = "";
+  }
+
+  QString aMessage = QString("Mesh type is %1").arg(mesherType);
+  CAM_Application::logStructuredUserEvent( "Mesh",
+                                           "create mesh",
+                                           "",
+                                           "",
+                                           aMessage);
+
+  for ( int dim = 0; dim <= 3; ++dim )
+  {
+    HypothesisData * curAlgo = hypData( dim, Algo, currentHyp( dim, Algo ));
+    if(curAlgo)
+    {
+      aMessage = QString("%1D algorithm is %2").arg(dim).arg(curAlgo->Label);
+      CAM_Application::logStructuredUserEvent( "Mesh",
+                                           "create mesh",
+                                           "",
+                                           "",
+                                           aMessage);
+    }
+  }
+}
+
 //================================================================================
 /*!
  * \brief Creates or edits mesh
@@ -156,7 +209,7 @@ bool SMESHGUI_MeshOp::onApply()
     if (( myToCreate && !myIsMesh ) || myIsInvalidSubMesh )
       aResult = createSubMesh( aMess, anEntryList );
     else if ( !myToCreate )
-      aResult = editMeshOrSubMesh( aMess );
+      aResult = editMeshOrSubMesh( aMess, anEntryList );
     if ( aResult )
     {
       SMESHGUI::Modified();
@@ -180,6 +233,7 @@ bool SMESHGUI_MeshOp::onApply()
   {
     if ( myToCreate )
       setDefaultName();
+    //connect(aAction, SIGNAL(triggered(bool)), this, SLOT(logSmeshParams()));
   }
   else
   {
@@ -188,6 +242,7 @@ bool SMESHGUI_MeshOp::onApply()
     SUIT_MessageBox::warning( myDlg, tr( "SMESH_ERROR" ), aMess );
   }
 
+  logSmeshParams();
   myHypoSet = 0;
 
   return aResult;
@@ -321,7 +376,7 @@ SUIT_SelectionFilter* SMESHGUI_MeshOp::createFilter( const int theId ) const
 //================================================================================
 /*!
  * \brief check if selected shape is a sub-shape of the shape to mesh
 * \retval bool - check result
 \retval bool - check result
  */
 //================================================================================
 bool SMESHGUI_MeshOp::isSubshapeOk() const
@@ -345,61 +400,17 @@ bool SMESHGUI_MeshOp::isSubshapeOk() const
   QStringList aGEOMs;
   myDlg->selectedObject(SMESHGUI_MeshDlg::Geom, aGEOMs);
 
-  if (aGEOMs.count() > 0) {
-    GEOM::GEOM_Gen_var geomGen = mainGeom->GetGen();
-    if (geomGen->_is_nil()) return false;
-
-    GEOM::GEOM_IGroupOperations_wrap op = geomGen->GetIGroupOperations();
-    if (op->_is_nil()) return false;
-
-    // check all selected shapes
-    QStringList::const_iterator aSubShapesIter = aGEOMs.begin();
-    for ( ; aSubShapesIter != aGEOMs.end(); aSubShapesIter++) {
-      QString aSubGeomEntry = (*aSubShapesIter);
-      _PTR(SObject) pSubGeom = SMESH::getStudy()->FindObjectID(aSubGeomEntry.toUtf8().data());
-      if (!pSubGeom) return false;
-
-      GEOM::GEOM_Object_var aSubGeomVar =
-        GEOM::GEOM_Object::_narrow(_CAST(SObject,pSubGeom)->GetObject());
-      if (aSubGeomVar->_is_nil()) return false;
-
-      // skl for NPAL14695 - implementation of searching of mainObj
-      GEOM::GEOM_Object_var mainObj = op->GetMainShape(aSubGeomVar); /* _var not _wrap as
-                                                                        mainObj already exists! */
-      while( !mainObj->_is_nil()) {
-        CORBA::String_var entry1 = mainObj->GetEntry();
-        CORBA::String_var entry2 = mainGeom->GetEntry();
-        if (std::string( entry1.in() ) == entry2.in() )
-          return true;
-        mainObj = op->GetMainShape(mainObj);
-      }
-      if ( aSubGeomVar->GetShapeType() == GEOM::COMPOUND )
-      {
-        // is aSubGeomVar a compound of sub-shapes?
-        GEOM::GEOM_IShapesOperations_wrap sop = geomGen->GetIShapesOperations();
-        if (sop->_is_nil()) return false;
-        GEOM::ListOfLong_var ids = sop->GetAllSubShapesIDs( aSubGeomVar,
-                                                            GEOM::SHAPE,/*sorted=*/false);
-        if ( ids->length() > 0 )
-        {
-          ids->length( 1 );
-          GEOM::GEOM_Object_var compSub = geomGen->AddSubShape( aSubGeomVar, ids );
-          if ( !compSub->_is_nil() )
-          {
-            GEOM::ListOfGO_var shared = sop->GetSharedShapes( mainGeom,
-                                                              compSub,
-                                                              compSub->GetShapeType() );
-            geomGen->RemoveObject( compSub );
-            compSub->UnRegister();
-            if ( shared->length() > 0 ) {
-              geomGen->RemoveObject( shared[0] );
-              shared[0]->UnRegister();
-            }
-            return ( shared->length() > 0 );
-          }
-        }
-      }
-    }
+  // check all selected shapes
+  for ( QString& aSubGeomEntry : aGEOMs )
+  {
+    _PTR(SObject) pSubGeom = SMESH::getStudy()->FindObjectID( aSubGeomEntry.toUtf8().data() );
+    if ( !pSubGeom ) return false;
+
+    GEOM::GEOM_Object_var subGeom =
+      GEOM::GEOM_Object::_narrow(_CAST(SObject,pSubGeom)->GetObject());
+
+    if ( SMESH::ContainsSubShape( mainGeom, subGeom, false ))
+      return true;
   }
 
   return false;
@@ -1334,6 +1345,7 @@ void SMESHGUI_MeshOp::createHypothesis(const int      theDim,
       initHypCreator( aCreator );
 
       myDlg->setEnabled( false );
+      myDlg->hide();
       aCreator->create(initParamHyp, aHypName, myDlg, this, SLOT( onHypoCreated( int ) ) );
       dialog = true;
     }
@@ -1365,6 +1377,7 @@ void SMESHGUI_MeshOp::onHypoCreated( int result )
     int obj = myDlg->getActiveObject();
     onActivateObject( obj ); // Issue 0020170. Restore filters
     myDlg->setEnabled( true );
+    myDlg->show();
   }
 
   _PTR(SComponent) aFather = SMESH::getStudy()->FindComponent("SMESH");
@@ -1421,6 +1434,7 @@ void SMESHGUI_MeshOp::onEditHyp( const int theHypType, const int theIndex )
 
     removeCustomFilters(); // Issue 0020170
     myDlg->setEnabled( false );
+    myDlg->hide();
 
     aCreator->edit( aHyp.in(), aHypItem.second, dlg(), this, SLOT( onHypoEdited( int ) ) );
   }
@@ -1439,6 +1453,7 @@ void SMESHGUI_MeshOp::onHypoEdited( int /*result*/ )
   int obj = myDlg->getActiveObject();
   onActivateObject( obj ); // Issue 0020170. Restore filters
   myDlg->setEnabled( true );
+  myDlg->show();
 }
 
 //================================================================================
@@ -2081,7 +2096,10 @@ bool SMESHGUI_MeshOp::createMesh( QString& theMess, QStringList& theEntryList )
           elemType = SMESH::NODE;
 
         CORBA::String_var name = geomGroups[ iG ]->GetName();
-        meshGroup = aMesh->CreateGroupFromGEOM( elemType, name, geomGroups[ iG ]);
+
+        SALOMEDS::SObject_wrap groupSO = SMESH_Gen_i::GetSMESHGen()->ObjectToSObject( geomGroups[iG] );
+        if (!groupSO->_is_nil())
+          meshGroup = aMesh->CreateGroupFromGEOM( elemType, name, geomGroups[ iG ]);
         // if ( elemType != SMESH::NODE )
         //   meshGroup = aMesh->CreateGroupFromGEOM( SMESH::NODE, name, geomGroups[ iG ]);
       }
@@ -2616,13 +2634,14 @@ int SMESHGUI_MeshOp::find( const SMESH::SMESH_Hypothesis_var& theHyp,
 //================================================================================
 /*!
  * \brief Edits mesh or sub-mesh
-  * \param theMess - Output parameter intended for returning error message
-  * \retval bool  - TRUE if mesh is edited successfully, FALSE otherwise
+  * \param theMess      - Output parameter intended for returning error message
+ *  \param theEntryList - List of entries of published objects
+  * \retval bool        - TRUE if mesh is edited successfully, FALSE otherwise
  *
  * Assigns new name hypotheses and algorithms to the mesh or sub-mesh
  */
 //================================================================================
-bool SMESHGUI_MeshOp::editMeshOrSubMesh( QString& theMess )
+bool SMESHGUI_MeshOp::editMeshOrSubMesh( QString& theMess, QStringList& theEntryList)
 {
   theMess = "";
 
@@ -2667,6 +2686,12 @@ bool SMESHGUI_MeshOp::editMeshOrSubMesh( QString& theMess )
   if ( !isMesh && !aSubMeshVar->_is_nil() )
     aMesh = aSubMeshVar->GetFather();
 
+  _PTR(SObject) aMeshSO = SMESH::FindSObject(aMesh.in());
+  if (aMeshSO) {
+    if (aSubMeshVar->_is_nil()) SMESH::SetName(aMeshSO, myDlg->objectText(SMESHGUI_MeshDlg::Obj));
+    theEntryList.append(aMeshSO->GetID().c_str());
+  }
+
   // Assign new algorithms and hypotheses
   for ( int dim = aDim; dim <= SMESH::DIM_3D; dim++ )
   {
index e9b79ffb29a9c4c09af6313f326cefe7a869469e..de6803a4064b17fbd311d1837cde2fbe5b904544 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -120,7 +120,7 @@ private:
 
   bool                           createMesh( QString&, QStringList& );
   bool                           createSubMesh( QString&, QStringList& );
-  bool                           editMeshOrSubMesh( QString& );
+  bool                           editMeshOrSubMesh( QString&, QStringList& );
   void                           createSubMeshOnInternalEdges( SMESH::SMESH_Mesh_ptr mesh,
                                                                GEOM::GEOM_Object_ptr mainShape );
   bool                           checkSubMeshConcurrency( SMESH::SMESH_Mesh_ptr    mesh,
@@ -151,6 +151,7 @@ private:
   void                           updateHypoSets();
   void                           setFilteredAlgoData();
   QStringList                    getHypoNames();
+  void                           logSmeshParams();
 
 private:
 
index f026975227e9f7b616763373c2803b2bc6fc9b6a..1a134c329a1044933846672914ce7c1cb72715b4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index a85e439a144c8e912a7c7115436f4a471b8d568a..f0e0363b197c3ecbdda1ec6f30ccda7d122dd610 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 4f459d435d7624e7b45ea44dc7f02962dde9488b..80236be4e7307b7b2edc41f0caf6ca3a4bc81dc4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 9280b868612d44468be90421494aea81c8240eca..7a71fc022836e9c02cb0475db3e195f1aeefed64 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index aabcb60207ff97a6f50a855990b8d5e5cfddb1d7..3b01cde7b4bd5b82de6b40f1ea7a46acdbba07eb 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -58,7 +58,7 @@
 
 #include <SVTK_ViewModel.h>
 #include <SVTK_ViewWindow.h>
-#include <VTKViewer_CellLocationsArray.h>
+//#include <VTKViewer_CellLocationsArray.h>
 
 // SALOME KERNEL includes 
 #include <SALOMEDS_SObject.hxx>
@@ -479,9 +479,9 @@ bool SMESHGUI_MeshPatternDlg::onApply()
       }
       QList<int> ids;
       getIds(ids);
-      SMESH::long_array_var varIds = new SMESH::long_array();
+      SMESH::smIdType_array_var varIds = new SMESH::smIdType_array();
       varIds->length(ids.count());
-      int i = 0;
+      CORBA::ULong i = 0;
       for (QList<int>::iterator it = ids.begin(); it != ids.end(); ++it)
         varIds[i++] = *it;
       myType == Type_2d
@@ -1258,9 +1258,9 @@ vtkUnstructuredGrid* SMESHGUI_MeshPatternDlg::getGrid()
     SMESH::point_array_var pnts;
     QList<int> ids;
     if (isRefine() && getIds(ids)) {
-      SMESH::long_array_var varIds = new SMESH::long_array();
+      SMESH::smIdType_array_var varIds = new SMESH::smIdType_array();
       varIds->length(ids.count());
-      int i = 0;
+      CORBA::ULong i = 0;
       for (QList<int>::iterator it = ids.begin(); it != ids.end(); ++it)
         varIds[i++] = *it;
       pnts = myType == Type_2d
@@ -1339,7 +1339,7 @@ vtkUnstructuredGrid* SMESHGUI_MeshPatternDlg::getGrid()
       else aCellTypesArray->InsertNextValue(VTK_EMPTY_CELL);
     }
 
-    VTKViewer_CellLocationsArray* aCellLocationsArray = VTKViewer_CellLocationsArray::New();
+    vtkIdTypeArray* aCellLocationsArray = vtkIdTypeArray::New();
     aCellLocationsArray->SetNumberOfComponents(1);
     aCellLocationsArray->SetNumberOfTuples(aNbCells);
 
@@ -1411,7 +1411,7 @@ void SMESHGUI_MeshPatternDlg::onTextChanged (const QString& theNewText)
   if (aMesh) {
     QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts);
 
-    TColStd_MapOfInteger newIndices;
+    SVTK_TVtkIDsMap newIndices;
 
     for (int i = 0; i < aListId.count(); i++) {
       const SMDS_MeshElement * e = aMesh->FindElement(aListId[ i ].toInt());
index 3212cfdb18da09725be2e74a8468d890084de40e..60526f2ad144a205496c4e0244beb63824115786 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 1a354f29e7e2be805c6743b58ee973d7914ed05f..3fd79a72e6cb9c01fbae965239c8effaacb5c8ce 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index f80a7f7ec68a681166a62f10521d81fc5a8a6eca..8293393e00eff725f9bf1fa92de59f9bda902d94 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
diff --git a/src/SMESHGUI/SMESHGUI_MgAdaptDlg.cxx b/src/SMESHGUI/SMESHGUI_MgAdaptDlg.cxx
new file mode 100644 (file)
index 0000000..72a6c71
--- /dev/null
@@ -0,0 +1,1338 @@
+// Copyright (C) 2020-2024  CEA, EDF
+//
+// 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 "SMESHGUI_MgAdaptDlg.h"
+
+#include "MED_Factory.hxx"
+
+#include <SalomeApp_Tools.h>
+#include <SalomeApp_Module.h>
+#include <SUIT_MessageBox.h>
+#include <SUIT_OverrideCursor.h>
+#include <SUIT_FileDlg.h>
+
+#include <QApplication>
+#include <QButtonGroup>
+#include <QCheckBox>
+#include <QComboBox>
+#include <QDoubleSpinBox>
+#include <QFileDialog>
+#include <QGridLayout>
+#include <QGroupBox>
+#include <QHBoxLayout>
+#include <QHeaderView>
+#include <QItemDelegate>
+#include <QKeyEvent>
+#include <QLabel>
+#include <QLineEdit>
+#include <QMessageBox>
+#include <QPushButton>
+#include <QRadioButton>
+#include <QSpacerItem>
+#include <QSpinBox>
+#include <QString>
+#include <QTabWidget>
+#include <QTreeWidget>
+#include <QTreeWidgetItem>
+#include <QVBoxLayout>
+
+const int SPACING = 6;            // layout spacing
+const int MARGIN  = 9;            // layout margin
+
+namespace
+{
+
+  // ======================================================
+  QString lireNomDimMaillage(QString aFile, int& meshdim)
+  // ========================================================
+  {
+    QString nomMaillage = QString::null ;
+
+    try {
+      while ( true )
+      {
+
+        MED::PWrapper aMed = MED::CrWrapperR( aFile.toUtf8().data() );
+        MED::TInt numberOfMeshes = aMed->GetNbMeshes();
+
+        if (numberOfMeshes == 0 )
+        {
+          QMessageBox::critical( 0, QObject::tr("MG_ADAPT_ERROR"),
+                                 QObject::tr("MG_ADAPT_MED_FILE_2") );
+          break ;
+        }
+        if (numberOfMeshes > 1 )
+        {
+          QMessageBox::critical( 0, QObject::tr("MG_ADAPT_ERROR"),
+                                 QObject::tr("MG_ADAPT_MED_FILE_3") );
+          break ;
+        }
+
+        MED::PMeshInfo aMeshInfo = aMed->GetPMeshInfo( 1 );
+        nomMaillage = aMeshInfo->GetName().c_str();
+        meshdim = (int) aMeshInfo->GetDim();
+
+        break ;
+      }
+    }
+    catch ( const SALOME::SALOME_Exception & S_ex )
+    {
+      SalomeApp_Tools::QtCatchCorbaException(S_ex);
+    }
+
+    return nomMaillage;
+  }
+
+  // =======================================================================
+  std::map<QString, int> GetListeChamps(QString aFile, bool errorMessage=true)
+  // =======================================================================
+  {
+    // Il faut voir si plusieurs maillages
+
+    std::map<QString, int> ListeChamp ;
+
+    try
+    {
+      while ( true )
+      {
+        MED::PWrapper aMed = MED::CrWrapperR( aFile.toUtf8().data() );
+        MED::TInt jaux = aMed->GetNbFields();
+        if (jaux < 1 )
+        {
+          if(errorMessage)
+          {
+            QMessageBox::critical( 0, QObject::tr("_ERROR"),
+                                   QObject::tr("HOM_MED_FILE_5") );
+          }
+          break ;
+        }
+        // nbofcstp inutile pour le moment
+        MED::PMeshInfo aMeshInfo = aMed->GetPMeshInfo( 1 );
+        int nbofcstp = 1;
+        for( MED::TInt j=0;j<jaux;j++)
+        {
+          MED::PFieldInfo aFiledInfo = aMed->GetPFieldInfo( aMeshInfo, j + 1 );
+          ListeChamp.insert({ QString( aFiledInfo->GetName().c_str()), nbofcstp });
+        }
+        break ;
+      }
+    }
+    catch ( const SALOME::SALOME_Exception & S_ex )
+    {
+      SalomeApp_Tools::QtCatchCorbaException(S_ex);
+    }
+
+    return ListeChamp;
+  }
+
+  // =======================================================================
+  std::string remove_extension(const std::string& filename)
+  // =======================================================================
+  {
+    size_t lastdot = filename.find_last_of(".");
+    if (lastdot == std::string::npos) return filename;
+    return filename.substr(0, lastdot);
+  }
+}
+
+//=================================================================================
+// function : SMESHGUI_MgAdaptDlg()
+// purpose  :
+//=================================================================================
+SMESHGUI_MgAdaptDlg::SMESHGUI_MgAdaptDlg( SalomeApp_Module* theModule, SMESH::MG_ADAPT_ptr myModel, QWidget* parent, bool isCreation )
+  : QDialog(parent), mySMESHGUI( theModule )
+{
+  //~model = new MgAdapt(*myModel);
+  model = SMESH::MG_ADAPT::_duplicate(myModel);
+  model->Register();
+  myData = model->getData();
+  buildDlg();
+  if (!isCreation) readParamsFromHypo();
+}
+
+void SMESHGUI_MgAdaptDlg::buildDlg()
+{
+  setModal( false );
+  setAttribute( Qt::WA_DeleteOnClose, true );
+  setWindowTitle( tr( "ADAPT_PREF_MG_ADAPT" ) );
+  setSizeGripEnabled( true );
+
+  myTabWidget = new QTabWidget( this );
+
+  // Arguments
+
+  myArgs = new SMESHGUI_MgAdaptArguments( myTabWidget );
+  SMESH::string_array_var str = model->getOptionValuesStrVec();
+  SMESH::string_array_var str2 = model->getCustomOptionValuesStrVec();
+  std::vector<std::string> s;
+  for (CORBA::ULong i = 0; i< str->length(); i++) s.push_back( str[i].in());
+  for (CORBA::ULong j = str->length(); j< str2->length(); j++) s.push_back(str[ j - str->length() ].in() );
+  //~str.insert( str.end(), str2.begin(), str2.end() );
+
+  myAdvOpt = new MgAdaptAdvWidget(myTabWidget, &s);
+
+  /*int argsTab =*/ myTabWidget->addTab( myArgs, tr( "Args" ) );
+  /*int advTab  =*/ myTabWidget->addTab( myAdvOpt, tr( "ADVOP" ) );
+
+  myAdvOpt->workingDirectoryLabel         ->setText (tr( "WORKING_DIR" ));
+  myAdvOpt->workingDirectoryPushButton    ->setText (tr( "SELECT_DIR" ));
+  myAdvOpt->keepWorkingFilesCheck         ->setText (tr( "KEEP_WORKING_FILES" ));
+  myAdvOpt->verboseLevelLabel             ->setText (tr( "VERBOSE_LEVEL" ));
+  myAdvOpt->removeLogOnSuccessCheck       ->setText (tr( "REMOVE_LOG_ON_SUCCESS" ));
+  myAdvOpt->logInFileCheck                ->setText (tr( "LOG_IN_FILE" ));
+  myAdvOpt->logGroupBox                   ->setTitle(tr( "LOG_GROUP_TITLE" ));
+
+  // buttons
+  QPushButton* buttonOk = new QPushButton(tr("SMESH_BUT_APPLY_AND_CLOSE"), this);
+  buttonOk->setAutoDefault(false);
+  QPushButton* buttonApply = new QPushButton(tr("SMESH_BUT_APPLY"), this);
+  buttonApply->setAutoDefault(false);
+  QPushButton* buttonCancel = new QPushButton( tr( "SMESH_BUT_CANCEL" ), this );
+  buttonCancel->setAutoDefault( false );
+  QPushButton* buttonHelp = new QPushButton( tr( "SMESH_BUT_HELP" ), this );
+  buttonHelp->setAutoDefault( false );
+
+  QHBoxLayout* btnLayout = new QHBoxLayout;
+  btnLayout->setSpacing( SPACING );
+  btnLayout->setMargin( 0 );
+  btnLayout->addWidget( buttonOk );
+  btnLayout->addStretch( 10 );
+  btnLayout->addWidget( buttonApply );
+  btnLayout->addStretch( 10 );
+  btnLayout->addWidget( buttonCancel );
+  btnLayout->addStretch( 10 );
+  btnLayout->addWidget( buttonHelp );
+
+  QVBoxLayout* l = new QVBoxLayout ( this );
+  l->setMargin( MARGIN );
+  l->setSpacing( SPACING );
+  l->addWidget( myTabWidget );
+  l->addStretch();
+  l->addLayout( btnLayout );
+
+  connect( buttonOk,       SIGNAL(pressed()), this, SLOT(PushOnOK()));
+  connect( buttonApply,    SIGNAL(pressed()), this, SLOT(PushOnApply()));
+  connect( buttonCancel,   SIGNAL(pressed()), this, SLOT(close()));
+  connect( buttonHelp,     SIGNAL(pressed()), this, SLOT(PushOnHelp()));
+
+  connect( myArgs, SIGNAL(meshDimSignal(ADAPTATION_MODE)), myAdvOpt, SLOT( onMeshDimChanged(ADAPTATION_MODE))  );
+}
+
+
+//=================================================================================
+// function : ~SMESHGUI_MgAdaptDlg()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+SMESHGUI_MgAdaptDlg::~SMESHGUI_MgAdaptDlg()
+{
+    //~delete model;
+}
+
+//~void SMESHGUI_MgAdaptDlg::setModel(MgAdapt* mg)
+//~{
+    //~model = mg;
+//~}
+SMESH::MG_ADAPT_ptr SMESHGUI_MgAdaptDlg::getModel() const
+{
+  return model;
+}
+/*!
+\brief Perform clean-up actions on the dialog box closing.
+*/
+bool SMESHGUI_MgAdaptDlg::PushOnApply()
+{
+  bool ret = readParamsFromWidgets();
+  return ret;
+}
+void SMESHGUI_MgAdaptDlg::PushOnOK()
+{
+  bool ret = PushOnApply();
+  if ( ret ) reject();
+}
+void SMESHGUI_MgAdaptDlg::reject()
+{
+  QDialog::reject();
+}
+bool SMESHGUI_MgAdaptDlg::readParamsFromHypo( ) const
+{
+  bool ret = true;
+  myArgs->aMedfile->setChecked(myData->fromMedFile) ;
+  if (myData->fromMedFile)
+  {
+
+    myArgs->myFileInDir = myData->myFileInDir;
+    myArgs->selectMedFileLineEdit->setText(QString(myData->myMeshFileIn)) ;
+    // myData->myInMeshName = // TODO
+
+  }
+  else
+  {
+    myArgs->aBrowserObject->setText(QString(myData->myInMeshName));
+    //~ myArgs->myFileInDir =""; // TODO
+    //~ myArgs->selectMedFileLineEdit->setText(); // TODO
+  }
+  myArgs->meshNameLineEdit->setText(QString(myData->myOutMeshName));
+  myArgs->medFileCheckBox->setChecked(myData->myMeshOutMed);
+
+  if(myData->myMeshOutMed)
+  {
+    myArgs->myFileOutDir = QString(myData->myFileOutDir);
+    myArgs->selectOutMedFileLineEdit->setText(myData->myMeshFileOut.in());
+  }
+  else
+  {
+    myArgs->myFileOutDir = ""; //TODO
+  }
+
+  myArgs->publishOut->setChecked(myData->myPublish);
+
+  myArgs->localButton->setChecked(myData->myUseLocalMap);
+  myArgs->backgroundButton->setChecked(myData->myUseBackgroundMap);
+  myArgs->constantButton->setChecked(myData->myUseConstantValue);
+
+  if (myData->myUseConstantValue)
+  {
+    myArgs->dvalue->setValue(myData->myConstantValue);
+  }
+  else
+  {
+    myArgs->dvalue->setValue(0.0);
+  }
+
+  if (myData->myUseBackgroundMap)
+  {
+
+    myArgs->myFileSizeMapDir = QString(myData->myFileSizeMapDir) ;
+    myArgs->selectMedFileBackgroundLineEdit->setText(QString(myData->myMeshFileBackground));
+  }
+  else
+  {
+    myArgs->myFileSizeMapDir = "";  //TODO
+    myArgs->selectMedFileBackgroundLineEdit->setText(""); //TODO
+  }
+
+  myArgs->fieldNameCmb->setCurrentText(QString(myData->myFieldName));
+  myArgs->noTimeStep->setChecked(myData->myUseNoTimeStep);
+  myArgs->lastTimeStep->setChecked( myData->myUseLastTimeStep);
+  myArgs->chosenTimeStep->setChecked(myData->myUseChosenTimeStep);
+  if (myData->myUseChosenTimeStep)
+  {
+    myArgs->rankSpinBox->setValue(myData->myRank);
+    myArgs->timeStep->setValue(myData->myTimeStep);
+  }
+
+  myAdvOpt->workingDirectoryLineEdit->setText(QString(myData->myWorkingDir));
+  myAdvOpt->logInFileCheck->setChecked(myData->myPrintLogInFile);
+
+  myAdvOpt->verboseLevelSpin->setValue(myData->myVerboseLevel);
+  myAdvOpt->removeLogOnSuccessCheck->setChecked(myData->myRemoveLogOnSuccess);
+  myAdvOpt->keepWorkingFilesCheck->setChecked(myData->myKeepFiles);
+
+  return ret;
+
+}
+
+bool SMESHGUI_MgAdaptDlg::readParamsFromWidgets()
+{
+  bool ret = true ;
+  SMESH::MgAdaptHypothesisData data, *aData = &data;
+  while ( ret )
+  {
+    // 1. Fichier du maillage de départ
+    aData->fromMedFile = myArgs->aMedfile->isChecked();
+    if (aData->fromMedFile)
+    {
+      aData->myFileInDir = CORBA::string_dup(myArgs->myFileInDir.toUtf8().data());
+      aData->myMeshFileIn = CORBA::string_dup(myArgs->selectMedFileLineEdit->text().toUtf8().data());
+        // aData->myInMeshName = // TODO
+    }
+    else // TODO browser
+    {
+      QMessageBox::critical( 0, QObject::tr("MG_ADAPT_ERROR"),
+                                QObject::tr("MG_ADAPT_MED_FILE_4") );
+      ret = false ;
+      break ;
+  //     aData->myInMeshName = CORBA::string_dup(myArgs->aBrowserObject->text().toStdString().c_str());
+  //     aData->myFileInDir = CORBA::string_dup(myAdvOpt->workingDirectoryLineEdit->text().toStdString().c_str());
+  //
+  //     TCollection_AsciiString aGenericName = (char*)aData->myFileInDir;
+  //     TCollection_AsciiString aGenericName2 = "MgAdapt_";
+  //     aGenericName2 += getpid();
+  //     aGenericName2 += "_";
+  //     aGenericName2 += Abs((Standard_Integer)(long) aGenericName.ToCString());
+  //     aGenericName2 += ".med";
+  //     aGenericName+=aGenericName2;
+  //     emit myArgs->toExportMED(aGenericName.ToCString());
+  //     aData->myMeshFileIn = aGenericName2.ToCString();
+    }
+    // 2. Fichier du maillage de sortie
+    aData->myOutMeshName = CORBA::string_dup(myArgs->meshNameLineEdit->text().toStdString().c_str());
+    aData->myMeshOutMed = myArgs->medFileCheckBox->isChecked();
+    if(aData->myMeshOutMed)
+    {
+      aData->myFileOutDir = CORBA::string_dup(myArgs->myFileOutDir.toUtf8().data());
+      aData->myMeshFileOut = CORBA::string_dup(myArgs->selectOutMedFileLineEdit->text().toUtf8().data());
+    }
+    else
+    {
+      aData->myMeshFileOut = "";
+    }
+    aData->myPublish = myArgs->publishOut->isChecked();
+
+    // 3. Type de carte de tailles
+    aData->myUseLocalMap = myArgs->localButton->isChecked();
+    aData->myUseBackgroundMap = myArgs->backgroundButton->isChecked();
+    aData->myUseConstantValue = myArgs->constantButton->isChecked();
+    // 3.1. Constante
+    if (aData->myUseConstantValue)
+    {
+      aData->myConstantValue = myArgs->dvalue->value();
+    }
+    else
+    {
+      aData->myConstantValue = 0.0;
+    }
+    // 3.2. Arrière-plan
+    if (aData->myUseBackgroundMap)
+    {
+      aData->myFileSizeMapDir = CORBA::string_dup(myArgs->myFileSizeMapDir.toUtf8().data());
+      aData->myMeshFileBackground = CORBA::string_dup(myArgs->selectMedFileBackgroundLineEdit->text().toUtf8().data());
+    }
+    else
+    {
+      aData->myMeshFileBackground = "";
+    }
+
+  // 4. Le champ
+    if ( ! aData->myUseConstantValue )
+    {
+      if ( strlen(myArgs->fieldNameCmb->currentText().toStdString().c_str()) == 0 )
+      {
+        QMessageBox::critical( 0, QObject::tr("MG_ADAPT_ERROR"),
+                                  QObject::tr("MG_ADAPT_MED_FILE_5") );
+        ret = false ;
+        break ;
+      }
+      {
+        aData->myFieldName = CORBA::string_dup(myArgs->fieldNameCmb->currentText().toStdString().c_str());
+        aData->myUseNoTimeStep = myArgs->noTimeStep->isChecked();
+        aData->myUseLastTimeStep = myArgs->lastTimeStep->isChecked();
+        aData->myUseChosenTimeStep = myArgs->chosenTimeStep->isChecked();
+        if (aData->myUseChosenTimeStep)
+        {
+          aData->myRank = myArgs->rankSpinBox->value();
+          aData->myTimeStep = myArgs->timeStep->value();
+        }
+      }
+    }
+
+    // 5. Options avancées
+    aData->myWorkingDir = CORBA::string_dup(myAdvOpt->workingDirectoryLineEdit->text().toStdString().c_str());
+    aData->myPrintLogInFile = myAdvOpt->logInFileCheck->isChecked();
+    aData->myVerboseLevel = myAdvOpt->verboseLevelSpin->value();
+    aData->myRemoveLogOnSuccess = myAdvOpt->removeLogOnSuccessCheck->isChecked();
+    aData->myKeepFiles = myAdvOpt->keepWorkingFilesCheck->isChecked();
+    model->setData(*aData);
+
+    QString msg;
+    checkParams(msg);
+    break ;
+  }
+
+  return ret;
+}
+bool SMESHGUI_MgAdaptDlg::storeParamsToHypo( const SMESH::MgAdaptHypothesisData& ) const
+{
+  return true;
+}
+/*!
+  \brief Show help page
+*/
+void SMESHGUI_MgAdaptDlg::PushOnHelp()
+{
+//   QString aHelpFile;
+  // if ( myTabWidget->currentIndex() == MinDistance ) {
+  //   aHelpFile = "measurements.html#min-distance-anchor";
+  // } else if ( myTabWidget->currentIndex() == BoundingBox ) {
+  //   aHelpFile = "measurements.html#bounding-box-anchor";
+  // } else if ( myTabWidget->currentWidget() == myAngle ) {
+  //   aHelpFile = "measurements.html#angle-anchor";
+  // } else {
+  //   aHelpFile = "measurements.html#basic-properties-anchor";
+  // }
+
+//   SMESH::ShowHelpFile( aHelpFile );
+}
+bool SMESHGUI_MgAdaptDlg::checkParams(QString& msg)
+{
+  if ( !QFileInfo( myAdvOpt->workingDirectoryLineEdit->text().trimmed() ).isWritable() )
+  {
+    SUIT_MessageBox::warning( this,
+                              tr( "SMESH_WRN_WARNING" ),
+                              tr( "NO_PERMISSION" ) );
+    return false;
+  }
+
+
+  myAdvOpt->myOptionTable->setFocus();
+  QApplication::instance()->processEvents();
+
+  QString name, value;
+  bool isDefault, ok = true;
+  int iRow = 0, nbRows = myAdvOpt->myOptionTable->topLevelItemCount();
+  for ( ; iRow < nbRows; ++iRow )
+  {
+    QTreeWidgetItem* row = myAdvOpt->myOptionTable->topLevelItem( iRow );
+    myAdvOpt->GetOptionAndValue( row, name, value, isDefault );
+
+    if ( name.simplified().isEmpty() )
+        continue; // invalid custom option
+
+    if ( isDefault ) // not selected option
+        value.clear();
+
+    try
+    {
+      model->setOptionValue( name.toLatin1().constData(), value.toLatin1().constData() );
+    }
+    catch ( const SALOME::SALOME_Exception& ex )
+    {
+      msg = ex.details.text.in();
+      ok = false;
+      break;
+    }
+  }
+
+  return ok;
+}
+
+//=================================================================================
+// function : SMESHGUI_MgAdaptArguments()
+// purpose  :
+//=================================================================================
+SMESHGUI_MgAdaptArguments::SMESHGUI_MgAdaptArguments( QWidget* parent )
+  :QWidget(parent)
+{
+
+  if ( SUIT_FileDlg::getLastVisitedPath().isEmpty() )
+  {
+    myFileInDir = QDir::currentPath();
+    myFileOutDir = QDir::currentPath();
+    myFileSizeMapDir = QDir::currentPath();
+  }
+  else
+  {
+    myFileInDir = SUIT_FileDlg::getLastVisitedPath();
+    myFileOutDir = SUIT_FileDlg::getLastVisitedPath();
+    myFileSizeMapDir = SUIT_FileDlg::getLastVisitedPath();
+  }
+
+  meshDim = 0;
+  meshDimBG = 0;
+  // Mesh in
+  aMeshIn = new QGroupBox( tr( "MeshIn" ), this );
+  aMedfile       = new QRadioButton( tr( "MEDFile" ),    aMeshIn );
+  aBrowser       = new QRadioButton( tr( "Browser" ), aMeshIn );
+  aBrowserObject = new QLineEdit(  aMeshIn );
+  selectMedFilebutton = new QPushButton("...", aMeshIn);
+  selectMedFileLineEdit = new QLineEdit(  aMeshIn );
+
+  meshIn = new QGridLayout( aMeshIn );
+
+  meshIn->setMargin( MARGIN );
+  meshIn->setSpacing( SPACING );
+  meshIn->addWidget( aMedfile,     0, 0, 1,1 );
+  meshIn->addWidget( aBrowser,     0, 1,1,1);
+  meshIn->addWidget( aBrowserObject,     0, 2, 1, 1 );
+  meshIn->addWidget( selectMedFilebutton,  1, 0,1, 1);
+  meshIn->addWidget( selectMedFileLineEdit,  1, 1, 1, 1 );
+  hspacer = new QSpacerItem(188, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+
+  meshInGroup = new QButtonGroup( this );
+  meshInGroup->addButton( aMedfile,   0 );
+  meshInGroup->addButton( aBrowser,   1 );
+
+  //Mesh out
+
+  aMeshOut = new QGroupBox( tr( "MeshOut" ), this );
+  meshName = new QLabel(tr("MeshName"), aMeshOut);
+  secondHspacer = new QSpacerItem(100, 30);
+  meshNameLineEdit = new QLineEdit(aMeshOut) ;
+  medFileCheckBox = new QCheckBox(tr("MEDFile"), aMeshOut);
+  selectOutMedFilebutton = new QPushButton("...", aMeshOut);
+  thirdHspacer = new QSpacerItem(188, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+  selectOutMedFileLineEdit = new QLineEdit(aMeshOut) ;
+  publishOut = new  QCheckBox(tr("Publish_MG_ADAPT"), aMeshOut);
+
+  meshOut = new QGridLayout( aMeshOut );
+
+  meshOut->setMargin( MARGIN );
+  meshOut->setSpacing( SPACING );
+  meshOut->addWidget( meshName,  0, 0, 1,1 );
+  meshOut->addItem( secondHspacer,  0, 1, 1, 1 );
+  meshOut->addWidget( meshNameLineEdit, 0, 2,1,1);
+  meshOut->addWidget( medFileCheckBox,  1, 0,1,1 );
+  meshOut->addWidget( selectOutMedFilebutton,  1, 1,1,1 );
+  meshOut->addWidget( selectOutMedFileLineEdit,  1, 2,1,1);
+  meshOut->addWidget( publishOut,  2, 0,1,1 );
+
+  //size map definition
+
+  sizeMapDefinition  = new QGroupBox(tr("SIZE_MAP_DEF"), this);
+  localButton = new QRadioButton(tr("LOCAL_MG_ADAPT"), sizeMapDefinition);
+  backgroundButton = new QRadioButton(tr("BACKGRND_MG_ADAPT"), sizeMapDefinition);
+  constantButton = new QRadioButton(tr("CNST_MG_ADAPT"), sizeMapDefinition);
+  medFileBackground = new QLabel(tr("MED_FILE_BCKG"), sizeMapDefinition);
+  selectMedFileBackgroundbutton = new QPushButton("...", sizeMapDefinition);
+  selectMedFileBackgroundLineEdit = new QLineEdit(sizeMapDefinition);
+  valueLabel = new QLabel(tr("VALUE_MG_ADAPT"), sizeMapDefinition);
+  dvalue = new QDoubleSpinBox(sizeMapDefinition);
+  sizeMapDefGroup = new QButtonGroup( this );
+  sizeMapDefGroup->addButton( localButton,   0 );
+  sizeMapDefGroup->addButton( backgroundButton,   1 );
+  sizeMapDefGroup->addButton( constantButton,   2 );
+
+  sizeMapDefGroupLayout = new QGridLayout(sizeMapDefinition);
+  sizeMapDefGroupLayout->addWidget(localButton, 0,0);
+  sizeMapDefGroupLayout->addWidget(backgroundButton, 0,1);
+  sizeMapDefGroupLayout->addWidget(constantButton, 0,2);
+  sizeMapDefGroupLayout->addWidget(medFileBackground, 1,0);
+  sizeMapDefGroupLayout->addWidget(selectMedFileBackgroundbutton, 1,1);
+  sizeMapDefGroupLayout->addWidget(selectMedFileBackgroundLineEdit, 1,2);
+  sizeMapDefGroupLayout->addWidget(valueLabel, 2,0);
+  sizeMapDefGroupLayout->addWidget(dvalue, 2,1);
+
+  // size Map field
+  sizeMapField = new QGroupBox(tr("SIZE_MAP_FIELD"), this);
+  fieldName = new QLabel(tr("MG_ADAPT_FIELD_NAME"), sizeMapField);
+  fieldNameCmb = new QComboBox(sizeMapField);
+  noTimeStep = new QRadioButton(tr("MG_ADAPT_NO_T_ST"), sizeMapField);
+  lastTimeStep = new QRadioButton(tr("MG_ADAPT_L_ST"), sizeMapField);
+  chosenTimeStep = new QRadioButton(tr("MG_ADAPT_CH_ST"), sizeMapField);
+  timeStepLabel = new QLabel(tr("MG_ADAPT_TSTP"), sizeMapField);
+  timeStep = new QSpinBox(sizeMapField);
+  timeStep->setMinimum(-1);
+  rankLabel = new QLabel(tr("MG_ADAPT_RANK"), sizeMapField);
+  rankSpinBox = new QSpinBox(sizeMapField);
+  rankSpinBox->setMinimum(-1);
+
+  timeStepGroup = new QButtonGroup(this);
+  timeStepGroup->addButton(noTimeStep, 0);
+  timeStepGroup->addButton(lastTimeStep, 1);
+  timeStepGroup->addButton(chosenTimeStep, 2);
+
+  sizeMapFieldGroupLayout = new QGridLayout(sizeMapField);
+
+  sizeMapFieldGroupLayout->addWidget(fieldName, 0,0);
+  sizeMapFieldGroupLayout->addWidget(fieldNameCmb, 0,1);
+  sizeMapFieldGroupLayout->addWidget(noTimeStep, 1,0);
+  sizeMapFieldGroupLayout->addWidget(lastTimeStep, 1,1);
+  sizeMapFieldGroupLayout->addWidget(chosenTimeStep, 1,2);
+  sizeMapFieldGroupLayout->addWidget(timeStepLabel, 2,0);
+  sizeMapFieldGroupLayout->addWidget(timeStep, 2,1);
+  sizeMapFieldGroupLayout->addWidget(rankLabel, 2,2);
+  sizeMapFieldGroupLayout->addWidget(rankSpinBox, 2,3);
+
+  QGridLayout* argumentsLayout = new QGridLayout( this );
+  argumentsLayout->setMargin( MARGIN );
+  argumentsLayout->setSpacing( SPACING );
+
+  argumentsLayout->addWidget( aMeshIn,  0, 0, 1, 3 );
+  argumentsLayout->addWidget( aMeshOut, 1, 0, 1, 3 );
+  argumentsLayout->addWidget( sizeMapDefinition, 2, 0, 1, 3 );
+  argumentsLayout->addWidget( sizeMapField, 3, 0, 1, 3 );
+  argumentsLayout->setColumnStretch( 1, 5 );
+  argumentsLayout->setRowStretch( 4, 5 );
+
+  // Initial state
+  setMode( Mesh, Local);
+  medFileCheckBox->setChecked(true);
+  visibleTimeStepRankLabel (false);
+
+  // Connections
+  connect( meshInGroup,            SIGNAL( buttonClicked( int ) ),  this, SLOT( modeChanged( int ) ) );
+  connect( sizeMapDefGroup,        SIGNAL( buttonClicked( int ) ),  this, SLOT( sizeMapDefChanged( int ) ) );
+  connect( selectMedFilebutton,    SIGNAL( pressed(  ) ),           this, SLOT( onSelectMedFilebuttonClicked(  ) ) );
+  connect( medFileCheckBox,        SIGNAL (stateChanged(int)),      this, SLOT(onMedFileCheckBox(int) ) );
+  connect( publishOut,             SIGNAL (stateChanged(int)),      this, SLOT(onPublishOut(int) ) );
+  connect( selectOutMedFilebutton, SIGNAL( pressed()),              this, SLOT(onSelectOutMedFilebutton()));
+  connect( selectMedFileBackgroundbutton, SIGNAL(pressed()),        this, SLOT(onSelectMedFileBackgroundbutton()) );
+  connect( timeStepGroup,          SIGNAL( buttonClicked( int ) ),  this, SLOT( timeStepGroupChanged( int ) ) );
+  emit updateSelection();
+}
+
+//=================================================================================
+// function : ~SMESHGUI_MgAdaptArguments()
+// purpose  : Destroys the object and frees any allocated resources
+//=================================================================================
+SMESHGUI_MgAdaptArguments::~SMESHGUI_MgAdaptArguments()
+{
+}
+
+void SMESHGUI_MgAdaptArguments::onNoTimeStep(bool disableOther)
+{
+  noTimeStep->setChecked(true);
+
+  visibleTimeStepRankLabel (false);
+  rankSpinBox->setValue(-2);
+  timeStep->setValue(-2);
+
+  lastTimeStep->setDisabled(disableOther);
+  chosenTimeStep->setDisabled(disableOther);
+}
+void SMESHGUI_MgAdaptArguments::onLastTimeStep(bool disableOther)
+{
+  lastTimeStep->setChecked(true);
+
+  visibleTimeStepRankLabel (false);
+  rankSpinBox->setValue(-1);
+  timeStep->setValue(-1);
+  noTimeStep->setDisabled(disableOther);
+}
+void SMESHGUI_MgAdaptArguments::onChosenTimeStep(bool /*disableOther*/, int vmax)
+{
+  chosenTimeStep->setChecked(true);
+
+  visibleTimeStepRankLabel (true);
+  rankSpinBox->setValue(-1);
+  timeStep->setValue(-1);
+  if (vmax) timeStep->setMaximum(vmax);
+}
+
+void SMESHGUI_MgAdaptArguments::visibleTimeStepRankLabel(bool visible)
+{
+  rankLabel->setVisible(visible);
+  rankSpinBox->setVisible(visible);
+
+  timeStepLabel->setVisible(visible);
+  timeStep->setVisible(visible);
+}
+
+void SMESHGUI_MgAdaptArguments::onSelectOutMedFilebutton()
+{
+
+  QString filtre = QString("Med") ;
+  filtre += QString(" files (*.") + QString("med") + QString(");;");
+  QString fileName = QFileDialog::getSaveFileName(this, tr("SAVE_MED"), QString(""), filtre);
+  QFileInfo myFileInfo(fileName);
+  selectOutMedFileLineEdit->setText(myFileInfo.fileName());
+  myFileOutDir = myFileInfo.path();
+
+}
+void SMESHGUI_MgAdaptArguments::onSelectMedFileBackgroundbutton()
+{
+  QString fileName0 = selectMedFileBackgroundbutton->text().trimmed();
+
+  QString fileName = getMedFileName(false);
+  if (fileName != QString::null)
+  {
+    myFieldList = GetListeChamps(fileName);
+    if (myFieldList.empty())
+    {
+      fileName = fileName0;
+      fieldNameCmb->clear();
+    }
+    else
+    {
+      // fill field name Combobox
+      fieldNameCmb->clear();
+      std::map<QString, int>::const_iterator it;
+      for ( it=myFieldList.begin() ; it != myFieldList.end(); it++)
+      {
+        fieldNameCmb->insertItem(0,QString(it->first));
+        int typeStepInField = it->second > 2 ?  2 : it->second ;
+        timeStepGroupChanged(typeStepInField, false);
+      }
+      // Dimension du maillage de fonds
+      lireNomDimMaillage( fileName, meshDimBG );
+      valueAdaptation ();
+    }
+  }
+  else
+  {
+    fileName = fileName0;
+    fieldNameCmb->clear();
+  }
+
+  QFileInfo myFileInfo(fileName);
+  myFileSizeMapDir = myFileInfo.path();
+  selectMedFileBackgroundLineEdit->setText(myFileInfo.fileName());
+
+}
+void SMESHGUI_MgAdaptArguments::onMedFileCheckBox(int state)
+{
+  if (state == Qt::Checked)
+  {
+    selectOutMedFilebutton->show();
+    selectOutMedFileLineEdit->show();
+    selectOutMedFilebutton->setEnabled(true);
+    selectOutMedFileLineEdit->setEnabled(true);
+  }
+  else
+  {
+    selectOutMedFilebutton->setEnabled(false);
+    selectOutMedFileLineEdit->setEnabled(false);
+    publishOut->setChecked(true);
+  }
+}
+void SMESHGUI_MgAdaptArguments::onPublishOut(int state)
+{
+  if (state == Qt::Unchecked)
+  {
+    medFileCheckBox->setChecked(true);
+  }
+}
+
+void SMESHGUI_MgAdaptArguments::onSelectMedFilebuttonClicked()
+{
+  // bool keep = false;
+  QString fileName0 = selectMedFileLineEdit->text().trimmed();
+
+  QString fileName = getMedFileName(false);
+  if(fileName != QString::null)
+  {
+    QString aMeshName = lireNomDimMaillage(fileName.trimmed(), meshDim);
+    if (aMeshName.isEmpty() )
+    {
+      QMessageBox::critical( 0, QObject::tr("MG_ADAPT_ERROR"),
+                                QObject::tr("MG_ADAPT_MED_FILE_2") );
+      fileName = fileName0;
+    }
+    else
+    {
+      meshNameLineEdit->setText(aMeshName);
+      valueAdaptation ();
+//       ADAPTATION_MODE aMode = meshDim == 3 ? ADAPTATION_MODE::BOTH : ADAPTATION_MODE::SURFACE; // and when dimesh 3 without 2D mesh?
+//       emit meshDimSignal(aMode);
+    }
+  }
+  else
+  {
+      return;
+  }
+
+  QFileInfo myFileInfo(fileName);
+  myFileInDir = myFileInfo.path();
+  myFileOutDir = myFileInfo.path();
+  selectMedFileLineEdit->setText(myFileInfo.fileName());
+  QString outF = fileName == QString::null ? myFileInfo.fileName() :
+  QString( remove_extension(myFileInfo.fileName().toStdString() ).c_str() )+ QString(".adapt.med");
+  selectOutMedFileLineEdit->setText(outF);
+  onLocalSelected(myFileInfo.filePath());
+
+}
+
+void SMESHGUI_MgAdaptArguments::valueAdaptation()
+{
+  ADAPTATION_MODE aMode ;
+  if ( meshDimBG < 3 )
+  {
+    aMode = meshDim == 3 ? ADAPTATION_MODE::BOTH : ADAPTATION_MODE::SURFACE;
+  }
+  else
+  {
+    aMode = ADAPTATION_MODE::BOTH;
+  }
+  emit meshDimSignal(aMode);
+}
+
+void SMESHGUI_MgAdaptArguments::onLocalSelected(QString filePath)
+{
+  myFieldList = GetListeChamps(filePath, false);
+  if (myFieldList.empty())
+  {
+    if (localButton->isChecked())
+    {
+      fieldNameCmb->clear();
+    }
+  }
+  else
+  {
+    // fill field name Combobox
+    fieldNameCmb->clear();
+    std::map<QString, int>::const_iterator it;
+    for ( it = myFieldList.begin() ; it != myFieldList.end(); it++)
+    {
+      fieldNameCmb->insertItem(0,QString(it->first));
+      // Je ne comprends pas le rapport entre pas de temps et apparition d'un nouveau champ... GN
+      int typeStepInField = it->second > 2 ?  2 : it->second ;
+//             std::cout << "SMESHGUI_MgAdaptArguments::onLocalSelected typeStepInField : " << typeStepInField << std::endl;
+      timeStepGroupChanged(typeStepInField, false);
+    }
+  }
+}
+// =======================================================================
+// Gestion les boutons qui permettent  de
+// 1) retourne le nom d'un fichier par une fenetre de dialogue si aucun
+//    objet est selectionne dans l arbre d etude
+// 2) retourne le nom du fichier asocie a l objet
+//    selectionne dans l arbre d etude
+// =======================================================================
+QString SMESHGUI_MgAdaptArguments::getMedFileName(bool /*avertir*/)
+{
+
+  QString aFile = QString::null;
+  QString filtre = QString("Med") ;
+  filtre += QString(" files (*.") + QString("med") + QString(");;");
+  aFile = SUIT_FileDlg::getOpenFileName(0, QObject::tr("MG_ADAPT_SELECT_FILE_0"), QString(""), filtre );
+
+  return aFile;
+
+}
+void SMESHGUI_MgAdaptArguments::setMode(const Mode theMode, const SIZEMAP theSizeMap )
+{
+  QRadioButton* aButton = qobject_cast<QRadioButton*>( meshInGroup->button( theMode ) );
+  QRadioButton* bButton = qobject_cast<QRadioButton*>( sizeMapDefGroup->button( theSizeMap ) );
+  if ( aButton )
+  {
+    aButton->setChecked( true );
+    modeChanged( theMode );
+  }
+  if ( bButton )
+  {
+    bButton->setChecked( true );
+    sizeMapDefChanged( theSizeMap );
+  }
+}
+
+void SMESHGUI_MgAdaptArguments::modeChanged( int theMode )
+{
+  clear();
+  if(theMode == Mesh)
+  {
+    aBrowserObject->hide();
+    selectMedFileLineEdit->show();
+    selectMedFilebutton->show();
+    localButton->setEnabled(true);
+  }
+  else
+  {
+    selectMedFileLineEdit->hide();
+    selectMedFilebutton->hide();
+    localButton->setEnabled(false);
+    aBrowserObject->show();
+    sizeMapDefChanged(Background);
+    emit updateSelection();
+  }
+}
+
+void SMESHGUI_MgAdaptArguments::sizeMapDefChanged( int  theSizeMap )
+{
+  fieldNameCmb->clear();
+  if(theSizeMap == Local)
+  {
+    localButton->setEnabled(true);
+    localButton->setChecked(true);
+    medFileBackground->hide();
+    selectMedFileBackgroundbutton->hide();
+    selectMedFileBackgroundLineEdit->hide();
+    selectMedFileBackgroundLineEdit->clear();
+    valueLabel->hide();
+    dvalue->hide();
+
+    sizeMapField->setEnabled(true);
+    if (!selectMedFileLineEdit->text().isEmpty())
+    {
+      QFileInfo myFileInfo(QDir(myFileInDir), selectMedFileLineEdit->text());
+      onLocalSelected(myFileInfo.filePath());
+    }
+  }
+  else if (theSizeMap == Background)
+  {
+    medFileBackground->show();
+    backgroundButton->setChecked(true);
+    selectMedFileBackgroundbutton->show();
+    selectMedFileBackgroundLineEdit->show();
+    valueLabel->hide();
+    dvalue->hide();
+    sizeMapField->setEnabled(true);
+  }
+  else
+  {
+    medFileBackground->hide();
+    constantButton->setChecked(true);
+    selectMedFileBackgroundbutton->hide();
+    selectMedFileBackgroundLineEdit->clear();
+    selectMedFileBackgroundLineEdit->hide();
+    valueLabel->show();
+    dvalue->show();
+    sizeMapField->setEnabled(false);
+  }
+  meshDimBG = 0;
+  valueAdaptation();
+}
+void SMESHGUI_MgAdaptArguments::timeStepGroupChanged(int timeStepType, bool disableOther, int vmax)
+{
+  switch (timeStepType)
+  {
+  case 0 :
+    onNoTimeStep(disableOther);
+    break;
+  case 1 :
+    onLastTimeStep(disableOther);
+    break;
+  case 2 :
+    onChosenTimeStep(disableOther, vmax);
+  default:
+    break;
+  }
+}
+
+void SMESHGUI_MgAdaptArguments::clear()
+{
+  selectMedFileLineEdit->clear();
+  aBrowserObject->clear();
+
+  meshNameLineEdit->clear();
+  selectOutMedFileLineEdit->clear();
+}
+// med_int SMESHGUI_MgAdaptArguments::getMeshDim() const
+// {
+//   return meshDim;
+// }
+QWidget* ItemDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &o, const QModelIndex &index) const
+{
+  bool editable = index.data( EDITABLE_ROLE ).toInt();
+  return editable ? QItemDelegate::createEditor( parent, o, index ) : 0;
+}
+
+//////////////////////////////////////////
+// MgAdaptAdvWidget
+//////////////////////////////////////////
+
+MgAdaptAdvWidget::MgAdaptAdvWidget( QWidget* parent, std::vector <std::string>* options, Qt::WindowFlags f )
+  : QWidget( parent, f ), myOptions(options)
+{
+  setupWidget();
+  myOptionTable->header()->setSectionResizeMode( QHeaderView::ResizeToContents );
+  myOptionTable->setItemDelegate( new ItemDelegate( myOptionTable ) );
+
+  for ( size_t i = 0, nb = myOptions->size(); i < nb; ++i )
+  {
+    AddOption( (*myOptions)[i].c_str() );
+  }
+
+  connect( myOptionTable, SIGNAL( itemChanged(QTreeWidgetItem *, int)), SLOT( itemChanged(QTreeWidgetItem *, int )));
+  connect( addBtn,        SIGNAL(clicked()),       this, SLOT( onAddOption() ) );
+  connect(workingDirectoryPushButton, SIGNAL(pressed()),  this, SLOT(_onWorkingDirectoryPushButton()));
+}
+
+MgAdaptAdvWidget::~MgAdaptAdvWidget()
+{
+}
+
+void MgAdaptAdvWidget::AddOption( const char* option, bool isCustom )
+{
+  QString name, value;
+  bool isDefault = false;
+  if ( option )
+  {
+    QStringList name_value_type = QString(option).split( ":", QString::KeepEmptyParts );
+    if ( name_value_type.size() > 0 )
+        name = name_value_type[0];
+    if ( name_value_type.size() > 1 )
+        value = name_value_type[1];
+    if ( name_value_type.size() > 2 )
+        isDefault = !name_value_type[2].toInt();
+  }
+  QTreeWidget* table = myOptionTable;
+  //table->setExpanded( true );
+
+  QTreeWidgetItem* row;
+  if (optionTreeWidgetItem.size())
+  {
+    std::map<QString, QTreeWidgetItem *>::iterator it = optionTreeWidgetItem.find(name);
+    if(it != optionTreeWidgetItem.end()) return; // option exist
+    else
+    {
+      row = getNewQTreeWidgetItem(table, option, name, isCustom);
+    }
+  }
+  else
+  {
+    row = getNewQTreeWidgetItem(table, option, name, isCustom);
+  }
+  row->setText( 0, tr( name.toLatin1().constData() ));
+  row->setText( 1, tr( value.toLatin1().constData() ));
+  row->setCheckState( 0, isDefault ? Qt::Unchecked : Qt::Checked);
+  row->setData( NAME_COL, PARAM_NAME, name );
+
+  if ( isCustom )
+  {
+    myOptionTable->scrollToItem( row );
+    myOptionTable->setCurrentItem( row );
+    myOptionTable->editItem( row, NAME_COL );
+  }
+}
+
+QTreeWidgetItem* MgAdaptAdvWidget::getNewQTreeWidgetItem(QTreeWidget* table, const char* option, QString& name, bool isCustom)
+{
+  QTreeWidgetItem* row = new QTreeWidgetItem( table );
+  row->setData( NAME_COL, EDITABLE_ROLE, int( isCustom && !option ));
+  row->setFlags( row->flags() | Qt::ItemIsEditable );
+  optionTreeWidgetItem.insert(std::pair <QString, QTreeWidgetItem*> (name, row));
+
+  return row;
+}
+
+void MgAdaptAdvWidget::onAddOption()
+{
+  AddOption( NULL, true );
+}
+void MgAdaptAdvWidget::GetOptionAndValue( QTreeWidgetItem * tblRow,
+        QString&          option,
+        QString&          value,
+        bool&             isDefault)
+{
+  option    = tblRow->data( NAME_COL, PARAM_NAME ).toString();
+  value     = tblRow->text( VALUE_COL );
+  isDefault = ! tblRow->checkState( NAME_COL );
+
+}
+
+void MgAdaptAdvWidget::itemChanged(QTreeWidgetItem* tblRow, int column)
+{
+  if ( tblRow )
+  {
+    myOptionTable->blockSignals( true );
+
+    tblRow->setData( VALUE_COL, EDITABLE_ROLE, int( tblRow->checkState( NAME_COL )));
+
+    int c = tblRow->checkState( NAME_COL ) ? 0 : 150;
+    tblRow->setForeground( VALUE_COL, QBrush( QColor( c, c, c )));
+
+    if ( column == NAME_COL && tblRow->data( NAME_COL, EDITABLE_ROLE ).toInt() ) // custom table
+    {
+      tblRow->setData( NAME_COL, PARAM_NAME, tblRow->text( NAME_COL ));
+    }
+
+    myOptionTable->blockSignals( false );
+  }
+}
+void MgAdaptAdvWidget::setupWidget()
+{
+  if (this->objectName().isEmpty())
+      this->setObjectName(QString(tr("MG-ADAPT-ADV")));
+  this->resize(337, 369);
+  gridLayout_4 = new QGridLayout(this);
+  gridLayout_4->setObjectName(QString("gridLayout_4"));
+  myOptionTable = new MgAdaptAdvWidgetTreeWidget(this);
+  QFont font;
+  font.setBold(false);
+  font.setWeight(50);
+  QTreeWidgetItem *__qtreewidgetitem = new QTreeWidgetItem();
+  __qtreewidgetitem->setFont(1, font);
+  __qtreewidgetitem->setFont(0, font);
+  __qtreewidgetitem->setText(1, tr("OPTION_VALUE_COLUMN"));
+  __qtreewidgetitem->setText(0, tr("OPTION_NAME_COLUMN"));
+  myOptionTable->setHeaderItem(__qtreewidgetitem);
+  myOptionTable->setObjectName(QString("myOptionTable"));
+  myOptionTable->setEditTriggers(QAbstractItemView::DoubleClicked|QAbstractItemView::EditKeyPressed);
+  myOptionTable->setTabKeyNavigation(true);
+
+  gridLayout_4->addWidget(myOptionTable, 0, 0, 1, 2);
+
+  addBtn = new QPushButton(this);
+  addBtn->setText(QApplication::translate("SMESH_AdvOptionsWdg", "ADD_OPTION_BTN", Q_NULLPTR));
+  addBtn->setObjectName(QString("addBtn"));
+
+  gridLayout_4->addWidget(addBtn, 1, 0, 1, 1);
+
+  horizontalSpacer = new QSpacerItem(188, 20, QSizePolicy::Expanding, QSizePolicy::Minimum);
+
+  gridLayout_4->addItem(horizontalSpacer, 1, 1, 1, 1);
+
+  logGroupBox = new QGroupBox(this);
+  logGroupBox->setObjectName(QString("logGroupBox"));
+  gridLayout_2 = new QGridLayout(logGroupBox);
+  gridLayout_2->setObjectName(QString("gridLayout_2"));
+  gridLayout = new QGridLayout();
+  gridLayout->setObjectName(QString("gridLayout"));
+  workingDirectoryLabel = new QLabel(logGroupBox);
+  workingDirectoryLabel->setObjectName(QString("workingDirectoryLabel"));
+
+  gridLayout->addWidget(workingDirectoryLabel, 0, 0, 1, 1);
+
+  workingDirectoryLineEdit = new QLineEdit(logGroupBox);
+  workingDirectoryLineEdit->setObjectName(QString("workingDirectoryLineEdit"));
+
+  gridLayout->addWidget(workingDirectoryLineEdit, 0, 1, 1, 1);
+
+  workingDirectoryPushButton = new QPushButton(logGroupBox);
+  workingDirectoryPushButton->setObjectName(QString("workingDirectoryPushButton"));
+
+  gridLayout->addWidget(workingDirectoryPushButton, 0, 2, 1, 1);
+
+  verboseLevelLabel = new QLabel(logGroupBox);
+  verboseLevelLabel->setObjectName(QString("verboseLevelLabel"));
+
+  gridLayout->addWidget(verboseLevelLabel, 1, 0, 1, 1);
+
+  verboseLevelSpin = new QSpinBox(logGroupBox);
+  verboseLevelSpin->setObjectName(QString("verboseLevelSpin"));
+
+  gridLayout->addWidget(verboseLevelSpin, 1, 1, 1, 1);
+
+
+  gridLayout_2->addLayout(gridLayout, 0, 0, 1, 1);
+
+  horizontalLayout = new QHBoxLayout();
+  horizontalLayout->setObjectName(QString("horizontalLayout"));
+  logInFileCheck = new QCheckBox(logGroupBox);
+  logInFileCheck->setObjectName(QString("logInFileCheck"));
+  logInFileCheck->setChecked(true);
+
+  horizontalLayout->addWidget(logInFileCheck);
+
+  removeLogOnSuccessCheck = new QCheckBox(logGroupBox);
+  removeLogOnSuccessCheck->setObjectName(QString("removeLogOnSuccessCheck"));
+  removeLogOnSuccessCheck->setChecked(true);
+
+  horizontalLayout->addWidget(removeLogOnSuccessCheck);
+
+
+  gridLayout_2->addLayout(horizontalLayout, 1, 0, 1, 1);
+
+  keepWorkingFilesCheck = new QCheckBox(logGroupBox);
+  keepWorkingFilesCheck->setObjectName(QString("keepWorkingFilesCheck"));
+  keepWorkingFilesCheck->setAutoExclusive(false);
+
+  gridLayout_2->addWidget(keepWorkingFilesCheck, 2, 0, 1, 1);
+
+
+  gridLayout_4->addWidget(logGroupBox, 3, 0, 1, 2);
+
+}
+void MgAdaptAdvWidget::_onWorkingDirectoryPushButton()
+{
+  QString aDirName=QFileDialog::getExistingDirectory ();
+  if (!(aDirName.isEmpty()))workingDirectoryLineEdit->setText(aDirName);
+}
+void MgAdaptAdvWidget::onMeshDimChanged(ADAPTATION_MODE aMode)
+{
+/* default adaptation mode
+  * assume that if meshDim == 2 and no 3D backgrounmesh-->adaptation surface
+  * if meshDim == 3 and  if there is not 2D mesh -->VOLUME
+  * else BOTH
+  */
+
+  QString adaptation("adaptation"), value;
+  switch(aMode)
+  {
+    case ADAPTATION_MODE::SURFACE:
+    {
+      value ="surface";
+      setOptionValue(adaptation, value);
+      break;
+    }
+    case ADAPTATION_MODE::BOTH :
+    {
+      value = "both";
+      setOptionValue(adaptation, value);
+      break;
+    }
+    case ADAPTATION_MODE::VOLUME :
+    {
+      value = "volume";
+      setOptionValue(adaptation, value);
+      break;
+    }
+  }
+}
+void MgAdaptAdvWidget::setOptionValue(QString& option, QString& value)
+{
+  std::map<QString, QTreeWidgetItem *>::iterator it = optionTreeWidgetItem.find(option);
+  if (it != optionTreeWidgetItem.end())
+  {
+    it->second->setText( 0, tr( option.toLatin1().constData() ));
+    it->second->setText( 1, tr( value.toLatin1().constData() ));
+    it->second->setCheckState( 0,  Qt::Checked );
+    it->second->setData( NAME_COL, PARAM_NAME, option );
+    myOptionTable->editItem( it->second, NAME_COL );
+  }
+}
+namespace
+{
+bool isEditable( const QModelIndex& index )
+{
+  return index.isValid() &&
+          index.flags() & Qt::ItemIsEditable &&
+          index.flags() & Qt::ItemIsEnabled &&
+          ( !index.data( Qt::UserRole + 1 ).isValid() || index.data( Qt::UserRole + 1 ).toInt() != 0 );
+}
+}
+
+MgAdaptAdvWidgetTreeWidget::MgAdaptAdvWidgetTreeWidget( QWidget* parent )
+    : QTreeWidget( parent )
+{
+}
+
+QModelIndex MgAdaptAdvWidgetTreeWidget::moveCursor( CursorAction action, Qt::KeyboardModifiers modifiers )
+{
+  QModelIndex current = currentIndex();
+  int column = current.column();
+  if ( action == MoveNext )
+  {
+    if ( column < columnCount()-1 )
+    {
+      QModelIndex next = current.sibling( current.row(), column+1 );
+      if ( isEditable( next ) ) return next;
+    }
+    else
+    {
+      QModelIndex next = current.sibling( current.row()+1, 0 );
+      if ( isEditable( next ) ) return next;
+    }
+  }
+  else if ( action == MovePrevious )
+  {
+    if ( column == 0 ) {
+      QModelIndex next = current.sibling( current.row()-1, columnCount()-1 );
+      if ( isEditable( next ) ) return next;
+    }
+    else {
+      QModelIndex next = current.sibling( current.row(), column-1 );
+       if ( isEditable( next ) ) return next;
+    }
+  }
+  return QTreeWidget::moveCursor( action, modifiers );
+}
+
+void MgAdaptAdvWidgetTreeWidget::keyPressEvent( QKeyEvent* e )
+{
+  switch ( e->key() )
+  {
+    case Qt::Key_F2:
+    {
+      QModelIndex index = currentIndex();
+      if ( !isEditable( index ) ) {
+        for ( int i = 0; i < columnCount(); i++ ) {
+          QModelIndex sibling = index.sibling( index.row(), i );
+          if ( isEditable( sibling ) ) {
+            if ( !edit( sibling, EditKeyPressed, e ) ) e->ignore();
+          }
+        }
+      }
+    }
+    break;
+    default:
+      break;
+  }
+  QTreeWidget::keyPressEvent( e );
+}
diff --git a/src/SMESHGUI/SMESHGUI_MgAdaptDlg.h b/src/SMESHGUI/SMESHGUI_MgAdaptDlg.h
new file mode 100644 (file)
index 0000000..3efdb2f
--- /dev/null
@@ -0,0 +1,279 @@
+// Copyright (C) 2020-2024  CEA, EDF
+//
+// 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 MG_ADAPTGUI_HXX
+#define MG_ADAPTGUI_HXX
+
+// Qt includes
+#include <QDialog>
+#include <QTreeWidget>
+#include <QItemDelegate>
+
+#include <map>
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(MG_ADAPT)
+#include <SALOME_GenericObj_wrap.hxx>
+
+class SalomeApp_Module;
+
+class QButtonGroup;
+class QLineEdit;
+class QGroupBox;
+class QRadioButton;
+class QLabel;
+class QCheckBox;
+class QGridLayout;
+class QTabWidget;
+class QDoubleSpinBox;
+class QSpacerItem;
+class QSpinBox;
+class QTreeWidgetItem;
+class QHBoxLayout;
+class QComboBox;
+
+class SMESHGUI_MgAdaptArguments;
+class MgAdaptAdvWidgetTreeWidget;
+class MgAdaptAdvWidget;
+
+enum ADAPTATION_MODE{
+  SURFACE,
+  VOLUME,
+  BOTH
+};
+
+//=================================================================================
+// class    : SMESHGUI_MgAdaptDlg
+// purpose  :
+//=================================================================================
+class  SMESHGUI_MgAdaptDlg : public QDialog
+{
+  Q_OBJECT
+public:
+  //! Property type
+  enum Mode { Arguments, AdvancedOptions};
+  SMESHGUI_MgAdaptDlg( SalomeApp_Module*, SMESH::MG_ADAPT_ptr, QWidget* parent= 0,bool isCreation = true );
+  ~SMESHGUI_MgAdaptDlg();
+
+  void buildDlg();
+  void reject();
+  bool checkParams(QString& msg) ;
+  //~void setModel(MgAdapt*);
+  SMESH::MG_ADAPT_ptr getModel() const;
+
+public slots:
+
+protected slots:
+  virtual bool PushOnApply();
+
+private slots:
+  virtual void PushOnHelp();
+  virtual void PushOnOK();
+
+protected :
+
+  SMESHGUI_MgAdaptArguments* myArgs;
+  MgAdaptAdvWidget*          myAdvOpt;
+
+  bool readParamsFromHypo( ) const ;
+  bool readParamsFromWidgets( ) ;
+  bool storeParamsToHypo( const SMESH::MgAdaptHypothesisData & ) const;
+
+private:
+
+  SalomeApp_Module*              mySMESHGUI;
+  QTabWidget*                    myTabWidget;
+
+  SMESH::MgAdaptHypothesisData_var           myData;
+  SALOME::GenericObj_wrap< SMESH::MG_ADAPT > model;
+
+};
+
+class  SMESHGUI_MgAdaptArguments : public QWidget
+{
+  Q_OBJECT
+public:
+  //! Property type
+  enum Mode { Mesh, Browser};
+  enum SIZEMAP { Local, Background, Constant};
+  SMESHGUI_MgAdaptArguments( QWidget* parent);
+  ~SMESHGUI_MgAdaptArguments();
+  void setMode( const Mode, const SIZEMAP );
+
+  QString myFileInDir;
+  QString myFileOutDir;
+  QString myFileSizeMapDir;
+  QGroupBox*    aMeshIn ;
+  QRadioButton* aMedfile;
+  QRadioButton* aBrowser ;
+  QLineEdit* aBrowserObject;
+  QPushButton* selectMedFilebutton ;
+  QSpacerItem* hspacer;
+  QLineEdit* selectMedFileLineEdit ;
+  QButtonGroup* meshInGroup ;
+  QGridLayout* meshIn ;
+
+  QGroupBox*    aMeshOut ;
+  QLabel* meshName;
+  QLineEdit* meshNameLineEdit;
+  QSpacerItem* secondHspacer;
+  QCheckBox* medFileCheckBox;
+  QPushButton* selectOutMedFilebutton;
+  QLineEdit* selectOutMedFileLineEdit;
+  QSpacerItem* thirdHspacer;
+  QCheckBox* publishOut;
+  QGridLayout* meshOut ;
+
+  QGroupBox*    sizeMapDefinition ;
+  QRadioButton* localButton;
+  QRadioButton* backgroundButton ;
+  QRadioButton* constantButton ;
+  QLabel* medFileBackground;
+  QPushButton* selectMedFileBackgroundbutton;
+  QLineEdit* selectMedFileBackgroundLineEdit;
+  QLabel* valueLabel;
+  QDoubleSpinBox* dvalue;
+  QButtonGroup* sizeMapDefGroup ;
+  QGridLayout* sizeMapDefGroupLayout;
+
+
+  QGroupBox* sizeMapField;
+  QLabel* fieldName;
+  QComboBox* fieldNameCmb;
+  QRadioButton* noTimeStep;
+  QRadioButton* lastTimeStep ;
+  QRadioButton* chosenTimeStep;
+  QLabel* timeStepLabel;
+  QSpinBox* timeStep;
+  QLabel* rankLabel;
+  QSpinBox* rankSpinBox;
+  QButtonGroup* timeStepGroup;
+  QGridLayout* sizeMapFieldGroupLayout;
+
+signals:
+  void updateSelection();
+  void toExportMED(const char *);
+  void meshDimSignal(ADAPTATION_MODE aMode);
+public slots:
+
+protected slots:
+
+private slots:
+  void modeChanged( int);
+  void sizeMapDefChanged(int);
+  void timeStepGroupChanged(int timeStepType, bool disableOther = false, int vmax = 0);
+  void onSelectMedFilebuttonClicked();
+  void clear();
+  void onMedFileCheckBox(int);
+  void onPublishOut(int);
+  void onSelectOutMedFilebutton();
+  void onSelectMedFileBackgroundbutton();
+  void onLocalSelected(QString);
+  void onNoTimeStep(bool disableOther = false);
+  void onLastTimeStep(bool disableOther = false);
+  void onChosenTimeStep(bool disableOther = false, int vmax = 0);
+  void visibleTimeStepRankLabel(bool visible);
+  void valueAdaptation ();
+
+private:
+
+  QString getMedFileName(bool avertir);
+  int meshDim;
+  int meshDimBG;
+  std::map<QString, int> myFieldList;
+
+};
+enum {
+  OPTION_ID_COLUMN = 0,
+  OPTION_TYPE_COLUMN,
+  OPTION_NAME_COLUMN = 0,
+  OPTION_VALUE_COLUMN,
+  NB_COLUMNS,
+};
+
+//////////////////////////////////////////
+// MgAdaptAdvWidget
+//////////////////////////////////////////
+class  MgAdaptAdvWidget : public QWidget
+{
+  Q_OBJECT
+
+public:
+  MgAdaptAdvWidget( QWidget* = 0, std::vector <std::string> * = nullptr, Qt::WindowFlags = 0 );
+  ~MgAdaptAdvWidget();
+  std::vector < std::string > *myOptions;
+  QGridLayout                 *gridLayout_4;
+  MgAdaptAdvWidgetTreeWidget  *myOptionTable;
+  QPushButton                 *addBtn;
+  QSpacerItem                 *horizontalSpacer;
+  QGroupBox                   *logGroupBox;
+  QGridLayout                 *gridLayout_2;
+  QGridLayout                 *gridLayout;
+  QLabel                      *workingDirectoryLabel;
+  QLineEdit                   *workingDirectoryLineEdit;
+  QPushButton                 *workingDirectoryPushButton;
+  QLabel                      *verboseLevelLabel;
+  QSpinBox                    *verboseLevelSpin;
+  QHBoxLayout                 *horizontalLayout;
+  QCheckBox                   *logInFileCheck;
+  QCheckBox                   *removeLogOnSuccessCheck;
+  QCheckBox                   *keepWorkingFilesCheck;
+
+  void AddOption( const char* name_value_type, bool isCustom = false );
+  void GetOptionAndValue( QTreeWidgetItem * tblRow, QString& option, QString& value, bool& dflt );
+  void setupWidget();
+
+public slots:
+  void                onAddOption();
+  void itemChanged(QTreeWidgetItem * tblRow, int column);
+  void onMeshDimChanged(ADAPTATION_MODE aMode);
+private slots:
+  void _onWorkingDirectoryPushButton();
+private:
+  void setOptionValue(QString& option, QString& value);
+  std::map<QString, QTreeWidgetItem *> optionTreeWidgetItem;
+
+  QTreeWidgetItem* getNewQTreeWidgetItem(QTreeWidget* table, const char* option, QString& name, bool isCustom);
+
+};
+
+enum { EDITABLE_ROLE = Qt::UserRole + 1, PARAM_NAME,
+       NAME_COL = 0, VALUE_COL
+     };
+
+class  ItemDelegate: public QItemDelegate
+{
+public:
+
+  ItemDelegate(QObject* parent=0): QItemDelegate(parent) {}
+  QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &o, const QModelIndex &index) const;
+};
+
+class  MgAdaptAdvWidgetTreeWidget : public QTreeWidget
+{
+  Q_OBJECT
+public:
+  MgAdaptAdvWidgetTreeWidget( QWidget* );
+
+protected:
+  QModelIndex moveCursor( CursorAction, Qt::KeyboardModifiers );
+  void keyPressEvent( QKeyEvent* );
+};
+
+#endif // MG_ADAPTGUI_HXX
index d6ff130e1308f181edd90a0f143d3f2120e6d40c..01cc037717ed5c20474e9f6e538ef14b74626761 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -57,7 +57,7 @@
 
 #include <SVTK_Selector.h>
 #include <SVTK_ViewWindow.h>
-#include <VTKViewer_CellLocationsArray.h>
+//#include <VTKViewer_CellLocationsArray.h>
 
 // OCCT includes
 #include <Bnd_B3d.hxx>
@@ -437,9 +437,9 @@ void SMESHGUI_MultiEditDlg::onOk()
 // Purpose : Retrieve identifiers from list box or the whole object
 //=======================================================================
 
-SMESH::long_array_var SMESHGUI_MultiEditDlg::getIds(SMESH::SMESH_IDSource_var& obj)
+SMESH::smIdType_array_var SMESHGUI_MultiEditDlg::getIds(SMESH::SMESH_IDSource_var& obj)
 {
-  SMESH::long_array_var anIds = new SMESH::long_array;
+  SMESH::smIdType_array_var anIds = new SMESH::smIdType_array;
 
   if (myToAllChk->isChecked())
   {
@@ -697,7 +697,7 @@ void SMESHGUI_MultiEditDlg::onAddBtn()
   if (nbSelected == 0)
     return;
 
-  TColStd_IndexedMapOfInteger toBeAdded;
+  SVTK_TIndexedMapOfVtkId toBeAdded;
 
   if (!mySubmeshChk->isChecked() && !myGroupChk->isChecked()) {
     if (nbSelected > 0)
@@ -709,9 +709,9 @@ void SMESHGUI_MultiEditDlg::onAddBtn()
         SMESH::IObjectToInterface<SMESH::SMESH_subMesh>(anIter.Value());
       if (!aSubMesh->_is_nil()) {
         if (aSubMesh->GetFather()->GetId() == myMesh->GetId()) {
-          SMESH::long_array_var anIds = aSubMesh->GetElementsId();
+          SMESH::smIdType_array_var anIds = aSubMesh->GetElementsId();
           for (int i = 0, n = anIds->length(); i < n; i++) {
-            if (isIdValid(anIds[ i ]))
+            if (isIdValid(FromSmIdType<int>(anIds[ i ])))
               toBeAdded.Add(anIds[ i ]);
           }
         }
@@ -725,9 +725,9 @@ void SMESHGUI_MultiEditDlg::onAddBtn()
       if (!aGroup->_is_nil() && ((aGroup->GetType() == SMESH::FACE && entityType() == 0) || 
                                  (aGroup->GetType() == SMESH::VOLUME && entityType() == 1))) {
         if (aGroup->GetMesh()->GetId() == myMesh->GetId()) {
-          SMESH::long_array_var anIds = aGroup->GetListOfID();
+          SMESH::smIdType_array_var anIds = aGroup->GetListOfID();
           for (int i = 0, n = anIds->length(); i < n; i++) {
-            if (isIdValid(anIds[ i ]))
+            if (isIdValid(FromSmIdType<int>(anIds[ i ])))
               toBeAdded.Add(anIds[ i ]);
           }
         }
@@ -875,7 +875,7 @@ void SMESHGUI_MultiEditDlg::onListSelectionChanged()
     anActor = myActor;
   TVisualObjPtr anObj = anActor->GetObject();
 
-  TColStd_MapOfInteger anIndexes;
+  SVTK_TVtkIDsMap anIndexes;
   int total = myListBox->count();
   for (int i = 0; i < total; i++)
   {
@@ -1008,7 +1008,7 @@ bool SMESHGUI_MultiEditDlg::onApply()
   SUIT_OverrideCursor aWaitCursor;
 
   SMESH::SMESH_IDSource_var obj;
-  SMESH::long_array_var anIds = getIds(obj);
+  SMESH::smIdType_array_var anIds = getIds(obj);
 
   bool aResult = process(aMeshEditor, anIds.inout(), obj);
   if (aResult) {
@@ -1099,9 +1099,9 @@ SMESHGUI_ChangeOrientationDlg::~SMESHGUI_ChangeOrientationDlg()
 {
 }
 
-bool SMESHGUI_ChangeOrientationDlg::process (SMESH::SMESH_MeshEditor_ptr theEditor,
-                                             const SMESH::long_array&    theIds,
-                                             SMESH::SMESH_IDSource_ptr   obj)
+bool SMESHGUI_ChangeOrientationDlg::process (SMESH::SMESH_MeshEditor_ptr  theEditor,
+                                             const SMESH::smIdType_array& theIds,
+                                             SMESH::SMESH_IDSource_ptr    obj)
 {
   if ( CORBA::is_nil( obj ))
     return theEditor->Reorient(theIds);
@@ -1109,7 +1109,7 @@ bool SMESHGUI_ChangeOrientationDlg::process (SMESH::SMESH_MeshEditor_ptr theEdit
     return theEditor->ReorientObject( obj );
 }
 
-int SMESHGUI_ChangeOrientationDlg::nbElemsInMesh()
+smIdType SMESHGUI_ChangeOrientationDlg::nbElemsInMesh()
 {
   return ( myFilterType == SMESH::FaceFilter ) ? myMesh->NbFaces() : myMesh->NbVolumes();
 }
@@ -1189,7 +1189,7 @@ bool SMESHGUI_UnionOfTrianglesDlg::isValid (const bool theMess)
 }
 
 bool SMESHGUI_UnionOfTrianglesDlg::process (SMESH::SMESH_MeshEditor_ptr theEditor,
-                                            const SMESH::long_array&    theIds,
+                                            const SMESH::smIdType_array&    theIds,
                                             SMESH::SMESH_IDSource_ptr   obj)
 {
   {
@@ -1207,7 +1207,7 @@ bool SMESHGUI_UnionOfTrianglesDlg::process (SMESH::SMESH_MeshEditor_ptr theEdito
   return ok;
 }
 
-int SMESHGUI_UnionOfTrianglesDlg::nbElemsInMesh()
+smIdType SMESHGUI_UnionOfTrianglesDlg::nbElemsInMesh()
 {
   return myMesh->NbTriangles();
 }
@@ -1220,7 +1220,7 @@ void SMESHGUI_UnionOfTrianglesDlg::onDisplaySimulation( bool toDisplayPreview )
         SUIT_OverrideCursor aWaitCursor;
         // get Ids of elements
         SMESH::SMESH_IDSource_var obj;
-        SMESH::long_array_var anElemIds = getIds( obj );
+        SMESH::smIdType_array_var anElemIds = getIds( obj );
 
         SMESH::NumericalFunctor_var aCriterion  = getNumericalFunctor();
         SMESH::SMESH_MeshEditor_var aMeshEditor = myMesh->GetMeshEditPreviewer();
@@ -1302,7 +1302,7 @@ void SMESHGUI_CuttingOfQuadsDlg::reject()
 }
 
 bool SMESHGUI_CuttingOfQuadsDlg::process (SMESH::SMESH_MeshEditor_ptr theEditor,
-                                          const SMESH::long_array&    theIds,
+                                          const SMESH::smIdType_array&    theIds,
                                           SMESH::SMESH_IDSource_ptr   obj)
 {
   bool hasObj = (! CORBA::is_nil( obj ));
@@ -1327,7 +1327,7 @@ bool SMESHGUI_CuttingOfQuadsDlg::process (SMESH::SMESH_MeshEditor_ptr theEditor,
   return hasObj ? theEditor->QuadToTriObject(obj, aCrit) : theEditor->QuadToTri(theIds, aCrit);
 }
 
-int SMESHGUI_CuttingOfQuadsDlg::nbElemsInMesh()
+smIdType SMESHGUI_CuttingOfQuadsDlg::nbElemsInMesh()
 {
   return myMesh->NbQuadrangles();
 }
@@ -1382,7 +1382,7 @@ void SMESHGUI_CuttingOfQuadsDlg::displayPreview()
   SUIT_OverrideCursor aWaitCursor;
   // get Ids of elements
   SMESH::SMESH_IDSource_var obj;
-  SMESH::long_array_var anElemIds = getIds(obj);
+  SMESH::smIdType_array_var anElemIds = getIds(obj);
   if (anElemIds->length() == 0 && obj->_is_nil() )
     return;
 
@@ -1439,13 +1439,13 @@ void SMESHGUI_CuttingOfQuadsDlg::displayPreview()
       const SMDS_MeshNode* aNode = static_cast<const SMDS_MeshNode*>(anIter->next());
       if (aNode)
       {
-        if (!anIdToVtk.IsBound(aNode->GetID()))
+        if (!anIdToVtk.IsBound(FromSmIdType<int>(aNode->GetID())))
         {
           aPoints->SetPoint(++nbPoints, aNode->X(), aNode->Y(), aNode->Z());
-          anIdToVtk.Bind(aNode->GetID(), nbPoints);
+          anIdToVtk.Bind(FromSmIdType<int>(aNode->GetID()), nbPoints);
         }
 
-        aNodes[ k++ ] = aNode->GetID();
+        aNodes[ k++ ] = FromSmIdType<int>(aNode->GetID());
       }
     }
 
@@ -1464,7 +1464,7 @@ void SMESHGUI_CuttingOfQuadsDlg::displayPreview()
     else // use numerical functor
     {
       // compare two sets of possible triangles
-      int diag = aMeshEditor->BestSplit(anElemIds[i], aCriterion);
+      smIdType diag = aMeshEditor->BestSplit(anElemIds[i], aCriterion);
       if (diag == 1) // 1-3
         isDiag13 = true;
       else if (diag == 2) // 2-4
@@ -1503,7 +1503,7 @@ void SMESHGUI_CuttingOfQuadsDlg::displayPreview()
     }
   }
 
-  VTKViewer_CellLocationsArray* aCellLocationsArray = VTKViewer_CellLocationsArray::New();
+  vtkIdTypeArray* aCellLocationsArray = vtkIdTypeArray::New();
   aCellLocationsArray->SetNumberOfComponents(1);
   aCellLocationsArray->SetNumberOfTuples(aNbCells);
 
@@ -1648,7 +1648,7 @@ SMESHGUI_SplitVolumesDlg::~SMESHGUI_SplitVolumesDlg()
 }
 
 bool SMESHGUI_SplitVolumesDlg::process (SMESH::SMESH_MeshEditor_ptr theEditor,
-                                        const SMESH::long_array&    theIds,
+                                        const SMESH::smIdType_array&    theIds,
                                         SMESH::SMESH_IDSource_ptr   theObj)
 {
   SMESH::IDSource_wrap obj = theObj;
@@ -1696,7 +1696,7 @@ bool SMESHGUI_SplitVolumesDlg::process (SMESH::SMESH_MeshEditor_ptr theEditor,
   return true;
 }
 
-int SMESHGUI_SplitVolumesDlg::nbElemsInMesh()
+smIdType SMESHGUI_SplitVolumesDlg::nbElemsInMesh()
 {
   return isIntoPrisms() ? myMesh->NbHexas() : myMesh->NbVolumes() - myMesh->NbTetras();
 }
@@ -1818,7 +1818,7 @@ void SMESHGUI_SplitVolumesDlg::onSelectionDone()
       if (!aSelMesh->_is_nil())
         myMesh = aSelMesh;
 
-      TColStd_IndexedMapOfInteger aMapIndex;
+      SVTK_TIndexedMapOfVtkId aMapIndex;
       mySelector->GetIndex( anIO, aMapIndex );
       if ( !aMapIndex.IsEmpty() )
         showFacetByElement( aMapIndex(1) );
index 019afa8851211b151fa12a36fe80fbe002d9319d..ba7ae89e1dda5b8ced99b928b3ee536a1e478f23 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -41,6 +41,8 @@
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include CORBA_SERVER_HEADER(SMESH_MeshEditor)
 
+#include <smIdType.hxx>
+
 class SMESHGUI;
 class SMESHGUI_FilterDlg;
 class SMESHGUI_SpinBox;
@@ -113,14 +115,14 @@ protected:
   QWidget*                  createButtonFrame( QWidget* );
   QWidget*                  createMainFrame( QWidget*, const bool );
   virtual bool              isValid( const bool );
-  SMESH::long_array_var     getIds(SMESH::SMESH_IDSource_var& obj);
+  SMESH::smIdType_array_var getIds(SMESH::SMESH_IDSource_var& obj);
   void                      updateButtons();
   virtual void              setSelectionMode();
   virtual bool              isIdValid( const int ) const;
   virtual bool              process( SMESH::SMESH_MeshEditor_ptr, 
-                                     const SMESH::long_array& ,
+                                     const SMESH::smIdType_array& ,
                                      SMESH::SMESH_IDSource_ptr obj) = 0;
-  virtual int               nbElemsInMesh() = 0;
+  virtual smIdType          nbElemsInMesh() = 0;
   int                       entityType();
 
 protected:
@@ -182,9 +184,9 @@ public:
 
 protected:
   virtual bool process( SMESH::SMESH_MeshEditor_ptr,
-                        const SMESH::long_array& ,
+                        const SMESH::smIdType_array& ,
                         SMESH::SMESH_IDSource_ptr obj);
-  virtual int  nbElemsInMesh();
+  virtual smIdType nbElemsInMesh();
 };
 
 /*!
@@ -202,9 +204,9 @@ public:
 protected:
   virtual bool      isValid( const bool );
   virtual bool      process( SMESH::SMESH_MeshEditor_ptr,
-                             const SMESH::long_array&,
+                             const SMESH::smIdType_array&,
                              SMESH::SMESH_IDSource_ptr obj );
-  virtual int       nbElemsInMesh();
+  virtual smIdType  nbElemsInMesh();
 
 protected slots:
    virtual void     onDisplaySimulation( bool );
@@ -227,9 +229,9 @@ public:
 
 protected:
   virtual bool  process( SMESH::SMESH_MeshEditor_ptr,
-                         const SMESH::long_array& ,
+                         const SMESH::smIdType_array& ,
                          SMESH::SMESH_IDSource_ptr obj);
-  virtual int   nbElemsInMesh();
+  virtual smIdType nbElemsInMesh();
 
 protected slots:
   virtual void  reject();
@@ -269,9 +271,9 @@ protected slots:
 protected:
 
   virtual bool process( SMESH::SMESH_MeshEditor_ptr,
-                        const SMESH::long_array&,
+                        const SMESH::smIdType_array&,
                         SMESH::SMESH_IDSource_ptr obj );
-  virtual int  nbElemsInMesh();
+  virtual smIdType nbElemsInMesh();
 
   virtual void setSelectionMode();
   void         showFacetByElement( int id );
index fe21898a10fc4584f44b03e5b86b3c1d9481147c..01f86709c4b7328e80c54e884bcf1798504455b8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -55,7 +55,7 @@
 
 #include <SVTK_ViewWindow.h>
 #include <VTKViewer_Algorithm.h>
-#include <VTKViewer_CellLocationsArray.h>
+//#include <VTKViewer_CellLocationsArray.h>
 
 // SALOME KERNEL includes
 #include <SALOMEDS_Study.hxx>
@@ -152,7 +152,7 @@ namespace SMESH
       aCells->InsertNextCell( anIdList );
       aCellTypesArray->InsertNextValue( VTK_VERTEX );
 
-      VTKViewer_CellLocationsArray* aCellLocationsArray = VTKViewer_CellLocationsArray::New();
+      vtkIdTypeArray* aCellLocationsArray = vtkIdTypeArray::New();
       aCellLocationsArray->SetNumberOfComponents( 1 );
       aCellLocationsArray->SetNumberOfTuples( 1 );
 
@@ -497,7 +497,7 @@ bool SMESHGUI_NodesDlg::ClickOnApply()
     }
 
     if ( !aGroupUsed->_is_nil() ) {
-      SMESH::long_array_var anIdList = new SMESH::long_array;
+      SMESH::smIdType_array_var anIdList = new SMESH::smIdType_array;
       anIdList->length( 1 );
       anIdList[0] = aNodeId;
       aGroupUsed->Add( anIdList.inout() );
index 35db06efe216e6e01a6ca98a1034860ac801919c..16997e0d04ca3065d59836d4e5838365674de303 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 2eb920369138cb55fd2e728f5be3a57c2f1608eb..0ca8b8b12c89356a71c66f37b903658b927e496f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -245,7 +245,7 @@ SMESHGUI_OffsetDlg::SMESHGUI_OffsetDlg( SMESHGUI* theModule ) :
   myMeshOrSubMeshOrGroupFilter =
     new SMESH_LogicalFilter(aListOfFilters, SMESH_LogicalFilter::LO_OR);
 
-  myHelpFileName = "Offset_page.html";
+  myHelpFileName = "offset_elements.html";
 
   Init();
 
@@ -340,7 +340,7 @@ bool SMESHGUI_OffsetDlg::ClickOnApply()
   {
     QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts);
 
-    SMESH::long_array_var anElementsId = new SMESH::long_array;
+    SMESH::smIdType_array_var anElementsId = new SMESH::smIdType_array;
     anElementsId->length(aListElementsId.count());
     for (int i = 0; i < aListElementsId.count(); i++)
       anElementsId[i] = aListElementsId[i].toInt();
@@ -552,7 +552,7 @@ void SMESHGUI_OffsetDlg::onTextChange (const QString& theNewText)
   if (aMesh) {
     Handle(SALOME_InteractiveObject) anIO = myActor->getIO();
 
-    TColStd_MapOfInteger newIndices;
+    SVTK_TVtkIDsMap newIndices;
 
     QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts);
     for (int i = 0; i < aListId.count(); i++)
@@ -918,7 +918,7 @@ void SMESHGUI_OffsetDlg::onDisplaySimulation( bool toDisplayPreview )
           }
         else
         {
-          SMESH::long_array_var anElementsId = new SMESH::long_array;
+          SMESH::smIdType_array_var anElementsId = new SMESH::smIdType_array;
           QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts);
           anElementsId->length(aListElementsId.count());
           for (int i = 0; i < aListElementsId.count(); i++)
index 804cccc51223c52353dca5e527fbed2994442674..a4cd24f5da9e764045c97d88c35704df9c4e2bb7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index aedcb370669bebe80ea6486efccb7fb97d84d66b..1e40230db616885589eaed39ac9c71c1919cb47d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index c126dc82db0b5fd66992df23362b4a9f427e4e6b..a3813301c230bf4d18289d432948db576d84593e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 2782458aa29a4ba138e613e0f2f6e7dbbc9651e5..bdf6e7382f98a3b7e514e4c86da706fba4f2316b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -40,14 +40,12 @@ namespace SMESHOp {
     OpImportMED              = 1102,   // MENU FILE - IMPORT - MED FILE
     OpImportSTL              = 1103,   // MENU FILE - IMPORT - STL FILE
     OpImportCGNS             = 1104,   // MENU FILE - IMPORT - CGNS FILE
-    OpImportSAUV             = 1105,   // MENU FILE - IMPORT - SAUV FILE
     OpImportGMF              = 1106,   // MENU FILE - IMPORT - GMF FILE
     OpPopupImportDAT         = 1120,   // POPUP MENU - IMPORT - DAT FILE
     OpPopupImportUNV         = 1121,   // POPUP MENU - IMPORT - UNV FILE
     OpPopupImportMED         = 1122,   // POPUP MENU - IMPORT - MED FILE
     OpPopupImportSTL         = 1123,   // POPUP MENU - IMPORT - STL FILE
     OpPopupImportCGNS        = 1124,   // POPUP MENU - IMPORT - CGNS FILE
-    OpPopupImportSAUV        = 1125,   // POPUP MENU - IMPORT - SAUV FILE
     OpPopupImportGMF         = 1126,   // POPUP MENU - IMPORT - GMF FILE
     // Export -------------------------//--------------------------------
     OpExportDAT              = 1200,   // MENU FILE  - EXPORT - DAT FILE
@@ -55,14 +53,12 @@ namespace SMESHOp {
     OpExportUNV              = 1202,   // MENU FILE  - EXPORT - UNV FILE
     OpExportSTL              = 1203,   // MENU FILE  - EXPORT - STL FILE
     OpExportCGNS             = 1204,   // MENU FILE  - EXPORT - CGNS FILE
-    OpExportSAUV             = 1205,   // MENU FILE  - EXPORT - SAUV FILE
     OpExportGMF              = 1206,   // MENU FILE  - EXPORT - GMF FILE
     OpPopupExportDAT         = 1210,   // POPUP MENU - EXPORT - DAT FILE
     OpPopupExportMED         = 1211,   // POPUP MENU - EXPORT - MED FILE
     OpPopupExportUNV         = 1212,   // POPUP MENU - EXPORT - UNV FILE
     OpPopupExportSTL         = 1213,   // POPUP MENU - EXPORT - STL FILE
     OpPopupExportCGNS        = 1214,   // POPUP MENU - EXPORT - CGNS FILE
-    OpPopupExportSAUV        = 1215,   // POPUP MENU - EXPORT - SAUV FILE
     OpPopupExportGMF         = 1216,   // POPUP MENU - EXPORT - GMF FILE
     // Mesh ---------------------------//--------------------------------
     OpCreateMesh             = 2030,   // MENU MESH  - CREATE MESH
@@ -126,6 +122,8 @@ namespace SMESHOp {
     OpBareBorderVolume       = 3303,   // MENU CONTROLS - VOLUMES WITH BARE BORDER
     OpOverConstrainedVolume  = 3304,   // MENU CONTROLS - OVERCONSTRAINED VOLUMES
     OpEqualVolume            = 3305,   // MENU CONTROLS - DOUBLE VOLUMES
+    OpScaledJacobian         = 3306,   // MENU CONTROLS - SCALED JACOBIAN
+    OpWarping3D              = 3307,   // MENU CONTROLS - Warping 3D
     OpOverallMeshQuality     = 3400,   // MENU CONTROLS - OVERALL MESH QUALITY
     // Modification -------------------//--------------------------------
     OpNode                   = 4000,   // MENU MODIFICATION - ADD - NODE
@@ -157,6 +155,7 @@ namespace SMESHOp {
     OpRemoveNodes            = 4200,   // MENU MODIFICATION - REMOVE - NODE
     OpRemoveElements         = 4201,   // MENU MODIFICATION - REMOVE - ELEMENTS
     OpRemoveOrphanNodes      = 4202,   // MENU MODIFICATION - REMOVE - ORPHAN NODES
+    OpRemoveNodeWithReconn   = 4203,   // MENU MODIFICATION - REMOVE - NODE, WITH RECONNECTION
     OpDeleteGroup            = 4210,   // MENU MODIFICATION - REMOVE - DELETE GROUPS WITH CONTENTS
     OpClearMesh              = 4220,   // MENU MODIFICATION - REMOVE - CLEAR MESH DATA
     OpRenumberingNodes       = 4300,   // MENU MODIFICATION - RENUMBERING - NODES
@@ -186,6 +185,15 @@ namespace SMESHOp {
     OpConvertMeshToQuadratic = 4513,   // MENU MODIFICATION - CONVERT TO/FROM QUADRATIC
     OpCreateBoundaryElements = 4514,   // MENU MODIFICATION - CREATE BOUNDARY ELEMENTS
     OpSplitBiQuadratic       = 4515,   // MENU MODIFICATION - SPLIT BI-QUADRATIC TO LINEAR
+    OpMoveNodeInteractive    = 4516,   // MENU MODIFICATION - MOVE NODE INTERACTIVE
+    OpSplitEdgeInteract      = 4517,   // MENU MODIFICATION - INTERACTIVE ADD NODE ON EDGE
+    OpSplitFaceInteract      = 4518,   // MENU MODIFICATION - INTERACTIVE ADD NODE ON FACE
+    OpCreateDualMesh         = 4519,   // MENU MODIFICATION - CREATE DUAL MESH
+    OpCreate2DElements       = 4520,   // MENU MODIFICATION - CREATE 2D MESH FROM 3D MESH
+
+    // Adaptation ---------------------//--------------------------------
+    OpMGAdapt                = 8020,   // MENU ADAPTATION - MG-ADAPT
+    OpHomardAdapt            = 8021,   // MENU ADAPTATION - HOMARD-ADAPT
     // Measurements -------------------//--------------------------------
     OpPropertiesLength       = 5000,   // MENU MEASUREMENTS - BASIC PROPERTIES - LENGTH
     OpPropertiesArea         = 5001,   // MENU MEASUREMENTS - BASIC PROPERTIES - AREA
index b897f9413ccdac274d836c8b38bfe1ba4ba298e5..e2caed3755c7f07fef2582722f78b3201d090c53 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index f8654c0b3e11e46acf5580ac009099b93b81fadb..abdcc380e32c56a68833b8f956a74ee0478fb215 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index a6e9a1d0e6f84b22ea08cd4b2862de5be0d376de..7258a0b75bad4fb6f807b57be05cb80be0e0a85d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 11f750a70d17c4cf7a591186293965ab37e74bc0..31939d599b47bf4896734aaaac0dc639cd09bbfa 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 6f329dd130f88494bdf9d45b3acd7e5dc2b24a21..3eacc1f178d696b8a07461a0b4260dfdeb1313d3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -45,7 +45,7 @@ void SMESHGUI_PreVisualObj::UpdateFunctor( const SMESH::Controls::FunctorPtr& th
   if ( theFunctor ) theFunctor->SetMesh( GetMesh() );
 }
 
-int SMESHGUI_PreVisualObj::GetElemDimension( const int theObjId )
+int SMESHGUI_PreVisualObj::GetElemDimension( const smIdType theObjId )
 {
   if ( const SMDS_MeshElement* anElem = myMesh->FindElement( theObjId ))
   {
@@ -62,7 +62,7 @@ int SMESHGUI_PreVisualObj::GetElemDimension( const int theObjId )
   return -1;
 }
 
-int SMESHGUI_PreVisualObj::GetNbEntities( const SMDSAbs_ElementType theType ) const
+smIdType SMESHGUI_PreVisualObj::GetNbEntities( const SMDSAbs_ElementType theType ) const
 {
   return myMesh->GetMeshInfo().NbElements( theType );
 }
@@ -77,10 +77,10 @@ SMESH::SMESH_Mesh_ptr SMESHGUI_PreVisualObj::GetMeshServer()
 // purpose  : Retrieve ids of nodes from edge of elements ( edge is numbered from 1 )
 //=================================================================================
 
-bool SMESHGUI_PreVisualObj::GetEdgeNodes( const int theElemId,
-                                          const int theEdgeNum,
-                                          int&      theNodeId1,
-                                          int&      theNodeId2 ) const
+bool SMESHGUI_PreVisualObj::GetEdgeNodes( const smIdType theElemId,
+                                          const int      theEdgeNum,
+                                          smIdType&      theNodeId1,
+                                          smIdType&      theNodeId2 ) const
 {
   const SMDS_MeshElement* e = myMesh->FindElement( theElemId );
   if ( !e || e->GetType() != SMDSAbs_Face )
@@ -107,24 +107,24 @@ vtkUnstructuredGrid* SMESHGUI_PreVisualObj::GetUnstructuredGrid()
 }
 
 
-vtkIdType SMESHGUI_PreVisualObj::GetNodeObjId( int theVTKID )
+vtkIdType SMESHGUI_PreVisualObj::GetNodeObjId( vtkIdType theVTKID )
 {
   const SMDS_MeshNode* aNode = myMesh->FindNodeVtk( theVTKID );
   return aNode ? aNode->GetID() : -1;
 }
 
-vtkIdType SMESHGUI_PreVisualObj::GetNodeVTKId( int theObjID )
+vtkIdType SMESHGUI_PreVisualObj::GetNodeVTKId( vtkIdType theObjID )
 {
   const SMDS_MeshNode* aNode = myMesh->FindNode( theObjID );
   return aNode ? aNode->GetID() : -1;
 }
 
-vtkIdType SMESHGUI_PreVisualObj::GetElemObjId( int theVTKID )
+vtkIdType SMESHGUI_PreVisualObj::GetElemObjId( vtkIdType theVTKID )
 {
   return this->GetMesh()->FromVtkToSmds(theVTKID);
 }
 
-vtkIdType SMESHGUI_PreVisualObj::GetElemVTKId( int theObjID )
+vtkIdType SMESHGUI_PreVisualObj::GetElemVTKId( vtkIdType theObjID )
 {
   const SMDS_MeshElement* e = myMesh->FindElement(theObjID);
   return e ? e->GetVtkID() : -1;
index 9cd8e4ef52897bf7d13762348be86d779670c906..be3b411f2d5f1d1f0a6fed21de870345760179cd 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -51,18 +51,18 @@ class SMESHGUI_EXPORT SMESHGUI_PreVisualObj : public SMESH_VisualObj
   virtual bool Update( int theIsClear );
   virtual bool NulData() { return false; }
   virtual void UpdateFunctor( const SMESH::Controls::FunctorPtr& theFunctor );
-  virtual int  GetElemDimension( const int theObjId );
-  virtual int  GetNbEntities( const SMDSAbs_ElementType theType) const;
+  virtual int  GetElemDimension( const smIdType theObjId );
+  virtual smIdType  GetNbEntities( const SMDSAbs_ElementType theType) const;
   virtual bool IsValid() const;
-  virtual bool GetEdgeNodes( const int theElemId,
-                             const int theEdgeNum,
-                             int&      theNodeId1,
-                             int&      theNodeId2 ) const;
+  virtual bool GetEdgeNodes( const smIdType theElemId,
+                             const int      theEdgeNum,
+                             smIdType&      theNodeId1,
+                             smIdType&      theNodeId2 ) const;
 
-  virtual vtkIdType GetNodeObjId( int theVTKID );
-  virtual vtkIdType GetNodeVTKId( int theObjID );
-  virtual vtkIdType GetElemObjId( int theVTKID );
-  virtual vtkIdType GetElemVTKId( int theObjID );
+  virtual vtkIdType GetNodeObjId( vtkIdType theVTKID );
+  virtual vtkIdType GetNodeVTKId( vtkIdType theObjID );
+  virtual vtkIdType GetElemObjId( vtkIdType theVTKID );
+  virtual vtkIdType GetElemVTKId( vtkIdType theObjID );
   virtual void                  ClearEntitiesFlags();
   virtual bool                  GetEntitiesFlag();
   virtual unsigned int          GetEntitiesState();
index 13564ea89fc4f1c5707115a679685f9b399bfe9a..73055fb48536b20b9dc006f550f66f06ad528989 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -50,6 +50,8 @@
 
 #include <QtxColorButton.h>
 
+#include "utilities.h"
+
 // Qt includes
 #include <QButtonGroup>
 #include <QCheckBox>
@@ -146,11 +148,21 @@ SMESHGUI_Preferences_ScalarBarDlg::SMESHGUI_Preferences_ScalarBarDlg( SMESHGUI*
   myLogarithmicCheck->setText(tr("SMESH_LOGARITHMIC_SCALARBAR"));
   myLogarithmicCheck->setChecked(false);
 
+  myThresholdCheck = new QCheckBox (myRangeGrp);
+  myThresholdCheck->setText(tr("SMESH_TRESHOLD_SCALARBAR"));
+  myThresholdCheck->setChecked(false);
+
+  myWireframeOffCheck = new QCheckBox (myRangeGrp);
+  myWireframeOffCheck->setText(tr("SMESH_WIREFRAME_OFF_SCALARBAR"));
+  myWireframeOffCheck->setChecked(false);
+
   myRangeGrpLayout->addWidget( new QLabel( tr( "SMESH_RANGE_MIN" ), myRangeGrp ), 0, 0, 1, 1 );
   myRangeGrpLayout->addWidget( myMinEdit, 0, 1, 1, 1 );
   myRangeGrpLayout->addWidget( new QLabel( tr( "SMESH_RANGE_MAX" ), myRangeGrp ), 0, 2, 1, 1 );
   myRangeGrpLayout->addWidget( myMaxEdit, 0, 3, 1, 1 );
-  myRangeGrpLayout->addWidget( myLogarithmicCheck, 1, 0, 1, 4 );
+  myRangeGrpLayout->addWidget( myLogarithmicCheck, 1, 0, 1, 1 );
+  myRangeGrpLayout->addWidget( myThresholdCheck, 1, 1, 1, 1 );
+  myRangeGrpLayout->addWidget( myWireframeOffCheck, 1, 2, 1, 1 );
 
   aTopLayout->addWidget( myRangeGrp );
 
@@ -564,6 +576,9 @@ bool SMESHGUI_Preferences_ScalarBarDlg::onApply()
 
   myLookupTable->SetRange( aMin, aMax );
   myLookupTable->SetNumberOfTableValues(myColorsSpin->value());
+  applyThreshold(aMin, aMax);
+
+  applyWireframeOff();
 
   bool scaleChanged = (myLogarithmicCheck->isChecked() != (myLookupTable->GetScale() == VTK_SCALE_LOG10));
   if (scaleChanged)
@@ -656,8 +671,15 @@ void SMESHGUI_Preferences_ScalarBarDlg::onSelectionChanged()
           myLogarithmicCheck->setChecked(aLookupTable->GetScale() == VTK_SCALE_LOG10);
           //myLogarithmicCheck->setEnabled(range[0] > 1e-07 && range[1] > 1e-07);
           myLogarithmicCheck->setEnabled(range[0] != range[1]);
+
+          myThresholdCheck->setChecked(myActor->IsClipThresholdOn());
+          applyThreshold(range[0], range[1]);
+
+          myWireframeOffCheck->setChecked(myActor->IsWireframeOff());
         }
 
+        applyWireframeOff();
+
         vtkTextProperty* aTitleTextPrp = myScalarBarActor->GetTitleTextProperty();
         double aTColor[3];
         aTitleTextPrp->GetColor( aTColor );
@@ -736,11 +758,19 @@ void SMESHGUI_Preferences_ScalarBarDlg::onSelectionChanged()
 //=================================================================================================
 void SMESHGUI_Preferences_ScalarBarDlg::onMinMaxChanged()
 {
-  double aMin = myMinEdit->text().toDouble();
-  double aMax = myMaxEdit->text().toDouble();
-  bool isLogarithmicEnabled = (aMin > 1e-07 && aMax > 1e-07);
-  myLogarithmicCheck->setChecked(isLogarithmicEnabled);
+  // Check if the min-max range is valid.
+  const double aMin = myMinEdit->text().toDouble();
+  const double aMax = myMaxEdit->text().toDouble();
+  const bool isLogarithmicEnabled = aMin > 1e-07 && aMax > 1e-07; // TODO: is it right validation?
+
+  // The checkbox should be enabled only when the range is valid for it
   myLogarithmicCheck->setEnabled(isLogarithmicEnabled);
+
+  // Change checkbox only if the range is not valid. Otherwise it's on the user decision.
+  if (!isLogarithmicEnabled)
+  {
+    myLogarithmicCheck->setChecked(isLogarithmicEnabled);
+  }
 }
 
 //=================================================================================================
@@ -873,3 +903,27 @@ void SMESHGUI_Preferences_ScalarBarDlg::initScalarBarFromResources()
       DEF_VER_H = mgr->doubleValue("SMESH", name.arg( "height" ));
   }
 }
+
+//=================================================================================================
+/*!
+ *  SMESHGUI_Preferences_ScalarBarDlg::applyThreshold()
+ *
+ *  Hides and shows elements beyond the given min - max range by threshold filter inside the actor.
+ */
+//=================================================================================================
+void SMESHGUI_Preferences_ScalarBarDlg::applyThreshold(double min, double max)
+{
+  myActor->ClipThreshold(myThresholdCheck->isChecked(), min, max);
+}
+
+//=================================================================================================
+/*!
+ *  SMESHGUI_Preferences_ScalarBarDlg::applyWireframeOff()
+ *
+ *  Hides and shows edges' lines.
+ */
+//=================================================================================================
+void SMESHGUI_Preferences_ScalarBarDlg::applyWireframeOff()
+{
+  myActor->SetWireframeOff(myWireframeOffCheck->isChecked());
+}
index 1ff42cfb13e4d8eab201a7ffbc72d76d714e5323..33e1143aa74346915d06cb58bae0e2aaa425670d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -50,6 +50,8 @@ class SalomeApp_IntSpinBox;
 class QtxColorButton;
 class LightApp_SelectionMgr;
 
+class vtkLookupTable;
+
 class SMESHGUI_EXPORT SMESHGUI_Preferences_ScalarBarDlg : public QDialog
 { 
   Q_OBJECT
@@ -70,6 +72,10 @@ public:
                                              const double );
   void                     initScalarBarFromResources();
 
+protected:
+  void                     applyThreshold(double min, double max);
+  void                     applyWireframeOff();
+
 protected slots:
   virtual void             reject();
 
@@ -97,6 +103,8 @@ private:
   QLineEdit*               myMinEdit;
   QLineEdit*               myMaxEdit;
   QCheckBox*               myLogarithmicCheck;
+  QCheckBox*               myThresholdCheck;
+  QCheckBox*               myWireframeOffCheck;
 
   QGroupBox*               myFontGrp;
   QtxColorButton*          myTitleColorBtn;
index 96d2e4c7c5fcdd312eeb50a30b75da9c318c2e42..db2b4e99e9f5ea1bd22156db4be0d86e466ed4ff 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index fe88997c5e3ad67581648d83f45f516cedf3ff23..5133f4cadac2079480620c0a83aafffacba2210b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 721accc01d1167bfa24503edfd0ae55fc0c3276d..da92ec1c11adb9de36a6d2d40456bc2e51ed4abb 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 7dd47e4e22ad53b2248e63fdf2707898014726d9..d24b277c32dae8d26facb33d7e1c59220a442bf8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index e8b27479e6238f279e2be6bcc8b103f9e85f9b48..ac06ff65e800bac702aafed25f218445d825cb77 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -231,7 +231,7 @@ void SMESHGUI_RemoveElementsDlg::ClickOnApply()
     SUIT_OverrideCursor wc;
 
     QStringList aListId = myEditCurrentArgument->text().split(" ", QString::SkipEmptyParts);
-    SMESH::long_array_var anArrayOfIdeces = new SMESH::long_array;
+    SMESH::smIdType_array_var anArrayOfIdeces = new SMESH::smIdType_array;
     anArrayOfIdeces->length(aListId.count());
     for (int i = 0; i < aListId.count(); i++)
       anArrayOfIdeces[i] = aListId[ i ].toInt();
@@ -348,7 +348,7 @@ void SMESHGUI_RemoveElementsDlg::onTextChange(const QString& theNewText)
     if(SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh()){
       Handle(SALOME_InteractiveObject) anIO = myActor->getIO();
       
-      TColStd_MapOfInteger newIndices;
+      SVTK_TVtkIDsMap newIndices;
       
       QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts);
       for (int i = 0; i < aListId.count(); i++) {
index cfbb09c75033d451bdae8d5ca6f6446f8e8d4fd9..200d3f7b4a8373dc0d44a5ad627e131fbb9029af 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
diff --git a/src/SMESHGUI/SMESHGUI_RemoveNodeReconnectionDlg.cxx b/src/SMESHGUI/SMESHGUI_RemoveNodeReconnectionDlg.cxx
new file mode 100644 (file)
index 0000000..5b8eb5b
--- /dev/null
@@ -0,0 +1,485 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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   : SMESHGUI_MakeNodeAtPointDlg.cxx
+// Author : Edward AGAPOV, Open CASCADE S.A.S.
+// SMESH includes
+//
+#include "SMESHGUI_RemoveNodeReconnectionDlg.h"
+
+#include "SMESHGUI.h"
+#include "SMESHGUI_IdValidator.h"
+#include "SMESHGUI_MeshUtils.h"
+#include "SMESHGUI_VTKUtils.h"
+#include "SMESHGUI_MeshEditPreview.h"
+
+#include <SMDS_Mesh.hxx>
+#include <SMESH_Actor.h>
+#include <SMESH_ActorUtils.h>
+#include <SMESH_LogicalFilter.hxx>
+
+// SALOME GUI includes
+#include <LightApp_SelectionMgr.h>
+#include <SALOME_ListIO.hxx>
+#include <SUIT_Desktop.h>
+#include <SVTK_ViewModel.h>
+#include <SVTK_ViewWindow.h>
+#include <SalomeApp_Tools.h>
+#include <SalomeApp_TypeFilter.h>
+#include <SUIT_ResourceMgr.h>
+#include <SUIT_OverrideCursor.h>
+#include <SUIT_MessageBox.h>
+
+// Qt includes
+#include <QApplication>
+#include <QGroupBox>
+#include <QGridLayout>
+#include <QHBoxLayout>
+#include <QVBoxLayout>
+#include <QLineEdit>
+#include <QPushButton>
+#include <QLabel>
+#include <QRadioButton>
+#include <QCheckBox>
+#include <QButtonGroup>
+
+// VTK includes
+#include <vtkProperty.h>
+
+// IDL includes
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_Mesh)
+#include CORBA_SERVER_HEADER(SMESH_MeshEditor)
+
+#define SPACING 6
+#define MARGIN  11
+
+//=======================================================================
+/*!
+ * \brief Dialog to Remove a node with elements re-connection
+ */
+//=======================================================================
+
+SMESHGUI_RemoveNodeReconnectionDlg::SMESHGUI_RemoveNodeReconnectionDlg()
+  : SMESHGUI_Dialog( 0, false, true )
+{
+  setWindowTitle(tr("CAPTION"));
+
+  QVBoxLayout* aDlgLay = new QVBoxLayout (mainFrame());
+  aDlgLay->setMargin(0);
+  aDlgLay->setSpacing(SPACING);
+  myMainFrame = createMainFrame(mainFrame());
+
+  aDlgLay->addWidget(myMainFrame);
+
+  aDlgLay->setStretchFactor(myMainFrame, 1);
+}
+
+//=======================================================================
+// function : createMainFrame()
+// purpose  : Create frame containing dialog's input fields
+//=======================================================================
+
+QWidget* SMESHGUI_RemoveNodeReconnectionDlg::createMainFrame (QWidget* theParent)
+{
+  QWidget* aFrame = new QWidget(theParent);
+
+  // Node to remove
+
+  myNodeToMoveGrp = new QGroupBox(tr("NODE_2REMOVE"), aFrame);
+  myNodeToMoveGrp->setSizePolicy( QSizePolicy( QSizePolicy::Expanding, QSizePolicy::Fixed ) );
+  QLabel* idLabel = new QLabel(tr("NODE_2REMOVE_ID"), myNodeToMoveGrp);
+  myId = new QLineEdit(myNodeToMoveGrp);
+  myId->setValidator(new SMESHGUI_IdValidator(this, 1));
+
+  QGridLayout* myNodeToMoveGrpLayout = new QGridLayout(myNodeToMoveGrp);
+  myNodeToMoveGrpLayout->setSpacing(SPACING);
+  myNodeToMoveGrpLayout->setMargin(MARGIN);
+
+  myNodeToMoveGrpLayout->addWidget( idLabel, 0, 0 );
+  myNodeToMoveGrpLayout->addWidget( myId,    0, 2 );
+
+  // Preview
+
+  myPreviewChkBox = new QCheckBox( tr("PREVIEW"), aFrame);
+
+  QVBoxLayout* aLay = new QVBoxLayout(aFrame);
+  aLay->addWidget(myNodeToMoveGrp);
+  aLay->addWidget(myPreviewChkBox);
+
+  return aFrame;
+}
+
+//================================================================================
+/*!
+ * \brief Constructor
+ */
+//================================================================================
+
+SMESHGUI_RemoveNodeReconnectionOp::SMESHGUI_RemoveNodeReconnectionOp()
+{
+  mySimulation = 0;
+  mySMESHGUI = 0;
+  myDlg = new SMESHGUI_RemoveNodeReconnectionDlg;
+  myFilter = 0;
+  myHelpFileName = "removing_nodes_and_elements.html#removing-nodes-reconnect-anchor";
+
+  myNoPreview = false;
+
+  // connect signals and slots
+  connect(myDlg->myId,            SIGNAL (textChanged(const QString&)),SLOT(redisplayPreview()));
+  connect(myDlg->myPreviewChkBox, SIGNAL (toggled(bool)),              SLOT(redisplayPreview()));
+  connect(myDlg->myId,            SIGNAL (textChanged(const QString&)),SLOT(onTextChange(const QString&)));
+}
+
+//=======================================================================
+// function : startOperation()
+// purpose  : Init dialog fields, connect signals and slots, show dialog
+//=======================================================================
+
+void SMESHGUI_RemoveNodeReconnectionOp::startOperation()
+{
+  myNoPreview = false;
+  myMeshActor = 0;
+
+  // init simulation with a current View
+  if ( mySimulation ) delete mySimulation;
+  mySMESHGUI = getSMESHGUI();
+  mySimulation = new SMESHGUI_MeshEditPreview(SMESH::GetViewWindow( mySMESHGUI ) );
+  connect(mySMESHGUI, SIGNAL (SignalActivatedViewManager()), this, SLOT(onOpenView()));
+  connect(mySMESHGUI, SIGNAL (SignalCloseView()), this, SLOT(onCloseView()));
+  vtkProperty* aProp = vtkProperty::New();
+  aProp->SetRepresentationToWireframe();
+  aProp->SetColor(250, 0, 250);
+  aProp->SetPointSize(5);
+  aProp->SetLineWidth( SMESH::GetFloat("SMESH:element_width",1) + 1);
+  mySimulation->GetActor()->SetProperty(aProp);
+  aProp->Delete();
+
+  // SalomeApp_TypeFilter depends on a current study
+  if ( myFilter ) delete myFilter;
+  // QList<SUIT_SelectionFilter*> filters;
+  // filters.append( new SalomeApp_TypeFilter((SalomeApp_Study*)study(), "SMESH" ));
+  // myFilter = new SMESH_LogicalFilter( filters, SMESH_LogicalFilter::LO_OR );
+
+  // IPAL19360
+  SMESHGUI_SelectionOp::startOperation(); // this method should be called only after filter creation
+  myDlg->myId->setText("");
+
+  myDlg->show();
+
+  onSelectionDone(); // init myMeshActor
+}
+
+//================================================================================
+/*!
+ * \brief Stops operation
+ */
+//================================================================================
+
+void SMESHGUI_RemoveNodeReconnectionOp::stopOperation()
+{
+  myNoPreview = true;
+  if ( mySimulation )
+  {
+    mySimulation->SetVisibility(false);
+    delete mySimulation;
+    mySimulation = 0;
+  }
+  if ( myMeshActor ) {
+    myMeshActor = 0;
+  }
+  SMESH::SetPointRepresentation( false );
+  SMESH::RepaintCurrentView();
+
+  disconnect(mySMESHGUI, SIGNAL (SignalActivatedViewManager()), this, SLOT(onOpenView()));
+  disconnect(mySMESHGUI, SIGNAL (SignalCloseView()),            this, SLOT(onCloseView()));
+  //selectionMgr()->removeFilter( myFilter );
+  SMESHGUI_SelectionOp::stopOperation();
+}
+
+//================================================================================
+/*!
+ * \brief perform it's intention action: move or create a node
+ */
+//================================================================================
+
+bool SMESHGUI_RemoveNodeReconnectionOp::onApply()
+{
+  if( SMESHGUI::isStudyLocked() )
+    return false;
+
+  if ( !myMeshActor ) {
+    SUIT_MessageBox::warning( dlg(), tr( "SMESH_WRN_WARNING" ), tr("INVALID_MESH") );
+    dlg()->show();
+    return false;
+  }
+
+  QString msg;
+  if ( !isValid( msg ) ) { // node id is invalid
+    if ( !msg.isEmpty() )
+      SUIT_MessageBox::warning( dlg(), tr( "SMESH_WRN_WARNING" ), tr("INVALID_ID") );
+    dlg()->show();
+    return false;
+  }
+
+  try {
+    SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO( myMeshActor->getIO() );
+    if ( aMesh->_is_nil() )
+    {
+      SUIT_MessageBox::information(SMESHGUI::desktop(), tr("SMESH_ERROR"), tr("SMESHG_NO_MESH") );
+      return true;
+    }
+    SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor();
+    if ( aMeshEditor->_is_nil() )
+      return true;
+
+    bool ok;
+    int anId = myDlg->myId->text().toInt( &ok );
+    myDlg->myId->setText( "" );
+
+    aMeshEditor->RemoveNodeWithReconnection( anId );
+
+    SALOME_ListIO aList;
+    selectionMgr()->setSelectedObjects(aList,false);
+    aList.Append( myMeshActor->getIO() );
+    selectionMgr()->setSelectedObjects(aList,false);
+    SMESH::UpdateView();
+    SMESHGUI::Modified();
+
+  }
+  catch (const SALOME::SALOME_Exception& S_ex) {
+    SalomeApp_Tools::QtCatchCorbaException(S_ex);
+  }
+  catch (...) {
+  }
+
+  return true;
+}
+
+//================================================================================
+/*!
+ * \brief Check selected node id validity
+ */
+//================================================================================
+
+bool SMESHGUI_RemoveNodeReconnectionOp::isValid( QString& msg )
+{
+  bool ok = true;
+  if ( myMeshActor )
+  {
+    ok = false;
+    int id = myDlg->myId->text().toInt();
+    if ( id > 0 )
+      if ( SMDS_Mesh* aMesh = myMeshActor->GetObject()->GetMesh() )
+        ok = aMesh->FindNode( id );
+    if ( !ok )
+      msg += tr("INVALID_ID") + "\n";
+  }
+
+  return ok;
+}
+
+//================================================================================
+/*!
+ * \brief SLOT called when selection changed
+ */
+//================================================================================
+
+void SMESHGUI_RemoveNodeReconnectionOp::onSelectionDone()
+{
+  if ( !myDlg->isVisible() || !myDlg->isEnabled() )
+    return;
+
+  myDlg->myId->setText("");
+  myNoPreview = true;
+  try
+  {
+    SALOME_ListIO aList;
+    selectionMgr()->selectedObjects( aList, SVTK_Viewer::Type() );
+    if ( aList.Extent() != 1)
+      return;
+    Handle(SALOME_InteractiveObject) anIO = aList.First();
+    myMeshActor = SMESH::FindActorByEntry( anIO->getEntry() );
+
+    QString aString;
+    int nbElems = SMESH::GetNameOfSelectedElements( selector(), anIO, aString );
+    if ( nbElems == 1 )
+      myDlg->myId->setText( aString );
+
+  } catch (...) {
+  }
+
+  myNoPreview = false;
+  redisplayPreview();
+}
+
+//================================================================================
+/*!
+ * \brief update preview
+ */
+//================================================================================
+
+void SMESHGUI_RemoveNodeReconnectionOp::redisplayPreview()
+{
+  if ( myNoPreview )
+    return;
+  myNoPreview = true;
+
+  if ( !myMeshActor )
+    onSelectionDone();
+
+  SMESH::MeshPreviewStruct_var aMeshPreviewStruct;
+
+  QString msg;
+  if ( myMeshActor && isValid( msg ) && myDlg->myPreviewChkBox->isChecked() )
+    try {
+      SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO( myMeshActor->getIO() );
+      if ( !aMesh->_is_nil() )
+      {
+        SMESH::SMESH_MeshEditor_var aPreviewer = aMesh->GetMeshEditPreviewer();
+        if (!aPreviewer->_is_nil())
+        {
+          int anId = myDlg->myId->text().toInt();
+          aPreviewer->RemoveNodeWithReconnection( anId );
+          aMeshPreviewStruct = aPreviewer->GetPreviewData();
+        }
+      }
+    }
+    catch (...) {
+    }
+
+  if (!mySimulation)
+    mySimulation = new SMESHGUI_MeshEditPreview(SMESH::GetViewWindow( mySMESHGUI ));
+
+  // display data
+  if ( & aMeshPreviewStruct.in() )
+  {
+    mySimulation->SetData( aMeshPreviewStruct.in() );
+  }
+  else
+  {
+    mySimulation->SetVisibility( false );
+  }
+
+  myNoPreview = false;
+}
+
+//=================================================================================
+/*!
+ * \brief SLOT called when the viewer opened
+ */
+//=================================================================================
+
+void SMESHGUI_RemoveNodeReconnectionOp::onOpenView()
+{
+  if ( mySimulation )
+  {
+    mySimulation->SetVisibility( false );
+    SMESH::SetPointRepresentation( false );
+  }
+  else
+  {
+    mySimulation = new SMESHGUI_MeshEditPreview(SMESH::GetViewWindow( mySMESHGUI ));
+  }
+}
+
+//=================================================================================
+/*!
+ * \brief SLOT called when the viewer closed
+ */
+//=================================================================================
+
+void SMESHGUI_RemoveNodeReconnectionOp::onCloseView()
+{
+  delete mySimulation;
+  mySimulation = 0;
+}
+
+//================================================================================
+/*!
+ * \brief SLOT called when the node id is manually changed
+ */
+//================================================================================
+
+void SMESHGUI_RemoveNodeReconnectionOp::onTextChange( const QString& theText )
+{
+  if( myMeshActor )
+  {
+    if( SMDS_Mesh* aMesh = myMeshActor->GetObject()->GetMesh() )
+    {
+      Handle(SALOME_InteractiveObject) anIO = myMeshActor->getIO();
+      SALOME_ListIO aList;
+      aList.Append( anIO );
+      selectionMgr()->setSelectedObjects( aList, false );
+
+      if ( const SMDS_MeshNode* aNode = aMesh->FindNode( theText.toInt() ))
+      {
+        SVTK_TVtkIDsMap aListInd;
+        aListInd.Add( FromSmIdType<int>( aNode->GetID()) );
+        selector()->AddOrRemoveIndex( anIO, aListInd, false );
+        if( SVTK_ViewWindow* aViewWindow = SMESH::GetViewWindow( SMESHGUI::GetSMESHGUI() ) )
+          aViewWindow->highlight( anIO, true, true );
+      }
+    }
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Activate Node selection
+ */
+//================================================================================
+
+void SMESHGUI_RemoveNodeReconnectionOp::activateSelection()
+{
+  selectionMgr()->clearFilters();
+  SMESH::SetPointRepresentation( true );
+  //selectionMgr()->installFilter( myFilter );
+  setSelectionMode( NodeSelection );
+}
+
+//================================================================================
+/*!
+ * \brief Destructor
+ */
+//================================================================================
+
+SMESHGUI_RemoveNodeReconnectionOp::~SMESHGUI_RemoveNodeReconnectionOp()
+{
+  if ( myDlg )        delete myDlg;
+  if ( mySimulation ) delete mySimulation;
+  if ( myFilter )     delete myFilter;
+}
+
+//================================================================================
+/*!
+ * \brief Gets dialog of this operation
+ * \retval LightApp_Dialog* - pointer to dialog of this operation
+ */
+//================================================================================
+
+LightApp_Dialog* SMESHGUI_RemoveNodeReconnectionOp::dlg() const
+{
+  return myDlg;
+}
+
diff --git a/src/SMESHGUI/SMESHGUI_RemoveNodeReconnectionDlg.h b/src/SMESHGUI/SMESHGUI_RemoveNodeReconnectionDlg.h
new file mode 100644 (file)
index 0000000..3b9fa4a
--- /dev/null
@@ -0,0 +1,110 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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   : SMESHGUI_RemoveNodeReconnectionDlg.h
+// Author : Edward AGAPOV, Open CASCADE S.A.S.
+//
+#ifndef __SMESHGUI_RemoveNodeReconnection_HXX__
+#define __SMESHGUI_RemoveNodeReconnection_HXX__
+
+#include "SMESHGUI_Dialog.h"
+#include "SMESHGUI_SelectionOp.h"
+
+class QButtonGroup;
+class QCheckBox;
+class QGroupBox;
+class QLineEdit;
+class QPushButton;
+class QRadioButton;
+class SMESHGUI_SpinBox;
+class SMESHGUI_MeshEditPreview;
+class SMESHGUI_RemoveNodeReconnectionDlg;
+
+/*!
+ * \brief Remove a node with elements re-connection
+ */
+class SMESHGUI_EXPORT SMESHGUI_RemoveNodeReconnectionOp: public SMESHGUI_SelectionOp
+{
+  Q_OBJECT
+
+public:
+  SMESHGUI_RemoveNodeReconnectionOp();
+  virtual ~SMESHGUI_RemoveNodeReconnectionOp();
+
+  virtual LightApp_Dialog*       dlg() const;  
+
+protected:
+
+  virtual void                   startOperation();
+  virtual void                   stopOperation();
+
+  virtual void                   activateSelection();
+
+  bool                           isValid( QString& );
+
+protected slots:
+  virtual bool                   onApply();
+
+private slots:
+  void                           onSelectionDone();
+  void                           redisplayPreview();
+  void                           onTextChange( const QString& );
+  void                           onOpenView();
+  void                           onCloseView();
+
+private:
+
+  SMESHGUI_RemoveNodeReconnectionDlg*  myDlg;
+
+  SUIT_SelectionFilter*         myFilter;
+  SMESHGUI*                     mySMESHGUI;
+  SMESHGUI_MeshEditPreview*     mySimulation;
+  SMESH_Actor*                  myMeshActor;
+  bool                          myNoPreview;
+};
+
+/*!
+ * \brief Dialog to make a mesh pass through a point
+ */
+
+class SMESHGUI_EXPORT SMESHGUI_RemoveNodeReconnectionDlg : public SMESHGUI_Dialog
+{
+  Q_OBJECT
+
+public:
+  SMESHGUI_RemoveNodeReconnectionDlg();
+
+private:
+  QWidget*                      createMainFrame( QWidget* );
+
+  QWidget*                      myMainFrame;
+  QGroupBox*                    myNodeToMoveGrp;
+  QLineEdit*                    myId;
+  QCheckBox*                    myPreviewChkBox;
+
+  QString                       myHelpFileName;
+
+  friend class SMESHGUI_RemoveNodeReconnectionOp;
+
+};
+
+#endif // SMESHGUI_RemoveNodeReconnectionDLG_H
index c86b24a78305fec443fbbdd1fa236d93dafdeb33..5c0555d2b7e9371bc9b9c8054f5f0ef1ced1e1af 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -234,7 +234,7 @@ void SMESHGUI_RemoveNodesDlg::ClickOnApply()
 
   if (myNbOkNodes) {
     QStringList aListId = myEditCurrentArgument->text().split(" ", QString::SkipEmptyParts);
-    SMESH::long_array_var anArrayOfIdeces = new SMESH::long_array;
+    SMESH::smIdType_array_var anArrayOfIdeces = new SMESH::smIdType_array;
     anArrayOfIdeces->length(aListId.count());
     for (int i = 0; i < aListId.count(); i++)
       anArrayOfIdeces[i] = aListId[ i ].toInt();
@@ -356,7 +356,7 @@ void SMESHGUI_RemoveNodesDlg::onTextChange(const QString& theNewText)
     if(SMDS_Mesh* aMesh = myActor->GetObject()->GetMesh()){
       Handle(SALOME_InteractiveObject) anIO = myActor->getIO();
            
-      TColStd_MapOfInteger newIndices;
+      SVTK_TVtkIDsMap newIndices;
       
       QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts);
       for (int i = 0; i < aListId.count(); i++) {
index 12b04426b8ecfb044b343954724370b93cdbcfab..d123c5667230dcb92072a59fc37767fe44b36462 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 876bee2624e6d3a82c6c473e7e426324dffd0b89..867edba8c06d3d8d1f5961dc2c617ff2701a5220 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 98700d517871458fd5bdac680c3df9e83f21d607..8b9ab851cd6c80db9a40bf59e5c4149f9e8698da 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 8c6d52952a24a9bf2886a63a54730bd3f2a302ba..f67d6465659a6ca133611a7b64177f0cb704353b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -81,8 +81,6 @@
 #include <vtkProperty.h>
 
 // IDL includes
-#include <SALOMEconfig.h>
-#include CORBA_SERVER_HEADER(SMESH_Mesh)
 #include CORBA_SERVER_HEADER(SMESH_MeshEditor)
 
 // std
@@ -91,8 +89,8 @@
 #define SPACING 6
 #define MARGIN  11
 
-enum { CONSTRUCTOR_POINT=0, CONSTRUCTOR_FACE, CONSTRUCTOR_VOLUME,
-       EObject, EPoint, EFace, EDirection, EVolumes };
+enum { CONSTRUCTOR_POINT=0, CONSTRUCTOR_FACE, CONSTRUCTOR_FACE_GROUPS, CONSTRUCTOR_VOLUME,
+       EObject, EPoint, EFace, EDirection, ERefGroups };
 
 //=======================================================================
 /*!
@@ -130,6 +128,7 @@ QWidget* SMESHGUI_ReorientFacesDlg::createMainFrame (QWidget* theParent)
 
   QPixmap iconReoriPoint (resMgr()->loadPixmap("SMESH", tr("ICON_DLG_REORIENT2D_POINT")));
   QPixmap iconReoriFace  (resMgr()->loadPixmap("SMESH", tr("ICON_DLG_REORIENT2D_FACE")));
+  QPixmap iconReoriGroups(resMgr()->loadPixmap("SMESH", tr("ICON_DLG_REORIENT2D_GROUPS")));
   QPixmap iconReoriVolum (resMgr()->loadPixmap("SMESH", tr("ICON_DLG_REORIENT2D_VOLUME")));
 
   QGroupBox* aConstructorBox = new QGroupBox(tr("REORIENT_FACES"), aFrame);
@@ -149,6 +148,11 @@ QWidget* SMESHGUI_ReorientFacesDlg::createMainFrame (QWidget* theParent)
   aConstructorGrpLayout->addWidget(aFaceBut);
   myConstructorGrp->addButton(aFaceBut, CONSTRUCTOR_FACE);
 
+  QRadioButton* aGroupBut= new QRadioButton(aConstructorBox);
+  aGroupBut->setIcon(iconReoriGroups);
+  aConstructorGrpLayout->addWidget(aGroupBut);
+  myConstructorGrp->addButton(aGroupBut, CONSTRUCTOR_FACE_GROUPS);
+
   QRadioButton* aVolBut= new QRadioButton(aConstructorBox);
   aVolBut->setIcon(iconReoriVolum);
   aConstructorGrpLayout->addWidget(aVolBut);
@@ -162,9 +166,10 @@ QWidget* SMESHGUI_ReorientFacesDlg::createMainFrame (QWidget* theParent)
   createObject( tr("POINT")    , aFrame, EPoint );
   createObject( tr("FACE")     , aFrame, EFace );
   createObject( tr("DIRECTION"), aFrame, EDirection );
-  createObject( tr("VOLUMES"),   aFrame, EVolumes );
-  setNameIndication( EObject, OneName );
+  createObject( tr("VOLUMES"),   aFrame, ERefGroups );
+  setNameIndication( EObject, ListOfNames );
   setNameIndication( EFace, OneName );
+  setNameIndication( ERefGroups, ListOfNames );
   setReadOnly( EFace, false );
   if ( QLineEdit* le = qobject_cast<QLineEdit*>( objectWg( EFace, Control ) ))
     le->setValidator( new SMESHGUI_IdValidator( this,1 ));
@@ -174,7 +179,6 @@ QWidget* SMESHGUI_ReorientFacesDlg::createMainFrame (QWidget* theParent)
   objectWg( EObject   , Label )->setFixedWidth( width );
   objectWg( EPoint    , Label )->setFixedWidth( width );
   objectWg( EFace     , Label )->setFixedWidth( width );
-  objectWg( EVolumes  , Label )->setFixedWidth( width );
 
   myOutsideChk = new QCheckBox( tr("OUTSIDE_VOLUME_NORMAL"), aFrame);
   myOutsideChk->setChecked( true );
@@ -246,14 +250,14 @@ QWidget* SMESHGUI_ReorientFacesDlg::createMainFrame (QWidget* theParent)
   aFaceGrpLayout->addWidget( objectWg( EFace, Btn ) );
   aFaceGrpLayout->addWidget( objectWg( EFace, Control ) );
 
-  myVolumFrm = new QFrame(aFrame);
-  QGridLayout* aVolumGrpLayout = new QGridLayout(myVolumFrm);
-  aVolumGrpLayout->setMargin(0);
-  aVolumGrpLayout->setSpacing(SPACING);
-  aVolumGrpLayout->addWidget( objectWg( EVolumes, Label ),   0, 0 );
-  aVolumGrpLayout->addWidget( objectWg( EVolumes, Btn ),     0, 1 );
-  aVolumGrpLayout->addWidget( objectWg( EVolumes, Control ), 0, 2 );
-  aVolumGrpLayout->addWidget( myOutsideChk,                  1, 0, 1, 3 );
+  myRefGroupFrm = new QFrame(aFrame);
+  QGridLayout* aRefGrpLayout = new QGridLayout(myRefGroupFrm);
+  aRefGrpLayout->setMargin(0);
+  aRefGrpLayout->setSpacing(SPACING);
+  aRefGrpLayout->addWidget( objectWg( ERefGroups, Label ),   0, 0 );
+  aRefGrpLayout->addWidget( objectWg( ERefGroups, Btn ),     0, 1 );
+  aRefGrpLayout->addWidget( objectWg( ERefGroups, Control ), 0, 2 );
+  aRefGrpLayout->addWidget( myOutsideChk,                    1, 0, 1, 3 );
 
   myDirFrm = new QFrame(aFrame);
   QHBoxLayout* aDirectGrpLayout = new QHBoxLayout(myDirFrm);
@@ -273,7 +277,7 @@ QWidget* SMESHGUI_ReorientFacesDlg::createMainFrame (QWidget* theParent)
   QVBoxLayout* anOrientGrpLayout = new QVBoxLayout ( anOrientGrp );
   anOrientGrpLayout->addWidget(myPointFrm);
   anOrientGrpLayout->addWidget(myFaceFrm);
-  anOrientGrpLayout->addWidget(myVolumFrm);
+  anOrientGrpLayout->addWidget(myRefGroupFrm);
   anOrientGrpLayout->addWidget(myDirFrm);
   
 
@@ -298,7 +302,7 @@ void SMESHGUI_ReorientFacesDlg::constructorChange(int id)
   if ( id == CONSTRUCTOR_FACE )
   {
     myPointFrm->hide();
-    myVolumFrm->hide();
+    myRefGroupFrm->hide();
     myFaceFrm->show();
     myDirFrm->show();
     activateObject( EFace );
@@ -306,25 +310,57 @@ void SMESHGUI_ReorientFacesDlg::constructorChange(int id)
   else if ( id == CONSTRUCTOR_POINT )
   {
     myFaceFrm->hide();
-    myVolumFrm->hide();
+    myRefGroupFrm->hide();
     myPointFrm->show();
     myDirFrm->show();
     activateObject( EPoint );
   }
-  else // CONSTRUCTOR_VOLUME
+  else // CONSTRUCTOR_VOLUME || CONSTRUCTOR_FACE_GROUPS
   {
     myFaceFrm->hide();
     myPointFrm->hide();
     myDirFrm->hide();
-    myVolumFrm->show();
-    activateObject( EVolumes );
+    myOutsideChk->setVisible( id == CONSTRUCTOR_VOLUME );
+    myRefGroupFrm->show();
+    QAbstractButton* refButton = qobject_cast<QAbstractButton*>( objectWg( ERefGroups, Btn ));
+    refButton->setChecked( false ); // force ERefGroups activation
+    activateObject( ERefGroups );
+    setLabel( ERefGroups, id == CONSTRUCTOR_VOLUME ? "VOLUMES" : "REF_GROUPS" );
+  }
+
+  // minimize width of labels
+  QFontMetrics font = objectWg( EDirection, Label )->fontMetrics();
+  int width = 0;
+  for ( int obj = EObject; obj <= ERefGroups; ++obj )
+  {
+    QLabel* label = qobject_cast< QLabel* >( objectWg( obj, Label ));
+    if ( label->isVisible() )
+      width = std::max( width, font.width( label->text() ));
   }
+
+  for ( int obj = EObject; obj <= ERefGroups; ++obj )
+  {
+    QWidget* label = objectWg( obj, Label );
+    if ( label->isVisible() )
+      label->setFixedWidth( width );
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Set object label
+ */
+//================================================================================
+
+void SMESHGUI_ReorientFacesDlg::setLabel( int object, const char* text )
+{
+  qobject_cast< QLabel* >( objectWg( object, Label ))->setText( tr( text ));
 }
 
 //================================================================================
 /*!
  * \brief Constructor
-*/
+ */
 //================================================================================
 
 SMESHGUI_ReorientFacesOp::SMESHGUI_ReorientFacesOp()
@@ -336,16 +372,16 @@ SMESHGUI_ReorientFacesOp::SMESHGUI_ReorientFacesOp()
   myDlg = new SMESHGUI_ReorientFacesDlg;
   myDlg->constructorChange( CONSTRUCTOR_POINT );
 
+  myRefGroupFilter   = new SMESH_TypeFilter( SMESH::GROUP_VOLUME );
+  myRefSubMeshFilter = new SMESH_TypeFilter( SMESH::SUBMESH_SOLID );
+  myRefMeshFilter    = new SMESH_TypeFilter( SMESH::MESH );
+
+  myObjects   = new SMESH::ListOfIDSources();
+  myRefGroups = new SMESH::ListOfIDSources();
+
   // connect signals and slots
   connect( myDlg->objectWg( EFace, LightApp_Dialog::Control ), SIGNAL(textChanged(const QString&)),
            this, SLOT(onTextChange(const QString&)));
-  // connect(myDlg->myX, SIGNAL (valueChanged(double)), this, SLOT(redisplayPreview()));
-  // connect(myDlg->myY, SIGNAL (valueChanged(double)), this, SLOT(redisplayPreview()));
-  // connect(myDlg->myZ, SIGNAL (valueChanged(double)), this, SLOT(redisplayPreview()));
-  // connect(myDlg->myDX, SIGNAL (valueChanged(double)), this, SLOT(redisplayPreview()));
-  // connect(myDlg->myDY, SIGNAL (valueChanged(double)), this, SLOT(redisplayPreview()));
-  // connect(myDlg->myDZ, SIGNAL (valueChanged(double)), this, SLOT(redisplayPreview()));
-
 }
 
 //=======================================================================
@@ -357,23 +393,14 @@ void SMESHGUI_ReorientFacesOp::startOperation()
 {
   myObjectActor = 0;
 
-  // init simulation with a current View
-  //if ( myVectorPreview ) delete myVectorPreview;
-  // myVectorPreview = new SMESHGUI_MeshEditPreview(SMESH::GetViewWindow( getSMESHGUI() ));
-  // vtkProperty* aProp = vtkProperty::New();
-  // aProp->SetRepresentationToWireframe();
-  // aProp->SetColor(250, 0, 250);
-  // aProp->SetPointSize(5);
-  // aProp->SetLineWidth( SMESH::GetFloat("SMESH:element_width",1) + 1);
-  // myVectorPreview->GetActor()->SetProperty(aProp);
-  // aProp->Delete();
-
   SMESHGUI_SelectionOp::startOperation();
 
   myDlg->show();
 
-  mySelectionMode = 0;
+  mySelectionMode = EObject;
   myDlg->activateObject( EObject );
+
+  selectionDone();
 }
 
 //================================================================================
@@ -384,8 +411,8 @@ void SMESHGUI_ReorientFacesOp::startOperation()
 
 void SMESHGUI_ReorientFacesOp::stopOperation()
 {
-  //myVectorPreview->SetVisibility(false);
-  if ( myObjectActor ) {
+  if ( myObjectActor )
+  {
     myObjectActor->SetPointRepresentation(false);
     SMESH::RepaintCurrentView();
     myObjectActor = 0;
@@ -403,31 +430,43 @@ void SMESHGUI_ReorientFacesOp::stopOperation()
 void SMESHGUI_ReorientFacesOp::onActivateObject( int what )
 {
   if ( what == mySelectionMode )
-    return;
-  mySelectionMode = what;
-  switch ( mySelectionMode )
   {
-  case EPoint:
-  case EDirection:
-    SMESH::SetPointRepresentation(true);
-    setSelectionMode( NodeSelection );
-    SMESH::SetPickable();
-    break;
-  case EObject:
-  case EVolumes:
-    SMESH::SetPointRepresentation(false);
-    setSelectionMode( ActorSelection );
-    break;
-  case EFace:
-    SMESH::SetPointRepresentation(false);
-    setSelectionMode( FaceSelection );
-    if ( myObjectActor )
-      SMESH::SetPickable( myObjectActor );
-    else
+    if ( what == ERefGroups )
+      setRefFiltersByConstructor();
+  }
+  else
+  {
+    mySelectionMode = what;
+    switch ( mySelectionMode )
+    {
+    case EPoint:
+    case EDirection:
+      SMESH::SetPointRepresentation(true);
+      setSelectionMode( NodeSelection );
       SMESH::SetPickable();
-    break;
+      break;
+    case EObject:
+      SMESH::SetPointRepresentation(false);
+      setSelectionMode( ActorSelection );
+      break;
+    case ERefGroups:
+      SMESH::SetPointRepresentation(false);
+      setSelectionMode( ActorSelection );
+      setRefFiltersByConstructor();
+      break;
+    case EFace:
+      SMESH::SetPointRepresentation(false);
+      setSelectionMode( FaceSelection );
+      if ( myObjectActor )
+        SMESH::SetPickable( myObjectActor );
+      else
+        SMESH::SetPickable();
+      break;
+    }
   }
   SMESHGUI_SelectionOp::onActivateObject( what );
+
+  myDlg->setLabel( EObject, onlyOneObjAllowed() ? "OBJECT" : "OBJECTS" );
 }
 
 //================================================================================
@@ -448,12 +487,10 @@ SUIT_SelectionFilter* SMESHGUI_ReorientFacesOp::createFilter( const int what ) c
       filters.append( new SMESH_TypeFilter( SMESH::GROUP_FACE ));
       return new SMESH_LogicalFilter( filters, SMESH_LogicalFilter::LO_OR );
     }
-  case EVolumes:
+  case ERefGroups:
     {
       QList<SUIT_SelectionFilter*> filters;
-      filters.append( new SMESH_TypeFilter( SMESH::MESH ));
-      filters.append( new SMESH_TypeFilter( SMESH::SUBMESH_SOLID ));
-      filters.append( new SMESH_TypeFilter( SMESH::GROUP_VOLUME ));
+      filters <<  myRefGroupFilter << myRefSubMeshFilter << myRefMeshFilter;
       return new SMESH_LogicalFilter( filters, SMESH_LogicalFilter::LO_OR );
     }
   case EPoint:
@@ -472,6 +509,28 @@ SUIT_SelectionFilter* SMESHGUI_ReorientFacesOp::createFilter( const int what ) c
   return NULL;
 }
 
+//================================================================================
+/*!
+ * \brief Switch between selection of faces and volumes according to the constructor
+ */
+//================================================================================
+
+void SMESHGUI_ReorientFacesOp::setRefFiltersByConstructor()
+{
+  if ( constructorID() == CONSTRUCTOR_VOLUME )
+  {
+    myRefMeshFilter   ->setType( SMESH::MESH );// SMESH::NB_SMESH_TYPES
+    myRefGroupFilter  ->setType( SMESH::GROUP_VOLUME );
+    myRefSubMeshFilter->setType( SMESH::SUBMESH_SOLID );
+  }
+  else
+  {
+    myRefMeshFilter   ->setType( SMESH::NB_SMESH_TYPES ); // mesh not allowed
+    myRefGroupFilter  ->setType( SMESH::GROUP_FACE );
+    myRefSubMeshFilter->setType( SMESH::SUBMESH_FACE );
+  }
+}
+
 //================================================================================
 /*!
  * \brief get data from selection
@@ -483,12 +542,6 @@ void SMESHGUI_ReorientFacesOp::selectionDone()
   if ( !myDlg->isVisible() || !myDlg->isEnabled() )
     return;
 
-  if ( mySelectionMode == EVolumes )
-  {
-    SMESHGUI_SelectionOp::selectionDone();
-    return;
-  }
-
   myDlg->clearSelection( mySelectionMode );
 
   SALOME_ListIO aList;
@@ -497,6 +550,15 @@ void SMESHGUI_ReorientFacesOp::selectionDone()
   if ( nbSelected == 0 )
     return;
 
+  if ( onlyOneObjAllowed() && nbSelected != 1 )
+    return;
+
+  if ( mySelectionMode == ERefGroups )
+  {
+    SMESHGUI_SelectionOp::selectionDone();
+    return;
+  }
+
   Handle(SALOME_InteractiveObject) anIO = aList.First();
 
   try
@@ -505,35 +567,27 @@ void SMESHGUI_ReorientFacesOp::selectionDone()
     {
     case EObject: { // get an actor of object
 
-      if ( nbSelected == 1 )
-      {
-        myDlg->selectObject( EObject, anIO->getName(), 0, anIO->getEntry(), true );
-        // typeById( aList.First()->getEntry(),
-        //           SMESHGUI_SelectionOp::Object ),
-        myObjectActor = SMESH::FindActorByEntry( anIO->getEntry() );
-      }
+      SMESHGUI_SelectionOp::selectionDone();
+      myObjectActor = SMESH::FindActorByEntry( anIO->getEntry() );
       break;
     }
     case EFace: {  // get a face ID
 
-      if ( nbSelected == 1 )
+      SVTK_TIndexedMapOfVtkId faceIndices;
+      selector()->GetIndex( anIO, faceIndices );
+      if ( faceIndices.Extent() == 1 )
       {
-        TColStd_IndexedMapOfInteger faceIndices;
-        selector()->GetIndex( anIO, faceIndices );
-        if ( faceIndices.Extent() == 1 )
-        {
-          SMESH_Actor* savedActor = myObjectActor;
-          myObjectActor = 0; // to prevent work of onTextChange()
-          myDlg->setObjectText( EFace, QString("%1").arg( faceIndices(1) ));
-          myObjectActor = savedActor;
+        SMESH_Actor* savedActor = myObjectActor;
+        myObjectActor = 0; // to prevent work of onTextChange()
+        myDlg->setObjectText( EFace, QString("%1").arg( faceIndices(1) ));
+        myObjectActor = savedActor;
 
-          if ( !myObjectActor )
-          {
-            myDlg->selectObject( EObject, anIO->getName(), 0, anIO->getEntry(), true );
-            // typeById( aList.First()->getEntry(),
-            //           SMESHGUI_SelectionOp::Object ),
-            myObjectActor = SMESH::FindActorByEntry( anIO->getEntry() );
-          }
+        if ( !myObjectActor )
+        {
+          myDlg->selectObject( EObject, anIO->getName(), 0, anIO->getEntry(), true );
+          // typeById( aList.First()->getEntry(),
+          //           SMESHGUI_SelectionOp::Object ),
+          myObjectActor = SMESH::FindActorByEntry( anIO->getEntry() );
         }
       }
       break;
@@ -541,9 +595,6 @@ void SMESHGUI_ReorientFacesOp::selectionDone()
     case EPoint:
     case EDirection: {  // set XYZ by selected nodes or vertices
 
-      if ( mySelectionMode == EPoint && aList.Extent() > 1 )
-        return;
-
       TColgp_SequenceOfXYZ points;
       for( SALOME_ListIteratorOfListIO anIt( aList ); anIt.More(); anIt.Next() )
       {
@@ -558,7 +609,7 @@ void SMESHGUI_ReorientFacesOp::selectionDone()
         }
         else
         {
-          TColStd_IndexedMapOfInteger nodeIndices;
+          SVTK_TIndexedMapOfVtkId nodeIndices;
           selector()->GetIndex( anIO, nodeIndices );
           if ( nodeIndices.Extent() > 0 && nodeIndices.Extent() <=2 )
           {
@@ -620,7 +671,7 @@ void SMESHGUI_ReorientFacesOp::onTextChange( const QString& theText )
       myDlg->activateObject( EFace );
       myDlg->setObjectText( EFace, theText );
     }
-    TColStd_MapOfInteger ids;
+    SVTK_TVtkIDsMap ids;
     if ( !theText.isEmpty() && theText.toInt() > 0 )
       ids.Add( theText.toInt() );
 
@@ -660,24 +711,30 @@ bool SMESHGUI_ReorientFacesOp::onApply()
   try {
     SUIT_OverrideCursor wc;
 
-    SMESH::SMESH_Mesh_var aMesh = myObject->GetMesh();
+    SMESH::SMESH_Mesh_var aMesh = myObjects[0]->GetMesh();
     if ( aMesh->_is_nil() ) return false;
 
     SMESH::SMESH_MeshEditor_var aMeshEditor = aMesh->GetMeshEditor();
     if (aMeshEditor->_is_nil()) return false;
 
     int aResult = 0;
-    if ( myDlg->myConstructorGrp->checkedId() == CONSTRUCTOR_VOLUME )
+    switch ( constructorID() )
+    {
+    case CONSTRUCTOR_VOLUME:
     {
-      SMESH::ListOfIDSources_var faceGroups = new SMESH::ListOfIDSources;
-      faceGroups->length(1);
-      faceGroups[0] = myObject;
-
       bool outsideNormal = myDlg->myOutsideChk->isChecked();
 
-      aResult = aMeshEditor->Reorient2DBy3D( faceGroups, myVolumeObj, outsideNormal );
+      aResult = aMeshEditor->Reorient2DBy3D( myObjects, myRefGroups[0], outsideNormal );
+
+      break;
+    }
+    case CONSTRUCTOR_FACE_GROUPS:
+    {
+      aResult = aMeshEditor->Reorient2DByNeighbours( myObjects, myRefGroups );
+
+      break;
     }
-    else
+    default:
     {
       SMESH::DirStruct direction;
       direction.PS.x = myDlg->myDX->GetValue();
@@ -685,7 +742,7 @@ bool SMESHGUI_ReorientFacesOp::onApply()
       direction.PS.z = myDlg->myDZ->GetValue();
 
       long face = myDlg->objectText( EFace ).toInt();
-      if ( myDlg->myConstructorGrp->checkedId() == CONSTRUCTOR_POINT )
+      if ( constructorID() == CONSTRUCTOR_POINT )
         face = -1;
 
       SMESH::PointStruct point;
@@ -695,7 +752,8 @@ bool SMESHGUI_ReorientFacesOp::onApply()
 
       aMesh->SetParameters( aParameters.join(":").toUtf8().constData() );
 
-      aResult = aMeshEditor->Reorient2D( myObject, direction, face, point );
+      aResult = aMeshEditor->Reorient2D( myObjects[0], direction, face, point );
+    }
     }
 
     if (aResult)
@@ -726,47 +784,71 @@ bool SMESHGUI_ReorientFacesOp::onApply()
 
 bool SMESHGUI_ReorientFacesOp::isValid( QString& msg )
 {
-  // check object
-  QString objectEntry = myDlg->selectedObject( EObject );
-  _PTR(SObject) pSObject = SMESH::getStudy()->FindObjectID( objectEntry.toUtf8().data() );
-  myObject = SMESH::SMESH_IDSource::_narrow( _CAST( SObject,pSObject )->GetObject() );
-  if ( myObject->_is_nil() )
+  // Check objects
+
+  QStringList objectEntries;
+  myDlg->selectedObject( EObject, objectEntries );
+  if ( objectEntries.size() == 0 )
   {
     msg = tr("NO_OBJECT_SELECTED");
     return false;
   }
-  bool hasFaces = false;
-  SMESH::array_of_ElementType_var types = myObject->GetTypes();
-  for ( size_t i = 0; i < types->length() && !hasFaces; ++i )
-    hasFaces = ( types[i] == SMESH::FACE );
-  if ( !hasFaces )
+  myObjects->length( objectEntries.size() );
+  int nbObj = 0;
+  for ( QString & entry : objectEntries )
+  {
+    SMESH::SMESH_IDSource_var obj = SMESH::EntryToInterface< SMESH::SMESH_IDSource >( entry );
+    if ( !obj->_is_nil() )
+    {
+      bool hasFaces = false;
+      SMESH::array_of_ElementType_var types = obj->GetTypes();
+      for ( size_t i = 0; i < types->length() && !hasFaces; ++i )
+        hasFaces = ( types[i] == SMESH::FACE );
+      if ( hasFaces )
+        myObjects[ nbObj++ ] = SMESH::SMESH_IDSource::_duplicate( obj );
+    }
+  }
+  if ( nbObj == 0 )
   {
     msg = tr("NO_FACES");
     return false;
   }
+  myObjects->length( nbObj );
+
+  // Check volume object or ref faces
 
-  // check volume object
-  if ( myDlg->myConstructorGrp->checkedId() == CONSTRUCTOR_VOLUME )
+  int constructorType = constructorID();
+  if ( constructorType >= CONSTRUCTOR_FACE_GROUPS )
   {
-    objectEntry = myDlg->selectedObject( EVolumes );
-    _PTR(SObject) pSObject = SMESH::getStudy()->FindObjectID( objectEntry.toUtf8().data() );
-    myVolumeObj = SMESH::SObjectToInterface< SMESH::SMESH_IDSource>( pSObject );
-    if ( myVolumeObj->_is_nil() )
+    objectEntries.clear();
+    myDlg->selectedObject( ERefGroups, objectEntries );
+    myRefGroups->length( objectEntries.size() );
+    nbObj = 0;
+    for ( QString & entry : objectEntries )
     {
-      msg = tr("NO_VOLUME_OBJECT_SELECTED");
-      return false;
+      SMESH::SMESH_IDSource_var obj = SMESH::EntryToInterface< SMESH::SMESH_IDSource >( entry );
+      if ( !obj->_is_nil() )
+      {
+        bool hasElems = false;
+        SMESH::ElementType elemType =
+          ( constructorType == CONSTRUCTOR_VOLUME ? SMESH::VOLUME : SMESH::FACE );
+        SMESH::array_of_ElementType_var types = obj->GetTypes();
+        for ( size_t i = 0; i < types->length() && !hasElems; ++i )
+          hasElems = ( types[i] == elemType );
+        if ( hasElems )
+          myRefGroups[ nbObj++ ] = SMESH::SMESH_IDSource::_duplicate( obj );
+      }
     }
-    bool hasVolumes = false;
-    types = myVolumeObj->GetTypes();
-    for ( size_t i = 0; i < types->length() && !hasVolumes; ++i )
-      hasVolumes = ( types[i] == SMESH::VOLUME );
-    if ( !hasVolumes )
+    if ( nbObj == 0 && constructorType == CONSTRUCTOR_VOLUME )
     {
       msg = tr("NO_VOLUMES");
       return false;
     }
+    myRefGroups->length( nbObj );
   }
-  // check vector
+
+  // Check vector
+
   gp_Vec vec( myDlg->myDX->GetValue(),
               myDlg->myDY->GetValue(),
               myDlg->myDZ->GetValue() );
@@ -776,8 +858,9 @@ bool SMESHGUI_ReorientFacesOp::isValid( QString& msg )
     return false;
   }
 
-  // check face ID
-  if ( myDlg->myConstructorGrp->checkedId() == CONSTRUCTOR_FACE )
+  // Check face ID
+
+  if ( constructorID() == CONSTRUCTOR_FACE )
   {
     int faceID = myDlg->objectText( EFace ).toInt();
     bool faceOK = ( faceID > 0 );
@@ -789,8 +872,8 @@ bool SMESHGUI_ReorientFacesOp::isValid( QString& msg )
       }
       else
       {
-        SMESH::SMESH_Mesh_var aMesh = myObject->GetMesh();
-        if ( !aMesh->_is_nil() ) 
+        SMESH::SMESH_Mesh_var aMesh = myObjects[0]->GetMesh();
+        if ( !aMesh->_is_nil() )
           faceOK = ( aMesh->GetElementType( faceID, true ) == SMESH::FACE );
       }
     }
@@ -807,7 +890,7 @@ bool SMESHGUI_ReorientFacesOp::isValid( QString& msg )
 //================================================================================
 /*!
  * \brief Destructor
-*/
+ */
 //================================================================================
 
 SMESHGUI_ReorientFacesOp::~SMESHGUI_ReorientFacesOp()
@@ -828,6 +911,29 @@ LightApp_Dialog* SMESHGUI_ReorientFacesOp::dlg() const
   return myDlg;
 }
 
+//================================================================================
+/*!
+ * \brief ID of a current constructor: CONSTRUCTOR_FACE, CONSTRUCTOR_POINT etc.
+ */
+//================================================================================
+
+int SMESHGUI_ReorientFacesOp::constructorID()
+{
+  return myDlg->myConstructorGrp->checkedId();
+}
+
+//================================================================================
+/*!
+ * \brief Check if selection of multiple objects allowed
+ */
+//================================================================================
+
+bool SMESHGUI_ReorientFacesOp::onlyOneObjAllowed()
+{
+  return (( constructorID() <= CONSTRUCTOR_FACE ) ||
+          ( constructorID() == CONSTRUCTOR_VOLUME && mySelectionMode == ERefGroups ));
+}
+
 //================================================================================
 /*!
  * \brief update preview
@@ -836,110 +942,4 @@ LightApp_Dialog* SMESHGUI_ReorientFacesOp::dlg() const
 
 void SMESHGUI_ReorientFacesOp::redisplayPreview()
 {
-//   SMESH::MeshPreviewStruct_var aMeshPreviewStruct;
-
-//   bool moveShown = false;
-//   if ( myObjectActor)
-//   {
-//     const bool autoSearch = myDlg->myAutoSearchChkBox->isChecked();
-//     const bool preview    = myDlg->myPreviewChkBox->isChecked();
-//     if ( autoSearch )
-//     {
-//       myDlg->myCurrentX->SetValue(0);
-//       myDlg->myCurrentY->SetValue(0);
-//       myDlg->myCurrentZ->SetValue(0);
-//       myDlg->myDX->SetValue(0);
-//       myDlg->myDY->SetValue(0);
-//       myDlg->myDZ->SetValue(0);
-//       myDlg->myId->setText("");
-//     }
-//     QString msg;
-//     if ( autoSearch || isValid( msg ) )
-//     {
-//       try {
-//         SMESH::SMESH_Mesh_var aMesh = SMESH::GetMeshByIO(myObjectActor->getIO());
-//         if (!aMesh->_is_nil()) {
-//           SMESH::SMESH_MeshEditor_var aPreviewer = aMesh->GetMeshEditPreviewer();
-//           if (!aPreviewer->_is_nil())
-//           {
-//             SUIT_OverrideCursor aWaitCursor;
-
-//             int anId = 0;
-//             if ( autoSearch )
-//               anId = aPreviewer->FindNodeClosestTo(myDlg->myX->GetValue(),
-//                                                    myDlg->myY->GetValue(),
-//                                                    myDlg->myZ->GetValue());
-//             else
-//               anId = myDlg->myId->text().toInt();
-
-//             // find id and/or just compute preview
-//             aPreviewer->MoveNode(anId,
-//                                  myDlg->myX->GetValue(),
-//                                  myDlg->myY->GetValue(),
-//                                  myDlg->myZ->GetValue());
-//             if ( autoSearch ) { // set found id
-//               QString idTxt("%1");
-//               if ( anId > 0 )
-//                 idTxt = idTxt.arg( anId );
-//               else
-//                 idTxt = "";
-//               myDlg->myId->setText( idTxt );
-//             }
-
-//             SMESH::double_array* aXYZ = aMesh->GetNodeXYZ( anId );
-//             if( aXYZ && aXYZ->length() >= 3 )
-//             {
-//               double x = aXYZ->operator[](0);
-//               double y = aXYZ->operator[](1);
-//               double z = aXYZ->operator[](2);
-//               double dx = myDlg->myX->GetValue() - x;
-//               double dy = myDlg->myY->GetValue() - y;
-//               double dz = myDlg->myZ->GetValue() - z;
-//               myDlg->myCurrentX->SetValue(x);
-//               myDlg->myCurrentY->SetValue(y);
-//               myDlg->myCurrentZ->SetValue(z);
-//               myDlg->myDX->SetValue(dx);
-//               myDlg->myDY->SetValue(dy);
-//               myDlg->myDZ->SetValue(dz);
-//             }
-
-//             if ( preview ) { // fill preview data
-//               aMeshPreviewStruct = aPreviewer->GetPreviewData();
-//               moveShown = ( anId > 0 );
-//             }
-//           }
-//         }
-//       }catch (...) {
-//       }
-//     }
-//   }
-
-//   if ( !moveShown )
-//   {
-//     aMeshPreviewStruct = new SMESH::MeshPreviewStruct();
-
-//     aMeshPreviewStruct->nodesXYZ.length(1);
-//     aMeshPreviewStruct->nodesXYZ[0].x = myDlg->myX->GetValue();
-//     aMeshPreviewStruct->nodesXYZ[0].y = myDlg->myY->GetValue();
-//     aMeshPreviewStruct->nodesXYZ[0].z = myDlg->myZ->GetValue();
-
-//     aMeshPreviewStruct->elementTypes.length(1);
-//     aMeshPreviewStruct->elementTypes[0].SMDS_ElementType = SMESH::NODE;
-//     aMeshPreviewStruct->elementTypes[0].isPoly = false;
-//     aMeshPreviewStruct->elementTypes[0].nbNodesInElement = 1;
-
-//     aMeshPreviewStruct->elementConnectivities.length(1);
-//     aMeshPreviewStruct->elementConnectivities[0] = 0;
-//   }
-
-//   // display data
-//   if ( & aMeshPreviewStruct.in() )
-//   {
-//     myVectorPreview->SetData(aMeshPreviewStruct.in());
-//   }
-//   else
-//   {
-//     myVectorPreview->SetVisibility(false);
-//   }
-
 }
index 53ff5dab1dbf614f9d5e4df1b5491ed8cda01671..ee56a233e44006fa933ef6ec0687fe2a4a8b639f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #define SMESHGUI_ReorientFacesDlg_H
 
 // SMESH includes
+
 #include "SMESH_SMESHGUI.hxx"
 
 #include "SMESHGUI_Dialog.h"
 #include "SMESHGUI_SelectionOp.h"
 
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_Mesh)
+
 class QButtonGroup;
 class QCheckBox;
 class QLineEdit;
 class SMESHGUI_SpinBox;
 class SMESHGUI_ReorientFacesDlg;
+class SMESH_TypeFilter;
 
-/*!
+/*! ================================================================================
  * \brief Operation to reorient faces according to some criterion
  */
+
 class SMESHGUI_EXPORT SMESHGUI_ReorientFacesOp: public SMESHGUI_SelectionOp
 {
   Q_OBJECT
 
-public:
+ public:
   SMESHGUI_ReorientFacesOp();
   virtual ~SMESHGUI_ReorientFacesOp();
 
   virtual LightApp_Dialog*       dlg() const;
 
-protected:
+ protected:
 
   virtual void                   startOperation();
   virtual void                   stopOperation();
@@ -60,27 +66,35 @@ protected:
   virtual void                   selectionDone();
 
   bool                           isValid( QString& );
+  void                           setRefFiltersByConstructor();
+  int                            constructorID();
+
 
-protected slots:
+ protected slots:
   virtual bool                   onApply();
 
-private slots:
+ private slots:
   virtual void                   onActivateObject( int );
   void                           redisplayPreview();
   void                           onTextChange( const QString& );
+  bool                           onlyOneObjAllowed();
 
-private:
-  SMESHGUI_ReorientFacesDlg*    myDlg;
+ private:
+
+  SMESHGUI_ReorientFacesDlg* myDlg;
+
+  SMESH_Actor*               myObjectActor;
+  int                        mySelectionMode;
 
-  //SMESHGUI_MeshEditPreview*     myVectorPreview;
-  SMESH_Actor*                  myObjectActor;
-  int                           mySelectionMode;
+  SMESH_TypeFilter*          myRefGroupFilter;
+  SMESH_TypeFilter*          myRefSubMeshFilter;
+  SMESH_TypeFilter*          myRefMeshFilter;
 
-  SMESH::SMESH_IDSource_var     myObject;
-  SMESH::SMESH_IDSource_var     myVolumeObj;
+  SMESH::ListOfIDSources_var myObjects;
+  SMESH::ListOfIDSources_var myRefGroups;
 };
 
-/*!
+/*! ================================================================================
  * \brief Dialog to reorient faces according to vector
  */
 
@@ -88,7 +102,7 @@ class SMESHGUI_EXPORT SMESHGUI_ReorientFacesDlg : public SMESHGUI_Dialog
 {
   Q_OBJECT
 
-public:
+ public:
   SMESHGUI_ReorientFacesDlg();
 
 public slots:
@@ -96,12 +110,13 @@ public slots:
 
 private:
   QWidget*                      createMainFrame( QWidget* );
+  void                          setLabel( int object, const char* text );
   
   QButtonGroup*                 myConstructorGrp;
   QFrame*                       myFaceFrm;
   QFrame*                       myPointFrm;
   QFrame*                       myDirFrm;
-  QFrame*                       myVolumFrm;
+  QFrame*                       myRefGroupFrm;
   QCheckBox*                    myOutsideChk;
   SMESHGUI_SpinBox*             myX;
   SMESHGUI_SpinBox*             myY;
index b9b21708f3015a50e7b11f321afe7eccded890bb..04f1a08f0888146bcb3200f6b512572e3c301c5b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -57,7 +57,7 @@
 #include <SVTK_ViewWindow.h>
 #include <SVTK_Selector.h>
 #include <SALOME_ListIO.hxx>
-#include <VTKViewer_CellLocationsArray.h>
+//#include <VTKViewer_CellLocationsArray.h>
 
 // OCCT includes
 #include <TColStd_MapOfInteger.hxx>
@@ -202,13 +202,15 @@ SMESHGUI_RevolutionDlg::SMESHGUI_RevolutionDlg( SMESHGUI* theModule )
   MakeGroupsCheck = new QCheckBox(tr("SMESH_MAKE_GROUPS"), GroupArguments);
   MakeGroupsCheck->setChecked(true);
 
-  GroupArgumentsLayout->addWidget(SelectorWdg,          0, 0, 1, 4);
-  GroupArgumentsLayout->addWidget(GroupAxis,            1, 0, 1, 4);
-  GroupArgumentsLayout->addWidget(GroupAngleBox,        2, 0, 1, 4);
-  GroupArgumentsLayout->addWidget(TextLabelTolerance,   3, 0, 1, 2);
-  GroupArgumentsLayout->addWidget(SpinBox_Tolerance,    3, 2, 1, 2);
-  GroupArgumentsLayout->addWidget(myPreviewCheckBox,    4, 0, 1, 4);
-  GroupArgumentsLayout->addWidget(MakeGroupsCheck,      5, 0, 1, 4);
+  GroupArgumentsLayout->addWidget(SelectorWdg,          0, 0, 3, 4);
+  GroupArgumentsLayout->addWidget(GroupAxis,            0, 4, 1, 4);
+  GroupArgumentsLayout->addWidget(GroupAngleBox,        1, 4, 1, 4);
+  GroupArgumentsLayout->addWidget(TextLabelTolerance,   2, 4, 1, 2);
+  GroupArgumentsLayout->addWidget(SpinBox_Tolerance,    2, 6, 1, 2);
+  GroupArgumentsLayout->addWidget(myPreviewCheckBox,    3, 0, 1, 2);
+  GroupArgumentsLayout->addWidget(MakeGroupsCheck,      3, 2, 1, 2);
+  SelectorWdg->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding));
+  SelectorWdg->setMinimumWidth(320);
 
   SelectorWdg->GetButtonGroup()->addButton( SelectVectorButton );
   SelectorWdg->GetButtonGroup()->addButton( SelectPointButton );
@@ -602,7 +604,7 @@ void SMESHGUI_RevolutionDlg::SelectionIntoArgument()
       return;
 
     Handle(SALOME_InteractiveObject) IO = aList.First();
-    TColStd_IndexedMapOfInteger aMapIndex;
+    SVTK_TIndexedMapOfVtkId aMapIndex;
     mySelector->GetIndex(IO,aMapIndex);
     if ( aMapIndex.Extent() != 1 )
       return;
index 27fb0783b4681416fb69a38f7cf32c0de202323a..5951fc1d7452a2b709c57184e47d466ed0be7f58 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 249cc98e16f5a5f60618e227de829b20db1cf3b6..a261f1d9898133653d5c406546d353561b6a40ca 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -409,7 +409,7 @@ bool SMESHGUI_RotationDlg::ClickOnApply()
   if (myNbOkElements && IsAxisOk()) {
     QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts);
 
-    SMESH::long_array_var anElementsId = new SMESH::long_array;
+    SMESH::smIdType_array_var anElementsId = new SMESH::smIdType_array;
 
     anElementsId->length(aListElementsId.count());
     for (int i = 0; i < aListElementsId.count(); i++)
@@ -644,7 +644,7 @@ void SMESHGUI_RotationDlg::onTextChange (const QString& theNewText)
     if (send == LineEditElements) {
       Handle(SALOME_InteractiveObject) anIO = myActor->getIO();
 
-      TColStd_MapOfInteger newIndices;
+      SVTK_TVtkIDsMap newIndices;
 
       QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts);
       for (int i = 0; i < aListId.count(); i++) {
@@ -1135,7 +1135,7 @@ void SMESHGUI_RotationDlg::onDisplaySimulation( bool toDisplayPreview ) {
   if (myPreviewCheckBox->isChecked() && toDisplayPreview) {
     if(myNbOkElements && isValid() && IsAxisOk()) {
       QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts);
-      SMESH::long_array_var anElementsId = new SMESH::long_array;
+      SMESH::smIdType_array_var anElementsId = new SMESH::smIdType_array;
       
       anElementsId->length(aListElementsId.count());
       for (int i = 0; i < aListElementsId.count(); i++)
index b53a3a79b4c7e5729958a9c9faf7e36172dd068a..310e8af9cd960d0d72b2c53405f1681cb676ccd2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 5d17c49dd360337bb45a920e85b13ac945479201..fce90c2ad53b0c51a92145cb83bdac4d15f5ed7b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -448,7 +448,7 @@ bool SMESHGUI_ScaleDlg::ClickOnApply()
   if (myNbOkElements) {
     QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts);
 
-    SMESH::long_array_var anElementsId = new SMESH::long_array;
+    SMESH::smIdType_array_var anElementsId = new SMESH::smIdType_array;
 
     anElementsId->length(aListElementsId.count());
     for (int i = 0; i < aListElementsId.count(); i++)
@@ -682,7 +682,7 @@ void SMESHGUI_ScaleDlg::onTextChange (const QString& theNewText)
   if (aMesh) {
     Handle(SALOME_InteractiveObject) anIO = myActor->getIO();
 
-    TColStd_MapOfInteger newIndices;
+    SVTK_TVtkIDsMap newIndices;
 
     QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts);
 
@@ -1145,7 +1145,7 @@ void SMESHGUI_ScaleDlg::onDisplaySimulation( bool toDisplayPreview ) {
     if ( myNbOkElements && isValid() ) {
       QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts);
 
-      SMESH::long_array_var anElementsId = new SMESH::long_array;
+      SMESH::smIdType_array_var anElementsId = new SMESH::smIdType_array;
       
       anElementsId->length(aListElementsId.count());
       for (int i = 0; i < aListElementsId.count(); i++)
index 3fe4f0ddbbfadf9399d21088064f5a6f731cea30..988d7001d7dfbac25c20cac44fd0583f9b7a66c2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 77d5abaa23cb68de88c92fac787fb0100e664a88..5669e9eadec03e0b298b6f7d1e487d18b00ea402 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -371,11 +371,13 @@ QString SMESHGUI_Selection::controlMode( int ind ) const
     case SMESH_Actor::eMultiConnection2D:     mode = "eMultiConnection2D";     break;
     case SMESH_Actor::eArea:                  mode = "eArea";                  break;
     case SMESH_Actor::eVolume3D:              mode = "eVolume3D";              break;
+    case SMESH_Actor::eScaledJacobian:        mode = "eScaledJacobian";        break;
     case SMESH_Actor::eMaxElementLength2D:    mode = "eMaxElementLength2D";    break;
     case SMESH_Actor::eMaxElementLength3D:    mode = "eMaxElementLength3D";    break;
     case SMESH_Actor::eTaper:                 mode = "eTaper";                 break;
     case SMESH_Actor::eAspectRatio:           mode = "eAspectRatio";           break;
     case SMESH_Actor::eAspectRatio3D:         mode = "eAspectRatio3D";         break;
+    case SMESH_Actor::eWarping3D:             mode = "eWarping3D";             break;
     case SMESH_Actor::eMinimumAngle:          mode = "eMinimumAngle";          break;
     case SMESH_Actor::eWarping:               mode = "eWarping";               break;
     case SMESH_Actor::eSkew:                  mode = "eSkew";                  break;
@@ -429,6 +431,7 @@ bool SMESHGUI_Selection::isNumFunctor( int ind ) const
     case SMESH_Actor::eMultiConnection2D:
     case SMESH_Actor::eArea:
     case SMESH_Actor::eVolume3D:
+    case SMESH_Actor::eScaledJacobian:
     case SMESH_Actor::eMaxElementLength2D:
     case SMESH_Actor::eMaxElementLength3D:
     case SMESH_Actor::eTaper:
@@ -436,6 +439,7 @@ bool SMESHGUI_Selection::isNumFunctor( int ind ) const
     case SMESH_Actor::eAspectRatio3D:
     case SMESH_Actor::eMinimumAngle:
     case SMESH_Actor::eWarping:
+    case SMESH_Actor::eWarping3D:
     case SMESH_Actor::eSkew:
       result = true;
       break;
index 710cfcf83c880d2d9b85f609d5044c87225608e1..4f3ea7441570ffcc168441a1617d9811d42ddb32 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index c84dd447eb79f928b31009bdc638139c21eaacdc..c5d81acaed31d32d2b7e61616955f234f19dfb61 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -262,7 +262,7 @@ void SMESHGUI_SelectionOp::highlight( const Handle( SALOME_InteractiveObject )&
 // Purpose : Select/deselect cells of mesh
 //=======================================================================
 void SMESHGUI_SelectionOp::addOrRemoveIndex( const Handle( SALOME_InteractiveObject )& obj,
-                                             const TColStd_MapOfInteger& indices,
+                                             const SVTK_TVtkIDsMap& indices,
                                              const bool isModeShift )
 {
   SVTK_Selector* sel = selector();
@@ -468,7 +468,7 @@ void SMESHGUI_SelectionOp::onTextChanged( int, const QStringList& list )
     if( !dlg() )
       return;
 
-    TColStd_MapOfInteger newIndices;
+    SVTK_TVtkIDsMap newIndices;
 
     SALOME_ListIO sel; selectionMgr()->selectedObjects( sel );
     SMESH_Actor* anActor = actor();
index de37e058f362790ea9c6a692fa8128f3eebe1028..640e536c307b7ba61eca56a350546f74a9e4a796 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -34,6 +34,7 @@
 
 // SALOME GUI includes
 #include <SVTK_Selection.h>
+#include <SVTK_Hash.h>
 #include <SALOME_InteractiveObject.hxx>
 
 // IDL includes
@@ -110,7 +111,7 @@ protected:
                                
   //! Select some nodes or elements in VTK
   void                          addOrRemoveIndex( const Handle( SALOME_InteractiveObject )&,
-                                                  const TColStd_MapOfInteger&, const bool isModeShift);
+                                                  const SVTK_TVtkIDsMap&, const bool isModeShift);
 
   SVTK_ViewWindow*              viewWindow() const;
   SVTK_Selector*                selector() const;
index 38cde8a4db425c011a46beb7929d044f8ce6fe5c..6d7afa4e3cc2ca98bc384b177aa35eb236105ea1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -276,7 +276,7 @@ SMESH::MeshInfo SMESH::SelectionProxy::meshInfo() const
   SMESH::MeshInfo info;
   if ( !isNull() )
   {
-    SMESH::long_array_var data = myObject->GetMeshInfo();
+    SMESH::smIdType_array_var data = myObject->GetMeshInfo();
     for ( uint type = SMESH::Entity_Node; type < SMESH::Entity_Last; type++ )
     {
       if ( type < data->length() )
@@ -494,7 +494,7 @@ bool SMESH::SelectionProxy::nodeConnectivity( int id, SMESH::Connectivity& conne
       SMESH::SMESH_Mesh_var mesh = myObject->GetMesh();
       if ( !CORBA::is_nil( mesh ) )
       {
-        SMESH::long_array_var elements = mesh->GetNodeInverseElements( id, SMESH::ALL );
+        SMESH::smIdType_array_var elements = mesh->GetNodeInverseElements( id, SMESH::ALL );
         for ( int i = 0, n = elements->length(); i < n; i++ )
         {
           SMESH::ElementType type = mesh->GetElementType( elements[i], true );
@@ -589,7 +589,7 @@ bool SMESH::SelectionProxy::hasElement( int id )
       SMESH::SMESH_Mesh_var mesh = myObject->GetMesh();
       if ( !CORBA::is_nil( mesh ) )
       {
-        SMESH::long_array_var nodes = mesh->GetElemNodes( id );
+        SMESH::smIdType_array_var nodes = mesh->GetElemNodes( id );
         result = nodes->length() > 0;
       }
     }
@@ -663,13 +663,13 @@ int SMESH::SelectionProxy::elementEntityType( int id ) const
   \param connectivity Return element connectivity.
   \return \c true if result is valid; \c false otherwise.
 */
-bool SMESH::SelectionProxy::elementConnectivity( int id, Connectivity& connectivity )
+bool SMESH::SelectionProxy::elementConnectivity( SMESH::smIdType id, Connectivity& connectivity )
 {
   bool result = false;
   connectivity.clear();
   if ( !isNull() )
   {
-    QSet<int> nodes; // order of nodes is important
+    QSet<SMESH::smIdType> nodes; // order of nodes is important
     if ( actor() )
     {
       const SMDS_MeshElement* element = actor()->GetObject()->GetMesh()->FindElement( id );
@@ -678,7 +678,7 @@ bool SMESH::SelectionProxy::elementConnectivity( int id, Connectivity& connectiv
         {
           while ( it->more() )
           {
-            int n = it->next()->GetID();
+            SMESH::smIdType n = it->next()->GetID();
             if ( !nodes.contains( n ))
             {
               connectivity[ SMDSAbs_Node ] << n;
@@ -693,7 +693,7 @@ bool SMESH::SelectionProxy::elementConnectivity( int id, Connectivity& connectiv
       SMESH::SMESH_Mesh_var mesh = myObject->GetMesh();
       if ( !CORBA::is_nil( mesh ) )
       {
-        SMESH::long_array_var nn = mesh->GetElemNodes( id );
+        SMESH::smIdType_array_var nn = mesh->GetElemNodes( id );
         for ( int i = 0, nb = nn->length(); i < nb; i++ )
         {
           if ( !nodes.contains( nn[i] ))
@@ -751,7 +751,7 @@ bool SMESH::SelectionProxy::perFaceConnectivity( int id, Connectivity& connectiv
         CORBA::Long nbFaces = mesh->ElemNbFaces( id );
         for ( CORBA::Long iF = 0; iF < nbFaces; ++iF )
         {
-          SMESH::long_array_var nodes = mesh->GetElemFaceNodes( id, iF );
+          SMESH::smIdType_array_var nodes = mesh->GetElemFaceNodes( id, iF );
           for ( CORBA::ULong iN = 0; iN < nodes->length(); ++iN )
           {
             connectivity[ iF+1 ] << nodes[iN];
@@ -825,7 +825,7 @@ bool SMESH::SelectionProxy::elementGravityCenter( int id, SMESH::XYZ& xyz )
       SMESH::SMESH_Mesh_var mesh = myObject->GetMesh();
       if ( !CORBA::is_nil( mesh ) )
       {
-        SMESH::long_array_var nodes = mesh->GetElemNodes( id );
+        SMESH::smIdType_array_var nodes = mesh->GetElemNodes( id );
         for ( int i = 0, n = nodes->length(); i < n; i++ )
         {
           SMESH::double_array_var coords = mesh->GetNodeXYZ( nodes[i]  );
@@ -908,6 +908,9 @@ bool SMESH::SelectionProxy::elementControl( int id, int control, double precisio
       case SMESH::FT_Warping:
         functor.reset( new SMESH::Controls::Warping() );
         break;
+      case SMESH::FT_Warping3D:
+        functor.reset(new SMESH::Controls::Warping3D());
+        break;
       case SMESH::FT_MinimumAngle:
         functor.reset( new SMESH::Controls::MinimumAngle() );
         break;
@@ -941,6 +944,9 @@ bool SMESH::SelectionProxy::elementControl( int id, int control, double precisio
       case SMESH::FT_BallDiameter:
         functor.reset( new SMESH::Controls::BallDiameter() );
         break;
+      case SMESH::FT_ScaledJacobian:
+        functor.reset( new SMESH::Controls::ScaledJacobian() );
+        break;
       default:
         break;
       } 
@@ -976,6 +982,9 @@ bool SMESH::SelectionProxy::elementControl( int id, int control, double precisio
       case SMESH::FT_Warping:
         functor = manager->CreateWarping();
         break;
+      case SMESH::FT_Warping3D:
+        functor = manager->CreateWarping3D();
+        break;
       case SMESH::FT_MinimumAngle:
         functor = manager->CreateMinimumAngle();
         break;
@@ -1009,6 +1018,9 @@ bool SMESH::SelectionProxy::elementControl( int id, int control, double precisio
       case SMESH::FT_BallDiameter:
         functor = manager->CreateBallDiameter();
         break;
+      case SMESH::FT_ScaledJacobian:
+        functor = manager->CreateScaledJacobian();
+        break;
       default:
         break;
       }
@@ -1159,10 +1171,10 @@ QColor SMESH::SelectionProxy::color() const
   \param autoCompute Compute size if it is unavailable. Defaults to \c false.
   \return Group's size.
 */
-int SMESH::SelectionProxy::size( bool autoCompute ) const
+SMESH::smIdType SMESH::SelectionProxy::size( bool autoCompute ) const
 {
   // note: size is not computed for group on filter for performance reasons, see IPAL52831
-  int result = -1;
+  SMESH::smIdType result = -1;
   if ( !isNull() )
   {
     SMESH::SMESH_GroupBase_var group = SMESH::SMESH_GroupBase::_narrow( myObject );
@@ -1187,10 +1199,10 @@ int SMESH::SelectionProxy::size( bool autoCompute ) const
   \param autoCompute Compute size if it is unavailable. Defaults to \c false.
   \return Number of nodes contained in group.
 */
-int SMESH::SelectionProxy::nbNodes( bool autoCompute ) const
+SMESH::smIdType SMESH::SelectionProxy::nbNodes( bool autoCompute ) const
 {
   // note: nb of nodes is not computed automatically for performance reasons
-  int result = -1;
+  SMESH::smIdType result = -1;
   if ( !isNull() )
   {
     SMESH::SMESH_GroupBase_var group = SMESH::SMESH_GroupBase::_narrow( myObject );
@@ -1220,7 +1232,7 @@ QSet<uint> SMESH::SelectionProxy::ids() const
     SMESH::SMESH_GroupBase_var group = SMESH::SMESH_GroupBase::_narrow( myObject );
     if ( !CORBA::is_nil( group ) )
     {
-      SMESH::long_array_var seq = group->GetListOfID();
+      SMESH::smIdType_array_var seq = group->GetListOfID();
       for ( int i = 0, n = seq->length(); i < n; i++ )
         result << (uint)seq[i];
     }
index 3804df5534dabd293b66a913908519738127edb2..0e70a5d63d46150d90bd93f5170bcd0fe912f53b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -176,7 +176,7 @@ namespace SMESH
     bool hasElement( int );
     SMESH::ElementType elementType( int ) const;
     int elementEntityType( int ) const;
-    bool elementConnectivity( int, Connectivity& );
+    bool elementConnectivity( SMESH::smIdType, Connectivity& );
     bool perFaceConnectivity( int, Connectivity&, int& );
     bool elementPosition( int, Position& );
     bool elementGravityCenter( int, XYZ& );
@@ -192,8 +192,8 @@ namespace SMESH
     // methods that work for group only
     SMESH::ElementType groupElementType() const;
     QColor color() const;
-    int size( bool = false ) const;
-    int nbNodes( bool = false ) const;
+    SMESH::smIdType size( bool = false ) const;
+    SMESH::smIdType nbNodes( bool = false ) const;
     QSet<uint> ids() const;
 
   private:
index 721995c1744329f237453ba3fb1de4b2a7e03d65..c74a90ef2dae8add158777984454b4efabde15d2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -1368,8 +1368,8 @@ bool SMESHGUI_SewingDlg::ClickOnApply()
         QStringList aListElementsId1 = LineEdit1->text().split(" ", QString::SkipEmptyParts);
         QStringList aListElementsId2 = LineEdit4->text().split(" ", QString::SkipEmptyParts);
 
-        SMESH::long_array_var anElementsId1 = new SMESH::long_array;
-        SMESH::long_array_var anElementsId2 = new SMESH::long_array;
+        SMESH::smIdType_array_var anElementsId1 = new SMESH::smIdType_array;
+        SMESH::smIdType_array_var anElementsId2 = new SMESH::smIdType_array;
 
         anElementsId1->length(aListElementsId1.count());
         anElementsId2->length(aListElementsId2.count());
@@ -1541,7 +1541,7 @@ void SMESHGUI_SewingDlg::onTextChange (const QString& theNewText)
     send->clear();
 
   if (aMesh) {
-    TColStd_MapOfInteger newIndices;
+    SVTK_TVtkIDsMap newIndices;
     
     if (GetConstructorId() != 3 || (send != LineEdit1 && send != LineEdit4)) {
       SMESH::SetPointRepresentation(true);
index ecc0f5200f31b45d2235f912f3d833f1f4659451..322b437afe890ba9f4adeecc86f710cfe5a0a6aa 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index f761912cc21f08d0812252aca82d69752697b5e3..ada31938b7d66add97d8c2054cbe01863a3f549b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -498,7 +498,7 @@ void SMESHGUI_ShapeByMeshOp::onElemIdChanged(const QString& theNewText)
         case VOLUME: type = SMDSAbs_Volume; break;
         default: return;
         }
-        TColStd_MapOfInteger newIndices;
+        SVTK_TVtkIDsMap 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() ))
index 192fc7acc8891a963bd06faa1259e6bfd8305536..d93a96be9861258b75d0645ee9934479b79f12e7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index ee532a7e004f5855f8f8bfaefb61950b08711a1e..f4342c7f982388b89b8e1a4c1df6514e2fd366c1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -349,8 +349,8 @@ void SMESHGUI_SingleEditDlg::onTextChange (const QString& /*theNewText*/)
       aList.Append(anIO);
       mySelectionMgr->setSelectedObjects(aList,false);
       
-      SVTK_IndexedMapOfIds selectedIndices;
-      SVTK_ListOfInteger newIndices;
+      SVTK_IndexedMapOfVtkIds selectedIndices;
+      SVTK_ListOfVtk newIndices;
       mySelector->GetCompositeIndex(anIO,selectedIndices);
 
       int id1, id2;
@@ -369,9 +369,9 @@ void SMESHGUI_SingleEditDlg::onTextChange (const QString& /*theNewText*/)
 
       if ( findTriangles(aNode1,aNode2,tria1,tria2) )
       {
-       newIndices.push_back( aNode1->GetID() );
-       newIndices.push_back( aNode2->GetID() );
-        
+        newIndices.push_back( aNode1->GetID() );
+        newIndices.push_back( aNode2->GetID() );
+
         myOkBtn->setEnabled(true);
         myApplyBtn->setEnabled(true);
       }
@@ -410,22 +410,22 @@ void SMESHGUI_SingleEditDlg::onSelectionDone()
     if(SMDS_Mesh* aMesh = aVisualObj->GetMesh())
     {
       const SMDS_MeshElement* tria[2];
-      
-      bool valid = false;      
-      SVTK_IndexedMapOfIds anIds;
+
+      bool valid = false;
+      SVTK_IndexedMapOfVtkIds anIds;
       mySelector->GetCompositeIndex(anIO,anIds);
       if( anIds.Extent() == 1 && anIds(1).size() == 2 ) {
-       anId1 = anIds(1)[0];
-       anId2 = anIds(1)[1];
-       valid = true;
+        anId1 = anIds(1)[0];
+        anId2 = anIds(1)[1];
+        valid = true;
       }
-             
+
       if( valid &&
           findTriangles( aMesh->FindNode( anId1 ), aMesh->FindNode( anId2 ), tria[0],tria[1] ) )
       {
         QString aText = QString("%1-%2").arg(anId1).arg(anId2);
         myEdge->setText(aText);
-        
+
         myOkBtn->setEnabled(true);
         myApplyBtn->setEnabled(true);
       }
index 86cfcde4fb208d074c6df9c5df54b474447d7858..456481a1fbd8877cb81d172ad0dc9cde1a414ff1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index bea37c884b80aa7e0047fb799cda11be9f701cc3..6c2c420b4da4a28f94117f8e9e1e1a3f046401cd 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -351,8 +351,8 @@ bool SMESHGUI_SmoothingDlg::ClickOnApply()
     QStringList aListElementsId = LineEditElements->text().split(" ", QString::SkipEmptyParts);
     QStringList aListNodesId    = LineEditNodes->text().split(" ", QString::SkipEmptyParts);
 
-    SMESH::long_array_var anElementsId = new SMESH::long_array;
-    SMESH::long_array_var aNodesId = new SMESH::long_array;
+    SMESH::smIdType_array_var anElementsId = new SMESH::smIdType_array;
+    SMESH::smIdType_array_var aNodesId = new SMESH::smIdType_array;
 
     anElementsId->length(aListElementsId.count());
     for (int i = 0; i < aListElementsId.count(); i++)
@@ -523,7 +523,7 @@ void SMESHGUI_SmoothingDlg::onTextChange (const QString& theNewText)
   QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts);
 
   if (send == LineEditElements) {
-    TColStd_MapOfInteger newIndices;
+    SVTK_TVtkIDsMap newIndices;
     for (int i = 0; i < aListId.count(); i++) {
       int id = aListId[ i ].toInt();
       if ( id > 0 ) {
@@ -538,7 +538,7 @@ void SMESHGUI_SmoothingDlg::onTextChange (const QString& theNewText)
     }
   }
   else if (send == LineEditNodes) {
-    TColStd_MapOfInteger newIndices;
+    SVTK_TVtkIDsMap newIndices;
     for (int i = 0; i < aListId.count(); i++) {
       int id = aListId[ i ].toInt();
       if ( id > 0 ) {
@@ -619,7 +619,7 @@ void SMESHGUI_SmoothingDlg::SelectionIntoArgument()
         myNbOkElements = true;
       } else {
         // get indices of selected elements
-        TColStd_IndexedMapOfInteger aMapIndex;
+        SVTK_TIndexedMapOfVtkId aMapIndex;
         mySelector->GetIndex(IO,aMapIndex);
         myNbOkElements = aMapIndex.Extent();
 
index 7316a23420c553bd3c85af2c8368cbec721822a0..0f6d6fdf902654cd35e55a900888dd51f0fcebbb 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 45864274cf7ad75e57e2de244b5231ae96879421..23c9af58a3235790c7a8208f8e04ff6b49f3cca7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 44d52eeb6337bba68d4641cc3b7e4cefc4fa5fba..735f8e5b4755c65c5392a07c3b6a170d71f98c06 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index b92de329baaa154859e9c4c0413c34f39a9add1d..7e969d6887a250dc3c86fae86e0280e29fac0026 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 6f6f8f976077c0ffe4a159136258ca83981ae277..b32ce21014ec678a66a22ab3f2b7ce38d157a02e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 2b9f39c9b458bc27b144cde10b9081e20e70d655..f25afbac24f19b5b08c773facdc8abf2cc4c3163 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -483,7 +483,7 @@ bool SMESHGUI_SymmetryDlg::ClickOnApply()
   if (myNbOkElements && IsMirrorOk()) {
     QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts);
 
-    SMESH::long_array_var anElementsId = new SMESH::long_array;
+    SMESH::smIdType_array_var anElementsId = new SMESH::smIdType_array;
 
     anElementsId->length(aListElementsId.count());
     for (int i = 0; i < aListElementsId.count(); i++)
@@ -701,7 +701,7 @@ void SMESHGUI_SymmetryDlg::onTextChange (const QString& theNewText)
   if (aMesh) {
     Handle(SALOME_InteractiveObject) anIO = myActor->getIO();
 
-    TColStd_MapOfInteger newIndices;
+    SVTK_TVtkIDsMap newIndices;
 
     QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts);
 
@@ -1202,7 +1202,7 @@ void SMESHGUI_SymmetryDlg::onDisplaySimulation( bool toDisplayPreview )
     if ( myNbOkElements && isValid() && IsMirrorOk() )
     {
       QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts);
-      SMESH::long_array_var anElementsId = new SMESH::long_array;
+      SMESH::smIdType_array_var anElementsId = new SMESH::smIdType_array;
 
       anElementsId->length(aListElementsId.count());
       for (int i = 0; i < aListElementsId.count(); i++)
index 0c56ecbb40ebf3df811be47aa9d595a70c12c41a..78957db0eee41b1731350e1724bb6a9e4f81f295 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 92c21c63a46e44ab5b60e2f42563694da753eda7..0838ae88b85adba6cc3fa2a7e7da27c0e06e98c4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -484,7 +484,7 @@ bool SMESHGUI_TranslationDlg::ClickOnApply()
   if (myNbOkElements) {
     QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts);
 
-    SMESH::long_array_var anElementsId = new SMESH::long_array;
+    SMESH::smIdType_array_var anElementsId = new SMESH::smIdType_array;
 
     anElementsId->length(aListElementsId.count());
     for (int i = 0; i < aListElementsId.count(); i++)
@@ -713,7 +713,7 @@ void SMESHGUI_TranslationDlg::onTextChange (const QString& theNewText)
   if (aMesh) {
     Handle(SALOME_InteractiveObject) anIO = myActor->getIO();
 
-    TColStd_MapOfInteger newIndices;
+    SVTK_TVtkIDsMap newIndices;
 
     QStringList aListId = theNewText.split(" ", QString::SkipEmptyParts);
 
@@ -1182,7 +1182,7 @@ void SMESHGUI_TranslationDlg::onDisplaySimulation( bool toDisplayPreview )
     {
       QStringList aListElementsId = myElementsId.split(" ", QString::SkipEmptyParts);
 
-      SMESH::long_array_var anElementsId = new SMESH::long_array;
+      SMESH::smIdType_array_var anElementsId = new SMESH::smIdType_array;
 
       anElementsId->length(aListElementsId.count());
       for (int i = 0; i < aListElementsId.count(); i++)
index 103ff22ca86236adc5aebc895450298a797053af..aa0f2327916103a50b3fbe0d9f4c6c53909a49c1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index db7d0bdde8ecb8fa7f0740671fee48ef63e052ac..4863b499dec6b1bcd206b8f6a3abf1c8a5f59077 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -197,7 +197,8 @@ void SMESHGUI_TransparencyDlg::SetTransparency()
 {
   if ( myViewWindow ) {
     SUIT_OverrideCursor wc;
-    float opacity = ( 100 - Slider1->value() ) / 100.;
+    //float opacity = ( 100.f - Slider1->value() ) / 100.;
+    float opacity = float( 100 - Slider1->value() ) / 100.;
 
     SALOME_ListIO aList;
     mySelectionMgr->selectedObjects( aList );
index ee8293fe93e4301b3d1343fb73fb2b230b992eba..fbfcdc3599f62f9e82229d4ce9b5c2c15258a99a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 893fa86d358fea6aad8077bb3b26332660bca67d..d51661526afe912eaa45f16c7ade5a8f57b7f45e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 90270f8abce44ac26fb7892a4960adf7a0103983..40844ae3397d5091b1374b3b10dc4459ab67eb6e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -106,12 +106,12 @@ SMESHGUI_EXPORT
   _PTR(SObject) FindSObject( CORBA::Object_ptr );
 
 SMESHGUI_EXPORT
-  void SetName( _PTR(SObject), const QString& );
+  void SetName( _PTR(SObject), const QString& name );
 
 SMESHGUI_EXPORT
-  void SetValue( _PTR(SObject), const QString& );
-  void setFileType( _PTR(SObject), const QString& );
-  void setFileName( _PTR(SObject), const QString& );
+  void SetValue   ( _PTR(SObject), const QString& value );
+  void setFileType( _PTR(SObject), const QString& fileType );
+  void setFileName( _PTR(SObject), const QString& fileName );
 
 SMESHGUI_EXPORT
   CORBA::Object_var SObjectToObject( _PTR(SObject) );
@@ -141,7 +141,7 @@ SMESHGUI_EXPORT
     }
 
 SMESHGUI_EXPORT
-  CORBA::Object_var IORToObject( const QString& );
+  CORBA::Object_var IORToObject( const QString& ior );
 
   template<class TInterface> typename TInterface::_var_type
     IORToInterface( const QString& theIOR )
@@ -153,7 +153,7 @@ SMESHGUI_EXPORT
     }
 
 SMESHGUI_EXPORT
-  CORBA::Object_var EntryToObject( const QString& );
+  CORBA::Object_var EntryToObject( const QString& entry );
 
   template<class TInterface> typename TInterface::_var_type
     EntryToInterface( const QString& theEntry )
@@ -165,7 +165,7 @@ SMESHGUI_EXPORT
     }
 
 SMESHGUI_EXPORT
-  int GetNameOfSelectedIObjects( LightApp_SelectionMgr*, QString& );
+  int GetNameOfSelectedIObjects( LightApp_SelectionMgr*, QString& name );
 
 SMESHGUI_EXPORT
   QString GetName( const Handle(SALOME_InteractiveObject)& theIO );
@@ -174,7 +174,7 @@ SMESHGUI_EXPORT
   _PTR(SObject) GetMeshOrSubmesh( _PTR(SObject) );
 
 SMESHGUI_EXPORT
-  void ShowHelpFile( const QString& );
+  void ShowHelpFile( const QString& helpFileName);
 
   /*!
    * \brief Return the normal to a face
index 39966b6d679b11adba7545687ee1b8e4adc5086a..ece3b31ba6352e51682e5ca22bbf9f6a72c586fb 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -692,6 +692,7 @@ namespace SMESH
       try {
         OCC_CATCH_SIGNALS;
         //MESSAGE("DisplayActor " << theActor);
+        theActor->SetPointRepresentation(false);
         vtkWnd->AddActor(theActor);
         vtkWnd->Repaint();
       }
@@ -1194,7 +1195,7 @@ namespace SMESH
                              QString&                                theName)
   {
     theName = "";
-    TColStd_IndexedMapOfInteger aMapIndex;
+    SVTK_TIndexedMapOfVtkId aMapIndex;
     theSelector->GetIndex(theIO,aMapIndex);
 
     for(int i = 1; i <= aMapIndex.Extent(); i++)
@@ -1208,10 +1209,10 @@ namespace SMESH
                                 QString& theName)
   {
     theName = "";
-    TColStd_IndexedMapOfInteger aMapIndex;
+    SVTK_TIndexedMapOfVtkId aMapIndex;
     theSelector->GetIndex(theIO,aMapIndex);
 
-    typedef std::set<int> TIdContainer;
+    typedef std::set<vtkIdType> TIdContainer;
     TIdContainer anIdContainer;
     for( int i = 1; i <= aMapIndex.Extent(); i++)
       anIdContainer.insert(aMapIndex(i));
@@ -1226,8 +1227,8 @@ namespace SMESH
 
   int GetEdgeNodes(SVTK_Selector* theSelector,
                    const TVisualObjPtr& theVisualObject,
-                   int& theId1,
-                   int& theId2)
+                   ::smIdType& theId1,
+                   ::smIdType& theId2)
   {
     const SALOME_ListIO& selected = theSelector->StoredIObjects();
 
@@ -1238,14 +1239,14 @@ namespace SMESH
     if ( anIO.IsNull() || !anIO->hasEntry() )
       return -1;
 
-    TColStd_IndexedMapOfInteger aMapIndex;
+    SVTK_TIndexedMapOfVtkId aMapIndex;
     theSelector->GetIndex( anIO, aMapIndex );
     if ( aMapIndex.Extent() != 2 )
       return -1;
 
-    int anObjId = -1, anEdgeNum = -1;
-    for ( int i = 1; i <= aMapIndex.Extent(); i++ ) {
-      int aVal = aMapIndex( i );
+    ::smIdType anObjId = -1, anEdgeNum = -1;
+    for ( ::smIdType i = 1; i <= aMapIndex.Extent(); i++ ) {
+      ::smIdType aVal = aMapIndex( i );
       if ( aVal > 0 )
         anObjId = aVal;
       else
@@ -1343,7 +1344,7 @@ namespace SMESH
   }
 
 
-  int GetEdgeNodes( LightApp_SelectionMgr* theMgr, int& theId1, int& theId2 )
+  int GetEdgeNodes( LightApp_SelectionMgr* theMgr, ::smIdType& theId1, ::smIdType& theId2 )
   {
     SALOME_ListIO selected; theMgr->selectedObjects( selected );
 
@@ -1363,9 +1364,9 @@ namespace SMESH
     if ( aMapIndex.Extent() != 2 )
       return -1;
 
-    int anObjId = -1, anEdgeNum = -1;
-    for ( int i = 1; i <= aMapIndex.Extent(); i++ ) {
-      int aVal = aMapIndex( i );
+    ::smIdType anObjId = -1, anEdgeNum = -1;
+    for ( ::smIdType i = 1; i <= aMapIndex.Extent(); i++ ) {
+      ::smIdType aVal = aMapIndex( i );
       if ( aVal > 0 )
         anObjId = aVal;
       else
index 756f6b7c91c05aab3b2e2d9c76b582e3d4fca836..90ea3e13aa6c24ffeeec0990ca6d4261041cebf8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -169,7 +169,7 @@ SMESHGUI_EXPORT
                                  const Handle(SALOME_InteractiveObject)&,
                                  QString& );
 SMESHGUI_EXPORT
-  int GetEdgeNodes( SVTK_Selector*, const TVisualObjPtr&, int&, int& );
+  int GetEdgeNodes( SVTK_Selector*, const TVisualObjPtr&, ::smIdType&, ::smIdType& );
 
   //----------------------------------------------------------------------------
 SMESHGUI_EXPORT  
@@ -189,7 +189,7 @@ SMESHGUI_EXPORT
                    const bool = true );
 
 SMESHGUI_EXPORT
-  int GetEdgeNodes( LightApp_SelectionMgr*, int&, int& );
+  int GetEdgeNodes( LightApp_SelectionMgr*, ::smIdType&, ::smIdType& );
 
 SMESHGUI_EXPORT
   void SetControlsPrecision( const long );
index 74a91980a3f52817ccf324bc84eca9f438bf3856..d207cf2c9df895457e1d0e550666594261479a03 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -109,7 +109,7 @@ bool SMESHGUI_XmlHandler::startElement (const QString&, const QString&,
         SUIT_ResourceMgr* resMgr = SMESHGUI::resourceMgr();
         QString lang = resMgr->stringValue( resMgr->langSection(), "language", "en" );
         resMgr->loadTranslator( "resources", QString( "%1_msg_%2.qm" ).arg( aResName, lang ) );
-        resMgr->loadTranslator( "resources", QString( "%1_images.qm" ).arg( aResName, lang ) );
+        resMgr->loadTranslator( "resources", QString( "%1_images.qm" ).arg( aResName ) );
       }
     }
   }
index 3ea46efb37226f0cef80729d3b26a83c7b5a1a13..4f4b0e691e888d8d57a83d23140015b66327eb02 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index cb1798e24c1686b227250363e8e5d108f50cb360..ae7d2de06f1dacc67fba89ae79f7ed004747d31e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 932d60f07320568287b663ffda635aa94b9fc6e4..57631362b625410a2eda42281c835d76808e92ca 100644 (file)
             <source>ICON_CREATE_GEO_GROUP</source>
             <translation>mesh_groups_from_gemetry.png</translation>
         </message>
+        <message>
+            <source>ICON_MG_ADAPT</source>
+            <translation>adapt_mg_adapt.png</translation>
+        </message>
+        <message>
+            <source>ICON_HOMARD_ADAPT</source>
+            <translation>adapt_homard.png</translation>
+        </message>
         <message>
             <source>ICON_CONV_TO_QUAD</source>
             <translation>mesh_conv_to_quad.png</translation>
         </message>
+        <message>
+            <source>ICON_CREATE_DUAL_MESH</source>
+            <translation>mesh_create_dual_mesh.png</translation>
+        </message>
         <message>
             <source>ICON_CUT</source>
             <translation>mesh_cutGroups.png</translation>
             <source>ICON_DLG_MOVE_WITHOUT_NODE</source>
             <translation>mesh_move_without_node.png</translation>
         </message>
+        <message>
+            <source>ICON_DLG_MOVE_NODE_INTERACTIVE</source>
+            <translation>mesh_move_node_interactive.png</translation>
+        </message>
+        <message>
+            <source>ICON_SPLIT_DIAG_INTERACTIVE</source>
+            <translation>mesh_split_diag_interactive.png</translation>
+        </message>
+        <message>
+            <source>ICON_SPLIT_FACE_INTERACTIVE</source>
+            <translation>mesh_split_face_interactive.png</translation>
+        </message>
         <message>
             <source>ICON_DLG_NODE</source>
             <translation>mesh_vertex.png</translation>
             <source>ICON_DLG_REM_NODE</source>
             <translation>mesh_rem_node.png</translation>
         </message>
+        <message>
+            <source>ICON_REM_NODE_RECON</source>
+            <translation>mesh_rem_node_recon.png</translation>
+        </message>
         <message>
             <source>ICON_DLG_REM_ORPHAN_NODES</source>
             <translation>mesh_rem_orphan_nodes.png</translation>
         </message>
         <message>
             <source>ICON_PATTERN_2d</source>
-            <translation>mesh_algo_mefisto.png</translation>
+            <translation>mesh_algo_tri.png</translation>
         </message>
         <message>
             <source>ICON_PATTERN_3d</source>
             <source>ICON_DLG_REORIENT2D_FACE</source>
             <translation>reorient_faces_face.png</translation>
         </message>
+        <message>
+            <source>ICON_DLG_REORIENT2D_GROUPS</source>
+            <translation>reorient_faces_ref_groups.png</translation>
+        </message>
         <message>
             <source>ICON_DLG_REORIENT2D_VOLUME</source>
             <translation>reorient_faces_volume.png</translation>
             <source>ICON_VOLUME_3D</source>
             <translation>mesh_volume_3d.png</translation>
         </message>
+        <message>
+            <source>ICON_SCALED_JACOBIAN</source>
+            <translation>mesh_scaled_jacobian.png</translation>
+        </message>
         <message>
             <source>ICON_BARE_BORDER_VOLUME</source>
             <translation>bare_border_volume.png</translation>
             <source>ICON_2D_FROM_3D</source>
             <translation>mesh_2d_from_3d.png</translation>
         </message>
+        <message>
+            <source>ICON_2D_FROM_3D_ELEMENTS</source>
+            <translation>mesh_2d_from_3d_elements.png</translation>
+        </message>
         <message>
             <source>ICON_SPLIT_TO_TETRA</source>
             <translation>split_into_tetra.png</translation>
         <message>
             <source>ICON_MEASURE_AREA</source>
             <translation>mesh_measure_area.png</translation>
-        </message>     
+        </message>
         <message>
             <source>ICON_MEASURE_VOLUME</source>
             <translation>mesh_measure_volume.png</translation>
index cdbcfc114831ebd04ae8867dfd6cc02bc9e6f11d..8c6f0359b72e5b87e5881e075b76c175bddd5914 100644 (file)
         <source>MED_FILES_FILTER</source>
         <translation>MED files</translation>
     </message>
-    <message>
-        <source>SAUV_FILES_FILTER</source>
-        <translation>SAUV files</translation>
-    </message>
     <message>
         <source>IDEAS_FILES_FILTER</source>
         <translation>IDEAS files</translation>
         <source>BARE_BORDER_VOLUME</source>
         <translation>Volumes with bare border</translation>
     </message>
+    <message>
+        <source>SCALED_JACOBIAN</source>
+        <translation>Scaled Jacobian</translation>
+    </message>
     <message>
         <source>OVER_CONSTRAINED_VOLUME</source>
         <translation>Over-constrained volumes</translation>
         <source>ASPECTRATIO_3D_ELEMENTS</source>
         <translation>Aspect Ratio 3D</translation>
     </message>
+    <message>
+        <source>WARPING_3D_ELEMENTS</source>
+        <translation>Warping 3D</translation>
+    </message>
     <message>
         <source>ASPECTRATIO_ELEMENTS</source>
         <translation>Aspect Ratio</translation>
         <source>MEN_COPY_MESH</source>
         <translation>Copy Mesh</translation>
     </message>
+    <message>
+    <source>MEN_CREATE_DUAL_MESH</source>
+        <translation>Create Dual Mesh</translation>
+    </message>
     <message>
         <source>MEN_CLIP</source>
         <translation>Clipping</translation>
         <source>MEN_CONSTRUCT_GROUP</source>
         <translation>Construct Group</translation>
     </message>
+    <message>
+        <source>MEN_MG_ADAPT</source>
+        <translation>Remesh with MG_Adapt</translation>
+    </message>
+    <message>
+        <source>MEN_HOMARD_ADAPT</source>
+        <translation>Uniform refinement</translation>
+    </message>
+    <message>
+        <source>Args</source>
+        <translation>Arguments</translation>
+    </message>
+    <message>
+        <source>MeshOut</source>
+        <translation>Mesh Out</translation>
+    </message>
+    <message>
+        <source>MeshIn</source>
+        <translation>Mesh In</translation>
+    </message>
+    <message>
+        <source>MEDFile</source>
+        <translation>MED file</translation>
+    </message>
+    <message>
+        <source>Browser</source>
+        <translation>Browser</translation>
+    </message>
+    <message>
+        <source>Publish_MG_ADAPT</source>
+        <translation>Publish</translation>
+    </message>
+    <message>
+        <source>SIZE_MAP_FIELD</source>
+        <translation>Size map field</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_FIELD_NAME</source>
+        <translation>Field Name</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_MED_FILE_1</source>
+        <translation>This MED file cannot be read.</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_MED_FILE_2</source>
+        <translation>No mesh in this MED file.</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_MED_FILE_3</source>
+        <translation>More than one mesh in this MED file.</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_MED_FILE_4</source>
+        <translation>The mesh in this MED file cannot be read.</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_MED_FILE_5</source>
+        <translation>No field in this MED file.</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_ERROR</source>
+        <translation>Error</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_CH_ST</source>
+        <translation>Chosen time step</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_RANK</source>
+        <translation>Rank</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_TSTP</source>
+        <translation>Time step </translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_NO_T_ST</source>
+        <translation>No time step</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_L_ST</source>
+        <translation>Last time step</translation>
+    </message>
+    <message>
+        <source>MeshName</source>
+        <translation>Mesh name</translation>
+    </message>
+    <message>
+        <source>LOCAL_MG_ADAPT</source>
+        <translation>Local</translation>
+    </message>
+    <message>
+        <source>BACKGRND_MG_ADAPT</source>
+        <translation>Background</translation>
+    </message>
+    <message>
+        <source>CNST_MG_ADAPT</source>
+        <translation>Constant</translation>
+    </message>
+    <message>
+        <source>MED_FILE_BCKG</source>
+        <translation>MED file background size map</translation>
+    </message>
+    <message>
+        <source>VALUE_MG_ADAPT</source>
+        <translation>Value</translation>
+    </message>
+    <message>
+        <source>SIZE_MAP_DEF</source>
+        <translation>Size map definition</translation>
+    </message>
+    <message>
+        <source>ADVOP</source>
+        <translation>Advanced Options</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_DIAG_1</source>
+        <translation>Adaptation succeeded.</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_DIAG_2</source>
+        <translation>Adaptation failed.</translation>
+    </message>
     <message>
         <source>MEN_CONV_TO_QUAD</source>
         <translation>Convert to/from quadratic</translation>
         <source>MEN_2D_FROM_3D</source>
         <translation>Create boundary elements</translation>
     </message>
+    <message>
+        <source>MEN_2D_FROM_3D_ELEMENTS</source>
+        <translation>Create 2D mesh from 3D elements</translation>
+    </message>
     <message>
         <source>MEN_MESH_ORDER</source>
         <translation>Change sub-mesh priority</translation>
         <source>MEN_EXPORT_GMF</source>
         <translation>Export to GMF file</translation>
     </message>
-    <message>
-        <source>MEN_EXPORT_SAUV</source>
-        <translation>Export to SAUV file</translation>
-    </message>
     <message>
         <source>MEN_EXPORT_STL</source>
         <translation>Export to STL file</translation>
         <source>MEN_GMF</source>
         <translation>GMF file</translation>
     </message>
-    <message>
-        <source>MEN_IMPORT_SAUV</source>
-        <translation>SAUV file</translation>
-    </message>
-    <message>
-        <source>MEN_SAUV</source>
-        <translation>SAUV file</translation>
-    </message>
     <message>
         <source>MEN_MERGE</source>
         <translation>Merge Nodes</translation>
         <source>MEN_MESH_THROU_POINT</source>
         <translation>Move Node</translation>
     </message>
+    <message>
+        <source>MEN_MOVE_NODE_INTRCT</source>
+        <translation>Move node by mouse</translation>
+    </message>
+    <message>
+        <source>MEN_SPLIT_DIAG_INTRC</source>
+        <translation>Add node on segment</translation>
+    </message>
+    <message>
+        <source>MEN_SPLIT_FACE_INTRC</source>
+        <translation>Add node to triangle</translation>
+    </message>
     <message>
         <source>MEN_MIN_ANG</source>
         <translation>Minimum Angle</translation>
         <source>MEN_MODIFY</source>
         <translation>Modification</translation>
     </message>
+    <message>
+        <source>MEN_ADAPT</source>
+        <translation>Adaptation</translation>
+    </message>
     <message>
         <source>MEN_MEASURE</source>
         <translation>Measurements</translation>
         <source>MEN_REMOVE_NODES</source>
         <translation>Nodes</translation>
     </message>
+    <message>
+        <source>MEN_REMOVE_NODE_RECON</source>
+        <translation>Node with reconnection</translation>
+    </message>
     <message>
         <source>MEN_REMOVE_ORPHAN_NODES</source>
         <translation>Orphan Nodes</translation>
         <source>MEN_VOLUME_3D</source>
         <translation>Volume</translation>
     </message>
+    <message>
+        <source>MEN_SCALED_JACOBIAN</source>
+        <translation>Scaled Jacobian</translation>
+    </message>
     <message>
         <source>MEN_WARP</source>
         <translation>Warping Angle</translation>
     </message>
+    <message>
+        <source>MEN_WARP_3D</source>
+        <translation>Warping 3D</translation>
+    </message>
     <message>
         <source>MEN_WHAT_IS</source>
         <translation>Mesh Element Information</translation>
@@ -1490,6 +1642,10 @@ Please enter correct values and try again</translation>
         <source>SMESH_AUTO_DIM</source>
         <translation>Automatically define space dimension</translation>
     </message>
+    <message>
+        <source>SMESH_MED_SAVE_NUMS</source>
+        <translation>Export indices</translation>
+    </message>
     <message>
         <source>SMESH_ZTOLERANCE</source>
         <translation>Z tolerance</translation>
@@ -1502,6 +1658,10 @@ Please enter correct values and try again</translation>
         <source>SMESH_AVAILABLE</source>
         <translation>Available</translation>
     </message>
+    <message>
+        <source>SMESH_NOT_AVAILABLE</source>
+        <translation>Not available</translation>
+    </message>
     <message>
         <source>SMESH_AVAILABLE_ALGORITHMS</source>
         <translation>Available algorithms</translation>
@@ -2084,6 +2244,14 @@ Check algorithm documentation for supported geometry</translation>
         <source>SMESH_LOGARITHMIC_SCALARBAR</source>
         <translation>Logarithmic</translation>
     </message>
+    <message>
+        <source>SMESH_TRESHOLD_SCALARBAR</source>
+        <translation>Threshold</translation>
+    </message>
+    <message>
+        <source>SMESH_WIREFRAME_OFF_SCALARBAR</source>
+        <translation>Wireframe Off</translation>
+    </message>
     <message>
         <source>SMESH_MAKE_GROUPS</source>
         <translation>Generate groups</translation>
@@ -2712,6 +2880,10 @@ Check algorithm documentation for supported geometry</translation>
         <source>SMESH_RENUMBERING</source>
         <translation>Renumbering</translation>
     </message>
+    <message>
+        <source>SMESH_RENUMBER</source>
+        <translation>Renumber</translation>
+    </message>
     <message>
         <source>SMESH_RENUMBERING_ELEMENTS_TITLE</source>
         <translation>Renumbering elements</translation>
@@ -2897,6 +3069,86 @@ Check algorithm documentation for supported geometry</translation>
         <source>SMESH_MULTICOLOR</source>
         <translation>Multicolor</translation>
     </message>
+    <message>
+        <source>ADAPT_PREF_TAB_GENERAL</source>
+        <translation>Adaptation</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_NONE</source>
+        <translation>None</translation>
+    </message>
+    <message>
+        <source>ADAPT_WITH_HOMARD</source>
+        <translation>Adaptation with HOMARD</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_MG_ADAPT</source>
+        <translation>Adaptation with MG-Adapt</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_MG_ADAPT_FILE_MAILLAGE_OUT</source>
+        <translation>Write the OUT mesh</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_MG_ADAPT_PUBLICATION_MAILLAGE_OUT</source>
+        <translation>Publication of the OUT mesh</translation>
+    </message>
+    <message>
+        <source>OPTION_VALUE_COLUMN</source>
+        <translation>Option</translation>
+    </message>
+    <message>
+        <source>OPTION_NAME_COLUMN</source>
+        <translation>Value</translation>
+    </message>
+    <message>
+        <source>compute_ridges</source>
+        <translation>Compute ridges</translation>
+    </message>
+    <message>
+        <source>max_memory</source>
+        <translation>Maximum memory (Mb)</translation>
+    </message>
+    <message>
+        <source>Adaption</source>
+        <translation>adaptation</translation>
+    </message>
+    <message>
+        <source>components</source>
+        <translation>Components</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_MG_ADAPT_SIZE_MAP</source>
+        <translation>Size map</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_MG_ADAPT_SIZE_MAP_LOCAL</source>
+        <translation>Local</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_MG_ADAPT_SIZE_MAP_BACKGROUND</source>
+        <translation>Background</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_MG_ADAPT_TIME_STEP_LAST</source>
+        <translation>Last</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_MG_ADAPT_TIME_STEP</source>
+        <translation>Choosen time step</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_MG_ADAPT_TIME_STEP_C</source>
+        <translation>Value</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_SELECT_FILE_0</source>
+        <translation>MG-ADAPT select file</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_MG_ADAPT_ADVOP</source>
+        <translation>Advanced Options</translation>
+    </message>
     <message>
         <source>SMESH_VISU_PROBLEM</source>
         <translation>Mesh visualization failed</translation>
@@ -3020,6 +3272,10 @@ Use Display Entity menu command to show them.
         <source>SMESH_Z</source>
         <translation>Z</translation>
     </message>
+    <message>
+        <source>SMESH_Z_SCALARBAR</source>
+        <translation>Z:</translation>
+    </message>
     <message>
         <source>STATE_ALGO_MISSING</source>
         <translation>%3 %2D algorithm is missing</translation>
@@ -3076,6 +3332,10 @@ Use Display Entity menu command to show them.
         <source>STB_COPY_MESH</source>
         <translation>Copy Mesh</translation>
     </message>
+    <message>
+        <source>STB_CREATE_DUAL_MESH</source>
+        <translation>Create Dual Mesh</translation>
+    </message>
     <message>
         <source>STB_CLIP</source>
         <translation>Clipping</translation>
@@ -3088,6 +3348,10 @@ Use Display Entity menu command to show them.
         <source>STB_COMPUTE</source>
         <translation>Compute</translation>
     </message>
+    <message>
+        <source>STB_RE_COMPUTE</source>
+        <translation>Clear + Compute</translation>
+    </message>
     <message>
         <source>STB_COMPUTE_SUBMESH</source>
         <translation>Compute Sub-mesh</translation>
@@ -3112,6 +3376,14 @@ Use Display Entity menu command to show them.
         <source>STB_CONSTRUCT_GROUP</source>
         <translation>Construct Group</translation>
     </message>
+    <message>
+        <source>STB_MG_ADAPT</source>
+        <translation>Remesh with MG_Adapt</translation>
+    </message>
+    <message>
+        <source>STB_HOMARD_ADAPT</source>
+        <translation>Uniform refinement</translation>
+    </message>
     <message>
         <source>STB_CONV_TO_QUAD</source>
         <translation>Convert to/from quadratic</translation>
@@ -3120,6 +3392,10 @@ Use Display Entity menu command to show them.
         <source>STB_2D_FROM_3D</source>
         <translation>Create boundary elements</translation>
     </message>
+    <message>
+        <source>STB_2D_FROM_3D_ELEMENTS</source>
+        <translation>Create 2D mesh from 3D elements</translation>
+    </message>
     <message>
         <source>STB_MESH_ORDER</source>
         <translation>Change sub-mesh priority</translation>
@@ -3248,10 +3524,6 @@ Use Display Entity menu command to show them.
         <source>STB_EXPORT_GMF</source>
         <translation>Export to GMF file</translation>
     </message>
-    <message>
-        <source>STB_EXPORT_SAUV</source>
-        <translation>Export to SAUV file</translation>
-    </message>
     <message>
         <source>STB_EXPORT_STL</source>
         <translation>Export to STL file</translation>
@@ -3384,14 +3656,6 @@ Use Display Entity menu command to show them.
         <source>STB_GMF</source>
         <translation>Export GMF file</translation>
     </message>
-    <message>
-        <source>STB_IMPORT_SAUV</source>
-        <translation>Import SAUV file</translation>
-    </message>
-    <message>
-        <source>STB_SAUV</source>
-        <translation>Export SAUV file</translation>
-    </message>
     <message>
         <source>STB_MERGE</source>
         <translation>Merge nodes</translation>
@@ -3404,6 +3668,18 @@ Use Display Entity menu command to show them.
         <source>STB_MESH_THROU_POINT</source>
         <translation>Move Node</translation>
     </message>
+    <message>
+        <source>STB_MOVE_NODE_INTRCT</source>
+        <translation>Move Node by mouse</translation>
+    </message>
+    <message>
+        <source>STB_SPLIT_DIAG_INTRC</source>
+        <translation>Add node on segment</translation>
+    </message>
+    <message>
+        <source>STB_SPLIT_FACE_INTRC</source>
+        <translation>Add node to triangle</translation>
+    </message>
     <message>
         <source>STB_MIN_ANG</source>
         <translation>Minimum Angle</translation>
@@ -3492,6 +3768,10 @@ Use Display Entity menu command to show them.
         <source>STB_REMOVE_NODES</source>
         <translation>Remove nodes</translation>
     </message>
+    <message>
+        <source>STB_REMOVE_NODE_RECON</source>
+        <translation>Remove node with reconnection</translation>
+    </message>
     <message>
         <source>STB_REMOVE_ORPHAN_NODES</source>
         <translation>Remove orphan nodes</translation>
@@ -3656,10 +3936,18 @@ Use Display Entity menu command to show them.
         <source>STB_VOLUME_3D</source>
         <translation>Volume</translation>
     </message>
+    <message>
+        <source>STB_SCALED_JACOBIAN</source>
+        <translation>Scaled Jacobian</translation>
+    </message>
     <message>
         <source>STB_WARP</source>
         <translation>Warping angle</translation>
     </message>
+    <message>
+        <source>STB_WARP_3D</source>
+        <translation>Warping angle</translation>
+    </message>
     <message>
         <source>STB_WHAT_IS</source>
         <translation>Show information about the mesh node or element</translation>
@@ -3688,6 +3976,10 @@ Use Display Entity menu command to show them.
         <source>TB_RENUMBER</source>
         <translation>Renumbering Toolbar</translation>
     </message>
+    <message>
+        <source>TB_INTERACT</source>
+        <translation>Interactive modifications Toolbar</translation>
+    </message>
     <message>
         <source>TB_TRANSFORM</source>
         <translation>Transformation Toolbar</translation>
@@ -3708,6 +4000,10 @@ Use Display Entity menu command to show them.
         <source>TB_CTRL3D</source>
         <translation>Volume Controls Toolbar</translation>
     </message>
+    <message>
+        <source>TB_ADAPTATION</source>
+        <translation>Adaptation Toolbar</translation>
+    </message>
     <message>
         <source>TB_MEASUREM</source>
         <translation>Measurements Toolbar</translation>
@@ -3788,6 +4084,10 @@ Use Display Entity menu command to show them.
         <source>TOP_COMPUTE</source>
         <translation>Compute</translation>
     </message>
+    <message>
+        <source>TOP_RE_COMPUTE</source>
+        <translation>Clear + Compute</translation>
+    </message>
     <message>
         <source>TOP_COMPUTE_SUBMESH</source>
         <translation>Compute Sub-mesh</translation>
@@ -3812,6 +4112,14 @@ Use Display Entity menu command to show them.
         <source>TOP_CONSTRUCT_GROUP</source>
         <translation>Construct Group</translation>
     </message>
+    <message>
+        <source>TOP_MG_ADAPT</source>
+        <translation>Remesh with MG_Adapt</translation>
+    </message>
+    <message>
+        <source>TOP_HOMARD_ADAPT</source>
+        <translation>Uniform refinement</translation>
+    </message>
     <message>
         <source>TOP_CONV_TO_QUAD</source>
         <translation>Convert to/from quadratic</translation>
@@ -3820,6 +4128,10 @@ Use Display Entity menu command to show them.
         <source>TOP_2D_FROM_3D</source>
         <translation>Create boundary elements</translation>
     </message>
+    <message>
+        <source>TOP_2D_FROM_3D_ELEMENTS</source>
+        <translation>Create 2D mesh from 3D elements</translation>
+    </message>
     <message>
         <source>TOP_MESH_ORDER</source>
         <translation>Change sub-mesh priority</translation>
@@ -3940,10 +4252,6 @@ Use Display Entity menu command to show them.
         <source>TOP_EXPORT_MED</source>
         <translation>Export to MED file</translation>
     </message>
-    <message>
-        <source>TOP_EXPORT_SAUV</source>
-        <translation>Export to SAUV file</translation>
-    </message>
     <message>
         <source>TOP_EXPORT_STL</source>
         <translation>Export to STL file</translation>
@@ -4076,14 +4384,6 @@ Use Display Entity menu command to show them.
         <source>TOP_GMF</source>
         <translation>Export GMF file</translation>
     </message>
-    <message>
-        <source>TOP_IMPORT_SAUV</source>
-        <translation>Import SAUV file</translation>
-    </message>
-    <message>
-        <source>TOP_SAUV</source>
-        <translation>Export SAUV file</translation>
-    </message>
     <message>
         <source>TOP_MERGE</source>
         <translation>Merge nodes</translation>
@@ -4096,6 +4396,18 @@ Use Display Entity menu command to show them.
         <source>TOP_MESH_THROU_POINT</source>
         <translation>Move Node</translation>
     </message>
+    <message>
+        <source>TOP_MOVE_NODE_INTRCT</source>
+        <translation>Move node by mouse</translation>
+    </message>
+    <message>
+        <source>TOP_SPLIT_DIAG_INTRC</source>
+        <translation>Add node on segment</translation>
+    </message>
+    <message>
+        <source>TOP_SPLIT_FACE_INTRC</source>
+        <translation>Add node to triangle</translation>
+    </message>
     <message>
         <source>TOP_MIN_ANG</source>
         <translation>Minimum Angle</translation>
@@ -4184,6 +4496,10 @@ Use Display Entity menu command to show them.
         <source>TOP_REMOVE_NODES</source>
         <translation>Remove nodes</translation>
     </message>
+    <message>
+        <source>TOP_REMOVE_NODE_RECON</source>
+        <translation>Remove node with reconnection</translation>
+    </message>
     <message>
         <source>TOP_REMOVE_ORPHAN_NODES</source>
         <translation>Remove orphan nodes</translation>
@@ -4344,10 +4660,18 @@ Use Display Entity menu command to show them.
         <source>TOP_VOLUME_3D</source>
         <translation>Volume</translation>
     </message>
+    <message>
+        <source>TOP_SCALED_JACOBIAN</source>
+        <translation>Scaled Jacobian</translation>
+    </message>
     <message>
         <source>TOP_WARP</source>
         <translation>Warping angle</translation>
     </message>
+    <message>
+        <source>TOP_WARP_3D</source>
+        <translation>Warping 3D</translation>
+    </message>
     <message>
         <source>TOP_WHAT_IS</source>
         <translation>Mesh Element Information</translation>
@@ -4372,6 +4696,10 @@ Use Display Entity menu command to show them.
         <source>WARP_ELEMENTS</source>
         <translation>Warping</translation>
     </message>
+    <message>
+        <source>WARP_3D_ELEMENTS</source>
+        <translation>Warping 3D</translation>
+    </message>
     <message>
         <source>MEN_FILE_INFO</source>
         <translation>File Information</translation>
@@ -4443,8 +4771,8 @@ Use Display Entity menu command to show them.
     <message>
         <source>FULL_RECOMPUTE_QUESTION</source>
         <translation>
-The mesh has been edited since a last total re-compute 
-that may prevent successful computation. 
+The mesh has been edited since a last total re-compute
+that may prevent successful computation.
 Do you wish to re-compute the mesh totally to discard the modifications?
 </translation>
     </message>
@@ -4669,6 +4997,10 @@ Please, create VTK viewer and try again</translation>
         <source>PREF_SHOW_WARN</source>
         <translation>Show warning when exporting group</translation>
     </message>
+    <message>
+        <source>PREF_MED_SAVE_NUMS</source>
+        <translation>Save cell/node numbers to MED file</translation>
+    </message>
     <message>
         <source>PREF_ZTOLERANCE</source>
         <translation>Z tolerance for MED export</translation>
@@ -5411,6 +5743,29 @@ Please specify it and try again</translation>
         <translation>Warning: mesh can become non-conformal</translation>
     </message>
 </context>
+<context>
+    <name>SMESHGUI_CreateDualMeshDlg</name>
+    <message>
+        <source>CAPTION</source>
+        <translation>Create Dual Mesh</translation>
+    </message>
+    <message>
+        <source>MESH</source>
+        <translation>Mesh or Sub-mesh</translation>
+    </message>
+    <message>
+        <source>NON_TETRA_MESH_WARNING</source>
+        <translation>Warning: mesh must have only Tetrahedron 3D elements</translation>
+    </message>
+    <message>
+        <source>DUAL_MESH_NAME</source>
+        <translation>Name of the dual mesh</translation>
+    </message>
+    <message>
+        <source>PROJ_SHAPE</source>
+        <translation>Project boundary elements on shape</translation>
+    </message>
+</context>
 <context>
     <name>SMESHGUI_ConvToQuadOp</name>
     <message>
@@ -5962,6 +6317,10 @@ Please check input data and try again</translation>
         <source>ASPECT_RATIO_3D</source>
         <translation>Aspect ratio 3D</translation>
     </message>
+    <message>
+        <source>WARPING_3D</source>
+        <translation>Warping 3D</translation>
+    </message>
     <message>
         <source>BAD_ORIENTED_VOLUME</source>
         <translation>Bad oriented volume</translation>
@@ -6189,6 +6548,10 @@ Please enter correct value and try again</translation>
         <source>VOLUME_3D</source>
         <translation>Volume</translation>
     </message>
+    <message>
+        <source>SCALED_JACOBIAN</source>
+        <translation>Scaled Jacobian</translation>
+    </message>
     <message>
         <source>WARPING</source>
         <translation>Warping</translation>
@@ -6497,6 +6860,10 @@ Please specify them and try again</translation>
         <source>DESTINATION</source>
         <translation>Destination</translation>
     </message>
+    <message>
+        <source>DESTINATION_BY_MOUSE</source>
+        <translation>Destination by mouse click</translation>
+    </message>
     <message>
         <source>MOVE_NODE</source>
         <translation>Move node</translation>
@@ -6525,6 +6892,120 @@ Please specify them and try again</translation>
         <translation>Mesh to modify not selected</translation>
     </message>
 </context>
+<context>
+    <name>SMESHGUI_AddNodeOnSegmentDlg</name>
+    <message>
+        <source>CAPTION</source>
+        <translation>Add node to segment</translation>
+    </message>
+    <message>
+        <source>SEGMENT_GROUP</source>
+        <translation>Edge between neighboring triangles</translation>
+    </message>
+    <message>
+        <source>SEGMENT</source>
+        <translation>Edge</translation>
+    </message>
+    <message>
+        <source>POSITION_GROUP</source>
+        <translation>Node on Edge</translation>
+    </message>
+    <message>
+        <source>POSITION</source>
+        <translation>Location by mouse click</translation>
+    </message>
+</context>
+<context>
+    <name>SMESHGUI_AddNodeOnSegmentOp</name>
+    <message>
+        <source>INVALID_EDGE</source>
+        <translation>Edge is invalid</translation>
+    </message>
+    <message>
+        <source>INVALID_MESH</source>
+        <translation>Mesh to modify not selected</translation>
+    </message>
+    <message>
+        <source>NO_ELEMENTS</source>
+        <translation>Edge belongs to none face</translation>
+    </message>
+    <message>
+        <source>VOLUME_FOUND</source>
+        <translation>Can't split an edge of a volume</translation>
+    </message>
+    <message>
+        <source>NOT_TRIANGLE_FACE_FOUND</source>
+        <translation>Operation applies to triangles only</translation>
+    </message>
+    <message>
+        <source>BAD_POSITION</source>
+        <translation>Position on edge is incorrect</translation>
+    </message>
+</context>
+<context>
+    <name>SMESHGUI_AddNodeOnFaceDlg</name>
+    <message>
+        <source>CAPTION</source>
+        <translation>Add node to triangle</translation>
+    </message>
+    <message>
+        <source>FACE_GROUP</source>
+        <translation>Triangle to split</translation>
+    </message>
+    <message>
+        <source>FACE_ID</source>
+        <translation>ID</translation>
+    </message>
+    <message>
+        <source>XYZ_GROUP</source>
+        <translation>Node location by mouse click</translation>
+    </message>
+    <message>
+        <source>XYZ_NODE_ON_FACE</source>
+        <translation>Node on face</translation>
+    </message>
+</context>
+<context>
+    <name>SMESHGUI_AddNodeOnFaceOp</name>
+    <message>
+        <source>INVALID_MESH</source>
+        <translation>Mesh to modify not selected</translation>
+    </message>
+    <message>
+        <source>NOT_FACE</source>
+        <translation>Not a face selected</translation>
+    </message>
+    <message>
+        <source>INVALID_ID</source>
+        <translation>Face ID is invalid</translation>
+    </message>
+</context>
+<context>
+    <name>SMESHGUI_RemoveNodeReconnectionDlg</name>
+    <message>
+        <source>CAPTION</source>
+        <translation>Remove Node with Reconnection</translation>
+    </message>
+    <message>
+        <source>NODE_2REMOVE_ID</source>
+        <translation>ID</translation>
+    </message>
+    <message>
+        <source>NODE_2REMOVE</source>
+        <translation>Node</translation>
+    </message>
+</context>
+<context>
+    <name>SMESHGUI_RemoveNodeReconnectionOp</name>
+    <message>
+        <source>INVALID_ID</source>
+        <translation>Node ID is invalid</translation>
+    </message>
+    <message>
+        <source>INVALID_MESH</source>
+        <translation>Mesh to modify not selected</translation>
+    </message>
+</context>
 <context>
     <name>SMESHGUI_FindElemByPointDlg</name>
     <message>
@@ -6637,7 +7118,7 @@ Please specify them and try again</translation>
     <message>
         <source>GEOMETRY_OBJECT_IS_NOT_DEFINED_MESH</source>
         <translation>Geometry object is not defined.
-Do you want to create an empty mesh 
+Do you want to create an empty mesh
 without algorithms and hypotheses? </translation>
     </message>
     <message>
@@ -6712,7 +7193,7 @@ select mesh or sub-mesh and try again</translation>
     <message>
         <source>CONCURRENT_SUBMESH_APPEARS</source>
         <translation>
-The assigned algorithm has the same priority as one assigned to an 
+The assigned algorithm has the same priority as one assigned to an
 adjacent sub-mesh, hence it&apos;s undefined which algorithm to use for
 meshing boundary shared by two sub-meshes. Would you like to set
 the order of sub-mesh computation? </translation>
@@ -7459,6 +7940,17 @@ It is impossible to read point coordinates from file</translation>
         <translation>Generate</translation>
     </message>
 </context>
+<context>
+    <name>SMESHGUI_MakeFull2DFrom3DDlg</name>
+    <message>
+        <source>CAPTION</source>
+        <translation>Create 2D mesh from 3D elements</translation>
+    </message>
+    <message>
+        <source>2D_FROM_3D_ELEMENTS</source>
+        <translation>2D from 3D</translation>
+    </message>
+</context>    
 <context>
     <name>SMESHGUI_Make2DFrom3DDlg</name>
     <message>
@@ -7510,6 +8002,43 @@ It is impossible to read point coordinates from file</translation>
         <translation>Create group</translation>
     </message>
 </context>
+<context>
+    <name>SMESHGUI_MakeFull2DFrom3DOp</name>
+    <message>
+        <source>NB_ADDED</source>
+        <translation>%1 boundary elements have been added</translation>
+    </message>
+    <message>
+        <source>WRONG_GROUPS</source>
+        <translation>The following groups have not been processed
+as they are of improper type:
+%1</translation>
+    </message>
+    <message>
+        <source>SMESH_ERR_NO_INPUT_MESH</source>
+        <translation>Source mesh is not specified</translation>
+    </message>
+    <message>
+        <source>SMESH_TOO_MANY_MESHES</source>
+        <translation>Only one mesh can be processed at once</translation>
+    </message>
+    <message>
+        <source>SMESH_NOT_ONLY_GROUPS</source>
+        <translation>Can&apos;t process meshes and groups at once</translation>
+    </message>
+    <message>
+        <source>SMESH_ERR_NO_3D_ELEMENTS</source>
+        <translation>The source objects do not contain 3D elements</translation>
+    </message>
+    <message>
+        <source>SMESH_ERR_MESH_NAME_NOT_SPECIFIED</source>
+        <translation>New mesh name is not specified</translation>
+    </message>
+    <message>
+        <source>SMESH_ERR_GRP_NAME_NOT_SPECIFIED</source>
+        <translation>Group name is not specified</translation>
+    </message>
+</context>
 <context>
     <name>SMESHGUI_Make2DFrom3DOp</name>
     <message>
@@ -8322,7 +8851,7 @@ as they are of improper type:
     <message>
         <source>SUBSHAPES_NOT_FOUND_MSG</source>
         <translation>
-Some sub-shapes not found in the new geometry. They are listed 
+Some sub-shapes not found in the new geometry. They are listed
 below along with dependent mesh objects that are marked with
 red in the Object Browser.</translation>
     </message>
@@ -8421,6 +8950,10 @@ red in the Object Browser.</translation>
         <source>OBJECT</source>
         <translation>Object</translation>
     </message>
+     <message>
+         <source>OBJECTS</source>
+         <translation>Objects</translation>
+     </message>
     <message>
         <source>POINT</source>
         <translation>Point</translation>
@@ -8441,6 +8974,10 @@ red in the Object Browser.</translation>
         <source>VOLUMES</source>
         <translation>Volumes</translation>
     </message>
+    <message>
+        <source>REF_GROUPS</source>
+        <translation>Ref. objects (optional)</translation>
+    </message>
     <message>
         <source>OUTSIDE_VOLUME_NORMAL</source>
         <translation>Face normal outside volume</translation>
index 318c6294700d659cb8d02ed5c2f7b8b6a9fd3a64..9d00671aea312585b76d9d77c7b71165ba880031 100644 (file)
         <source>MED_FILES_FILTER</source>
         <translation>Fichiers MED</translation>
     </message>
-    <message>
-        <source>SAUV_FILES_FILTER</source>
-        <translation>Fichiers SAUV</translation>
-    </message>
     <message>
         <source>IDEAS_FILES_FILTER</source>
         <translation>Fichiers IDEAS</translation>
         <source>OVER_CONSTRAINED_VOLUME</source>
         <translation>Volumes sur-contraints</translation>
     </message>
+    <message>
+        <source>SCALED_JACOBIAN</source>
+        <translation>Jacobien normalisé</translation>
+    </message>
     <message>
         <source>MIN_DIAG_ELEMENTS</source>
         <translation>Diagonale minimum</translation>
         <source>MEN_COPY_MESH</source>
         <translation>Copier le maillage</translation>
     </message>
+    <message>
+    <source>MEN_CREATE_DUAL_MESH</source>
+        <translation>Création du maillage Dual</translation>
+    </message>
     <message>
         <source>MEN_CLIP</source>
         <translation>Plan de coupe</translation>
         <source>MEN_CONSTRUCT_GROUP</source>
         <translation>Construire un groupe</translation>
     </message>
+    <message>
+        <source>MEN_MG_ADAPT</source>
+        <translation>Remaillage avec MG_Adapt</translation>
+    </message>
+    <message>
+        <source>MEN_HOMARD_ADAPT</source>
+        <translation>Raffinement uniforme</translation>
+    </message>
+    <message>
+        <source>Args</source>
+        <translation>Arguments</translation>
+    </message>
+    <message>
+        <source>MeshOut</source>
+        <translation>Maillage en sortie</translation>
+    </message>
+    <message>
+        <source>MeshIn</source>
+        <translation>Maillage en entrée</translation>
+    </message>
+    <message>
+        <source>MEDFile</source>
+        <translation>Fichier MED</translation>
+    </message>
+    <message>
+        <source>Browser</source>
+        <translation>Arbre d'études</translation>
+    </message>
+    <message>
+        <source>Publish_MG_ADAPT</source>
+        <translation>Publication</translation>
+    </message>
+    <message>
+        <source>SIZE_MAP_FIELD</source>
+        <translation>Champ de la carte de taille</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_FIELD_NAME</source>
+        <translation>Nom du champ</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_MED_FILE_1</source>
+        <translation>Ce fichier MED est illisible.</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_MED_FILE_2</source>
+        <translation>Ce fichier MED ne contient aucun maillage.</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_MED_FILE_3</source>
+        <translation>Ce fichier MED contient plus d'un maillage.</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_MED_FILE_4</source>
+        <translation>Impossible de lire le maillage de ce fichier MED.</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_MED_FILE_5</source>
+        <translation>Ce fichier MED ne contient aucun champ.</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_ERROR</source>
+        <translation>Erreur</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_CH_ST</source>
+        <translation>Pas de temps choisi</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_RANK</source>
+        <translation>Numéro d'ordre</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_TSTP</source>
+        <translation>Pas de temps </translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_NO_T_ST</source>
+        <translation>Sans pas de temps</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_L_ST</source>
+        <translation>Dernier pas de temps</translation>
+    </message>
+    <message>
+        <source>MeshName</source>
+        <translation>Nom du maillage</translation>
+    </message>
+    <message>
+        <source>LOCAL_MG_ADAPT</source>
+        <translation>Locale</translation>
+    </message>
+    <message>
+        <source>BACKGRND_MG_ADAPT</source>
+        <translation>Arrière-plan</translation>
+    </message>
+    <message>
+        <source>CNST_MG_ADAPT</source>
+        <translation>Constante</translation>
+    </message>
+    <message>
+        <source>MED_FILE_BCKG</source>
+        <translation>Fichier MED de la carte en arrière-plan</translation>
+    </message>
+    <message>
+        <source>VALUE_MG_ADAPT</source>
+        <translation>Valeur</translation>
+    </message>
+    <message>
+        <source>SIZE_MAP_DEF</source>
+        <translation>Définition de la carte de taille</translation>
+    </message>
+    <message>
+        <source>ADVOP</source>
+        <translation>Options avancées</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_DIAG_1</source>
+        <translation>Adaptation réussie.</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_DIAG_2</source>
+        <translation>Echec de l'adaptation.</translation>
+    </message>
     <message>
         <source>MEN_CONV_TO_QUAD</source>
         <translation>Convertir vers/depuis quadratique</translation>
         <source>MEN_2D_FROM_3D</source>
         <translation>Créer les éléments de frontière</translation>
     </message>
+    <message>
+        <source>MEN_2D_FROM_3D_ELEMENTS</source>
+        <translation>Créer les faces des éléments volumiques</translation>
+    </message>
     <message>
         <source>MEN_MESH_ORDER</source>
         <translation>Changer la priorité des sous-maillages</translation>
     </message>
     <message>
         <source>MEN_EDIT</source>
-        <translation>Edition</translation>
+        <translation>Editer</translation>
     </message>
     <message>
         <source>MEN_EDIT_GROUP</source>
         <source>MEN_EXPORT_GMF</source>
         <translation>Exporter au format GMF</translation>
     </message>
-    <message>
-        <source>MEN_EXPORT_SAUV</source>
-        <translation>Exporter au format SAUV (ASCII)</translation>
-    </message>
     <message>
         <source>MEN_EXPORT_STL</source>
         <translation>Exporter au format STL</translation>
     </message>
     <message>
         <source>TOP_REORIENT_2D</source>
-        <translation>Réorienter des faces selon un vecteur</translation>
+        <translation>Réorienter des faces</translation>
     </message>
     <message>
         <source>MEN_REORIENT_2D</source>
-        <translation>Réorienter des faces selon un vecteur</translation>
+        <translation>Réorienter des faces</translation>
     </message>
     <message>
         <source>STB_REORIENT_2D</source>
-        <translation>Réorienter des faces selon un vecteur</translation>
+        <translation>Réorienter des faces</translation>
     </message>
     <message>
         <source>TOP_FIND_ELEM</source>
         <source>MEN_GMF</source>
         <translation>Fichier GMF</translation>
     </message>
-    <message>
-        <source>MEN_IMPORT_SAUV</source>
-        <translation>Fichier SAUV (ASCII)</translation>
-    </message>
-    <message>
-        <source>MEN_SAUV</source>
-        <translation>Fichier SAUV (ASCII)</translation>
-    </message>
     <message>
         <source>MEN_MERGE</source>
         <translation>Fusionner les nœuds</translation>
         <source>MEN_MESH_THROU_POINT</source>
         <translation>Déplacer un nœud</translation>
     </message>
+    <message>
+        <source>MEN_MOVE_NODE_INTRCT</source>
+        <translation>Déplacer un nœud à la souris</translation>
+    </message>
+    <message>
+        <source>MEN_SPLIT_DIAG_INTRC</source>
+        <translation>Ajouter un nœud sur un segment</translation>
+    </message>
+    <message>
+        <source>MEN_SPLIT_FACE_INTRC</source>
+        <translation>Ajouter un nœud dans un triangle</translation>
+    </message>
     <message>
         <source>MEN_MIN_ANG</source>
         <translation>Angle minimal</translation>
         <source>MEN_MODIFY</source>
         <translation>Modification</translation>
     </message>
+    <message>
+        <source>MEN_ADAPT</source>
+        <translation>Adaptation</translation>
+    </message>
     <message>
         <source>MEN_MEASURE</source>
         <translation>Outils de mesure</translation>
         <source>MEN_REMOVE_NODES</source>
         <translation>Nœuds</translation>
     </message>
+    <message>
+        <source>MEN_REMOVE_NODE_RECON</source>
+        <translation>Retirer un nœud avec reconnection</translation>
+    </message>
     <message>
         <source>MEN_REMOVE_ORPHAN_NODES</source>
         <translation>Nœuds orphelins</translation>
         <source>MEN_VOLUME_3D</source>
         <translation>Volume</translation>
     </message>
+    <message>
+        <source>MEN_SCALED_JACOBIAN</source>
+        <translation>Jacobien normalisé</translation>
+    </message>
     <message>
         <source>MEN_WARP</source>
         <translation>Angle de déformation</translation>
     </message>
+    <message>
+        <source>MEN_WARP_3D</source>
+        <translation>Déformation 3D</translation>
+    </message>
     <message>
         <source>MEN_WHAT_IS</source>
         <translation>Information sur un élément de maillage</translation>
@@ -1490,6 +1638,10 @@ Merci de les corriger, puis essayez de nouveau</translation>
         <source>SMESH_AUTO_DIM</source>
         <translation>Définition automatique des dimensions spatiales</translation>
     </message>
+    <message>
+        <source>SMESH_MED_SAVE_NUMS</source>
+        <translation>Export des indices</translation>
+    </message>
     <message>
         <source>SMESH_ZTOLERANCE</source>
         <translation>Tolérance en Z</translation>
@@ -1502,6 +1654,10 @@ Merci de les corriger, puis essayez de nouveau</translation>
         <source>SMESH_AVAILABLE</source>
         <translation>Disponible</translation>
     </message>
+    <message>
+        <source>SMESH_NOT_AVAILABLE</source>
+        <translation>Indisponible</translation>
+    </message>
     <message>
         <source>SMESH_AVAILABLE_ALGORITHMS</source>
         <translation>Algorithmes disponibles</translation>
@@ -1642,7 +1798,7 @@ Merci de les corriger, puis essayez de nouveau</translation>
     </message>
     <message>
         <source>SMESH_CONTINUE_MESH_VISUALIZATION</source>
-        <translation>La système semble manquer de mémoire pour visualiser le maillage,
+        <translation>Le système semble manquer de mémoire pour visualiser le maillage,
 ce qui peut faire planter l'application. Voulez-vous continuer la visualisation ?</translation>
     </message>
     <message>
@@ -2082,6 +2238,14 @@ Référez-vous à la documentation sur l'algorithme et la géométrie supportée
         <source>SMESH_LOGARITHMIC_SCALARBAR</source>
         <translation>Logarithmique</translation>
     </message>
+    <message>
+        <source>SMESH_TRESHOLD_SCALARBAR</source>
+        <translation>Seuil</translation>
+    </message>
+    <message>
+        <source>SMESH_WIREFRAME_OFF_SCALARBAR</source>
+        <translation>Filaire désactivé</translation>
+    </message>
     <message>
         <source>SMESH_MAKE_GROUPS</source>
         <translation>Générer les groupes</translation>
@@ -2708,6 +2872,10 @@ Référez-vous à la documentation sur l'algorithme et la géométrie supportée
     </message>
     <message>
         <source>SMESH_RENUMBERING</source>
+        <translation>Renumérotation</translation>
+    </message>
+    <message>
+        <source>SMESH_RENUMBER</source>
         <translation>Renuméroter</translation>
     </message>
     <message>
@@ -2728,7 +2896,7 @@ Référez-vous à la documentation sur l'algorithme et la géométrie supportée
     </message>
     <message>
         <source>SMESH_RM_HYP_WRN</source>
-        <translation>&quot;%1&quot; n'est pas attribué, mais:
+        <translation>&quot;%1&quot; n'est pas attribué, mais :
 </translation>
     </message>
     <message>
@@ -2895,6 +3063,86 @@ Référez-vous à la documentation sur l'algorithme et la géométrie supportée
         <source>SMESH_MULTICOLOR</source>
         <translation>Multicouleur</translation>
     </message>
+    <message>
+        <source>ADAPT_PREF_TAB_GENERAL</source>
+        <translation>Adaptation</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_NONE</source>
+        <translation>Sans</translation>
+    </message>
+    <message>
+        <source>ADAPT_WITH_HOMARD</source>
+        <translation>Adaptation avec HOMARD</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_MG_ADAPT</source>
+        <translation>Adaptation avec MG-Adapt</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_MG_ADAPT_FILE_MAILLAGE_OUT</source>
+        <translation>Ecriture du maillage de sortie</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_MG_ADAPT_PUBLICATION_MAILLAGE_OUT</source>
+        <translation>Publication du maillage de sortie</translation>
+    </message>
+    <message>
+        <source>OPTION_VALUE_COLUMN</source>
+        <translation>Option</translation>
+    </message>
+    <message>
+        <source>OPTION_NAME_COLUMN</source>
+        <translation>Valeur</translation>
+    </message>
+    <message>
+        <source>compute_ridges</source>
+        <translation>Calcul des crêtes</translation>
+    </message>
+    <message>
+        <source>max_memory</source>
+        <translation>Maximum mémoire (Mb)</translation>
+    </message>
+    <message>
+        <source>Adaption</source>
+        <translation>Adaptation</translation>
+    </message>
+    <message>
+        <source>components</source>
+        <translation>Composantes</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_MG_ADAPT_SIZE_MAP</source>
+        <translation>Carte de tailles</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_MG_ADAPT_SIZE_MAP_LOCAL</source>
+        <translation>Locale</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_MG_ADAPT_SIZE_MAP_BACKGROUND</source>
+        <translation>Arrière-plan</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_MG_ADAPT_TIME_STEP_LAST</source>
+        <translation>Dernier</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_MG_ADAPT_TIME_STEP</source>
+        <translation>Choix du pas de temps</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_MG_ADAPT_TIME_STEP_C</source>
+        <translation>Valeur</translation>
+    </message>
+    <message>
+        <source>MG_ADAPT_SELECT_FILE_0</source>
+        <translation>MG-ADAPT selection fichier MED</translation>
+    </message>
+    <message>
+        <source>ADAPT_PREF_MG_ADAPT_ADVOP</source>
+        <translation>Options avancées</translation>
+    </message>
     <message>
         <source>SMESH_VISU_PROBLEM</source>
         <translation>Impossible de visualiser le maillage, probablement à cause d'un manque de mémoire</translation>
@@ -3019,6 +3267,10 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>SMESH_Z</source>
         <translation>Z</translation>
     </message>
+    <message>
+        <source>SMESH_Z_SCALARBAR</source>
+        <translation>Z :</translation>
+    </message>
     <message>
         <source>STATE_ALGO_MISSING</source>
         <translation>Il manque l'algorithme %3 %2D</translation>
@@ -3075,6 +3327,10 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>STB_COPY_MESH</source>
         <translation>Copie le maillage</translation>
     </message>
+    <message>
+        <source>STB_CREATE_DUAL_MESH</source>
+        <translation>Création du maillage Dual</translation>
+    </message>
     <message>
         <source>STB_CLIP</source>
         <translation>Pan de coupe</translation>
@@ -3087,6 +3343,10 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>STB_COMPUTE</source>
         <translation>Calculer</translation>
     </message>
+    <message>
+        <source>STB_RE_COMPUTE</source>
+        <translation>Effacer + Calculer</translation>
+    </message>
     <message>
         <source>STB_COMPUTE_SUBMESH</source>
         <translation>Calculer le sous-maillage</translation>
@@ -3111,6 +3371,14 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>STB_CONSTRUCT_GROUP</source>
         <translation>Construire un groupe</translation>
     </message>
+    <message>
+        <source>STB_MG_ADAPT</source>
+        <translation>Remaillage avec MG_Adapt</translation>
+    </message>
+    <message>
+        <source>STB_HOMARD_ADAPT</source>
+        <translation>Raffinement uniforme</translation>
+    </message>
     <message>
         <source>STB_CONV_TO_QUAD</source>
         <translation>Convertir vers/depuis quadratique</translation>
@@ -3119,6 +3387,10 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>STB_2D_FROM_3D</source>
         <translation>Créer les éléments de frontière</translation>
     </message>
+    <message>
+        <source>STB_2D_FROM_3D_ELEMENTS</source>
+        <translation>Créer les faces des éléments volumiques</translation>
+    </message>
     <message>
         <source>STB_MESH_ORDER</source>
         <translation>Changer la priorité des sous-maillages</translation>
@@ -3247,10 +3519,6 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>STB_EXPORT_GMF</source>
         <translation>Exporter au format GMF</translation>
     </message>
-    <message>
-        <source>STB_EXPORT_SAUV</source>
-        <translation>Exporter au format SAUV (ASCII)</translation>
-    </message>
     <message>
         <source>STB_EXPORT_STL</source>
         <translation>Exporter au format STL</translation>
@@ -3337,7 +3605,7 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
     </message>
     <message>
         <source>STB_DEFLECTION_2D</source>
-        <translation>Deflection 2D</translation>
+        <translation>Déflection 2D</translation>
     </message>
     <message>
         <source>STB_MAP</source>
@@ -3383,14 +3651,6 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>STB_GMF</source>
         <translation>Exporter un fichier GMF</translation>
     </message>
-    <message>
-        <source>STB_IMPORT_SAUV</source>
-        <translation>Importer un fichier SAUV (ASCII)</translation>
-    </message>
-    <message>
-        <source>STB_SAUV</source>
-        <translation>Exporter un fichier SAUV (ASCII)</translation>
-    </message>
     <message>
         <source>STB_MERGE</source>
         <translation>Fusionner les nœuds</translation>
@@ -3403,6 +3663,18 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>STB_MESH_THROU_POINT</source>
         <translation>Déplacer un nœud</translation>
     </message>
+    <message>
+        <source>STB_MOVE_NODE_INTRCT</source>
+        <translation>Déplacer un nœud à la souris</translation>
+    </message>
+    <message>
+        <source>STB_SPLIT_DIAG_INTRC</source>
+        <translation>Ajouter un nœud à un segment</translation>
+    </message>
+    <message>
+        <source>STB_SPLIT_FACE_INTRC</source>
+        <translation>Ajouter un nœud à un triangle</translation>
+    </message>
     <message>
         <source>STB_MIN_ANG</source>
         <translation>Angle minimal</translation>
@@ -3491,6 +3763,10 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>STB_REMOVE_NODES</source>
         <translation>Supprimer les nœuds</translation>
     </message>
+    <message>
+        <source>STB_REMOVE_NODE_RECON</source>
+        <translation>Supprimer un nœud avec reconnection</translation>
+    </message>
     <message>
         <source>STB_REMOVE_ORPHAN_NODES</source>
         <translation>Supprimer les nœuds orphelins</translation>
@@ -3655,10 +3931,18 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>STB_VOLUME_3D</source>
         <translation>Volume</translation>
     </message>
+    <message>
+        <source>STB_SCALED_JACOBIAN</source>
+        <translation>Jacobien normalisé</translation>
+    </message>
     <message>
         <source>STB_WARP</source>
         <translation>Angle de déformation</translation>
     </message>
+    <message>
+        <source>STB_WARP_3D</source>
+        <translation>Déformation 3D</translation>
+    </message>
     <message>
         <source>STB_WHAT_IS</source>
         <translation>Information sur un élément ou un nœud de maillage</translation>
@@ -3687,6 +3971,10 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>TB_RENUMBER</source>
         <translation>Barre de renumérotation</translation>
     </message>
+    <message>
+        <source>TB_INTERACT</source>
+        <translation>Barre des modifications interactives</translation>
+    </message>
     <message>
         <source>TB_TRANSFORM</source>
         <translation>Barre des transformations</translation>
@@ -3707,6 +3995,10 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>TB_CTRL3D</source>
         <translation>Barre des contrôles des volumes</translation>
     </message>
+    <message>
+        <source>TB_ADAPTATION</source>
+        <translation>Barre de l'adaptation</translation>
+    </message>
     <message>
         <source>TB_MEASUREM</source>
         <translation>Barre des mesures</translation>
@@ -3787,6 +4079,10 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>TOP_COMPUTE</source>
         <translation>Calculer</translation>
     </message>
+    <message>
+        <source>TOP_RE_COMPUTE</source>
+        <translation>Effacer + Calculer</translation>
+    </message>
     <message>
         <source>TOP_COMPUTE_SUBMESH</source>
         <translation>Calculer le sous-maillage</translation>
@@ -3811,6 +4107,14 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>TOP_CONSTRUCT_GROUP</source>
         <translation>Construire un groupe</translation>
     </message>
+    <message>
+        <source>TOP_MG_ADAPT</source>
+        <translation>Remaillage avec MG_Adapt</translation>
+    </message>
+    <message>
+        <source>TOP_HOMARD_ADAPT</source>
+        <translation>Raffinement uniforme</translation>
+    </message>
     <message>
         <source>TOP_CONV_TO_QUAD</source>
         <translation>Convertir vers/de quadratique</translation>
@@ -3819,6 +4123,10 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>TOP_2D_FROM_3D</source>
         <translation>Créer les éléments de frontière</translation>
     </message>
+    <message>
+        <source>TOP_2D_FROM_3D_ELEMENTS</source>
+        <translation>Créer les faces des éléments volumiques</translation>
+    </message>
     <message>
         <source>TOP_MESH_ORDER</source>
         <translation>Changer la priorité des sous-maillages</translation>
@@ -3939,10 +4247,6 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>TOP_EXPORT_MED</source>
         <translation>Exporter au format MED</translation>
     </message>
-    <message>
-        <source>TOP_EXPORT_SAUV</source>
-        <translation>Exporter au format SAUV (ASCII)</translation>
-    </message>
     <message>
         <source>TOP_EXPORT_STL</source>
         <translation>Exporter au format STL</translation>
@@ -4075,14 +4379,6 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>TOP_GMF</source>
         <translation>Exporter un fichier GMF</translation>
     </message>
-    <message>
-        <source>TOP_IMPORT_SAUV</source>
-        <translation>Importer un fichier SAUV (ASCII)</translation>
-    </message>
-    <message>
-        <source>TOP_SAUV</source>
-        <translation>Exporter un fichier SAUV (ASCII)</translation>
-    </message>
     <message>
         <source>TOP_MERGE</source>
         <translation>Fusionner les nœuds</translation>
@@ -4095,6 +4391,18 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>TOP_MESH_THROU_POINT</source>
         <translation>Déplacer un nœud</translation>
     </message>
+    <message>
+        <source>TOP_MOVE_NODE_INTRCT</source>
+        <translation>Deplacer un nœud à la souris</translation>
+    </message>
+    <message>
+        <source>TOP_SPLIT_DIAG_INTRC</source>
+        <translation>Ajouter un nœud sur un segment</translation>
+    </message>
+    <message>
+        <source>TOP_SPLIT_FACE_INTRC</source>
+        <translation>Ajouter un nœud dans un triangle</translation>
+    </message>
     <message>
         <source>TOP_MIN_ANG</source>
         <translation>Angle minimal</translation>
@@ -4183,6 +4491,10 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>TOP_REMOVE_NODES</source>
         <translation>Supprimer les nœuds</translation>
     </message>
+    <message>
+        <source>TOP_REMOVE_NODE_RECON</source>
+        <translation>Supprimer un nœud avec reconnection</translation>
+    </message>
     <message>
         <source>TOP_REMOVE_ORPHAN_NODES</source>
         <translation>Supprimer les nœuds orphelins</translation>
@@ -4343,10 +4655,18 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>TOP_VOLUME_3D</source>
         <translation>Volume</translation>
     </message>
+    <message>
+        <source>TOP_SCALED_JACOBIAN</source>
+        <translation>Jacobien normalisé</translation>
+    </message>
     <message>
         <source>TOP_WARP</source>
         <translation>Angle de déformation</translation>
     </message>
+    <message>
+        <source>TOP_WARP_3D</source>
+        <translation>Déformation 3D</translation>
+    </message>
     <message>
         <source>TOP_WHAT_IS</source>
         <translation>Information sur l'élément de maillage</translation>
@@ -4371,6 +4691,10 @@ Utilisez le menu &quot;Visualiser une entité&quot; pour les afficher.
         <source>WARP_ELEMENTS</source>
         <translation>Déformation</translation>
     </message>
+    <message>
+        <source>WARP_3D_ELEMENTS</source>
+        <translation>Déformation 3D</translation>
+    </message>
     <message>
         <source>MEN_FILE_INFO</source>
         <translation>Information sur le fichier du maillage</translation>
@@ -4583,7 +4907,7 @@ Il ne peut pas être supprimé.</translation>
     </message>
     <message>
         <source>Generate mesh from CAD model or import mesh</source>
-        <translation type="unfinished">Generate mesh from CAD model or import mesh</translation>
+        <translation type="unfinished">Créer un maillage à partir d'un modèle CAO ou par importation</translation>
     </message>
 </context>
 <context>
@@ -4671,7 +4995,11 @@ Ouvrez une fenêtre VTK et essayez de nouveau</translation>
     </message>
     <message>
         <source>PREF_SHOW_WARN</source>
-        <translation>Affiche un avertissement quand un groupe est exporté</translation>
+        <translation>Afficher un avertissement quand un groupe est exporté</translation>
+    </message>
+    <message>
+        <source>PREF_MED_SAVE_NUMS</source>
+        <translation>Enregistrer les numéros des nœuds/mailles dans le fichier MED</translation>
     </message>
     <message>
         <source>PREF_ZTOLERANCE</source>
@@ -4939,7 +5267,7 @@ Ouvrez une fenêtre VTK et essayez de nouveau</translation>
     </message>
     <message>
         <source>PREF_SELECTION_INCREMENT</source>
-        <translation type="unfinished">Elements width increment</translation>
+        <translation type="unfinished">Incrément de largeur d'éléments</translation>
     </message>
     <message>
         <source>PREF_OBJECT_COLOR</source>
@@ -5035,71 +5363,71 @@ Ouvrez une fenêtre VTK et essayez de nouveau</translation>
     </message>
     <message>
         <source>INFO_WELCOME_TO_SMESH</source>
-        <translation type="unfinished">Welcome to Mesh</translation>
+        <translation>Bienvenue dans le module Mesh</translation>
     </message>
     <message>
         <source>INFO_GRP_CREATE_MESH</source>
-        <translation type="unfinished">Create mesh</translation>
+        <translation>Créer un maillage</translation>
     </message>
     <message>
         <source>INFO_DEFINE_ALGOS</source>
-        <translation type="unfinished">Choose algorithms</translation>
+        <translation>Choisir les algorithmes</translation>
     </message>
     <message>
         <source>INFO_DEFINE_HYPOS</source>
-        <translation type="unfinished">Define hypotheses</translation>
+        <translation>Définir des hypothèses</translation>
     </message>
     <message>
         <source>INFO_COMPUTE</source>
-        <translation type="unfinished">Compute</translation>
+        <translation>Calculer</translation>
     </message>
     <message>
         <source>INFO_REFINE</source>
-        <translation type="unfinished">Add refinements</translation>
+        <translation>Ajouter des raffinements</translation>
     </message>
     <message>
         <source>INFO_REFINE_LOCAL_SIZE</source>
-        <translation type="unfinished">via local sizes with some hypotheses</translation>
+        <translation>via des tailles locales dans certaines hypothèses</translation>
     </message>
     <message>
         <source>INFO_REFINE_SUBMESH</source>
-        <translation type="unfinished">via sub-meshes</translation>
+        <translation>via des sous-maillages</translation>
     </message>
     <message>
         <source>INFO_GRP_IMPORT_MESH</source>
-        <translation type="unfinished">Import mesh</translation>
+        <translation>Importer un maillage</translation>
     </message>
     <message>
         <source>INFO_AVAILABLE_FORMATS</source>
-        <translation type="unfinished">Available formats</translation>
+        <translation>Formats disponibles</translation>
     </message>
     <message>
         <source>INFO_GRP_CHECK_MESH</source>
-        <translation type="unfinished"> Check mesh quality</translation>
+        <translation>Contrôler la qualité du maillage</translation>
     </message>
     <message>
         <source>INFO_DISPLAY</source>
-        <translation type="unfinished">Display mesh</translation>
+        <translation>Afficher le maillage</translation>
     </message>
     <message>
         <source>INFO_QUALITY_INFO</source>
-        <translation type="unfinished">Display some quality criteria</translation>
+        <translation>Afficher des critères de qualité</translation>
     </message>
     <message>
         <source>INFO_QUALITY_AREA</source>
-        <translation type="unfinished">area</translation>
+        <translation>surface</translation>
     </message>
     <message>
         <source>INFO_QUALITY_VOLUME</source>
-        <translation type="unfinished">volume</translation>
+        <translation>volume</translation>
     </message>
     <message>
         <source>INFO_QUALITY_ASPECT_RATION</source>
-        <translation type="unfinished">aspect ration</translation>
+        <translation>Facteur de forme</translation>
     </message>
     <message>
         <source>INFO_CLIPPING</source>
-        <translation type="unfinished">Add clipping planes</translation>
+        <translation>Insérer un plan de coupe</translation>
     </message>
 </context>
 <context>
@@ -5417,6 +5745,29 @@ Sélectionner des éléments et essayer encore</translation>
         <translation>Attention: le maillage généré sera a priori non-conforme</translation>
     </message>
 </context>
+<context>
+    <name>SMESHGUI_CreateDualMeshDlg</name>
+    <message>
+        <source>CAPTION</source>
+        <translation>Create Dual Mesh</translation>
+    </message>
+    <message>
+        <source>MESH</source>
+        <translation>Maillage ou Sous-maillage</translation>
+    </message>
+    <message>
+        <source>NON_TETRA_MESH_WARNING</source>
+        <translation>Attention : Le maillage ne doit contenir que des tétrahédres</translation>
+    </message>
+    <message>
+        <source>DUAL_MESH_NAME</source>
+        <translation>Nom du maillage Dual</translation>
+    </message>
+    <message>
+        <source>PROJ_SHAPE</source>
+        <translation>Projection des élements de bord sur la géométrie</translation>
+    </message>
+</context>
 <context>
     <name>SMESHGUI_ConvToQuadOp</name>
     <message>
@@ -6503,6 +6854,10 @@ Indiquez-les et essayez de nouveau</translation>
         <source>DESTINATION</source>
         <translation>Destination</translation>
     </message>
+    <message>
+        <source>DESTINATION_BY_MOUSE</source>
+        <translation>Destination par clic souris</translation>
+    </message>
     <message>
         <source>MOVE_NODE</source>
         <translation>Déplacer un nœud</translation>
@@ -6531,6 +6886,120 @@ Indiquez-les et essayez de nouveau</translation>
         <translation>Le maillage à modifier n'est pas sélectionné</translation>
     </message>
 </context>
+<context>
+    <name>SMESHGUI_AddNodeOnSegmentDlg</name>
+    <message>
+        <source>CAPTION</source>
+        <translation>Ajout de nœud sur un segment</translation>
+    </message>
+    <message>
+        <source>SEGMENT_GROUP</source>
+        <translation>Segment entre triangles voisins</translation>
+    </message>
+    <message>
+        <source>SEGMENT</source>
+        <translation>Segment</translation>
+    </message>
+    <message>
+        <source>POSITION_GROUP</source>
+        <translation>Nœud sur le segment</translation>
+    </message>
+    <message>
+        <source>POSITION</source>
+        <translation>Position par clic de souris</translation>
+    </message>
+</context>
+<context>
+    <name>SMESHGUI_AddNodeOnSegmentOp</name>
+    <message>
+        <source>INVALID_EDGE</source>
+        <translation>Segment non valide</translation>
+    </message>
+    <message>
+        <source>INVALID_MESH</source>
+        <translation>Maillage à modifier non selectionner</translation>
+    </message>
+    <message>
+        <source>NO_ELEMENTS</source>
+        <translation>Le segment n'appartient à aucune face</translation>
+    </message>
+    <message>
+        <source>VOLUME_FOUND</source>
+        <translation>Ne peut pas découpé le segment d'un volume</translation>
+    </message>
+    <message>
+        <source>NOT_TRIANGLE_FACE_FOUND</source>
+        <translation>Cette opération ne fonctionne que sur des triangles</translation>
+    </message>
+    <message>
+        <source>BAD_POSITION</source>
+        <translation>La position sur le segment n'est pas valide</translation>
+    </message>
+</context>
+<context>
+    <name>SMESHGUI_AddNodeOnFaceDlg</name>
+    <message>
+        <source>CAPTION</source>
+        <translation>Ajout d'un nœud dans un triangle</translation>
+    </message>
+    <message>
+        <source>FACE_GROUP</source>
+        <translation>Triangle à découper</translation>
+    </message>
+    <message>
+        <source>FACE_ID</source>
+        <translation>ID</translation>
+    </message>
+    <message>
+        <source>XYZ_GROUP</source>
+        <translation>Position du nœud par clic de souris</translation>
+    </message>
+    <message>
+        <source>XYZ_NODE_ON_FACE</source>
+        <translation>Nœud sur la face</translation>
+    </message>
+</context>
+<context>
+    <name>SMESHGUI_AddNodeOnFaceOp</name>
+    <message>
+        <source>INVALID_MESH</source>
+        <translation>Maillage à modifier pas selectionné</translation>
+    </message>
+    <message>
+        <source>NOT_FACE</source>
+        <translation>Pas de face selectionnée</translation>
+    </message>
+    <message>
+        <source>INVALID_ID</source>
+        <translation>L'ID de la face n'est pas valide</translation>
+    </message>
+</context>
+<context>
+    <name>SMESHGUI_RemoveNodeReconnectionDlg</name>
+    <message>
+        <source>CAPTION</source>
+        <translation>Supression de nœud avec reconnection</translation>
+    </message>
+    <message>
+        <source>NODE_2REMOVE_ID</source>
+        <translation>ID</translation>
+    </message>
+    <message>
+        <source>NODE_2REMOVE</source>
+        <translation>Nœud</translation>
+    </message>
+</context>
+<context>
+    <name>SMESHGUI_RemoveNodeReconnectionOp</name>
+    <message>
+        <source>INVALID_ID</source>
+        <translation>L'ID du nœud n'est pas valide</translation>
+    </message>
+    <message>
+        <source>INVALID_MESH</source>
+        <translation>Maillage à modifier pas selectionné</translation>
+    </message>
+</context>
 <context>
     <name>SMESHGUI_FindElemByPointDlg</name>
     <message>
@@ -7489,6 +7958,17 @@ Il y a trop peu de points dans le fichier </translation>
         <translation>Génerer</translation>
     </message>
 </context>
+<context>
+    <name>SMESHGUI_MakeFull2DFrom3DDlg</name>
+    <message>
+        <source>CAPTION</source>
+        <translation>Créer les faces des éléments volumiques</translation>
+    </message>
+    <message>
+        <source>2D_FROM_3D_ELEMENTS</source>
+        <translation>Faces des éléments volumiques</translation>
+    </message>
+</context> 
 <context>
     <name>SMESHGUI_Make2DFrom3DDlg</name>
     <message>
@@ -7540,6 +8020,43 @@ Il y a trop peu de points dans le fichier </translation>
         <translation>Créer un groupe</translation>
     </message>
 </context>
+<context>
+    <name>SMESHGUI_MakeFull2DFrom3DOp</name>
+    <message>
+        <source>NB_ADDED</source>
+        <translation>%1 faces ont été ajoutés</translation>
+    </message>
+    <message>
+    <source>WRONG_GROUPS</source>
+    <translation>Les groupes suivants n'ont pas été traités
+en raison de leurs types incompatibles:
+%1</translation>
+    </message>
+    <message>
+        <source>SMESH_ERR_NO_INPUT_MESH</source>
+        <translation>Aucun maillage, sous-maillage ou groupe source n'est indiqué</translation>
+    </message>
+    <message>
+        <source>SMESH_TOO_MANY_MESHES</source>
+        <translation>Un seul maillage à la fois peut être traité</translation>
+    </message>
+    <message>
+        <source>SMESH_NOT_ONLY_GROUPS</source>
+        <translation>Impossible de traiter à la fois des maillages et des groupes</translation>
+    </message>
+    <message>
+        <source>SMESH_ERR_NO_3D_ELEMENTS</source>
+        <translation>L'objet source ne contient pas d'éléments 3D</translation>
+    </message>
+    <message>
+        <source>SMESH_ERR_MESH_NAME_NOT_SPECIFIED</source>
+        <translation>Le nom du nouveau maillage n'est pas indiqué</translation>
+    </message>
+    <message>
+        <source>SMESH_ERR_GRP_NAME_NOT_SPECIFIED</source>
+        <translation>Le nom du groupe n'est pas indiqué</translation>
+    </message>
+</context>
 <context>
     <name>SMESHGUI_Make2DFrom3DOp</name>
     <message>
@@ -8437,7 +8954,7 @@ en rouge dans le browser.</translation>
     <name>SMESHGUI_ReorientFacesDlg</name>
     <message>
         <source>CAPTION</source>
-        <translation>Réorienter des faces selon un vector</translation>
+        <translation>Réorienter des faces</translation>
     </message>
     <message>
         <source>REORIENT_FACES</source>
@@ -8451,6 +8968,10 @@ en rouge dans le browser.</translation>
         <source>OBJECT</source>
         <translation>Objet</translation>
     </message>
+     <message>
+         <source>OBJECTS</source>
+         <translation>Objets</translation>
+     </message>
     <message>
         <source>POINT</source>
         <translation>Point</translation>
@@ -8471,6 +8992,10 @@ en rouge dans le browser.</translation>
         <source>VOLUMES</source>
         <translation>Volumes</translation>
     </message>
+    <message>
+        <source>REF_GROUPS</source>
+        <translation>Objets de référence (optionnel)</translation>
+    </message>
     <message>
         <source>OUTSIDE_VOLUME_NORMAL</source>
         <translation>Normale de face en dehors du volume</translation>
index c1c0ae8c471223996b18a3d974f411228698cedc..a2704dba5e187ed04baa9b81ad972d603ea1db71 100644 (file)
       <source>MED_FILES_FILTER</source>
       <translation>MEDファイル</translation>
     </message>
-    <message>
-        <source>SAUV_FILES_FILTER</source>
-        <translation>SAUVファイル</translation>
-    </message>
     <message>
       <source>IDEAS_FILES_FILTER</source>
       <translation>IDEAS ファイル</translation>
       <source>NODE_CONNECTIVITY_NB</source>
       <translation>節点接続番号</translation>
     </message>
+    <message>
+      <source>SCALED_JACOBIAN</source>
+      <translation>スケーリングされたヤコビアン</translation>
+    </message>
     <message>
       <source>FREE_EDGES</source>
       <translation>フリーエッジ</translation>
       <source>MEN_EXPORT_GMF</source>
       <translation>GMF形式でエクスポート</translation>
     </message>
-    <message>
-      <source>MEN_EXPORT_SAUV</source>
-      <translation>SAUV (ASCII) 形式でエクスポート</translation>
-    </message>
     <message>
       <source>MEN_EXPORT_STL</source>
       <translation>STL形式でエクスポート</translation>
       <source>MEN_GMF</source>
       <translation>GMFファイル</translation>
     </message>
-    <message>
-      <source>MEN_IMPORT_SAUV</source>
-      <translation>SAUVファイル</translation>
-    </message>
-    <message>
-      <source>MEN_SAUV</source>
-      <translation>SAUVファイル</translation>
-    </message>
     <message>
       <source>MEN_MERGE</source>
       <translation>節点の結合</translation>
       <source>MEN_VOLUME_3D</source>
       <translation>ボリューム</translation>
     </message>
+    <message>
+      <source>MEN_SCALED_JACOBIAN</source>
+      <translation>スケーリングされたヤコビアン</translation>
+    </message>
     <message>
       <source>MEN_WARP</source>
       <translation>変形の角度</translation>
     </message>
+    <message>
+      <source>MEN_WARP_3D</source>
+      <translation>3Dワープ</translation>
+    </message>
     <message>
       <source>MEN_WHAT_IS</source>
       <translation>メッシュ要素について</translation>
       <source>SMESH_LOGARITHMIC_SCALARBAR</source>
       <translation>対数</translation>
     </message>
+    <message>
+        <source>SMESH_TRESHOLD_SCALARBAR</source>
+        <translation>しきい値</translation>
+    </message>
+    <message>
+        <source>SMESH_WIREFRAME_OFF_SCALARBAR</source>
+        <translation>ワイヤーフレーム オフ</translation>
+    </message>
     <message>
       <source>SMESH_MAKE_GROUPS</source>
       <translation>グループを生成します。</translation>
       <source>STB_EXPORT_GMF</source>
       <translation>組み換えをエクスポートします。</translation>
     </message>
-    <message>
-      <source>STB_EXPORT_SAUV</source>
-      <translation>SAUV (ASCII) 形式でエクスポート</translation>
-    </message>
     <message>
       <source>STB_EXPORT_STL</source>
       <translation>STL形式でエクスポート</translation>
       <source>STB_GMF</source>
       <translation>組み換えファイルをエクスポートします。</translation>
     </message>
-    <message>
-      <source>STB_IMPORT_SAUV</source>
-      <translation>バックアップ (ASCII) ファイルをインポートします。</translation>
-    </message>
-    <message>
-      <source>STB_SAUV</source>
-      <translation>バックアップ (ASCII) ファイルをエクスポートします。</translation>
-    </message>
     <message>
       <source>STB_MERGE</source>
       <translation>ノードを結合します。</translation>
       <source>STB_VOLUMES</source>
       <translation>ボリューム</translation>
     </message>
+    <message>
+      <source>STB_SCALED_JACOBIAN</source>
+      <translation>スケーリングされたヤコビアン</translation>
+    </message>
     <message>
       <source>STB_VOLUME_3D</source>
       <translation>ボリューム</translation>
       <source>STB_WARP</source>
       <translation>変形の角度</translation>
     </message>
+    <message>
+      <source>STB_WARP_3D</source>
+      <translation>3Dワープ</translation>
+    </message>
     <message>
       <source>STB_WHAT_IS</source>
       <translation>要素またはメッシュ ノードについて</translation>
       <source>TOP_EXPORT_MED</source>
       <translation>MED形式でエクスポート</translation>
     </message>
-    <message>
-      <source>TOP_EXPORT_SAUV</source>
-      <translation>SAUV (ASCII) 形式でエクスポート</translation>
-    </message>
     <message>
       <source>TOP_EXPORT_STL</source>
       <translation>STL形式でエクスポート</translation>
       <source>TOP_GMF</source>
       <translation>組み換えファイルをエクスポートします。</translation>
     </message>
-    <message>
-      <source>TOP_IMPORT_SAUV</source>
-      <translation>バックアップ (ASCII) ファイルをインポートします。</translation>
-    </message>
-    <message>
-      <source>TOP_SAUV</source>
-      <translation>バックアップ (ASCII) ファイルをエクスポートします。</translation>
-    </message>
     <message>
       <source>TOP_MERGE</source>
       <translation>ノードを結合します。</translation>
       <source>TOP_VOLUMES</source>
       <translation>ボリューム</translation>
     </message>
+    <message>
+      <source>TOP_SCALED_JACOBIAN</source>
+      <translation>スケーリングされたヤコビアン</translation>
+    </message>
     <message>
       <source>TOP_VOLUME_3D</source>
       <translation>ボリューム</translation>
       <source>TOP_WARP</source>
       <translation>変形の角度</translation>
     </message>
+    <message>
+      <source>TOP_WARP_3D</source>
+      <translation>3Dワープ</translation>
+    </message>
     <message>
       <source>TOP_WHAT_IS</source>
       <translation>メッシュの要素に関する情報</translation>
       <source>WARP_ELEMENTS</source>
       <translation>変形</translation>
     </message>
+    <message>
+      <source>WARP_3D_ELEMENTS</source>
+      <translation>3D 変形</translation>
+    </message>
     <message>
       <source>MEN_FILE_INFO</source>
       <translation>MEDファイルの情報</translation>
     </message>
     <message>
       <source>VOLUME_3D</source>
-      <translation>ã\83\9cã\83ªã\83¥ã\83¼ã\83 </translation>
+      <translation>ã\82¹ã\82±ã\83¼ã\83ªã\83³ã\82°ã\81\95ã\82\8cã\81\9fã\83¤ã\82³ã\83\93ã\82¢ã\83³</translation>
     </message>
     <message>
       <source>WARPING</source>
index d337f121f68b034cf2a9b6c34f048c7e3ff14d24..4fce54a8eadf0b46b419df767aaad3b40a923f72 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -61,6 +61,8 @@ SET(SMESHUtils_HEADERS
   SMESH_ControlPnt.hxx
   SMESH_Delaunay.hxx
   SMESH_Indexer.hxx
+  SMESH_BoostTxtArchive.hxx
+  SMESH_MGLicenseKeyGen.hxx
   )
 
 # --- sources ---
@@ -84,6 +86,8 @@ SET(SMESHUtils_SOURCES
   SMESH_Offset.cxx
   SMESH_Slot.cxx
   SMESH_PolyLine.cxx
+  SMESH_BoostTxtArchive.cxx
+  SMESH_MGLicenseKeyGen.cxx
   )
 
 # --- rules ---
index 91b15622335dd18ef1f05b2e8a7375a3c267d677..ba53155d3b3356dcf2c7664c359176e14d6d9804 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -1557,23 +1557,26 @@ int SMESH_Block::GetOrderedEdges (const TopoDS_Face&   theFace,
                           theEdges.begin(), ++theEdges.begin());
           TopExp::Vertices( theEdges.front(), vv[0], vv[1], true );
           if ( iE++ > theNbEdgesInWires.back() ) {
-#ifdef _DEBUG_
-            gp_Pnt p = BRep_Tool::Pnt( theFirstVertex );
-            MESSAGE ( " : Warning : vertex "<< theFirstVertex.TShape().operator->()
-                   << " ( " << p.X() << " " << p.Y() << " " << p.Z() << " )" 
-                   << " not found in outer wire of face "<< theFace.TShape().operator->()
-                   << " with vertices: " );
-            wExp.Init( *wlIt, theFace );
-            for ( int i = 0; wExp.More(); wExp.Next(), i++ )
+
+            if (SALOME::VerbosityActivated())
             {
-              TopoDS_Edge edge = wExp.Current();
-              edge = TopoDS::Edge( edge.Oriented( wExp.Orientation() ));
-              TopoDS_Vertex v = TopExp::FirstVertex( edge, true );
-              gp_Pnt p = BRep_Tool::Pnt( v );
-              MESSAGE_ADD ( i << " " << v.TShape().operator->() << " "
-                            << p.X() << " " << p.Y() << " " << p.Z() << " " << std::endl );
+              gp_Pnt p = BRep_Tool::Pnt( theFirstVertex );
+              MESSAGE ( " : Warning : vertex "<< theFirstVertex.TShape().operator->()
+                    << " ( " << p.X() << " " << p.Y() << " " << p.Z() << " )" 
+                    << " not found in outer wire of face "<< theFace.TShape().operator->()
+                    << " with vertices: " );
+              wExp.Init( *wlIt, theFace );
+              for ( int i = 0; wExp.More(); wExp.Next(), i++ )
+              {
+                TopoDS_Edge edge = wExp.Current();
+                edge = TopoDS::Edge( edge.Oriented( wExp.Orientation() ));
+                TopoDS_Vertex v = TopExp::FirstVertex( edge, true );
+                gp_Pnt p = BRep_Tool::Pnt( v );
+                MESSAGE_ADD ( i << " " << v.TShape().operator->() << " "
+                              << p.X() << " " << p.Y() << " " << p.Z() << " " << std::endl );
+              }
             }
-#endif
+
             break; // break infinite loop
           }
         }
index 66ef38a19ae6fc0edb96f7a40e1f8996417a4f31..84494fcbb1aee30c52d561b826fc98292b50eb54 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
diff --git a/src/SMESHUtils/SMESH_BoostTxtArchive.cxx b/src/SMESHUtils/SMESH_BoostTxtArchive.cxx
new file mode 100644 (file)
index 0000000..3c822f6
--- /dev/null
@@ -0,0 +1,152 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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_BoostTxtArchive.cxx
+// Created   : Thu Aug  5 21:19:31 2021
+// Author    : Edward AGAPOV (eap)
+
+#include "SMESH_BoostTxtArchive.hxx"
+
+#include <cctype>
+#include <sstream>
+#include <boost/archive/text_oarchive.hpp>
+
+
+using namespace SMESHUtils;
+
+BoostTxtArchive::BoostTxtArchive( const std::string& s ):
+  myArchiveReader( nullptr ),
+  myString( s ),
+  myStringFixed( false ),
+  myStream( nullptr ),
+  myOwnStream( true )
+{
+  myStream = new std::istringstream( myString );
+  makeReader();
+}
+
+BoostTxtArchive::BoostTxtArchive( std::istream& stream ):
+  myArchiveReader( nullptr ),
+  myStringFixed( false ),
+  myStream( &stream ),
+  myOwnStream( false )
+{
+  if ( std::istringstream * sstrm = dynamic_cast< std::istringstream* >( &stream ))
+    myString = sstrm->str();
+
+  makeReader();
+}
+
+BoostTxtArchive::~BoostTxtArchive()
+{
+  delete myArchiveReader; myArchiveReader = nullptr;
+  if ( myOwnStream )
+    delete myStream;
+}
+
+void BoostTxtArchive::makeReader()
+{
+  myArchiveReader = nullptr;
+  try
+  {
+    myArchiveReader = new boost::archive::text_iarchive( *myStream );
+  }
+  catch (...)
+  {
+    if ( fixString() )
+      try
+      {
+        myArchiveReader = new boost::archive::text_iarchive( *myStream );
+      }
+      catch(...)
+      {
+        myArchiveReader = nullptr;
+      }
+  }
+}
+
+namespace
+{
+  //================================================================================
+  /*!
+   * \brief Return archive created by current version of boost::archive
+   */
+  //================================================================================
+
+  std::string getCurrentVersionArchive( BoostTxtArchive & bta)
+  {
+    std::ostringstream strm;
+    boost::archive::text_oarchive archive( strm );
+    archive << bta;
+    return strm.str();
+  }
+}
+
+//================================================================================
+/*!
+ * \brief Change boost::archive library version in myString to be equal to
+ *        the current library version
+ *  \return bool - return true if the version is changed
+ */
+//================================================================================
+
+bool BoostTxtArchive::fixString()
+{
+  if ( myStringFixed )
+    return false;
+  myStringFixed = true;
+
+  const char*     sub = "serialization::archive ";
+  const size_t subLen = 23;
+
+  size_t where1 = myString.find( sub );
+  if ( where1 == std::string::npos )
+    return false;
+
+  std::string nowString = getCurrentVersionArchive( *this );
+  size_t where2 = nowString.find( sub );
+  if ( where2 == std::string::npos )
+    return false;
+
+  bool sameVersion = true;
+  for ( size_t i1 = where1 + subLen, i2 = where2 + subLen;
+        i2 < nowString.size();
+        ++i1, ++i2 )
+  {
+    if ( myString[ i1 ] != nowString[ i2 ] )
+    {
+      sameVersion = false;
+      myString[ i1 ] = nowString[ i2 ];
+    }
+    if ( isspace( myString[ i1 ]))
+      break;
+  }
+
+  if ( !sameVersion )
+  {
+    if ( myOwnStream )
+      delete myStream;
+    myStream    = new std::istringstream( myString );
+    myOwnStream = true;
+  }
+
+  return !sameVersion;
+}
diff --git a/src/SMESHUtils/SMESH_BoostTxtArchive.hxx b/src/SMESHUtils/SMESH_BoostTxtArchive.hxx
new file mode 100644 (file)
index 0000000..6e6a639
--- /dev/null
@@ -0,0 +1,95 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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_BoostTxtArchive.hxx
+// Created   : Thu Aug  5 19:10:24 2021
+// Author    : Edward AGAPOV (eap)
+
+
+#ifndef __SMESH_BoostTxtArchive_HXX__
+#define __SMESH_BoostTxtArchive_HXX__
+
+#include "SMESH_Utils.hxx"
+
+#include <boost/archive/text_iarchive.hpp>
+
+namespace SMESHUtils
+{
+  /*!
+   * \brief Load an object from a string created by boost::archive::text_oarchive.
+   *
+   * Try to workaround the issue that loading fails if the archive string
+   * is created by a newer version of boost::archive library.
+   *
+   * Usage: ObjType obj;  SMESHUtils::BoostTxtArchive( arcString ) >> obj;
+   */
+  class SMESHUtils_EXPORT BoostTxtArchive
+  {
+  public:
+
+    BoostTxtArchive( const std::string& s );
+    BoostTxtArchive( std::istream& stream );
+    ~BoostTxtArchive();
+
+    template< class T >
+      BoostTxtArchive & operator>>( T & t )
+    {
+      if ( myArchiveReader )
+        try
+        {
+          (*myArchiveReader) >> t;
+        }
+        catch (...)
+        {
+          if ( fixString() )
+            try
+            {
+              (*myArchiveReader) >> t;
+            }
+            catch(...)
+            {
+            }
+        }
+      return *this;
+    }
+
+  private:
+
+    void makeReader();
+    bool fixString();
+
+    boost::archive::text_iarchive* myArchiveReader;
+    std::string                    myString;        // archive to read
+    bool                           myStringFixed;   // is archive version changed
+    std::istream*                  myStream;        // stream holding myString
+    bool                           myOwnStream;     // is myStream created by me
+
+    // persistence used to create a current version archive
+    friend class boost::serialization::access;
+    template<class Archive>
+      void serialize(Archive & /*ar*/, const unsigned int /*version*/)
+    {
+    }
+  };
+}
+
+
+#endif
index 57be82e79b6bb2d9e503fc64cfb9ae4e9352debe..671fcc8d5c78f0e928a12c3d7d6132213beae285 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 57e4214ff0ab5c3d6b73eacf350c91d19cc6ad76..f73fe0ca9eae312267827e74227e87e0954ab2ee 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 2e644c13566c588da137706d99bdc9fdb1977055..73243d02b09f087605efb1e9def7a475f8474dd5 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -163,23 +163,15 @@ void SMESHUtils::createPointsSampleFromFace( const TopoDS_Face&       theFace,
   // Get the transformation associated to the face location
   gp_Trsf aTrsf = aLocation.Transformation();
 
-  // Get triangles
-  int nbTriangles = aTri->NbTriangles();
-  const Poly_Array1OfTriangle& triangles = aTri->Triangles();
-
-  // GetNodes
-  int nbNodes = aTri->NbNodes();
-  TColgp_Array1OfPnt nodes(1,nbNodes);
-  nodes = aTri->Nodes();
-
   // Iterate on triangles and subdivide them
+  int nbTriangles = aTri->NbTriangles();
   thePoints.reserve( thePoints.size() + nbTriangles );
   for ( int i = 1; i <= nbTriangles; i++ )
   {
-    const Poly_Triangle& aTriangle = triangles.Value(i);
-    gp_Pnt p1 = nodes.Value(aTriangle.Value(1));
-    gp_Pnt p2 = nodes.Value(aTriangle.Value(2));
-    gp_Pnt p3 = nodes.Value(aTriangle.Value(3));
+    const Poly_Triangle& aTriangle = aTri->Triangle(i);
+    gp_Pnt p1 = aTri->Node(aTriangle.Value(1));
+    gp_Pnt p2 = aTri->Node(aTriangle.Value(2));
+    gp_Pnt p3 = aTri->Node(aTriangle.Value(3));
 
     p1.Transform(aTrsf);
     p2.Transform(aTrsf);
index f19da4aa9210354b84bb0446602d26a808e7fdf9..caa57295d9d08e31065213dae58c5f3c9f33df6b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 704bd5eeeec67df950606d6e388c19a414abab9c..41f5191474f3ca9720f3d17bf0e648173949d208 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 22b1659f44dd33d8db10e6d0c825e991bb83b739..14ae9faf57748f6b32c46b823ff12265ab7d0557 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -191,6 +191,11 @@ const BRepMesh_Triangle* SMESH_Delaunay::FindTriangle( const gp_XY&
 
   gp_XY uv = UV.Multiplied( _scale );
 
+  // prevent infinite loop in case of numerical instability
+  // test case NRT_GRIDS_GEOM_BUGS_15_R7
+  const BRepMesh_Triangle* tria1 = 0;
+  const BRepMesh_Triangle* tria2 = tria;
+
   while ( tria )
   {
     // check if the uv is in tria
@@ -203,7 +208,9 @@ const BRepMesh_Triangle* SMESH_Delaunay::FindTriangle( const gp_XY&
     SMESH_MeshAlgos::GetBarycentricCoords( uv,
                                            nodeUVs[0], nodeUVs[1], nodeUVs[2],
                                            bc[0], bc[1] );
-    if ( bc[0] >= 0 && bc[1] >= 0 && bc[0] + bc[1] <= 1 )
+    if ( (bc[0] >= 0 && bc[1] >= 0 && bc[0] + bc[1] <= 1) ||
+         (tria == tria1 &&
+          bc[0] >= -1e-14 && bc[1] >= -1e-14 && bc[0] + bc[1] <= 1 + 1e-14) )
     {
       if ( _triaDS->GetNode( nodeIDs[0] ).Movability() != BRepMesh_Frontier ||
            _triaDS->GetNode( nodeIDs[1] ).Movability() != BRepMesh_Frontier ||
@@ -218,6 +225,10 @@ const BRepMesh_Triangle* SMESH_Delaunay::FindTriangle( const gp_XY&
       return tria;
     }
 
+    if (tria == tria1) return 0;
+    tria1 = tria2;
+    tria2 = tria;
+
     // look for a neighbor triangle, which is adjacent to a link intersected
     // by a segment( triangle center -> uv )
 
@@ -273,7 +284,7 @@ const BRepMesh_Triangle* SMESH_Delaunay::GetTriangleNear( int iBndNode )
   if ( iBndNode >= _triaDS->NbNodes() )
     return 0;
   int nodeIDs[3];
-  int nbNbNodes = _bndNodes.size();
+  int nbBndNodes = _bndNodes.size();
 #if OCC_VERSION_LARGE <= 0x07030000
   typedef BRepMesh::ListOfInteger TLinkList;
 #else
@@ -289,9 +300,9 @@ const BRepMesh_Triangle* SMESH_Delaunay::GetTriangleNear( int iBndNode )
       if ( tria.Movability() != BRepMesh_Deleted )
       {
         _triaDS->ElementNodes( tria, nodeIDs );
-        if ( nodeIDs[0]-1 < nbNbNodes &&
-             nodeIDs[1]-1 < nbNbNodes &&
-             nodeIDs[2]-1 < nbNbNodes )
+        if ( nodeIDs[0]-1 < nbBndNodes &&
+             nodeIDs[1]-1 < nbBndNodes &&
+             nodeIDs[2]-1 < nbBndNodes )
           return &tria;
       }
     }
@@ -301,9 +312,9 @@ const BRepMesh_Triangle* SMESH_Delaunay::GetTriangleNear( int iBndNode )
       if ( tria.Movability() != BRepMesh_Deleted )
       {
         _triaDS->ElementNodes( tria, nodeIDs );
-        if ( nodeIDs[0]-1 < nbNbNodes &&
-             nodeIDs[1]-1 < nbNbNodes &&
-             nodeIDs[2]-1 < nbNbNodes )
+        if ( nodeIDs[0]-1 < nbBndNodes &&
+             nodeIDs[1]-1 < nbBndNodes &&
+             nodeIDs[2]-1 < nbBndNodes )
           return &tria;
       }
     }
@@ -373,14 +384,29 @@ void SMESH_Delaunay::ToPython() const
   }
 
   int nodeIDs[3];
+  const char* dofName[] = { "Free",
+                            "InVolume",
+                            "OnSurface",
+                            "OnCurve",
+                            "Fixed",
+                            "Frontier",
+                            "Deleted" };
+  text << "# nb elements = " << _triaDS->NbElements() << endl;
+  std::vector< int > deletedElems;
   for ( int i = 0; i < _triaDS->NbElements(); ++i )
   {
     const BRepMesh_Triangle& t = _triaDS->GetElement( i+1 );
     if ( t.Movability() == BRepMesh_Deleted )
-      continue;
+      deletedElems.push_back( i+1 );
+    //   continue;
     _triaDS->ElementNodes( t, nodeIDs );
-    text << "mesh.AddFace([ " << nodeIDs[0] << ", " << nodeIDs[1] << ", " << nodeIDs[2] << " ])" << endl;
+    text << "mesh.AddFace([ " << nodeIDs[0] << ", " << nodeIDs[1] << ", " << nodeIDs[2] << " ]) # "
+         <<  dofName[ t.Movability() ] << endl;
   }
+  text << "mesh.MakeGroupByIds( 'deleted elements', SMESH.FACE, [";
+  for ( int id : deletedElems )
+    text << id << ",";
+  text << "])" << endl;
 
   const char* fileName = "/tmp/Delaunay.py";
   SMESH_File file( fileName, false );
index 9e7e33f79c35ae7aff3e114713931daad68ae048..b5f9f6fa62387f197ab1d30c67ce08704d84b2ad 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -61,7 +61,7 @@ class SMESHUtils_EXPORT SMESH_Delaunay
   const SMDS_MeshNode* NextNode( double bc[3], int triaNodes[3] );
 
   // return nb of nodes returned by NextNode()
-  int NbVisitedNodes() const { return _nbVisitedNodes; }
+  size_t NbVisitedNodes() const { return _nbVisitedNodes; }
 
 
   // find a triangle containing an UV, starting from a given triangle;
index 77df586f5312799921dee836a88ba8da136f2402..3048b69c4de0b149a420570d78d9af3cd45f2c4d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -81,12 +81,12 @@ bool SMESH_File::open()
   if ( !_map && length > 0 )
   {
 #ifdef WIN32
-#ifdef UNICODE
+#  ifdef UNICODE
     std::wstring  aName = Kernel_Utils::utf8_decode_s(_name);
     const wchar_t* name = aName.c_str();
-#else
+#  else
     char* name = _name.data();
-#endif
+#  endif
     _file = CreateFile(name, GENERIC_READ, FILE_SHARE_READ,
                        NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
     bool ok = ( _file != INVALID_HANDLE_VALUE );
index b4651cc39c0e43a706e47899f9984d2b5146e478..f4f4e25ad461d7042b71c64d3acfd865a4cde871 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 57297feab57b2794ca670f432fafe52fd744f2e3..9ebf85af9d6eeb4be6be4def272e1aa9f4511b64 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index e5913cdac85293d17833d4733437e8d7a173be9d..ce7fb230f0c7c42d6d418dca969b9ae421e27b70 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 9eb5aada2067db42398e567131ff8272e92e0b48..5618afbb1bef592dbe70fb9d6b9ca344d5d00876 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index b90ca2b8c19449ff28cb572428ca13327da36ff4..68cdf8aeada76f050da8320a5a515cb42e773c64 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #include <TopoDS_Vertex.hxx>
 #include <TopoDS_Wire.hxx>
 
-#ifdef _DEBUG_
-//#define _MYDEBUG_
 #include "SMESH_File.hxx"
 #include "SMESH_Comment.hxx"
-#endif
+#include "utilities.h"
 
 using namespace std;
 using boost::polygon::x;
@@ -155,12 +153,13 @@ namespace
   // }
 
   // -------------------------------------------------------------------------------------
-#ifdef _MYDEBUG_
+
   // writes segments into a txt file readable by voronoi_visualizer
   void inSegmentsToFile( vector< InSegment>& inSegments)
   {
-    if ( inSegments.size() > 1000 )
+    if (inSegments.size() > 1000 || !SALOME::VerbosityActivated())
       return;
+      
     const char* fileName = "/misc/dn25/salome/eap/salome/misc/Code/C++/MAdebug.txt";
     const char*     user = getenv("USER");
     if ( !user || strcmp( user, "eap" )) return;
@@ -219,11 +218,6 @@ namespace
       } while (edge != cell->incident_edge());
     }
   }
-#else
-  #define inSegmentsToFile(arg) {}
-  //void dumpEdge( const TVDEdge* edge ) {}
-  //void dumpCell( const TVDCell* cell ) {}
-#endif
 }
 // -------------------------------------------------------------------------------------
 
@@ -420,9 +414,9 @@ namespace
 
   void bndSegsToMesh( const vector< vector< BndSeg > >& bndSegsPerEdge )
   {
-    if ( bndSegsPerEdge.empty() )
+    if (bndSegsPerEdge.empty() || !SALOME::VerbosityActivated())
       return;
-#ifdef _MYDEBUG_
+
     if ( !getenv("bndSegsToMesh")) return;
     map< const TVDVertex *, int > v2Node;
     map< const TVDVertex *, int >::iterator v2n;
@@ -472,7 +466,6 @@ namespace
     text << "\n";
     file.write( text.c_str(), text.size() );
     cout << fileName << endl;
-#endif
   }
 
   //================================================================================
index 6737b43b3eaf2e2cb2182065ce3fa95f0e0bbf6f..316216bbf2d03f965ab3a6a614c003fa691fb5a6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
diff --git a/src/SMESHUtils/SMESH_MGLicenseKeyGen.cxx b/src/SMESHUtils/SMESH_MGLicenseKeyGen.cxx
new file mode 100644 (file)
index 0000000..d976809
--- /dev/null
@@ -0,0 +1,888 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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      : SMESHUtils_MGLicenseKeyGen.cxx
+// Created   : Sat Jul 31 18:54:16 2021
+// Author    : Edward AGAPOV (OCC)
+
+#include "SMESH_MGLicenseKeyGen.hxx"
+
+#include "SMESH_Comment.hxx"
+#include "SMESH_File.hxx"
+#include "SMESH_TryCatch.hxx"
+
+#include <Basics_DirUtils.hxx>
+#include <Basics_Utils.hxx>
+
+#include <cstdlib> // getenv, system
+
+#include <boost/filesystem.hpp>
+#include <boost/regex.hpp>
+namespace boofs = boost::filesystem;
+
+#ifdef WIN32
+
+#  include <windows.h>
+#  include <process.h>
+
+#  define LibHandle HMODULE
+#  define LoadLib( name ) LoadLibrary( name )
+#  define GetProc GetProcAddress
+#  define UnLoadLib( handle ) FreeLibrary( handle );
+
+#else // WIN32
+
+#  include <dlfcn.h>
+
+#  define LibHandle void*
+#  define LoadLib( name ) dlopen( name, RTLD_LAZY | RTLD_LOCAL )
+#  define GetProc dlsym
+#  define UnLoadLib( handle ) dlclose( handle );
+
+#endif // WIN32
+
+// to retrieve description of exception caught by SMESH_TRY
+#undef SMESH_CAUGHT
+#define SMESH_CAUGHT error =
+
+constexpr char MESHGEMS_OLD_STYLE[] = "MESHGEMS_OLD_STYLE";
+constexpr char SPATIAL_LICENSE[] = "SPATIAL_LICENSE";
+
+
+namespace
+{
+  static LibHandle theLibraryHandle = nullptr; //!< handle of a loaded library
+
+  const char* theEnvVar = "SALOME_MG_KEYGEN_LIB_PATH"; /* var specifies either full file name
+                                                          of libSalomeMeshGemsKeyGenerator or
+                                                          URL to download the library from */
+
+  const char* theTmpEnvVar = "SALOME_TMP_DIR"; // directory to download the library to
+
+  //-----------------------------------------------------------------------------------
+  /*!
+   * \brief Remove library file at destruction in case if it was downloaded from server
+   */
+  //-----------------------------------------------------------------------------------
+
+  struct LibraryFile
+  {
+    std::string _name; // full file name
+    bool        _isURL;
+
+    LibraryFile(): _isURL( false ) {}
+
+    ~LibraryFile()
+    {
+      if ( _isURL )
+      {
+        if ( theLibraryHandle )
+        {
+          UnLoadLib( theLibraryHandle );
+          theLibraryHandle = nullptr;
+        }
+
+        std::string tmpDir; // tmp dir that should not be removed
+        if ( const char* libPath = getenv( theTmpEnvVar ))
+        {
+          tmpDir = libPath;
+          while (( !tmpDir.empty() ) &&
+                 ( tmpDir.back() == '/' || tmpDir.back() == '\\' ))
+            tmpDir.pop_back();
+        }
+
+        while ( SMESH_File( _name ).remove() )
+        {
+          size_t length = _name.size();
+          _name = boofs::path( _name ).parent_path().string(); // goto parent directory
+          if ( _name.size() == length )
+            break; // no more parents
+
+          if ( _name == tmpDir )
+            break; // don't remove tmp dir
+
+          if ( !Kernel_Utils::IsEmptyDir( _name ))
+            break;
+        }
+      }
+    }
+  };
+
+
+  //================================================================================
+  /*!
+   * \brief Retrieve description of the last error
+   *  \param [out] error - return the description
+   *  \return bool - true if the description found
+   */
+  //================================================================================
+
+  bool getLastError( std::string& error )
+  {
+#ifndef WIN32
+
+    if ( const char* text = dlerror() )
+    {
+      error = text;
+      return true;
+    }
+    return false;
+
+#else
+
+    DWORD dw = GetLastError();
+    void* cstr;
+    DWORD msgLen = FormatMessage(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM,
+                                 NULL,
+                                 dw,
+                                 MAKELANGID(LANG_NEUTRAL, SUBLANG_DEFAULT), // Default language
+                                 (LPTSTR) &cstr,
+                                 0,
+                                 NULL
+                                 );
+    if ( msgLen > 0 ) {
+#  if defined( UNICODE )
+      error = Kernel_Utils::encode_s((wchar_t*)cstr);
+#  else
+      error = (char*)cstr;
+#  endif
+      LocalFree(cstr);
+    }
+
+    return (bool)msgLen;
+
+#endif
+  }
+
+  //================================================================================
+  /*!
+   * \brief Adjust file extension according to the platform
+   */
+  //================================================================================
+
+  bool setExtension( std::string& fileName, std::string& error )
+  {
+    if ( fileName.empty() )
+    {
+      error = "Library file name is empty";
+      return false;
+    }
+#if defined(WIN32)
+    std::string ext = ".dll";
+#elif defined(__APPLE__)
+    std::string ext = ".dylib";
+#else
+    std::string ext = ".so";
+#endif
+
+    fileName = fileName.substr( 0, fileName.find_last_of('.')) + ext;
+    return true;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Check if library file name looks like an URL
+   *  \param [in,out] libraryFile - holds file name and returns result in _isURL member field
+   *  \return bool - true if the file name looks like an URL
+   */
+  //================================================================================
+
+  bool isURL( LibraryFile & libraryFile )
+  {
+    {// round1
+      enum { SCHEME = 2, AUTHORITY = 4, PATH = 5 }; // sub-strings
+      boost::regex urlRegex ( R"(^(([^:\/?#]+):)?(//([^\/?#]*))?([^?#]*)(\?([^#]*))?(#(.*))?)",
+                              boost::regex::extended );
+      boost::smatch matchResult;
+
+      libraryFile._isURL = false;
+      if ( boost::regex_match( libraryFile._name, matchResult, urlRegex ))
+        libraryFile._isURL = ( !matchResult.str( SCHEME    ).empty() &&
+                              !matchResult.str( AUTHORITY ).empty() &&
+                              !matchResult.str( PATH      ).empty() );
+    }
+    if(libraryFile._isURL)
+      return true;
+    {// round2
+      enum { HOST = 2, PORT = 3, PATH = 4 }; // sub-strings
+      boost::regex urlRegex ( R"(^(([^:\/?#]+):)?([^/]+)?(/[^#]*))",
+                              boost::regex::extended );
+      boost::smatch matchResult;
+
+      libraryFile._isURL = false;
+      if ( boost::regex_match( libraryFile._name, matchResult, urlRegex ))
+        libraryFile._isURL = ( !matchResult.str( HOST ).empty() &&
+                              !matchResult.str( PORT ).empty() &&
+                              !matchResult.str( PATH ).empty() );
+    }
+    return libraryFile._isURL;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Download libraryFile._name URL to SALOME_TMP_DIR
+   *  \param [in,out] libraryFile - holds the URL and returns name of a downloaded file
+   *  \param [out] error - return error description
+   *  \return bool - is a success
+   */
+  //================================================================================
+
+  bool downloadLib( LibraryFile& libraryFile, std::string & error )
+  {
+    // check if can write into SALOME_TMP_DIR
+
+    std::string tmpDir = Kernel_Utils::GetTmpDirByEnv( theTmpEnvVar );
+    if ( tmpDir.empty() ||
+         !Kernel_Utils::IsExists( tmpDir ))
+    {
+      error = "Can't download " + libraryFile._name + " as SALOME_TMP_DIR is not correctly set";
+      return false;
+    }
+    if ( !Kernel_Utils::IsWritable( tmpDir ))
+    {
+      error = "Can't download " + libraryFile._name + " as '" + tmpDir + "' is not writable. "
+        "Check SALOME_TMP_DIR environment variable";
+      return false;
+    }
+
+    // Download
+
+    std::string url = libraryFile._name;
+
+#ifdef WIN32
+
+    std::string outFile = tmpDir + "MeshGemsKeyGenerator.dll";
+
+    // use wget (== Invoke-WebRequest) PowerShell command available since Windows 7
+    std::string psCmd = "wget -Uri " + url + " -OutFile " + outFile;
+    std::string   cmd = "powershell.exe " + psCmd;
+
+#else
+
+    std::string outFile = tmpDir + "libMeshGemsKeyGenerator.so";
+
+    std::string cmd = "smesh_wget.py " + url + " -O " + outFile;
+
+#endif
+
+    if ( Kernel_Utils::IsExists( outFile )) // remove existing file
+    {
+      SMESH_File lib( outFile, /*open=*/false );
+      if ( !lib.remove() )
+      {
+        error = lib.error();
+        return false;
+      }
+    }
+
+#ifndef WIN32
+    //[EDF25906]
+    std::string redirect = tmpDir + "redirect.out";
+    std::ostringstream oss;
+    oss << cmd << " " << redirect;
+    cmd = oss.str();
+#endif
+
+    system( cmd.c_str() ); // download
+
+#ifndef WIN32
+    {//[EDF25906]
+      std::ifstream infile(redirect);
+      infile.seekg(0, std::ios::end);
+      size_t length = infile.tellg();
+      infile.seekg(0, std::ios::beg);
+      std::unique_ptr<char []> buffer(new char[length+1]);
+      buffer[length] = '\0';
+      infile.read(const_cast<char *>( buffer.get() ),length);
+
+      MESSAGE( buffer.get() );
+    }
+    {
+      SMESH_File redirectFile( redirect, /*open=*/false );
+      redirectFile.remove();
+    }
+#endif
+
+    SMESH_File resultFile( outFile, /*open=*/false );
+    bool ok = ( resultFile.exists() && resultFile.size() > 0 );
+
+    if ( ok )
+      libraryFile._name = outFile;
+    else
+      error = "Can't download file " + url;
+
+    return ok;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Load libMeshGemsKeyGenerator.so
+   *  \param [out] error - return error description
+   *  \param [out] libraryFile - return library file name and _isURL flag
+   *  \return bool - is a success
+   */
+  //================================================================================
+
+  bool loadLibrary( std::string& error, LibraryFile& libraryFile )
+  {
+    if ( theLibraryHandle )
+      return true;
+
+    const char* libPath = getenv( theEnvVar );
+    if ( !libPath )
+    {
+      error = SMESH_Comment( "Environment variable ") <<  theEnvVar << " is not set";
+      return false;
+    }
+
+    libraryFile._name = libPath;
+    // if ( !setExtension( libraryFile._name, error )) // is it necessary?
+    //   return false;
+
+    if ( isURL( libraryFile ))
+    {
+      if ( !downloadLib( libraryFile, error ))
+      {
+        // try to fix extension
+        std::string url = libraryFile._name;
+        if ( !setExtension( libraryFile._name, error ))
+          return false;
+        if ( url == libraryFile._name )
+          return false; // extension not changed
+
+        if ( !downloadLib( libraryFile, error ))
+          return false;
+      }
+    }
+
+#if defined( WIN32 ) && defined( UNICODE )
+    std::wstring encodePath = Kernel_Utils::utf8_decode_s( libraryFile._name );
+    const wchar_t*     path = encodePath.c_str();
+#else
+    const char*        path = libraryFile._name.c_str();
+#endif
+
+    theLibraryHandle = LoadLib( path );
+    if ( !theLibraryHandle )
+    {
+      if ( ! getLastError( error ))
+        error = "Can't load library '" + libraryFile._name + "'";
+    }
+
+    return theLibraryHandle;
+  }
+
+} // anonymous namespace
+
+
+namespace SMESHUtils_MGLicenseKeyGen // API implementation
+{
+  //================================================================================
+  /*!
+   * \brief Sign a CAD
+   *  \param [in] meshgems_cad - pointer to a MG CAD object (meshgems_cad_t)
+   *  \param [out] error - return error description
+   *  \return bool - is a success
+   */
+  //================================================================================
+
+  bool SignCAD_After( void* meshgems_cad, std::string& error )
+  {
+    LibraryFile libraryFile;
+    if ( !loadLibrary( error, libraryFile ))
+      return false;
+
+    bool ok = false;
+    typedef bool (*SignFun)(void* );
+    SignFun signFun = (SignFun) GetProc( theLibraryHandle, "SignCAD" );
+    if ( !signFun )
+    {
+      if ( ! getLastError( error ))
+        error = SMESH_Comment( "Can't find symbol 'SignCAD' in '") << getenv( theEnvVar ) << "'";
+    }
+    else
+    {
+      SMESH_TRY;
+
+      ok = signFun( meshgems_cad );
+
+      SMESH_CATCH( SMESH::returnError );
+
+      if ( !error.empty() )
+        ok = false;
+      else if ( !ok )
+        error = "SignCAD() failed (located in '" + libraryFile._name + "')";
+    }
+    return ok;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Unlock a specific MeshGems product (for products called as a library)
+   *  \param [in] product - product of MeshGems to unlock
+   *  \param [out] error - return error description
+   *  \return bool - is a success
+   */
+  //================================================================================
+  bool UnlockProduct( const std::string& product, std::string& error )
+  {
+    MESSAGE("SMESH UnlockProduct: " << product);
+    LibraryFile libraryFile;
+    if ( !loadLibrary( error, libraryFile ))
+      return false;
+
+    bool ok = false;
+    typedef bool (*SignFun)(const std::string& );
+
+    // specific function to unlock each product
+    std::string function = "UnlockProduct";
+
+    SignFun signFun = (SignFun) GetProc( theLibraryHandle, function.c_str() );
+    if ( !signFun )
+    {
+      if ( ! getLastError( error ))
+        error = SMESH_Comment( "Can't find symbol '") << function << "' in '" << getenv( theEnvVar ) << "'";
+    }
+    else
+    {
+      SMESH_TRY;
+
+      ok = signFun( product.c_str() );
+
+      SMESH_CATCH( SMESH::returnError );
+
+      if ( !error.empty() )
+      {
+        std::cerr << "error: " << error << std::endl;
+        ok = false;
+      }
+      else if ( !ok )
+        error = "UnlockProduct() failed (located in '" + libraryFile._name + "')";
+    }
+    return ok;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Sign a CAD (or don't do it if env MESHGEMS_OLD_STYLE is set)
+   *  \param [in] meshgems_cad - pointer to a MG CAD object (meshgems_cad_t)
+   *  \param [out] error - return error description
+   *  \return bool - is a success
+   */
+  //================================================================================
+  bool SignCAD( void* meshgems_cad, std::string& error )
+  {
+    const char *meshGemsOldStyleEnvVar( getenv( MESHGEMS_OLD_STYLE ) );
+    if ( !meshGemsOldStyleEnvVar || strlen(meshGemsOldStyleEnvVar) == 0 )
+    {
+      if (NeedsMGSpatialEnvLicense(error))
+        // SignCAD is only called by cadsurf. Other components call SignMesh
+        return UnlockProduct("cadsurf", error);
+      else
+        return SignCAD_After(meshgems_cad, error);
+    }
+    else
+      return true;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Sign a mesh
+   *  \param [in] meshgems_mesh - pointer to a MG mesh (meshgems_mesh_t)
+   *  \param [out] error - return error description
+   *  \return bool - is a success
+   */
+  //================================================================================
+
+  bool SignMesh_After( void* meshgems_mesh, std::string& error )
+  {
+    LibraryFile libraryFile;
+    if ( !loadLibrary( error, libraryFile ))
+      return false;
+
+    bool ok = false;
+    typedef bool (*SignFun)(void* );
+    SignFun signFun = (SignFun) GetProc( theLibraryHandle, "SignMesh" );
+    if ( !signFun )
+    {
+      if ( ! getLastError( error ))
+        error = SMESH_Comment( "Can't find symbol 'SignMesh' in '") << getenv( theEnvVar ) << "'";
+    }
+    else
+    {
+      SMESH_TRY;
+
+      ok = signFun( meshgems_mesh );
+
+      SMESH_CATCH( SMESH::returnError );
+
+      if ( !error.empty() )
+        ok = false;
+      else if ( !ok )
+        error = "SignMesh() failed (located in '" + libraryFile._name + "')";
+    }
+    return ok;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Sign a mesh (or don't do it if env MESHGEMS_OLD_STYLE is set)
+   *  \param [in] meshgems_mesh - pointer to a MG mesh (meshgems_mesh_t)
+   *  \param [in] product - product of MeshGems to unlock
+   *  \param [out] error - return error description
+   *  \return bool - is a success
+   */
+  //================================================================================
+  bool SignMesh( void* meshgems_mesh, const std::string& product, std::string& error )
+  {
+    const char *meshGemsOldStyleEnvVar( getenv( MESHGEMS_OLD_STYLE ) );
+    if ( !meshGemsOldStyleEnvVar || strlen(meshGemsOldStyleEnvVar) == 0 )
+    {
+      if (NeedsMGSpatialEnvLicense(error))
+        // unlock product (MG 2.15)
+        return UnlockProduct(product, error);
+      else
+        // sign the mesh (MG 2.13 and 2.14)
+        return SignMesh_After(meshgems_mesh, error);
+    }
+    else
+      // use DLIM8 server (nothing to do here)
+      return true;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Return a license key to pass as argument to a MG mesher executable
+   *  \param [in] gmfFile - path to an input mesh file
+   *  \param [in] nb* - nb of entities in the input mesh
+   *  \param [out] error - return error description
+   *  \return std::string - the key
+   */
+  //================================================================================
+
+  std::string GetKey_After(const std::string& gmfFile,
+                           int                nbVertex,
+                           int                nbEdge,
+                           int                nbFace,
+                           int                nbVol,
+                           std::string&       error)
+  {
+    std::string key;
+    LibraryFile libraryFile;
+    if ( !loadLibrary( error, libraryFile ))
+      return key;
+
+    typedef std::string (*GetKeyFun)(std::string const &, int, int, int, int );
+    GetKeyFun keyFun = (GetKeyFun) GetProc( theLibraryHandle, "GetKey" );
+    if ( !keyFun )
+    {
+      if ( ! getLastError( error ))
+        error = SMESH_Comment( "Can't find symbol 'GetKey' in '") << getenv( theEnvVar ) << "'";
+    }
+    else
+    {
+      key = keyFun( gmfFile, nbVertex, nbEdge, nbFace, nbVol );
+    }
+    if ( key.empty() )
+      error = "GetKey() failed (located in '" + libraryFile._name + "')";
+
+    return key;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Return a license key to pass as argument to a MG mesher executable (>2.15)
+   *  \param [out] error - return error description
+   *  \return std::string - the key
+   */
+  //================================================================================
+
+  std::string GetKey_After(std::string&       error)
+  {
+    std::string key;
+    LibraryFile libraryFile;
+    if ( !loadLibrary( error, libraryFile ))
+      return key;
+
+    typedef std::string (*GetKeyFun)();
+    GetKeyFun keyFun = (GetKeyFun) GetProc( theLibraryHandle, "GetKey" );
+    if ( !keyFun )
+    {
+      if ( ! getLastError( error ))
+        error = SMESH_Comment( "Can't find symbol 'GetKey' in '") << getenv( theEnvVar ) << "'";
+    }
+    else
+    {
+      key = keyFun( );
+    }
+    if ( key.empty() )
+      error = "GetKey() failed (located in '" + libraryFile._name + "')";
+
+    return key;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Get MeshGems version major/minor/patch from the environment variables
+   *  \param [out] error - return error description
+   *  \return int - the version
+   */
+  //================================================================================
+  int GetMGVersionFromEnv(const char* env_variable)
+  {
+    MESSAGE("Entering GetMGVersionFromEnv and calling " << env_variable);
+    int version = -1;
+    if (getenv(env_variable) == nullptr )
+    {
+      MESSAGE("Could not find " << env_variable << " from environment");
+    }
+    else
+    {
+      version = std::stoi(std::string(getenv(env_variable)));
+    }
+    return version;
+  }
+  //================================================================================
+  /*!
+   * \brief Get MeshGems version major/minor/patch from the keygen library and meshgems built-in functions
+   *  \param [out] error - return error description
+   *  \return int - the function implemented in the library
+   */
+  //================================================================================
+  int GetMGVersionFromFunction(const char* function_name)
+  {
+    MESSAGE("Entering GetMGVersionFromFunction and calling " << function_name);
+    int version = -1;
+    typedef int (*GetKeyFun)();
+    GetKeyFun keyFun = (GetKeyFun) GetProc( theLibraryHandle, function_name);
+    if ( !keyFun )
+    {
+      MESSAGE("Could not find " << function_name << " from library");
+    }
+    else
+    {
+      version = keyFun();
+    }
+    return version;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Get MeshGems version from the keygen library or meshgems built-in functions
+   *  \param [out] error - return error description
+   *  \return int - the version
+   */
+  //================================================================================
+  int GetMGVersionHex(std::string&       error)
+  {
+    // load mgkeygen library
+    int v_min = -1;
+    LibraryFile libraryFile;
+    if ( !loadLibrary( error, libraryFile ))
+      return v_min;
+    MESSAGE("Extracting MeshGems version");
+
+    // get minor version
+    v_min = GetMGVersionFromFunction("meshgems_core_get_version_minor");
+    if (v_min == -1)
+      v_min = GetMGVersionFromFunction("GetVersionMinor");
+    if (v_min == -1)
+      v_min = GetMGVersionFromEnv("MESHGEMS_VERSION_MINOR");
+    if (v_min == -1)
+      error = "could not retrieve minor version (located in '" + libraryFile._name + "')";
+    MESSAGE("MeshGems minor version =  " << v_min);
+
+    // get major version
+    int v_maj = GetMGVersionFromFunction("meshgems_core_get_version_major");
+    if (v_maj == -1)
+      v_maj = GetMGVersionFromFunction("GetVersionMajor");
+    if (v_maj == -1)
+      v_maj = GetMGVersionFromEnv("MESHGEMS_VERSION_MAJOR");
+    if (v_maj == -1)
+      error = "could not retrieve major version (located in '" + libraryFile._name + "')";
+    MESSAGE("MeshGems major version = " << v_maj);
+
+    // get patch version
+    int v_patch = GetMGVersionFromFunction("meshgems_core_get_version_patch");
+    if (v_patch == -1)
+      v_patch = GetMGVersionFromFunction("GetVersionPatch");
+    if (v_patch == -1)
+      v_patch = GetMGVersionFromEnv("MESHGEMS_VERSION_PATCH");
+    if (v_patch == -1)
+      error = "could not retrieve patch version (located in '" + libraryFile._name + "')";
+    MESSAGE("MeshGems patch version = " << v_patch);
+
+    int v_hex = (v_maj << 16 | v_min << 8 | v_patch);
+    MESSAGE("v_hex: " << v_hex);
+
+    return v_hex;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Guess if the Spatial license is needed (if MeshGems is > 2.15.0)
+   *  \param [out] error - return error description
+   *  \return bool - true if MeshGems is > 2.15.0
+   */
+  //================================================================================
+  bool NeedsMGSpatialEnvLicense(std::string& error)
+  {
+    // if MeshGems version is > 2.15.0, need to set SPATIAL_LICENSE
+    int v_hex = GetMGVersionHex(error);
+    bool ok = (v_hex > MESHGEMS_215);
+    if (ok)
+      MESSAGE("MeshGems version is > 2.15.0, need to set SPATIAL_LICENSE");
+    return ok;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Set the SPATIAL_LICENSE environment variable
+   *  \param [out] error - return error description
+   *  \return bool - true in case of success
+   */
+  //================================================================================
+  bool SetMGSpatialEnvLicense(std::string& error)
+  {
+    int ok;
+    std::string key = GetKey(error);
+#ifndef WIN32
+    ok = setenv(SPATIAL_LICENSE, key.c_str(), 0); // 0 means do not overwrite
+#else
+    ok = Kernel_Utils::setenv(SPATIAL_LICENSE, key.c_str(), 0 );
+#endif
+    MESSAGE("Set SPATIAL_LICENSE");
+    return (ok==0);
+  }
+
+  //================================================================================
+  /*!
+   * \brief Get the license key from libMeshGemsKeyGenerator.so or $SPATIAL_LICENSE
+   * Called by plugins calling MG products as executables.
+   * If MESHGEMS_OLD_STYLE is set, return "0", to use old DLIM8 server license
+   * instead of the key.
+   *  \param [in] gmfFile - path to an input mesh file
+   *  \param [in] nb* - nb of entities in the input mesh
+   *  \param [out] error - return error description
+   *  \return std::string - the key
+   */
+  //================================================================================
+  std::string GetKey(const std::string& gmfFile,
+                     int                nbVertex,
+                     int                nbEdge,
+                     int                nbFace,
+                     int                nbVol,
+                     std::string&       error)
+  {
+    // default key if MESHGEMS_OLD_STYLE or SPATIAL_LICENSE is set
+    std::string key("0");
+    const char *meshGemsOldStyleEnvVar( getenv( MESHGEMS_OLD_STYLE ) );
+    if ( !meshGemsOldStyleEnvVar || strlen(meshGemsOldStyleEnvVar) == 0 )
+    {
+      const char *spatialLicenseEnvVar( getenv( SPATIAL_LICENSE ) );
+      if ( !spatialLicenseEnvVar || strlen(spatialLicenseEnvVar) == 0 )
+      {
+        if (NeedsMGSpatialEnvLicense(error))
+        {
+          // if MG version > 2.15, set environment license, don't return it as a key
+          // otherwise it will be printed in the command line
+          MESSAGE("SPATIAL_LICENSE not in env => we add it from MGKeygen .so");
+          SetMGSpatialEnvLicense(error);
+        }
+        else
+        {
+          // generate the key from the mesh info (MG 2.13 and 2.14)
+          MESSAGE("MG < 2.15 => get the key from MGKeygen .so and this mesh info");
+          key = GetKey_After(gmfFile,nbVertex,nbEdge,nbFace,nbVol,error);
+        }
+      }
+      else
+        MESSAGE("SPATIAL_LICENSE already in env => we use it");
+    }
+    if (! error.empty())
+      std::cerr << error;
+    return key;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Get the license key from libMeshGemsKeyGenerator.so or $SPATIAL_LICENSE
+   * Called for MG 2.15 by CADSurf and MG plugins calling MG products as library,
+   * i.e. compiled as library with -DSALOME_USE_MG_LIBS=ON
+   *  \param [out] error - return error description
+   *  \return std::string - the key
+   */
+  //================================================================================
+  std::string GetKey(std::string&       error)
+  {
+    // default key if not found in .so or in SPATIAL_LICENSE
+    std::string key("0");
+    const char *meshGemsOldStyleEnvVar( getenv( MESHGEMS_OLD_STYLE ) );
+    if ( !meshGemsOldStyleEnvVar || strlen(meshGemsOldStyleEnvVar) == 0 ){
+      const char *spatialLicenseEnvVar( getenv( SPATIAL_LICENSE ) );
+      if ( !spatialLicenseEnvVar || strlen(spatialLicenseEnvVar) == 0 )
+      {
+        MESSAGE("SPATIAL_LICENSE not in env => we add it from MGKeygen .so");
+        // use new style, i.e. key in a library
+        key = GetKey_After(error);
+      }
+      else
+      {
+        MESSAGE("SPATIAL_LICENSE already in env => we use it");
+        key = std::string(spatialLicenseEnvVar);
+      }
+    }
+    if (! error.empty())
+      std::cerr << error;
+    return key;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Return false if libMeshGemsKeyGenerator.so is not functional
+   *  \param [out] error - return error description
+   *  \return bool - is a success
+   */
+  //================================================================================
+
+  bool CheckKeyGenLibrary( std::string& error )
+  {
+    return !GetKey("",4,0,2,0,error ).empty();
+  }
+
+  //================================================================================
+  /*!
+   * \brief Return KeyGenerator library name
+   */
+  //================================================================================
+
+  std::string GetLibraryName()
+  {
+    std::string libName, error;
+    if ( const char* libPath = getenv( theEnvVar ))
+    {
+      libName = Kernel_Utils::GetBaseName( libPath );
+    }
+    else
+    {
+      libName = "libSalomeMeshGemsKeyGenerator";
+    }
+    setExtension( libName, error );
+    return libName;
+  }
+}
diff --git a/src/SMESHUtils/SMESH_MGLicenseKeyGen.hxx b/src/SMESHUtils/SMESH_MGLicenseKeyGen.hxx
new file mode 100644 (file)
index 0000000..04c6dd6
--- /dev/null
@@ -0,0 +1,68 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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      : SMESH_MGLicenseKeyGen.hxx
+// Created   : Sat Jul 31 18:41:04 2021
+// Author    : Edward AGAPOV (OCC)
+
+#ifndef __SMESHUtils_MGLicenseKeyGen_HXX__
+#define __SMESHUtils_MGLicenseKeyGen_HXX__
+
+#include "SMESH_Utils.hxx"
+
+#include <string>
+
+#define MESHGEMS_215 (2 << 16 | 15 << 8 | 0)
+
+/*!
+ * \brief Manage loading libSalomeMeshGemsKeyGenerator.[so|dll] and sing MeshGems CAD or mesh
+ */
+
+namespace SMESHUtils_MGLicenseKeyGen
+{
+  // MeshGems 2.13, 2.14 (for CADSurf)
+  SMESHUtils_EXPORT bool        SignCAD( void* meshgems_cad, std::string& error );
+
+  // MeshGems 2.15 (for products launched as library)
+  SMESHUtils_EXPORT bool        UnlockProduct( const std::string& product, std::string& error );
+
+  // MeshGems 2.13, 2.14 (for products launched as library)
+  SMESHUtils_EXPORT bool        SignMesh( void* meshgems_mesh, const std::string& product, std::string& error );
+
+  // MeshGems 2.13, 2.14 and 2.15 (for products launched as executables)
+  SMESHUtils_EXPORT std::string GetKey(const std::string& gmfFile,
+                                       int                nbVertex,
+                                       int                nbEdge,
+                                       int                nbFace,
+                                       int                nbVol,
+                                       std::string&       error);
+
+  // MeshGems 2.15 (for products launched as library)
+  SMESHUtils_EXPORT std::string GetKey( std::string& error );
+
+  SMESHUtils_EXPORT bool        CheckKeyGenLibrary( std::string& error );
+
+  SMESHUtils_EXPORT std::string GetLibraryName();
+  SMESHUtils_EXPORT int         GetMGVersionFromFunction(const char* function_name);
+  SMESHUtils_EXPORT int         GetMGVersionFromEnv(const char* env_variable);
+  SMESHUtils_EXPORT int         GetMGVersionHex(std::string& error);
+  SMESHUtils_EXPORT bool        NeedsMGSpatialEnvLicense(std::string& error);
+  SMESHUtils_EXPORT bool        SetMGSpatialEnvLicense(std::string& error);
+}
+
+#endif
index 3bc48ff243dd1b10fae5b9020840507dfed913ce..24958cc81fd77b243c71cd3142d8caf096d5b2d7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -253,6 +253,7 @@ namespace // Utils used in SMESH_ElementSearcherImpl::FindElementsByPoint()
       void init(const SMDS_MeshElement* elem, double tolerance);
     };
     std::vector< ElementBox* > _elements;
+    //std::string _name;
 
     typedef ObjectPool< ElementBox > TElementBoxPool;
 
@@ -281,15 +282,13 @@ namespace // Utils used in SMESH_ElementSearcherImpl::FindElementsByPoint()
                                        double               tolerance)
     :SMESH_Octree( new LimitAndPool() )
   {
-    int nbElems = mesh.GetMeshInfo().NbElements( elemType );
+    smIdType nbElems = mesh.GetMeshInfo().NbElements( elemType );
     _elements.reserve( nbElems );
 
     TElementBoxPool& elBoPool = getLimitAndPool()->_elBoPool;
 
-#ifdef _DEBUG_
-    if ( theElemIt && !theElemIt->more() )
+    if (SALOME::VerbosityActivated() && theElemIt && !theElemIt->more() )
       std::cout << "WARNING: ElementBndBoxTree constructed on empty iterator!" << std::endl;
-#endif
 
     SMDS_ElemIteratorPtr elemIt = theElemIt ? theElemIt : mesh.elementsIterator( elemType );
     while ( elemIt->more() )
@@ -342,6 +341,15 @@ namespace // Utils used in SMESH_ElementSearcherImpl::FindElementsByPoint()
 
       if ( child->isLeaf() && child->_elements.capacity() > child->_elements.size() )
         SMESHUtils::CompactVector( child->_elements );
+
+      // child->_name = _name + char('0' + j);
+      // if ( child->isLeaf() && child->_elements.size() )
+      // {
+      //   cout << child->_name << " ";
+      //   for ( size_t i = 0; i < child->_elements.size(); ++i )
+      //     cout << child->_elements[i]->_element->GetID() << " ";
+      //   cout << endl;
+      // }
     }
   }
 
@@ -688,6 +696,9 @@ bool SMESH_ElementSearcherImpl::getIntersParamOnLine(const gp_Lin&           lin
     GC_MakeSegment edge( SMESH_TNodeXYZ( face->GetNode( i )),
                          SMESH_TNodeXYZ( face->GetNode( (i+1)%nbNodes) ));
     anExtCC.Init( lineCurve, edge.Value() );
+    if ( !anExtCC.Extrema().IsDone() ||
+         anExtCC.Extrema().IsParallel() )
+      continue;
     if ( anExtCC.NbExtrema() > 0 && anExtCC.LowerDistance() <= tol)
     {
       Standard_Real pl, pe;
@@ -1981,7 +1992,11 @@ SMESH_MeshAlgos::FindSharpEdges( SMDS_Mesh* theMesh,
   typedef std::pair< bool, const SMDS_MeshNode* >                            TIsSharpAndMedium;
   typedef NCollection_DataMap< SMESH_TLink, TIsSharpAndMedium, SMESH_TLink > TLinkSharpMap;
 
-  TLinkSharpMap linkIsSharp( theMesh->NbFaces() );
+  TLinkSharpMap linkIsSharp;
+  Standard_Integer nbBuckets = FromSmIdType<Standard_Integer>( theMesh->NbFaces() );
+  if ( nbBuckets > 0 )
+    linkIsSharp.ReSize( nbBuckets );
+
   TIsSharpAndMedium sharpMedium( true, 0 );
   bool                 & isSharp = sharpMedium.first;
   const SMDS_MeshNode* & nMedium = sharpMedium.second;
@@ -2088,7 +2103,10 @@ SMESH_MeshAlgos::SeparateFacesByEdges( SMDS_Mesh* theMesh, const std::vector< Ed
 
   typedef std::vector< const SMDS_MeshElement* >                    TFaceVec;
   typedef NCollection_DataMap< SMESH_TLink, TFaceVec, SMESH_TLink > TFacesByLinks;
-  TFacesByLinks facesByLink( theMesh->NbFaces() );
+  TFacesByLinks facesByLink;
+  Standard_Integer nbBuckets = FromSmIdType<Standard_Integer>( theMesh->NbFaces() );
+  if ( nbBuckets > 0 )
+    facesByLink.ReSize( nbBuckets );
 
   std::vector< const SMDS_MeshNode* > faceNodes;
   for ( SMDS_FaceIteratorPtr faceIt = theMesh->facesIterator(); faceIt->more(); )
@@ -2242,6 +2260,56 @@ std::vector< const SMDS_MeshNode*> SMESH_MeshAlgos::GetCommonNodes(const SMDS_Me
   return common;
 }
 
+//================================================================================
+/*!
+ * \brief Return true if a node is on a boundary of 2D mesh.
+ *        Optionally returns two neighboring boundary nodes (or more in non-manifold mesh)
+ */
+//================================================================================
+
+bool SMESH_MeshAlgos::IsOn2DBoundary( const SMDS_MeshNode*                 theNode,
+                                      std::vector< const SMDS_MeshNode*> * theNeibors )
+{
+  typedef NCollection_DataMap< SMESH_TLink, int, SMESH_TLink > TLinkCountMap;
+  TLinkCountMap linkCountMap( 10 );
+
+  int nbFreeLinks = 0;
+  for ( SMDS_ElemIteratorPtr fIt = theNode->GetInverseElementIterator(SMDSAbs_Face); fIt->more(); )
+  {
+    const SMDS_MeshElement* face = fIt->next();
+    const int          nbCorners = face->NbCornerNodes();
+
+    int    iN = face->GetNodeIndex( theNode );
+    int iPrev = ( iN - 1 + nbCorners ) % nbCorners;
+    int iNext = ( iN + 1 ) % nbCorners;
+
+    for ( int i : { iPrev, iNext } )
+    {
+      SMESH_TLink link( theNode, face->GetNode( i ));
+      int* count = linkCountMap.ChangeSeek( link );
+      if ( count )  ++( *count );
+      else          linkCountMap.Bind( link, 1 );
+
+      if ( !count ) ++nbFreeLinks;
+      else          --nbFreeLinks;
+    }
+  }
+
+  if ( theNeibors )
+  {
+    theNeibors->clear();
+    theNeibors->reserve( nbFreeLinks );
+    for ( TLinkCountMap::Iterator linkIt( linkCountMap ); linkIt.More(); linkIt.Next() )
+      if ( linkIt.Value() == 1 )
+      {
+        theNeibors->push_back( linkIt.Key().node1() );
+        if ( theNeibors->back() == theNode )
+          theNeibors->back() = linkIt.Key().node2();
+      }
+  }
+  return nbFreeLinks > 0;
+}
+
 //================================================================================
 /*!
  * \brief Return true if node1 encounters first in the face and node2, after
@@ -2506,3 +2574,111 @@ SMESH_ElementSearcher* SMESH_MeshAlgos::GetElementSearcher(SMDS_Mesh&
 {
   return new SMESH_ElementSearcherImpl( mesh, tolerance, elemIt );
 }
+
+
+//================================================================================
+/*!
+ * \brief Intersect a ray with a convex volume
+ *  \param [in] ray - the ray
+ *  \param [in] rayLen - ray length
+ *  \param [in] vol - the volume
+ *  \param [out] tMin - return a ray parameter where the ray enters the volume
+ *  \param [out] tMax - return a ray parameter where the ray exit the volume
+ *  \param [out] iFacetMin - facet index where the ray enters the volume
+ *  \param [out] iFacetMax - facet index  where the ray exit the volume
+ *  \return bool - true if the ray intersects the volume
+ */
+//================================================================================
+
+bool SMESH_MeshAlgos::IntersectRayVolume( const gp_Ax1& ray,
+                                          const double rayLen,
+                                          const SMDS_MeshElement* vol,
+                                          double & tMin,
+                                          double & tMax,
+                                          int & iFacetMin,
+                                          int & iFacetMax)
+{
+  /* Ray-Convex Polyhedron Intersection Test by Eric Haines, erich@eye.com
+   *
+   * This test checks the ray against each face of a polyhedron, checking whether
+   * the set of intersection points found for each ray-plane intersection
+   * overlaps the previous intersection results.  If there is no overlap (i.e.
+   * no line segment along the ray that is inside the polyhedron), then the
+   * ray misses and returns false; else true.
+   */
+  SMDS_VolumeTool vTool;
+  if ( !vTool.Set( vol ))
+    return false;
+
+  tMin = -Precision::Infinite() ;
+  tMax = rayLen ;
+
+  /* Test each plane in polyhedron */
+  for ( int iF = 0; iF < vTool.NbFaces(); ++iF )
+  {
+    const SMDS_MeshNode** fNodes = vTool.GetFaceNodes( iF );
+    gp_XYZ normal;
+    vTool.GetFaceNormal( iF,
+                         normal.ChangeCoord(1),
+                         normal.ChangeCoord(2),
+                         normal.ChangeCoord(3) );
+    double D = - ( normal * SMESH_NodeXYZ( fNodes[0] ));
+
+    /* Compute intersection point T and sidedness */
+    double vd = ray.Direction().XYZ() * normal;
+    double vn = ray.Location().XYZ() * normal + D;
+    if ( vd == 0.0 ) {
+      /* ray is parallel to plane - check if ray origin is inside plane's
+         half-space */
+      if ( vn > 0.0 )
+        /* ray origin is outside half-space */
+        return false;
+    }
+    else
+    {
+      /* ray not parallel - get distance to plane */
+      double t = -vn / vd ;
+      if ( vd < 0.0 )
+      {
+        /* front face - T is a near point */
+        if ( t > tMax ) return false;
+        if ( t > tMin ) {
+          /* hit near face */
+          tMin = t ;
+          iFacetMin = iF;
+        }
+      }
+      else
+      {
+        /* back face - T is a far point */
+        if ( t < tMin ) return false;
+        if ( t < tMax ) {
+          /* hit far face */
+          tMax = t ;
+          iFacetMax = iF;
+        }
+      }
+    }
+  }
+
+  /* survived all tests */
+  /* Note: if ray originates on polyhedron, may want to change 0.0 to some
+   * epsilon to avoid intersecting the originating face.
+   */
+  if ( tMin >= 0.0 ) {
+    /* outside, hitting front face */
+    return true;
+  }
+  else
+  {
+    if ( tMax < rayLen ) {
+      /* inside, hitting back face */
+      return true;
+    }
+    else
+    {
+      /* inside, but back face beyond tmax */
+      return false;
+    }
+  }
+}
index 51cc8dd3d98053f244c711b5899dcf56e2f5bee9..564ab11fe22cf5ee1fbeb05e9b7ec0a28fada2fc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -168,6 +168,13 @@ namespace SMESH_MeshAlgos
                              const gp_XY& t0, const gp_XY& t1, const gp_XY& t2,
                              double &    bc0, double &    bc1);
 
+  /*!
+   * \brief Intersect volume by a ray
+   */
+  bool IntersectRayVolume( const gp_Ax1& ray, const double rayLen,
+                           const SMDS_MeshElement* vol,
+                           double & tMin, double & tMax,
+                           int & iFacetMin, int & iFacetMax);
   /*!
    * Return a face having linked nodes n1 and n2 and which is
    * - not in avoidSet,
@@ -199,6 +206,12 @@ namespace SMESH_MeshAlgos
   SMESHUtils_EXPORT
   std::vector< const SMDS_MeshNode*> GetCommonNodes(const SMDS_MeshElement* e1,
                                                     const SMDS_MeshElement* e2);
+  /*!
+   * \brief Return true if a node is on a boundary of 2D mesh.
+   *        Optionally returns two neighboring boundary nodes (or more in non-manifold mesh)
+   */
+  SMESHUtils_EXPORT bool IsOn2DBoundary( const SMDS_MeshNode* node,
+                                         std::vector< const SMDS_MeshNode*> * neibors = nullptr );
   /*!
    * \brief Return true if node1 encounters first in the face and node2, after.
    *        The nodes are supposed to be neighbor nodes in the face.
@@ -225,6 +238,7 @@ namespace SMESH_MeshAlgos
 
   /*!
    * \brief Mark elements given by SMDS_Iterator
+   * \sa SMDS_Mesh::SetAllNodesNotMarked() and SMDS_Mesh::SetAllCellsNotMarked()
    */
   template< class ElemIter >
   void MarkElems( ElemIter it, const bool isMarked )
index 85df6d93bcd2379f2167b8bff644187598fca096..74c0dabc410d3619358c8ef02864b2057d093dae 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 859efb55348b7d64d4fbd87689514b246ec72d17..a1700ec5b68f541379c98879dec9fcc1ab3f00fb 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index ed65a74b885e5aa26136102993180fae498547c9..2933283ff0b878523382f97810ec8243daf69dc0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 670843c9e98447e5ebd68ff707352a4a83c76c7f..3376bf572bb45134ba59ea9383cf2e22645fa1a4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -108,7 +108,7 @@ class SMESHUtils_EXPORT SMESH_OctreeNode : public SMESH_Octree
   /*!
    * \brief Return nb nodes in a tree
    */
-  int                         NbNodes() const { return myNodes.size(); }
+  size_t                      NbNodes() const { return myNodes.size(); }
 
 protected:
 
index 01552f584133ff96cdb6ef46c86efeef87183d24..754411be86c868dd7184270f1434eb566c1a7e77 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -277,7 +277,7 @@ namespace
 
     static Standard_Integer HashCode(const CutFace& f, const Standard_Integer upper)
     {
-      return ::HashCode( f.myInitFace->GetID(), upper );
+      return ::HashCode( FromSmIdType<int>(f.myInitFace->GetID()), upper );
     }
     static Standard_Boolean IsEqual(const CutFace& f1, const CutFace& f2 )
     {
@@ -1933,8 +1933,8 @@ namespace SMESH_MeshAlgos
       for ( ; cutFacesIt != myCutFaces.cend(); ++cutFacesIt )
       {
         const CutFace& cf = *cutFacesIt;
-        int index = cf.myInitFace->GetID(); // index in theNew2OldFaces
-        if ((int) theNew2OldFaces.size() <= index )
+        smIdType index = cf.myInitFace->GetID(); // index in theNew2OldFaces
+        if ((smIdType) theNew2OldFaces.size() <= index )
           theNew2OldFaces.resize( index + 1 );
         theNew2OldFaces[ index ] = std::make_pair( cf.myInitFace, index );
       }
@@ -2004,7 +2004,7 @@ namespace SMESH_MeshAlgos
       // erase loops that are cut off by face intersections
       cf.CutOffLoops( loopSet, theSign, myNormals, cutOffLinks, cutOffCoplanarLinks );
 
-      int index = cf.myInitFace->GetID(); // index in theNew2OldFaces
+      smIdType index = cf.myInitFace->GetID(); // index in theNew2OldFaces
 
       const SMDS_MeshElement* tria;
       for ( size_t iL = 0; iL < loopSet.myNbLoops; ++iL )
@@ -2019,12 +2019,15 @@ namespace SMESH_MeshAlgos
         {
           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();
-#else
-            if ( i < 0 ) cf.Dump(); // avoid "CutFace::Dump() unused in release mode"
-#endif
+            if (SALOME::VerbosityActivated())
+            {
+              std::cerr << "BAD tria" << std::endl;
+              cf.Dump();
+            }
+            else
+            {
+              if ( i < 0 ) cf.Dump(); // avoid "CutFace::Dump() unused in release mode"
+            }
             continue;
           }
           if (!( tria = myMesh->FindFace( nodes[i], nodes[i+1], nodes[i+2] )))
@@ -2094,7 +2097,7 @@ namespace SMESH_MeshAlgos
           continue;
         for ( size_t iF = 0; iF < faces.size(); ++iF )
         {
-          int index = faces[iF]->GetID();
+          smIdType index = faces[iF]->GetID();
           // if ( //faces[iF]->isMarked()         ||  // kept part of cutFace
           //      !theNew2OldFaces[ index ].first ) // already removed
           //   continue;
@@ -2126,7 +2129,7 @@ namespace SMESH_MeshAlgos
       if ( cf.myInitFace->IsNull() )
         continue;
 
-      int index = cf.myInitFace->GetID(); // index in theNew2OldFaces
+      smIdType index = cf.myInitFace->GetID(); // index in theNew2OldFaces
       if ( !theNew2OldFaces[ index ].first )
         continue; // already cut off
 
@@ -3226,7 +3229,7 @@ SMDS_Mesh* SMESH_MeshAlgos::MakeOffset( SMDS_ElemIteratorPtr theFaceIt,
     for ( SMDS_ElemIteratorPtr fIt = newNode->GetInverseElementIterator(); fIt->more(); )
     {
       const SMDS_MeshElement* newFace = fIt->next();
-      const int             faceIndex = newFace->GetID();
+      const smIdType        faceIndex = newFace->GetID();
       const gp_XYZ&           oldNorm = normals[ faceIndex ];
       const gp_XYZ             newXYZ = oldXYZ + oldNorm * theOffset;
       if ( multiPos.empty() )
@@ -3275,7 +3278,7 @@ SMDS_Mesh* SMESH_MeshAlgos::MakeOffset( SMDS_ElemIteratorPtr theFaceIt,
       for ( SMDS_ElemIteratorPtr fIt = newNode->GetInverseElementIterator(); fIt->more(); )
       {
         const SMDS_MeshElement* newFace = fIt->next();
-        const int             faceIndex = newFace->GetID();
+        const smIdType        faceIndex = newFace->GetID();
         const gp_XYZ&           oldNorm = normals[ faceIndex ];
         if ( !SMESH_MeshAlgos::FaceNormal( newFace, faceNorm, /*normalize=*/false ) ||
              //faceNorm * moveVec < 0 )
index 4f2787e1197b578f7a34b7f4adfe8b373506e2c4..dd79006ba8eed9beae0535a7c428a7e0f7b96ca6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2018-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2018-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 5b5e36137fc8cfd394e4a039c70b3d8bc2e3e491..87215a779db47516a4c223fcf21293b5b752a10a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index e30474161c4b4f7fdbc67eabed9a501135125449..bff4cfaab8620c5aeabd95010bca995a3847e222 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 33c16aa277fe2ce57655b8d710e2d195ca04d32e..5f710b39e33fe3a549a7dc6e3565ea7ca720350a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2018-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2018-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -380,10 +380,10 @@ namespace
    */
   //================================================================================
 
-  void findGroups( const SMDS_MeshElement *                theFace,
-                   TGroupVec &                             theGroupsToUpdate,
-                   NCollection_DataMap< int, TGroupVec > & theFaceID2Groups,
-                   TGroupVec &                             theWorkGroups )
+  void findGroups( const SMDS_MeshElement *                                 theFace,
+                   TGroupVec &                                              theGroupsToUpdate,
+                   NCollection_DataMap< smIdType, TGroupVec, smIdHasher > & theFaceID2Groups,
+                   TGroupVec &                                              theWorkGroups )
   {
     theWorkGroups.clear();
     for ( size_t i = 0; i < theGroupsToUpdate.size(); ++i )
@@ -583,7 +583,7 @@ SMESH_MeshAlgos::MakeSlot( SMDS_ElemIteratorPtr             theSegmentIt,
   std::vector< SMESH_NodeXYZ > facePoints(4);
   std::vector< Intersector::TFace > cutFacePoints;
 
-  NCollection_DataMap< int, TGroupVec > faceID2Groups;
+  NCollection_DataMap< smIdType, TGroupVec, smIdHasher > faceID2Groups;
   TGroupVec groupVec;
 
   std::vector< gp_Ax1 > planeNormalVec(2);
index 7be28394398a5e9c6eb660f0d1fba8306f2650fa..f13e8a692398bdb566d87e4ea912e3bdd0531085 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 149ce45b77eaab7504c4b4e7fef6d6443b0c6847..db0d06dc20b9c812b966ba940cbab24d542719c0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 1c5044f0c0d5661d67191cc91c0158126e33f1ad..f3e7fbfc29a1fdc8172b0915ec464d52499d25c3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -39,6 +39,12 @@ const char* SMESH::returnError(const char* txt)
   return txt;
 }
 
+void SMESH::printErrorInDebugMode(const char* txt)
+{
+  if (SALOME::VerbosityActivated())
+    std::cerr << txt << " " << __FILE__ << ": " << __LINE__ << std::endl;
+}
+
 // ------------------------------------------------------------------
 
 #include "SMESH_ComputeError.hxx"
index eacb39a854a5ede490a2684ad82d089147d69a99..af7dec8280e92540ac4b11e82412ec9c96a24d82 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 
 //-------------------------------------------------------------------------------------
 // A macro makes description of a caught exception and calls onExceptionFun(const char*).
-// Two onExceptionFun() are defined here: SMESH::throwSalomeEx() and SMESH::doNothing().
-// To add your own catch close, define SMY_OWN_CATCH macro before including this file.
+// Several onExceptionFun() are defined here: throwSalomeEx(), doNothing() and returnError().
+// To add your own catch clause, define SMY_OWN_CATCH macro before including this file.
 
 #define SMESH_CATCH( onExceptionFun )                                   \
   }                                                                     \
+                                                                        \
+  SMY_OWN_CATCH                                                         \
+                                                                        \
   catch (Standard_Failure& ex)                                          \
   {                                                                     \
     SMESH_Comment text("OCCT Exception: ");                             \
@@ -92,9 +95,6 @@
   {                                                                     \
     SMESH_CAUGHT onExceptionFun( ex.what() );                           \
   }                                                                     \
-                                                                        \
-  SMY_OWN_CATCH                                                         \
-                                                                        \
   catch (...)                                                           \
   {                                                                     \
     SMESH_CAUGHT onExceptionFun("Unknown Exception caught");            \
@@ -108,6 +108,7 @@ namespace SMESH
   SMESHUtils_EXPORT void throwSalomeEx(const char* txt);
   SMESHUtils_EXPORT void doNothing(const char* txt);
   SMESHUtils_EXPORT const char* returnError(const char* txt);
+  SMESHUtils_EXPORT void printErrorInDebugMode(const char* txt);
 }
 
 #endif
index ddca90c8124121670c6c3c31471a3942d4e48bd1..2e920132d4aecac0e10e544f6e3340ae1f1f101a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -32,6 +32,8 @@
 #include "SMDS_SetIterator.hxx"
 #include "SMDS_MeshNode.hxx"
 
+#include <smIdType.hxx>
+
 #include <gp_XYZ.hxx>
 #include <gp_XY.hxx>
 
@@ -102,6 +104,8 @@ namespace SMESHUtils
     TOBJ* _obj;
     ArrayDeleter( TOBJ* obj ): _obj( obj ) {}
     ~ArrayDeleter() { delete [] _obj; _obj = 0; }
+    operator TOBJ*() { return _obj; }
+    TOBJ* get() { return _obj; }
   private:
     ArrayDeleter( const ArrayDeleter& );
   };
@@ -154,7 +158,7 @@ struct SMESH_TLink: public NLink
   // methods for usage of SMESH_TLink as a hasher in NCollection maps
   static int HashCode(const SMESH_TLink& link, int aLimit)
   {
-    return ::HashCode( link.node1()->GetID() + link.node2()->GetID(), aLimit );
+    return smIdHasher::HashCode( link.node1()->GetID() + link.node2()->GetID(), aLimit );
   }
   static Standard_Boolean IsEqual(const SMESH_TLink& l1, const SMESH_TLink& l2)
   {
@@ -198,6 +202,7 @@ struct SMESH_TNodeXYZ : public gp_XYZ
     }
     return false;
   }
+  void SetXYZ( const gp_XYZ& p ) { SetCoord( p.X(), p.Y(), p.Z() ); }
   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(); }
@@ -215,7 +220,7 @@ struct SMESH_Hasher
 {
   static Standard_Integer HashCode(const SMDS_MeshElement* e, const Standard_Integer upper)
   {
-    return ::HashCode( e->GetID(), upper );
+    return smIdHasher::HashCode( e->GetID(), upper );
   }
   static Standard_Boolean IsEqual( const SMDS_MeshElement* e1, const SMDS_MeshElement* e2 )
   {
index db80ddc683646ab0edc12cfaaaac6429e3012a9c..09e6212655561364d79fbac9443893f209bce5f9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 4f1695d841c1cbdce741a3310f8a22ecebcaa0dc..e90b62654a2ac0f40f826af6874078f4557d031a 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -28,9 +28,11 @@ INCLUDE_DIRECTORIES(
   ${KERNEL_INCLUDE_DIRS}
   ${GUI_INCLUDE_DIRS}
   ${GEOM_INCLUDE_DIRS}
+  ${MEDCOUPLING_INCLUDE_DIRS}
   ${PROJECT_SOURCE_DIR}/src/Controls
   ${PROJECT_SOURCE_DIR}/src/SMDS
   ${PROJECT_SOURCE_DIR}/src/SMESHDS
+  ${PROJECT_SOURCE_DIR}/src/SMESH_I
   ${PROJECT_SOURCE_DIR}/src/MEDWrapper
   ${PROJECT_SOURCE_DIR}/src/Driver
   ${PROJECT_SOURCE_DIR}/src/DriverMED
@@ -65,11 +67,13 @@ SET(_link_LIBRARIES
   ${KERNEL_Registry}
   ${KERNEL_SalomeHDFPersist}
   ${KERNEL_SalomeLifeCycleCORBA}
-  ${KERNEL_TOOLSDS}  
+  ${KERNEL_TOOLSDS}
   ${KERNEL_SalomeGenericObj}
   ${KERNEL_SalomeIDLKERNEL}
   ${KERNEL_SALOMELocalTrace}
   ${KERNEL_SalomeKernelHelpers}
+  ${KERNEL_SalomeDS}
+  ${KERNEL_SalomeCatalog}
   ${OpenCASCADE_ApplicationFramework_LIBRARIES}
   ${OpenCASCADE_ModelingAlgorithms_LIBRARIES}
   ${GEOM_GEOMClient}
@@ -88,6 +92,8 @@ SET(_link_LIBRARIES
 # header files / no moc processing
 SET(SMESHEngine_HEADERS
   SMESH_Gen_i.hxx
+  SMESH_Gen_No_Session_i.hxx
+  SMESH_Gen_Session_i.hxx
   SMESH_Algo_i.hxx
   SMESH_0D_Algo_i.hxx
   SMESH_1D_Algo_i.hxx
@@ -107,6 +113,10 @@ SET(SMESHEngine_HEADERS
   SMESH_PreMeshInfo.hxx
   SMESH_MeshPartDS.hxx
   SMESH.hxx
+  MG_ADAPT_i.hxx
+  SMESH_Homard_i.hxx
+  SMESH_SequentialMesh_i.hxx
+  SMESH_ParallelMesh_i.hxx
 )
 
 # --- sources ---
@@ -115,6 +125,8 @@ SET(SMESHEngine_HEADERS
 SET(SMESHEngine_SOURCES
   SMESH_Gen_i.cxx
   SMESH_Gen_i_1.cxx
+  SMESH_Gen_No_Session_i.cxx
+  SMESH_Gen_Session_i.cxx
   SMESH_PythonDump.cxx
   SMESH_Mesh_i.cxx
   SMESH_subMesh_i.cxx
@@ -132,6 +144,9 @@ SET(SMESHEngine_SOURCES
   SMESH_NoteBook.cxx
   SMESH_Measurements_i.cxx
   SMESH_PreMeshInfo.cxx
+  MG_ADAPT_i.cxx
+  SMESH_Homard_i.cxx
+  SMESH_ParallelMesh_i.cxx
 )
 
 # --- rules ---
diff --git a/src/SMESH_I/MG_ADAPT_i.cxx b/src/SMESH_I/MG_ADAPT_i.cxx
new file mode 100644 (file)
index 0000000..46af1d5
--- /dev/null
@@ -0,0 +1,550 @@
+// Copyright (C) 2020-2024  CEA, EDF
+//
+// 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 "MG_ADAPT_i.hxx"
+
+#include CORBA_SERVER_HEADER(SMESH_Homard)
+
+#include "MG_ADAPT.hxx"
+#include "SMESH_File.hxx"
+#include "SMESH_Gen_i.hxx"
+#include "SMESH_PythonDump.hxx"
+#include "SMESH_TryCatch.hxx"
+
+using namespace SMESH;
+
+void MG_ADAPT_i::copyHypothesisDataToImpl(const SMESH::MgAdaptHypothesisData& from, ::MG_ADAPT::MgAdaptHypothesisData* to) const
+{
+  to->myFileInDir = from.myFileInDir;
+  to->myMeshFileIn = from.myMeshFileIn;
+  to->myMeshFileBackground = from.myMeshFileBackground;
+  to->myOutMeshName = from.myOutMeshName;
+  to->myMeshFileOut = from.myMeshFileOut;
+  to->myFileOutDir = from.myFileOutDir;
+  to->myFileSizeMapDir = from.myFileSizeMapDir;
+  to->myFieldName = from.myFieldName;
+  to->fromMedFile = from.fromMedFile;
+  to->myPublish = from.myPublish;
+  to->myMeshOutMed = from.myMeshOutMed;
+  to->myUseLocalMap = from.myUseLocalMap;
+  to->myUseBackgroundMap = from.myUseBackgroundMap;
+  to->myUseConstantValue = from.myUseConstantValue;
+  to->myConstantValue = from.myConstantValue;
+  to->myTimeStep = from.myTimeStep;
+  to->myRank = from.myRank;
+  to->myUseNoTimeStep = from.myUseNoTimeStep;
+  to->myUseLastTimeStep = from.myUseLastTimeStep;
+  to->myUseChosenTimeStep = from.myUseChosenTimeStep;
+  to->myWorkingDir = from.myWorkingDir;
+  to->myLogFile = from.myLogFile;
+  to->myPrintLogInFile = from.myPrintLogInFile;
+  to->myKeepFiles = from.myKeepFiles;
+  to->myRemoveLogOnSuccess = from.myRemoveLogOnSuccess;
+  to->myVerboseLevel = from.myVerboseLevel;
+}
+void MG_ADAPT_i::copyHypothesisDataFromImpl(const ::MG_ADAPT::MgAdaptHypothesisData* from, SMESH::MgAdaptHypothesisData* to) const
+{
+  to->myFileInDir = CORBA::string_dup(from->myFileInDir.c_str());
+  to->myMeshFileIn = CORBA::string_dup(from->myMeshFileIn.c_str());
+  to->myMeshFileBackground = CORBA::string_dup(from->myMeshFileBackground.c_str());
+  to->myOutMeshName = CORBA::string_dup(from->myOutMeshName.c_str());
+  to->myMeshFileOut = CORBA::string_dup(from->myMeshFileOut.c_str());
+  to->myFileOutDir = CORBA::string_dup(from->myFileOutDir.c_str());
+  to->myFileSizeMapDir = CORBA::string_dup(from->myFileSizeMapDir.c_str());
+  to->myFieldName = CORBA::string_dup(from->myFieldName.c_str());
+  to->fromMedFile = from->fromMedFile;
+  to->myPublish = from->myPublish;
+  to->myMeshOutMed = from->myMeshOutMed;
+  to->myUseLocalMap = from->myUseLocalMap;
+  to->myUseBackgroundMap = from->myUseBackgroundMap;
+  to->myUseConstantValue = from->myUseConstantValue;
+  to->myConstantValue = from->myConstantValue;
+  to->myTimeStep = from->myTimeStep;
+  to->myRank = from->myRank;
+  to->myUseNoTimeStep = from->myUseNoTimeStep;
+  to->myUseLastTimeStep = from->myUseLastTimeStep;
+  to->myUseChosenTimeStep = from->myUseChosenTimeStep;
+  to->myWorkingDir = CORBA::string_dup(from->myWorkingDir.c_str());
+  to->myLogFile = CORBA::string_dup(from->myLogFile.c_str());
+  to->myPrintLogInFile = from->myPrintLogInFile;
+  to->myKeepFiles = from->myKeepFiles;
+  to->myRemoveLogOnSuccess = from->myRemoveLogOnSuccess;
+  to->myVerboseLevel = from->myVerboseLevel;
+}
+
+//=============================================================================
+/*!
+ *  SMESH_Gen_i::CreateMG_ADAPT
+ *
+ *  Create measurement instance
+ */
+//=============================================================================
+
+SMESH::MG_ADAPT_ptr SMESH_Gen_i::CreateMG_ADAPT()
+{
+#ifndef DISABLE_MG_ADAPT
+  SMESH::MG_ADAPT_i* aMGadapt = new SMESH::MG_ADAPT_i();
+  SMESH::MG_ADAPT_var anObj = aMGadapt->_this();
+  return anObj._retn();
+#else
+  return SMESH::MG_ADAPT_ptr();
+#endif
+}
+SMESH::MG_ADAPT_ptr SMESH_Gen_i::CreateAdaptationHypothesis()
+{
+#ifndef DISABLE_MG_ADAPT
+  SMESH::MG_ADAPT_i* aMGadapt = new SMESH::MG_ADAPT_i();
+  SMESH::MG_ADAPT_var anObj = aMGadapt->_this();
+  return anObj._retn();
+#else
+  return SMESH::MG_ADAPT_ptr();
+#endif
+}
+//SMESH::MG_ADAPT_OBJECT_ptr SMESH_Gen_i::Adaptation( const char* adaptationType)
+SALOME::GenericObj_ptr SMESH_Gen_i::Adaptation( const char* adaptationType)
+{
+#ifndef DISABLE_MG_ADAPT
+  if (!strcmp(adaptationType, "MG_Adapt"))
+  {
+    SMESH::MG_ADAPT_OBJECT_i* mg_adapt_object = new SMESH::MG_ADAPT_OBJECT_i();
+    SMESH::MG_ADAPT_OBJECT_var anObj = mg_adapt_object->_this();
+    return anObj._retn();
+  }
+#endif
+#ifndef DISABLE_HOMARD_ADAPT
+  if (!strcmp(adaptationType, "Uniform")) {
+    return CreateHOMARD_ADAPT();
+  }
+#endif
+  return SALOME::GenericObj_ptr();
+}
+//=============================================================================
+/*!
+ *  standard constructor
+ */
+//=============================================================================
+MG_ADAPT_i::MG_ADAPT_i(): SALOME::GenericObj_i( SMESH_Gen_i::GetPOA() )
+{
+  myMgAdapt = new ::MG_ADAPT::MgAdapt();
+}
+
+//=============================================================================
+/*!
+ *  standard destructor
+ */
+//=============================================================================
+MG_ADAPT_i::~MG_ADAPT_i()
+{
+  delete myMgAdapt;
+}
+void MG_ADAPT_i::setData( SMESH::MgAdaptHypothesisData& data)
+{
+  ::MG_ADAPT::MgAdaptHypothesisData* baseData = new ::MG_ADAPT::MgAdaptHypothesisData();
+  copyHypothesisDataToImpl(data, baseData);
+  myMgAdapt->setData(baseData);
+  delete baseData;
+}
+void MG_ADAPT_i::setMedFileIn(const char* str)
+{
+  myMgAdapt->setMedFileIn(str);
+}
+char* MG_ADAPT_i::getMedFileIn()
+{
+  return CORBA::string_dup(myMgAdapt->getMedFileIn().c_str());
+}
+void MG_ADAPT_i::setMedFileOut(const char* str)
+{
+  myMgAdapt->setMedFileOut(str);
+}
+char* MG_ADAPT_i::getMedFileOut()
+{
+  return CORBA::string_dup(myMgAdapt->getMedFileOut().c_str());
+}
+void MG_ADAPT_i::setMeshName(const char* str)
+{
+  myMgAdapt->setMeshName(str);
+}
+char* MG_ADAPT_i::getMeshName()
+{
+  return CORBA::string_dup(myMgAdapt->getMeshName().c_str());
+}
+void MG_ADAPT_i::setMeshNameOut(const char* str)
+{
+  myMgAdapt->setMeshNameOut(str);
+}
+char* MG_ADAPT_i::getMeshNameOut()
+{
+  return CORBA::string_dup(myMgAdapt->getMeshNameOut().c_str());
+}
+void MG_ADAPT_i::setMeshOutMed(bool mybool)
+{
+  myMgAdapt->setMeshOutMed(mybool);
+}
+bool MG_ADAPT_i::getMeshOutMed()
+{
+  return myMgAdapt->getMeshOutMed();
+}
+void MG_ADAPT_i::setPublish(bool mybool)
+{
+  myMgAdapt->setPublish(mybool);
+}
+bool MG_ADAPT_i::getPublish()
+{
+  return myMgAdapt->getPublish();
+}
+void MG_ADAPT_i::setSizeMapFieldName(const char* str)
+{
+  myMgAdapt->setFieldName(str);
+}
+char* MG_ADAPT_i::getSizeMapFieldName()
+{
+  return CORBA::string_dup(myMgAdapt->getFieldName().c_str());
+}
+void MG_ADAPT_i::setTimeStep(CORBA::Long t)
+{
+  myMgAdapt->setTimeStep(t);
+}
+CORBA::Long MG_ADAPT_i::getTimeStep()
+{
+  return myMgAdapt->getTimeStep();
+}
+void MG_ADAPT_i::setTimeStepRank(CORBA::Long t, CORBA::Long r)
+{
+  myMgAdapt->setChosenTimeStepRank();
+  myMgAdapt->setRankTimeStep(t, r);
+}
+CORBA::Long MG_ADAPT_i::getRank()
+{
+  return myMgAdapt->getRank();
+}
+void MG_ADAPT_i::setTimeStepRankLast()
+{
+  myMgAdapt->setTimeStepRankLast();
+}
+void MG_ADAPT_i::setNoTimeStep()
+{
+  myMgAdapt->setNoTimeStep();
+}
+void MG_ADAPT_i::setLogFile(const char* str)
+{
+  myMgAdapt->setLogFile(str);
+}
+char* MG_ADAPT_i::getLogFile()
+{
+  return CORBA::string_dup(myMgAdapt->getLogFile().c_str());
+}
+
+void MG_ADAPT_i::setVerbosityLevel(CORBA::Long v)
+{
+  myMgAdapt->setVerbosityLevel(v);
+}
+CORBA::Long MG_ADAPT_i::getVerbosityLevel()
+{
+  return myMgAdapt->getVerbosityLevel();
+}
+void MG_ADAPT_i::setRemoveOnSuccess(bool mybool)
+{
+  myMgAdapt->setRemoveOnSuccess(mybool);
+}
+bool MG_ADAPT_i::getRemoveOnSuccess()
+{
+  return myMgAdapt->getRemoveOnSuccess();
+}
+SMESH::MgAdaptHypothesisData* MG_ADAPT_i::getData()
+{
+  SMESH::MgAdaptHypothesisData* result = new SMESH::MgAdaptHypothesisData();
+  ::MG_ADAPT::MgAdaptHypothesisData* from =  myMgAdapt->getData();
+  copyHypothesisDataFromImpl(from, result);
+  return result;
+}
+void MG_ADAPT_i::setUseLocalMap(bool mybool)
+{
+  myMgAdapt->setUseLocalMap(mybool);
+}
+bool MG_ADAPT_i::getUseLocalMap()
+{
+  return myMgAdapt->getUseLocalMap();
+}
+void MG_ADAPT_i::setUseBackgroundMap(bool mybool)
+{
+  myMgAdapt->setUseBackgroundMap(mybool);
+}
+bool MG_ADAPT_i::getUseBackgroundMap()
+{
+  return myMgAdapt->getUseBackgroundMap();
+}
+void MG_ADAPT_i::setUseConstantValue(bool mybool)
+{
+  myMgAdapt->setUseConstantValue(mybool);
+}
+bool MG_ADAPT_i::getUseConstantValue()
+{
+  return myMgAdapt->getUseConstantValue();
+}
+void MG_ADAPT_i::setConstantSize(double value)
+{
+  myMgAdapt->setConstantValue(value);
+}
+double MG_ADAPT_i::getConstantSize()
+{
+  return myMgAdapt->getConstantValue();
+}
+void MG_ADAPT_i::setSizeMapFile(const char* str)
+{
+  myMgAdapt->setSizeMapFile(str);
+}
+char* MG_ADAPT_i::getSizeMapFile()
+{
+  return CORBA::string_dup(myMgAdapt->getSizeMapFile().c_str());
+}
+void MG_ADAPT_i::setFromMedFile(bool mybool)
+{
+  myMgAdapt->setFromMedFile(mybool);
+}
+bool MG_ADAPT_i::isFromMedFile()
+{
+  return myMgAdapt->isFromMedFile();
+}
+
+void MG_ADAPT_i::setKeepWorkingFiles(bool mybool)
+{
+  myMgAdapt->setKeepWorkingFiles(mybool);
+}
+bool MG_ADAPT_i::getKeepWorkingFiles()
+{
+  return myMgAdapt->getKeepWorkingFiles();
+}
+
+//~void MG_ADAPT_i::setPrCORBA::LongLogInFile(bool);
+//~bool MG_ADAPT_i::getPrCORBA::LongLogInFile();
+
+void MG_ADAPT_i::setSizeMapType(const char* type)
+{
+  setUseLocalMap(false);
+  setUseBackgroundMap(false);
+  setUseConstantValue(false);
+
+  if (!strcmp("Local", type))
+    setUseLocalMap(true);
+  else if (!strcmp("Background", type))
+    setUseBackgroundMap(true);
+  else
+    setUseConstantValue(true);
+}
+void MG_ADAPT_i::setWorkingDir(const char* dir)
+{
+  myMgAdapt->setWorkingDir(dir);
+}
+char* MG_ADAPT_i::getWorkingDir()
+{
+  return CORBA::string_dup(myMgAdapt->getWorkingDir().c_str());
+}
+bool MG_ADAPT_i::setAll()
+{
+  return myMgAdapt->setAll();
+}
+char* MG_ADAPT_i::getCommandToRun()
+{
+  return CORBA::string_dup(myMgAdapt->getCommandToRun().c_str());
+}
+
+// macro used to initialize excStr by exception description
+// returned by SMESH_CATCH( SMESH::returnError )
+#undef SMESH_CAUGHT
+#define SMESH_CAUGHT excStr =
+
+void MG_ADAPT_i::compute()
+{
+  SMESH::TPythonDump noDumpSoFar;
+
+  errStr = "";
+  std::string excStr;
+  SMESH_TRY;
+
+  myMgAdapt->compute(errStr);
+
+  SMESH_CATCH( SMESH::returnError );
+
+  SMESH_Comment errMsg;
+  if ( !excStr.empty() )
+  {
+    errMsg << "Exception thrown on MG_ADAPT_i::compute invocation with error message \""
+           << errStr << "\" with exception \"" << excStr << "\"";
+  }
+  else if ( !errStr.empty() )
+  {
+    errMsg << "MG_ADAPT_i::compute invocation returned error message \"" << errStr << "\"";
+  }
+  if ( !errMsg.empty() )
+  {
+    THROW_SALOME_CORBA_EXCEPTION( errMsg.c_str(), SALOME::INTERNAL_ERROR);
+  }
+
+  if(myMgAdapt->getPublish())
+  {
+    SMESH_Gen_i* smeshGen_i = SMESH_Gen_i::GetSMESHGen();
+    SMESH::DriverMED_ReadStatus theStatus;
+    smeshGen_i->CreateMeshesFromMED(myMgAdapt->getMedFileOut().c_str(), theStatus);
+  }
+}
+#undef SMESH_CAUGHT
+#define SMESH_CAUGHT
+
+char* MG_ADAPT_i::getErrMsg()
+{
+  return CORBA::string_dup(errStr.c_str());
+}
+char* MG_ADAPT_i::getFileName()
+{
+  return CORBA::string_dup(myMgAdapt->getFileName().c_str());
+}
+char* MG_ADAPT_i::getExeName()
+{
+  return CORBA::string_dup(myMgAdapt->getExeName().c_str());
+}
+void MG_ADAPT_i::copyMgAdaptHypothesisData( const SMESH::MgAdaptHypothesisData& data)
+{
+  ::MG_ADAPT::MgAdaptHypothesisData* baseData = new ::MG_ADAPT::MgAdaptHypothesisData();
+  copyHypothesisDataToImpl(data, baseData);
+  myMgAdapt->copyMgAdaptHypothesisData(baseData);
+  delete baseData;
+}
+
+//~void MG_ADAPT_i::checkDirPath(char*& str)
+//~{
+  //~myMgAdapt->checkDirPath(str);
+//~}
+
+bool MG_ADAPT_i::hasOptionDefined( const char* optionName )
+{
+  return myMgAdapt->hasOptionDefined(optionName);
+}
+void MG_ADAPT_i::setOptionValue(const char* optionName,
+                                const char* optionValue)
+{
+  SMESH_TRY;
+  myMgAdapt->setOptionValue(optionName, optionValue);
+  SMESH_CATCH( SMESH::throwCorbaException );
+}
+
+char* MG_ADAPT_i::getOptionValue(const char* optionName,
+                                 bool&       isDefault)
+{
+  SMESH_TRY;
+  return CORBA::string_dup(myMgAdapt->getOptionValue(optionName, &isDefault).c_str());
+  SMESH_CATCH( SMESH::throwCorbaException );
+  return 0;
+}
+SMESH::string_array* MG_ADAPT_i::getCustomOptionValuesStrVec()
+{
+  SMESH::string_array_var result = new SMESH::string_array();
+  std::vector <std::string> vals = myMgAdapt->getCustomOptionValuesStrVec();
+  result->length((CORBA::ULong) vals.size()) ;
+  for (CORBA::ULong i = 0; i<vals.size(); i++) result[i] = CORBA::string_dup(vals[i].c_str());
+  return result._retn();
+}
+SMESH::string_array*  MG_ADAPT_i::getOptionValuesStrVec()
+{
+
+  SMESH::string_array_var result = new SMESH::string_array();
+  std::vector <std::string> vals = myMgAdapt->getOptionValuesStrVec();
+  result->length((CORBA::ULong) vals.size());
+  for (CORBA::ULong i = 0; i<vals.size(); i++) result[i] = CORBA::string_dup(vals[i].c_str());
+  return result._retn();
+}
+
+void MG_ADAPT_i::setPrintLogInFile(bool mybool)
+{
+  myMgAdapt->setPrintLogInFile(mybool);
+}
+bool MG_ADAPT_i::getPrintLogInFile()
+{
+  return myMgAdapt->getPrintLogInFile();
+}
+//~TOptionValues        MG_ADAPT_i::getOptionValues()       const;
+//~const TOptionValues& MG_ADAPT_i::getCustomOptionValues() const ;
+
+MG_ADAPT_OBJECT_i::MG_ADAPT_OBJECT_i(): SALOME::GenericObj_i( SMESH_Gen_i::GetPOA() )
+{
+  medFileIn="";
+  medFileOut="";
+  medFileBackground="";
+  publish = false;
+  //~myMesh = CORBA::nil;
+}
+
+void MG_ADAPT_OBJECT_i::setMeshIn(SMESH::SMESH_Mesh_ptr theMesh )
+{
+  myMesh = SMESH::SMESH_Mesh::_duplicate(theMesh);
+}
+void MG_ADAPT_OBJECT_i::setMEDFileIn(const char* f)
+{
+  medFileIn =  f;
+}
+void MG_ADAPT_OBJECT_i::setMEDFileOut(const char* f)
+{
+  medFileOut = f;
+}
+void MG_ADAPT_OBJECT_i::setMEDFileBackground(const char* f)
+{
+  medFileBackground = f;
+}
+void MG_ADAPT_OBJECT_i::AddHypothesis(SMESH::MG_ADAPT_ptr mg)
+{
+
+  mg->setMedFileIn(medFileIn.c_str());
+  mg->setMedFileOut(medFileOut.c_str());
+  mg->setSizeMapFile(medFileBackground.c_str());
+  hypothesis = SMESH::MG_ADAPT::_duplicate(mg);
+  hypothesis->Register();
+}
+CORBA::Long MG_ADAPT_OBJECT_i::Compute(bool publish)
+{
+  SMESH::TPythonDump noDumpSoFar;
+
+  if(!checkMeshFileIn()){
+    std::cerr<< "\n Error : Please check the MED file input or mesh input. \n";
+    return -1;
+  }
+  hypothesis->setPublish(publish);
+  hypothesis->compute();
+  return 0;
+}
+
+bool MG_ADAPT_OBJECT_i::checkMeshFileIn()
+{
+  SMESH::TPythonDump noDumpSoFar;
+
+  bool ret = false; // 1 ok , 0 nook
+  if ( !( ret = SMESH_File( medFileIn ).exists()))
+  {
+    if(!myMesh->_is_nil())
+    {
+      bool toOverwrite  = true;
+      bool toFindOutDim = true;
+      medFileIn = (CORBA::String_var( hypothesis->getFileName() )).in();
+      medFileIn+= ".med";
+      myMesh->ExportMED(medFileIn.c_str(), false, -1, toOverwrite, toFindOutDim);
+      hypothesis->setMedFileIn(medFileIn.c_str());
+      ret = true;
+    }
+  }
+
+  return ret;
+}
diff --git a/src/SMESH_I/MG_ADAPT_i.hxx b/src/SMESH_I/MG_ADAPT_i.hxx
new file mode 100644 (file)
index 0000000..6a4329b
--- /dev/null
@@ -0,0 +1,172 @@
+// Copyright (C) 2020-2024  CEA, EDF
+//
+// 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 MG_ADAPT_I_HXX
+#define MG_ADAPT_I_HXX
+
+#include "SMESH.hxx"
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(MG_ADAPT)
+#include "SALOME_GenericObj_i.hh"
+#include <SALOME_GenericObj_wrap.hxx>
+
+#include <string>
+
+namespace MG_ADAPT
+{
+  class MgAdaptHypothesisData;
+  class MgAdapt;
+}
+
+namespace SMESH
+{
+
+class SMESH_I_EXPORT MG_ADAPT_i :
+    public virtual SALOME::GenericObj_i,
+    public virtual POA_SMESH::MG_ADAPT
+{
+public:
+  MG_ADAPT_i();
+  virtual ~MG_ADAPT_i();
+  void setData( SMESH::MgAdaptHypothesisData& data);
+
+  void setMedFileIn(const char* str);
+  char* getMedFileIn();
+
+  void setMedFileOut(const char* str);
+  char* getMedFileOut();
+
+  void setMeshName(const char* str);
+  char* getMeshName();
+
+  void setMeshNameOut(const char* str);
+  char* getMeshNameOut();
+
+  void setMeshOutMed(bool mybool);
+  bool getMeshOutMed();
+
+  void setPublish(bool mybool);
+  bool getPublish();
+
+  void setSizeMapFieldName(const char* str);
+  char* getSizeMapFieldName();
+
+  void setTimeStep(CORBA::Long t);
+  CORBA::Long getTimeStep() ;
+
+  void setTimeStepRank(CORBA::Long t, CORBA::Long r );
+  CORBA::Long getRank();
+
+  void setTimeStepRankLast();
+  void setNoTimeStep();
+
+  void setLogFile(const char* str);
+  char* getLogFile();
+
+  void setVerbosityLevel(CORBA::Long v);
+  CORBA::Long getVerbosityLevel();
+
+  void setRemoveOnSuccess(bool mybool);
+  bool getRemoveOnSuccess();
+
+  SMESH::MgAdaptHypothesisData* getData() ;
+  void setSizeMapType(const char* type);
+  void setUseLocalMap(bool mybool);
+  bool getUseLocalMap();
+
+  void setUseBackgroundMap(bool mybool);
+  bool getUseBackgroundMap();
+
+  void setUseConstantValue(bool mybool);
+  bool getUseConstantValue();
+
+  void setConstantSize(double value);
+  double getConstantSize();
+
+  void setSizeMapFile(const char* str);
+  char* getSizeMapFile();
+
+  void setFromMedFile(bool mybool);
+  bool isFromMedFile();
+
+  void setKeepWorkingFiles(bool mybool);
+  bool getKeepWorkingFiles();
+
+  //~void setPrCORBA::LongLogInFile(bool);
+  //~bool getPrCORBA::LongLogInFile();
+
+  void setWorkingDir(const char* str);
+  char* getWorkingDir() ;
+
+  void setPrintLogInFile(bool mybool);
+  bool getPrintLogInFile();
+
+  bool setAll();
+  char* getCommandToRun() ;
+  void compute();
+  char* getFileName();
+  char* getExeName();
+  void copyMgAdaptHypothesisData( const SMESH::MgAdaptHypothesisData& data ) ;
+  //~void copyMgAdaptHypothesisData( const SMESH::MgAdaptHypothesisData& data ) {
+          //~copyMgAdaptHypothesisData(&data);
+  //~}
+
+  //~void checkDirPath(char*& str);
+
+  bool hasOptionDefined( const char* optionName ) ;
+  void setOptionValue(const char* optionName,
+                      const char* optionValue);
+  char* getOptionValue(const char* optionName,
+                       bool&       isDefault);
+  SMESH::string_array* getCustomOptionValuesStrVec() ;
+  SMESH::string_array* getOptionValuesStrVec() ;
+  void copyHypothesisDataFromImpl(const ::MG_ADAPT::MgAdaptHypothesisData* from, SMESH::MgAdaptHypothesisData* to) const;
+  void copyHypothesisDataToImpl(const SMESH::MgAdaptHypothesisData& from, ::MG_ADAPT::MgAdaptHypothesisData* to) const;
+  //~TOptionValues        getOptionValues()       const;
+  //~const TOptionValues& getCustomOptionValues() const ;
+  char* getErrMsg();
+private:
+  ::MG_ADAPT::MgAdapt* myMgAdapt;
+  std::string          errStr;
+
+};
+
+class SMESH_I_EXPORT MG_ADAPT_OBJECT_i:
+  public virtual SALOME::GenericObj_i,
+  public virtual POA_SMESH::MG_ADAPT_OBJECT {
+public :
+  MG_ADAPT_OBJECT_i();
+  void setMeshIn( SMESH::SMESH_Mesh_ptr theMesh );
+  void setMEDFileIn(const char* f);
+  void setMEDFileOut(const char* f);
+  void setMEDFileBackground(const char* f);
+  void AddHypothesis(SMESH::MG_ADAPT_ptr);
+      CORBA::Long Compute(bool Publish);
+private:
+std::string medFileIn, medFileOut, medFileBackground;
+bool checkMeshFileIn();
+bool publish;
+SMESH::SMESH_Mesh_var myMesh;
+SALOME::GenericObj_wrap<SMESH::MG_ADAPT> hypothesis;
+};
+
+}
+
+#endif // MG_ADAPT_I_HXX
index 4f89b9f1aeea9079db8fcd8af77b0f9c36c10429..907ff1a7cbe9062d1b858e4595e68ab290686053 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 7f1aa97c92c9c9b0591b0d3bb895d924c1db7b6b..4a196d894b9cc1e5c9853623b644101a727ebfa7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 17ae9d1bdfbb4b7c389c08b2f5823449dbb544a6..e9a05a3b9254c14c17b40b43f265d40a74e1e9d8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 62d6c92b5401bad68671d70550a16c826107ae21..832694665991e07a33e86d546a52ac78cb39bea5 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 7134f59905cdbd66dd993eb408f321f4fd12dc12..f783a64be94ecd43fc9cc6e8e7e7419b2317417a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 6552e179ad351626dd2efed1a86c1db082d6e890..51038311bdc7f44a0657d91b052c144218476497 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 088d1bcf726f651d39a6046729a1e4f04e06c772..269617c332e31c325731c059c77897b6e71a3de0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 4ab71b44977e29027da7f1d171073e8ae71b4121..1e73de97a1f8ebe7d98ca501f1d9bfc6b3f015d3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -301,6 +301,10 @@ namespace {
     //   - FT_Deflection2D          = 22
     // v 9.3.0: FT_Undefined == 50, new items:
     //   - FT_Length3D              = 22
+    // v 9.12.0: FT_Undefined == 51, new items:
+    //   - FT_ScaledJacobian        = 8
+    // v 9.12.0: FT_Undefined == 52, new items:
+    //   - FT_Warping3D             = 4
     //
     // It's necessary to continue recording this history and to fill
     // undef2newItems (see below) accordingly.
@@ -325,6 +329,8 @@ namespace {
       undef2newItems[ 48 ].push_back( 22 );
       undef2newItems[ 49 ].push_back( 22 );
       undef2newItems[ 50 ].push_back( 22 );
+      undef2newItems[ 51 ].push_back( 8 );
+      undef2newItems[ 52 ].push_back( 4 );
 
       ASSERT( undef2newItems.rbegin()->first == SMESH::FT_Undefined );
     }
@@ -458,7 +464,7 @@ namespace {
       initialized = true;
       filteredArgs.push_back( "SMESH.MED_V2_1" );
       filteredArgs.push_back( "SMESH.MED_V2_2" );
-    }  
+    }
     return std::find( filteredArgs.begin(), filteredArgs.end(), theArg ) != filteredArgs.end();
   }
 }
@@ -584,7 +590,7 @@ _pyGen::_pyGen(Resource_DataMapOfAsciiStringAsciiString& theEntry2AccessorMethod
     // find a GEOM (aPass == 0) and SHAPERSTUDY (aPass == 1) entries
     for(int aPass = 0; aPass < 2; aPass++) {
       _pyID geomID;
-      SALOMEDS::SComponent_wrap geomComp = SMESH_Gen_i::getStudyServant()->
+      SALOMEDS::SComponent_wrap geomComp = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->
         FindComponent(aPass == 0 ? "GEOM" : "SHAPERSTUDY");
       if (geomComp->_is_nil()) continue;
       CORBA::String_var entry = geomComp->GetID();
@@ -694,6 +700,7 @@ Handle(_pyCommand) _pyGen::AddCommand( const TCollection_AsciiString& theCommand
   if ( objID == this->GetID() || objID == SMESH_2smeshpy::GenName())
   {
     this->Process( aCommand );
+
     //addFilterUser( aCommand, theGen ); // protect filters from clearing
     return aCommand;
   }
@@ -762,7 +769,7 @@ Handle(_pyCommand) _pyGen::AddCommand( const TCollection_AsciiString& theCommand
       meshID = aCommand->GetResultValue();
     else if ( method == "MakeBoundaryMesh")
       meshID = aCommand->GetResultValue(1);
-    else if ( method == "MakeBoundaryElements")
+    else if ( method == "MakeBoundaryElements" || method == "MakeBoundaryOfEachElement" )
       meshID = aCommand->GetResultValue(2);
 
     if ( method.Search("MakeGroups") != -1      ||
@@ -779,7 +786,7 @@ Handle(_pyCommand) _pyGen::AddCommand( const TCollection_AsciiString& theCommand
       groups = aCommand->GetResultValue();
     else if ( method == "MakeBoundaryMesh" )
       groups = aCommand->GetResultValue(2);
-    else if ( method == "MakeBoundaryElements")
+    else if ( method == "MakeBoundaryElements" || method == "MakeBoundaryOfEachElement" )
       groups = aCommand->GetResultValue(3);
     else if ( method == "Create0DElementsOnAllNodes" &&
               aCommand->GetArg(2).Length() > 2 ) // group name != ''
@@ -932,11 +939,13 @@ Handle(_pyCommand) _pyGen::AddCommand( const TCollection_AsciiString& theCommand
           "Geom_POLYHEDRA", "Geom_BALL" };
         if ( -1 < iGeom && iGeom < nbTypes )
           Threshold = SMESH + types[ iGeom ];
-#ifdef _DEBUG_
-        // is types complete? (compilation failure means that enum GeometryType changed)
-        static_assert( sizeof(types) / sizeof(const char*) == nbTypes,
-                       "Update names of GeometryType's!!!" );
-#endif
+
+        if (SALOME::VerbosityActivated())
+        {
+          // is types complete? (compilation failure means that enum GeometryType changed)
+          static_assert( sizeof(types) / sizeof(const char*) == nbTypes,
+                        "Update names of GeometryType's!!!" );
+        }
       }
       if (Type == "SMESH.FT_EntityType")
       {
@@ -953,11 +962,13 @@ Handle(_pyCommand) _pyGen::AddCommand( const TCollection_AsciiString& theCommand
           "Entity_Polyhedra", "Entity_Quad_Polyhedra", "Entity_Ball" };
         if ( -1 < iGeom && iGeom < nbTypes )
           Threshold = SMESH + types[ iGeom ];
-#ifdef _DEBUG_
-        // is 'types' complete? (compilation failure means that enum EntityType changed)
-        static_assert( sizeof(types) / sizeof(const char*) == nbTypes,
-                       "Update names of EntityType's!!!" );
-#endif
+
+        if (SALOME::VerbosityActivated())
+        {
+          // is 'types' complete? (compilation failure means that enum EntityType changed)
+          static_assert( sizeof(types) / sizeof(const char*) == nbTypes,
+                        "Update names of EntityType's!!!" );
+        }
       }
     }
     if ( ThresholdID.Length() != 2 ) // neither '' nor ""
@@ -1005,6 +1016,7 @@ void _pyGen::Process( const Handle(_pyCommand)& theCommand )
   // Concatenate( [mesh1, ...], ... )
   // CreateHypothesis( theHypType, theLibName )
   // Compute( mesh, geom )
+  // CheckCompute( mesh )
   // Evaluate( mesh, geom )
   // mesh creation
   TCollection_AsciiString method = theCommand->GetMethod();
@@ -1013,10 +1025,16 @@ void _pyGen::Process( const Handle(_pyCommand)& theCommand )
   {
     Handle(_pyMesh) mesh = new _pyMesh( theCommand );
     AddObject( mesh );
+    // set mesh name
+    _pyID id = mesh->GetID(), comma("'");
+    if ( myObjectNames.IsBound( id ))
+      theCommand->SetArg( theCommand->GetNbArgs() + 1,
+                          comma + myObjectNames( id ) + comma);
     return;
   }
   if ( method == "CreateMeshesFromUNV" ||
        method == "CreateMeshesFromSTL" ||
+       method == "CreateDualMesh" ||
        method == "CopyMesh" ) // command result is a mesh
   {
     Handle(_pyMesh) mesh = new _pyMesh( theCommand, theCommand->GetResultValue() );
@@ -1024,7 +1042,6 @@ void _pyGen::Process( const Handle(_pyCommand)& theCommand )
     return;
   }
   if ( method == "CreateMeshesFromMED" ||
-       method == "CreateMeshesFromSAUV"||
        method == "CreateMeshesFromCGNS" ||
        method == "CreateMeshesFromGMF" ) // command result is ( [mesh1,mesh2], status )
   {
@@ -1084,6 +1101,21 @@ void _pyGen::Process( const Handle(_pyCommand)& theCommand )
     }
   }
 
+  // smeshgen.CheckCompute( mesh ) --> mesh.CheckCompute()
+  if ( method == "CheckCompute" )
+  {
+    const _pyID& meshID = theCommand->GetArg( 1 );
+    map< _pyID, Handle(_pyMesh) >::iterator id_mesh = myMeshes.find( meshID );
+    if ( id_mesh != myMeshes.end() ) {
+      theCommand->SetObject( meshID );
+      theCommand->RemoveArgs();
+      id_mesh->second->Process( theCommand );
+      id_mesh->second->AddProcessedCmd( theCommand );
+      return;
+    }
+  }
+
+
   // smeshgen.Evaluate( mesh, geom ) --> mesh.Evaluate(geom)
   if ( method == "Evaluate" )
   {
@@ -1717,7 +1749,7 @@ bool _pyGen::IsNotPublished(const _pyID& theObjID) const
   // either the SMESH object is not in study or it is a GEOM object
   if ( IsGeomObject( theObjID ))
   {
-    SALOMEDS::SObject_wrap so = SMESH_Gen_i::getStudyServant()->FindObjectID( theObjID.ToCString() );
+    SALOMEDS::SObject_wrap so = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindObjectID( theObjID.ToCString() );
     if ( so->_is_nil() ) return true;
     CORBA::Object_var obj = so->GetObject();
     return CORBA::is_nil( obj );
@@ -1816,14 +1848,15 @@ _pyMesh::_pyMesh(const Handle(_pyCommand) theCreationCmd, const _pyID& meshId):
   }
   else if ( theCreationCmd->GetMethod().Search("MakeMesh") != -1 ||
             theCreationCmd->GetMethod() == "MakeBoundaryMesh" ||
-            theCreationCmd->GetMethod() == "MakeBoundaryElements" )
+            theCreationCmd->GetMethod() == "MakeBoundaryElements" ||
+            theCreationCmd->GetMethod() == "MakeBoundaryOfEachElement" )
   {
     // this mesh depends on a source mesh
     // (theCreationCmd is already Process()ed by _pyMeshEditor)
     const _pyID& meshID = theCreationCmd->GetObject();
     addFatherMesh( meshID );
   }
-    
+
   // convert my creation command
   Handle(_pyCommand) creationCmd = GetCreationCmd();
   creationCmd->SetObject( SMESH_2smeshpy::SmeshpyName() );
@@ -1892,6 +1925,31 @@ void _pyMesh::Process( const Handle(_pyCommand)& theCommand )
     }
     Flush();
   }
+  // in snapshot mode, clear the previous CheckCompute()
+  else if ( method == "CheckCompute" )
+  {
+    if ( !theGen->IsToKeepAllCommands() ) // !historical
+    {
+      if ( !myLastCheckCmd.IsNull() )
+      {
+        // check if the previously computed mesh has been edited,
+        // if so then we do not clear the previous Compute()
+        bool toClear = true;
+        list< Handle(_pyMeshEditor)>::iterator e = myEditors.begin();
+        for ( ; e != myEditors.end() && toClear; ++e )
+        {
+          list< Handle(_pyCommand)>& cmds = (*e)->GetProcessedCmds();
+          list< Handle(_pyCommand) >::reverse_iterator cmd = cmds.rbegin();
+          if ( cmd != cmds.rend() &&
+               (*cmd)->GetOrderNb() > myLastCheckCmd->GetOrderNb() )
+            toClear = false;
+        }
+        if ( toClear )
+          myLastCheckCmd->Clear();
+      }
+      myLastCheckCmd = theCommand;
+    }
+  }
   // ----------------------------------------------------------------------
   else if ( method == "Clear" ) // in snapshot mode, clear all previous commands
   {
@@ -2194,7 +2252,7 @@ bool _pyMesh::NeedMeshAccess( const Handle(_pyCommand)& theCommand )
   static TStringSet sameMethods;
   if ( sameMethods.empty() ) {
     const char * names[] =
-      { "ExportDAT","ExportUNV","ExportSTL","ExportSAUV", "RemoveGroup","RemoveGroupWithContents",
+      { "ExportDAT","ExportUNV","ExportSTL", "RemoveGroup","RemoveGroupWithContents",
         "GetGroups","UnionGroups","IntersectGroups","CutGroups","CreateDimGroup","GetLog","GetId",
         "ClearLog","HasDuplicatedGroupNamesMED","GetMEDMesh","NbNodes","NbElements",
         "NbEdges","NbEdgesOfOrder","NbFaces","NbFacesOfOrder","NbTriangles",
@@ -2207,7 +2265,8 @@ bool _pyMesh::NeedMeshAccess( const Handle(_pyCommand)& theCommand )
         "GetElemNode","IsMediumNode","IsMediumNodeOfAnyElem","ElemNbEdges","ElemNbFaces",
         "GetElemFaceNodes", "GetFaceNormal", "FindElementByNodes",
         "IsPoly","IsQuadratic","BaryCenter","GetHypothesisList", "SetAutoColor", "GetAutoColor",
-        "Clear", "ConvertToStandalone", "GetMeshOrder", "SetMeshOrder"
+        "Clear", "ConvertToStandalone", "GetMeshOrder", "SetMeshOrder",
+        "SetNbThreads", "CheckCompute"
         ,"" }; // <- mark of end
     sameMethods.Insert( names );
   }
@@ -2415,7 +2474,7 @@ void _pyMesh::ClearCommands()
   list< Handle(_pySubMesh) >::iterator sm = mySubmeshes.begin();
   for ( ; sm != mySubmeshes.end(); ++sm )
     (*sm)->ClearCommands();
-  
+
   list< Handle(_pyGroup) >::iterator gr = myGroups.begin();
   for ( ; gr != myGroups.end(); ++gr )
     (*gr)->ClearCommands();
@@ -2487,11 +2546,11 @@ void _pyMeshEditor::Process( const Handle(_pyCommand)& theCommand)
   static TStringSet sameMethods;
   if ( sameMethods.empty() ) {
     const char * names[] = {
-      "RemoveElements","RemoveNodes","RemoveOrphanNodes",
+      "RemoveElements","RemoveNodes","RemoveOrphanNodes","RemoveNodeWithReconnection",
       "AddNode","Add0DElement","AddEdge","AddFace","AddPolygonalFace","AddBall",
-      "AddVolume","AddPolyhedralVolume","AddPolyhedralVolumeByFaces",
-      "MoveNode", "MoveClosestNodeToPoint",
-      "InverseDiag","DeleteDiag","Reorient","ReorientObject","Reorient2DBy3D",
+      "AddVolume","AddPolyhedralVolume","AddPolyhedralVolumeByFaces","AddNodeOnSegment",
+      "MoveNode", "MoveClosestNodeToPoint","InverseDiag","DeleteDiag","AddNodeOnFace",
+      "Reorient","ReorientObject","Reorient2DBy3D","Reorient2DByNeighbours",
       "TriToQuad","TriToQuadObject", "QuadTo4Tri", "SplitQuad","SplitQuadObject",
       "BestSplit","Smooth","SmoothObject","SmoothParametric","SmoothParametricObject",
       "ConvertToQuadratic","ConvertFromQuadratic","RenumberNodes","RenumberElements",
@@ -2508,7 +2567,7 @@ void _pyMeshEditor::Process( const Handle(_pyCommand)& theCommand)
       "GetLastCreatedElems", "FaceGroupsSeparatedByEdges",
       "MirrorMakeMesh","MirrorObjectMakeMesh","TranslateMakeMesh","TranslateObjectMakeMesh",
       "Scale","ScaleMakeMesh","RotateMakeMesh","RotateObjectMakeMesh","MakeBoundaryMesh",
-      "MakeBoundaryElements", "SplitVolumesIntoTetra","SplitHexahedraIntoPrisms",
+      "MakeBoundaryElements", "MakeBoundaryOfEachElement", "SplitVolumesIntoTetra","SplitHexahedraIntoPrisms",
       "DoubleElements","DoubleNodes","DoubleNode","DoubleNodeGroup","DoubleNodeGroups",
       "DoubleNodeElem","DoubleNodeElemInRegion","DoubleNodeElemGroup","AffectedElemGroupsInRegion",
       "DoubleNodeElemGroupInRegion","DoubleNodeElemGroups","DoubleNodeElemGroupsInRegion",
@@ -2575,7 +2634,7 @@ void _pyMeshEditor::Process( const Handle(_pyCommand)& theCommand)
       // 1. Remove "MakeGroups" from the Command
       TCollection_AsciiString aMethod = theCommand->GetMethod();
       int nbArgsToAdd = diffLastTwoArgsMethods.Contains(aMethod) ? 2 : 1;
-      
+
       if(is0DmethObj)
         pos = pos-2;  //Remove "0D" from the Command too
       aMethod.Trunc(pos-1);
@@ -3117,7 +3176,7 @@ void _pyHypothesis::rememberCmdOfParameter( const Handle(_pyCommand) & theComman
 
 //================================================================================
 /*!
- * \brief Return true if a setting parameter command ha been used to compute mesh
+ * \brief Return true if a setting parameter command has been used to compute mesh
  */
 //================================================================================
 
@@ -3406,7 +3465,7 @@ void _pyLayerDistributionHypo::Flush()
   list< Handle(_pyCommand) >::iterator cmd = myArgCommands.begin();
   _pyID prevNewName;
   for ( cmd = myArgCommands.begin(); cmd != myArgCommands.end(); ++cmd )
-  {    
+  {
     const _pyID& hyp1dID = (*cmd)->GetArg( 1 );
     if ( hyp1dID.IsEmpty() ) continue;
 
@@ -3430,7 +3489,7 @@ void _pyLayerDistributionHypo::Flush()
       }
       newName += "_Distribution";
       prevNewName = newName;
-    
+
       hyp1d->GetCreationCmd()->SetResultValue( newName );
     }
     list< Handle(_pyCommand) >& cmds = theGen->GetCommands();
@@ -4627,7 +4686,7 @@ _pyGroup::_pyGroup(const Handle(_pyCommand)& theCreationCmd, const _pyID & id)
 
 //================================================================================
 /*!
- * \brief Check if "[ group1, group2 ] = mesh.GetGroups()" creation command 
+ * \brief Check if "[ group1, group2 ] = mesh.GetGroups()" creation command
  *        can be cleared
  */
 //================================================================================
@@ -4798,7 +4857,7 @@ void _pyFilter::Process( const Handle(_pyCommand)& theCommand)
 
   if ( !myNewID.IsEmpty() )
     theCommand->SetObject( myNewID );
-    
+
   // Convert the following set of commands into smesh.GetFilterFromCriteria(criteria)
   // aFilter0x2aaab0487080 = aFilterManager.CreateFilter()
   // aFilter0x2aaab0487080.SetCriteria(aCriteria)
@@ -4841,7 +4900,7 @@ void _pyFilter::Process( const Handle(_pyCommand)& theCommand)
 void _pyFilter::Flush()
 {
   if ( myNewID.IsEmpty() ) return;
-  
+
   list< Handle(_pyCommand) >::iterator cmd = myArgCmds.begin();
   for ( ; cmd != myArgCmds.end(); ++cmd )
     if ( !(*cmd)->IsEmpty() )
@@ -4978,7 +5037,7 @@ _pyHypothesisReader::_pyHypothesisReader()
     //          ...
     //          dim="2">
     //   <python-wrap>
-    //     <accumulative-methods> 
+    //     <accumulative-methods>
     //       SetEnforcedVertex,
     //       SetEnforcedVertexNamed
     //     </accumulative-methods>
index b62e1203fe49fb91f0443b2bb7d909161fbcebf7..b5363cc4e7d53ec0db1d7646ea037518fc13af28 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -53,7 +53,7 @@
  * The creation reason is that smeshBuilder.py commands defining hypotheses encapsulate
  * several SMESH engine method calls. As well, the dependencies between smeshBuilder.py
  * classes differ from ones between corresponding SMESH IDL interfaces.
- * 
+ *
  * Everything here is for internal usage by SMESH_2smeshpy::ConvertScript()
  * declared in SMESH_PythonDump.hxx
  */
@@ -350,6 +350,7 @@ class _pyMesh: public _pyObject
   std::list< Handle(_pyMesh) >       myChildMeshes; // depending on me
   bool                               myGeomNotInStudy;
   Handle(_pyCommand)                 myLastComputeCmd;
+  Handle(_pyCommand)                 myLastCheckCmd;
 public:
   _pyMesh(const Handle(_pyCommand) creationCmd);
   _pyMesh(const Handle(_pyCommand) theCreationCmd, const _pyID & id);
@@ -373,7 +374,7 @@ private:
 
   DEFINE_STANDARD_RTTIEXT(_pyMesh,_pyObject)
 };
-#undef _pyMesh_ACCESS_METHOD 
+#undef _pyMesh_ACCESS_METHOD
 
 // -------------------------------------------------------------------------------------
 /*!
index b17035f171f51eb2ecc86e38b8aad6a6332b80b9..4e262b479261ca3fad81879b922e1bb26ab03fc0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index f4b25d3babc520dae7a9a02bb5355335a54ef388..84dc8d968b95c77ddd3444f41a50564c34fe24ad 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 2180be54214c6d6b68f7d91b5e1c1173e3daa371..ecf61ad5e12e813766fe90387c36b9af98eb84f0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 0b07cc772815ddd5403862679a2ae6f78200b456..2a6ea5e7d0e7937fce61c4ac755e4ad5205dcd08 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 2a952d4dbab99f5db5277230f0e4c8e65f026d47..5448c6699586ad36f3b6069ef7095aaaafeffca7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -60,8 +60,8 @@
 #include <TopoDS.hxx>
 #include <TopoDS_Shape.hxx>
 
-using namespace SMESH;
-using namespace SMESH::Controls;
+//using namespace SMESH;
+//using namespace SMESH::Controls;
 
 
 namespace SMESH
@@ -79,9 +79,9 @@ namespace SMESH
 
 inline
 const SMDS_Mesh*
-MeshPtr2SMDSMesh( SMESH_Mesh_ptr theMesh )
+MeshPtr2SMDSMesh( SMESH::SMESH_Mesh_ptr theMesh )
 {
-  SMESH_Mesh_i* anImplPtr = DownCast<SMESH_Mesh_i*>(theMesh);
+  SMESH_Mesh_i* anImplPtr = SMESH::DownCast<SMESH_Mesh_i*>(theMesh);
   return anImplPtr ? anImplPtr->GetImpl().GetMeshDS() : 0;
 }
 
@@ -117,11 +117,11 @@ static SMESH::Filter::Criterion createCriterion()
 {
   SMESH::Filter::Criterion aCriterion;
 
-  aCriterion.Type          = FT_Undefined;
-  aCriterion.Compare       = FT_Undefined;
+  aCriterion.Type          = SMESH::FT_Undefined;
+  aCriterion.Compare       = SMESH::FT_Undefined;
   aCriterion.Threshold     = 0;
-  aCriterion.UnaryOp       = FT_Undefined;
-  aCriterion.BinaryOp      = FT_Undefined;
+  aCriterion.UnaryOp       = SMESH::FT_Undefined;
+  aCriterion.BinaryOp      = SMESH::FT_Undefined;
   aCriterion.ThresholdStr  = "";
   aCriterion.ThresholdID   = "";
   aCriterion.Tolerance     = Precision::Confusion();
@@ -136,9 +136,9 @@ static TopoDS_Shape getShapeByName( const char* theName )
   if ( theName != 0 )
   {
     SMESH_Gen_i* aSMESHGen     = SMESH_Gen_i::GetSMESHGen();
-    SALOMEDS::Study::ListOfSObject_var aList = SMESH_Gen_i::getStudyServant()->FindObjectByName( theName, "GEOM" );
+    SALOMEDS::Study::ListOfSObject_var aList = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindObjectByName( theName, "GEOM" );
     if ( aList->length() == 0 )
-      aList = SMESH_Gen_i::getStudyServant()->FindObjectByName( theName, "SHAPERSTUDY" );
+      aList = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindObjectByName( theName, "SHAPERSTUDY" );
     if ( aList->length() > 0 )
     {
       CORBA::Object_var        anObj = aList[ 0 ]->GetObject();
@@ -155,7 +155,7 @@ static TopoDS_Shape getShapeByID (const char* theID)
 {
   if ( theID && strlen( theID ) > 0 ) {
     SMESH_Gen_i*     aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-    SALOMEDS::SObject_wrap aSObj = SMESH_Gen_i::getStudyServant()->FindObjectID(theID);
+    SALOMEDS::SObject_wrap aSObj = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindObjectID(theID);
     if ( !aSObj->_is_nil() ) {
       CORBA::Object_var          obj = aSObj->GetObject();
       GEOM::GEOM_Object_var aGeomObj = GEOM::GEOM_Object::_narrow(obj);
@@ -181,4107 +181,4162 @@ static TopoDS_Shape getShapeByID (const char* theID)
                                 FUNCTORS
 */
 
-/*
-  Class       : Functor_i
-  Description : An abstract class for all functors
-*/
-Functor_i::Functor_i():
-  SALOME::GenericObj_i( SMESH_Gen_i::GetPOA() )
-{
-  //Base class Salome_GenericObject do it inmplicitly by overriding PortableServer::POA_ptr _default_POA() method  
-  //PortableServer::ObjectId_var anObjectId =
-  //  SMESH_Gen_i::GetPOA()->activate_object( this );
-}
+//=============================================================================
+/*!
+ *  SMESH_Gen_i::CreateFilterManager
+ *
+ *  Create filter manager
+ */
+ //=============================================================================
 
-Functor_i::~Functor_i()
+SMESH::FilterManager_ptr SMESH_Gen_i::CreateFilterManager()
 {
-  //TPythonDump()<<this<<".UnRegister()";
+  SMESH::FilterManager_i* aFilter = new SMESH::FilterManager_i();
+  SMESH::FilterManager_var anObj = aFilter->_this();
+  return anObj._retn();
 }
 
-void Functor_i::SetMesh( SMESH_Mesh_ptr theMesh )
-{
-  myFunctorPtr->SetMesh( MeshPtr2SMDSMesh( theMesh ) );
-  TPythonDump()<<this<<".SetMesh("<<theMesh<<")";
-}
+namespace SMESH {
+  /*
+    Class       : Functor_i
+    Description : An abstract class for all functors
+  */
+  Functor_i::Functor_i():
+    SALOME::GenericObj_i( SMESH_Gen_i::GetPOA() )
+  {
+    //Base class Salome_GenericObject do it inmplicitly by overriding PortableServer::POA_ptr _default_POA() method  
+    //PortableServer::ObjectId_var anObjectId =
+    //  SMESH_Gen_i::GetPOA()->activate_object( this );
+  }
 
-ElementType Functor_i::GetElementType()
-{
-  return ( ElementType )myFunctorPtr->GetType();
-}
+  Functor_i::~Functor_i()
+  {
+    //TPythonDump()<<this<<".UnRegister()";
+  }
 
+  void Functor_i::SetMesh( SMESH_Mesh_ptr theMesh )
+  {
+    myFunctorPtr->SetMesh( MeshPtr2SMDSMesh( theMesh ) );
+    TPythonDump()<<this<<".SetMesh("<<theMesh<<")";
+  }
 
-/*
-  Class       : NumericalFunctor_i
-  Description : Base class for numerical functors
-*/
-CORBA::Double NumericalFunctor_i::GetValue( CORBA::Long theId )
-{
-  return myNumericalFunctorPtr->GetValue( theId );
-}
+  ElementType Functor_i::GetElementType()
+  {
+    return ( ElementType )myFunctorPtr->GetType();
+  }
 
-CORBA::Boolean NumericalFunctor_i::IsApplicable( CORBA::Long theElementId )
-{
-  return myNumericalFunctorPtr->IsApplicable( theElementId );
-}
 
-SMESH::Histogram* NumericalFunctor_i::GetHistogram(CORBA::Short nbIntervals, CORBA::Boolean isLogarithmic)
-{
-  std::vector<int> nbEvents;
-  std::vector<double> funValues;
-  std::vector<int> elements;
-  myNumericalFunctorPtr->GetHistogram(nbIntervals,nbEvents,funValues,elements,0,isLogarithmic);
+  /*
+    Class       : NumericalFunctor_i
+    Description : Base class for numerical functors
+  */
+  CORBA::Double NumericalFunctor_i::GetValue( SMESH::smIdType theId )
+  {
+    return myNumericalFunctorPtr->GetValue( theId );
+  }
 
-  SMESH::Histogram_var histogram = new SMESH::Histogram;
+  CORBA::Boolean NumericalFunctor_i::IsApplicable( SMESH::smIdType theElementId )
+  {
+    return myNumericalFunctorPtr->IsApplicable( theElementId );
+  }
 
-  nbIntervals = CORBA::Short( Min( int( nbEvents.size()),
-                                   int( funValues.size() - 1 )));
-  if ( nbIntervals > 0 )
+  SMESH::Histogram* NumericalFunctor_i::GetHistogram(CORBA::Short nbIntervals, CORBA::Boolean isLogarithmic)
   {
-    histogram->length( nbIntervals );
-    for ( int i = 0; i < nbIntervals; ++i )
+    std::vector<int> nbEvents;
+    std::vector<double> funValues;
+    std::vector<::smIdType> elements;
+    myNumericalFunctorPtr->GetHistogram(nbIntervals, nbEvents, funValues ,elements, 0, isLogarithmic);
+
+    SMESH::Histogram_var histogram = new SMESH::Histogram;
+
+    nbIntervals = CORBA::Short( Min( int( nbEvents.size()),
+                                     int( funValues.size() - 1 )));
+    if ( nbIntervals > 0 )
     {
-      HistogramRectangle& rect = histogram[i];
-      rect.nbEvents = nbEvents[i];
-      rect.min = funValues[i];
-      rect.max = funValues[i+1];
+      histogram->length( nbIntervals );
+      for ( int i = 0; i < nbIntervals; ++i )
+      {
+        HistogramRectangle& rect = histogram[i];
+        rect.nbEvents = nbEvents[i];
+        rect.min = funValues[i];
+        rect.max = funValues[i+1];
+      }
     }
+    return histogram._retn();
   }
-  return histogram._retn();
-}
 
-SMESH::Histogram* NumericalFunctor_i::GetLocalHistogram(CORBA::Short              nbIntervals,
-                                                        CORBA::Boolean            isLogarithmic,
-                                                        SMESH::SMESH_IDSource_ptr object)
-{
-  SMESH::Histogram_var histogram = new SMESH::Histogram;
+  SMESH::Histogram* NumericalFunctor_i::GetLocalHistogram(CORBA::Short              nbIntervals,
+                                                          CORBA::Boolean            isLogarithmic,
+                                                          SMESH::SMESH_IDSource_ptr object)
+  {
+    SMESH::Histogram_var histogram = new SMESH::Histogram;
 
-  std::vector<int>    nbEvents;
-  std::vector<double> funValues;
-  std::vector<int>    elements;
+    std::vector<int>             nbEvents;
+    std::vector<double>          funValues;
+    std::vector<::smIdType> elements;
 
-  SMDS_ElemIteratorPtr elemIt;
-  if ( SMESH::DownCast< SMESH_GroupOnFilter_i* >( object ) ||
-       SMESH::DownCast< SMESH::Filter_i* >( object ))
-  {
-    elemIt = SMESH_Mesh_i::GetElements( object, GetElementType() );
-    if ( !elemIt ) return histogram._retn();
-  }
-  else
-  {
-    SMESH::SMESH_Mesh_var        mesh = object->GetMesh();
-    SMESH::long_array_var  objNbElems = object->GetNbElementsByType();
-    SMESH::long_array_var meshNbElems = mesh->  GetNbElementsByType();
-    if ( meshNbElems[ GetElementType() ] !=
-         objNbElems [ GetElementType() ] )
+    SMDS_ElemIteratorPtr elemIt;
+    if ( SMESH::DownCast< SMESH_GroupOnFilter_i* >( object ) ||
+         SMESH::DownCast< SMESH::Filter_i* >( object ))
     {
-      elements.reserve( objNbElems[ GetElementType() ]);
       elemIt = SMESH_Mesh_i::GetElements( object, GetElementType() );
+      if ( !elemIt ) return histogram._retn();
+    }
+    else
+    {
+      SMESH::SMESH_Mesh_var            mesh = object->GetMesh();
+      SMESH::smIdType_array_var  objNbElems = object->GetNbElementsByType();
+      SMESH::smIdType_array_var meshNbElems = mesh->  GetNbElementsByType();
+      if ( meshNbElems[ GetElementType() ] !=
+           objNbElems [ GetElementType() ] )
+      {
+        elements.reserve( objNbElems[ GetElementType() ]);
+        elemIt = SMESH_Mesh_i::GetElements( object, GetElementType() );
+      }
+    }
+    if ( elemIt )
+    {
+      while ( elemIt->more() )
+        elements.push_back( elemIt->next()->GetID() );
+      if ( elements.empty() ) return histogram._retn();
     }
-  }
-  if ( elemIt )
-  {
-    while ( elemIt->more() )
-      elements.push_back( elemIt->next()->GetID() );
-    if ( elements.empty() ) return histogram._retn();
-  }
 
-  myNumericalFunctorPtr->GetHistogram(nbIntervals,nbEvents,funValues,elements,0,isLogarithmic);
+    myNumericalFunctorPtr->GetHistogram(nbIntervals,nbEvents,funValues, elements, 0, isLogarithmic);
 
-  nbIntervals = CORBA::Short( Min( int( nbEvents.size()),
-                                   int( funValues.size() - 1 )));
-  if ( nbIntervals > 0 )
-  {
-    histogram->length( nbIntervals );
-    for ( int i = 0; i < nbIntervals; ++i )
+    nbIntervals = CORBA::Short( Min( int( nbEvents.size()),
+                                     int( funValues.size() - 1 )));
+    if ( nbIntervals > 0 )
     {
-      HistogramRectangle& rect = histogram[i];
-      rect.nbEvents = nbEvents[i];
-      rect.min = funValues[i];
-      rect.max = funValues[i+1];
+      histogram->length( nbIntervals );
+      for ( int i = 0; i < nbIntervals; ++i )
+      {
+        HistogramRectangle& rect = histogram[i];
+        rect.nbEvents = nbEvents[i];
+        rect.min = funValues[i];
+        rect.max = funValues[i+1];
+      }
     }
+    return histogram._retn();
   }
-  return histogram._retn();
-}
-
-void NumericalFunctor_i::SetPrecision( CORBA::Long thePrecision )
-{
-  myNumericalFunctorPtr->SetPrecision( thePrecision );
-  TPythonDump()<<this<<".SetPrecision("<<thePrecision<<")";
-}
 
-CORBA::Long NumericalFunctor_i::GetPrecision()
-{
- return myNumericalFunctorPtr->GetPrecision();
-}
-
-Controls::NumericalFunctorPtr NumericalFunctor_i::GetNumericalFunctor()
-{
-  return myNumericalFunctorPtr;
-}
+  void NumericalFunctor_i::SetPrecision( CORBA::Long thePrecision )
+  {
+    myNumericalFunctorPtr->SetPrecision( thePrecision );
+    TPythonDump()<<this<<".SetPrecision("<<thePrecision<<")";
+  }
 
+  CORBA::Long NumericalFunctor_i::GetPrecision()
+  {
+   return myNumericalFunctorPtr->GetPrecision();
+  }
 
-/*
-  Class       : SMESH_MinimumAngle
-  Description : Functor for calculation of minimum angle
-*/
-MinimumAngle_i::MinimumAngle_i()
-{
-  myNumericalFunctorPtr.reset( new Controls::MinimumAngle() );
-  myFunctorPtr = myNumericalFunctorPtr;
-}
+  Controls::NumericalFunctorPtr NumericalFunctor_i::GetNumericalFunctor()
+  {
+    return myNumericalFunctorPtr;
+  }
 
-FunctorType MinimumAngle_i::GetFunctorType()
-{
-  return SMESH::FT_MinimumAngle;
-}
 
+  /*
+    Class       : SMESH_MinimumAngle
+    Description : Functor for calculation of minimum angle
+  */
+  MinimumAngle_i::MinimumAngle_i()
+  {
+    myNumericalFunctorPtr.reset( new Controls::MinimumAngle() );
+    myFunctorPtr = myNumericalFunctorPtr;
+  }
 
-/*
-  Class       : AspectRatio
-  Description : Functor for calculating aspect ratio
-*/
-AspectRatio_i::AspectRatio_i()
-{
-  myNumericalFunctorPtr.reset( new Controls::AspectRatio() );
-  myFunctorPtr = myNumericalFunctorPtr;
-}
+  FunctorType MinimumAngle_i::GetFunctorType()
+  {
+    return SMESH::FT_MinimumAngle;
+  }
 
-FunctorType AspectRatio_i::GetFunctorType()
-{
-  return SMESH::FT_AspectRatio;
-}
 
+  /*
+    Class       : AspectRatio
+    Description : Functor for calculating aspect ratio
+  */
+  AspectRatio_i::AspectRatio_i()
+  {
+    myNumericalFunctorPtr.reset( new Controls::AspectRatio() );
+    myFunctorPtr = myNumericalFunctorPtr;
+  }
 
-/*
-  Class       : AspectRatio3D
-  Description : Functor for calculating aspect ratio 3D
-*/
-AspectRatio3D_i::AspectRatio3D_i()
-{
-  myNumericalFunctorPtr.reset( new Controls::AspectRatio3D() );
-  myFunctorPtr = myNumericalFunctorPtr;
-}
+  FunctorType AspectRatio_i::GetFunctorType()
+  {
+    return SMESH::FT_AspectRatio;
+  }
 
-FunctorType AspectRatio3D_i::GetFunctorType()
-{
-  return SMESH::FT_AspectRatio3D;
-}
 
+  /*
+    Class       : AspectRatio3D
+    Description : Functor for calculating aspect ratio 3D
+  */
+  AspectRatio3D_i::AspectRatio3D_i()
+  {
+    myNumericalFunctorPtr.reset( new Controls::AspectRatio3D() );
+    myFunctorPtr = myNumericalFunctorPtr;
+  }
 
-/*
-  Class       : Warping_i
-  Description : Functor for calculating warping
-*/
-Warping_i::Warping_i()
-{
-  myNumericalFunctorPtr.reset( new Controls::Warping() );
-  myFunctorPtr = myNumericalFunctorPtr;
-}
+  FunctorType AspectRatio3D_i::GetFunctorType()
+  {
+    return SMESH::FT_AspectRatio3D;
+  }
 
-FunctorType Warping_i::GetFunctorType()
-{
-  return SMESH::FT_Warping;
-}
 
+  /*
+    Class       : Warping_i
+    Description : Functor for calculating warping
+  */
+  Warping_i::Warping_i()
+  {
+    myNumericalFunctorPtr.reset( new Controls::Warping() );
+    myFunctorPtr = myNumericalFunctorPtr;
+  }
 
-/*
-  Class       : Taper_i
-  Description : Functor for calculating taper
-*/
-Taper_i::Taper_i()
-{
-  myNumericalFunctorPtr.reset( new Controls::Taper() );
-  myFunctorPtr = myNumericalFunctorPtr;
-}
+  FunctorType Warping_i::GetFunctorType()
+  {
+    return SMESH::FT_Warping;
+  }
 
-FunctorType Taper_i::GetFunctorType()
-{
-  return SMESH::FT_Taper;
-}
+  /*
+    Class       : Warping3D_i
+    Description : Functor for calculating warping
+  */
+  Warping3D_i::Warping3D_i()
+  {
+    myNumericalFunctorPtr.reset(new Controls::Warping3D());
+    myFunctorPtr = myNumericalFunctorPtr;
+  }
 
-/*
-  Class       : Skew_i
-  Description : Functor for calculating skew in degrees
-*/
-Skew_i::Skew_i()
-{
-  myNumericalFunctorPtr.reset( new Controls::Skew() );
-  myFunctorPtr = myNumericalFunctorPtr;
-}
+  FunctorType Warping3D_i::GetFunctorType()
+  {
+    return SMESH::FT_Warping3D;
+  }
 
-FunctorType Skew_i::GetFunctorType()
-{
-  return SMESH::FT_Skew;
-}
+  /*
+    Class       : Taper_i
+    Description : Functor for calculating taper
+  */
+  Taper_i::Taper_i()
+  {
+    myNumericalFunctorPtr.reset( new Controls::Taper() );
+    myFunctorPtr = myNumericalFunctorPtr;
+  }
 
-/*
-  Class       : Area_i
-  Description : Functor for calculating area
-*/
-Area_i::Area_i()
-{
-  myNumericalFunctorPtr.reset( new Controls::Area() );
-  myFunctorPtr = myNumericalFunctorPtr;
-}
+  FunctorType Taper_i::GetFunctorType()
+  {
+    return SMESH::FT_Taper;
+  }
 
-FunctorType Area_i::GetFunctorType()
-{
-  return SMESH::FT_Area;
-}
+  /*
+    Class       : Skew_i
+    Description : Functor for calculating skew in degrees
+  */
+  Skew_i::Skew_i()
+  {
+    myNumericalFunctorPtr.reset( new Controls::Skew() );
+    myFunctorPtr = myNumericalFunctorPtr;
+  }
 
-/*
-  Class       : Volume3D_i
-  Description : Functor for calculating volume of 3D element
-*/
-Volume3D_i::Volume3D_i()
-{
-  myNumericalFunctorPtr.reset( new Controls::Volume() );
-  myFunctorPtr = myNumericalFunctorPtr;
-}
+  FunctorType Skew_i::GetFunctorType()
+  {
+    return SMESH::FT_Skew;
+  }
 
-FunctorType Volume3D_i::GetFunctorType()
-{
-  return SMESH::FT_Volume3D;
-}
+  /*
+    Class       : Area_i
+    Description : Functor for calculating area
+  */
+  Area_i::Area_i()
+  {
+    myNumericalFunctorPtr.reset( new Controls::Area() );
+    myFunctorPtr = myNumericalFunctorPtr;
+  }
 
-/*
-  Class       : MaxElementLength2D_i
-  Description : Functor for calculating maximum length of 2D element
-*/
-MaxElementLength2D_i::MaxElementLength2D_i()
-{
-  myNumericalFunctorPtr.reset( new Controls::MaxElementLength2D() );
-  myFunctorPtr = myNumericalFunctorPtr;
-}
+  FunctorType Area_i::GetFunctorType()
+  {
+    return SMESH::FT_Area;
+  }
 
-FunctorType MaxElementLength2D_i::GetFunctorType()
-{
-  return SMESH::FT_MaxElementLength2D;
-}
+  /*
+    Class       : Volume3D_i
+    Description : Functor for calculating volume of 3D element
+  */
+  Volume3D_i::Volume3D_i()
+  {
+    myNumericalFunctorPtr.reset( new Controls::Volume() );
+    myFunctorPtr = myNumericalFunctorPtr;
+  }
 
-/*
-  Class       : MaxElementLength3D_i
-  Description : Functor for calculating maximum length of 3D element
-*/
-MaxElementLength3D_i::MaxElementLength3D_i()
-{
-  myNumericalFunctorPtr.reset( new Controls::MaxElementLength3D() );
-  myFunctorPtr = myNumericalFunctorPtr;
-}
+  FunctorType Volume3D_i::GetFunctorType()
+  {
+    return SMESH::FT_Volume3D;
+  }
 
-FunctorType MaxElementLength3D_i::GetFunctorType()
-{
-  return SMESH::FT_MaxElementLength3D;
-}
+  /*
+    Class       : ScaledJacobian_i
+    Description : Functor for calculating volume of 3D element
+  */
+  ScaledJacobian_i::ScaledJacobian_i()
+  {
+    myNumericalFunctorPtr.reset( new Controls::ScaledJacobian() );
+    myFunctorPtr = myNumericalFunctorPtr;
+  }
 
-/*
-  Class       : Length_i
-  Description : Functor for calculating length off edge
-*/
-Length_i::Length_i()
-{
-  myNumericalFunctorPtr.reset( new Controls::Length() );
-  myFunctorPtr = myNumericalFunctorPtr;
-}
+  FunctorType ScaledJacobian_i::GetFunctorType()
+  {
+    return SMESH::FT_ScaledJacobian;
+  }
 
-FunctorType Length_i::GetFunctorType()
-{
-  return SMESH::FT_Length;
-}
+  /*
+    Class       : MaxElementLength2D_i
+    Description : Functor for calculating maximum length of 2D element
+  */
+  MaxElementLength2D_i::MaxElementLength2D_i()
+  {
+    myNumericalFunctorPtr.reset( new Controls::MaxElementLength2D() );
+    myFunctorPtr = myNumericalFunctorPtr;
+  }
 
-/*
-  Class       : Length2D_i
-  Description : Functor for calculating length of edge
-*/
-Length2D_i::Length2D_i()
-{
-  myNumericalFunctorPtr.reset( new Controls::Length2D() );
-  myFunctorPtr = myNumericalFunctorPtr;
-}
+  FunctorType MaxElementLength2D_i::GetFunctorType()
+  {
+    return SMESH::FT_MaxElementLength2D;
+  }
 
-FunctorType Length2D_i::GetFunctorType()
-{
-  return SMESH::FT_Length2D;
-}
+  /*
+    Class       : MaxElementLength3D_i
+    Description : Functor for calculating maximum length of 3D element
+  */
+  MaxElementLength3D_i::MaxElementLength3D_i()
+  {
+    myNumericalFunctorPtr.reset( new Controls::MaxElementLength3D() );
+    myFunctorPtr = myNumericalFunctorPtr;
+  }
 
-SMESH::Length2D::Values* Length2D_i::GetValues()
-{
-  SMESH::Controls::Length2D::TValues aValues;
-  (dynamic_cast<SMESH::Controls::Length2D*>(myFunctorPtr.get()))->GetValues( aValues );
+  FunctorType MaxElementLength3D_i::GetFunctorType()
+  {
+    return SMESH::FT_MaxElementLength3D;
+  }
 
-  long i = 0, iEnd = aValues.size();
+  /*
+    Class       : Length_i
+    Description : Functor for calculating length off edge
+  */
+  Length_i::Length_i()
+  {
+    myNumericalFunctorPtr.reset( new Controls::Length() );
+    myFunctorPtr = myNumericalFunctorPtr;
+  }
 
-  SMESH::Length2D::Values_var aResult = new SMESH::Length2D::Values(iEnd);
-  aResult->length(iEnd);
+  FunctorType Length_i::GetFunctorType()
+  {
+    return SMESH::FT_Length;
+  }
 
-  SMESH::Controls::Length2D::TValues::const_iterator anIter;
-  for ( anIter = aValues.begin() ; anIter != aValues.end(); anIter++, i++ )
+  /*
+    Class       : Length2D_i
+    Description : Functor for calculating length of edge
+  */
+  Length2D_i::Length2D_i()
   {
-    const SMESH::Controls::Length2D::Value&  aVal = *anIter;
-    SMESH::Length2D::Value &aValue = aResult[ i ];
+    myNumericalFunctorPtr.reset( new Controls::Length2D() );
+    myFunctorPtr = myNumericalFunctorPtr;
+  }
 
-    aValue.myLength = aVal.myLength;
-    aValue.myPnt1 = aVal.myPntId[ 0 ];
-    aValue.myPnt2 = aVal.myPntId[ 1 ];
+  FunctorType Length2D_i::GetFunctorType()
+  {
+    return SMESH::FT_Length2D;
   }
 
-  return aResult._retn();
-}
+  SMESH::Length2D::Values* Length2D_i::GetValues()
+  {
+    SMESH::Controls::Length2D::TValues aValues;
+    (dynamic_cast<SMESH::Controls::Length2D*>(myFunctorPtr.get()))->GetValues( aValues );
 
+    long i = 0, iEnd = aValues.size();
 
-/*
-  Class       : Length3D_i
-  Description : Functor for calculating length of edge
-*/
-Length3D_i::Length3D_i()
-{
-  myNumericalFunctorPtr.reset( new Controls::Length3D() );
-  myFunctorPtr = myNumericalFunctorPtr;
-}
+    SMESH::Length2D::Values_var aResult = new SMESH::Length2D::Values(iEnd);
+    aResult->length(iEnd);
 
-FunctorType Length3D_i::GetFunctorType()
-{
-  return SMESH::FT_Length3D;
-}
+    SMESH::Controls::Length2D::TValues::const_iterator anIter;
+    for ( anIter = aValues.begin() ; anIter != aValues.end(); anIter++, i++ )
+    {
+      const SMESH::Controls::Length2D::Value&  aVal = *anIter;
+      SMESH::Length2D::Value &aValue = aResult[ i ];
 
-// SMESH::Length3D::Values* Length3D_i::GetValues()
-// {
-//   SMESH::Controls::Length3D::TValues aValues;
-//   (dynamic_cast<SMESH::Controls::Length3D*>(myFunctorPtr.get()))->GetValues( aValues );
+      aValue.myLength = aVal.myLength;
+      aValue.myPnt1 = aVal.myPntId[ 0 ];
+      aValue.myPnt2 = aVal.myPntId[ 1 ];
+    }
 
-//   long i = 0, iEnd = aValues.size();
+    return aResult._retn();
+  }
 
-//   SMESH::Length3D::Values_var aResult = new SMESH::Length3D::Values(iEnd);
-//   aResult->length(iEnd);
 
-//   SMESH::Controls::Length3D::TValues::const_iterator anIter;
-//   for ( anIter = aValues.begin() ; anIter != aValues.end(); anIter++, i++ )
-//   {
-//     const SMESH::Controls::Length3D::Value&  aVal = *anIter;
-//     SMESH::Length3D::Value &aValue = aResult[ i ];
+  /*
+    Class       : Length3D_i
+    Description : Functor for calculating length of edge
+  */
+  Length3D_i::Length3D_i()
+  {
+    myNumericalFunctorPtr.reset( new Controls::Length3D() );
+    myFunctorPtr = myNumericalFunctorPtr;
+  }
 
-//     aValue.myLength = aVal.myLength;
-//     aValue.myPnt1 = aVal.myPntId[ 0 ];
-//     aValue.myPnt2 = aVal.myPntId[ 1 ];
-//   }
+  FunctorType Length3D_i::GetFunctorType()
+  {
+    return SMESH::FT_Length3D;
+  }
 
-//   return aResult._retn();
-// }
+  // SMESH::Length3D::Values* Length3D_i::GetValues()
+  // {
+  //   SMESH::Controls::Length3D::TValues aValues;
+  //   (dynamic_cast<SMESH::Controls::Length3D*>(myFunctorPtr.get()))->GetValues( aValues );
 
-/*
-  Class       : Deflection2D_i
-  Description : Functor for calculating distance between a face and geometry
-*/
-Deflection2D_i::Deflection2D_i()
-{
-  myNumericalFunctorPtr.reset( new Controls::Deflection2D() );
-  myFunctorPtr = myNumericalFunctorPtr;
-}
+  //   long i = 0, iEnd = aValues.size();
 
-FunctorType Deflection2D_i::GetFunctorType()
-{
-  return SMESH::FT_Deflection2D;
-}
+  //   SMESH::Length3D::Values_var aResult = new SMESH::Length3D::Values(iEnd);
+  //   aResult->length(iEnd);
 
-/*
-  Class       : MultiConnection_i
-  Description : Functor for calculating number of faces conneted to the edge
-*/
-MultiConnection_i::MultiConnection_i()
-{
-  myNumericalFunctorPtr.reset( new Controls::MultiConnection() );
-  myFunctorPtr = myNumericalFunctorPtr;
-}
+  //   SMESH::Controls::Length3D::TValues::const_iterator anIter;
+  //   for ( anIter = aValues.begin() ; anIter != aValues.end(); anIter++, i++ )
+  //   {
+  //     const SMESH::Controls::Length3D::Value&  aVal = *anIter;
+  //     SMESH::Length3D::Value &aValue = aResult[ i ];
 
-FunctorType MultiConnection_i::GetFunctorType()
-{
-  return SMESH::FT_MultiConnection;
-}
+  //     aValue.myLength = aVal.myLength;
+  //     aValue.myPnt1 = aVal.myPntId[ 0 ];
+  //     aValue.myPnt2 = aVal.myPntId[ 1 ];
+  //   }
 
-/*
-  Class       : BallDiameter_i
-  Description : Functor returning diameter of a ball element
-*/
-BallDiameter_i::BallDiameter_i()
-{
-  myNumericalFunctorPtr.reset( new Controls::BallDiameter() );
-  myFunctorPtr = myNumericalFunctorPtr;
-}
+  //   return aResult._retn();
+  // }
 
-FunctorType BallDiameter_i::GetFunctorType()
-{
-  return SMESH::FT_BallDiameter;
-}
+  /*
+    Class       : Deflection2D_i
+    Description : Functor for calculating distance between a face and geometry
+  */
+  Deflection2D_i::Deflection2D_i()
+  {
+    myNumericalFunctorPtr.reset( new Controls::Deflection2D() );
+    myFunctorPtr = myNumericalFunctorPtr;
+  }
 
-/*
-  Class       : NodeConnectivityNumber_i
-  Description : Functor returning diameter of a ball element
-*/
-NodeConnectivityNumber_i::NodeConnectivityNumber_i()
-{
-  myNumericalFunctorPtr.reset( new Controls::NodeConnectivityNumber() );
-  myFunctorPtr = myNumericalFunctorPtr;
-}
+  FunctorType Deflection2D_i::GetFunctorType()
+  {
+    return SMESH::FT_Deflection2D;
+  }
 
-FunctorType NodeConnectivityNumber_i::GetFunctorType()
-{
-  return SMESH::FT_NodeConnectivityNumber;
-}
+  /*
+    Class       : MultiConnection_i
+    Description : Functor for calculating number of faces conneted to the edge
+  */
+  MultiConnection_i::MultiConnection_i()
+  {
+    myNumericalFunctorPtr.reset( new Controls::MultiConnection() );
+    myFunctorPtr = myNumericalFunctorPtr;
+  }
 
-/*
-  Class       : MultiConnection2D_i
-  Description : Functor for calculating number of faces conneted to the edge
-*/
-MultiConnection2D_i::MultiConnection2D_i()
-{
-  myNumericalFunctorPtr.reset( new Controls::MultiConnection2D() );
-  myFunctorPtr = myNumericalFunctorPtr;
-}
+  FunctorType MultiConnection_i::GetFunctorType()
+  {
+    return SMESH::FT_MultiConnection;
+  }
 
-FunctorType MultiConnection2D_i::GetFunctorType()
-{
-  return SMESH::FT_MultiConnection2D;
-}
-
-SMESH::MultiConnection2D::Values* MultiConnection2D_i::GetValues()
-{
-  SMESH::Controls::MultiConnection2D::MValues aValues;
-  (dynamic_cast<SMESH::Controls::MultiConnection2D*>(myFunctorPtr.get()))->GetValues( aValues );
-  
-  long i = 0, iEnd = aValues.size();
+  /*
+    Class       : BallDiameter_i
+    Description : Functor returning diameter of a ball element
+  */
+  BallDiameter_i::BallDiameter_i()
+  {
+    myNumericalFunctorPtr.reset( new Controls::BallDiameter() );
+    myFunctorPtr = myNumericalFunctorPtr;
+  }
 
-  SMESH::MultiConnection2D::Values_var aResult = new SMESH::MultiConnection2D::Values(iEnd);
-  aResult->length(iEnd);
+  FunctorType BallDiameter_i::GetFunctorType()
+  {
+    return SMESH::FT_BallDiameter;
+  }
 
-  SMESH::Controls::MultiConnection2D::MValues::const_iterator anIter;
-  for ( anIter = aValues.begin() ; anIter != aValues.end(); anIter++, i++ )
+  /*
+    Class       : NodeConnectivityNumber_i
+    Description : Functor returning diameter of a ball element
+  */
+  NodeConnectivityNumber_i::NodeConnectivityNumber_i()
   {
-    const SMESH::Controls::MultiConnection2D::Value&  aVal = (*anIter).first;
-    SMESH::MultiConnection2D::Value &aValue = aResult[ i ];
+    myNumericalFunctorPtr.reset( new Controls::NodeConnectivityNumber() );
+    myFunctorPtr = myNumericalFunctorPtr;
+  }
 
-    aValue.myPnt1 = aVal.myPntId[ 0 ];
-    aValue.myPnt2 = aVal.myPntId[ 1 ];
-    aValue.myNbConnects = (*anIter).second;
+  FunctorType NodeConnectivityNumber_i::GetFunctorType()
+  {
+    return SMESH::FT_NodeConnectivityNumber;
   }
 
-  return aResult._retn();
-}
+  /*
+    Class       : MultiConnection2D_i
+    Description : Functor for calculating number of faces conneted to the edge
+  */
+  MultiConnection2D_i::MultiConnection2D_i()
+  {
+    myNumericalFunctorPtr.reset( new Controls::MultiConnection2D() );
+    myFunctorPtr = myNumericalFunctorPtr;
+  }
 
-/*
-                            PREDICATES
-*/
+  FunctorType MultiConnection2D_i::GetFunctorType()
+  {
+    return SMESH::FT_MultiConnection2D;
+  }
 
+  SMESH::MultiConnection2D::Values* MultiConnection2D_i::GetValues()
+  {
+    SMESH::Controls::MultiConnection2D::MValues aValues;
+    (dynamic_cast<SMESH::Controls::MultiConnection2D*>(myFunctorPtr.get()))->GetValues( aValues );
+  
+    long i = 0, iEnd = aValues.size();
 
-/*
-  Class       : Predicate_i
-  Description : Base class for all predicates
-*/
-CORBA::Boolean Predicate_i::IsSatisfy( CORBA::Long theId )
-{
-  return myPredicatePtr->IsSatisfy( theId );
-}
+    SMESH::MultiConnection2D::Values_var aResult = new SMESH::MultiConnection2D::Values(iEnd);
+    aResult->length(iEnd);
 
-CORBA::Long Predicate_i::NbSatisfying( SMESH::SMESH_IDSource_ptr obj )
-{
-  SMESH::SMESH_Mesh_var meshVar = obj->GetMesh();
-  const SMDS_Mesh*       meshDS = MeshPtr2SMDSMesh( meshVar );
-  if ( !meshDS )
-    return 0;
-  myPredicatePtr->SetMesh( meshDS );
-
-  SMDSAbs_ElementType elemType = SMDSAbs_ElementType( GetElementType() );
-
-  int nb = 0;
-  SMDS_ElemIteratorPtr elemIt =
-    SMESH::DownCast<SMESH_Mesh_i*>( meshVar )->GetElements( obj, GetElementType() );
-  if ( elemIt )
-    while ( elemIt->more() )
+    SMESH::Controls::MultiConnection2D::MValues::const_iterator anIter;
+    for ( anIter = aValues.begin() ; anIter != aValues.end(); anIter++, i++ )
     {
-      const SMDS_MeshElement* e = elemIt->next();
-      if ( e && e->GetType() == elemType )
-        nb += myPredicatePtr->IsSatisfy( e->GetID() );
+      const SMESH::Controls::MultiConnection2D::Value&  aVal = (*anIter).first;
+      SMESH::MultiConnection2D::Value &aValue = aResult[ i ];
+
+      aValue.myPnt1 = aVal.myPntId[ 0 ];
+      aValue.myPnt2 = aVal.myPntId[ 1 ];
+      aValue.myNbConnects = (*anIter).second;
     }
-  return nb;
-}
 
-Controls::PredicatePtr Predicate_i::GetPredicate()
-{
-  return myPredicatePtr;
-}
+    return aResult._retn();
+  }
 
-/*
-  Class       : BadOrientedVolume_i
-  Description : Verify whether a mesh volume is incorrectly oriented from
-                the point of view of MED convention
-*/
-BadOrientedVolume_i::BadOrientedVolume_i()
-{
-  Controls::PredicatePtr control( new Controls::BadOrientedVolume() );
-  myFunctorPtr = myPredicatePtr = control;
-}
+  /*
+                              PREDICATES
+  */
 
-FunctorType BadOrientedVolume_i::GetFunctorType()
-{
-  return SMESH::FT_BadOrientedVolume;
-}
 
-/*
-  Class       : BareBorderVolume_i
-  Description : Verify whether a mesh volume has a free facet without a face on it
-*/
-BareBorderVolume_i::BareBorderVolume_i()
-{
-  Controls::PredicatePtr control( new Controls::BareBorderVolume() );
-  myFunctorPtr = myPredicatePtr = control;
-}
+  /*
+    Class       : Predicate_i
+    Description : Base class for all predicates
+  */
+  CORBA::Boolean Predicate_i::IsSatisfy( CORBA::Long theId )
+  {
+    return myPredicatePtr->IsSatisfy( theId );
+  }
 
-FunctorType BareBorderVolume_i::GetFunctorType()
-{
-  return SMESH::FT_BareBorderVolume;
-}
+  CORBA::Long Predicate_i::NbSatisfying( SMESH::SMESH_IDSource_ptr obj )
+  {
+    SMESH::SMESH_Mesh_var meshVar = obj->GetMesh();
+    const SMDS_Mesh*       meshDS = MeshPtr2SMDSMesh( meshVar );
+    if ( !meshDS )
+      return 0;
+    myPredicatePtr->SetMesh( meshDS );
+
+    SMDSAbs_ElementType elemType = SMDSAbs_ElementType( GetElementType() );
+
+    int nb = 0;
+    SMDS_ElemIteratorPtr elemIt =
+      SMESH::DownCast<SMESH_Mesh_i*>( meshVar )->GetElements( obj, GetElementType() );
+    if ( elemIt )
+      while ( elemIt->more() )
+      {
+        const SMDS_MeshElement* e = elemIt->next();
+        if ( e && e->GetType() == elemType )
+          nb += myPredicatePtr->IsSatisfy( e->GetID() );
+      }
+    return nb;
+  }
 
-/*
-  Class       : BareBorderFace_i
-  Description : Verify whether a mesh face has a free border without an edge on it
-*/
-BareBorderFace_i::BareBorderFace_i()
-{
-  Controls::PredicatePtr control( new Controls::BareBorderFace() );
-  myFunctorPtr = myPredicatePtr = control;
-}
+  Controls::PredicatePtr Predicate_i::GetPredicate()
+  {
+    return myPredicatePtr;
+  }
 
-FunctorType BareBorderFace_i::GetFunctorType()
-{
-  return SMESH::FT_BareBorderFace;
-}
+  /*
+    Class       : BadOrientedVolume_i
+    Description : Verify whether a mesh volume is incorrectly oriented from
+                  the point of view of MED convention
+  */
+  BadOrientedVolume_i::BadOrientedVolume_i()
+  {
+    Controls::PredicatePtr control( new Controls::BadOrientedVolume() );
+    myFunctorPtr = myPredicatePtr = control;
+  }
 
-/*
-  Class       : OverConstrainedVolume_i
-  Description : Verify whether a mesh volume has only one facet shared with other volumes
-*/
-OverConstrainedVolume_i::OverConstrainedVolume_i()
-{
-  Controls::PredicatePtr control( new Controls::OverConstrainedVolume() );
-  myFunctorPtr = myPredicatePtr = control;
-}
+  FunctorType BadOrientedVolume_i::GetFunctorType()
+  {
+    return SMESH::FT_BadOrientedVolume;
+  }
 
-FunctorType OverConstrainedVolume_i::GetFunctorType()
-{
-  return SMESH::FT_OverConstrainedVolume;
-}
+  /*
+    Class       : BareBorderVolume_i
+    Description : Verify whether a mesh volume has a free facet without a face on it
+  */
+  BareBorderVolume_i::BareBorderVolume_i()
+  {
+    Controls::PredicatePtr control( new Controls::BareBorderVolume() );
+    myFunctorPtr = myPredicatePtr = control;
+  }
 
-/*
-  Class       : OverConstrainedFace_i
-  Description : Verify whether a mesh face has only one border shared with other faces
-*/
-OverConstrainedFace_i::OverConstrainedFace_i()
-{
-  Controls::PredicatePtr control( new Controls::OverConstrainedFace() );
-  myFunctorPtr = myPredicatePtr = control;
-}
+  FunctorType BareBorderVolume_i::GetFunctorType()
+  {
+    return SMESH::FT_BareBorderVolume;
+  }
 
-FunctorType OverConstrainedFace_i::GetFunctorType()
-{
-  return SMESH::FT_OverConstrainedFace;
-}
+  /*
+    Class       : BareBorderFace_i
+    Description : Verify whether a mesh face has a free border without an edge on it
+  */
+  BareBorderFace_i::BareBorderFace_i()
+  {
+    Controls::PredicatePtr control( new Controls::BareBorderFace() );
+    myFunctorPtr = myPredicatePtr = control;
+  }
 
-/*
-  Class       : BelongToMeshGroup_i
-  Description : Verify whether a mesh element is included into a mesh group
-*/
-BelongToMeshGroup_i::BelongToMeshGroup_i()
-{
-  myBelongToMeshGroup = Controls::BelongToMeshGroupPtr( new Controls::BelongToMeshGroup() );
-  myFunctorPtr = myPredicatePtr = myBelongToMeshGroup;
-}
+  FunctorType BareBorderFace_i::GetFunctorType()
+  {
+    return SMESH::FT_BareBorderFace;
+  }
 
-BelongToMeshGroup_i::~BelongToMeshGroup_i()
-{
-  SetGroup( SMESH::SMESH_GroupBase::_nil() );
-}
+  /*
+    Class       : OverConstrainedVolume_i
+    Description : Verify whether a mesh volume has only one facet shared with other volumes
+  */
+  OverConstrainedVolume_i::OverConstrainedVolume_i()
+  {
+    Controls::PredicatePtr control( new Controls::OverConstrainedVolume() );
+    myFunctorPtr = myPredicatePtr = control;
+  }
 
-void BelongToMeshGroup_i::SetGroup( SMESH::SMESH_GroupBase_ptr theGroup )
-{
-  if ( myGroup->_is_equivalent( theGroup ))
-    return;
+  FunctorType OverConstrainedVolume_i::GetFunctorType()
+  {
+    return SMESH::FT_OverConstrainedVolume;
+  }
 
-  if ( ! myGroup->_is_nil() )
-    myGroup->UnRegister();
+  /*
+    Class       : OverConstrainedFace_i
+    Description : Verify whether a mesh face has only one border shared with other faces
+  */
+  OverConstrainedFace_i::OverConstrainedFace_i()
+  {
+    Controls::PredicatePtr control( new Controls::OverConstrainedFace() );
+    myFunctorPtr = myPredicatePtr = control;
+  }
 
-  myGroup = SMESH_GroupBase::_duplicate( theGroup );
+  FunctorType OverConstrainedFace_i::GetFunctorType()
+  {
+    return SMESH::FT_OverConstrainedFace;
+  }
 
-  myBelongToMeshGroup->SetGroup( 0 );
-  if ( SMESH_GroupBase_i* gr_i = SMESH::DownCast< SMESH_GroupBase_i* >( myGroup ))
+  /*
+    Class       : BelongToMeshGroup_i
+    Description : Verify whether a mesh element is included into a mesh group
+  */
+  BelongToMeshGroup_i::BelongToMeshGroup_i()
   {
-    myBelongToMeshGroup->SetGroup( gr_i->GetGroupDS() );
-    myGroup->Register();
+    myBelongToMeshGroup = Controls::BelongToMeshGroupPtr( new Controls::BelongToMeshGroup() );
+    myFunctorPtr = myPredicatePtr = myBelongToMeshGroup;
   }
-}
 
-void BelongToMeshGroup_i::SetGroupID( const char* theID ) // IOR or StoreName
-{
-  myID = theID;
-  if ( strncmp( "IOR:", myID.c_str(), 4 ) == 0 ) // transient mode, no GUI
+  BelongToMeshGroup_i::~BelongToMeshGroup_i()
   {
-    CORBA::Object_var obj = SMESH_Gen_i::GetORB()->string_to_object( myID.c_str() );
-    SetGroup( SMESH::SMESH_GroupBase::_narrow( obj ));
+    SetGroup( SMESH::SMESH_GroupBase::_nil() );
   }
-  else if ( strncmp( "0:", myID.c_str(), 2 ) == 0 ) // transient mode + GUI
+
+  void BelongToMeshGroup_i::SetGroup( SMESH::SMESH_GroupBase_ptr theGroup )
   {
-    SALOMEDS::SObject_wrap aSObj = SMESH_Gen_i::getStudyServant()->FindObjectID( myID.c_str() );
-    if ( !aSObj->_is_nil() ) {
-      CORBA::Object_var obj = aSObj->GetObject();
-      SetGroup( SMESH::SMESH_GroupBase::_narrow( obj ));
+    if ( myGroup->_is_equivalent( theGroup ))
+      return;
+
+    if ( ! myGroup->_is_nil() )
+      myGroup->UnRegister();
+
+    myGroup = SMESH_GroupBase::_duplicate( theGroup );
+
+    myBelongToMeshGroup->SetGroup( 0 );
+    if ( SMESH_GroupBase_i* gr_i = SMESH::DownCast< SMESH_GroupBase_i* >( myGroup ))
+    {
+      myBelongToMeshGroup->SetGroup( gr_i->GetGroupDS() );
+      myGroup->Register();
     }
   }
-  else if ( !myID.empty() ) // persistent mode
+
+  void BelongToMeshGroup_i::SetGroupID( const char* theID ) // IOR or StoreName
   {
-    myBelongToMeshGroup->SetStoreName( myID );
+    myID = theID;
+    if ( strncmp( "IOR:", myID.c_str(), 4 ) == 0 ) // transient mode, no GUI
+    {
+      CORBA::Object_var obj = SMESH_Gen_i::GetORB()->string_to_object( myID.c_str() );
+      SetGroup( SMESH::SMESH_GroupBase::_narrow( obj ));
+    }
+    else if ( strncmp( "0:", myID.c_str(), 2 ) == 0 ) // transient mode + GUI
+    {
+      SALOMEDS::SObject_wrap aSObj = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindObjectID( myID.c_str() );
+      if ( !aSObj->_is_nil() ) {
+        CORBA::Object_var obj = aSObj->GetObject();
+        SetGroup( SMESH::SMESH_GroupBase::_narrow( obj ));
+      }
+    }
+    else if ( !myID.empty() ) // persistent mode
+    {
+      myBelongToMeshGroup->SetStoreName( myID );
+    }
   }
-}
 
-std::string BelongToMeshGroup_i::GetGroupID()
-{
-  if ( myGroup->_is_nil() )
-    SMESH::SMESH_GroupBase_var( GetGroup() );  // decref the returned pointer
+  std::string BelongToMeshGroup_i::GetGroupID()
+  {
+    if ( myGroup->_is_nil() )
+      SMESH::SMESH_GroupBase_var( GetGroup() );  // decref the returned pointer
 
-  if ( !myGroup->_is_nil() )
-    myID = SMESH_Gen_i::GetORB()->object_to_string( myGroup );
+    if ( !myGroup->_is_nil() )
+      myID = SMESH_Gen_i::GetORB()->object_to_string( myGroup );
 
-  return myID;
-}
+    return myID;
+  }
 
-SMESH::SMESH_GroupBase_ptr BelongToMeshGroup_i::GetGroup()
-{
-  if ( myGroup->_is_nil() && myBelongToMeshGroup->GetGroup() )
+  SMESH::SMESH_GroupBase_ptr BelongToMeshGroup_i::GetGroup()
   {
-    // search for a group in a current study
-    SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-    if ( StudyContext*  sc = aSMESHGen->GetStudyContext() )
+    if ( myGroup->_is_nil() && myBelongToMeshGroup->GetGroup() )
     {
-      int id = 1;
-      std::string ior;
-      while (true)
+      // search for a group in a current study
+      SMESH_Gen_i* aSMESHGen = SMESH_Gen_i::GetSMESHGen();
+      if ( StudyContext*  sc = aSMESHGen->GetStudyContext() )
       {
-        ior = sc->getIORbyId( id++ );
-        if ( ior.empty() ) break;
-        CORBA::Object_var obj = aSMESHGen->GetORB()->string_to_object( ior.c_str() );
-        if ( SMESH_GroupBase_i* g_i = SMESH::DownCast<SMESH_GroupBase_i*>( obj ))
-          if ( g_i->GetGroupDS() == myBelongToMeshGroup->GetGroup() )
-          {
-            SetGroup( g_i->_this() );
-            break;
-          }
+        int id = 1;
+        std::string ior;
+        while (true)
+        {
+          ior = sc->getIORbyId( id++ );
+          if ( ior.empty() ) break;
+          CORBA::Object_var obj = aSMESHGen->GetORB()->string_to_object( ior.c_str() );
+          if ( SMESH_GroupBase_i* g_i = SMESH::DownCast<SMESH_GroupBase_i*>( obj ))
+            if ( g_i->GetGroupDS() == myBelongToMeshGroup->GetGroup() )
+            {
+              SetGroup( g_i->_this() );
+              break;
+            }
+        }
       }
     }
+    return SMESH::SMESH_GroupBase::_duplicate( myGroup );
   }
-  return SMESH::SMESH_GroupBase::_duplicate( myGroup );
-}
 
-FunctorType BelongToMeshGroup_i::GetFunctorType()
-{
-  return SMESH::FT_BelongToMeshGroup;
-}
+  FunctorType BelongToMeshGroup_i::GetFunctorType()
+  {
+    return SMESH::FT_BelongToMeshGroup;
+  }
 
-/*
-  Class       : BelongToGeom_i
-  Description : Predicate for selection on geometrical support
-*/
-BelongToGeom_i::BelongToGeom_i()
-{
-  myBelongToGeomPtr.reset( new Controls::BelongToGeom() );
-  myFunctorPtr = myPredicatePtr = myBelongToGeomPtr;
-  myShapeName = 0;
-  myShapeID   = 0;
-}
+  /*
+    Class       : BelongToGeom_i
+    Description : Predicate for selection on geometrical support
+  */
+  BelongToGeom_i::BelongToGeom_i()
+  {
+    myBelongToGeomPtr.reset( new Controls::BelongToGeom() );
+    myFunctorPtr = myPredicatePtr = myBelongToGeomPtr;
+    myShapeName = 0;
+    myShapeID   = 0;
+  }
 
-BelongToGeom_i::~BelongToGeom_i()
-{
-  CORBA::string_free( myShapeName );
-  CORBA::string_free( myShapeID );
-}
+  BelongToGeom_i::~BelongToGeom_i()
+  {
+    CORBA::string_free( myShapeName );
+    CORBA::string_free( myShapeID );
+  }
 
-void BelongToGeom_i::SetGeom( GEOM::GEOM_Object_ptr theGeom )
-{
-  if ( theGeom->_is_nil() )
-    return;
-  TopoDS_Shape aLocShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( theGeom );
-  myBelongToGeomPtr->SetGeom( aLocShape );
-  TPythonDump()<<this<<".SetGeom("<<theGeom<<")";
-}
+  void BelongToGeom_i::SetGeom( GEOM::GEOM_Object_ptr theGeom )
+  {
+    if ( theGeom->_is_nil() )
+      return;
+    TopoDS_Shape aLocShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( theGeom );
+    myBelongToGeomPtr->SetGeom( aLocShape );
+    TPythonDump()<<this<<".SetGeom("<<theGeom<<")";
+  }
 
-void BelongToGeom_i::SetGeom( const TopoDS_Shape& theShape )
-{
-  myBelongToGeomPtr->SetGeom( theShape );
-}
+  void BelongToGeom_i::SetGeom( const TopoDS_Shape& theShape )
+  {
+    myBelongToGeomPtr->SetGeom( theShape );
+  }
 
-void BelongToGeom_i::SetElementType(ElementType theType)
-{
-  myBelongToGeomPtr->SetType(SMDSAbs_ElementType(theType));
-  TPythonDump()<<this<<".SetElementType("<<theType<<")";
-}
+  void BelongToGeom_i::SetElementType(ElementType theType)
+  {
+    myBelongToGeomPtr->SetType(SMDSAbs_ElementType(theType));
+    TPythonDump()<<this<<".SetElementType("<<theType<<")";
+  }
 
-FunctorType BelongToGeom_i::GetFunctorType()
-{
-  return SMESH::FT_BelongToGeom;
-}
+  FunctorType BelongToGeom_i::GetFunctorType()
+  {
+    return SMESH::FT_BelongToGeom;
+  }
 
-void BelongToGeom_i::SetShapeName( const char* theName )
-{
-  CORBA::string_free( myShapeName );
-  myShapeName = CORBA::string_dup( theName );
-  myBelongToGeomPtr->SetGeom( getShapeByName( myShapeName ) );
-  TPythonDump()<<this<<".SetShapeName('"<<theName<<"')";
-}
+  void BelongToGeom_i::SetShapeName( const char* theName )
+  {
+    CORBA::string_free( myShapeName );
+    myShapeName = CORBA::string_dup( theName );
+    myBelongToGeomPtr->SetGeom( getShapeByName( myShapeName ) );
+    TPythonDump()<<this<<".SetShapeName('"<<theName<<"')";
+  }
 
-void BelongToGeom_i::SetShape( const char* theID, const char* theName )
-{
-  CORBA::string_free( myShapeName );
-  CORBA::string_free( myShapeID );
-  myShapeName = CORBA::string_dup( theName );
-  myShapeID   = CORBA::string_dup( theID );
-  bool hasName = ( theName && theName[0] );
-  bool hasID   = ( theID   && theID[0] );
+  void BelongToGeom_i::SetShape( const char* theID, const char* theName )
+  {
+    CORBA::string_free( myShapeName );
+    CORBA::string_free( myShapeID );
+    myShapeName = CORBA::string_dup( theName );
+    myShapeID   = CORBA::string_dup( theID );
+    bool hasName = ( theName && theName[0] );
+    bool hasID   = ( theID   && theID[0] );
+
+    TopoDS_Shape S;
+    if ( hasName && hasID )
+    {
+      S = getShapeByID( myShapeID );
+      if ( S.IsNull() )
+        S = getShapeByName( myShapeName );
+    }
+    else
+    {
+      S = hasID ? getShapeByID( myShapeID ) : getShapeByName( myShapeName );
+    }
+    myBelongToGeomPtr->SetGeom( S );
+  }
 
-  TopoDS_Shape S;
-  if ( hasName && hasID )
+  char* BelongToGeom_i::GetShapeName()
   {
-    S = getShapeByID( myShapeID );
-    if ( S.IsNull() )
-      S = getShapeByName( myShapeName );
+    return CORBA::string_dup( myShapeName );
   }
-  else
+
+  char* BelongToGeom_i::GetShapeID()
   {
-    S = hasID ? getShapeByID( myShapeID ) : getShapeByName( myShapeName );
+    return CORBA::string_dup( myShapeID );
   }
-  myBelongToGeomPtr->SetGeom( S );
-}
 
-char* BelongToGeom_i::GetShapeName()
-{
-  return CORBA::string_dup( myShapeName );
-}
+  void BelongToGeom_i::SetTolerance( CORBA::Double theToler )
+  {
+    myBelongToGeomPtr->SetTolerance( theToler );
+    TPythonDump()<<this<<".SetTolerance("<<theToler<<")";
+  }
 
-char* BelongToGeom_i::GetShapeID()
-{
-  return CORBA::string_dup( myShapeID );
-}
+  CORBA::Double BelongToGeom_i::GetTolerance()
+  {
+    return myBelongToGeomPtr->GetTolerance();
+  }
 
-void BelongToGeom_i::SetTolerance( CORBA::Double theToler )
-{
-  myBelongToGeomPtr->SetTolerance( theToler );
-  TPythonDump()<<this<<".SetTolerance("<<theToler<<")";
-}
+  /*
+    Class       : BelongToSurface_i
+    Description : Predicate for selection on geometrical support
+  */
+  BelongToSurface_i::BelongToSurface_i( const Handle(Standard_Type)& theSurfaceType )
+  {
+    myElementsOnSurfacePtr.reset( new Controls::ElementsOnSurface() );
+    myFunctorPtr = myPredicatePtr = myElementsOnSurfacePtr;
+    myShapeName = 0;
+    myShapeID   = 0;
+    mySurfaceType = theSurfaceType;
+  }
 
-CORBA::Double BelongToGeom_i::GetTolerance()
-{
-  return myBelongToGeomPtr->GetTolerance();
-}
+  BelongToSurface_i::~BelongToSurface_i()
+  {
+    CORBA::string_free( myShapeName );
+    CORBA::string_free( myShapeID );
+  }
 
-/*
-  Class       : BelongToSurface_i
-  Description : Predicate for selection on geometrical support
-*/
-BelongToSurface_i::BelongToSurface_i( const Handle(Standard_Type)& theSurfaceType )
-{
-  myElementsOnSurfacePtr.reset( new Controls::ElementsOnSurface() );
-  myFunctorPtr = myPredicatePtr = myElementsOnSurfacePtr;
-  myShapeName = 0;
-  myShapeID   = 0;
-  mySurfaceType = theSurfaceType;
-}
+  void BelongToSurface_i::SetSurface( GEOM::GEOM_Object_ptr theGeom, ElementType theType )
+  {
+    if ( theGeom->_is_nil() )
+      return;
+    TopoDS_Shape aLocShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( theGeom );
 
-BelongToSurface_i::~BelongToSurface_i()
-{
-  CORBA::string_free( myShapeName );
-  CORBA::string_free( myShapeID );
-}
+    if ( aLocShape.ShapeType() == TopAbs_FACE )
+    {
+      Handle(Geom_Surface) aSurf = BRep_Tool::Surface( TopoDS::Face( aLocShape ) );
+      if ( !aSurf.IsNull() && aSurf->DynamicType() == mySurfaceType )
+      {
+        myElementsOnSurfacePtr->SetSurface( aLocShape, (SMDSAbs_ElementType)theType );
+        return;
+      }
+    }
 
-void BelongToSurface_i::SetSurface( GEOM::GEOM_Object_ptr theGeom, ElementType theType )
-{
-  if ( theGeom->_is_nil() )
-    return;
-  TopoDS_Shape aLocShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( theGeom );
+    myElementsOnSurfacePtr->SetSurface( TopoDS_Shape(), (SMDSAbs_ElementType)theType );
+  }
+
+  void BelongToSurface_i::SetShapeName( const char* theName, ElementType theType )
+  {
+    CORBA::string_free( myShapeName );
+    myShapeName = CORBA::string_dup( theName );
+    myElementsOnSurfacePtr->SetSurface( getShapeByName( myShapeName ), (SMDSAbs_ElementType)theType );
+    TPythonDump()<<this<<".SetShapeName('"<<theName<<"',"<<theType<<")";
+  }
 
-  if ( aLocShape.ShapeType() == TopAbs_FACE )
+  void BelongToSurface_i::SetShape( const char* theID,  const char* theName, ElementType theType )
   {
-    Handle(Geom_Surface) aSurf = BRep_Tool::Surface( TopoDS::Face( aLocShape ) );
-    if ( !aSurf.IsNull() && aSurf->DynamicType() == mySurfaceType )
+    CORBA::string_free( myShapeName );
+    CORBA::string_free( myShapeID );
+    myShapeName = CORBA::string_dup( theName );
+    myShapeID   = CORBA::string_dup( theID );
+    bool hasName = ( theName && theName[0] );
+    bool hasID   = ( theID   && theID[0] );
+
+    TopoDS_Shape S;
+    if ( hasName && hasID )
     {
-      myElementsOnSurfacePtr->SetSurface( aLocShape, (SMDSAbs_ElementType)theType );
-      return;
+      S = getShapeByID( myShapeID );
+      if ( S.IsNull() )
+        S = getShapeByName( myShapeName );
+    }
+    else
+    {
+      S = hasID ? getShapeByID( myShapeID ) : getShapeByName( myShapeName );
     }
+    myElementsOnSurfacePtr->SetSurface( S, (SMDSAbs_ElementType)theType );
   }
 
-  myElementsOnSurfacePtr->SetSurface( TopoDS_Shape(), (SMDSAbs_ElementType)theType );
-}
+  char* BelongToSurface_i::GetShapeName()
+  {
+    return CORBA::string_dup( myShapeName );
+  }
 
-void BelongToSurface_i::SetShapeName( const char* theName, ElementType theType )
-{
-  CORBA::string_free( myShapeName );
-  myShapeName = CORBA::string_dup( theName );
-  myElementsOnSurfacePtr->SetSurface( getShapeByName( myShapeName ), (SMDSAbs_ElementType)theType );
-  TPythonDump()<<this<<".SetShapeName('"<<theName<<"',"<<theType<<")";
-}
+  char* BelongToSurface_i::GetShapeID()
+  {
+    return CORBA::string_dup( myShapeID );
+  }
 
-void BelongToSurface_i::SetShape( const char* theID,  const char* theName, ElementType theType )
-{
-  CORBA::string_free( myShapeName );
-  CORBA::string_free( myShapeID );
-  myShapeName = CORBA::string_dup( theName );
-  myShapeID   = CORBA::string_dup( theID );
-  bool hasName = ( theName && theName[0] );
-  bool hasID   = ( theID   && theID[0] );
+  void BelongToSurface_i::SetTolerance( CORBA::Double theToler )
+  {
+    myElementsOnSurfacePtr->SetTolerance( theToler );
+    TPythonDump()<<this<<".SetTolerance("<<theToler<<")";
+  }
 
-  TopoDS_Shape S;
-  if ( hasName && hasID )
+  CORBA::Double BelongToSurface_i::GetTolerance()
   {
-    S = getShapeByID( myShapeID );
-    if ( S.IsNull() )
-      S = getShapeByName( myShapeName );
+    return myElementsOnSurfacePtr->GetTolerance();
   }
-  else
+
+  void BelongToSurface_i::SetUseBoundaries( CORBA::Boolean theUseBndRestrictions )
   {
-    S = hasID ? getShapeByID( myShapeID ) : getShapeByName( myShapeName );
+    myElementsOnSurfacePtr->SetUseBoundaries( theUseBndRestrictions );
+    TPythonDump()<<this<<".SetUseBoundaries( " << theUseBndRestrictions << " )";
   }
-  myElementsOnSurfacePtr->SetSurface( S, (SMDSAbs_ElementType)theType );
-}
 
-char* BelongToSurface_i::GetShapeName()
-{
-  return CORBA::string_dup( myShapeName );
-}
+  CORBA::Boolean BelongToSurface_i::GetUseBoundaries()
+  {
+    return myElementsOnSurfacePtr->GetUseBoundaries();
+  }
 
-char* BelongToSurface_i::GetShapeID()
-{
-  return CORBA::string_dup( myShapeID );
-}
 
-void BelongToSurface_i::SetTolerance( CORBA::Double theToler )
-{
-  myElementsOnSurfacePtr->SetTolerance( theToler );
-  TPythonDump()<<this<<".SetTolerance("<<theToler<<")";
-}
+  /*
+    Class       : BelongToPlane_i
+    Description : Verify whether mesh element lie in pointed Geom planar object
+  */
 
-CORBA::Double BelongToSurface_i::GetTolerance()
-{
-  return myElementsOnSurfacePtr->GetTolerance();
-}
+  BelongToPlane_i::BelongToPlane_i()
+  : BelongToSurface_i( STANDARD_TYPE( Geom_Plane ) )
+  {
+  }
 
-void BelongToSurface_i::SetUseBoundaries( CORBA::Boolean theUseBndRestrictions )
-{
-  myElementsOnSurfacePtr->SetUseBoundaries( theUseBndRestrictions );
-  TPythonDump()<<this<<".SetUseBoundaries( " << theUseBndRestrictions << " )";
-}
+  void BelongToPlane_i::SetPlane( GEOM::GEOM_Object_ptr theGeom, ElementType theType )
+  {
+    BelongToSurface_i::SetSurface( theGeom, theType );
+    TPythonDump()<<this<<".SetPlane("<<theGeom<<","<<theType<<")";
+  }
 
-CORBA::Boolean BelongToSurface_i::GetUseBoundaries()
-{
-  return myElementsOnSurfacePtr->GetUseBoundaries();
-}
+  FunctorType BelongToPlane_i::GetFunctorType()
+  {
+    return FT_BelongToPlane;
+  }
 
+  /*
+    Class       : BelongToCylinder_i
+    Description : Verify whether mesh element lie in pointed Geom planar object
+  */
 
-/*
-  Class       : BelongToPlane_i
-  Description : Verify whether mesh element lie in pointed Geom planar object
-*/
+  BelongToCylinder_i::BelongToCylinder_i()
+  : BelongToSurface_i( STANDARD_TYPE( Geom_CylindricalSurface ) )
+  {
+  }
 
-BelongToPlane_i::BelongToPlane_i()
-: BelongToSurface_i( STANDARD_TYPE( Geom_Plane ) )
-{
-}
+  void BelongToCylinder_i::SetCylinder( GEOM::GEOM_Object_ptr theGeom, ElementType theType )
+  {
+    BelongToSurface_i::SetSurface( theGeom, theType );
+    TPythonDump()<<this<<".SetCylinder("<<theGeom<<","<<theType<<")";
+  }
 
-void BelongToPlane_i::SetPlane( GEOM::GEOM_Object_ptr theGeom, ElementType theType )
-{
-  BelongToSurface_i::SetSurface( theGeom, theType );
-  TPythonDump()<<this<<".SetPlane("<<theGeom<<","<<theType<<")";
-}
+  FunctorType BelongToCylinder_i::GetFunctorType()
+  {
+    return FT_BelongToCylinder;
+  }
 
-FunctorType BelongToPlane_i::GetFunctorType()
-{
-  return FT_BelongToPlane;
-}
+  /*
+    Class       : BelongToGenSurface_i
+    Description : Verify whether mesh element lie in pointed Geom planar object
+  */
 
-/*
-  Class       : BelongToCylinder_i
-  Description : Verify whether mesh element lie in pointed Geom planar object
-*/
+  BelongToGenSurface_i::BelongToGenSurface_i()
+  : BelongToSurface_i( STANDARD_TYPE( Geom_CylindricalSurface ) )
+  {
+  }
 
-BelongToCylinder_i::BelongToCylinder_i()
-: BelongToSurface_i( STANDARD_TYPE( Geom_CylindricalSurface ) )
-{
-}
+  void BelongToGenSurface_i::SetSurface( GEOM::GEOM_Object_ptr theGeom, ElementType theType )
+  {
+    if ( theGeom->_is_nil() )
+      return;
+    TopoDS_Shape aLocShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( theGeom );
+    if ( !aLocShape.IsNull() && aLocShape.ShapeType() != TopAbs_FACE )
+      aLocShape.Nullify();
+  
+    BelongToSurface_i::myElementsOnSurfacePtr->SetSurface( aLocShape, (SMDSAbs_ElementType)theType );
+    TPythonDump()<<this<<".SetGenSurface("<<theGeom<<","<<theType<<")";
+  }
 
-void BelongToCylinder_i::SetCylinder( GEOM::GEOM_Object_ptr theGeom, ElementType theType )
-{
-  BelongToSurface_i::SetSurface( theGeom, theType );
-  TPythonDump()<<this<<".SetCylinder("<<theGeom<<","<<theType<<")";
-}
+  FunctorType BelongToGenSurface_i::GetFunctorType()
+  {
+    return FT_BelongToGenSurface;
+  }
 
-FunctorType BelongToCylinder_i::GetFunctorType()
-{
-  return FT_BelongToCylinder;
-}
+  /*
+    Class       : LyingOnGeom_i
+    Description : Predicate for selection on geometrical support
+  */
+  LyingOnGeom_i::LyingOnGeom_i()
+  {
+    myLyingOnGeomPtr.reset( new Controls::LyingOnGeom() );
+    myFunctorPtr = myPredicatePtr = myLyingOnGeomPtr;
+    myShapeName = 0;
+    myShapeID = 0;
+  }
 
-/*
-  Class       : BelongToGenSurface_i
-  Description : Verify whether mesh element lie in pointed Geom planar object
-*/
+  LyingOnGeom_i::~LyingOnGeom_i()
+  {
+    CORBA::string_free( myShapeName );
+    CORBA::string_free( myShapeID );
+  }
 
-BelongToGenSurface_i::BelongToGenSurface_i()
-: BelongToSurface_i( STANDARD_TYPE( Geom_CylindricalSurface ) )
-{
-}
+  void LyingOnGeom_i::SetGeom( GEOM::GEOM_Object_ptr theGeom )
+  {
+    if ( theGeom->_is_nil() )
+      return;
+    TopoDS_Shape aLocShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( theGeom );
+    myLyingOnGeomPtr->SetGeom( aLocShape );
+    TPythonDump()<<this<<".SetGeom("<<theGeom<<")";
+  }
 
-void BelongToGenSurface_i::SetSurface( GEOM::GEOM_Object_ptr theGeom, ElementType theType )
-{
-  if ( theGeom->_is_nil() )
-    return;
-  TopoDS_Shape aLocShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( theGeom );
-  if ( !aLocShape.IsNull() && aLocShape.ShapeType() != TopAbs_FACE )
-    aLocShape.Nullify();
-  
-  BelongToSurface_i::myElementsOnSurfacePtr->SetSurface( aLocShape, (SMDSAbs_ElementType)theType );
-  TPythonDump()<<this<<".SetGenSurface("<<theGeom<<","<<theType<<")";
-}
+  void LyingOnGeom_i::SetGeom( const TopoDS_Shape& theShape )
+  {
+    myLyingOnGeomPtr->SetGeom( theShape );
+  }
 
-FunctorType BelongToGenSurface_i::GetFunctorType()
-{
-  return FT_BelongToGenSurface;
-}
+  void LyingOnGeom_i::SetElementType(ElementType theType){
+    myLyingOnGeomPtr->SetType(SMDSAbs_ElementType(theType));
+    TPythonDump()<<this<<".SetElementType("<<theType<<")";
+  }
 
-/*
-  Class       : LyingOnGeom_i
-  Description : Predicate for selection on geometrical support
-*/
-LyingOnGeom_i::LyingOnGeom_i()
-{
-  myLyingOnGeomPtr.reset( new Controls::LyingOnGeom() );
-  myFunctorPtr = myPredicatePtr = myLyingOnGeomPtr;
-  myShapeName = 0;
-  myShapeID = 0;
-}
+  FunctorType LyingOnGeom_i::GetFunctorType()
+  {
+    return SMESH::FT_LyingOnGeom;
+  }
 
-LyingOnGeom_i::~LyingOnGeom_i()
-{
-  CORBA::string_free( myShapeName );
-  CORBA::string_free( myShapeID );
-}
+  void LyingOnGeom_i::SetShapeName( const char* theName )
+  {
+    CORBA::string_free( myShapeName );
+    myShapeName = CORBA::string_dup( theName );
+    myLyingOnGeomPtr->SetGeom( getShapeByName( myShapeName ) );
+    TPythonDump()<<this<<".SetShapeName('"<<theName<<"')";
+  }
 
-void LyingOnGeom_i::SetGeom( GEOM::GEOM_Object_ptr theGeom )
-{
-  if ( theGeom->_is_nil() )
-    return;
-  TopoDS_Shape aLocShape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( theGeom );
-  myLyingOnGeomPtr->SetGeom( aLocShape );
-  TPythonDump()<<this<<".SetGeom("<<theGeom<<")";
-}
+  void LyingOnGeom_i::SetShape( const char* theID, const char* theName )
+  {
+    CORBA::string_free( myShapeName );
+    CORBA::string_free( myShapeID   );
+    myShapeName = CORBA::string_dup( theName );
+    myShapeID   = CORBA::string_dup( theID   );
+    bool hasName = ( theName && theName[0] );
+    bool hasID   = ( theID   && theID[0]   );
+
+    TopoDS_Shape S;
+    if ( hasName && hasID )
+    {
+      S = getShapeByID( myShapeID );
+      if ( S.IsNull() )
+        S = getShapeByName( myShapeName );
+    }
+    else
+    {
+      S = hasID ? getShapeByID( myShapeID ) : getShapeByName( myShapeName );
+    }
+    myLyingOnGeomPtr->SetGeom( S );
+  }
 
-void LyingOnGeom_i::SetGeom( const TopoDS_Shape& theShape )
-{
-  myLyingOnGeomPtr->SetGeom( theShape );
-}
+  char* LyingOnGeom_i::GetShapeName()
+  {
+    return CORBA::string_dup( myShapeName );
+  }
 
-void LyingOnGeom_i::SetElementType(ElementType theType){
-  myLyingOnGeomPtr->SetType(SMDSAbs_ElementType(theType));
-  TPythonDump()<<this<<".SetElementType("<<theType<<")";
-}
+  char* LyingOnGeom_i::GetShapeID()
+  {
+    return CORBA::string_dup( myShapeID );
+  }
 
-FunctorType LyingOnGeom_i::GetFunctorType()
-{
-  return SMESH::FT_LyingOnGeom;
-}
+  void LyingOnGeom_i::SetTolerance( CORBA::Double theToler )
+  {
+    myLyingOnGeomPtr->SetTolerance( theToler );
+    TPythonDump()<<this<<".SetTolerance("<<theToler<<")";
+  }
 
-void LyingOnGeom_i::SetShapeName( const char* theName )
-{
-  CORBA::string_free( myShapeName );
-  myShapeName = CORBA::string_dup( theName );
-  myLyingOnGeomPtr->SetGeom( getShapeByName( myShapeName ) );
-  TPythonDump()<<this<<".SetShapeName('"<<theName<<"')";
-}
+  CORBA::Double LyingOnGeom_i::GetTolerance()
+  {
+    return myLyingOnGeomPtr->GetTolerance();
+  }
 
-void LyingOnGeom_i::SetShape( const char* theID, const char* theName )
-{
-  CORBA::string_free( myShapeName );
-  CORBA::string_free( myShapeID   );
-  myShapeName = CORBA::string_dup( theName );
-  myShapeID   = CORBA::string_dup( theID   );
-  bool hasName = ( theName && theName[0] );
-  bool hasID   = ( theID   && theID[0]   );
+  /*
+    Class       : FreeBorders_i
+    Description : Predicate for free borders
+  */
+  FreeBorders_i::FreeBorders_i()
+  {
+    myPredicatePtr.reset(new Controls::FreeBorders());
+    myFunctorPtr = myPredicatePtr;
+  }
 
-  TopoDS_Shape S;
-  if ( hasName && hasID )
+  FunctorType FreeBorders_i::GetFunctorType()
   {
-    S = getShapeByID( myShapeID );
-    if ( S.IsNull() )
-      S = getShapeByName( myShapeName );
+    return SMESH::FT_FreeBorders;
   }
-  else
+
+  /*
+    Class       : FreeEdges_i
+    Description : Predicate for free borders
+  */
+  FreeEdges_i::FreeEdges_i()
+  : myFreeEdgesPtr( new Controls::FreeEdges() )
   {
-    S = hasID ? getShapeByID( myShapeID ) : getShapeByName( myShapeName );
+    myFunctorPtr = myPredicatePtr = myFreeEdgesPtr;
   }
-  myLyingOnGeomPtr->SetGeom( S );
-}
 
-char* LyingOnGeom_i::GetShapeName()
-{
-  return CORBA::string_dup( myShapeName );
-}
+  SMESH::FreeEdges::Borders* FreeEdges_i::GetBorders()
+  {
+    SMESH::Controls::FreeEdges::TBorders aBorders;
+    myFreeEdgesPtr->GetBoreders( aBorders );
 
-char* LyingOnGeom_i::GetShapeID()
-{
-  return CORBA::string_dup( myShapeID );
-}
+    long i = 0, iEnd = aBorders.size();
 
-void LyingOnGeom_i::SetTolerance( CORBA::Double theToler )
-{
-  myLyingOnGeomPtr->SetTolerance( theToler );
-  TPythonDump()<<this<<".SetTolerance("<<theToler<<")";
-}
+    SMESH::FreeEdges::Borders_var aResult = new SMESH::FreeEdges::Borders;
+    aResult->length(iEnd);
 
-CORBA::Double LyingOnGeom_i::GetTolerance()
-{
-  return myLyingOnGeomPtr->GetTolerance();
-}
+    SMESH::Controls::FreeEdges::TBorders::const_iterator anIter;
+    for ( anIter = aBorders.begin() ; anIter != aBorders.end(); anIter++, i++ )
+    {
+      const SMESH::Controls::FreeEdges::Border&  aBord = *anIter;
+      SMESH::FreeEdges::Border &aBorder = aResult[ i ];
 
-/*
-  Class       : FreeBorders_i
-  Description : Predicate for free borders
-*/
-FreeBorders_i::FreeBorders_i()
-{
-  myPredicatePtr.reset(new Controls::FreeBorders());
-  myFunctorPtr = myPredicatePtr;
-}
+      aBorder.myElemId = aBord.myElemId;
+      aBorder.myPnt1 = aBord.myPntId[ 0 ];
+      aBorder.myPnt2 = aBord.myPntId[ 1 ];
+    }
+    return aResult._retn();
+  }
 
-FunctorType FreeBorders_i::GetFunctorType()
-{
-  return SMESH::FT_FreeBorders;
-}
+  FunctorType FreeEdges_i::GetFunctorType()
+  {
+    return SMESH::FT_FreeEdges;
+  }
 
-/*
-  Class       : FreeEdges_i
-  Description : Predicate for free borders
-*/
-FreeEdges_i::FreeEdges_i()
-: myFreeEdgesPtr( new Controls::FreeEdges() )
-{
-  myFunctorPtr = myPredicatePtr = myFreeEdgesPtr;
-}
+  /*
+    Class       : FreeFaces_i
+    Description : Predicate for free faces
+  */
+  FreeFaces_i::FreeFaces_i()
+  {
+    myPredicatePtr.reset(new Controls::FreeFaces());
+    myFunctorPtr = myPredicatePtr;
+  }
 
-SMESH::FreeEdges::Borders* FreeEdges_i::GetBorders()
-{
-  SMESH::Controls::FreeEdges::TBorders aBorders;
-  myFreeEdgesPtr->GetBoreders( aBorders );
+  FunctorType FreeFaces_i::GetFunctorType()
+  {
+    return SMESH::FT_FreeFaces;
+  }
 
-  long i = 0, iEnd = aBorders.size();
+  /*
+    Class       : FreeNodes_i
+    Description : Predicate for free nodes
+  */
+  FreeNodes_i::FreeNodes_i()
+  {
+    myPredicatePtr.reset(new Controls::FreeNodes());
+    myFunctorPtr = myPredicatePtr;
+  }
 
-  SMESH::FreeEdges::Borders_var aResult = new SMESH::FreeEdges::Borders;
-  aResult->length(iEnd);
+  FunctorType FreeNodes_i::GetFunctorType()
+  {
+    return SMESH::FT_FreeNodes;
+  }
 
-  SMESH::Controls::FreeEdges::TBorders::const_iterator anIter;
-  for ( anIter = aBorders.begin() ; anIter != aBorders.end(); anIter++, i++ )
+  /*
+    Class       : EqualNodes_i
+    Description : Predicate for Equal nodes
+  */
+  EqualNodes_i::EqualNodes_i()
   {
-    const SMESH::Controls::FreeEdges::Border&  aBord = *anIter;
-    SMESH::FreeEdges::Border &aBorder = aResult[ i ];
+    myCoincidentNodesPtr.reset(new Controls::CoincidentNodes());
+    myFunctorPtr = myPredicatePtr = myCoincidentNodesPtr;
+  }
 
-    aBorder.myElemId = aBord.myElemId;
-    aBorder.myPnt1 = aBord.myPntId[ 0 ];
-    aBorder.myPnt2 = aBord.myPntId[ 1 ];
+  FunctorType EqualNodes_i::GetFunctorType()
+  {
+    return SMESH::FT_EqualNodes;
   }
-  return aResult._retn();
-}
 
-FunctorType FreeEdges_i::GetFunctorType()
-{
-  return SMESH::FT_FreeEdges;
-}
+  void EqualNodes_i::SetTolerance( double tol )
+  {
+    myCoincidentNodesPtr->SetTolerance( tol );
+  }
 
-/*
-  Class       : FreeFaces_i
-  Description : Predicate for free faces
-*/
-FreeFaces_i::FreeFaces_i()
-{
-  myPredicatePtr.reset(new Controls::FreeFaces());
-  myFunctorPtr = myPredicatePtr;
-}
+  double EqualNodes_i::GetTolerance()
+  {
+    return myCoincidentNodesPtr->GetTolerance();
+  }
 
-FunctorType FreeFaces_i::GetFunctorType()
-{
-  return SMESH::FT_FreeFaces;
-}
+  /*
+    Class       : EqualEdges_i
+    Description : Predicate for Equal Edges
+  */
+  EqualEdges_i::EqualEdges_i()
+  {
+    myPredicatePtr.reset(new Controls::CoincidentElements1D());
+    myFunctorPtr = myPredicatePtr;
+  }
 
-/*
-  Class       : FreeNodes_i
-  Description : Predicate for free nodes
-*/
-FreeNodes_i::FreeNodes_i()
-{
-  myPredicatePtr.reset(new Controls::FreeNodes());
-  myFunctorPtr = myPredicatePtr;
-}
+  FunctorType EqualEdges_i::GetFunctorType()
+  {
+    return SMESH::FT_EqualEdges;
+  }
 
-FunctorType FreeNodes_i::GetFunctorType()
-{
-  return SMESH::FT_FreeNodes;
-}
+  /*
+    Class       : EqualFaces_i
+    Description : Predicate for Equal Faces
+  */
+  EqualFaces_i::EqualFaces_i()
+  {
+    myPredicatePtr.reset(new Controls::CoincidentElements2D());
+    myFunctorPtr = myPredicatePtr;
+  }
 
-/*
-  Class       : EqualNodes_i
-  Description : Predicate for Equal nodes
-*/
-EqualNodes_i::EqualNodes_i()
-{
-  myCoincidentNodesPtr.reset(new Controls::CoincidentNodes());
-  myFunctorPtr = myPredicatePtr = myCoincidentNodesPtr;
-}
+  FunctorType EqualFaces_i::GetFunctorType()
+  {
+    return SMESH::FT_EqualFaces;
+  }
 
-FunctorType EqualNodes_i::GetFunctorType()
-{
-  return SMESH::FT_EqualNodes;
-}
+  /*
+    Class       : EqualVolumes_i
+    Description : Predicate for Equal Volumes
+  */
+  EqualVolumes_i::EqualVolumes_i()
+  {
+    myPredicatePtr.reset(new Controls::CoincidentElements3D());
+    myFunctorPtr = myPredicatePtr;
+  }
 
-void EqualNodes_i::SetTolerance( double tol )
-{
-  myCoincidentNodesPtr->SetTolerance( tol );
-}
+  FunctorType EqualVolumes_i::GetFunctorType()
+  {
+    return SMESH::FT_EqualVolumes;
+  }
 
-double EqualNodes_i::GetTolerance()
-{
-  return myCoincidentNodesPtr->GetTolerance();
-}
 
-/*
-  Class       : EqualEdges_i
-  Description : Predicate for Equal Edges
-*/
-EqualEdges_i::EqualEdges_i()
-{
-  myPredicatePtr.reset(new Controls::CoincidentElements1D());
-  myFunctorPtr = myPredicatePtr;
-}
+  /*
+    Class       : RangeOfIds_i
+    Description : Predicate for Range of Ids.
+                  Range may be specified with two ways.
+                  1. Using AddToRange method
+                  2. With SetRangeStr method. Parameter of this method is a string
+                     like as "1,2,3,50-60,63,67,70-"
+  */
 
-FunctorType EqualEdges_i::GetFunctorType()
-{
-  return SMESH::FT_EqualEdges;
-}
+  RangeOfIds_i::RangeOfIds_i()
+  {
+    myRangeOfIdsPtr.reset( new Controls::RangeOfIds() );
+    myFunctorPtr = myPredicatePtr = myRangeOfIdsPtr;
+  }
 
-/*
-  Class       : EqualFaces_i
-  Description : Predicate for Equal Faces
-*/
-EqualFaces_i::EqualFaces_i()
-{
-  myPredicatePtr.reset(new Controls::CoincidentElements2D());
-  myFunctorPtr = myPredicatePtr;
-}
+  void RangeOfIds_i::SetRange( const SMESH::smIdType_array& theIds )
+  {
+    SMESH::smIdType iEnd = theIds.length();
+    for ( SMESH::smIdType i = 0; i < iEnd; i++ )
+      myRangeOfIdsPtr->AddToRange( theIds[ i ] );
+    TPythonDump()<<this<<".SetRange("<<theIds<<")";
+  }
 
-FunctorType EqualFaces_i::GetFunctorType()
-{
-  return SMESH::FT_EqualFaces;
-}
+  CORBA::Boolean RangeOfIds_i::SetRangeStr( const char* theRange )
+  {
+    TPythonDump()<<this<<".SetRangeStr('"<<theRange<<"')";
+    return myRangeOfIdsPtr->SetRangeStr(
+      TCollection_AsciiString( (Standard_CString)theRange ) );
+  }
 
-/*
-  Class       : EqualVolumes_i
-  Description : Predicate for Equal Volumes
-*/
-EqualVolumes_i::EqualVolumes_i()
-{
-  myPredicatePtr.reset(new Controls::CoincidentElements3D());
-  myFunctorPtr = myPredicatePtr;
-}
+  char* RangeOfIds_i::GetRangeStr()
+  {
+    TCollection_AsciiString aStr;
+    myRangeOfIdsPtr->GetRangeStr( aStr );
+    return CORBA::string_dup( aStr.ToCString() );
+  }
 
-FunctorType EqualVolumes_i::GetFunctorType()
-{
-  return SMESH::FT_EqualVolumes;
-}
+  void RangeOfIds_i::SetElementType( ElementType theType )
+  {
+    myRangeOfIdsPtr->SetType( SMDSAbs_ElementType( theType ) );
+    TPythonDump()<<this<<".SetElementType("<<theType<<")";
+  }
 
+  FunctorType RangeOfIds_i::GetFunctorType()
+  {
+    return SMESH::FT_RangeOfIds;
+  }
 
-/*
-  Class       : RangeOfIds_i
-  Description : Predicate for Range of Ids.
-                Range may be specified with two ways.
-                1. Using AddToRange method
-                2. With SetRangeStr method. Parameter of this method is a string
-                   like as "1,2,3,50-60,63,67,70-"
-*/
+  /*
+    Class       : LinearOrQuadratic_i
+    Description : Predicate to verify whether a mesh element is linear
+  */
+  LinearOrQuadratic_i::LinearOrQuadratic_i()
+  {
+    myLinearOrQuadraticPtr.reset(new Controls::LinearOrQuadratic());
+    myFunctorPtr = myPredicatePtr = myLinearOrQuadraticPtr;
+  }
 
-RangeOfIds_i::RangeOfIds_i()
-{
-  myRangeOfIdsPtr.reset( new Controls::RangeOfIds() );
-  myFunctorPtr = myPredicatePtr = myRangeOfIdsPtr;
-}
+  void LinearOrQuadratic_i::SetElementType(ElementType theType)
+  {
+    myLinearOrQuadraticPtr->SetType(SMDSAbs_ElementType(theType));
+    TPythonDump()<<this<<".SetElementType("<<theType<<")";
+  }
 
-void RangeOfIds_i::SetRange( const SMESH::long_array& theIds )
-{
-  CORBA::Long iEnd = theIds.length();
-  for ( CORBA::Long i = 0; i < iEnd; i++ )
-    myRangeOfIdsPtr->AddToRange( theIds[ i ] );
-  TPythonDump()<<this<<".SetRange("<<theIds<<")";
-}
+  FunctorType LinearOrQuadratic_i::GetFunctorType()
+  {
+    return SMESH::FT_LinearOrQuadratic;
+  }
 
-CORBA::Boolean RangeOfIds_i::SetRangeStr( const char* theRange )
-{
-  TPythonDump()<<this<<".SetRangeStr('"<<theRange<<"')";
-  return myRangeOfIdsPtr->SetRangeStr(
-    TCollection_AsciiString( (Standard_CString)theRange ) );
-}
+  /*
+    Class       : GroupColor_i
+    Description : Functor for check color of group to which mesh element belongs to
+  */
+  GroupColor_i::GroupColor_i()
+  {
+    myGroupColorPtr.reset(new Controls::GroupColor());
+    myFunctorPtr = myPredicatePtr = myGroupColorPtr;
+  }
 
-char* RangeOfIds_i::GetRangeStr()
-{
-  TCollection_AsciiString aStr;
-  myRangeOfIdsPtr->GetRangeStr( aStr );
-  return CORBA::string_dup( aStr.ToCString() );
-}
+  FunctorType GroupColor_i::GetFunctorType()
+  {
+    return SMESH::FT_GroupColor;
+  }
 
-void RangeOfIds_i::SetElementType( ElementType theType )
-{
-  myRangeOfIdsPtr->SetType( SMDSAbs_ElementType( theType ) );
-  TPythonDump()<<this<<".SetElementType("<<theType<<")";
-}
+  void GroupColor_i::SetColorStr( const char* theColor )
+  {
+    myGroupColorPtr->SetColorStr(
+      TCollection_AsciiString( (Standard_CString)theColor ) );
+    TPythonDump()<<this<<".SetColorStr('"<<theColor<<"')";
+  }
 
-FunctorType RangeOfIds_i::GetFunctorType()
-{
-  return SMESH::FT_RangeOfIds;
-}
+  char* GroupColor_i::GetColorStr()
+  {
+    TCollection_AsciiString aStr;
+    myGroupColorPtr->GetColorStr( aStr );
+    return CORBA::string_dup( aStr.ToCString() );
+  }
 
-/*
-  Class       : LinearOrQuadratic_i
-  Description : Predicate to verify whether a mesh element is linear
-*/
-LinearOrQuadratic_i::LinearOrQuadratic_i()
-{
-  myLinearOrQuadraticPtr.reset(new Controls::LinearOrQuadratic());
-  myFunctorPtr = myPredicatePtr = myLinearOrQuadraticPtr;
-}
+  void GroupColor_i::SetElementType(ElementType theType)
+  {
+    myGroupColorPtr->SetType(SMDSAbs_ElementType(theType));
+    TPythonDump()<<this<<".SetElementType("<<theType<<")";
+  }
 
-void LinearOrQuadratic_i::SetElementType(ElementType theType)
-{
-  myLinearOrQuadraticPtr->SetType(SMDSAbs_ElementType(theType));
-  TPythonDump()<<this<<".SetElementType("<<theType<<")";
-}
+  /*
+    Class       : ElemGeomType_i
+    Description : Predicate check is element has indicated geometry type
+  */
+  ElemGeomType_i::ElemGeomType_i()
+  {
+    myElemGeomTypePtr.reset(new Controls::ElemGeomType());
+    myFunctorPtr = myPredicatePtr = myElemGeomTypePtr;
+  }
 
-FunctorType LinearOrQuadratic_i::GetFunctorType()
-{
-  return SMESH::FT_LinearOrQuadratic;
-}
+  void ElemGeomType_i::SetElementType(ElementType theType)
+  {
+    myElemGeomTypePtr->SetType(SMDSAbs_ElementType(theType));
+    TPythonDump()<<this<<".SetElementType("<<theType<<")";
+  }
 
-/*
-  Class       : GroupColor_i
-  Description : Functor for check color of group to which mesh element belongs to
-*/
-GroupColor_i::GroupColor_i()
-{
-  myGroupColorPtr.reset(new Controls::GroupColor());
-  myFunctorPtr = myPredicatePtr = myGroupColorPtr;
-}
+  void ElemGeomType_i::SetGeometryType(GeometryType theType)
+  {
+    myElemGeomTypePtr->SetGeomType(SMDSAbs_GeometryType(theType));
+    TPythonDump()<<this<<".SetGeometryType("<<theType<<")";
+  }
 
-FunctorType GroupColor_i::GetFunctorType()
-{
-  return SMESH::FT_GroupColor;
-}
+  GeometryType ElemGeomType_i::GetGeometryType() const
+  {
+    return (GeometryType)myElemGeomTypePtr->GetGeomType();
+  }
 
-void GroupColor_i::SetColorStr( const char* theColor )
-{
-  myGroupColorPtr->SetColorStr(
-    TCollection_AsciiString( (Standard_CString)theColor ) );
-  TPythonDump()<<this<<".SetColorStr('"<<theColor<<"')";
-}
+  FunctorType ElemGeomType_i::GetFunctorType()
+  {
+    return SMESH::FT_ElemGeomType;
+  }
 
-char* GroupColor_i::GetColorStr()
-{
-  TCollection_AsciiString aStr;
-  myGroupColorPtr->GetColorStr( aStr );
-  return CORBA::string_dup( aStr.ToCString() );
-}
+  /*
+    Class       : ElemEntityType_i
+    Description : Predicate check is element has indicated entity type
+  */
+  ElemEntityType_i::ElemEntityType_i()
+  {
+    myElemEntityTypePtr.reset(new Controls::ElemEntityType());
+    myFunctorPtr = myPredicatePtr = myElemEntityTypePtr;
+  }
 
-void GroupColor_i::SetElementType(ElementType theType)
-{
-  myGroupColorPtr->SetType(SMDSAbs_ElementType(theType));
-  TPythonDump()<<this<<".SetElementType("<<theType<<")";
-}
+  void ElemEntityType_i::SetElementType(ElementType theType)
+  {
+    myElemEntityTypePtr->SetType(SMDSAbs_ElementType(theType));
+    TPythonDump()<<this<<".SetElementType("<<theType<<")";
+  }
 
-/*
-  Class       : ElemGeomType_i
-  Description : Predicate check is element has indicated geometry type
-*/
-ElemGeomType_i::ElemGeomType_i()
-{
-  myElemGeomTypePtr.reset(new Controls::ElemGeomType());
-  myFunctorPtr = myPredicatePtr = myElemGeomTypePtr;
-}
+  void ElemEntityType_i::SetEntityType(EntityType theEntityType)
+  {
+    myElemEntityTypePtr->SetElemEntityType(SMDSAbs_EntityType (theEntityType));
+    TPythonDump()<<this<<".SetEntityType("<<theEntityType<<")";
+  }
+  EntityType ElemEntityType_i::GetEntityType() const
+  {
+   return (EntityType) myElemEntityTypePtr->GetElemEntityType();
+  }
 
-void ElemGeomType_i::SetElementType(ElementType theType)
-{
-  myElemGeomTypePtr->SetType(SMDSAbs_ElementType(theType));
-  TPythonDump()<<this<<".SetElementType("<<theType<<")";
-}
+  FunctorType ElemEntityType_i::GetFunctorType()
+  {
+    return SMESH::FT_EntityType;
+  }
 
-void ElemGeomType_i::SetGeometryType(GeometryType theType)
-{
-  myElemGeomTypePtr->SetGeomType(SMDSAbs_GeometryType(theType));
-  TPythonDump()<<this<<".SetGeometryType("<<theType<<")";
-}
-
-GeometryType ElemGeomType_i::GetGeometryType() const
-{
-  return (GeometryType)myElemGeomTypePtr->GetGeomType();
-}
-
-FunctorType ElemGeomType_i::GetFunctorType()
-{
-  return SMESH::FT_ElemGeomType;
-}
-
-/*
-  Class       : ElemEntityType_i
-  Description : Predicate check is element has indicated entity type
-*/
-ElemEntityType_i::ElemEntityType_i()
-{
-  myElemEntityTypePtr.reset(new Controls::ElemEntityType());
-  myFunctorPtr = myPredicatePtr = myElemEntityTypePtr;
-}
-
-void ElemEntityType_i::SetElementType(ElementType theType)
-{
-  myElemEntityTypePtr->SetType(SMDSAbs_ElementType(theType));
-  TPythonDump()<<this<<".SetElementType("<<theType<<")";
-}
-
-void ElemEntityType_i::SetEntityType(EntityType theEntityType)
-{
-  myElemEntityTypePtr->SetElemEntityType(SMDSAbs_EntityType (theEntityType));
-  TPythonDump()<<this<<".SetEntityType("<<theEntityType<<")";
-}
-EntityType ElemEntityType_i::GetEntityType() const
-{
- return (EntityType) myElemEntityTypePtr->GetElemEntityType();
-}
-
-FunctorType ElemEntityType_i::GetFunctorType()
-{
-  return SMESH::FT_EntityType;
-}
-
-/*
-  Class       : CoplanarFaces_i
-  Description : Returns true if a mesh face is a coplanar neighbour to a given one
-*/
-CoplanarFaces_i::CoplanarFaces_i()
-{
-  myCoplanarFacesPtr.reset(new Controls::CoplanarFaces());
-  myFunctorPtr = myPredicatePtr = myCoplanarFacesPtr;
-}
+  /*
+    Class       : CoplanarFaces_i
+    Description : Returns true if a mesh face is a coplanar neighbour to a given one
+  */
+  CoplanarFaces_i::CoplanarFaces_i()
+  {
+    myCoplanarFacesPtr.reset(new Controls::CoplanarFaces());
+    myFunctorPtr = myPredicatePtr = myCoplanarFacesPtr;
+  }
 
-void CoplanarFaces_i::SetFace ( CORBA::Long theFaceID )
-{
-  myCoplanarFacesPtr->SetFace(theFaceID);
-  TPythonDump()<<this<<".SetFace("<<theFaceID<<")";
-}
+  void CoplanarFaces_i::SetFace ( CORBA::Long theFaceID )
+  {
+    myCoplanarFacesPtr->SetFace(theFaceID);
+    TPythonDump()<<this<<".SetFace("<<theFaceID<<")";
+  }
 
-void CoplanarFaces_i::SetTolerance( CORBA::Double theToler )
-{
-  myCoplanarFacesPtr->SetTolerance(theToler);
-  TPythonDump()<<this<<".SetTolerance("<<theToler<<")";
-}
+  void CoplanarFaces_i::SetTolerance( CORBA::Double theToler )
+  {
+    myCoplanarFacesPtr->SetTolerance(theToler);
+    TPythonDump()<<this<<".SetTolerance("<<theToler<<")";
+  }
 
-CORBA::Long CoplanarFaces_i::GetFace () const
-{
-  return myCoplanarFacesPtr->GetFace();
-}
+  CORBA::Long CoplanarFaces_i::GetFace () const
+  {
+    return myCoplanarFacesPtr->GetFace();
+  }
 
-char* CoplanarFaces_i::GetFaceAsString () const
-{
-  TCollection_AsciiString str(Standard_Integer(myCoplanarFacesPtr->GetFace()));
-  return CORBA::string_dup( str.ToCString() );
-}
+  char* CoplanarFaces_i::GetFaceAsString () const
+  {
+    TCollection_AsciiString str(Standard_Integer(myCoplanarFacesPtr->GetFace()));
+    return CORBA::string_dup( str.ToCString() );
+  }
 
-CORBA::Double CoplanarFaces_i::GetTolerance() const
-{
-  return myCoplanarFacesPtr->GetTolerance();
-}
+  CORBA::Double CoplanarFaces_i::GetTolerance() const
+  {
+    return myCoplanarFacesPtr->GetTolerance();
+  }
 
-FunctorType CoplanarFaces_i::GetFunctorType()
-{
-  return SMESH::FT_CoplanarFaces;
-}
+  FunctorType CoplanarFaces_i::GetFunctorType()
+  {
+    return SMESH::FT_CoplanarFaces;
+  }
 
-/*
- * Class       : ConnectedElements_i
- * Description : Returns true if an element is connected via other elements to the element
- *               located at a given point.
- */
-ConnectedElements_i::ConnectedElements_i()
-{
-  myConnectedElementsPtr.reset(new Controls::ConnectedElements());
-  myFunctorPtr = myPredicatePtr = myConnectedElementsPtr;
-}
+  /*
  * Class       : ConnectedElements_i
  * Description : Returns true if an element is connected via other elements to the element
  *               located at a given point.
  */
+  ConnectedElements_i::ConnectedElements_i()
+  {
+    myConnectedElementsPtr.reset(new Controls::ConnectedElements());
+    myFunctorPtr = myPredicatePtr = myConnectedElementsPtr;
+  }
 
-FunctorType ConnectedElements_i::GetFunctorType()
-{
-  return FT_ConnectedElements;
-}
+  FunctorType ConnectedElements_i::GetFunctorType()
+  {
+    return FT_ConnectedElements;
+  }
 
-void ConnectedElements_i::SetElementType( ElementType theType )
-{
-  myConnectedElementsPtr->SetType( SMDSAbs_ElementType( theType ));
-  TPythonDump() << this << ".SetElementType( " << theType << " )";
-}
+  void ConnectedElements_i::SetElementType( ElementType theType )
+  {
+    myConnectedElementsPtr->SetType( SMDSAbs_ElementType( theType ));
+    TPythonDump() << this << ".SetElementType( " << theType << " )";
+  }
 
-void ConnectedElements_i::SetPoint( CORBA::Double x, CORBA::Double y, CORBA::Double z )
-{
-  myConnectedElementsPtr->SetPoint( x,y,z );
-  myVertexID.clear();
-  TPythonDump() << this << ".SetPoint( " << x << ", " << y << ", " << z << " )";
-}
+  void ConnectedElements_i::SetPoint( CORBA::Double x, CORBA::Double y, CORBA::Double z )
+  {
+    myConnectedElementsPtr->SetPoint( x,y,z );
+    myVertexID.clear();
+    TPythonDump() << this << ".SetPoint( " << x << ", " << y << ", " << z << " )";
+  }
 
-void ConnectedElements_i::SetVertex( GEOM::GEOM_Object_ptr vertex )
-{
-  TopoDS_Shape shape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( vertex );
-  if ( shape.IsNull() )
-    THROW_SALOME_CORBA_EXCEPTION( "ConnectedElements_i::SetVertex(): NULL Vertex",
-                                  SALOME::BAD_PARAM );
-
-  TopExp_Explorer v( shape, TopAbs_VERTEX );
-  if ( !v.More() )
-    THROW_SALOME_CORBA_EXCEPTION( "ConnectedElements_i::SetVertex(): empty vertex",
-                                  SALOME::BAD_PARAM );
-
-  gp_Pnt p = BRep_Tool::Pnt( TopoDS::Vertex( v.Current() ));
-  myConnectedElementsPtr->SetPoint( p.X(), p.Y(), p.Z() );
-  //
-  CORBA::String_var id = vertex->GetStudyEntry();
-  myVertexID = id.in();
-
-  TPythonDump() << this << ".SetVertex( " << vertex << " )";
-}
+  void ConnectedElements_i::SetVertex( GEOM::GEOM_Object_ptr vertex )
+  {
+    TopoDS_Shape shape = SMESH_Gen_i::GetSMESHGen()->GeomObjectToShape( vertex );
+    if ( shape.IsNull() )
+      THROW_SALOME_CORBA_EXCEPTION( "ConnectedElements_i::SetVertex(): NULL Vertex",
+                                    SALOME::BAD_PARAM );
+
+    TopExp_Explorer v( shape, TopAbs_VERTEX );
+    if ( !v.More() )
+      THROW_SALOME_CORBA_EXCEPTION( "ConnectedElements_i::SetVertex(): empty vertex",
+                                    SALOME::BAD_PARAM );
+
+    gp_Pnt p = BRep_Tool::Pnt( TopoDS::Vertex( v.Current() ));
+    myConnectedElementsPtr->SetPoint( p.X(), p.Y(), p.Z() );
+    //
+    CORBA::String_var id = vertex->GetStudyEntry();
+    myVertexID = id.in();
+
+    TPythonDump() << this << ".SetVertex( " << vertex << " )";
+  }
 
-void ConnectedElements_i::SetNode ( CORBA::Long nodeID )
-{
-  if ( nodeID < 1 )
-    THROW_SALOME_CORBA_EXCEPTION( "ConnectedElements_i::SetNode(): nodeID must be > 0",
-                                  SALOME::BAD_PARAM );
+  void ConnectedElements_i::SetNode ( SMESH::smIdType nodeID )
+  {
+    if ( nodeID < 1 )
+      THROW_SALOME_CORBA_EXCEPTION( "ConnectedElements_i::SetNode(): nodeID must be > 0",
+                                    SALOME::BAD_PARAM );
 
-  myConnectedElementsPtr->SetNode( nodeID );
-  myVertexID.clear();
-  TPythonDump() << this << ".SetNode( " << nodeID << " )";
-}
+    myConnectedElementsPtr->SetNode( nodeID );
+    myVertexID.clear();
+    TPythonDump() << this << ".SetNode( " << nodeID << " )";
+  }
 
-/*!
- * \brief This is a comfort method for Filter dialog
- */
-void ConnectedElements_i::SetThreshold ( const char*                             threshold,
-                                         SMESH::ConnectedElements::ThresholdType type )
-{
-  if ( !threshold )
-    THROW_SALOME_CORBA_EXCEPTION( "ConnectedElements_i::SetThreshold(): NULL threshold",
-                                  SALOME::BAD_PARAM );
-  switch ( type )
+  /*!
+   * \brief This is a comfort method for Filter dialog
+   */
+  void ConnectedElements_i::SetThreshold ( const char*                             threshold,
+                                           SMESH::ConnectedElements::ThresholdType type )
   {
-  case SMESH::ConnectedElements::POINT: // read 3 node coordinates ///////////////////
+    if ( !threshold )
+      THROW_SALOME_CORBA_EXCEPTION( "ConnectedElements_i::SetThreshold(): NULL threshold",
+                                    SALOME::BAD_PARAM );
+    switch ( type )
     {
-      std::vector< double > xyz;
-      char* endptr;
-      do
+    case SMESH::ConnectedElements::POINT: // read 3 node coordinates ///////////////////
       {
-        // skip a separator
-        while ( *threshold &&
-                *threshold != '+' &&
-                *threshold != '-' &&
-                !isdigit( *threshold ))
-          ++threshold;
-        if ( !*threshold )
-          break;
-        // read a coordinate
-        xyz.push_back( strtod( threshold, &endptr ));
-        if ( threshold == endptr )
+        std::vector< double > xyz;
+        char* endptr;
+        do
         {
-          xyz.resize( xyz.size() - 1 );
-          break;
+          // skip a separator
+          while ( *threshold &&
+                  *threshold != '+' &&
+                  *threshold != '-' &&
+                  !isdigit( *threshold ))
+            ++threshold;
+          if ( !*threshold )
+            break;
+          // read a coordinate
+          xyz.push_back( strtod( threshold, &endptr ));
+          if ( threshold == endptr )
+          {
+            xyz.resize( xyz.size() - 1 );
+            break;
+          }
+          threshold = endptr;
         }
-        threshold = endptr;
-      }
-      while ( xyz.size() < 3 );
+        while ( xyz.size() < 3 );
 
-      if ( xyz.size() < 3 )
-        THROW_SALOME_CORBA_EXCEPTION
-          ( "ConnectedElements_i::SetThreshold(): invalid point coordinates", SALOME::BAD_PARAM );
+        if ( xyz.size() < 3 )
+          THROW_SALOME_CORBA_EXCEPTION
+            ( "ConnectedElements_i::SetThreshold(): invalid point coordinates", SALOME::BAD_PARAM );
 
-      SetPoint( xyz[0], xyz[1], xyz[2] );
-      break;
+        SetPoint( xyz[0], xyz[1], xyz[2] );
+        break;
+      }
+    case SMESH::ConnectedElements::VERTEX: // get a VERTEX by its entry /////////////////
+      {
+        SALOMEDS::SObject_wrap sobj = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindObjectID( threshold );
+        if ( sobj->_is_nil() )
+          THROW_SALOME_CORBA_EXCEPTION
+            ( "ConnectedElements_i::SetThreshold(): invalid vertex study entry", SALOME::BAD_PARAM );
+        CORBA::Object_var        obj = sobj->GetObject();
+        GEOM::GEOM_Object_var vertex = GEOM::GEOM_Object::_narrow( obj );
+        if ( vertex->_is_nil() )
+          THROW_SALOME_CORBA_EXCEPTION
+            ( "ConnectedElements_i::SetThreshold(): no GEOM_Object in SObject", SALOME::BAD_PARAM );
+        SetVertex( vertex );
+        break;
+      }
+    case SMESH::ConnectedElements::NODE: // read a node ID ////////////////////////////
+      {
+        char* endptr;
+        int id = strtol( threshold, &endptr, 10 );
+        if ( threshold == endptr )
+          THROW_SALOME_CORBA_EXCEPTION
+            ( "ConnectedElements_i::SetThreshold(): invalid node ID", SALOME::BAD_PARAM );
+        SetNode( id );
+        break;
+      }
+    default:
+      THROW_SALOME_CORBA_EXCEPTION
+        ( "ConnectedElements_i::SetThreshold(): invalid ThresholdType", SALOME::BAD_PARAM );
     }
-  case SMESH::ConnectedElements::VERTEX: // get a VERTEX by its entry /////////////////
+  }
+
+  char* ConnectedElements_i::GetThreshold ( SMESH::ConnectedElements::ThresholdType& type )
+  {
+    std::string threshold;
+    if ( !myVertexID.empty() )
     {
-      SALOMEDS::SObject_wrap sobj = SMESH_Gen_i::getStudyServant()->FindObjectID( threshold );
-      if ( sobj->_is_nil() )
-        THROW_SALOME_CORBA_EXCEPTION
-          ( "ConnectedElements_i::SetThreshold(): invalid vertex study entry", SALOME::BAD_PARAM );
-      CORBA::Object_var        obj = sobj->GetObject();
-      GEOM::GEOM_Object_var vertex = GEOM::GEOM_Object::_narrow( obj );
-      if ( vertex->_is_nil() )
-        THROW_SALOME_CORBA_EXCEPTION
-          ( "ConnectedElements_i::SetThreshold(): no GEOM_Object in SObject", SALOME::BAD_PARAM );
-      SetVertex( vertex );
-      break;
+      threshold = myVertexID;
+      type      = SMESH::ConnectedElements::VERTEX;
     }
-  case SMESH::ConnectedElements::NODE: // read a node ID ////////////////////////////
+    else
     {
-      char* endptr;
-      int id = strtol( threshold, &endptr, 10 );
-      if ( threshold == endptr )
-        THROW_SALOME_CORBA_EXCEPTION
-          ( "ConnectedElements_i::SetThreshold(): invalid node ID", SALOME::BAD_PARAM );
-      SetNode( id );
-      break;
+      std::vector<double> xyz = myConnectedElementsPtr->GetPoint();
+      if ( xyz.size() == 3 )
+      {
+        threshold = SMESH_Comment( xyz[0] ) << "; " << xyz[1] << "; " << xyz[2];
+        type      = SMESH::ConnectedElements::POINT;
+      }
+      else
+      {
+        threshold = SMESH_Comment( myConnectedElementsPtr->GetNode() );
+        type      = SMESH::ConnectedElements::NODE;
+      }
     }
-  default:
-    THROW_SALOME_CORBA_EXCEPTION
-      ( "ConnectedElements_i::SetThreshold(): invalid ThresholdType", SALOME::BAD_PARAM );
+    return CORBA::string_dup( threshold.c_str() );
   }
-}
 
-char* ConnectedElements_i::GetThreshold ( SMESH::ConnectedElements::ThresholdType& type )
-{
-  std::string threshold;
-  if ( !myVertexID.empty() )
+  /*
+    Class       : Comparator_i
+    Description : Base class for comparators
+  */
+  Comparator_i::Comparator_i():
+    myNumericalFunctor( NULL )
+  {}
+
+  Comparator_i::~Comparator_i()
   {
-    threshold = myVertexID;
-    type      = SMESH::ConnectedElements::VERTEX;
+    if ( myNumericalFunctor )
+      myNumericalFunctor->UnRegister();
   }
-  else
+
+  void Comparator_i::SetMargin( CORBA::Double theValue )
   {
-    std::vector<double> xyz = myConnectedElementsPtr->GetPoint();
-    if ( xyz.size() == 3 )
-    {
-      threshold = SMESH_Comment( xyz[0] ) << "; " << xyz[1] << "; " << xyz[2];
-      type      = SMESH::ConnectedElements::POINT;
-    }
-    else
+    myComparatorPtr->SetMargin( theValue );
+    TPythonDump()<<this<<".SetMargin("<<theValue<<")";
+  }
+
+  CORBA::Double Comparator_i::GetMargin()
+  {
+    return myComparatorPtr->GetMargin();
+  }
+
+  void Comparator_i::SetNumFunctor( NumericalFunctor_ptr theFunct )
+  {
+    if ( myNumericalFunctor )
+      myNumericalFunctor->UnRegister();
+
+    myNumericalFunctor = DownCast<NumericalFunctor_i*>(theFunct);
+
+    if ( myNumericalFunctor )
     {
-      threshold = SMESH_Comment( myConnectedElementsPtr->GetNode() );
-      type      = SMESH::ConnectedElements::NODE;
+      myComparatorPtr->SetNumFunctor( myNumericalFunctor->GetNumericalFunctor() );
+      myNumericalFunctor->Register();
+      TPythonDump()<<this<<".SetNumFunctor("<<myNumericalFunctor<<")";
     }
   }
-  return CORBA::string_dup( threshold.c_str() );
-}
 
-/*
-  Class       : Comparator_i
-  Description : Base class for comparators
-*/
-Comparator_i::Comparator_i():
-  myNumericalFunctor( NULL )
-{}
+  Controls::ComparatorPtr Comparator_i::GetComparator()
+  {
+    return myComparatorPtr;
+  }
 
-Comparator_i::~Comparator_i()
-{
-  if ( myNumericalFunctor )
-    myNumericalFunctor->UnRegister();
-}
+  NumericalFunctor_i* Comparator_i::GetNumFunctor_i()
+  {
+    return myNumericalFunctor;
+  }
 
-void Comparator_i::SetMargin( CORBA::Double theValue )
-{
-  myComparatorPtr->SetMargin( theValue );
-  TPythonDump()<<this<<".SetMargin("<<theValue<<")";
-}
 
-CORBA::Double Comparator_i::GetMargin()
-{
-  return myComparatorPtr->GetMargin();
-}
+  /*
+    Class       : LessThan_i
+    Description : Comparator "<"
+  */
+  LessThan_i::LessThan_i()
+  {
+    myComparatorPtr.reset( new Controls::LessThan() );
+    myFunctorPtr = myPredicatePtr = myComparatorPtr;
+  }
 
-void Comparator_i::SetNumFunctor( NumericalFunctor_ptr theFunct )
-{
-  if ( myNumericalFunctor )
-    myNumericalFunctor->UnRegister();
+  FunctorType LessThan_i::GetFunctorType()
+  {
+    return SMESH::FT_LessThan;
+  }
 
-  myNumericalFunctor = DownCast<NumericalFunctor_i*>(theFunct);
 
-  if ( myNumericalFunctor )
+  /*
+    Class       : MoreThan_i
+    Description : Comparator ">"
+  */
+  MoreThan_i::MoreThan_i()
   {
-    myComparatorPtr->SetNumFunctor( myNumericalFunctor->GetNumericalFunctor() );
-    myNumericalFunctor->Register();
-    TPythonDump()<<this<<".SetNumFunctor("<<myNumericalFunctor<<")";
+    myComparatorPtr.reset( new Controls::MoreThan() );
+    myFunctorPtr = myPredicatePtr = myComparatorPtr;
   }
-}
 
-Controls::ComparatorPtr Comparator_i::GetComparator()
-{
-  return myComparatorPtr;
-}
+  FunctorType MoreThan_i::GetFunctorType()
+  {
+    return SMESH::FT_MoreThan;
+  }
 
-NumericalFunctor_i* Comparator_i::GetNumFunctor_i()
-{
-  return myNumericalFunctor;
-}
 
+  /*
+    Class       : EqualTo_i
+    Description : Comparator "="
+  */
+  EqualTo_i::EqualTo_i()
+  : myEqualToPtr( new Controls::EqualTo() )
+  {
+    myFunctorPtr = myPredicatePtr = myComparatorPtr = myEqualToPtr;
+  }
 
-/*
-  Class       : LessThan_i
-  Description : Comparator "<"
-*/
-LessThan_i::LessThan_i()
-{
-  myComparatorPtr.reset( new Controls::LessThan() );
-  myFunctorPtr = myPredicatePtr = myComparatorPtr;
-}
+  void EqualTo_i::SetTolerance( CORBA::Double theToler )
+  {
+    myEqualToPtr->SetTolerance( theToler );
+    TPythonDump()<<this<<".SetTolerance("<<theToler<<")";
+  }
 
-FunctorType LessThan_i::GetFunctorType()
-{
-  return SMESH::FT_LessThan;
-}
+  CORBA::Double EqualTo_i::GetTolerance()
+  {
+    return myEqualToPtr->GetTolerance();
+  }
 
+  FunctorType EqualTo_i::GetFunctorType()
+  {
+    return SMESH::FT_EqualTo;
+  }
 
-/*
-  Class       : MoreThan_i
-  Description : Comparator ">"
-*/
-MoreThan_i::MoreThan_i()
-{
-  myComparatorPtr.reset( new Controls::MoreThan() );
-  myFunctorPtr = myPredicatePtr = myComparatorPtr;
-}
+  /*
+    Class       : LogicalNOT_i
+    Description : Logical NOT predicate
+  */
+  LogicalNOT_i::LogicalNOT_i():
+    myLogicalNOTPtr( new Controls::LogicalNOT() ),
+    myPredicate( NULL )
+  {
+    myFunctorPtr = myPredicatePtr = myLogicalNOTPtr;
+  }
 
-FunctorType MoreThan_i::GetFunctorType()
-{
-  return SMESH::FT_MoreThan;
-}
+  LogicalNOT_i::~LogicalNOT_i()
+  {
+    if ( myPredicate )
+      myPredicate->UnRegister();
+  }
 
+  void LogicalNOT_i::SetPredicate( Predicate_ptr thePredicate )
+  {
+    if ( myPredicate )
+      myPredicate->UnRegister();
 
-/*
-  Class       : EqualTo_i
-  Description : Comparator "="
-*/
-EqualTo_i::EqualTo_i()
-: myEqualToPtr( new Controls::EqualTo() )
-{
-  myFunctorPtr = myPredicatePtr = myComparatorPtr = myEqualToPtr;
-}
+    myPredicate = SMESH::GetPredicate(thePredicate);
 
-void EqualTo_i::SetTolerance( CORBA::Double theToler )
-{
-  myEqualToPtr->SetTolerance( theToler );
-  TPythonDump()<<this<<".SetTolerance("<<theToler<<")";
-}
+    if ( myPredicate ){
+      myLogicalNOTPtr->SetPredicate(myPredicate->GetPredicate());
+      myPredicate->Register();
+      TPythonDump()<<this<<".SetPredicate("<<myPredicate<<")";
+    }
+  }
 
-CORBA::Double EqualTo_i::GetTolerance()
-{
-  return myEqualToPtr->GetTolerance();
-}
+  FunctorType LogicalNOT_i::GetFunctorType()
+  {
+    return SMESH::FT_LogicalNOT;
+  }
 
-FunctorType EqualTo_i::GetFunctorType()
-{
-  return SMESH::FT_EqualTo;
-}
+  Predicate_i* LogicalNOT_i::GetPredicate_i()
+  {
+    return myPredicate;
+  }
 
-/*
-  Class       : LogicalNOT_i
-  Description : Logical NOT predicate
-*/
-LogicalNOT_i::LogicalNOT_i():
-  myLogicalNOTPtr( new Controls::LogicalNOT() ),
-  myPredicate( NULL )
-{
-  myFunctorPtr = myPredicatePtr = myLogicalNOTPtr;
-}
 
-LogicalNOT_i::~LogicalNOT_i()
-{
-  if ( myPredicate )
-    myPredicate->UnRegister();
-}
 
-void LogicalNOT_i::SetPredicate( Predicate_ptr thePredicate )
-{
-  if ( myPredicate )
-    myPredicate->UnRegister();
+  /*
+    Class       : LogicalBinary_i
+    Description : Base class for binary logical predicate
+  */
+  LogicalBinary_i::LogicalBinary_i()
+  : myPredicate1( NULL ),
+    myPredicate2( NULL )
+  {}
 
-  myPredicate = SMESH::GetPredicate(thePredicate);
+  LogicalBinary_i::~LogicalBinary_i()
+  {
+    if ( myPredicate1 )
+      myPredicate1->UnRegister();
 
-  if ( myPredicate ){
-    myLogicalNOTPtr->SetPredicate(myPredicate->GetPredicate());
-    myPredicate->Register();
-    TPythonDump()<<this<<".SetPredicate("<<myPredicate<<")";
+    if ( myPredicate2 )
+      myPredicate2->UnRegister();
   }
-}
 
-FunctorType LogicalNOT_i::GetFunctorType()
-{
-  return SMESH::FT_LogicalNOT;
-}
+  void LogicalBinary_i::SetMesh( SMESH_Mesh_ptr theMesh )
+  {
+    if ( myPredicate1 )
+      myPredicate1->SetMesh( theMesh );
 
-Predicate_i* LogicalNOT_i::GetPredicate_i()
-{
-  return myPredicate;
-}
+    if ( myPredicate2 )
+      myPredicate2->SetMesh( theMesh );
+  }
 
+  void LogicalBinary_i::SetPredicate1( Predicate_ptr thePredicate )
+  {
+    if ( myPredicate1 )
+      myPredicate1->UnRegister();
 
+    myPredicate1 = SMESH::GetPredicate(thePredicate);
 
-/*
-  Class       : LogicalBinary_i
-  Description : Base class for binary logical predicate
-*/
-LogicalBinary_i::LogicalBinary_i()
-: myPredicate1( NULL ),
-  myPredicate2( NULL )
-{}
+    if ( myPredicate1 ){
+      myLogicalBinaryPtr->SetPredicate1(myPredicate1->GetPredicate());
+      myPredicate1->Register();
+      TPythonDump()<<this<<".SetPredicate1("<<myPredicate1<<")";
+    }
+  }
 
-LogicalBinary_i::~LogicalBinary_i()
-{
-  if ( myPredicate1 )
-    myPredicate1->UnRegister();
+  void LogicalBinary_i::SetPredicate2( Predicate_ptr thePredicate )
+  {
+    if ( myPredicate2 )
+      myPredicate2->UnRegister();
 
-  if ( myPredicate2 )
-    myPredicate2->UnRegister();
-}
+    myPredicate2 = SMESH::GetPredicate(thePredicate);
 
-void LogicalBinary_i::SetMesh( SMESH_Mesh_ptr theMesh )
-{
-  if ( myPredicate1 )
-    myPredicate1->SetMesh( theMesh );
+    if ( myPredicate2 ){
+      myLogicalBinaryPtr->SetPredicate2(myPredicate2->GetPredicate());
+      myPredicate2->Register();
+      TPythonDump()<<this<<".SetPredicate2("<<myPredicate2<<")";
+    }
+  }
 
-  if ( myPredicate2 )
-    myPredicate2->SetMesh( theMesh );
-}
+  Controls::LogicalBinaryPtr LogicalBinary_i::GetLogicalBinary()
+  {
+    return myLogicalBinaryPtr;
+  }
 
-void LogicalBinary_i::SetPredicate1( Predicate_ptr thePredicate )
-{
-  if ( myPredicate1 )
-    myPredicate1->UnRegister();
+  Predicate_i* LogicalBinary_i::GetPredicate1_i()
+  {
+    return myPredicate1;
+  }
+  Predicate_i* LogicalBinary_i::GetPredicate2_i()
+  {
+    return myPredicate2;
+  }
 
-  myPredicate1 = SMESH::GetPredicate(thePredicate);
 
-  if ( myPredicate1 ){
-    myLogicalBinaryPtr->SetPredicate1(myPredicate1->GetPredicate());
-    myPredicate1->Register();
-    TPythonDump()<<this<<".SetPredicate1("<<myPredicate1<<")";
+  /*
+    Class       : LogicalAND_i
+    Description : Logical AND
+  */
+  LogicalAND_i::LogicalAND_i()
+  {
+    myLogicalBinaryPtr.reset( new Controls::LogicalAND() );
+    myFunctorPtr = myPredicatePtr = myLogicalBinaryPtr;
   }
-}
 
-void LogicalBinary_i::SetPredicate2( Predicate_ptr thePredicate )
-{
-  if ( myPredicate2 )
-    myPredicate2->UnRegister();
+  FunctorType LogicalAND_i::GetFunctorType()
+  {
+    return SMESH::FT_LogicalAND;
+  }
 
-  myPredicate2 = SMESH::GetPredicate(thePredicate);
 
-  if ( myPredicate2 ){
-    myLogicalBinaryPtr->SetPredicate2(myPredicate2->GetPredicate());
-    myPredicate2->Register();
-    TPythonDump()<<this<<".SetPredicate2("<<myPredicate2<<")";
+  /*
+    Class       : LogicalOR_i
+    Description : Logical OR
+  */
+  LogicalOR_i::LogicalOR_i()
+  {
+    myLogicalBinaryPtr.reset( new Controls::LogicalOR() );
+    myFunctorPtr = myPredicatePtr = myLogicalBinaryPtr;
   }
-}
 
-Controls::LogicalBinaryPtr LogicalBinary_i::GetLogicalBinary()
-{
-  return myLogicalBinaryPtr;
-}
+  FunctorType LogicalOR_i::GetFunctorType()
+  {
+    return SMESH::FT_LogicalOR;
+  }
 
-Predicate_i* LogicalBinary_i::GetPredicate1_i()
-{
-  return myPredicate1;
-}
-Predicate_i* LogicalBinary_i::GetPredicate2_i()
-{
-  return myPredicate2;
-}
 
+  /*
+                              FILTER MANAGER
+  */
 
-/*
-  Class       : LogicalAND_i
-  Description : Logical AND
-*/
-LogicalAND_i::LogicalAND_i()
-{
-  myLogicalBinaryPtr.reset( new Controls::LogicalAND() );
-  myFunctorPtr = myPredicatePtr = myLogicalBinaryPtr;
-}
+  FilterManager_i::FilterManager_i()
+  : SALOME::GenericObj_i( SMESH_Gen_i::GetPOA() )
+  {
+    //Base class Salome_GenericObject do it inmplicitly by overriding PortableServer::POA_ptr _default_POA() method
+    //PortableServer::ObjectId_var anObjectId =
+    //  SMESH_Gen_i::GetPOA()->activate_object( this );
+  }
 
-FunctorType LogicalAND_i::GetFunctorType()
-{
-  return SMESH::FT_LogicalAND;
-}
 
+  FilterManager_i::~FilterManager_i()
+  {
+    //TPythonDump()<<this<<".UnRegister()";
+  }
 
-/*
-  Class       : LogicalOR_i
-  Description : Logical OR
-*/
-LogicalOR_i::LogicalOR_i()
-{
-  myLogicalBinaryPtr.reset( new Controls::LogicalOR() );
-  myFunctorPtr = myPredicatePtr = myLogicalBinaryPtr;
-}
 
-FunctorType LogicalOR_i::GetFunctorType()
-{
-  return SMESH::FT_LogicalOR;
-}
-
-
-/*
-                            FILTER MANAGER
-*/
-
-FilterManager_i::FilterManager_i()
-: SALOME::GenericObj_i( SMESH_Gen_i::GetPOA() )
-{
-  //Base class Salome_GenericObject do it inmplicitly by overriding PortableServer::POA_ptr _default_POA() method
-  //PortableServer::ObjectId_var anObjectId =
-  //  SMESH_Gen_i::GetPOA()->activate_object( this );
-}
-
-
-FilterManager_i::~FilterManager_i()
-{
-  //TPythonDump()<<this<<".UnRegister()";
-}
-
-
-MinimumAngle_ptr FilterManager_i::CreateMinimumAngle()
-{
-  SMESH::MinimumAngle_i* aServant = new SMESH::MinimumAngle_i();
-  SMESH::MinimumAngle_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateMinimumAngle()";
-  return anObj._retn();
-}
+  MinimumAngle_ptr FilterManager_i::CreateMinimumAngle()
+  {
+    SMESH::MinimumAngle_i* aServant = new SMESH::MinimumAngle_i();
+    SMESH::MinimumAngle_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateMinimumAngle()";
+    return anObj._retn();
+  }
 
 
-AspectRatio_ptr FilterManager_i::CreateAspectRatio()
-{
-  SMESH::AspectRatio_i* aServant = new SMESH::AspectRatio_i();
-  SMESH::AspectRatio_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateAspectRatio()";
-  return anObj._retn();
-}
-
+  AspectRatio_ptr FilterManager_i::CreateAspectRatio()
+  {
+    SMESH::AspectRatio_i* aServant = new SMESH::AspectRatio_i();
+    SMESH::AspectRatio_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateAspectRatio()";
+    return anObj._retn();
+  }
 
-AspectRatio3D_ptr FilterManager_i::CreateAspectRatio3D()
-{
-  SMESH::AspectRatio3D_i* aServant = new SMESH::AspectRatio3D_i();
-  SMESH::AspectRatio3D_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateAspectRatio3D()";
-  return anObj._retn();
-}
 
+  AspectRatio3D_ptr FilterManager_i::CreateAspectRatio3D()
+  {
+    SMESH::AspectRatio3D_i* aServant = new SMESH::AspectRatio3D_i();
+    SMESH::AspectRatio3D_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateAspectRatio3D()";
+    return anObj._retn();
+  }
 
-Warping_ptr FilterManager_i::CreateWarping()
-{
-  SMESH::Warping_i* aServant = new SMESH::Warping_i();
-  SMESH::Warping_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateWarping()";
-  return anObj._retn();
-}
 
+  Warping_ptr FilterManager_i::CreateWarping()
+  {
+    SMESH::Warping_i* aServant = new SMESH::Warping_i();
+    SMESH::Warping_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateWarping()";
+    return anObj._retn();
+  }
 
-Taper_ptr FilterManager_i::CreateTaper()
-{
-  SMESH::Taper_i* aServant = new SMESH::Taper_i();
-  SMESH::Taper_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateTaper()";
-  return anObj._retn();
-}
 
+  Warping3D_ptr FilterManager_i::CreateWarping3D()
+  {
+    SMESH::Warping3D_i* aServant = new SMESH::Warping3D_i();
+    SMESH::Warping3D_var anObj = aServant->_this();
+    TPythonDump() << aServant << " = " << this << ".CreateWarping3D()";
+    return anObj._retn();
+  }
 
-Skew_ptr FilterManager_i::CreateSkew()
-{
-  SMESH::Skew_i* aServant = new SMESH::Skew_i();
-  SMESH::Skew_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateSkew()";
-  return anObj._retn();
-}
+  Taper_ptr FilterManager_i::CreateTaper()
+  {
+    SMESH::Taper_i* aServant = new SMESH::Taper_i();
+    SMESH::Taper_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateTaper()";
+    return anObj._retn();
+  }
 
 
-Area_ptr FilterManager_i::CreateArea()
-{
-  SMESH::Area_i* aServant = new SMESH::Area_i();
-  SMESH::Area_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateArea()";
-  return anObj._retn();
-}
+  Skew_ptr FilterManager_i::CreateSkew()
+  {
+    SMESH::Skew_i* aServant = new SMESH::Skew_i();
+    SMESH::Skew_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateSkew()";
+    return anObj._retn();
+  }
 
 
-Volume3D_ptr FilterManager_i::CreateVolume3D()
-{
-  SMESH::Volume3D_i* aServant = new SMESH::Volume3D_i();
-  SMESH::Volume3D_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateVolume3D()";
-  return anObj._retn();
-}
-
+  Area_ptr FilterManager_i::CreateArea()
+  {
+    SMESH::Area_i* aServant = new SMESH::Area_i();
+    SMESH::Area_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateArea()";
+    return anObj._retn();
+  }
 
-MaxElementLength2D_ptr FilterManager_i::CreateMaxElementLength2D()
-{
-  SMESH::MaxElementLength2D_i* aServant = new SMESH::MaxElementLength2D_i();
-  SMESH::MaxElementLength2D_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateMaxElementLength2D()";
-  return anObj._retn();
-}
 
+  Volume3D_ptr FilterManager_i::CreateVolume3D()
+  {
+    SMESH::Volume3D_i* aServant = new SMESH::Volume3D_i();
+    SMESH::Volume3D_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateVolume3D()";
+    return anObj._retn();
+  }
 
-MaxElementLength3D_ptr FilterManager_i::CreateMaxElementLength3D()
-{
-  SMESH::MaxElementLength3D_i* aServant = new SMESH::MaxElementLength3D_i();
-  SMESH::MaxElementLength3D_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateMaxElementLength3D()";
-  return anObj._retn();
-}
+  ScaledJacobian_ptr FilterManager_i::CreateScaledJacobian()
+  {
+    SMESH::ScaledJacobian_i* aServant = new SMESH::ScaledJacobian_i();
+    SMESH::ScaledJacobian_var anObj   = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateScaledJacobian()";
+    return anObj._retn();
+  }
 
+  MaxElementLength2D_ptr FilterManager_i::CreateMaxElementLength2D()
+  {
+    SMESH::MaxElementLength2D_i* aServant = new SMESH::MaxElementLength2D_i();
+    SMESH::MaxElementLength2D_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateMaxElementLength2D()";
+    return anObj._retn();
+  }
 
-Length_ptr FilterManager_i::CreateLength()
-{
-  SMESH::Length_i* aServant = new SMESH::Length_i();
-  SMESH::Length_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateLength()";
-  return anObj._retn();
-}
 
-Length2D_ptr FilterManager_i::CreateLength2D()
-{
-  SMESH::Length2D_i* aServant = new SMESH::Length2D_i();
-  SMESH::Length2D_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateLength2D()";
-  return anObj._retn();
-}
+  MaxElementLength3D_ptr FilterManager_i::CreateMaxElementLength3D()
+  {
+    SMESH::MaxElementLength3D_i* aServant = new SMESH::MaxElementLength3D_i();
+    SMESH::MaxElementLength3D_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateMaxElementLength3D()";
+    return anObj._retn();
+  }
 
-Length3D_ptr FilterManager_i::CreateLength3D()
-{
-  SMESH::Length3D_i* aServant = new SMESH::Length3D_i();
-  SMESH::Length3D_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateLength3D()";
-  return anObj._retn();
-}
 
-Deflection2D_ptr FilterManager_i::CreateDeflection2D()
-{
-  SMESH::Deflection2D_i* aServant = new SMESH::Deflection2D_i();
-  SMESH::Deflection2D_var   anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateDeflection2D()";
-  return anObj._retn();
-}
+  Length_ptr FilterManager_i::CreateLength()
+  {
+    SMESH::Length_i* aServant = new SMESH::Length_i();
+    SMESH::Length_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateLength()";
+    return anObj._retn();
+  }
 
-MultiConnection_ptr FilterManager_i::CreateMultiConnection()
-{
-  SMESH::MultiConnection_i* aServant = new SMESH::MultiConnection_i();
-  SMESH::MultiConnection_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateMultiConnection()";
-  return anObj._retn();
-}
+  Length2D_ptr FilterManager_i::CreateLength2D()
+  {
+    SMESH::Length2D_i* aServant = new SMESH::Length2D_i();
+    SMESH::Length2D_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateLength2D()";
+    return anObj._retn();
+  }
 
-MultiConnection2D_ptr FilterManager_i::CreateMultiConnection2D()
-{
-  SMESH::MultiConnection2D_i* aServant = new SMESH::MultiConnection2D_i();
-  SMESH::MultiConnection2D_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateMultiConnection2D()";
-  return anObj._retn();
-}
+  Length3D_ptr FilterManager_i::CreateLength3D()
+  {
+    SMESH::Length3D_i* aServant = new SMESH::Length3D_i();
+    SMESH::Length3D_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateLength3D()";
+    return anObj._retn();
+  }
 
-BallDiameter_ptr FilterManager_i::CreateBallDiameter()
-{
-  SMESH::BallDiameter_i* aServant = new SMESH::BallDiameter_i();
-  SMESH::BallDiameter_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateBallDiameter()";
-  return anObj._retn();
-}
+  Deflection2D_ptr FilterManager_i::CreateDeflection2D()
+  {
+    SMESH::Deflection2D_i* aServant = new SMESH::Deflection2D_i();
+    SMESH::Deflection2D_var   anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateDeflection2D()";
+    return anObj._retn();
+  }
 
-NodeConnectivityNumber_ptr FilterManager_i::CreateNodeConnectivityNumber()
-{
-  SMESH::NodeConnectivityNumber_i* aServant = new SMESH::NodeConnectivityNumber_i();
-  SMESH::NodeConnectivityNumber_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateNodeConnectivityNumber()";
-  return anObj._retn();
-}
+  MultiConnection_ptr FilterManager_i::CreateMultiConnection()
+  {
+    SMESH::MultiConnection_i* aServant = new SMESH::MultiConnection_i();
+    SMESH::MultiConnection_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateMultiConnection()";
+    return anObj._retn();
+  }
 
-BelongToMeshGroup_ptr FilterManager_i::CreateBelongToMeshGroup()
-{
-  SMESH::BelongToMeshGroup_i* aServant = new SMESH::BelongToMeshGroup_i();
-  SMESH::BelongToMeshGroup_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateBelongToMeshGroup()";
-  return anObj._retn();
-}
+  MultiConnection2D_ptr FilterManager_i::CreateMultiConnection2D()
+  {
+    SMESH::MultiConnection2D_i* aServant = new SMESH::MultiConnection2D_i();
+    SMESH::MultiConnection2D_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateMultiConnection2D()";
+    return anObj._retn();
+  }
 
-BelongToGeom_ptr FilterManager_i::CreateBelongToGeom()
-{
-  SMESH::BelongToGeom_i* aServant = new SMESH::BelongToGeom_i();
-  SMESH::BelongToGeom_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateBelongToGeom()";
-  return anObj._retn();
-}
+  BallDiameter_ptr FilterManager_i::CreateBallDiameter()
+  {
+    SMESH::BallDiameter_i* aServant = new SMESH::BallDiameter_i();
+    SMESH::BallDiameter_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateBallDiameter()";
+    return anObj._retn();
+  }
 
-BelongToPlane_ptr FilterManager_i::CreateBelongToPlane()
-{
-  SMESH::BelongToPlane_i* aServant = new SMESH::BelongToPlane_i();
-  SMESH::BelongToPlane_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateBelongToPlane()";
-  return anObj._retn();
-}
+  NodeConnectivityNumber_ptr FilterManager_i::CreateNodeConnectivityNumber()
+  {
+    SMESH::NodeConnectivityNumber_i* aServant = new SMESH::NodeConnectivityNumber_i();
+    SMESH::NodeConnectivityNumber_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateNodeConnectivityNumber()";
+    return anObj._retn();
+  }
 
-BelongToCylinder_ptr FilterManager_i::CreateBelongToCylinder()
-{
-  SMESH::BelongToCylinder_i* aServant = new SMESH::BelongToCylinder_i();
-  SMESH::BelongToCylinder_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateBelongToCylinder()";
-  return anObj._retn();
-}
+  BelongToMeshGroup_ptr FilterManager_i::CreateBelongToMeshGroup()
+  {
+    SMESH::BelongToMeshGroup_i* aServant = new SMESH::BelongToMeshGroup_i();
+    SMESH::BelongToMeshGroup_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateBelongToMeshGroup()";
+    return anObj._retn();
+  }
 
-BelongToGenSurface_ptr FilterManager_i::CreateBelongToGenSurface()
-{
-  SMESH::BelongToGenSurface_i* aServant = new SMESH::BelongToGenSurface_i();
-  SMESH::BelongToGenSurface_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateBelongToGenSurface()";
-  return anObj._retn();
-}
+  BelongToGeom_ptr FilterManager_i::CreateBelongToGeom()
+  {
+    SMESH::BelongToGeom_i* aServant = new SMESH::BelongToGeom_i();
+    SMESH::BelongToGeom_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateBelongToGeom()";
+    return anObj._retn();
+  }
 
-LyingOnGeom_ptr FilterManager_i::CreateLyingOnGeom()
-{
-  SMESH::LyingOnGeom_i* aServant = new SMESH::LyingOnGeom_i();
-  SMESH::LyingOnGeom_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateLyingOnGeom()";
-  return anObj._retn();
-}
+  BelongToPlane_ptr FilterManager_i::CreateBelongToPlane()
+  {
+    SMESH::BelongToPlane_i* aServant = new SMESH::BelongToPlane_i();
+    SMESH::BelongToPlane_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateBelongToPlane()";
+    return anObj._retn();
+  }
 
-CoplanarFaces_ptr FilterManager_i::CreateCoplanarFaces()
-{
-  SMESH::CoplanarFaces_i* aServant = new SMESH::CoplanarFaces_i();
-  SMESH::CoplanarFaces_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateCoplanarFaces()";
-  return anObj._retn();
-}
+  BelongToCylinder_ptr FilterManager_i::CreateBelongToCylinder()
+  {
+    SMESH::BelongToCylinder_i* aServant = new SMESH::BelongToCylinder_i();
+    SMESH::BelongToCylinder_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateBelongToCylinder()";
+    return anObj._retn();
+  }
 
-ConnectedElements_ptr FilterManager_i::CreateConnectedElements()
-{
-  SMESH::ConnectedElements_i* aServant = new SMESH::ConnectedElements_i();
-  SMESH::ConnectedElements_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateConnectedElements()";
-  return anObj._retn();
-}
+  BelongToGenSurface_ptr FilterManager_i::CreateBelongToGenSurface()
+  {
+    SMESH::BelongToGenSurface_i* aServant = new SMESH::BelongToGenSurface_i();
+    SMESH::BelongToGenSurface_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateBelongToGenSurface()";
+    return anObj._retn();
+  }
 
-FreeBorders_ptr FilterManager_i::CreateFreeBorders()
-{
-  SMESH::FreeBorders_i* aServant = new SMESH::FreeBorders_i();
-  SMESH::FreeBorders_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateFreeBorders()";
-  return anObj._retn();
-}
+  LyingOnGeom_ptr FilterManager_i::CreateLyingOnGeom()
+  {
+    SMESH::LyingOnGeom_i* aServant = new SMESH::LyingOnGeom_i();
+    SMESH::LyingOnGeom_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateLyingOnGeom()";
+    return anObj._retn();
+  }
 
-FreeEdges_ptr FilterManager_i::CreateFreeEdges()
-{
-  SMESH::FreeEdges_i* aServant = new SMESH::FreeEdges_i();
-  SMESH::FreeEdges_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateFreeEdges()";
-  return anObj._retn();
-}
+  CoplanarFaces_ptr FilterManager_i::CreateCoplanarFaces()
+  {
+    SMESH::CoplanarFaces_i* aServant = new SMESH::CoplanarFaces_i();
+    SMESH::CoplanarFaces_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateCoplanarFaces()";
+    return anObj._retn();
+  }
 
-FreeFaces_ptr FilterManager_i::CreateFreeFaces()
-{
-  SMESH::FreeFaces_i* aServant = new SMESH::FreeFaces_i();
-  SMESH::FreeFaces_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateFreeFaces()";
-  return anObj._retn();
-}
+  ConnectedElements_ptr FilterManager_i::CreateConnectedElements()
+  {
+    SMESH::ConnectedElements_i* aServant = new SMESH::ConnectedElements_i();
+    SMESH::ConnectedElements_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateConnectedElements()";
+    return anObj._retn();
+  }
 
-FreeNodes_ptr FilterManager_i::CreateFreeNodes()
-{
-  SMESH::FreeNodes_i* aServant = new SMESH::FreeNodes_i();
-  SMESH::FreeNodes_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateFreeNodes()";
-  return anObj._retn();
-}
+  FreeBorders_ptr FilterManager_i::CreateFreeBorders()
+  {
+    SMESH::FreeBorders_i* aServant = new SMESH::FreeBorders_i();
+    SMESH::FreeBorders_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateFreeBorders()";
+    return anObj._retn();
+  }
 
-EqualNodes_ptr FilterManager_i::CreateEqualNodes()
-{
-  SMESH::EqualNodes_i* aServant = new SMESH::EqualNodes_i();
-  SMESH::EqualNodes_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateEqualNodes()";
-  return anObj._retn();
-}
+  FreeEdges_ptr FilterManager_i::CreateFreeEdges()
+  {
+    SMESH::FreeEdges_i* aServant = new SMESH::FreeEdges_i();
+    SMESH::FreeEdges_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateFreeEdges()";
+    return anObj._retn();
+  }
 
-EqualEdges_ptr FilterManager_i::CreateEqualEdges()
-{
-  SMESH::EqualEdges_i* aServant = new SMESH::EqualEdges_i();
-  SMESH::EqualEdges_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateEqualEdges()";
-  return anObj._retn();
-}
-EqualFaces_ptr FilterManager_i::CreateEqualFaces()
-{
-  SMESH::EqualFaces_i* aServant = new SMESH::EqualFaces_i();
-  SMESH::EqualFaces_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateEqualFaces()";
-  return anObj._retn();
-}
-EqualVolumes_ptr FilterManager_i::CreateEqualVolumes()
-{
-  SMESH::EqualVolumes_i* aServant = new SMESH::EqualVolumes_i();
-  SMESH::EqualVolumes_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateEqualVolumes()";
-  return anObj._retn();
-}
+  FreeFaces_ptr FilterManager_i::CreateFreeFaces()
+  {
+    SMESH::FreeFaces_i* aServant = new SMESH::FreeFaces_i();
+    SMESH::FreeFaces_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateFreeFaces()";
+    return anObj._retn();
+  }
 
-RangeOfIds_ptr FilterManager_i::CreateRangeOfIds()
-{
-  SMESH::RangeOfIds_i* aServant = new SMESH::RangeOfIds_i();
-  SMESH::RangeOfIds_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateRangeOfIds()";
-  return anObj._retn();
-}
+  FreeNodes_ptr FilterManager_i::CreateFreeNodes()
+  {
+    SMESH::FreeNodes_i* aServant = new SMESH::FreeNodes_i();
+    SMESH::FreeNodes_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateFreeNodes()";
+    return anObj._retn();
+  }
 
-BadOrientedVolume_ptr FilterManager_i::CreateBadOrientedVolume()
-{
-  SMESH::BadOrientedVolume_i* aServant = new SMESH::BadOrientedVolume_i();
-  SMESH::BadOrientedVolume_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateBadOrientedVolume()";
-  return anObj._retn();
-}
+  EqualNodes_ptr FilterManager_i::CreateEqualNodes()
+  {
+    SMESH::EqualNodes_i* aServant = new SMESH::EqualNodes_i();
+    SMESH::EqualNodes_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateEqualNodes()";
+    return anObj._retn();
+  }
 
-BareBorderVolume_ptr FilterManager_i::CreateBareBorderVolume()
-{
-  SMESH::BareBorderVolume_i* aServant = new SMESH::BareBorderVolume_i();
-  SMESH::BareBorderVolume_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateBareBorderVolume()";
-  return anObj._retn();
-}
+  EqualEdges_ptr FilterManager_i::CreateEqualEdges()
+  {
+    SMESH::EqualEdges_i* aServant = new SMESH::EqualEdges_i();
+    SMESH::EqualEdges_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateEqualEdges()";
+    return anObj._retn();
+  }
+  EqualFaces_ptr FilterManager_i::CreateEqualFaces()
+  {
+    SMESH::EqualFaces_i* aServant = new SMESH::EqualFaces_i();
+    SMESH::EqualFaces_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateEqualFaces()";
+    return anObj._retn();
+  }
+  EqualVolumes_ptr FilterManager_i::CreateEqualVolumes()
+  {
+    SMESH::EqualVolumes_i* aServant = new SMESH::EqualVolumes_i();
+    SMESH::EqualVolumes_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateEqualVolumes()";
+    return anObj._retn();
+  }
 
-BareBorderFace_ptr FilterManager_i::CreateBareBorderFace()
-{
-  SMESH::BareBorderFace_i* aServant = new SMESH::BareBorderFace_i();
-  SMESH::BareBorderFace_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateBareBorderFace()";
-  return anObj._retn();
-}
+  RangeOfIds_ptr FilterManager_i::CreateRangeOfIds()
+  {
+    SMESH::RangeOfIds_i* aServant = new SMESH::RangeOfIds_i();
+    SMESH::RangeOfIds_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateRangeOfIds()";
+    return anObj._retn();
+  }
 
-OverConstrainedVolume_ptr FilterManager_i::CreateOverConstrainedVolume()
-{
-  SMESH::OverConstrainedVolume_i* aServant = new SMESH::OverConstrainedVolume_i();
-  SMESH::OverConstrainedVolume_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateOverConstrainedVolume()";
-  return anObj._retn();
-}
+  BadOrientedVolume_ptr FilterManager_i::CreateBadOrientedVolume()
+  {
+    SMESH::BadOrientedVolume_i* aServant = new SMESH::BadOrientedVolume_i();
+    SMESH::BadOrientedVolume_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateBadOrientedVolume()";
+    return anObj._retn();
+  }
 
-OverConstrainedFace_ptr FilterManager_i::CreateOverConstrainedFace()
-{
-  SMESH::OverConstrainedFace_i* aServant = new SMESH::OverConstrainedFace_i();
-  SMESH::OverConstrainedFace_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateOverConstrainedFace()";
-  return anObj._retn();
-}
+  BareBorderVolume_ptr FilterManager_i::CreateBareBorderVolume()
+  {
+    SMESH::BareBorderVolume_i* aServant = new SMESH::BareBorderVolume_i();
+    SMESH::BareBorderVolume_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateBareBorderVolume()";
+    return anObj._retn();
+  }
 
-LessThan_ptr FilterManager_i::CreateLessThan()
-{
-  SMESH::LessThan_i* aServant = new SMESH::LessThan_i();
-  SMESH::LessThan_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateLessThan()";
-  return anObj._retn();
-}
+  BareBorderFace_ptr FilterManager_i::CreateBareBorderFace()
+  {
+    SMESH::BareBorderFace_i* aServant = new SMESH::BareBorderFace_i();
+    SMESH::BareBorderFace_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateBareBorderFace()";
+    return anObj._retn();
+  }
 
-MoreThan_ptr FilterManager_i::CreateMoreThan()
-{
-  SMESH::MoreThan_i* aServant = new SMESH::MoreThan_i();
-  SMESH::MoreThan_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateMoreThan()";
-  return anObj._retn();
-}
+  OverConstrainedVolume_ptr FilterManager_i::CreateOverConstrainedVolume()
+  {
+    SMESH::OverConstrainedVolume_i* aServant = new SMESH::OverConstrainedVolume_i();
+    SMESH::OverConstrainedVolume_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateOverConstrainedVolume()";
+    return anObj._retn();
+  }
 
-EqualTo_ptr FilterManager_i::CreateEqualTo()
-{
-  SMESH::EqualTo_i* aServant = new SMESH::EqualTo_i();
-  SMESH::EqualTo_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateEqualTo()";
-  return anObj._retn();
-}
+  OverConstrainedFace_ptr FilterManager_i::CreateOverConstrainedFace()
+  {
+    SMESH::OverConstrainedFace_i* aServant = new SMESH::OverConstrainedFace_i();
+    SMESH::OverConstrainedFace_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateOverConstrainedFace()";
+    return anObj._retn();
+  }
 
-LogicalNOT_ptr FilterManager_i::CreateLogicalNOT()
-{
-  SMESH::LogicalNOT_i* aServant = new SMESH::LogicalNOT_i();
-  SMESH::LogicalNOT_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateLogicalNOT()";
-  return anObj._retn();
-}
+  LessThan_ptr FilterManager_i::CreateLessThan()
+  {
+    SMESH::LessThan_i* aServant = new SMESH::LessThan_i();
+    SMESH::LessThan_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateLessThan()";
+    return anObj._retn();
+  }
 
-LogicalAND_ptr FilterManager_i::CreateLogicalAND()
-{
-  SMESH::LogicalAND_i* aServant = new SMESH::LogicalAND_i();
-  SMESH::LogicalAND_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateLogicalAND()";
-  return anObj._retn();
-}
+  MoreThan_ptr FilterManager_i::CreateMoreThan()
+  {
+    SMESH::MoreThan_i* aServant = new SMESH::MoreThan_i();
+    SMESH::MoreThan_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateMoreThan()";
+    return anObj._retn();
+  }
 
-LogicalOR_ptr FilterManager_i::CreateLogicalOR()
-{
-  SMESH::LogicalOR_i* aServant = new SMESH::LogicalOR_i();
-  SMESH::LogicalOR_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateLogicalOR()";
-  return anObj._retn();
-}
+  EqualTo_ptr FilterManager_i::CreateEqualTo()
+  {
+    SMESH::EqualTo_i* aServant = new SMESH::EqualTo_i();
+    SMESH::EqualTo_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateEqualTo()";
+    return anObj._retn();
+  }
 
-LinearOrQuadratic_ptr FilterManager_i::CreateLinearOrQuadratic()
-{
-  SMESH::LinearOrQuadratic_i* aServant = new SMESH::LinearOrQuadratic_i();
-  SMESH::LinearOrQuadratic_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateLinearOrQuadratic()";
-  return anObj._retn();
-}
+  LogicalNOT_ptr FilterManager_i::CreateLogicalNOT()
+  {
+    SMESH::LogicalNOT_i* aServant = new SMESH::LogicalNOT_i();
+    SMESH::LogicalNOT_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateLogicalNOT()";
+    return anObj._retn();
+  }
 
-GroupColor_ptr FilterManager_i::CreateGroupColor()
-{
-  SMESH::GroupColor_i* aServant = new SMESH::GroupColor_i();
-  SMESH::GroupColor_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateGroupColor()";
-  return anObj._retn();
-}
+  LogicalAND_ptr FilterManager_i::CreateLogicalAND()
+  {
+    SMESH::LogicalAND_i* aServant = new SMESH::LogicalAND_i();
+    SMESH::LogicalAND_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateLogicalAND()";
+    return anObj._retn();
+  }
 
-ElemGeomType_ptr FilterManager_i::CreateElemGeomType()
-{
-  SMESH::ElemGeomType_i* aServant = new SMESH::ElemGeomType_i();
-  SMESH::ElemGeomType_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateElemGeomType()";
-  return anObj._retn();
-}
+  LogicalOR_ptr FilterManager_i::CreateLogicalOR()
+  {
+    SMESH::LogicalOR_i* aServant = new SMESH::LogicalOR_i();
+    SMESH::LogicalOR_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateLogicalOR()";
+    return anObj._retn();
+  }
 
-ElemEntityType_ptr FilterManager_i::CreateElemEntityType()
-{
-  SMESH::ElemEntityType_i* aServant = new SMESH::ElemEntityType_i();
-  SMESH::ElemEntityType_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateElemEntityType()";
-  return anObj._retn();
-}
+  LinearOrQuadratic_ptr FilterManager_i::CreateLinearOrQuadratic()
+  {
+    SMESH::LinearOrQuadratic_i* aServant = new SMESH::LinearOrQuadratic_i();
+    SMESH::LinearOrQuadratic_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateLinearOrQuadratic()";
+    return anObj._retn();
+  }
 
-Filter_ptr FilterManager_i::CreateFilter()
-{
-  SMESH::Filter_i* aServant = new SMESH::Filter_i();
-  SMESH::Filter_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateFilter()";
-  return anObj._retn();
-}
+  GroupColor_ptr FilterManager_i::CreateGroupColor()
+  {
+    SMESH::GroupColor_i* aServant = new SMESH::GroupColor_i();
+    SMESH::GroupColor_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateGroupColor()";
+    return anObj._retn();
+  }
 
-FilterLibrary_ptr FilterManager_i::LoadLibrary( const char* aFileName )
-{
-  SMESH::FilterLibrary_i* aServant = new SMESH::FilterLibrary_i( aFileName );
-  SMESH::FilterLibrary_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".LoadLibrary('"<<aFileName<<"')";
-  return anObj._retn();
-}
+  ElemGeomType_ptr FilterManager_i::CreateElemGeomType()
+  {
+    SMESH::ElemGeomType_i* aServant = new SMESH::ElemGeomType_i();
+    SMESH::ElemGeomType_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateElemGeomType()";
+    return anObj._retn();
+  }
 
-FilterLibrary_ptr FilterManager_i::CreateLibrary()
-{
-  SMESH::FilterLibrary_i* aServant = new SMESH::FilterLibrary_i();
-  SMESH::FilterLibrary_var anObj = aServant->_this();
-  TPythonDump()<<aServant<<" = "<<this<<".CreateLibrary()";
-  return anObj._retn();
-}
+  ElemEntityType_ptr FilterManager_i::CreateElemEntityType()
+  {
+    SMESH::ElemEntityType_i* aServant = new SMESH::ElemEntityType_i();
+    SMESH::ElemEntityType_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateElemEntityType()";
+    return anObj._retn();
+  }
 
-CORBA::Boolean FilterManager_i::DeleteLibrary( const char* aFileName )
-{
-  TPythonDump()<<this<<".DeleteLibrary("<<aFileName<<")";
-  return remove( aFileName ) ? false : true;
-}
+  Filter_ptr FilterManager_i::CreateFilter()
+  {
+    SMESH::Filter_i* aServant = new SMESH::Filter_i();
+    SMESH::Filter_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateFilter()";
+    return anObj._retn();
+  }
 
-//=============================================================================
-/*!
- *  SMESH_Gen_i::CreateFilterManager
- *
- *  Create filter manager
- */
-//=============================================================================
+  FilterLibrary_ptr FilterManager_i::LoadLibrary( const char* aFileName )
+  {
+    SMESH::FilterLibrary_i* aServant = new SMESH::FilterLibrary_i( aFileName );
+    SMESH::FilterLibrary_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".LoadLibrary('"<<aFileName<<"')";
+    return anObj._retn();
+  }
 
-SMESH::FilterManager_ptr SMESH_Gen_i::CreateFilterManager()
-{
-  SMESH::FilterManager_i* aFilter = new SMESH::FilterManager_i();
-  SMESH::FilterManager_var anObj = aFilter->_this();
-  return anObj._retn();
-}
+  FilterLibrary_ptr FilterManager_i::CreateLibrary()
+  {
+    SMESH::FilterLibrary_i* aServant = new SMESH::FilterLibrary_i();
+    SMESH::FilterLibrary_var anObj = aServant->_this();
+    TPythonDump()<<aServant<<" = "<<this<<".CreateLibrary()";
+    return anObj._retn();
+  }
 
+  CORBA::Boolean FilterManager_i::DeleteLibrary( const char* aFileName )
+  {
+    TPythonDump()<<this<<".DeleteLibrary("<<aFileName<<")";
+    return remove( aFileName ) ? false : true;
+  }
 
-/*
-                              FILTER
-*/
+  /*
+                                FILTER
+  */
+
+  //=======================================================================
+  // name    : Filter_i::Filter_i
+  // Purpose : Constructor
+  //=======================================================================
+  Filter_i::Filter_i()
+  : myPredicate( NULL )
+  {}
+
+  //=======================================================================
+  // name    : Filter_i::~Filter_i
+  // Purpose : Destructor
+  //=======================================================================
+  Filter_i::~Filter_i()
+  {
+    if ( myPredicate )
+      myPredicate->UnRegister();
 
-//=======================================================================
-// name    : Filter_i::Filter_i
-// Purpose : Constructor
-//=======================================================================
-Filter_i::Filter_i()
-: myPredicate( NULL )
-{}
-
-//=======================================================================
-// name    : Filter_i::~Filter_i
-// Purpose : Destructor
-//=======================================================================
-Filter_i::~Filter_i()
-{
-  if ( myPredicate )
-    myPredicate->UnRegister();
+    if(!CORBA::is_nil(myMesh))
+      myMesh->UnRegister();
 
-  if(!CORBA::is_nil(myMesh))
-    myMesh->UnRegister();
+    myPredicate = 0;
+    FindBaseObjects();
+  }
 
-  myPredicate = 0;
-  FindBaseObjects();
-}
+  //=======================================================================
+  // name    : Filter_i::SetPredicate
+  // Purpose : Set predicate
+  //=======================================================================
+  void Filter_i::SetPredicate( Predicate_ptr thePredicate )
+  {
+    if ( myPredicate )
+      myPredicate->UnRegister();
 
-//=======================================================================
-// name    : Filter_i::SetPredicate
-// Purpose : Set predicate
-//=======================================================================
-void Filter_i::SetPredicate( Predicate_ptr thePredicate )
-{
-  if ( myPredicate )
-    myPredicate->UnRegister();
+    myPredicate = SMESH::GetPredicate(thePredicate);
 
-  myPredicate = SMESH::GetPredicate(thePredicate);
+    if ( myPredicate )
+    {
+      myFilter.SetPredicate( myPredicate->GetPredicate() );
+      myPredicate->Register();
+      if ( const SMDS_Mesh* aMesh = MeshPtr2SMDSMesh(myMesh))
+        myPredicate->GetPredicate()->SetMesh( aMesh );
+      TPythonDump()<<this<<".SetPredicate("<<myPredicate<<")";
+    }
+    NotifyerAndWaiter::Modified();
+  }
 
-  if ( myPredicate )
+  //=======================================================================
+  // name    : Filter_i::GetElementType
+  // Purpose : Get entity type
+  //=======================================================================
+  SMESH::ElementType Filter_i::GetElementType()
   {
-    myFilter.SetPredicate( myPredicate->GetPredicate() );
-    myPredicate->Register();
-    if ( const SMDS_Mesh* aMesh = MeshPtr2SMDSMesh(myMesh))
-      myPredicate->GetPredicate()->SetMesh( aMesh );
-    TPythonDump()<<this<<".SetPredicate("<<myPredicate<<")";
+    return myPredicate != 0 ? myPredicate->GetElementType() : SMESH::ALL;
   }
-  NotifyerAndWaiter::Modified();
-}
-
-//=======================================================================
-// name    : Filter_i::GetElementType
-// Purpose : Get entity type
-//=======================================================================
-SMESH::ElementType Filter_i::GetElementType()
-{
-  return myPredicate != 0 ? myPredicate->GetElementType() : SMESH::ALL;
-}
 
-//=======================================================================
-// name    : Filter_i::SetMesh
-// Purpose : Set mesh
-//=======================================================================
-void
-Filter_i::
-SetMesh( SMESH_Mesh_ptr theMesh )
-{
-  if(!CORBA::is_nil(theMesh))
-    theMesh->Register();
+  //=======================================================================
+  // name    : Filter_i::SetMesh
+  // Purpose : Set mesh
+  //=======================================================================
+  void
+  Filter_i::
+  SetMesh( SMESH_Mesh_ptr theMesh )
+  {
+    if(!CORBA::is_nil(theMesh))
+      theMesh->Register();
 
-  if(!CORBA::is_nil(myMesh))
-    myMesh->UnRegister();
+    if(!CORBA::is_nil(myMesh))
+      myMesh->UnRegister();
 
-  myMesh = SMESH_Mesh::_duplicate( theMesh );
-  TPythonDump()<<this<<".SetMesh("<<theMesh<<")";
+    myMesh = SMESH_Mesh::_duplicate( theMesh );
+    TPythonDump()<<this<<".SetMesh("<<theMesh<<")";
 
-  if ( myPredicate )
-    if ( const SMDS_Mesh* aMesh = MeshPtr2SMDSMesh(theMesh))
-      myPredicate->GetPredicate()->SetMesh( aMesh );
-}
+    if ( myPredicate )
+      if ( const SMDS_Mesh* aMesh = MeshPtr2SMDSMesh(theMesh))
+        myPredicate->GetPredicate()->SetMesh( aMesh );
+  }
 
-SMESH::long_array*
-Filter_i::
-GetIDs()
-{
-  return GetElementsId(myMesh);
-}
+  SMESH::smIdType_array*
+  Filter_i::
+  GetIDs()
+  {
+    return GetElementsId(myMesh);
+  }
 
-//=======================================================================
-// name    : Filter_i::GetElementsId
-// Purpose : Get ids of entities
-//=======================================================================
-void
-Filter_i::
-GetElementsId( Predicate_i* thePredicate,
-               const SMDS_Mesh* theMesh,
-               Controls::Filter::TIdSequence& theSequence )
-{
-  if (thePredicate)
-    Controls::Filter::GetElementsId(theMesh,thePredicate->GetPredicate(),theSequence);
-}
+  //=======================================================================
+  // name    : Filter_i::GetElementsId
+  // Purpose : Get ids of entities
+  //=======================================================================
+  void
+  Filter_i::
+  GetElementsId( Predicate_i* thePredicate,
+                 const SMDS_Mesh* theMesh,
+                 Controls::Filter::TIdSequence& theSequence )
+  {
+    if (thePredicate)
+      Controls::Filter::GetElementsId(theMesh,thePredicate->GetPredicate(),theSequence);
+  }
 
-void
-Filter_i::
-GetElementsId( Predicate_i* thePredicate,
-               SMESH_Mesh_ptr theMesh,
-               Controls::Filter::TIdSequence& theSequence )
-{
-  if (thePredicate) 
-    if(const SMDS_Mesh* aMesh = MeshPtr2SMDSMesh(theMesh))
-      Controls::Filter::GetElementsId(aMesh,thePredicate->GetPredicate(),theSequence);
-}
+  void
+  Filter_i::
+  GetElementsId( Predicate_i* thePredicate,
+                 SMESH_Mesh_ptr theMesh,
+                 Controls::Filter::TIdSequence& theSequence )
+  {
+    if (thePredicate) 
+      if(const SMDS_Mesh* aMesh = MeshPtr2SMDSMesh(theMesh))
+        Controls::Filter::GetElementsId(aMesh,thePredicate->GetPredicate(),theSequence);
+  }
 
-SMESH::long_array*
-Filter_i::
-GetElementsId( SMESH_Mesh_ptr theMesh )
-{
-  SMESH::long_array_var anArray = new SMESH::long_array;
-  if(!CORBA::is_nil(theMesh) && myPredicate){
-    theMesh->Load();
-    Controls::Filter::TIdSequence aSequence;
-    GetElementsId(myPredicate,theMesh,aSequence);
-    long i = 0, iEnd = aSequence.size();
-    anArray->length( iEnd );
-    for ( ; i < iEnd; i++ )
-      anArray[ i ] = aSequence[i];
+  SMESH::smIdType_array*
+  Filter_i::
+  GetElementsId( SMESH_Mesh_ptr theMesh )
+  {
+    SMESH::smIdType_array_var anArray = new SMESH::smIdType_array;
+    if(!CORBA::is_nil(theMesh) && myPredicate){
+      theMesh->Load();
+      Controls::Filter::TIdSequence aSequence;
+      GetElementsId(myPredicate,theMesh,aSequence);
+      long i = 0, iEnd = aSequence.size();
+      anArray->length( iEnd );
+      for ( ; i < iEnd; i++ )
+        anArray[ i ] = aSequence[i];
+    }
+    return anArray._retn();
   }
-  return anArray._retn();
-}
 
-SMESH::long_array*
-Filter_i::
-GetElementsIdFromParts( const ListOfIDSources& theParts )
-{
-  SMESH::long_array_var array = new SMESH::long_array;
-  if ( theParts.length() > 0 && myPredicate )
-  {
-    SMESH_Mesh_ptr mesh = theParts[0]->GetMesh();
-    mesh->Load();
-    const SMDS_Mesh* meshDS = MeshPtr2SMDSMesh( mesh );
-    Controls::Filter::TIdSequence totalSequence;
-    for ( CORBA::ULong i = 0; i < theParts.length(); ++i )
+  SMESH::smIdType_array*
+  Filter_i::
+  GetElementsIdFromParts( const ListOfIDSources& theParts )
+  {
+    SMESH::smIdType_array_var array = new SMESH::smIdType_array;
+    if ( theParts.length() > 0 && myPredicate )
     {
-      if ( SMESH::Filter_i* filter = SMESH::DownCast<SMESH::Filter_i*>( theParts[i] ))
-        filter->SetMesh( mesh );
-      SMDS_ElemIteratorPtr iter = SMESH_Mesh_i::GetElements( theParts[i], GetElementType() );
-      if ( iter && meshDS )
+      SMESH_Mesh_ptr mesh = theParts[0]->GetMesh();
+      mesh->Load();
+      const SMDS_Mesh* meshDS = MeshPtr2SMDSMesh( mesh );
+      Controls::Filter::TIdSequence totalSequence;
+      for ( CORBA::ULong i = 0; i < theParts.length(); ++i )
       {
-        Controls::Filter::TIdSequence sequence;
-        Controls::Filter::GetElementsId( meshDS, myPredicate->GetPredicate(), sequence, iter );
-        totalSequence.insert( totalSequence.end(), sequence.begin(), sequence.end() );
+        if ( SMESH::Filter_i* filter = SMESH::DownCast<SMESH::Filter_i*>( theParts[i] ))
+          filter->SetMesh( mesh );
+        SMDS_ElemIteratorPtr iter = SMESH_Mesh_i::GetElements( theParts[i], GetElementType() );
+        if ( iter && meshDS )
+        {
+          Controls::Filter::TIdSequence sequence;
+          Controls::Filter::GetElementsId( meshDS, myPredicate->GetPredicate(), sequence, iter );
+          totalSequence.insert( totalSequence.end(), sequence.begin(), sequence.end() );
+        }
       }
+      array->length( totalSequence.size() );
+      for ( size_t i = 0; i < totalSequence.size(); ++i )
+        array[ i ] = totalSequence[ i ];
     }
-    array->length( totalSequence.size() );
-    for ( size_t i = 0; i < totalSequence.size(); ++i )
-      array[ i ] = totalSequence[ i ];
+    return array._retn();
   }
-  return array._retn();
-}
 
-//=============================================================================
-/*!
- * \brief Returns number of mesh elements per each \a EntityType
- */
-//=============================================================================
-
-SMESH::long_array* ::Filter_i::GetMeshInfo()
-{
-  SMESH::long_array_var aRes = new SMESH::long_array();
-  aRes->length(SMESH::Entity_Last);
-  for (int i = 0; i < SMESH::Entity_Last; i++)
-    aRes[i] = 0;
+  //=============================================================================
+  /*!
+   * \brief Returns number of mesh elements per each \a EntityType
+   */
+  //=============================================================================
 
-  if ( !CORBA::is_nil(myMesh) && myPredicate )
+  SMESH::smIdType_array* Filter_i::GetMeshInfo()
   {
-    const SMDS_Mesh*  aMesh = MeshPtr2SMDSMesh(myMesh);
-    SMDS_ElemIteratorPtr it = aMesh->elementsIterator( SMDSAbs_ElementType( GetElementType() ));
-    while ( it->more() )
+    SMESH::smIdType_array_var aRes = new SMESH::smIdType_array();
+    aRes->length(SMESH::Entity_Last);
+    for (int i = 0; i < SMESH::Entity_Last; i++)
+      aRes[i] = 0;
+
+    if ( !CORBA::is_nil(myMesh) && myPredicate )
     {
-      const SMDS_MeshElement* anElem = it->next();
-      if ( myPredicate->IsSatisfy( anElem->GetID() ) )
-        aRes[ anElem->GetEntityType() ]++;
+      const SMDS_Mesh*  aMesh = MeshPtr2SMDSMesh(myMesh);
+      SMDS_ElemIteratorPtr it = aMesh->elementsIterator( SMDSAbs_ElementType( GetElementType() ));
+      while ( it->more() )
+      {
+        const SMDS_MeshElement* anElem = it->next();
+        if ( myPredicate->IsSatisfy( anElem->GetID() ) )
+          aRes[ anElem->GetEntityType() ]++;
+      }
     }
+
+    return aRes._retn();  
   }
 
-  return aRes._retn();  
-}
+  //=============================================================================
+  /*!
+   * \brief Returns number of mesh elements of each \a ElementType
+   */
+  //=============================================================================
 
-//=============================================================================
-/*!
- * \brief Returns number of mesh elements of each \a ElementType
- */
-//=============================================================================
-
-SMESH::long_array* ::Filter_i::GetNbElementsByType()
-{
-  SMESH::long_array_var aRes = new SMESH::long_array();
-  aRes->length(SMESH::NB_ELEMENT_TYPES);
-  for (int i = 0; i < SMESH::NB_ELEMENT_TYPES; i++)
-    aRes[i] = 0;
-
-  if ( !CORBA::is_nil(myMesh) && myPredicate ) {
-    const SMDS_Mesh*  aMesh = MeshPtr2SMDSMesh(myMesh);
-    SMDS_ElemIteratorPtr it = aMesh->elementsIterator( SMDSAbs_ElementType( GetElementType() ));
-    CORBA::Long& nbElems = aRes[ GetElementType() ];
-    while ( it->more() )
-    {
-      const SMDS_MeshElement* anElem = it->next();
-      if ( myPredicate->IsSatisfy( anElem->GetID() ) )
-        nbElems++;
+  SMESH::smIdType_array* Filter_i::GetNbElementsByType()
+  {
+    SMESH::smIdType_array_var aRes = new SMESH::smIdType_array();
+    aRes->length(SMESH::NB_ELEMENT_TYPES);
+    for (int i = 0; i < SMESH::NB_ELEMENT_TYPES; i++)
+      aRes[i] = 0;
+
+    if ( !CORBA::is_nil(myMesh) && myPredicate ) {
+      const SMDS_Mesh*  aMesh = MeshPtr2SMDSMesh(myMesh);
+      SMDS_ElemIteratorPtr it = aMesh->elementsIterator( SMDSAbs_ElementType( GetElementType() ));
+      SMESH::smIdType& nbElems = aRes[ GetElementType() ];
+      while ( it->more() )
+      {
+        const SMDS_MeshElement* anElem = it->next();
+        if ( myPredicate->IsSatisfy( anElem->GetID() ) )
+          nbElems++;
+      }
     }
+
+    return aRes._retn();  
   }
 
-  return aRes._retn();  
-}
 
+  //================================================================================
+  /*!
+   * \brief Return GetElementType() within an array
+   * Implement SMESH_IDSource interface
+   */
+  //================================================================================
 
-//================================================================================
-/*!
- * \brief Return GetElementType() within an array
- * Implement SMESH_IDSource interface
- */
-//================================================================================
+  SMESH::array_of_ElementType* Filter_i::GetTypes()
+  {
+    SMESH::array_of_ElementType_var types = new SMESH::array_of_ElementType;
 
-SMESH::array_of_ElementType* Filter_i::GetTypes()
-{
-  SMESH::array_of_ElementType_var types = new SMESH::array_of_ElementType;
-
-  // check if any element passes through the filter
-  if ( !CORBA::is_nil(myMesh) && myPredicate )
-  {
-    const SMDS_Mesh* aMesh = MeshPtr2SMDSMesh(myMesh);
-    SMDS_ElemIteratorPtr it = aMesh->elementsIterator( SMDSAbs_ElementType( GetElementType() ));
-    bool satisfies = false;
-    while ( !satisfies && it->more() )
-      satisfies = myPredicate->IsSatisfy( it->next()->GetID() );
-    if ( satisfies ) {
-      types->length( 1 );
-      types[0] = GetElementType();
+    // check if any element passes through the filter
+    if ( !CORBA::is_nil(myMesh) && myPredicate )
+    {
+      const SMDS_Mesh* aMesh = MeshPtr2SMDSMesh(myMesh);
+      SMDS_ElemIteratorPtr it = aMesh->elementsIterator( SMDSAbs_ElementType( GetElementType() ));
+      bool satisfies = false;
+      while ( !satisfies && it->more() )
+        satisfies = myPredicate->IsSatisfy( it->next()->GetID() );
+      if ( satisfies ) {
+        types->length( 1 );
+        types[0] = GetElementType();
+      }
     }
+    return types._retn();
   }
-  return types._retn();
-}
-
-//=======================================================================
-//function : GetMesh
-//purpose  : Returns mesh
-//=======================================================================
-
-SMESH::SMESH_Mesh_ptr Filter_i::GetMesh()
-{
-  return SMESH_Mesh::_duplicate( myMesh );
-}
-
-//=======================================================================
-//function : GetVtkUgStream
-//purpose  : Return data vtk unstructured grid (not implemented)
-//=======================================================================
 
-SALOMEDS::TMPFile* Filter_i::GetVtkUgStream()
-{
-  SALOMEDS::TMPFile_var SeqFile;
-  return SeqFile._retn();
-}
-//=======================================================================
-// name    : getCriteria
-// Purpose : Retrieve criterions from predicate
-//=======================================================================
-static inline void getPrediacates( Predicate_i*                thePred,
-                                   std::vector<Predicate_i*> & thePredVec )
-{
-  const int aFType = thePred->GetFunctorType();
+  //=======================================================================
+  //function : GetMesh
+  //purpose  : Returns mesh
+  //=======================================================================
 
-  switch ( aFType )
-  {
-  case FT_LogicalNOT:
+  SMESH::SMESH_Mesh_ptr Filter_i::GetMesh()
   {
-    Predicate_i* aPred = ( dynamic_cast<LogicalNOT_i*>( thePred ) )->GetPredicate_i();
-    getPrediacates( aPred, thePredVec );
-    break;
+    return SMESH_Mesh::_duplicate( myMesh );
   }
-  case FT_LogicalAND:
-  case FT_LogicalOR:
-  {
-    Predicate_i* aPred1 = ( dynamic_cast<LogicalBinary_i*>( thePred ) )->GetPredicate1_i();
-    Predicate_i* aPred2 = ( dynamic_cast<LogicalBinary_i*>( thePred ) )->GetPredicate2_i();
-    getPrediacates( aPred1, thePredVec );
-    getPrediacates( aPred2, thePredVec );
-    break;
-   }
-  default:;
-  }
-  thePredVec.push_back( thePred );
-}
 
-//=======================================================================
-// name    : getCriteria
-// Purpose : Retrieve criterions from predicate
-//=======================================================================
-static inline bool getCriteria( Predicate_i*                thePred,
-                                SMESH::Filter::Criteria_out theCriteria )
-{
-  const int aFType = thePred->GetFunctorType();
+  //=======================================================================
+  //function : GetVtkUgStream
+  //purpose  : Return data vtk unstructured grid (not implemented)
+  //=======================================================================
 
-  switch ( aFType )
+  SALOMEDS::TMPFile* Filter_i::GetVtkUgStream()
   {
-  case FT_LogicalNOT:
-    {
-      Predicate_i* aPred = ( dynamic_cast<LogicalNOT_i*>( thePred ) )->GetPredicate_i();
-      getCriteria( aPred, theCriteria );
-      theCriteria[ theCriteria->length() - 1 ].UnaryOp = FT_LogicalNOT;
-    }
-    return true;
-
-  case FT_LogicalAND:
-  case FT_LogicalOR:
-    {
-      Predicate_i* aPred1 = ( dynamic_cast<LogicalBinary_i*>( thePred ) )->GetPredicate1_i();
-      Predicate_i* aPred2 = ( dynamic_cast<LogicalBinary_i*>( thePred ) )->GetPredicate2_i();
-      if ( !getCriteria( aPred1, theCriteria ) )
-        return false;
-      theCriteria[ theCriteria->length() - 1 ].BinaryOp = aFType;
-      return getCriteria( aPred2, theCriteria );
-    }
-  case FT_Undefined:
-    return false;
-  }
-
-  // resize theCriteria
-  CORBA::ULong i = theCriteria->length();
-  theCriteria->length( i + 1 );
-  theCriteria[ i ] = createCriterion();
-
-  // set members of the added Criterion
-
-  theCriteria[ i ].Type = aFType;
-  theCriteria[ i ].TypeOfElement = thePred->GetElementType();
-
-  switch ( aFType )
-  {
-  case FT_FreeBorders:
-  case FT_FreeEdges:
-  case FT_FreeFaces:
-  case FT_LinearOrQuadratic:
-  case FT_FreeNodes:
-  case FT_EqualEdges:
-  case FT_EqualFaces:
-  case FT_EqualVolumes:
-  case FT_BadOrientedVolume:
-  case FT_BareBorderVolume:
-  case FT_BareBorderFace:
-  case FT_OverConstrainedVolume:
-  case FT_OverConstrainedFace:
-    {
-      return true;
-    }
-  case FT_BelongToMeshGroup:
-    {
-      BelongToMeshGroup_i* aPred = dynamic_cast<BelongToMeshGroup_i*>( thePred );
-      SMESH::SMESH_GroupBase_var grp = aPred->GetGroup();
-      if ( !grp->_is_nil() )
-      {
-        theCriteria[ i ].ThresholdStr = grp->GetName();
-        theCriteria[ i ].ThresholdID  = aPred->GetGroupID().c_str();
-      }
-      return true;
-    }
-  case FT_BelongToGeom:
-    {
-      BelongToGeom_i* aPred = dynamic_cast<BelongToGeom_i*>( thePred );
-      theCriteria[ i ].ThresholdStr  = aPred->GetShapeName();
-      theCriteria[ i ].ThresholdID   = aPred->GetShapeID();
-      theCriteria[ i ].Tolerance     = aPred->GetTolerance();
-      return true;
-    }
-  case FT_BelongToPlane:
-  case FT_BelongToCylinder:
-  case FT_BelongToGenSurface:
+    SALOMEDS::TMPFile_var SeqFile;
+    return SeqFile._retn();
+  }
+  //=======================================================================
+  // name    : getCriteria
+  // Purpose : Retrieve criterions from predicate
+  //=======================================================================
+  static inline void getPrediacates( Predicate_i*                thePred,
+                                     std::vector<Predicate_i*> & thePredVec )
+  {
+    const int aFType = thePred->GetFunctorType();
+
+    switch ( aFType )
     {
-      BelongToSurface_i* aPred = dynamic_cast<BelongToSurface_i*>( thePred );
-      theCriteria[ i ].ThresholdStr  = aPred->GetShapeName();
-      theCriteria[ i ].ThresholdID   = aPred->GetShapeID();
-      theCriteria[ i ].Tolerance     = aPred->GetTolerance();
-      return true;
-    }
-  case FT_LyingOnGeom:
+    case FT_LogicalNOT:
     {
-      LyingOnGeom_i* aPred = dynamic_cast<LyingOnGeom_i*>( thePred );
-      theCriteria[ i ].ThresholdStr  = aPred->GetShapeName();
-      theCriteria[ i ].ThresholdID   = aPred->GetShapeID();
-      theCriteria[ i ].Tolerance     = aPred->GetTolerance();
-      return true;
+      Predicate_i* aPred = ( dynamic_cast<LogicalNOT_i*>( thePred ) )->GetPredicate_i();
+      getPrediacates( aPred, thePredVec );
+      break;
     }
-  case FT_CoplanarFaces:
+    case FT_LogicalAND:
+    case FT_LogicalOR:
     {
-      CoplanarFaces_i* aPred = dynamic_cast<CoplanarFaces_i*>( thePred );
-      theCriteria[ i ].ThresholdID   = aPred->GetFaceAsString();
-      theCriteria[ i ].Tolerance     = aPred->GetTolerance();
-      return true;
+      Predicate_i* aPred1 = ( dynamic_cast<LogicalBinary_i*>( thePred ) )->GetPredicate1_i();
+      Predicate_i* aPred2 = ( dynamic_cast<LogicalBinary_i*>( thePred ) )->GetPredicate2_i();
+      getPrediacates( aPred1, thePredVec );
+      getPrediacates( aPred2, thePredVec );
+      break;
+     }
+    default:;
     }
-  case FT_ConnectedElements:
+    thePredVec.push_back( thePred );
+  }
+
+  //=======================================================================
+  // name    : getCriteria
+  // Purpose : Retrieve criterions from predicate
+  //=======================================================================
+  static inline bool getCriteria( Predicate_i*                thePred,
+                                  SMESH::Filter::Criteria_out theCriteria )
+  {
+    const int aFType = thePred->GetFunctorType();
+
+    switch ( aFType )
     {
-      ConnectedElements_i* aPred = dynamic_cast<ConnectedElements_i*>( thePred );
-      SMESH::ConnectedElements::ThresholdType type;
-      CORBA::String_var threshold = aPred->GetThreshold( type );
-      switch ( type ) {
-      case SMESH::ConnectedElements::POINT:
-        theCriteria[ i ].ThresholdStr = threshold; break;
-      case SMESH::ConnectedElements::VERTEX:
-        theCriteria[ i ].ThresholdID = threshold; break;
-      case SMESH::ConnectedElements::NODE:
-        theCriteria[ i ].Threshold = atof( threshold.in() ); break;
-      default:;
+    case FT_LogicalNOT:
+      {
+        Predicate_i* aPred = ( dynamic_cast<LogicalNOT_i*>( thePred ) )->GetPredicate_i();
+        getCriteria( aPred, theCriteria );
+        theCriteria[ theCriteria->length() - 1 ].UnaryOp = FT_LogicalNOT;
       }
       return true;
-    }
-  case FT_EqualNodes:
-    {
-      EqualNodes_i* aPred = dynamic_cast<EqualNodes_i*>( thePred );
-      theCriteria[ i ].Tolerance  = aPred->GetTolerance();
-      return true;
-    }
-  case FT_RangeOfIds:
-    {
-      RangeOfIds_i* aPred = dynamic_cast<RangeOfIds_i*>( thePred );
-      theCriteria[ i ].ThresholdStr  = aPred->GetRangeStr();
-      return true;
-    }
-  case FT_LessThan:
-  case FT_MoreThan:
-  case FT_EqualTo:
-    {
-      Comparator_i* aCompar = dynamic_cast<Comparator_i*>( thePred );
-      theCriteria[ i ].Type      = aCompar->GetNumFunctor_i()->GetFunctorType();
-      theCriteria[ i ].Compare   = aFType;
-      theCriteria[ i ].Threshold = aCompar->GetMargin();
-      if ( aFType == FT_EqualTo )
+
+    case FT_LogicalAND:
+    case FT_LogicalOR:
       {
-        EqualTo_i* aCompar = dynamic_cast<EqualTo_i*>( thePred );
-        theCriteria[ i ].Tolerance = aCompar->GetTolerance();
+        Predicate_i* aPred1 = ( dynamic_cast<LogicalBinary_i*>( thePred ) )->GetPredicate1_i();
+        Predicate_i* aPred2 = ( dynamic_cast<LogicalBinary_i*>( thePred ) )->GetPredicate2_i();
+        if ( !getCriteria( aPred1, theCriteria ) )
+          return false;
+        theCriteria[ theCriteria->length() - 1 ].BinaryOp = aFType;
+        return getCriteria( aPred2, theCriteria );
       }
-      return true;
-    }
-  case FT_GroupColor:
-    {
-      GroupColor_i* aPred = dynamic_cast<GroupColor_i*>( thePred );
-      theCriteria[ i ].ThresholdStr = aPred->GetColorStr();
-      return true;
-    }
-  case FT_ElemGeomType:
-    {
-      ElemGeomType_i* aPred = dynamic_cast<ElemGeomType_i*>( thePred );
-      theCriteria[ i ].Threshold = (double)aPred->GetGeometryType();
-      return true;
+    case FT_Undefined:
+      return false;
     }
-  case FT_EntityType:
+
+    // resize theCriteria
+    CORBA::ULong i = theCriteria->length();
+    theCriteria->length( i + 1 );
+    theCriteria[ i ] = createCriterion();
+
+    // set members of the added Criterion
+
+    theCriteria[ i ].Type = aFType;
+    theCriteria[ i ].TypeOfElement = thePred->GetElementType();
+
+    switch ( aFType )
     {
-      ElemEntityType_i* aPred = dynamic_cast<ElemEntityType_i*>( thePred );
-      theCriteria[ i ].Threshold = (double)aPred->GetEntityType();
-      return true;
+    case FT_FreeBorders:
+    case FT_FreeEdges:
+    case FT_FreeFaces:
+    case FT_LinearOrQuadratic:
+    case FT_FreeNodes:
+    case FT_EqualEdges:
+    case FT_EqualFaces:
+    case FT_EqualVolumes:
+    case FT_BadOrientedVolume:
+    case FT_BareBorderVolume:
+    case FT_BareBorderFace:
+    case FT_OverConstrainedVolume:
+    case FT_OverConstrainedFace:
+      {
+        return true;
+      }
+    case FT_BelongToMeshGroup:
+      {
+        BelongToMeshGroup_i* aPred = dynamic_cast<BelongToMeshGroup_i*>( thePred );
+        SMESH::SMESH_GroupBase_var grp = aPred->GetGroup();
+        if ( !grp->_is_nil() )
+        {
+          theCriteria[ i ].ThresholdStr = grp->GetName();
+          theCriteria[ i ].ThresholdID  = aPred->GetGroupID().c_str();
+        }
+        return true;
+      }
+    case FT_BelongToGeom:
+      {
+        BelongToGeom_i* aPred = dynamic_cast<BelongToGeom_i*>( thePred );
+        theCriteria[ i ].ThresholdStr  = aPred->GetShapeName();
+        theCriteria[ i ].ThresholdID   = aPred->GetShapeID();
+        theCriteria[ i ].Tolerance     = aPred->GetTolerance();
+        return true;
+      }
+    case FT_BelongToPlane:
+    case FT_BelongToCylinder:
+    case FT_BelongToGenSurface:
+      {
+        BelongToSurface_i* aPred = dynamic_cast<BelongToSurface_i*>( thePred );
+        theCriteria[ i ].ThresholdStr  = aPred->GetShapeName();
+        theCriteria[ i ].ThresholdID   = aPred->GetShapeID();
+        theCriteria[ i ].Tolerance     = aPred->GetTolerance();
+        return true;
+      }
+    case FT_LyingOnGeom:
+      {
+        LyingOnGeom_i* aPred = dynamic_cast<LyingOnGeom_i*>( thePred );
+        theCriteria[ i ].ThresholdStr  = aPred->GetShapeName();
+        theCriteria[ i ].ThresholdID   = aPred->GetShapeID();
+        theCriteria[ i ].Tolerance     = aPred->GetTolerance();
+        return true;
+      }
+    case FT_CoplanarFaces:
+      {
+        CoplanarFaces_i* aPred = dynamic_cast<CoplanarFaces_i*>( thePred );
+        theCriteria[ i ].ThresholdID   = aPred->GetFaceAsString();
+        theCriteria[ i ].Tolerance     = aPred->GetTolerance();
+        return true;
+      }
+    case FT_ConnectedElements:
+      {
+        ConnectedElements_i* aPred = dynamic_cast<ConnectedElements_i*>( thePred );
+        SMESH::ConnectedElements::ThresholdType type;
+        CORBA::String_var threshold = aPred->GetThreshold( type );
+        switch ( type ) {
+        case SMESH::ConnectedElements::POINT:
+          theCriteria[ i ].ThresholdStr = threshold; break;
+        case SMESH::ConnectedElements::VERTEX:
+          theCriteria[ i ].ThresholdID = threshold; break;
+        case SMESH::ConnectedElements::NODE:
+          theCriteria[ i ].Threshold = atof( threshold.in() ); break;
+        default:;
+        }
+        return true;
+      }
+    case FT_EqualNodes:
+      {
+        EqualNodes_i* aPred = dynamic_cast<EqualNodes_i*>( thePred );
+        theCriteria[ i ].Tolerance  = aPred->GetTolerance();
+        return true;
+      }
+    case FT_RangeOfIds:
+      {
+        RangeOfIds_i* aPred = dynamic_cast<RangeOfIds_i*>( thePred );
+        theCriteria[ i ].ThresholdStr  = aPred->GetRangeStr();
+        return true;
+      }
+    case FT_LessThan:
+    case FT_MoreThan:
+    case FT_EqualTo:
+      {
+        Comparator_i* aCompar = dynamic_cast<Comparator_i*>( thePred );
+        theCriteria[ i ].Type      = aCompar->GetNumFunctor_i()->GetFunctorType();
+        theCriteria[ i ].Compare   = aFType;
+        theCriteria[ i ].Threshold = aCompar->GetMargin();
+        if ( aFType == FT_EqualTo )
+        {
+          EqualTo_i* aCompar = dynamic_cast<EqualTo_i*>( thePred );
+          theCriteria[ i ].Tolerance = aCompar->GetTolerance();
+        }
+        return true;
+      }
+    case FT_GroupColor:
+      {
+        GroupColor_i* aPred = dynamic_cast<GroupColor_i*>( thePred );
+        theCriteria[ i ].ThresholdStr = aPred->GetColorStr();
+        return true;
+      }
+    case FT_ElemGeomType:
+      {
+        ElemGeomType_i* aPred = dynamic_cast<ElemGeomType_i*>( thePred );
+        theCriteria[ i ].Threshold = (double)aPred->GetGeometryType();
+        return true;
+      }
+    case FT_EntityType:
+      {
+        ElemEntityType_i* aPred = dynamic_cast<ElemEntityType_i*>( thePred );
+        theCriteria[ i ].Threshold = (double)aPred->GetEntityType();
+        return true;
+      }
+    default:
+      return false;
     }
-  default:
-    return false;
   }
-}
 
-//=======================================================================
-// name    : Filter_i::GetCriteria
-// Purpose : Retrieve criterions from predicate
-//=======================================================================
-CORBA::Boolean Filter_i::GetCriteria( SMESH::Filter::Criteria_out theCriteria )
-{
-  theCriteria = new SMESH::Filter::Criteria;
-  return myPredicate != 0 ? getCriteria( myPredicate, theCriteria ) : true;
-}
+  //=======================================================================
+  // name    : Filter_i::GetCriteria
+  // Purpose : Retrieve criterions from predicate
+  //=======================================================================
+  CORBA::Boolean Filter_i::GetCriteria( SMESH::Filter::Criteria_out theCriteria )
+  {
+    theCriteria = new SMESH::Filter::Criteria;
+    return myPredicate != 0 ? getCriteria( myPredicate, theCriteria ) : true;
+  }
 
-//=======================================================================
-// name    : Filter_i::SetCriteria
-// Purpose : Create new predicate and set criterions in it
-//=======================================================================
-CORBA::Boolean Filter_i::SetCriteria( const SMESH::Filter::Criteria& theCriteria )
-{
-  SetPredicate( SMESH::Predicate::_nil() );
+  //=======================================================================
+  // name    : Filter_i::SetCriteria
+  // Purpose : Create new predicate and set criterions in it
+  //=======================================================================
+  CORBA::Boolean Filter_i::SetCriteria( const SMESH::Filter::Criteria& theCriteria )
+  {
+    SetPredicate( SMESH::Predicate::_nil() );
 
-  SMESH::FilterManager_i* aFilter = new SMESH::FilterManager_i();
-  FilterManager_ptr aFilterMgr = aFilter->_this();
-
-  // CREATE two lists ( PREDICATES  and LOG OP )
-
-  // Criterion
-  TPythonDump()<<"aCriteria = []";
-  std::list<SMESH::Predicate_ptr> aPredicates;
-  std::list<int>                  aBinaries;
-  for ( int i = 0, n = theCriteria.length(); i < n; i++ )
-  {
-    int         aCriterion    = theCriteria[ i ].Type;
-    int         aCompare      = theCriteria[ i ].Compare;
-    double      aThreshold    = theCriteria[ i ].Threshold;
-    const char* aThresholdStr = theCriteria[ i ].ThresholdStr;
-    const char* aThresholdID  = theCriteria[ i ].ThresholdID;
-    int         aUnary        = theCriteria[ i ].UnaryOp;
-    int         aBinary       = theCriteria[ i ].BinaryOp;
-    double      aTolerance    = theCriteria[ i ].Tolerance;
-    ElementType aTypeOfElem   = theCriteria[ i ].TypeOfElement;
-    long        aPrecision    = theCriteria[ i ].Precision;
+    SMESH::FilterManager_i* aFilter = new SMESH::FilterManager_i();
+    FilterManager_ptr aFilterMgr = aFilter->_this();
 
+    // CREATE two lists ( PREDICATES  and LOG OP )
+
+    // Criterion
+    TPythonDump()<<"aCriteria = []";
+    std::list<SMESH::Predicate_ptr> aPredicates;
+    std::list<int>                  aBinaries;
+    for ( int i = 0, n = theCriteria.length(); i < n; i++ )
     {
+      int         aCriterion    = theCriteria[ i ].Type;
+      int         aCompare      = theCriteria[ i ].Compare;
+      double      aThreshold    = theCriteria[ i ].Threshold;
+      const char* aThresholdStr = theCriteria[ i ].ThresholdStr;
+      const char* aThresholdID  = theCriteria[ i ].ThresholdID;
+      int         aUnary        = theCriteria[ i ].UnaryOp;
+      int         aBinary       = theCriteria[ i ].BinaryOp;
+      double      aTolerance    = theCriteria[ i ].Tolerance;
+      ElementType aTypeOfElem   = theCriteria[ i ].TypeOfElement;
+      long        aPrecision    = theCriteria[ i ].Precision;
+
+      {
+        TPythonDump pd;
+        pd << "aCriterion = SMESH.Filter.Criterion("
+           << aCriterion    << ", "
+           << aCompare      << ", "
+           << aThreshold    << ", '"
+           << aThresholdStr << "', '"
+           << aThresholdID  << "', "
+           << aUnary        << ", "
+           << aBinary       << ", "
+           << aTolerance    << ", "
+           << aTypeOfElem   << ", "
+           << aPrecision    << ")";
+      }
       TPythonDump pd;
-      pd << "aCriterion = SMESH.Filter.Criterion("
-         << aCriterion    << ", "
-         << aCompare      << ", "
-         << aThreshold    << ", '"
-         << aThresholdStr << "', '"
-         << aThresholdID  << "', "
-         << aUnary        << ", "
-         << aBinary       << ", "
-         << aTolerance    << ", "
-         << aTypeOfElem   << ", "
-         << aPrecision    << ")";
-    }
-    TPythonDump pd;
 
-    SMESH::Predicate_ptr aPredicate = SMESH::Predicate::_nil();
-    SMESH::NumericalFunctor_ptr aFunctor = SMESH::NumericalFunctor::_nil();
+      SMESH::Predicate_ptr aPredicate = SMESH::Predicate::_nil();
+      SMESH::NumericalFunctor_ptr aFunctor = SMESH::NumericalFunctor::_nil();
 
-    switch ( aCriterion )
-    {
-      // Functors
+      switch ( aCriterion )
+      {
+        // Functors
 
-      case SMESH::FT_MultiConnection:
-        aFunctor = aFilterMgr->CreateMultiConnection();
-        break;
-      case SMESH::FT_MultiConnection2D:
-        aFunctor = aFilterMgr->CreateMultiConnection2D();
-        break;
-      case SMESH::FT_Length:
-        aFunctor = aFilterMgr->CreateLength();
-        break;
-      case SMESH::FT_Length2D:
-        aFunctor = aFilterMgr->CreateLength2D();
-        break;
-      case SMESH::FT_Length3D:
-        aFunctor = aFilterMgr->CreateLength3D();
-        break;
-      case SMESH::FT_Deflection2D:
-        aFunctor = aFilterMgr->CreateDeflection2D();
-        break;
-      case SMESH::FT_AspectRatio:
-        aFunctor = aFilterMgr->CreateAspectRatio();
-        break;
-      case SMESH::FT_AspectRatio3D:
-        aFunctor = aFilterMgr->CreateAspectRatio3D();
-        break;
-      case SMESH::FT_Warping:
-        aFunctor = aFilterMgr->CreateWarping();
-        break;
-      case SMESH::FT_MinimumAngle:
-        aFunctor = aFilterMgr->CreateMinimumAngle();
-        break;
-      case SMESH::FT_Taper:
-        aFunctor = aFilterMgr->CreateTaper();
-        break;
-      case SMESH::FT_Skew:
-        aFunctor = aFilterMgr->CreateSkew();
-        break;
-      case SMESH::FT_Area:
-        aFunctor = aFilterMgr->CreateArea();
-        break;
-      case SMESH::FT_Volume3D:
-        aFunctor = aFilterMgr->CreateVolume3D();
-        break;
-      case SMESH::FT_MaxElementLength2D:
-        aFunctor = aFilterMgr->CreateMaxElementLength2D();
-        break;
-      case SMESH::FT_MaxElementLength3D:
-        aFunctor = aFilterMgr->CreateMaxElementLength3D();
-        break;
-      case SMESH::FT_BallDiameter:
-        aFunctor = aFilterMgr->CreateBallDiameter();
-        break;
-      case SMESH::FT_NodeConnectivityNumber:
-        aFunctor = aFilterMgr->CreateNodeConnectivityNumber();
-        break;
+        case SMESH::FT_MultiConnection:
+          aFunctor = aFilterMgr->CreateMultiConnection();
+          break;
+        case SMESH::FT_MultiConnection2D:
+          aFunctor = aFilterMgr->CreateMultiConnection2D();
+          break;
+        case SMESH::FT_Length:
+          aFunctor = aFilterMgr->CreateLength();
+          break;
+        case SMESH::FT_Length2D:
+          aFunctor = aFilterMgr->CreateLength2D();
+          break;
+        case SMESH::FT_Length3D:
+          aFunctor = aFilterMgr->CreateLength3D();
+          break;
+        case SMESH::FT_Deflection2D:
+          aFunctor = aFilterMgr->CreateDeflection2D();
+          break;
+        case SMESH::FT_AspectRatio:
+          aFunctor = aFilterMgr->CreateAspectRatio();
+          break;
+        case SMESH::FT_AspectRatio3D:
+          aFunctor = aFilterMgr->CreateAspectRatio3D();
+          break;
+        case SMESH::FT_Warping:
+          aFunctor = aFilterMgr->CreateWarping();
+          break;
+        case SMESH::FT_Warping3D:
+          aFunctor = aFilterMgr->CreateWarping3D();
+          break;
+        case SMESH::FT_MinimumAngle:
+          aFunctor = aFilterMgr->CreateMinimumAngle();
+          break;
+        case SMESH::FT_Taper:
+          aFunctor = aFilterMgr->CreateTaper();
+          break;
+        case SMESH::FT_Skew:
+          aFunctor = aFilterMgr->CreateSkew();
+          break;
+        case SMESH::FT_Area:
+          aFunctor = aFilterMgr->CreateArea();
+          break;
+        case SMESH::FT_Volume3D:
+          aFunctor = aFilterMgr->CreateVolume3D();
+          break;
+        case SMESH::FT_MaxElementLength2D:
+          aFunctor = aFilterMgr->CreateMaxElementLength2D();
+          break;
+        case SMESH::FT_MaxElementLength3D:
+          aFunctor = aFilterMgr->CreateMaxElementLength3D();
+          break;
+        case SMESH::FT_BallDiameter:
+          aFunctor = aFilterMgr->CreateBallDiameter();
+          break;
+        case SMESH::FT_NodeConnectivityNumber:
+          aFunctor = aFilterMgr->CreateNodeConnectivityNumber();
+          break;
+        case SMESH::FT_ScaledJacobian:
+          aFunctor = aFilterMgr->CreateScaledJacobian();
+          break;
 
-      // Predicates
+        // Predicates
 
-      case SMESH::FT_FreeBorders:
-        aPredicate = aFilterMgr->CreateFreeBorders();
-        break;
-      case SMESH::FT_FreeEdges:
-        aPredicate = aFilterMgr->CreateFreeEdges();
-        break;
-      case SMESH::FT_FreeFaces:
-        aPredicate = aFilterMgr->CreateFreeFaces();
-        break;
-      case SMESH::FT_FreeNodes:
-        aPredicate = aFilterMgr->CreateFreeNodes();
-        break;
-      case SMESH::FT_EqualNodes:
-        {
-          SMESH::EqualNodes_ptr pred = aFilterMgr->CreateEqualNodes();
-          pred->SetTolerance( aTolerance );
-          aPredicate = pred;
+        case SMESH::FT_FreeBorders:
+          aPredicate = aFilterMgr->CreateFreeBorders();
           break;
-        }
-      case SMESH::FT_EqualEdges:
-        aPredicate = aFilterMgr->CreateEqualEdges();
-        break;
-      case SMESH::FT_EqualFaces:
-        aPredicate = aFilterMgr->CreateEqualFaces();
-        break;
-      case SMESH::FT_EqualVolumes:
-        aPredicate = aFilterMgr->CreateEqualVolumes();
-        break;
-      case SMESH::FT_BelongToMeshGroup:
-        {
-          SMESH::BelongToMeshGroup_ptr tmpPred = aFilterMgr->CreateBelongToMeshGroup();
-          tmpPred->SetGroupID( aThresholdID );
-          aPredicate = tmpPred;
-        }
-        break;
-      case SMESH::FT_BelongToGeom:
-        {
-          SMESH::BelongToGeom_ptr tmpPred = aFilterMgr->CreateBelongToGeom();
-          tmpPred->SetElementType( aTypeOfElem );
-          tmpPred->SetShape( aThresholdID, aThresholdStr );
-          tmpPred->SetTolerance( aTolerance );
-          aPredicate = tmpPred;
-        }
-        break;
-      case SMESH::FT_BelongToPlane:
-      case SMESH::FT_BelongToCylinder:
-      case SMESH::FT_BelongToGenSurface:
-        {
-          SMESH::BelongToSurface_ptr tmpPred;
-          switch ( aCriterion ) {
-          case SMESH::FT_BelongToPlane:
-            tmpPred = aFilterMgr->CreateBelongToPlane(); break;
-          case SMESH::FT_BelongToCylinder:
-            tmpPred = aFilterMgr->CreateBelongToCylinder(); break;
-          default:
-            tmpPred = aFilterMgr->CreateBelongToGenSurface();
+        case SMESH::FT_FreeEdges:
+          aPredicate = aFilterMgr->CreateFreeEdges();
+          break;
+        case SMESH::FT_FreeFaces:
+          aPredicate = aFilterMgr->CreateFreeFaces();
+          break;
+        case SMESH::FT_FreeNodes:
+          aPredicate = aFilterMgr->CreateFreeNodes();
+          break;
+        case SMESH::FT_EqualNodes:
+          {
+            SMESH::EqualNodes_ptr pred = aFilterMgr->CreateEqualNodes();
+            pred->SetTolerance( aTolerance );
+            aPredicate = pred;
+            break;
           }
-          tmpPred->SetShape( aThresholdID, aThresholdStr, aTypeOfElem );
-          tmpPred->SetTolerance( aTolerance );
-          aPredicate = tmpPred;
-        }
-        break;
-      case SMESH::FT_LyingOnGeom:
-        {
-          SMESH::LyingOnGeom_ptr tmpPred = aFilterMgr->CreateLyingOnGeom();
-          tmpPred->SetElementType( aTypeOfElem );
-          tmpPred->SetShape( aThresholdID, aThresholdStr );
-          tmpPred->SetTolerance( aTolerance );
-          aPredicate = tmpPred;
-        }
-        break;
-      case SMESH::FT_RangeOfIds:
-        {
-          SMESH::RangeOfIds_ptr tmpPred = aFilterMgr->CreateRangeOfIds();
-          tmpPred->SetRangeStr( aThresholdStr );
-          tmpPred->SetElementType( aTypeOfElem );
-          aPredicate = tmpPred;
-        }
-        break;
-      case SMESH::FT_BadOrientedVolume:
-        {
-          aPredicate = aFilterMgr->CreateBadOrientedVolume();
-        }
-        break;
-      case SMESH::FT_BareBorderVolume:
-        {
-          aPredicate = aFilterMgr->CreateBareBorderVolume();
-        }
-        break;
-      case SMESH::FT_BareBorderFace:
-        {
-          aPredicate = aFilterMgr->CreateBareBorderFace();
-        }
-        break;
-      case SMESH::FT_OverConstrainedVolume:
-        {
-          aPredicate = aFilterMgr->CreateOverConstrainedVolume();
-        }
-        break;
-      case SMESH::FT_OverConstrainedFace:
-        {
-          aPredicate = aFilterMgr->CreateOverConstrainedFace();
-        }
-        break;
-      case SMESH::FT_LinearOrQuadratic:
-        {
-          SMESH::LinearOrQuadratic_ptr tmpPred = aFilterMgr->CreateLinearOrQuadratic();
-          tmpPred->SetElementType( aTypeOfElem );
-          aPredicate = tmpPred;
+        case SMESH::FT_EqualEdges:
+          aPredicate = aFilterMgr->CreateEqualEdges();
           break;
-        }
-      case SMESH::FT_GroupColor:
-        {
-          SMESH::GroupColor_ptr tmpPred = aFilterMgr->CreateGroupColor();
-          tmpPred->SetElementType( aTypeOfElem );
-          tmpPred->SetColorStr( aThresholdStr );
-          aPredicate = tmpPred;
+        case SMESH::FT_EqualFaces:
+          aPredicate = aFilterMgr->CreateEqualFaces();
           break;
-        }
-      case SMESH::FT_ElemGeomType:
-        {
-          SMESH::ElemGeomType_ptr tmpPred = aFilterMgr->CreateElemGeomType();
-          tmpPred->SetElementType( aTypeOfElem );
-          tmpPred->SetGeometryType( (GeometryType)(int)(aThreshold + 0.5) );
-          aPredicate = tmpPred;
+        case SMESH::FT_EqualVolumes:
+          aPredicate = aFilterMgr->CreateEqualVolumes();
           break;
-        }
-      case SMESH::FT_EntityType:
-        {
-          SMESH::ElemEntityType_ptr tmpPred = aFilterMgr->CreateElemEntityType();
-          tmpPred->SetElementType( aTypeOfElem );
-          tmpPred->SetEntityType( EntityType( (int (aThreshold + 0.5))));
-          aPredicate = tmpPred;
+        case SMESH::FT_BelongToMeshGroup:
+          {
+            SMESH::BelongToMeshGroup_ptr tmpPred = aFilterMgr->CreateBelongToMeshGroup();
+            tmpPred->SetGroupID( aThresholdID );
+            aPredicate = tmpPred;
+          }
           break;
-        }
-      case SMESH::FT_CoplanarFaces:
-        {
-          SMESH::CoplanarFaces_ptr tmpPred = aFilterMgr->CreateCoplanarFaces();
-          tmpPred->SetFace( atol (aThresholdID ));
-          tmpPred->SetTolerance( aTolerance );
-          aPredicate = tmpPred;
+        case SMESH::FT_BelongToGeom:
+          {
+            SMESH::BelongToGeom_ptr tmpPred = aFilterMgr->CreateBelongToGeom();
+            tmpPred->SetElementType( aTypeOfElem );
+            tmpPred->SetShape( aThresholdID, aThresholdStr );
+            tmpPred->SetTolerance( aTolerance );
+            aPredicate = tmpPred;
+          }
           break;
-        }
-      case SMESH::FT_ConnectedElements:
-        {
-          SMESH::ConnectedElements_ptr tmpPred = aFilterMgr->CreateConnectedElements();
-          if ( strlen( aThresholdID ) > 0 ) // shape ID
-            tmpPred->SetThreshold( aThresholdID, SMESH::ConnectedElements::VERTEX );
-          else if ( strlen( aThresholdStr ) > 0 ) // point coords
-            tmpPred->SetThreshold( aThresholdStr, SMESH::ConnectedElements::POINT );
-          else if ( aThreshold >= 1 )
-            tmpPred->SetNode( (CORBA::Long) aThreshold ); // node ID
-          tmpPred->SetElementType( aTypeOfElem );
-          aPredicate = tmpPred;
+        case SMESH::FT_BelongToPlane:
+        case SMESH::FT_BelongToCylinder:
+        case SMESH::FT_BelongToGenSurface:
+          {
+            SMESH::BelongToSurface_ptr tmpPred;
+            switch ( aCriterion ) {
+            case SMESH::FT_BelongToPlane:
+              tmpPred = aFilterMgr->CreateBelongToPlane(); break;
+            case SMESH::FT_BelongToCylinder:
+              tmpPred = aFilterMgr->CreateBelongToCylinder(); break;
+            default:
+              tmpPred = aFilterMgr->CreateBelongToGenSurface();
+            }
+            tmpPred->SetShape( aThresholdID, aThresholdStr, aTypeOfElem );
+            tmpPred->SetTolerance( aTolerance );
+            aPredicate = tmpPred;
+          }
           break;
-        }
-
-      default:
-        continue;
-    }
-
-    // Comparator
-    if ( !aFunctor->_is_nil() && aPredicate->_is_nil() )
-    {
-      SMESH::Comparator_ptr aComparator = SMESH::Comparator::_nil();
-
-      if ( aCompare == SMESH::FT_LessThan )
-        aComparator = aFilterMgr->CreateLessThan();
-      else if ( aCompare == SMESH::FT_MoreThan )
-        aComparator = aFilterMgr->CreateMoreThan();
-      else if ( aCompare == SMESH::FT_EqualTo )
-        aComparator = aFilterMgr->CreateEqualTo();
-      else
-        continue;
+        case SMESH::FT_LyingOnGeom:
+          {
+            SMESH::LyingOnGeom_ptr tmpPred = aFilterMgr->CreateLyingOnGeom();
+            tmpPred->SetElementType( aTypeOfElem );
+            tmpPred->SetShape( aThresholdID, aThresholdStr );
+            tmpPred->SetTolerance( aTolerance );
+            aPredicate = tmpPred;
+          }
+          break;
+        case SMESH::FT_RangeOfIds:
+          {
+            SMESH::RangeOfIds_ptr tmpPred = aFilterMgr->CreateRangeOfIds();
+            tmpPred->SetRangeStr( aThresholdStr );
+            tmpPred->SetElementType( aTypeOfElem );
+            aPredicate = tmpPred;
+          }
+          break;
+        case SMESH::FT_BadOrientedVolume:
+          {
+            aPredicate = aFilterMgr->CreateBadOrientedVolume();
+          }
+          break;
+        case SMESH::FT_BareBorderVolume:
+          {
+            aPredicate = aFilterMgr->CreateBareBorderVolume();
+          }
+          break;
+        case SMESH::FT_BareBorderFace:
+          {
+            aPredicate = aFilterMgr->CreateBareBorderFace();
+          }
+          break;
+        case SMESH::FT_OverConstrainedVolume:
+          {
+            aPredicate = aFilterMgr->CreateOverConstrainedVolume();
+          }
+          break;
+        case SMESH::FT_OverConstrainedFace:
+          {
+            aPredicate = aFilterMgr->CreateOverConstrainedFace();
+          }
+          break;
+        case SMESH::FT_LinearOrQuadratic:
+          {
+            SMESH::LinearOrQuadratic_ptr tmpPred = aFilterMgr->CreateLinearOrQuadratic();
+            tmpPred->SetElementType( aTypeOfElem );
+            aPredicate = tmpPred;
+            break;
+          }
+        case SMESH::FT_GroupColor:
+          {
+            SMESH::GroupColor_ptr tmpPred = aFilterMgr->CreateGroupColor();
+            tmpPred->SetElementType( aTypeOfElem );
+            tmpPred->SetColorStr( aThresholdStr );
+            aPredicate = tmpPred;
+            break;
+          }
+        case SMESH::FT_ElemGeomType:
+          {
+            SMESH::ElemGeomType_ptr tmpPred = aFilterMgr->CreateElemGeomType();
+            tmpPred->SetElementType( aTypeOfElem );
+            tmpPred->SetGeometryType( (GeometryType)(int)(aThreshold + 0.5) );
+            aPredicate = tmpPred;
+            break;
+          }
+        case SMESH::FT_EntityType:
+          {
+            SMESH::ElemEntityType_ptr tmpPred = aFilterMgr->CreateElemEntityType();
+            tmpPred->SetElementType( aTypeOfElem );
+            tmpPred->SetEntityType( EntityType( (int (aThreshold + 0.5))));
+            aPredicate = tmpPred;
+            break;
+          }
+        case SMESH::FT_CoplanarFaces:
+          {
+            SMESH::CoplanarFaces_ptr tmpPred = aFilterMgr->CreateCoplanarFaces();
+            tmpPred->SetFace( atol (aThresholdID ));
+            tmpPred->SetTolerance( aTolerance );
+            aPredicate = tmpPred;
+            break;
+          }
+        case SMESH::FT_ConnectedElements:
+          {
+            SMESH::ConnectedElements_ptr tmpPred = aFilterMgr->CreateConnectedElements();
+            if ( strlen( aThresholdID ) > 0 ) // shape ID
+              tmpPred->SetThreshold( aThresholdID, SMESH::ConnectedElements::VERTEX );
+            else if ( strlen( aThresholdStr ) > 0 ) // point coords
+              tmpPred->SetThreshold( aThresholdStr, SMESH::ConnectedElements::POINT );
+            else if ( aThreshold >= 1 )
+              tmpPred->SetNode( (CORBA::Long) aThreshold ); // node ID
+            tmpPred->SetElementType( aTypeOfElem );
+            aPredicate = tmpPred;
+            break;
+          }
 
-      aComparator->SetNumFunctor( aFunctor );
-      aComparator->SetMargin( aThreshold );
+        default:
+          continue;
+      }
 
-      if ( aCompare == FT_EqualTo )
+      // Comparator
+      if ( !aFunctor->_is_nil() && aPredicate->_is_nil() )
       {
-        SMESH::EqualTo_var anEqualTo = SMESH::EqualTo::_narrow( aComparator );
-        anEqualTo->SetTolerance( aTolerance );
-      }
+        SMESH::Comparator_ptr aComparator = SMESH::Comparator::_nil();
 
-      aPredicate = aComparator;
+        if ( aCompare == SMESH::FT_LessThan )
+          aComparator = aFilterMgr->CreateLessThan();
+        else if ( aCompare == SMESH::FT_MoreThan )
+          aComparator = aFilterMgr->CreateMoreThan();
+        else if ( aCompare == SMESH::FT_EqualTo )
+          aComparator = aFilterMgr->CreateEqualTo();
+        else
+          continue;
 
-      aFunctor->SetPrecision( aPrecision );
-    }
+        aComparator->SetNumFunctor( aFunctor );
+        aComparator->SetMargin( aThreshold );
 
-    // Logical not
-    if ( aUnary == FT_LogicalNOT )
-    {
-      SMESH::LogicalNOT_ptr aNotPred = aFilterMgr->CreateLogicalNOT();
-      aNotPred->SetPredicate( aPredicate );
-      aPredicate = aNotPred;
-    }
+        if ( aCompare == FT_EqualTo )
+        {
+          SMESH::EqualTo_var anEqualTo = SMESH::EqualTo::_narrow( aComparator );
+          anEqualTo->SetTolerance( aTolerance );
+        }
 
-    // logical op
-    aPredicates.push_back( aPredicate );
-    aBinaries.push_back( aBinary );
-    pd <<"aCriteria.append(aCriterion)";
+        aPredicate = aComparator;
+
+        aFunctor->SetPrecision( aPrecision );
+      }
 
-  } // end of for
-  TPythonDump pd; pd<<this<<".SetCriteria(aCriteria)";
+      // Logical not
+      if ( aUnary == FT_LogicalNOT )
+      {
+        SMESH::LogicalNOT_ptr aNotPred = aFilterMgr->CreateLogicalNOT();
+        aNotPred->SetPredicate( aPredicate );
+        aPredicate = aNotPred;
+      }
 
-  // CREATE ONE PREDICATE FROM PREVIOUSLY CREATED MAP
+      // logical op
+      aPredicates.push_back( aPredicate );
+      aBinaries.push_back( aBinary );
+      pd <<"aCriteria.append(aCriterion)";
 
-  // combine all "AND" operations
+    } // end of for
+    TPythonDump pd; pd<<this<<".SetCriteria(aCriteria)";
 
-  std::list<SMESH::Predicate_ptr> aResList;
+    // CREATE ONE PREDICATE FROM PREVIOUSLY CREATED MAP
 
-  std::list<SMESH::Predicate_ptr>::iterator aPredIter;
-  std::list<int>::iterator                  aBinaryIter;
+    // combine all "AND" operations
 
-  SMESH::Predicate_ptr aPrevPredicate = SMESH::Predicate::_nil();
-  int aPrevBinary = SMESH::FT_Undefined;
-  if ( !aBinaries.empty() )
-    aBinaries.back() = SMESH::FT_Undefined;
+    std::list<SMESH::Predicate_ptr> aResList;
 
-  for ( aPredIter = aPredicates.begin(), aBinaryIter = aBinaries.begin();
-        aPredIter != aPredicates.end() && aBinaryIter != aBinaries.end();
-        ++aPredIter, ++aBinaryIter )
-  {
-    int aCurrBinary = *aBinaryIter;
+    std::list<SMESH::Predicate_ptr>::iterator aPredIter;
+    std::list<int>::iterator                  aBinaryIter;
 
-    SMESH::Predicate_ptr aCurrPred = SMESH::Predicate::_nil();
+    SMESH::Predicate_ptr aPrevPredicate = SMESH::Predicate::_nil();
+    int aPrevBinary = SMESH::FT_Undefined;
+    if ( !aBinaries.empty() )
+      aBinaries.back() = SMESH::FT_Undefined;
 
-    if ( aPrevBinary == SMESH::FT_LogicalAND )
+    for ( aPredIter = aPredicates.begin(), aBinaryIter = aBinaries.begin();
+          aPredIter != aPredicates.end() && aBinaryIter != aBinaries.end();
+          ++aPredIter, ++aBinaryIter )
     {
+      int aCurrBinary = *aBinaryIter;
 
-      SMESH::LogicalBinary_ptr aBinaryPred = aFilterMgr->CreateLogicalAND();
-      aBinaryPred->SetPredicate1( aPrevPredicate );
-      aBinaryPred->SetPredicate2( *aPredIter );
-      aCurrPred = aBinaryPred;
-    }
-    else
-      aCurrPred = *aPredIter;
+      SMESH::Predicate_ptr aCurrPred = SMESH::Predicate::_nil();
 
-    if ( aCurrBinary != SMESH::FT_LogicalAND )
-      aResList.push_back( aCurrPred );
+      if ( aPrevBinary == SMESH::FT_LogicalAND )
+      {
 
-    aPrevPredicate = aCurrPred;
-    aPrevBinary = aCurrBinary;
-  }
+        SMESH::LogicalBinary_ptr aBinaryPred = aFilterMgr->CreateLogicalAND();
+        aBinaryPred->SetPredicate1( aPrevPredicate );
+        aBinaryPred->SetPredicate2( *aPredIter );
+        aCurrPred = aBinaryPred;
+      }
+      else
+        aCurrPred = *aPredIter;
+
+      if ( aCurrBinary != SMESH::FT_LogicalAND )
+        aResList.push_back( aCurrPred );
 
-  // combine all "OR" operations
+      aPrevPredicate = aCurrPred;
+      aPrevBinary = aCurrBinary;
+    }
 
-  SMESH::Predicate_ptr aResPredicate = SMESH::Predicate::_nil();
+    // combine all "OR" operations
 
-  if ( aResList.size() == 1 )
-    aResPredicate = *aResList.begin();
-  else if ( aResList.size() > 1 )
-  {
-    std::list<SMESH::Predicate_ptr>::iterator anIter = aResList.begin();
-    aResPredicate = *anIter;
-    anIter++;
-    for ( ; anIter != aResList.end(); ++anIter )
+    SMESH::Predicate_ptr aResPredicate = SMESH::Predicate::_nil();
+
+    if ( aResList.size() == 1 )
+      aResPredicate = *aResList.begin();
+    else if ( aResList.size() > 1 )
     {
-      SMESH::LogicalBinary_ptr aBinaryPred = aFilterMgr->CreateLogicalOR();
-      aBinaryPred->SetPredicate1( aResPredicate );
-      aBinaryPred->SetPredicate2( *anIter );
-      aResPredicate = aBinaryPred;
+      std::list<SMESH::Predicate_ptr>::iterator anIter = aResList.begin();
+      aResPredicate = *anIter;
+      anIter++;
+      for ( ; anIter != aResList.end(); ++anIter )
+      {
+        SMESH::LogicalBinary_ptr aBinaryPred = aFilterMgr->CreateLogicalOR();
+        aBinaryPred->SetPredicate1( aResPredicate );
+        aBinaryPred->SetPredicate2( *anIter );
+        aResPredicate = aBinaryPred;
+      }
     }
-  }
 
-  SetPredicate( aResPredicate );
-  if ( !aResPredicate->_is_nil() )
-    aResPredicate->UnRegister();
+    SetPredicate( aResPredicate );
+    if ( !aResPredicate->_is_nil() )
+      aResPredicate->UnRegister();
 
-  return !aResPredicate->_is_nil();
-}
-
-//=======================================================================
-// name    : Filter_i::GetPredicate_i
-// Purpose : Get implementation of predicate
-//=======================================================================
-Predicate_i* Filter_i::GetPredicate_i()
-{
-  return myPredicate;
-}
+    return !aResPredicate->_is_nil();
+  }
 
-//=======================================================================
-// name    : Filter_i::GetPredicate
-// Purpose : Get predicate
-//=======================================================================
-Predicate_ptr Filter_i::GetPredicate()
-{
-  if ( myPredicate == 0 )
-    return SMESH::Predicate::_nil();
-  else
+  //=======================================================================
+  // name    : Filter_i::GetPredicate_i
+  // Purpose : Get implementation of predicate
+  //=======================================================================
+  Predicate_i* Filter_i::GetPredicate_i()
   {
-    SMESH::Predicate_var anObj = myPredicate->_this();
-    // if ( SMESH::Functor_i* fun = SMESH::DownCast<SMESH::Functor_i*>( anObj ))
-    //   TPythonDump() << fun << " = " << this << ".GetPredicate()";
-    return anObj._retn();
+    return myPredicate;
   }
-}
 
-//================================================================================
-/*!
- * \brief Find groups it depends on
- */
-//================================================================================
-
-void Filter_i::FindBaseObjects()
-{
-  // release current groups
-  for ( size_t i = 0; i < myBaseGroups.size(); ++i )
-    if ( myBaseGroups[i] )
+  //=======================================================================
+  // name    : Filter_i::GetPredicate
+  // Purpose : Get predicate
+  //=======================================================================
+  Predicate_ptr Filter_i::GetPredicate()
+  {
+    if ( myPredicate == 0 )
+      return SMESH::Predicate::_nil();
+    else
     {
-      myBaseGroups[i]->RemoveModifWaiter( this );
-      myBaseGroups[i]->UnRegister();
+      SMESH::Predicate_var anObj = myPredicate->_this();
+      // if ( SMESH::Functor_i* fun = SMESH::DownCast<SMESH::Functor_i*>( anObj ))
+      //   TPythonDump() << fun << " = " << this << ".GetPredicate()";
+      return anObj._retn();
     }
+  }
+
+  //================================================================================
+  /*!
+   * \brief Find groups it depends on
+   */
+  //================================================================================
 
-  // remember new groups
-  myBaseGroups.clear();
-  if ( myPredicate )
+  void Filter_i::FindBaseObjects()
   {
-    std::vector<Predicate_i*> predicates;
-    getPrediacates( myPredicate, predicates );
-    for ( size_t i = 0; i < predicates.size(); ++i )
-      if ( BelongToMeshGroup_i* bmg = dynamic_cast< BelongToMeshGroup_i* >( predicates[i] ))
+    // release current groups
+    for ( size_t i = 0; i < myBaseGroups.size(); ++i )
+      if ( myBaseGroups[i] )
       {
-        SMESH::SMESH_GroupBase_var g = bmg->GetGroup();
-        SMESH_GroupBase_i* g_i = SMESH::DownCast< SMESH_GroupBase_i*>( g );
-        if ( g_i )
+        myBaseGroups[i]->RemoveModifWaiter( this );
+        myBaseGroups[i]->UnRegister();
+      }
+
+    // remember new groups
+    myBaseGroups.clear();
+    if ( myPredicate )
+    {
+      std::vector<Predicate_i*> predicates;
+      getPrediacates( myPredicate, predicates );
+      for ( size_t i = 0; i < predicates.size(); ++i )
+        if ( BelongToMeshGroup_i* bmg = dynamic_cast< BelongToMeshGroup_i* >( predicates[i] ))
         {
-          g_i->AddModifWaiter( this );
-          g_i->Register();
-          myBaseGroups.push_back( g_i );
+          SMESH::SMESH_GroupBase_var g = bmg->GetGroup();
+          SMESH_GroupBase_i* g_i = SMESH::DownCast< SMESH_GroupBase_i*>( g );
+          if ( g_i )
+          {
+            g_i->AddModifWaiter( this );
+            g_i->Register();
+            myBaseGroups.push_back( g_i );
+          }
         }
-      }
+    }
   }
-}
 
-//================================================================================
-/*!
- * \brief When notified on removal of myBaseGroups[i], remove a reference to a
- *        group from a predicate
- */
-//================================================================================
-
-void Filter_i::OnBaseObjModified(NotifyerAndWaiter* group, bool removed)
-{
-  if ( !removed )
-    return; // a GroupOnFilter holding this filter is notified automatically
+  //================================================================================
+  /*!
+   * \brief When notified on removal of myBaseGroups[i], remove a reference to a
+   *        group from a predicate
+   */
+  //================================================================================
 
-  if ( myPredicate )
+  void Filter_i::OnBaseObjModified(NotifyerAndWaiter* group, bool removed)
   {
-    std::vector<Predicate_i*> predicates;
-    getPrediacates( myPredicate, predicates );
-    for ( size_t i = 0; i < predicates.size(); ++i )
-      if ( BelongToMeshGroup_i* bmg = dynamic_cast< BelongToMeshGroup_i* >( predicates[i] ))
-      {
-        SMESH::SMESH_GroupBase_var g = bmg->GetGroup();
-        SMESH_GroupBase_i* g_i = SMESH::DownCast< SMESH_GroupBase_i*>( g );
-        if ( g_i == group )
+    if ( !removed )
+      return; // a GroupOnFilter holding this filter is notified automatically
+
+    if ( myPredicate )
+    {
+      std::vector<Predicate_i*> predicates;
+      getPrediacates( myPredicate, predicates );
+      for ( size_t i = 0; i < predicates.size(); ++i )
+        if ( BelongToMeshGroup_i* bmg = dynamic_cast< BelongToMeshGroup_i* >( predicates[i] ))
         {
-          bmg->SetGroup( SMESH::SMESH_GroupBase::_nil() );
-          bmg->SetGroupID( "" );
+          SMESH::SMESH_GroupBase_var g = bmg->GetGroup();
+          SMESH_GroupBase_i* g_i = SMESH::DownCast< SMESH_GroupBase_i*>( g );
+          if ( g_i == group )
+          {
+            bmg->SetGroup( SMESH::SMESH_GroupBase::_nil() );
+            bmg->SetGroupID( "" );
+          }
         }
-      }
-  }
-
-  FindBaseObjects(); // release and update myBaseGroups;
-}
-
-/*
-                            FILTER LIBRARY
-*/
+    }
 
-#define ATTR_TYPE          "type"
-#define ATTR_COMPARE       "compare"
-#define ATTR_THRESHOLD     "threshold"
-#define ATTR_UNARY         "unary"
-#define ATTR_BINARY        "binary"
-#define ATTR_THRESHOLD_STR "threshold_str"
-#define ATTR_TOLERANCE     "tolerance"
-#define ATTR_ELEMENT_TYPE  "ElementType"
-
-//=======================================================================
-// name    : toString
-// Purpose : Convert bool to LDOMString
-//=======================================================================
-static inline LDOMString toString( CORBA::Boolean val )
-{
-  return val ? "logical not" : "";
-}
+    FindBaseObjects(); // release and update myBaseGroups;
+  }
 
-//=======================================================================
-// name    : toBool
-// Purpose : Convert LDOMString to bool
-//=======================================================================
-static inline bool toBool( const LDOMString& theStr )
-{
-  return theStr.equals( "logical not" );
-}
+  /*
+                              FILTER LIBRARY
+  */
+
+  #define ATTR_TYPE          "type"
+  #define ATTR_COMPARE       "compare"
+  #define ATTR_THRESHOLD     "threshold"
+  #define ATTR_UNARY         "unary"
+  #define ATTR_BINARY        "binary"
+  #define ATTR_THRESHOLD_STR "threshold_str"
+  #define ATTR_TOLERANCE     "tolerance"
+  #define ATTR_ELEMENT_TYPE  "ElementType"
+
+  //=======================================================================
+  // name    : toString
+  // Purpose : Convert bool to LDOMString
+  //=======================================================================
+  static inline LDOMString toString( CORBA::Boolean val )
+  {
+    return val ? "logical not" : "";
+  }
 
-//=======================================================================
-// name    : toString
-// Purpose : Convert double to LDOMString
-//=======================================================================
-static inline LDOMString toString( CORBA::Double val )
-{
-  char a[ 255 ];
-  sprintf( a, "%e", val );
-  return LDOMString( a );
-}
+  //=======================================================================
+  // name    : toBool
+  // Purpose : Convert LDOMString to bool
+  //=======================================================================
+  static inline bool toBool( const LDOMString& theStr )
+  {
+    return theStr.equals( "logical not" );
+  }
 
-//=======================================================================
-// name    : toDouble
-// Purpose : Convert LDOMString to double
-//=======================================================================
-static inline double toDouble( const LDOMString& theStr )
-{
-  return atof( theStr.GetString() );
-}
+  //=======================================================================
+  // name    : toString
+  // Purpose : Convert double to LDOMString
+  //=======================================================================
+  static inline LDOMString toString( CORBA::Double val )
+  {
+    char a[ 255 ];
+    sprintf( a, "%e", val );
+    return LDOMString( a );
+  }
 
-//=======================================================================
-// name    : toString
-// Purpose : Convert functor type to LDOMString
-//=======================================================================
-static inline LDOMString toString( CORBA::Long theType )
-{
-  switch ( theType )
-  {
-    case FT_AspectRatio           : return "Aspect ratio";
-    case FT_Warping               : return "Warping";
-    case FT_MinimumAngle          : return "Minimum angle";
-    case FT_Taper                 : return "Taper";
-    case FT_Skew                  : return "Skew";
-    case FT_Area                  : return "Area";
-    case FT_Volume3D              : return "Volume3D";
-    case FT_MaxElementLength2D    : return "Max element length 2D";
-    case FT_MaxElementLength3D    : return "Max element length 3D";
-    case FT_BelongToMeshGroup     : return "Belong to Mesh Group";
-    case FT_BelongToGeom          : return "Belong to Geom";
-    case FT_BelongToPlane         : return "Belong to Plane";
-    case FT_BelongToCylinder      : return "Belong to Cylinder";
-    case FT_BelongToGenSurface    : return "Belong to Generic Surface";
-    case FT_LyingOnGeom           : return "Lying on Geom";
-    case FT_BadOrientedVolume     : return "Bad Oriented Volume";
-    case FT_BareBorderVolume      : return "Volumes with bare border";
-    case FT_BareBorderFace        : return "Faces with bare border";
-    case FT_OverConstrainedVolume : return "Over-constrained Volumes";
-    case FT_OverConstrainedFace   : return "Over-constrained Faces";
-    case FT_RangeOfIds            : return "Range of IDs";
-    case FT_FreeBorders           : return "Free borders";
-    case FT_FreeEdges             : return "Free edges";
-    case FT_FreeFaces             : return "Free faces";
-    case FT_FreeNodes             : return "Free nodes";
-    case FT_EqualNodes            : return "Equal nodes";
-    case FT_EqualEdges            : return "Equal edges";
-    case FT_EqualFaces            : return "Equal faces";
-    case FT_EqualVolumes          : return "Equal volumes";
-    case FT_MultiConnection       : return "Borders at multi-connections";
-    case FT_MultiConnection2D     : return "Borders at multi-connections 2D";
-    case FT_Length                : return "Length";
-    case FT_Length2D              : return "Length 2D";
-    case FT_Length3D              : return "Length 3D";
-    case FT_Deflection2D          : return "Deflection 2D";
-    case FT_LessThan              : return "Less than";
-    case FT_MoreThan              : return "More than";
-    case FT_EqualTo               : return "Equal to";
-    case FT_LogicalNOT            : return "Not";
-    case FT_LogicalAND            : return "And";
-    case FT_LogicalOR             : return "Or";
-    case FT_GroupColor            : return "Color of Group";
-    case FT_LinearOrQuadratic     : return "Linear or Quadratic";
-    case FT_ElemGeomType          : return "Element geometry type";
-    case FT_EntityType            : return "Entity type";
-    case FT_Undefined             : return "";
-    default                       : return "";
+  //=======================================================================
+  // name    : toDouble
+  // Purpose : Convert LDOMString to double
+  //=======================================================================
+  static inline double toDouble( const LDOMString& theStr )
+  {
+    return atof( theStr.GetString() );
   }
-}
 
-//=======================================================================
-// name    : toFunctorType
-// Purpose : Convert LDOMString to functor type
-//=======================================================================
-static inline SMESH::FunctorType toFunctorType( const LDOMString& theStr )
-{
-  if      ( theStr.equals( "Aspect ratio"                 ) ) return FT_AspectRatio;
-  else if ( theStr.equals( "Warping"                      ) ) return FT_Warping;
-  else if ( theStr.equals( "Minimum angle"                ) ) return FT_MinimumAngle;
-  else if ( theStr.equals( "Taper"                        ) ) return FT_Taper;
-  else if ( theStr.equals( "Skew"                         ) ) return FT_Skew;
-  else if ( theStr.equals( "Area"                         ) ) return FT_Area;
-  else if ( theStr.equals( "Volume3D"                     ) ) return FT_Volume3D;
-  else if ( theStr.equals( "Max element length 2D"        ) ) return FT_MaxElementLength2D;
-  else if ( theStr.equals( "Max element length 3D"        ) ) return FT_MaxElementLength3D;
-  else if ( theStr.equals( "Belong to Mesh Group"         ) ) return FT_BelongToMeshGroup;
-  else if ( theStr.equals( "Belong to Geom"               ) ) return FT_BelongToGeom;
-  else if ( theStr.equals( "Belong to Plane"              ) ) return FT_BelongToPlane;
-  else if ( theStr.equals( "Belong to Cylinder"           ) ) return FT_BelongToCylinder;
-  else if ( theStr.equals( "Belong to Generic Surface"    ) ) return FT_BelongToGenSurface;
-  else if ( theStr.equals( "Lying on Geom"                ) ) return FT_LyingOnGeom;
-  else if ( theStr.equals( "Free borders"                 ) ) return FT_FreeBorders;
-  else if ( theStr.equals( "Free edges"                   ) ) return FT_FreeEdges;
-  else if ( theStr.equals( "Free faces"                   ) ) return FT_FreeFaces;
-  else if ( theStr.equals( "Free nodes"                   ) ) return FT_FreeNodes;
-  else if ( theStr.equals( "Equal nodes"                  ) ) return FT_EqualNodes;
-  else if ( theStr.equals( "Equal edges"                  ) ) return FT_EqualEdges;
-  else if ( theStr.equals( "Equal faces"                  ) ) return FT_EqualFaces;
-  else if ( theStr.equals( "Equal volumes"                ) ) return FT_EqualVolumes;
-  else if ( theStr.equals( "Borders at multi-connections" ) ) return FT_MultiConnection;
-  //  else if ( theStr.equals( "Borders at multi-connections 2D" ) ) return FT_MultiConnection2D;
-  else if ( theStr.equals( "Length"                       ) ) return FT_Length;
-  //  else if ( theStr.equals( "Length2D"                     ) ) return FT_Length2D;
-  //  else if ( theStr.equals( "Length3D"                     ) ) return FT_Length3D;
-  else if ( theStr.equals( "Deflection"                   ) ) return FT_Deflection2D;
-  else if ( theStr.equals( "Range of IDs"                 ) ) return FT_RangeOfIds;
-  else if ( theStr.equals( "Bad Oriented Volume"          ) ) return FT_BadOrientedVolume;
-  else if ( theStr.equals( "Volumes with bare border"     ) ) return FT_BareBorderVolume;
-  else if ( theStr.equals( "Faces with bare border"       ) ) return FT_BareBorderFace;
-  else if ( theStr.equals( "Over-constrained Volumes"     ) ) return FT_OverConstrainedVolume;
-  else if ( theStr.equals( "Over-constrained Faces"       ) ) return FT_OverConstrainedFace;
-  else if ( theStr.equals( "Less than"                    ) ) return FT_LessThan;
-  else if ( theStr.equals( "More than"                    ) ) return FT_MoreThan;
-  else if ( theStr.equals( "Equal to"                     ) ) return FT_EqualTo;
-  else if ( theStr.equals( "Not"                          ) ) return FT_LogicalNOT;
-  else if ( theStr.equals( "And"                          ) ) return FT_LogicalAND;
-  else if ( theStr.equals( "Or"                           ) ) return FT_LogicalOR;
-  else if ( theStr.equals( "Color of Group"               ) ) return FT_GroupColor;
-  else if ( theStr.equals( "Linear or Quadratic"          ) ) return FT_LinearOrQuadratic;
-  else if ( theStr.equals( "Element geometry type"        ) ) return FT_ElemGeomType;
-  else if ( theStr.equals( "Entity type"                  ) ) return FT_EntityType;
-  else if ( theStr.equals( ""                             ) ) return FT_Undefined;
-  else  return FT_Undefined;
-}
+  //=======================================================================
+  // name    : toString
+  // Purpose : Convert functor type to LDOMString
+  //=======================================================================
+  static inline LDOMString toString( CORBA::Long theType )
+  {
+    switch ( theType )
+    {
+      case FT_AspectRatio           : return "Aspect ratio";
+      case FT_Warping               : return "Warping";
+      case FT_Warping3D             : return "Warping 3D";
+      case FT_MinimumAngle          : return "Minimum angle";
+      case FT_Taper                 : return "Taper";
+      case FT_Skew                  : return "Skew";
+      case FT_Area                  : return "Area";
+      case FT_Volume3D              : return "Volume3D";
+      case FT_ScaledJacobian        : return "ScaledJacobian";
+      case FT_MaxElementLength2D    : return "Max element length 2D";
+      case FT_MaxElementLength3D    : return "Max element length 3D";
+      case FT_BelongToMeshGroup     : return "Belong to Mesh Group";
+      case FT_BelongToGeom          : return "Belong to Geom";
+      case FT_BelongToPlane         : return "Belong to Plane";
+      case FT_BelongToCylinder      : return "Belong to Cylinder";
+      case FT_BelongToGenSurface    : return "Belong to Generic Surface";
+      case FT_LyingOnGeom           : return "Lying on Geom";
+      case FT_BadOrientedVolume     : return "Bad Oriented Volume";
+      case FT_BareBorderVolume      : return "Volumes with bare border";
+      case FT_BareBorderFace        : return "Faces with bare border";
+      case FT_OverConstrainedVolume : return "Over-constrained Volumes";
+      case FT_OverConstrainedFace   : return "Over-constrained Faces";
+      case FT_RangeOfIds            : return "Range of IDs";
+      case FT_FreeBorders           : return "Free borders";
+      case FT_FreeEdges             : return "Free edges";
+      case FT_FreeFaces             : return "Free faces";
+      case FT_FreeNodes             : return "Free nodes";
+      case FT_EqualNodes            : return "Equal nodes";
+      case FT_EqualEdges            : return "Equal edges";
+      case FT_EqualFaces            : return "Equal faces";
+      case FT_EqualVolumes          : return "Equal volumes";
+      case FT_MultiConnection       : return "Borders at multi-connections";
+      case FT_MultiConnection2D     : return "Borders at multi-connections 2D";
+      case FT_Length                : return "Length";
+      case FT_Length2D              : return "Length 2D";
+      case FT_Length3D              : return "Length 3D";
+      case FT_Deflection2D          : return "Deflection 2D";
+      case FT_LessThan              : return "Less than";
+      case FT_MoreThan              : return "More than";
+      case FT_EqualTo               : return "Equal to";
+      case FT_LogicalNOT            : return "Not";
+      case FT_LogicalAND            : return "And";
+      case FT_LogicalOR             : return "Or";
+      case FT_GroupColor            : return "Color of Group";
+      case FT_LinearOrQuadratic     : return "Linear or Quadratic";
+      case FT_ElemGeomType          : return "Element geometry type";
+      case FT_EntityType            : return "Entity type";
+      case FT_Undefined             : return "";
+      default                       : return "";
+    }
+  }
 
-//=======================================================================
-// name    : toFunctorType
-// Purpose : Convert LDOMString to value of ElementType enumeration
-//=======================================================================
-static inline SMESH::ElementType toElementType( const LDOMString& theStr )
-{
-  if      ( theStr.equals( "NODE"   ) ) return SMESH::NODE;
-  else if ( theStr.equals( "EDGE"   ) ) return SMESH::EDGE;
-  else if ( theStr.equals( "FACE"   ) ) return SMESH::FACE;
-  else if ( theStr.equals( "VOLUME" ) ) return SMESH::VOLUME;
-  else                                  return SMESH::ALL;
-}
+  //=======================================================================
+  // name    : toFunctorType
+  // Purpose : Convert LDOMString to functor type
+  //=======================================================================
+  static inline SMESH::FunctorType toFunctorType( const LDOMString& theStr )
+  {
+    if      ( theStr.equals( "Aspect ratio"                 ) ) return FT_AspectRatio;
+    else if ( theStr.equals( "Warping"                      ) ) return FT_Warping;
+    else if ( theStr.equals( "Warping 3D"                   ) ) return FT_Warping3D;
+    else if ( theStr.equals( "Minimum angle"                ) ) return FT_MinimumAngle;
+    else if ( theStr.equals( "Taper"                        ) ) return FT_Taper;
+    else if ( theStr.equals( "Skew"                         ) ) return FT_Skew;
+    else if ( theStr.equals( "Area"                         ) ) return FT_Area;
+    else if ( theStr.equals( "Volume3D"                     ) ) return FT_Volume3D;
+    else if ( theStr.equals( "ScaledJacobian"               ) ) return FT_ScaledJacobian;
+    else if ( theStr.equals( "Max element length 2D"        ) ) return FT_MaxElementLength2D;
+    else if ( theStr.equals( "Max element length 3D"        ) ) return FT_MaxElementLength3D;
+    else if ( theStr.equals( "Belong to Mesh Group"         ) ) return FT_BelongToMeshGroup;
+    else if ( theStr.equals( "Belong to Geom"               ) ) return FT_BelongToGeom;
+    else if ( theStr.equals( "Belong to Plane"              ) ) return FT_BelongToPlane;
+    else if ( theStr.equals( "Belong to Cylinder"           ) ) return FT_BelongToCylinder;
+    else if ( theStr.equals( "Belong to Generic Surface"    ) ) return FT_BelongToGenSurface;
+    else if ( theStr.equals( "Lying on Geom"                ) ) return FT_LyingOnGeom;
+    else if ( theStr.equals( "Free borders"                 ) ) return FT_FreeBorders;
+    else if ( theStr.equals( "Free edges"                   ) ) return FT_FreeEdges;
+    else if ( theStr.equals( "Free faces"                   ) ) return FT_FreeFaces;
+    else if ( theStr.equals( "Free nodes"                   ) ) return FT_FreeNodes;
+    else if ( theStr.equals( "Equal nodes"                  ) ) return FT_EqualNodes;
+    else if ( theStr.equals( "Equal edges"                  ) ) return FT_EqualEdges;
+    else if ( theStr.equals( "Equal faces"                  ) ) return FT_EqualFaces;
+    else if ( theStr.equals( "Equal volumes"                ) ) return FT_EqualVolumes;
+    else if ( theStr.equals( "Borders at multi-connections" ) ) return FT_MultiConnection;
+    //  else if ( theStr.equals( "Borders at multi-connections 2D" ) ) return FT_MultiConnection2D;
+    else if ( theStr.equals( "Length"                       ) ) return FT_Length;
+    //  else if ( theStr.equals( "Length2D"                     ) ) return FT_Length2D;
+    //  else if ( theStr.equals( "Length3D"                     ) ) return FT_Length3D;
+    else if ( theStr.equals( "Deflection"                   ) ) return FT_Deflection2D;
+    else if ( theStr.equals( "Range of IDs"                 ) ) return FT_RangeOfIds;
+    else if ( theStr.equals( "Bad Oriented Volume"          ) ) return FT_BadOrientedVolume;
+    else if ( theStr.equals( "Volumes with bare border"     ) ) return FT_BareBorderVolume;
+    else if ( theStr.equals( "Faces with bare border"       ) ) return FT_BareBorderFace;
+    else if ( theStr.equals( "Over-constrained Volumes"     ) ) return FT_OverConstrainedVolume;
+    else if ( theStr.equals( "Over-constrained Faces"       ) ) return FT_OverConstrainedFace;
+    else if ( theStr.equals( "Less than"                    ) ) return FT_LessThan;
+    else if ( theStr.equals( "More than"                    ) ) return FT_MoreThan;
+    else if ( theStr.equals( "Equal to"                     ) ) return FT_EqualTo;
+    else if ( theStr.equals( "Not"                          ) ) return FT_LogicalNOT;
+    else if ( theStr.equals( "And"                          ) ) return FT_LogicalAND;
+    else if ( theStr.equals( "Or"                           ) ) return FT_LogicalOR;
+    else if ( theStr.equals( "Color of Group"               ) ) return FT_GroupColor;
+    else if ( theStr.equals( "Linear or Quadratic"          ) ) return FT_LinearOrQuadratic;
+    else if ( theStr.equals( "Element geometry type"        ) ) return FT_ElemGeomType;
+    else if ( theStr.equals( "Entity type"                  ) ) return FT_EntityType;
+    else if ( theStr.equals( ""                             ) ) return FT_Undefined;
+    else  return FT_Undefined;
+  }
 
-//=======================================================================
-// name    : toString
-// Purpose : Convert ElementType to string
-//=======================================================================
-static inline LDOMString toString( const SMESH::ElementType theType )
-{
-  switch ( theType )
+  //=======================================================================
+  // name    : toFunctorType
+  // Purpose : Convert LDOMString to value of ElementType enumeration
+  //=======================================================================
+  static inline SMESH::ElementType toElementType( const LDOMString& theStr )
   {
-    case SMESH::NODE   : return "NODE";
-    case SMESH::EDGE   : return "EDGE";
-    case SMESH::FACE   : return "FACE";
-    case SMESH::VOLUME : return "VOLUME";
-    case SMESH::ALL    : return "ALL";
-    default            : return "";
+    if      ( theStr.equals( "NODE"   ) ) return SMESH::NODE;
+    else if ( theStr.equals( "EDGE"   ) ) return SMESH::EDGE;
+    else if ( theStr.equals( "FACE"   ) ) return SMESH::FACE;
+    else if ( theStr.equals( "VOLUME" ) ) return SMESH::VOLUME;
+    else                                  return SMESH::ALL;
   }
-}
 
-//=======================================================================
-// name    : findFilter
-// Purpose : Find filter in document
-//=======================================================================
-static LDOM_Element findFilter( const char* theFilterName,
-                                const LDOM_Document& theDoc,
-                                LDOM_Node* theParent = 0 )
-{
-  LDOM_Element aRootElement = theDoc.getDocumentElement();
-  if ( aRootElement.isNull() || !aRootElement.hasChildNodes() )
-    return LDOM_Element();
+  //=======================================================================
+  // name    : toString
+  // Purpose : Convert ElementType to string
+  //=======================================================================
+  static inline LDOMString toString( const SMESH::ElementType theType )
+  {
+    switch ( theType )
+    {
+      case SMESH::NODE   : return "NODE";
+      case SMESH::EDGE   : return "EDGE";
+      case SMESH::FACE   : return "FACE";
+      case SMESH::VOLUME : return "VOLUME";
+      case SMESH::ALL    : return "ALL";
+      default            : return "";
+    }
+  }
 
-  for ( LDOM_Node aTypeNode = aRootElement.getFirstChild();
-        !aTypeNode.isNull(); aTypeNode = aTypeNode.getNextSibling() )
+  //=======================================================================
+  // name    : findFilter
+  // Purpose : Find filter in document
+  //=======================================================================
+  static LDOM_Element findFilter( const char* theFilterName,
+                                  const LDOM_Document& theDoc,
+                                  LDOM_Node* theParent = 0 )
   {
-    for ( LDOM_Node aFilter = aTypeNode.getFirstChild();
-          !aFilter.isNull(); aFilter = aFilter.getNextSibling() )
+    LDOM_Element aRootElement = theDoc.getDocumentElement();
+    if ( aRootElement.isNull() || !aRootElement.hasChildNodes() )
+      return LDOM_Element();
+
+    for ( LDOM_Node aTypeNode = aRootElement.getFirstChild();
+          !aTypeNode.isNull(); aTypeNode = aTypeNode.getNextSibling() )
     {
-      LDOM_Element* anElem = ( LDOM_Element* )&aFilter;
-      if ( anElem->getTagName().equals( LDOMString( "filter" ) ) &&
-           anElem->getAttribute( "name" ).equals( LDOMString( theFilterName ) ) )
+      for ( LDOM_Node aFilter = aTypeNode.getFirstChild();
+            !aFilter.isNull(); aFilter = aFilter.getNextSibling() )
       {
-        if ( theParent != 0  )
-          *theParent = aTypeNode;
-        return (LDOM_Element&)aFilter;
+        LDOM_Element* anElem = ( LDOM_Element* )&aFilter;
+        if ( anElem->getTagName().equals( LDOMString( "filter" ) ) &&
+             anElem->getAttribute( "name" ).equals( LDOMString( theFilterName ) ) )
+        {
+          if ( theParent != 0  )
+            *theParent = aTypeNode;
+          return (LDOM_Element&)aFilter;
+        }
       }
     }
+    return LDOM_Element();
   }
-  return LDOM_Element();
-}
 
-//=======================================================================
-// name    : getSectionName
-// Purpose : Get name of section of filters
-//=======================================================================
-static const char* getSectionName( const ElementType theType )
-{
-  switch ( theType )
+  //=======================================================================
+  // name    : getSectionName
+  // Purpose : Get name of section of filters
+  //=======================================================================
+  static const char* getSectionName( const ElementType theType )
   {
-    case SMESH::NODE   : return "Filters for nodes";
-    case SMESH::EDGE   : return "Filters for edges";
-    case SMESH::FACE   : return "Filters for faces";
-    case SMESH::VOLUME : return "Filters for volumes";
-    case SMESH::ALL    : return "Filters for elements";
-    default            : return "";
-  }
-}
-
-//=======================================================================
-// name    : getSection
-// Purpose : Create section for filters corresponding to the entity type
-//=======================================================================
-static LDOM_Node getSection( const ElementType theType,
-                             LDOM_Document&    theDoc,
-                             const bool        toCreate = false )
-{
-  LDOM_Element aRootElement = theDoc.getDocumentElement();
-  if ( aRootElement.isNull() )
-    return LDOM_Node();
-
-  // Find section
-  bool anExist = false;
-  const char* aSectionName = getSectionName( theType );
-  if ( strcmp( aSectionName, "" ) == 0 )
-    return LDOM_Node();
-
-  LDOM_NodeList aSections = theDoc.getElementsByTagName( "section" );
-  LDOM_Node aNode;
-  for ( int i = 0, n = aSections.getLength(); i < n; i++ )
-  {
-    aNode = aSections.item( i );
-    LDOM_Element& anItem = ( LDOM_Element& )aNode;
-    if ( anItem.getAttribute( "name" ).equals( LDOMString( aSectionName ) ) )
+    switch ( theType )
     {
-      anExist = true;
-      break;
+      case SMESH::NODE   : return "Filters for nodes";
+      case SMESH::EDGE   : return "Filters for edges";
+      case SMESH::FACE   : return "Filters for faces";
+      case SMESH::VOLUME : return "Filters for volumes";
+      case SMESH::ALL    : return "Filters for elements";
+      default            : return "";
     }
   }
 
-  // Create new section if necessary
-  if ( !anExist )
+  //=======================================================================
+  // name    : getSection
+  // Purpose : Create section for filters corresponding to the entity type
+  //=======================================================================
+  static LDOM_Node getSection( const ElementType theType,
+                               LDOM_Document&    theDoc,
+                               const bool        toCreate = false )
   {
-    if ( toCreate )
+    LDOM_Element aRootElement = theDoc.getDocumentElement();
+    if ( aRootElement.isNull() )
+      return LDOM_Node();
+
+    // Find section
+    bool anExist = false;
+    const char* aSectionName = getSectionName( theType );
+    if ( strcmp( aSectionName, "" ) == 0 )
+      return LDOM_Node();
+
+    LDOM_NodeList aSections = theDoc.getElementsByTagName( "section" );
+    LDOM_Node aNode;
+    for ( int i = 0, n = aSections.getLength(); i < n; i++ )
     {
-      LDOM_Element aNewItem = theDoc.createElement( "section" );
-      aNewItem.setAttribute( "name", aSectionName );
-      aRootElement.appendChild( aNewItem );
-      return aNewItem;
+      aNode = aSections.item( i );
+      LDOM_Element& anItem = ( LDOM_Element& )aNode;
+      if ( anItem.getAttribute( "name" ).equals( LDOMString( aSectionName ) ) )
+      {
+        anExist = true;
+        break;
+      }
     }
-    else
-      return LDOM_Node();
+
+    // Create new section if necessary
+    if ( !anExist )
+    {
+      if ( toCreate )
+      {
+        LDOM_Element aNewItem = theDoc.createElement( "section" );
+        aNewItem.setAttribute( "name", aSectionName );
+        aRootElement.appendChild( aNewItem );
+        return aNewItem;
+      }
+      else
+        return LDOM_Node();
+    }
+    return
+      aNode;
   }
-  return
-    aNode;
-}
 
-//=======================================================================
-// name    : createFilterItem
-// Purpose : Create filter item or LDOM document
-//=======================================================================
-static LDOM_Element createFilterItem( const char*       theName,
-                                      SMESH::Filter_ptr theFilter,
-                                      LDOM_Document&    theDoc )
-{
-  // create new filter in document
-  LDOM_Element aFilterItem = theDoc.createElement( "filter" );
-  aFilterItem.setAttribute( "name", theName );
+  //=======================================================================
+  // name    : createFilterItem
+  // Purpose : Create filter item or LDOM document
+  //=======================================================================
+  static LDOM_Element createFilterItem( const char*       theName,
+                                        SMESH::Filter_ptr theFilter,
+                                        LDOM_Document&    theDoc )
+  {
+    // create new filter in document
+    LDOM_Element aFilterItem = theDoc.createElement( "filter" );
+    aFilterItem.setAttribute( "name", theName );
 
-  // save filter criterions
-  SMESH::Filter::Criteria_var aCriteria = new SMESH::Filter::Criteria;
+    // save filter criterions
+    SMESH::Filter::Criteria_var aCriteria = new SMESH::Filter::Criteria;
 
-  if ( !theFilter->GetCriteria( aCriteria ) )
-    return LDOM_Element();
+    if ( !theFilter->GetCriteria( aCriteria ) )
+      return LDOM_Element();
 
-  for ( CORBA::ULong i = 0, n = aCriteria->length(); i < n; i++ )
-  {
-    LDOM_Element aCriterionItem = theDoc.createElement( "criterion" );
+    for ( CORBA::ULong i = 0, n = aCriteria->length(); i < n; i++ )
+    {
+      LDOM_Element aCriterionItem = theDoc.createElement( "criterion" );
     
-    aCriterionItem.setAttribute( ATTR_TYPE         , toString(  aCriteria[ i ].Type) );
-    aCriterionItem.setAttribute( ATTR_COMPARE      , toString(  aCriteria[ i ].Compare ) );
-    aCriterionItem.setAttribute( ATTR_THRESHOLD    , toString(  aCriteria[ i ].Threshold ) );
-    aCriterionItem.setAttribute( ATTR_UNARY        , toString(  aCriteria[ i ].UnaryOp ) );
-    aCriterionItem.setAttribute( ATTR_BINARY       , toString(  aCriteria[ i ].BinaryOp ) );
-
-    aCriterionItem.setAttribute( ATTR_THRESHOLD_STR, (const char*)aCriteria[ i ].ThresholdStr );
-    aCriterionItem.setAttribute( ATTR_TOLERANCE    , toString( aCriteria[ i ].Tolerance ) );
-    aCriterionItem.setAttribute( ATTR_ELEMENT_TYPE ,
-      toString( (SMESH::ElementType)aCriteria[ i ].TypeOfElement ) );
+      aCriterionItem.setAttribute( ATTR_TYPE         , toString(  aCriteria[ i ].Type) );
+      aCriterionItem.setAttribute( ATTR_COMPARE      , toString(  aCriteria[ i ].Compare ) );
+      aCriterionItem.setAttribute( ATTR_THRESHOLD    , toString(  aCriteria[ i ].Threshold ) );
+      aCriterionItem.setAttribute( ATTR_UNARY        , toString(  aCriteria[ i ].UnaryOp ) );
+      aCriterionItem.setAttribute( ATTR_BINARY       , toString(  aCriteria[ i ].BinaryOp ) );
+
+      aCriterionItem.setAttribute( ATTR_THRESHOLD_STR, (const char*)aCriteria[ i ].ThresholdStr );
+      aCriterionItem.setAttribute( ATTR_TOLERANCE    , toString( aCriteria[ i ].Tolerance ) );
+      aCriterionItem.setAttribute( ATTR_ELEMENT_TYPE ,
+        toString( (SMESH::ElementType)aCriteria[ i ].TypeOfElement ) );
+
+      aFilterItem.appendChild( aCriterionItem );
+    }
 
-    aFilterItem.appendChild( aCriterionItem );
+    return aFilterItem;
   }
 
-  return aFilterItem;
-}
+  //=======================================================================
+  // name    : FilterLibrary_i::FilterLibrary_i
+  // Purpose : Constructor
+  //=======================================================================
+  FilterLibrary_i::FilterLibrary_i( const char* theFileName )
+  {
+    myFileName = CORBA::string_dup( theFileName );
+    SMESH::FilterManager_i* aFilterMgr = new SMESH::FilterManager_i();
+    myFilterMgr = aFilterMgr->_this();
 
-//=======================================================================
-// name    : FilterLibrary_i::FilterLibrary_i
-// Purpose : Constructor
-//=======================================================================
-FilterLibrary_i::FilterLibrary_i( const char* theFileName )
-{
-  myFileName = CORBA::string_dup( theFileName );
-  SMESH::FilterManager_i* aFilterMgr = new SMESH::FilterManager_i();
-  myFilterMgr = aFilterMgr->_this();
+    LDOMParser aParser;
+
+    // Try to use existing library file
+    bool anExists = false;
+    if ( !aParser.parse( myFileName ) )
+    {
+      myDoc = aParser.getDocument();
+      anExists = true;
+    }
+    // Create a new XML document if it doesn't exist
+    else
+      myDoc = LDOM_Document::createDocument( LDOMString() );
 
-  LDOMParser aParser;
+    LDOM_Element aRootElement = myDoc.getDocumentElement();
+    if ( aRootElement.isNull() )
+    {
+      // If the existing document is empty --> try to create a new one
+      if ( anExists )
+        myDoc = LDOM_Document::createDocument( LDOMString() );
+    }
+  }
 
-  // Try to use existing library file
-  bool anExists = false;
-  if ( !aParser.parse( myFileName ) )
+  //=======================================================================
+  // name    : FilterLibrary_i::FilterLibrary_i
+  // Purpose : Constructor
+  //=======================================================================
+  FilterLibrary_i::FilterLibrary_i()
   {
-    myDoc = aParser.getDocument();
-    anExists = true;
-  }
-  // Create a new XML document if it doesn't exist
-  else
+    myFileName = 0;
+    SMESH::FilterManager_i* aFilter = new SMESH::FilterManager_i();
+    myFilterMgr = aFilter->_this();
+
     myDoc = LDOM_Document::createDocument( LDOMString() );
+  }
 
-  LDOM_Element aRootElement = myDoc.getDocumentElement();
-  if ( aRootElement.isNull() )
+  FilterLibrary_i::~FilterLibrary_i()
   {
-    // If the existing document is empty --> try to create a new one
-    if ( anExists )
-      myDoc = LDOM_Document::createDocument( LDOMString() );
+    CORBA::string_free( myFileName );
+    //TPythonDump()<<this<<".UnRegister()";
   }
-}
-
-//=======================================================================
-// name    : FilterLibrary_i::FilterLibrary_i
-// Purpose : Constructor
-//=======================================================================
-FilterLibrary_i::FilterLibrary_i()
-{
-  myFileName = 0;
-  SMESH::FilterManager_i* aFilter = new SMESH::FilterManager_i();
-  myFilterMgr = aFilter->_this();
-
-  myDoc = LDOM_Document::createDocument( LDOMString() );
-}
 
-FilterLibrary_i::~FilterLibrary_i()
-{
-  CORBA::string_free( myFileName );
-  //TPythonDump()<<this<<".UnRegister()";
-}
+  //=======================================================================
+  // name    : FilterLibrary_i::Copy
+  // Purpose : Create filter and initialize it with values from library
+  //=======================================================================
+  Filter_ptr FilterLibrary_i::Copy( const char* theFilterName )
+  {
+    Filter_ptr aRes = Filter::_nil();
+    LDOM_Node aFilter = findFilter( theFilterName, myDoc );
 
-//=======================================================================
-// name    : FilterLibrary_i::Copy
-// Purpose : Create filter and initialize it with values from library
-//=======================================================================
-Filter_ptr FilterLibrary_i::Copy( const char* theFilterName )
-{
-  Filter_ptr aRes = Filter::_nil();
-  LDOM_Node aFilter = findFilter( theFilterName, myDoc );
+    if ( aFilter.isNull() )
+      return aRes;
 
-  if ( aFilter.isNull() )
-    return aRes;
+    std::list<SMESH::Filter::Criterion> aCriteria;
 
-  std::list<SMESH::Filter::Criterion> aCriteria;
+    for ( LDOM_Node aCritNode = aFilter.getFirstChild();
+          !aCritNode.isNull() ; aCritNode = aCritNode.getNextSibling() )
+    {
+      LDOM_Element* aCrit = (LDOM_Element*)&aCritNode;
 
-  for ( LDOM_Node aCritNode = aFilter.getFirstChild();
-        !aCritNode.isNull() ; aCritNode = aCritNode.getNextSibling() )
-  {
-    LDOM_Element* aCrit = (LDOM_Element*)&aCritNode;
+      const char* aTypeStr      = aCrit->getAttribute( ATTR_TYPE          ).GetString();
+      const char* aCompareStr   = aCrit->getAttribute( ATTR_COMPARE       ).GetString();
+      const char* aUnaryStr     = aCrit->getAttribute( ATTR_UNARY         ).GetString();
+      const char* aBinaryStr    = aCrit->getAttribute( ATTR_BINARY        ).GetString();
+      const char* anElemTypeStr = aCrit->getAttribute( ATTR_ELEMENT_TYPE  ).GetString();
 
-    const char* aTypeStr      = aCrit->getAttribute( ATTR_TYPE          ).GetString();
-    const char* aCompareStr   = aCrit->getAttribute( ATTR_COMPARE       ).GetString();
-    const char* aUnaryStr     = aCrit->getAttribute( ATTR_UNARY         ).GetString();
-    const char* aBinaryStr    = aCrit->getAttribute( ATTR_BINARY        ).GetString();
-    const char* anElemTypeStr = aCrit->getAttribute( ATTR_ELEMENT_TYPE  ).GetString();
+      SMESH::Filter::Criterion aCriterion = createCriterion();
 
-    SMESH::Filter::Criterion aCriterion = createCriterion();
+      aCriterion.Type          = toFunctorType( aTypeStr );
+      aCriterion.Compare       = toFunctorType( aCompareStr );
+      aCriterion.UnaryOp       = toFunctorType( aUnaryStr );
+      aCriterion.BinaryOp      = toFunctorType( aBinaryStr );
 
-    aCriterion.Type          = toFunctorType( aTypeStr );
-    aCriterion.Compare       = toFunctorType( aCompareStr );
-    aCriterion.UnaryOp       = toFunctorType( aUnaryStr );
-    aCriterion.BinaryOp      = toFunctorType( aBinaryStr );
+      aCriterion.TypeOfElement = toElementType( anElemTypeStr );
 
-    aCriterion.TypeOfElement = toElementType( anElemTypeStr );
+      LDOMString str = aCrit->getAttribute( ATTR_THRESHOLD );
+      int val = 0;
+      aCriterion.Threshold = str.Type() == LDOMBasicString::LDOM_Integer && str.GetInteger( val )
+        ? val : atof( str.GetString() );
 
-    LDOMString str = aCrit->getAttribute( ATTR_THRESHOLD );
-    int val = 0;
-    aCriterion.Threshold = str.Type() == LDOMBasicString::LDOM_Integer && str.GetInteger( val )
-      ? val : atof( str.GetString() );
+      str = aCrit->getAttribute( ATTR_TOLERANCE );
+      aCriterion.Tolerance = str.Type() == LDOMBasicString::LDOM_Integer && str.GetInteger( val )
+        ? val : atof( str.GetString() );
 
-    str = aCrit->getAttribute( ATTR_TOLERANCE );
-    aCriterion.Tolerance = str.Type() == LDOMBasicString::LDOM_Integer && str.GetInteger( val )
-      ? val : atof( str.GetString() );
+      str = aCrit->getAttribute( ATTR_THRESHOLD_STR );
+      if ( str.Type() == LDOMBasicString::LDOM_Integer && str.GetInteger( val ) )
+      {
+        char a[ 255 ];
+        sprintf( a, "%d", val );
+        aCriterion.ThresholdStr = CORBA::string_dup( a );
+      }
+      else
+        aCriterion.ThresholdStr = str.GetString();
 
-    str = aCrit->getAttribute( ATTR_THRESHOLD_STR );
-    if ( str.Type() == LDOMBasicString::LDOM_Integer && str.GetInteger( val ) )
-    {
-      char a[ 255 ];
-      sprintf( a, "%d", val );
-      aCriterion.ThresholdStr = CORBA::string_dup( a );
+      aCriteria.push_back( aCriterion );
     }
-    else
-      aCriterion.ThresholdStr = str.GetString();
 
-    aCriteria.push_back( aCriterion );
-  }
-
-  SMESH::Filter::Criteria_var aCriteriaVar = new SMESH::Filter::Criteria;
-  aCriteriaVar->length( aCriteria.size() );
+    SMESH::Filter::Criteria_var aCriteriaVar = new SMESH::Filter::Criteria;
+    aCriteriaVar->length( aCriteria.size() );
 
-  CORBA::ULong i = 0;
-  std::list<SMESH::Filter::Criterion>::iterator anIter = aCriteria.begin();
+    CORBA::ULong i = 0;
+    std::list<SMESH::Filter::Criterion>::iterator anIter = aCriteria.begin();
 
-  for( ; anIter != aCriteria.end(); ++anIter )
-    aCriteriaVar[ i++ ] = *anIter;
+    for( ; anIter != aCriteria.end(); ++anIter )
+      aCriteriaVar[ i++ ] = *anIter;
 
-  aRes = myFilterMgr->CreateFilter();
-  aRes->SetCriteria( aCriteriaVar.inout() );
+    aRes = myFilterMgr->CreateFilter();
+    aRes->SetCriteria( aCriteriaVar.inout() );
 
-  TPythonDump()<<this<<".Copy('"<<theFilterName<<"')";
+    TPythonDump()<<this<<".Copy('"<<theFilterName<<"')";
 
-  return aRes;
-}
+    return aRes;
+  }
 
-//=======================================================================
-// name    : FilterLibrary_i::SetFileName
-// Purpose : Set file name for library
-//=======================================================================
-void FilterLibrary_i::SetFileName( const char* theFileName )
-{
-  CORBA::string_free( myFileName );
-  myFileName = CORBA::string_dup( theFileName );
-  TPythonDump()<<this<<".SetFileName('"<<theFileName<<"')";
-}
+  //=======================================================================
+  // name    : FilterLibrary_i::SetFileName
+  // Purpose : Set file name for library
+  //=======================================================================
+  void FilterLibrary_i::SetFileName( const char* theFileName )
+  {
+    CORBA::string_free( myFileName );
+    myFileName = CORBA::string_dup( theFileName );
+    TPythonDump()<<this<<".SetFileName('"<<theFileName<<"')";
+  }
 
-//=======================================================================
-// name    : FilterLibrary_i::GetFileName
-// Purpose : Get file name of library
-//=======================================================================
-char* FilterLibrary_i::GetFileName()
-{
-  return CORBA::string_dup( myFileName );
-}
+  //=======================================================================
+  // name    : FilterLibrary_i::GetFileName
+  // Purpose : Get file name of library
+  //=======================================================================
+  char* FilterLibrary_i::GetFileName()
+  {
+    return CORBA::string_dup( myFileName );
+  }
 
-//=======================================================================
-// name    : FilterLibrary_i::Add
-// Purpose : Add new filter to library
-//=======================================================================
-CORBA::Boolean FilterLibrary_i::Add( const char* theFilterName, Filter_ptr theFilter )
-{
-  // if filter already in library or entry filter is null do nothing
-  LDOM_Node aFilterNode = findFilter( theFilterName, myDoc );
-  if ( !aFilterNode.isNull() || theFilter->_is_nil() )
-    return false;
-
-  // get section corresponding to the filter type
-  ElementType anEntType = theFilter->GetElementType();
-
-  LDOM_Node aSection = getSection( anEntType, myDoc, true );
-  if ( aSection.isNull() )
-    return false;
-
-  // create filter item
-  LDOM_Element aFilterItem = createFilterItem( theFilterName, theFilter, myDoc );
-  if ( aFilterItem.isNull() )
-    return false;
-  else
-  {
-    aSection.appendChild( aFilterItem );
-    if(Filter_i* aFilter = DownCast<Filter_i*>(theFilter))
-      TPythonDump()<<this<<".Add('"<<theFilterName<<"',"<<aFilter<<")";
-    return true;
+  //=======================================================================
+  // name    : FilterLibrary_i::Add
+  // Purpose : Add new filter to library
+  //=======================================================================
+  CORBA::Boolean FilterLibrary_i::Add( const char* theFilterName, Filter_ptr theFilter )
+  {
+    // if filter already in library or entry filter is null do nothing
+    LDOM_Node aFilterNode = findFilter( theFilterName, myDoc );
+    if ( !aFilterNode.isNull() || theFilter->_is_nil() )
+      return false;
+
+    // get section corresponding to the filter type
+    ElementType anEntType = theFilter->GetElementType();
+
+    LDOM_Node aSection = getSection( anEntType, myDoc, true );
+    if ( aSection.isNull() )
+      return false;
+
+    // create filter item
+    LDOM_Element aFilterItem = createFilterItem( theFilterName, theFilter, myDoc );
+    if ( aFilterItem.isNull() )
+      return false;
+    else
+    {
+      aSection.appendChild( aFilterItem );
+      if(Filter_i* aFilter = DownCast<Filter_i*>(theFilter))
+        TPythonDump()<<this<<".Add('"<<theFilterName<<"',"<<aFilter<<")";
+      return true;
+    }
   }
-}
 
-//=======================================================================
-// name    : FilterLibrary_i::Add
-// Purpose : Add new filter to library
-//=======================================================================
-CORBA::Boolean FilterLibrary_i::AddEmpty( const char* theFilterName, ElementType theType )
-{
-  // if filter already in library or entry filter is null do nothing
-  LDOM_Node aFilterNode = findFilter( theFilterName, myDoc );
-  if ( !aFilterNode.isNull() )
-    return false;
+  //=======================================================================
+  // name    : FilterLibrary_i::Add
+  // Purpose : Add new filter to library
+  //=======================================================================
+  CORBA::Boolean FilterLibrary_i::AddEmpty( const char* theFilterName, ElementType theType )
+  {
+    // if filter already in library or entry filter is null do nothing
+    LDOM_Node aFilterNode = findFilter( theFilterName, myDoc );
+    if ( !aFilterNode.isNull() )
+      return false;
 
-  LDOM_Node aSection = getSection( theType, myDoc, true );
-  if ( aSection.isNull() )
-    return false;
+    LDOM_Node aSection = getSection( theType, myDoc, true );
+    if ( aSection.isNull() )
+      return false;
 
-  // create filter item
-  Filter_var aFilter = myFilterMgr->CreateFilter();
+    // create filter item
+    Filter_var aFilter = myFilterMgr->CreateFilter();
 
-  LDOM_Element aFilterItem = createFilterItem( theFilterName, aFilter, myDoc );
-  if ( aFilterItem.isNull() )
-    return false;
-  else
-  {
-    aSection.appendChild( aFilterItem );
-    TPythonDump()<<this<<".AddEmpty('"<<theFilterName<<"',"<<theType<<")";
-    return true;
+    LDOM_Element aFilterItem = createFilterItem( theFilterName, aFilter, myDoc );
+    if ( aFilterItem.isNull() )
+      return false;
+    else
+    {
+      aSection.appendChild( aFilterItem );
+      TPythonDump()<<this<<".AddEmpty('"<<theFilterName<<"',"<<theType<<")";
+      return true;
+    }
   }
-}
 
-//=======================================================================
-// name    : FilterLibrary_i::Delete
-// Purpose : Delete filter from library
-//=======================================================================
-CORBA::Boolean FilterLibrary_i::Delete ( const char* theFilterName )
-{
-  LDOM_Node aParentNode;
-  LDOM_Node aFilterNode = findFilter( theFilterName, myDoc, &aParentNode );
-  if ( aFilterNode.isNull() || aParentNode.isNull() )
-    return false;
-
-  aParentNode.removeChild( aFilterNode );
-  TPythonDump()<<this<<".Delete('"<<theFilterName<<"')";
-  return true;
-}
+  //=======================================================================
+  // name    : FilterLibrary_i::Delete
+  // Purpose : Delete filter from library
+  //=======================================================================
+  CORBA::Boolean FilterLibrary_i::Delete ( const char* theFilterName )
+  {
+    LDOM_Node aParentNode;
+    LDOM_Node aFilterNode = findFilter( theFilterName, myDoc, &aParentNode );
+    if ( aFilterNode.isNull() || aParentNode.isNull() )
+      return false;
 
-//=======================================================================
-// name      : FilterLibrary_i::Replace
-// Purpose   : Replace existing filter with entry filter.
-// IMPORTANT : If filter does not exist it is not created
-//=======================================================================
-CORBA::Boolean FilterLibrary_i::Replace( const char* theFilterName,
-                                         const char* theNewName,
-                                         Filter_ptr  theFilter )
-{
-  LDOM_Element aFilterItem = findFilter( theFilterName, myDoc );
-  if ( aFilterItem.isNull() || theFilter->_is_nil() )
-    return false;
-
-  LDOM_Element aNewItem = createFilterItem( theNewName, theFilter, myDoc );
-  if ( aNewItem.isNull() )
-    return false;
-  else
-  {
-    aFilterItem.ReplaceElement( aNewItem );
-    if(Filter_i* aFilter = DownCast<Filter_i*>(theFilter))
-      TPythonDump()<<this<<".Replace('"<<theFilterName<<"','"<<theNewName<<"',"<<aFilter<<")";
+    aParentNode.removeChild( aFilterNode );
+    TPythonDump()<<this<<".Delete('"<<theFilterName<<"')";
     return true;
   }
-}
 
-//=======================================================================
-// name    : FilterLibrary_i::Save
-// Purpose : Save library on disk
-//=======================================================================
-CORBA::Boolean FilterLibrary_i::Save()
-{
-  if ( myFileName == 0 || strlen( myFileName ) == 0 )
-    return false;
+  //=======================================================================
+  // name      : FilterLibrary_i::Replace
+  // Purpose   : Replace existing filter with entry filter.
+  // IMPORTANT : If filter does not exist it is not created
+  //=======================================================================
+  CORBA::Boolean FilterLibrary_i::Replace( const char* theFilterName,
+                                           const char* theNewName,
+                                           Filter_ptr  theFilter )
+  {
+    LDOM_Element aFilterItem = findFilter( theFilterName, myDoc );
+    if ( aFilterItem.isNull() || theFilter->_is_nil() )
+      return false;
 
-  std::filebuf fb;
-  fb.open( myFileName, std::ios::out );
+    LDOM_Element aNewItem = createFilterItem( theNewName, theFilter, myDoc );
+    if ( aNewItem.isNull() )
+      return false;
+    else
+    {
+      aFilterItem.ReplaceElement( aNewItem );
+      if(Filter_i* aFilter = DownCast<Filter_i*>(theFilter))
+        TPythonDump()<<this<<".Replace('"<<theFilterName<<"','"<<theNewName<<"',"<<aFilter<<")";
+      return true;
+    }
+  }
 
-  Standard_OStream os( &fb );
+  //=======================================================================
+  // name    : FilterLibrary_i::Save
+  // Purpose : Save library on disk
+  //=======================================================================
+  CORBA::Boolean FilterLibrary_i::Save()
+  {
+    if ( myFileName == 0 || strlen( myFileName ) == 0 )
+      return false;
 
-  LDOM_XmlWriter aWriter;
-  aWriter.SetIndentation( 2 );
-  aWriter.Write( os, myDoc );
-  fb.close();
+    std::filebuf fb;
+    fb.open( myFileName, std::ios::out );
 
-  TPythonDump()<<this<<".Save()";
-  return true;
-}
+    Standard_OStream os( &fb );
 
-//=======================================================================
-// name    : FilterLibrary_i::SaveAs
-// Purpose : Save library on disk
-//=======================================================================
-CORBA::Boolean FilterLibrary_i::SaveAs( const char* aFileName )
-{
-  myFileName = strdup ( aFileName );
-  TPythonDump()<<this<<".SaveAs('"<<aFileName<<"')";
-  return Save();
-}
+    LDOM_XmlWriter aWriter;
+    aWriter.SetIndentation( 2 );
+    aWriter.Write( os, myDoc );
+    fb.close();
 
-//=======================================================================
-// name    : FilterLibrary_i::IsPresent
-// Purpose : Verify whether filter is in library
-//=======================================================================
-CORBA::Boolean FilterLibrary_i::IsPresent( const char* theFilterName )
-{
-  return !findFilter( theFilterName, myDoc ).isNull();
-}
+    TPythonDump()<<this<<".Save()";
+    return true;
+  }
 
-//=======================================================================
-// name    : FilterLibrary_i::NbFilters
-// Purpose : Return amount of filters in library
-//=======================================================================
-CORBA::Long FilterLibrary_i::NbFilters( ElementType theType )
-{
-  string_array_var aNames = GetNames( theType );
-  return aNames->length();
-}
+  //=======================================================================
+  // name    : FilterLibrary_i::SaveAs
+  // Purpose : Save library on disk
+  //=======================================================================
+  CORBA::Boolean FilterLibrary_i::SaveAs( const char* aFileName )
+  {
+    myFileName = strdup ( aFileName );
+    TPythonDump()<<this<<".SaveAs('"<<aFileName<<"')";
+    return Save();
+  }
 
-//=======================================================================
-// name    : FilterLibrary_i::GetNames
-// Purpose : Get names of filters from library
-//=======================================================================
-string_array* FilterLibrary_i::GetNames( ElementType theType )
-{
-  string_array_var anArray = new string_array;
-  TColStd_SequenceOfHAsciiString aSeq;
+  //=======================================================================
+  // name    : FilterLibrary_i::IsPresent
+  // Purpose : Verify whether filter is in library
+  //=======================================================================
+  CORBA::Boolean FilterLibrary_i::IsPresent( const char* theFilterName )
+  {
+    return !findFilter( theFilterName, myDoc ).isNull();
+  }
 
-  LDOM_Node aSection = getSection( theType, myDoc, false );
+  //=======================================================================
+  // name    : FilterLibrary_i::NbFilters
+  // Purpose : Return amount of filters in library
+  //=======================================================================
+  CORBA::Long FilterLibrary_i::NbFilters( ElementType theType )
+  {
+    string_array_var aNames = GetNames( theType );
+    return aNames->length();
+  }
 
-  if ( !aSection.isNull() )
+  //=======================================================================
+  // name    : FilterLibrary_i::GetNames
+  // Purpose : Get names of filters from library
+  //=======================================================================
+  string_array* FilterLibrary_i::GetNames( ElementType theType )
   {
-    for ( LDOM_Node aFilter = aSection.getFirstChild();
-          !aFilter.isNull(); aFilter = aFilter.getNextSibling() )
+    string_array_var anArray = new string_array;
+    TColStd_SequenceOfHAsciiString aSeq;
+
+    LDOM_Node aSection = getSection( theType, myDoc, false );
+
+    if ( !aSection.isNull() )
     {
-      LDOM_Element& anElem = ( LDOM_Element& )aFilter;
-      aSeq.Append( new TCollection_HAsciiString(
-         (Standard_CString)anElem.getAttribute( "name" ).GetString() ) );
+      for ( LDOM_Node aFilter = aSection.getFirstChild();
+            !aFilter.isNull(); aFilter = aFilter.getNextSibling() )
+      {
+        LDOM_Element& anElem = ( LDOM_Element& )aFilter;
+        aSeq.Append( new TCollection_HAsciiString(
+           (Standard_CString)anElem.getAttribute( "name" ).GetString() ) );
+      }
     }
-  }
 
-  anArray->length( aSeq.Length() );
-  for ( int i = 1, n = aSeq.Length(); i <= n; i++ )
-    anArray[ i - 1 ] = CORBA::string_dup( aSeq( i )->ToCString() );
+    anArray->length( aSeq.Length() );
+    for ( int i = 1, n = aSeq.Length(); i <= n; i++ )
+      anArray[ i - 1 ] = CORBA::string_dup( aSeq( i )->ToCString() );
 
-  return anArray._retn();
-}
+    return anArray._retn();
+  }
 
-//=======================================================================
-// name    : FilterLibrary_i::GetAllNames
-// Purpose : Get names of filters from library
-//=======================================================================
-string_array* FilterLibrary_i::GetAllNames()
-{
-  string_array_var aResArray = new string_array;
-  for ( int type = SMESH::ALL; type <= SMESH::VOLUME; type++ )
+  //=======================================================================
+  // name    : FilterLibrary_i::GetAllNames
+  // Purpose : Get names of filters from library
+  //=======================================================================
+  string_array* FilterLibrary_i::GetAllNames()
   {
-    SMESH::string_array_var aNames = GetNames( (SMESH::ElementType)type );
+    string_array_var aResArray = new string_array;
+    for ( int type = SMESH::ALL; type <= SMESH::VOLUME; type++ )
+    {
+      SMESH::string_array_var aNames = GetNames( (SMESH::ElementType)type );
+
+      int aPrevLength = aResArray->length();
+      aResArray->length( aPrevLength + aNames->length() );
+      for ( int i = 0, n = aNames->length(); i < n; i++ )
+        aResArray[ aPrevLength + i ] = aNames[ i ];
+    }
 
-    int aPrevLength = aResArray->length();
-    aResArray->length( aPrevLength + aNames->length() );
-    for ( int i = 0, n = aNames->length(); i < n; i++ )
-      aResArray[ aPrevLength + i ] = aNames[ i ];
+    return aResArray._retn();
   }
 
-  return aResArray._retn();
-}
+  //================================================================================
+  /*!
+   * \brief Return an array of strings corresponding to items of enum FunctorType
+   */
+  //================================================================================
 
-//================================================================================
-/*!
- * \brief Return an array of strings corresponding to items of enum FunctorType
- */
-//================================================================================
+  static const char** getFunctNames()
+  {
+    static const char* functName[] = {
+      // IT's necessary to update this array according to enum FunctorType (SMESH_Filter.idl)
+      // The order is IMPORTANT !!!
+      "FT_AspectRatio",
+      "FT_AspectRatio3D",
+      "FT_Warping",
+      "FT_Warping3D",
+      "FT_MinimumAngle",
+      "FT_Taper",
+      "FT_Skew",
+      "FT_Area",
+      "FT_Volume3D",
+      "FT_ScaledJacobian",
+      "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_Length3D",
+      "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"};
+
+    // check if functName is complete, compilation failure means that enum FunctorType changed
+    static_assert( sizeof(functName) / sizeof(const char*) == SMESH::FT_Undefined + 1,
+                   "Update names of FunctorType's!!!" );
+
+    return functName;
+  }
 
-static const char** getFunctNames()
-{
-  static const char* functName[] = {
-    // IT's necessary to update this array according to enum FunctorType (SMESH_Filter.idl)
-    // The order is IMPORTANT !!!
-    "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_Length3D",
-    "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"};
-
-#ifdef _DEBUG_
-  // check if functName is complete, compilation failure means that enum FunctorType changed
-  const int nbFunctors = sizeof(functName) / sizeof(const char*);
-  int _assert[( nbFunctors == SMESH::FT_Undefined + 1 ) ? 2 : -1 ]; _assert[0]=_assert[1]=0;
-#endif
-
-  return functName;
-}
+  //================================================================================
+  /*!
+   * \brief Return a string corresponding to an item of enum FunctorType
+   */
+  //================================================================================
 
-//================================================================================
-/*!
- * \brief Return a string corresponding to an item of enum FunctorType
- */
-//================================================================================
+  const char* FunctorTypeToString(FunctorType ft)
+  {
+    if ( ft < 0 || ft > SMESH::FT_Undefined )
+      return "FT_Undefined";
+    return getFunctNames()[ ft ];
+  }
 
-const char* SMESH::FunctorTypeToString(SMESH::FunctorType ft)
-{
-  if ( ft < 0 || ft > SMESH::FT_Undefined )
-    return "FT_Undefined";
-  return getFunctNames()[ ft ];
-}
+  //================================================================================
+  /*!
+   * \brief Converts a string to FunctorType. This is reverse of FunctorTypeToString()
+   */
+  //================================================================================
 
-//================================================================================
-/*!
- * \brief Converts a string to FunctorType. This is reverse of FunctorTypeToString()
- */
-//================================================================================
+  FunctorType StringToFunctorType(const char* str)
+  {
+    std::string name( str + 3 ); // skip "FT_"
+    const char** functNames = getFunctNames();
+    int ft = 0;
+    for ( ; ft < SMESH::FT_Undefined; ++ft )
+      if ( name == ( functNames[ft] + 3 ))
+        break;
 
-SMESH::FunctorType SMESH::StringToFunctorType(const char* str)
-{
-  std::string name( str + 3 ); // skip "FT_"
-  const char** functNames = getFunctNames();
-  int ft = 0;
-  for ( ; ft < SMESH::FT_Undefined; ++ft )
-    if ( name == ( functNames[ft] + 3 ))
-      break;
+    //ASSERT( strcmp( str, FunctorTypeToString( SMESH::FunctorType( ft ))) == 0 );
 
-  //ASSERT( strcmp( str, FunctorTypeToString( SMESH::FunctorType( ft ))) == 0 );
+    return SMESH::FunctorType( ft );
+  }
 
-  return SMESH::FunctorType( ft );
-}
+  //================================================================================
+  /*!
+   * \brief calls OnBaseObjModified(), if who != this, and myWaiters[i]->Modified(who)
+   */
+  //================================================================================
 
-//================================================================================
-/*!
- * \brief calls OnBaseObjModified(), if who != this, and myWaiters[i]->Modified(who)
- */
-//================================================================================
+  void NotifyerAndWaiter::Modified( bool removed, NotifyerAndWaiter* who )
+  {
+    if ( who != 0 && who != this )
+      OnBaseObjModified( who, removed );
+    else
+      who = this;
 
-void NotifyerAndWaiter::Modified( bool removed, NotifyerAndWaiter* who )
-{
-  if ( who != 0 && who != this )
-    OnBaseObjModified( who, removed );
-  else
-    who = this;
-
-  std::list<NotifyerAndWaiter*> waiters = myWaiters; // myWaiters can be changed by Modified()
-  std::list<NotifyerAndWaiter*>::iterator i = waiters.begin();
-  for ( ; i != waiters.end(); ++i )
-    (*i)->Modified( removed, who );
-}
+    std::list<NotifyerAndWaiter*> waiters = myWaiters; // myWaiters can be changed by Modified()
+    std::list<NotifyerAndWaiter*>::iterator i = waiters.begin();
+    for ( ; i != waiters.end(); ++i )
+      (*i)->Modified( removed, who );
+  }
 
-//================================================================================
-/*!
- * \brief Stores an object to be notified on change of predicate
- */
-//================================================================================
+  //================================================================================
+  /*!
  * \brief Stores an object to be notified on change of predicate
  */
+  //================================================================================
 
-void NotifyerAndWaiter::AddModifWaiter( NotifyerAndWaiter* waiter )
-{
-  if ( waiter )
-    myWaiters.push_back( waiter );
-}
+  void NotifyerAndWaiter::AddModifWaiter( NotifyerAndWaiter* waiter )
+  {
+    if ( waiter )
+      myWaiters.push_back( waiter );
+  }
 
-//================================================================================
-/*!
- * \brief Removes an object to be notified on change of predicate
- */
-//================================================================================
+  //================================================================================
+  /*!
  * \brief Removes an object to be notified on change of predicate
  */
+  //================================================================================
 
-void NotifyerAndWaiter::RemoveModifWaiter( NotifyerAndWaiter* waiter )
-{
-  myWaiters.remove( waiter );
-}
+  void NotifyerAndWaiter::RemoveModifWaiter( NotifyerAndWaiter* waiter )
+  {
+    myWaiters.remove( waiter );
+  }
 
-//================================================================================
-/*!
- * \brief Checks if a waiter is among myWaiters, maybe nested
- */
-//================================================================================
+  //================================================================================
+  /*!
  * \brief Checks if a waiter is among myWaiters, maybe nested
  */
+  //================================================================================
 
-bool NotifyerAndWaiter::ContainModifWaiter( NotifyerAndWaiter* waiter )
-{
-  bool is = ( waiter == this );
+  bool NotifyerAndWaiter::ContainModifWaiter( NotifyerAndWaiter* waiter )
+  {
+    bool is = ( waiter == this );
 
-  std::list<NotifyerAndWaiter*>::iterator w = myWaiters.begin();
-  for ( ; !is && w != myWaiters.end(); ++w )
-    is = (*w)->ContainModifWaiter( waiter );
+    std::list<NotifyerAndWaiter*>::iterator w = myWaiters.begin();
+    for ( ; !is && w != myWaiters.end(); ++w )
+      is = (*w)->ContainModifWaiter( waiter );
 
-  return is;
+    return is;
+  }
 }
index 3f786cd83633681b6c176bcfffc555c51a32d4d2..94162013477eda9d3536e1ab94c0d86e44728515 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -98,8 +98,8 @@ namespace SMESH
                                            public virtual Functor_i
   {
   public:
-    CORBA::Double                   GetValue( CORBA::Long theElementId );
-    CORBA::Boolean                  IsApplicable( CORBA::Long theElementId );
+    CORBA::Double                   GetValue( SMESH::smIdType theElementId );
+    CORBA::Boolean                  IsApplicable( SMESH::smIdType theElementId );
     SMESH::Histogram*               GetHistogram(CORBA::Short   nbIntervals,
                                                  CORBA::Boolean isLogarithmic);
     SMESH::Histogram*               GetLocalHistogram(CORBA::Short               nbIntervals,
@@ -164,6 +164,19 @@ namespace SMESH
     Warping_i();
     FunctorType                     GetFunctorType();
   };
+
+  /*
+    Class       : Warping3D_i
+    Description : Functor for calculating 3D warping
+  */
+  class SMESH_I_EXPORT Warping3D_i : public virtual POA_SMESH::Warping3D,
+    public virtual NumericalFunctor_i
+  {
+  public:
+    Warping3D_i();
+    FunctorType                     GetFunctorType();
+  };
+
   
   
   /*
@@ -351,6 +364,18 @@ namespace SMESH
     NodeConnectivityNumber_i();
     FunctorType                     GetFunctorType();
   };
+
+  /*
+    Class       : ScaledJacobian_i
+    Description : Functor returning the scaled jacobian
+  */
+  class SMESH_I_EXPORT ScaledJacobian_i: public virtual POA_SMESH::ScaledJacobian,
+                                       public virtual NumericalFunctor_i
+  {
+  public:
+    ScaledJacobian_i();
+    FunctorType                     GetFunctorType();
+  };
   
   
   /*
@@ -704,7 +729,7 @@ namespace SMESH
   {
   public:
     RangeOfIds_i();
-    void                            SetRange( const SMESH::long_array& theIds );
+    void                            SetRange( const SMESH::smIdType_array& theIds );
     CORBA::Boolean                  SetRangeStr( const char* theRange );
     char*                           GetRangeStr();
     
@@ -823,7 +848,7 @@ namespace SMESH
     void                    SetElementType( ElementType theType );
     void                    SetPoint( CORBA::Double x, CORBA::Double y, CORBA::Double z );
     void                    SetVertex( GEOM::GEOM_Object_ptr vertex );
-    void                    SetNode ( CORBA::Long nodeID );
+    void                    SetNode ( SMESH::smIdType nodeID );
     void                    SetThreshold ( const char* threshold,
                                            SMESH::ConnectedElements::ThresholdType type );
     char*                   GetThreshold ( SMESH::ConnectedElements::ThresholdType& type );
@@ -1006,11 +1031,11 @@ namespace SMESH
                    Controls::Filter::TIdSequence& );
     
     virtual
-    long_array*      
+    smIdType_array*      
     GetElementsId( SMESH_Mesh_ptr );
 
     virtual
-    long_array*
+    smIdType_array*
     GetElementsIdFromParts( const ListOfIDSources& theParts );
 
     virtual
@@ -1040,9 +1065,9 @@ namespace SMESH
     // =========================
     // SMESH_IDSource interface
     // =========================
-    virtual SMESH::long_array*           GetIDs();
-    virtual SMESH::long_array*           GetMeshInfo();
-    virtual SMESH::long_array*           GetNbElementsByType();
+    virtual SMESH::smIdType_array*       GetIDs();
+    virtual SMESH::smIdType_array*       GetMeshInfo();
+    virtual SMESH::smIdType_array*       GetNbElementsByType();
     virtual SMESH::array_of_ElementType* GetTypes();
     virtual SMESH::SMESH_Mesh_ptr        GetMesh();
     virtual bool                         IsMeshInfoCorrect() { return true; }
@@ -1109,10 +1134,12 @@ namespace SMESH
     AspectRatio_ptr           CreateAspectRatio();
     AspectRatio3D_ptr         CreateAspectRatio3D();
     Warping_ptr               CreateWarping();
+    Warping3D_ptr             CreateWarping3D();
     Taper_ptr                 CreateTaper();
     Skew_ptr                  CreateSkew();
     Area_ptr                  CreateArea();
     Volume3D_ptr              CreateVolume3D();
+    ScaledJacobian_ptr        CreateScaledJacobian();
     MaxElementLength2D_ptr    CreateMaxElementLength2D();
     MaxElementLength3D_ptr    CreateMaxElementLength3D();
     Length_ptr                CreateLength();
diff --git a/src/SMESH_I/SMESH_Gen_No_Session_i.cxx b/src/SMESH_I/SMESH_Gen_No_Session_i.cxx
new file mode 100644 (file)
index 0000000..0e0b57c
--- /dev/null
@@ -0,0 +1,60 @@
+// Copyright (C) 2021-2024  CEA, EDF
+//
+// 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 "SMESH_Gen_No_Session_i.hxx"
+#include "SALOMEDS_Study_i.hxx"
+#include "SALOME_KernelServices.hxx"
+#include "SALOME_Fake_NamingService.hxx"
+#include "SALOME_ModuleCatalog_impl.hxx"
+#include "Utils_SINGLETON.hxx"
+
+SMESH_Gen_No_Session_i::SMESH_Gen_No_Session_i( CORBA::ORB_ptr orb,
+                                                PortableServer::POA_ptr   poa,
+                                                PortableServer::ObjectId* contId,
+                                                const char*               instanceName,
+                                                const char*               interfaceName):SMESH_Gen_i(orb,poa,contId,instanceName,interfaceName,false)
+{
+  myNS = SINGLETON_<SALOME_Fake_NamingService>::Instance();
+}
+
+GEOM::GEOM_Gen_var SMESH_Gen_No_Session_i::GetGeomEngine( bool isShaper )
+{
+  CORBA::Object_var temp;
+  try
+  {
+    temp = KERNEL::RetrieveCompo(isShaper ? "SHAPERSTUDY" : "GEOM");
+  }
+  catch(...)
+  {
+    return GEOM::GEOM_Gen::_nil();
+  }
+  myGeomGen = GEOM::GEOM_Gen::_narrow( temp );
+  return myGeomGen;
+}
+
+SALOMEDS::Study_var SMESH_Gen_No_Session_i::getStudyServantVirtual() const
+{
+  return SALOMEDS::Study::_duplicate(KERNEL::getStudyServantSA());
+}
+
+SALOME_ModuleCatalog::ModuleCatalog_var SMESH_Gen_No_Session_i::getModuleCatalog() const
+{
+  SALOME_ModuleCatalog::ModuleCatalog_var aCat = KERNEL::getModuleComponentServantSA();
+  return aCat;
+}
diff --git a/src/SMESH_I/SMESH_Gen_No_Session_i.hxx b/src/SMESH_I/SMESH_Gen_No_Session_i.hxx
new file mode 100644 (file)
index 0000000..92e11cb
--- /dev/null
@@ -0,0 +1,35 @@
+// Copyright (C) 2021-2024  CEA, EDF
+//
+// 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
+//
+
+#pragma once
+
+#include "SMESH_Gen_i.hxx"
+
+class SMESH_I_EXPORT SMESH_Gen_No_Session_i : public SMESH_Gen_i
+{
+public:
+  SMESH_Gen_No_Session_i( CORBA::ORB_ptr orb,
+               PortableServer::POA_ptr   poa,
+               PortableServer::ObjectId* contId,
+               const char*               instanceName,
+               const char*               interfaceName);
+  GEOM::GEOM_Gen_var GetGeomEngine( bool isShaper ) override;
+  SALOMEDS::Study_var getStudyServantVirtual() const override;
+  SALOME_ModuleCatalog::ModuleCatalog_var getModuleCatalog() const override;
+};
diff --git a/src/SMESH_I/SMESH_Gen_Session_i.cxx b/src/SMESH_I/SMESH_Gen_Session_i.cxx
new file mode 100644 (file)
index 0000000..2227efc
--- /dev/null
@@ -0,0 +1,75 @@
+// Copyright (C) 2021-2024  CEA, EDF
+//
+// 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 "SMESH_Gen_Session_i.hxx"
+#include "SALOME_KernelServices.hxx"
+#include "SALOME_LifeCycleCORBA.hxx"
+
+
+SMESH_Gen_Session_i::SMESH_Gen_Session_i( CORBA::ORB_ptr orb,
+                                        PortableServer::POA_ptr   poa,
+                                        PortableServer::ObjectId* contId,
+                                        const char*               instanceName,
+                                        const char*               interfaceName):SMESH_Gen_i(orb,poa,contId,instanceName,interfaceName,true)
+{
+
+}
+
+GEOM::GEOM_Gen_var SMESH_Gen_Session_i::GetGeomEngine( bool isShaper )
+{
+    Engines::EngineComponent_ptr temp = GetLCC()->FindOrLoad_Component( isShaper ? "FactoryServer" : "FactoryServer", isShaper ? "SHAPERSTUDY" : "GEOM" );
+    myGeomGen = GEOM::GEOM_Gen::_narrow( temp );
+    return myGeomGen;
+}
+
+SALOMEDS::Study_var SMESH_Gen_Session_i::getStudyServantVirtual() const
+{
+  return SALOMEDS::Study::_duplicate(KERNEL::getStudyServant());
+}
+
+SALOME_ModuleCatalog::ModuleCatalog_var SMESH_Gen_Session_i::getModuleCatalog() const
+{
+  SALOME_ModuleCatalog::ModuleCatalog_var aCat = SALOME_ModuleCatalog::ModuleCatalog::_narrow( GetNS()->Resolve("/Kernel/ModulCatalog") );
+  return aCat;
+}
+
+#include "SMESH_Gen_No_Session_i.hxx"
+
+extern "C"
+{ SMESH_I_EXPORT
+  PortableServer::ObjectId* SMESHEngine_factory( CORBA::ORB_ptr            orb,
+                                                 PortableServer::POA_ptr   poa,
+                                                 PortableServer::ObjectId* contId,
+                                                 const char*               instanceName,
+                                                 const char*               interfaceName )
+  {
+    CORBA::Object_var o = poa->id_to_reference(*contId);
+    Engines::Container_var cont = Engines::Container::_narrow(o);
+    if(cont->is_SSL_mode())
+    {
+      SMESH_Gen_No_Session_i* aSMESHGen = new SMESH_Gen_No_Session_i(orb, poa, contId, instanceName, interfaceName);
+      return aSMESHGen->getId() ;
+    }
+    else
+    {
+      SMESH_Gen_Session_i* aSMESHGen = new SMESH_Gen_Session_i(orb, poa, contId, instanceName, interfaceName);
+      return aSMESHGen->getId() ;
+    }
+  }
+}
diff --git a/src/SMESH_I/SMESH_Gen_Session_i.hxx b/src/SMESH_I/SMESH_Gen_Session_i.hxx
new file mode 100644 (file)
index 0000000..00f2160
--- /dev/null
@@ -0,0 +1,36 @@
+// Copyright (C) 2021-2024  CEA, EDF
+//
+// 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
+//
+
+#pragma once
+
+#include "SMESH_Gen_i.hxx"
+
+class SMESH_I_EXPORT SMESH_Gen_Session_i : public SMESH_Gen_i
+{
+public:
+  SMESH_Gen_Session_i( CORBA::ORB_ptr orb,
+               PortableServer::POA_ptr   poa,
+               PortableServer::ObjectId* contId,
+               const char*               instanceName,
+               const char*               interfaceName);
+  GEOM::GEOM_Gen_var GetGeomEngine( bool isShaper ) override;
+  // Get the SALOMEDS::Study from naming service
+  SALOMEDS::Study_var getStudyServantVirtual() const override;
+  SALOME_ModuleCatalog::ModuleCatalog_var getModuleCatalog() const override;
+};
index ad5b17f8c8ab13a011653dd5d542c124d91aa610..265be507473ab82b1f5f1ecc164b383210631467 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -49,6 +49,9 @@
 #include <TopoDS_Wire.hxx>
 #include <gp_Pnt.hxx>
 
+// Have to be included before std headers
+#include <Python.h>
+#include <structmember.h>
 
 #ifdef WIN32
  #include <windows.h>
 #include "SMESH_Hypothesis.hxx"
 #include "SMESH_Hypothesis_i.hxx"
 #include "SMESH_Mesh.hxx"
+#include "SMESH_ParallelMesh.hxx"
 #include "SMESH_MeshEditor.hxx"
 #include "SMESH_Mesh_i.hxx"
+#include <SMESH_SequentialMesh_i.hxx>
+#include "SMESH_ParallelMesh_i.hxx"
 #include "SMESH_PreMeshInfo.hxx"
 #include "SMESH_PythonDump.hxx"
 #include "SMESH_ControlsDef.hxx"
+#include <SMESH_BoostTxtArchive.hxx>
+#include <SMESH_SequentialMesh_i.hxx>
+#include <SMESH_ParallelMesh_i.hxx>
 
 // to pass CORBA exception through SMESH_TRY
 #define SMY_OWN_CATCH catch( SALOME::SALOME_Exception& se ) { throw se; }
 #include <memory>
 
 #include <boost/archive/text_oarchive.hpp>
-#include <boost/archive/text_iarchive.hpp>
 #include <boost/serialization/list.hpp>
 #include <boost/serialization/string.hpp>
+#include <boost/filesystem.hpp>
+
+namespace fs = boost::filesystem;
 
 using namespace std;
 using SMESH::TPythonDump;
@@ -155,19 +166,13 @@ using SMESH::TVar;
 
 #define NUM_TMP_FILES 2
 
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-#else
-static int MYDEBUG = 0;
-#endif
-
 // Static variables definition
 GEOM::GEOM_Gen_var      SMESH_Gen_i::myGeomGen;
 CORBA::ORB_var          SMESH_Gen_i::myOrb;
 PortableServer::POA_var SMESH_Gen_i::myPoa;
-SALOME_NamingService*   SMESH_Gen_i::myNS  = NULL;
-SALOME_LifeCycleCORBA*  SMESH_Gen_i::myLCC = NULL;
-SMESH_Gen_i*            SMESH_Gen_i::mySMESHGen = NULL;
+SALOME_NamingService_Abstract*   SMESH_Gen_i::myNS  = nullptr;
+SALOME_LifeCycleCORBA*  SMESH_Gen_i::myLCC = nullptr;
+SMESH_Gen_i*            SMESH_Gen_i::mySMESHGen = nullptr;
 
 
 const int nbElemPerDiagonal = 10;
@@ -190,22 +195,22 @@ PortableServer::ServantBase_var SMESH_Gen_i::GetServant( CORBA::Object_ptr theOb
   }
   catch (PortableServer::POA::ObjectNotActive &ex)
   {
-    INFOS("GetServant: ObjectNotActive");
+    MESSAGE("GetServant: ObjectNotActive");
     return NULL;
   }
   catch (PortableServer::POA::WrongAdapter &ex)
   {
-    INFOS("GetServant: WrongAdapter: OK when several servants used to build several mesh in parallel...");
+    MESSAGE("GetServant: WrongAdapter: OK when several servants used to build several mesh in parallel...");
     return NULL;
   }
   catch (PortableServer::POA::WrongPolicy &ex)
   {
-    INFOS("GetServant: WrongPolicy");
+    MESSAGE("GetServant: WrongPolicy");
     return NULL;
   }
   catch (...)
   {
-    INFOS( "GetServant - Unknown exception was caught!!!" );
+    MESSAGE( "GetServant - Unknown exception was caught!!!" );
     return NULL;
   }
 }
@@ -238,6 +243,14 @@ CORBA::Object_var SMESH_Gen_i::SObjectToObject( SALOMEDS::SObject_ptr theSObject
   return anObj;
 }
 
+// Set Naming Service object
+void SMESH_Gen_i::SetNS(SALOME_NamingService_Abstract *ns)
+{
+  if(myNS)
+    delete myNS;
+  myNS = ns;
+}
+
 //=============================================================================
 /*!
  *  GetNS [ static ]
@@ -246,9 +259,9 @@ CORBA::Object_var SMESH_Gen_i::SObjectToObject( SALOMEDS::SObject_ptr theSObject
  */
 //=============================================================================
 
-SALOME_NamingService* SMESH_Gen_i::GetNS()
+SALOME_NamingService_Abstract* SMESH_Gen_i::GetNS()
 {
-  if ( myNS == NULL ) {
+  if ( !myNS ) {
     myNS = SINGLETON_<SALOME_NamingService>::Instance();
     ASSERT(SINGLETON_<SALOME_NamingService>::IsAlreadyExisting());
     myNS->init_orb( GetORB() );
@@ -280,24 +293,6 @@ SALOME_LifeCycleCORBA*  SMESH_Gen_i::GetLCC()
  */
 //=============================================================================
 
-GEOM::GEOM_Gen_var SMESH_Gen_i::GetGeomEngine( bool isShaper )
-{
-  Engines::EngineComponent_ptr temp =
-    GetLCC()->FindOrLoad_Component( isShaper ? "FactoryServer" : "FactoryServer",
-                                    isShaper ? "SHAPERSTUDY" : "GEOM" );
-  myGeomGen = GEOM::GEOM_Gen::_narrow( temp );
-
-  return myGeomGen;
-}
-
-//=============================================================================
-/*!
- *  GetGeomEngine [ static ]
- *
- *  Get GEOM::GEOM_Gen reference
- */
-//=============================================================================
-
 GEOM::GEOM_Gen_var SMESH_Gen_i::GetGeomEngine( GEOM::GEOM_Object_ptr go )
 {
   GEOM::GEOM_Gen_ptr gen = GEOM::GEOM_Gen::_nil();
@@ -330,8 +325,9 @@ SMESH_Gen_i::SMESH_Gen_i( CORBA::ORB_ptr            orb,
                           PortableServer::POA_ptr   poa,
                           PortableServer::ObjectId* contId,
                           const char*               instanceName,
-                          const char*               interfaceName )
-  : Engines_Component_i( orb, poa, contId, instanceName, interfaceName )
+                          const char*               interfaceName,
+                          bool                      checkNS)
+  : Engines_Component_i( orb, poa, contId, instanceName, interfaceName, false, checkNS )
 {
 
   myOrb = CORBA::ORB::_duplicate(orb);
@@ -356,21 +352,24 @@ SMESH_Gen_i::SMESH_Gen_i( CORBA::ORB_ptr            orb,
   // find out mode (embedded or standalone) here else
   // meshes created before calling SMESH_Client::GetSMESHGen(), which calls
   // SMESH_Gen_i::SetEmbeddedMode(), have wrong IsEmbeddedMode flag
-  if ( SALOME_NamingService* ns = GetNS() )
+  if(checkNS)
   {
-    CORBA::Object_var obj = ns->Resolve( "/Kernel/Session" );
-    SALOME::Session_var session = SALOME::Session::_narrow( obj ) ;
-    if ( !session->_is_nil() )
+    if ( SALOME_NamingService_Abstract* ns = GetNS() )
     {
-      CORBA::String_var str_host = session->getHostname();
-      CORBA::Long        s_pid = session->getPID();
-      string my_host = Kernel_Utils::GetHostname();
+      CORBA::Object_var obj = ns->Resolve( "/Kernel/Session" );
+      SALOME::Session_var session = SALOME::Session::_narrow( obj ) ;
+      if ( !session->_is_nil() )
+      {
+        CORBA::String_var str_host = session->getHostname();
+        CORBA::Long        s_pid = session->getPID();
+        string my_host = Kernel_Utils::GetHostname();
 #ifdef WIN32
-      long    my_pid = (long)_getpid();
+        long    my_pid = (long)_getpid();
 #else
-      long    my_pid = (long) getpid();
+        long    my_pid = (long) getpid();
 #endif
-      SetEmbeddedMode( s_pid == my_pid && my_host == str_host.in() );
+        SetEmbeddedMode( s_pid == my_pid && my_host == str_host.in() );
+      }
     }
   }
 }
@@ -455,7 +454,7 @@ GenericHypothesisCreator_i* SMESH_Gen_i::getHypothesisCreator(const char* theHyp
   thePlatformLibName = aPlatformLibName;
 
   Unexpect aCatch(SALOME_SalomeException);
-  if(MYDEBUG) MESSAGE( "Create Hypothesis <" << theHypName << "> from " << aPlatformLibName);
+  MESSAGE( "Create Hypothesis <" << theHypName << "> from " << aPlatformLibName);
 
   typedef GenericHypothesisCreator_i* (*GetHypothesisCreator)(const char* );
   GenericHypothesisCreator_i* aCreator;
@@ -465,20 +464,19 @@ GenericHypothesisCreator_i* SMESH_Gen_i::getHypothesisCreator(const char* theHyp
     if (myHypCreatorMap.find(string(theHypName)) == myHypCreatorMap.end())
     {
       // load plugin library
-      if(MYDEBUG) MESSAGE("Loading server meshers plugin library ...");
+      MESSAGE("Loading server meshers plugin library ...");
 #ifdef WIN32
-#ifdef UNICODE
+#  ifdef UNICODE
       const wchar_t* path = Kernel_Utils::decode_s(aPlatformLibName);
-#else
+      SMESHUtils::ArrayDeleter<const wchar_t> deleter( path );
+#  else
       const char* path = aPlatformLibName.c_str();
-#endif
+#  endif
 #else
       const char* path = aPlatformLibName.c_str();
 #endif
       LibHandle libHandle = LoadLib( path );
-#if defined(WIN32) && defined(UNICODE)
-      delete path;
-#endif
+
       if (!libHandle)
       {
         // report any error, if occurred
@@ -492,7 +490,7 @@ GenericHypothesisCreator_i* SMESH_Gen_i::getHypothesisCreator(const char* theHyp
       }
 
       // get method, returning hypothesis creator
-      if(MYDEBUG) MESSAGE("Find GetHypothesisCreator() method ...");
+      MESSAGE("Find GetHypothesisCreator() method ...");
       GetHypothesisCreator procHandle =
         (GetHypothesisCreator)GetProc( libHandle, "GetHypothesisCreator" );
       if (!procHandle)
@@ -503,7 +501,7 @@ GenericHypothesisCreator_i* SMESH_Gen_i::getHypothesisCreator(const char* theHyp
       }
 
       // get hypothesis creator
-      if(MYDEBUG) MESSAGE("Get Hypothesis Creator for " << theHypName);
+      MESSAGE("Get Hypothesis Creator for " << theHypName);
       aCreator = procHandle(theHypName);
       if (!aCreator)
       {
@@ -554,8 +552,7 @@ SMESH::SMESH_Hypothesis_ptr SMESH_Gen_i::createHypothesis(const char* theHypName
     // activate the CORBA servant of hypothesis
     hypothesis_i = myHypothesis_i->_this();
     int nextId = RegisterObject( hypothesis_i );
-    if(MYDEBUG) { MESSAGE( "Add hypo to map with id = "<< nextId ); }
-    else        { (void)nextId; } // avoid "unused variable" warning in release mode
+    MESSAGE( "Add hypo to map with id = "<< nextId );
   }
   return hypothesis_i._retn();
 }
@@ -571,21 +568,24 @@ SMESH::SMESH_Hypothesis_ptr SMESH_Gen_i::createHypothesis(const char* theHypName
 SMESH::SMESH_Mesh_ptr SMESH_Gen_i::createMesh()
 {
   Unexpect aCatch(SALOME_SalomeException);
-  if(MYDEBUG) MESSAGE( "SMESH_Gen_i::createMesh" );
+  MESSAGE( "SMESH_Gen_i::createMesh" );
 
   // Get or create the GEOM_Client instance
   try {
     // create a new mesh object servant, store it in a map in study context
     SMESH_Mesh_i* meshServant = new SMESH_Mesh_i( GetPOA(), this );
     // create a new mesh object
-    if(MYDEBUG) MESSAGE("myIsEmbeddedMode " << myIsEmbeddedMode);
-    meshServant->SetImpl( myGen.CreateMesh( myIsEmbeddedMode ));
+    MESSAGE("myIsEmbeddedMode " << myIsEmbeddedMode);
+    SMESH_Mesh* myImpl = dynamic_cast<SMESH_Mesh*>(myGen.CreateMesh( myIsEmbeddedMode ));
+    if(myImpl == NULL )
+      THROW_SALOME_CORBA_EXCEPTION( "Could not cast SequentialMesh as Mesh", SALOME::INTERNAL_ERROR );
+    meshServant->SetImpl(myImpl);
 
     // activate the CORBA servant of Mesh
     SMESH::SMESH_Mesh_var mesh = SMESH::SMESH_Mesh::_narrow( meshServant->_this() );
     int nextId = RegisterObject( mesh );
-    if(MYDEBUG) { MESSAGE( "Add mesh to map with id = "<< nextId); }
-    else        { (void)nextId; } // avoid "unused variable" warning in release mode
+    MESSAGE( "Add mesh to map with id = "<< nextId);
+
     return mesh._retn();
   }
   catch (SALOME_Exception& S_ex) {
@@ -594,6 +594,42 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::createMesh()
   return SMESH::SMESH_Mesh::_nil();
 }
 
+//=============================================================================
+/*!
+ *  SMESH_Gen_i::createParallelMesh
+ *
+ *  Create empty parallel mesh on shape
+ */
+//=============================================================================
+SMESH::SMESH_ParallelMesh_ptr SMESH_Gen_i::createParallelMesh()
+{
+  Unexpect aCatch(SALOME_SalomeException);
+  MESSAGE( "SMESH_Gen_i::createParallelMesh" );
+
+  // Get or create the GEOM_Client instance
+  try {
+    // create a new mesh object servant, store it in a map in study context
+    SMESH_ParallelMesh_i* meshServant = new SMESH_ParallelMesh_i( GetPOA(), this );
+    // create a new mesh object
+    MESSAGE("myIsEmbeddedMode " << myIsEmbeddedMode);
+    SMESH_Mesh* myImpl = dynamic_cast<SMESH_Mesh*>(myGen.CreateParallelMesh( myIsEmbeddedMode ));
+    if(myImpl == NULL )
+      THROW_SALOME_CORBA_EXCEPTION( "Could not cast ParallelMesh as Mesh", SALOME::INTERNAL_ERROR );
+    meshServant->SetImpl(myImpl);
+
+    // activate the CORBA servant of Mesh
+    SMESH::SMESH_ParallelMesh_var mesh = SMESH::SMESH_ParallelMesh::_narrow( meshServant->_this() );
+    int nextId = RegisterObject( mesh );
+    MESSAGE( "Add mesh to map with id = "<< nextId);
+
+    return mesh._retn();
+  }
+  catch (SALOME_Exception& S_ex) {
+    THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), SALOME::BAD_PARAM );
+  }
+  return SMESH::SMESH_ParallelMesh::_nil();
+}
+
 //=============================================================================
 /*!
  *  SMESH_Gen_i::GetShapeReader
@@ -642,14 +678,19 @@ void SMESH_Gen_i::SetEmbeddedMode( CORBA::Boolean theMode )
     if (!envNoCatchSignals || !atoi(envNoCatchSignals))
     {
       bool raiseFPE;
-#ifdef _DEBUG_
-      raiseFPE = true;
-      char* envDisableFPE = getenv("DISABLE_FPE");
-      if (envDisableFPE && atoi(envDisableFPE))
+
+      if (SALOME::VerbosityActivated())
+      {
+        raiseFPE = true;
+        char* envDisableFPE = getenv("DISABLE_FPE");
+        if (envDisableFPE && atoi(envDisableFPE))
+          raiseFPE = false;
+      }
+      else
+      {
         raiseFPE = false;
-#else
-      raiseFPE = false;
-#endif
+      }
+
       OSD::SetSignal( raiseFPE );
     }
     // else OSD::SetSignal() is called in GUI
@@ -827,7 +868,7 @@ SMESH::SMESH_Hypothesis_ptr SMESH_Gen_i::CreateHypothesis( const char* theHypNam
     SALOMEDS::SObject_wrap aSO = PublishHypothesis( hyp );
     if ( !aSO->_is_nil() ) {
       // Update Python script
-      TPythonDump() << aSO << " = " << this << ".CreateHypothesis('"
+      TPythonDump(this) << aSO << " = " << this << ".CreateHypothesis('"
                     << theHypName << "', '" << theLibName << "')";
     }
   }
@@ -862,7 +903,7 @@ SMESH_Gen_i::CreateHypothesisByAverageLength( const char*    theHypType,
                                   initParams );
   SALOMEDS::SObject_wrap so = PublishHypothesis( hyp );
 
-  TPythonDump() << hyp << " = " << this << ".CreateHypothesisByAverageLength( '"
+  TPythonDump(this) << hyp << " = " << this << ".CreateHypothesisByAverageLength( '"
                 << theHypType << "', '"
                 << theLibName << "', "
                 << theAverageLength << ", "
@@ -1201,7 +1242,7 @@ char* SMESH_Gen_i::GetOption(const char* name)
 SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMesh( GEOM::GEOM_Object_ptr theShapeObject )
 {
   Unexpect aCatch(SALOME_SalomeException);
-  if(MYDEBUG) MESSAGE( "SMESH_Gen_i::CreateMesh" );
+  MESSAGE( "SMESH_Gen_i::CreateMesh(GEOM_Object_ptr)" );
   // create mesh
   SMESH::SMESH_Mesh_var mesh = this->createMesh();
   // set shape
@@ -1217,7 +1258,41 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMesh( GEOM::GEOM_Object_ptr theShapeObj
     aStudyBuilder->CommitCommand();
     if ( !aSO->_is_nil() ) {
       // Update Python script
-      TPythonDump() << aSO << " = " << this << ".CreateMesh(" << theShapeObject << ")";
+      TPythonDump(this) << aSO << " = " << this << ".CreateMesh(" << theShapeObject << ")";
+    }
+  }
+
+  return mesh._retn();
+}
+
+//=============================================================================
+/*!
+ *  SMESH_Gen_i::CreateParallelMesh
+ *
+ *  Create empty parallel mesh on a shape and publish it in the study
+ */
+//=============================================================================
+
+SMESH::SMESH_ParallelMesh_ptr SMESH_Gen_i::CreateParallelMesh( GEOM::GEOM_Object_ptr theShapeObject )
+{
+  Unexpect aCatch(SALOME_SalomeException);
+  MESSAGE( "SMESH_Gen_i::CreateParallelMesh" );
+  // create mesh
+  SMESH::SMESH_ParallelMesh_var mesh = this->createParallelMesh();
+  // set shape
+  SMESH_ParallelMesh_i* meshServant = SMESH::DownCast<SMESH_ParallelMesh_i*>( mesh );
+  ASSERT( meshServant );
+  meshServant->SetShape( theShapeObject );
+
+  // publish mesh in the study
+  if ( CanPublishInStudy( mesh ) ) {
+    SALOMEDS::StudyBuilder_var aStudyBuilder = getStudyServant()->NewBuilder();
+    aStudyBuilder->NewCommand();  // There is a transaction
+    SALOMEDS::SObject_wrap aSO = PublishMesh( mesh.in() );
+    aStudyBuilder->CommitCommand();
+    if ( !aSO->_is_nil() ) {
+      // Update Python script
+      TPythonDump(this) << aSO << " = " << this << ".CreateParallelMesh(" << theShapeObject << ")";
     }
   }
 
@@ -1235,7 +1310,7 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMesh( GEOM::GEOM_Object_ptr theShapeObj
 SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateEmptyMesh()
 {
   Unexpect aCatch(SALOME_SalomeException);
-  if(MYDEBUG) MESSAGE( "SMESH_Gen_i::CreateMesh" );
+  MESSAGE( "SMESH_Gen_i::CreateEmptyMesh" );
   // create mesh
   SMESH::SMESH_Mesh_var mesh = this->createMesh();
 
@@ -1247,7 +1322,7 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateEmptyMesh()
     aStudyBuilder->CommitCommand();
     if ( !aSO->_is_nil() ) {
       // Update Python script
-      TPythonDump() << aSO << " = " << this << ".CreateEmptyMesh()";
+      TPythonDump(this) << aSO << " = " << this << ".CreateEmptyMesh()";
     }
   }
 
@@ -1301,7 +1376,7 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMeshesFromUNV( const char* theFileName
     aStudyBuilder->CommitCommand();
     if ( !aSO->_is_nil() ) {
       // Update Python script
-      TPythonDump() << aSO << " = " << this << ".CreateMeshesFromUNV(r'" << theFileName << "')";
+      TPythonDump(this) << aSO << " = " << this << ".CreateMeshesFromUNV(r'" << theFileName << "')";
     }
   }
 
@@ -1324,17 +1399,17 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMeshesFromUNV( const char* theFileName
  */
 //=============================================================================
 
-SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMEDorSAUV( const char* theFileName,
-                                                           SMESH::DriverMED_ReadStatus& theStatus,
-                                                           const char* theCommandNameForPython,
-                                                           const char* theFileNameForPython)
+SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char*                  theFileName,
+                                                     SMESH::DriverMED_ReadStatus& theStatus )
 {
+  checkFileReadable( theFileName );
+
 #ifdef WIN32
   char bname[ _MAX_FNAME ];
-  _splitpath( theFileNameForPython, NULL, NULL, bname, NULL );
+  _splitpath( theFileName, NULL, NULL, bname, NULL );
   string aFileName = bname;
 #else
-  string aFileName = basename( const_cast<char *>(theFileNameForPython) );
+  string aFileName = basename( const_cast<char *>( theFileName ));
 #endif
   // Retrieve mesh names from the file
   DriverMED_R_SMESHDS_Mesh myReader;
@@ -1347,59 +1422,57 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMEDorSAUV( const char* theFileNa
 
   { // open a new scope to make aPythonDump die before PythonDump in SMESH_Mesh::GetGroups()
 
-  // Python Dump
-  TPythonDump aPythonDump;
-  aPythonDump << "([";
+    // Python Dump
+    TPythonDump aPythonDump(this);
+    aPythonDump << "([";
 
-  if (theStatus == SMESH::DRS_OK) {
-    SALOMEDS::StudyBuilder_var aStudyBuilder;
-    aStudyBuilder = getStudyServant()->NewBuilder();
-    aStudyBuilder->NewCommand();  // There is a transaction
+    if (theStatus == SMESH::DRS_OK)
+    {
+      SALOMEDS::StudyBuilder_var aStudyBuilder;
+      aStudyBuilder = getStudyServant()->NewBuilder();
+      aStudyBuilder->NewCommand();  // There is a transaction
 
-    aResult->length( aNames.size() );
-    int i = 0;
+      aResult->length( aNames.size() );
+      int i = 0;
 
-    // Iterate through all meshes and create mesh objects
-    for ( list<string>::iterator it = aNames.begin(); it != aNames.end(); it++ )
-    {
-      // Python Dump
-      if (i > 0) aPythonDump << ", ";
-
-      // create mesh
-      SMESH::SMESH_Mesh_var mesh = createMesh();
-
-      // publish mesh in the study
-      SALOMEDS::SObject_wrap aSO;
-      if ( CanPublishInStudy( mesh ) )
-        // little trick: for MED file theFileName and theFileNameForPython are the same, but they are different for SAUV
-        // - as names of meshes are stored in MED file, we use them for data publishing
-        // - as mesh name is not stored in UNV file, we use file name as name of mesh when publishing data
-        aSO = PublishMesh( mesh.in(), ( theFileName == theFileNameForPython ) ? (*it).c_str() : aFileName.c_str() );
-
-      // Python Dump
-      if ( !aSO->_is_nil() ) {
-        aPythonDump << aSO;
-      } else {
-        aPythonDump << "mesh_" << i;
-      }
+      // Iterate through all meshes and create mesh objects
+      for ( const std::string & meshName : aNames )
+      {
+        // Python Dump
+        if (i > 0) aPythonDump << ", ";
+
+        // create mesh
+        SMESH::SMESH_Mesh_var mesh = createMesh();
+
+        // publish mesh in the study
+        SALOMEDS::SObject_wrap aSO;
+        if ( CanPublishInStudy( mesh ) )
+          aSO = PublishMesh( mesh.in(), meshName.c_str() );
+
+        // Python Dump
+        if ( !aSO->_is_nil() ) {
+          aPythonDump << aSO;
+        } else {
+          aPythonDump << "mesh_" << i;
+        }
 
-      // Read mesh data (groups are published automatically by ImportMEDFile())
-      SMESH_Mesh_i* meshServant = dynamic_cast<SMESH_Mesh_i*>( GetServant( mesh ).in() );
-      ASSERT( meshServant );
-      SMESH::DriverMED_ReadStatus status1 =
-        meshServant->ImportMEDFile( theFileName, (*it).c_str() );
-      if (status1 > theStatus)
-        theStatus = status1;
+        // Read mesh data (groups are published automatically by ImportMEDFile())
+        SMESH_Mesh_i* meshServant = dynamic_cast<SMESH_Mesh_i*>( GetServant( mesh ).in() );
+        ASSERT( meshServant );
+        SMESH::DriverMED_ReadStatus status1 =
+          meshServant->ImportMEDFile( theFileName, meshName.c_str() );
+        if (status1 > theStatus)
+          theStatus = status1;
 
-      aResult[i++] = SMESH::SMESH_Mesh::_duplicate( mesh );
-      meshServant->GetImpl().GetMeshDS()->Modified();
+        aResult[i++] = SMESH::SMESH_Mesh::_duplicate( mesh );
+        meshServant->GetImpl().GetMeshDS()->Modified();
+      }
+      if ( !aStudyBuilder->_is_nil() )
+        aStudyBuilder->CommitCommand();
     }
-    if ( !aStudyBuilder->_is_nil() )
-      aStudyBuilder->CommitCommand();
-  }
 
-  // Update Python script
-  aPythonDump << "], status) = " << this << "." << theCommandNameForPython << "(r'" << theFileNameForPython << "')";
+    // Update Python script
+    aPythonDump << "], status) = " << this << ".CreateMeshesFromMED( r'" << theFileName << "' )";
   }
   // Dump creation of groups
   for ( CORBA::ULong  i = 0; i < aResult->length(); ++i )
@@ -1408,66 +1481,6 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMEDorSAUV( const char* theFileNa
   return aResult._retn();
 }
 
-//================================================================================
-/*!
- * \brief Create meshes by reading a MED file
- */
-//================================================================================
-
-SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromMED( const char*                  theFileName,
-                                                     SMESH::DriverMED_ReadStatus& theStatus)
-{
-  Unexpect aCatch(SALOME_SalomeException);
-  checkFileReadable( theFileName );
-
-  SMESH::mesh_array* result = CreateMeshesFromMEDorSAUV(theFileName, theStatus,
-                                                        "CreateMeshesFromMED", theFileName);
-  return result;
-}
-
-//=============================================================================
-/*!
- *  SMESH_Gen_i::CreateMeshFromSAUV
- *
- *  Create mesh and import data from SAUV file
- */
-//=============================================================================
-
-SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromSAUV( const char*                  theFileName,
-                                                      SMESH::DriverMED_ReadStatus& theStatus)
-{
-  Unexpect aCatch(SALOME_SalomeException);
-  checkFileReadable( theFileName );
-
-  std::string sauvfilename(theFileName);
-  std::string medfilename(theFileName);
-  medfilename += ".med";
-  std::string cmd;
-#ifdef WIN32
-  cmd = "%PYTHONBIN% ";
-#else
-  cmd = "python3 ";
-#endif
-  cmd += "-c \"";
-  cmd += "from medutilities import convert ; convert(r'" + sauvfilename + "', 'GIBI', 'MED', 1, r'" + medfilename + "')";
-  cmd += "\"";
-  system(cmd.c_str());
-  SMESH::mesh_array* result = CreateMeshesFromMEDorSAUV(medfilename.c_str(),
-                                                        theStatus,
-                                                        "CreateMeshesFromSAUV",
-                                                        sauvfilename.c_str());
-#ifdef WIN32
-  cmd = "%PYTHONBIN% ";
-#else
-  cmd = "python3 ";
-#endif
-  cmd += "-c \"";
-  cmd += "from medutilities import my_remove ; my_remove(r'" + medfilename + "')";
-  cmd += "\"";
-  system(cmd.c_str());
-  return result;
-}
-
 //=============================================================================
 /*!
  *  SMESH_Gen_i::CreateMeshFromSTL
@@ -1498,7 +1511,7 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateMeshesFromSTL( const char* theFileName
     aStudyBuilder->CommitCommand();
     if ( !aSO->_is_nil() ) {
       // Update Python script
-      TPythonDump() << aSO << " = " << this << ".CreateMeshesFromSTL(r'" << theFileName << "')";
+      TPythonDump(this) << aSO << " = " << this << ".CreateMeshesFromSTL(r'" << theFileName << "')";
     }
   }
 
@@ -1536,7 +1549,7 @@ SMESH::mesh_array* SMESH_Gen_i::CreateMeshesFromCGNS( const char*
   { // open a new scope to make aPythonDump die before PythonDump in SMESH_Mesh::GetGroups()
 
     // Python Dump
-    TPythonDump aPythonDump;
+    TPythonDump aPythonDump(this);
     aPythonDump << "([";
 
     if (theStatus == SMESH::DRS_OK)
@@ -1624,7 +1637,7 @@ SMESH_Gen_i::CreateMeshesFromGMF( const char*             theFileName,
     aStudyBuilder->CommitCommand();
     if ( !aSO->_is_nil() ) {
       // Update Python script
-      TPythonDump() << "("<< aSO << ", error) = " << this << ".CreateMeshesFromGMF(r'"
+      TPythonDump(this) << "("<< aSO << ", error) = " << this << ".CreateMeshesFromGMF(r'"
                     << theFileName << "', "
                     << theMakeRequiredGroups << " )";
     }
@@ -1649,7 +1662,7 @@ CORBA::Boolean SMESH_Gen_i::IsReadyToCompute( SMESH::SMESH_Mesh_ptr theMesh,
                                               GEOM::GEOM_Object_ptr theShapeObject )
 {
   Unexpect aCatch(SALOME_SalomeException);
-  if(MYDEBUG) MESSAGE( "SMESH_Gen_i::IsReadyToCompute" );
+  MESSAGE( "SMESH_Gen_i::IsReadyToCompute" );
 
   if ( CORBA::is_nil( theShapeObject ) )
     THROW_SALOME_CORBA_EXCEPTION( "bad shape object reference",
@@ -1723,7 +1736,7 @@ SMESH::compute_error_array* SMESH_Gen_i::GetComputeErrors( SMESH::SMESH_Mesh_ptr
                                                            GEOM::GEOM_Object_ptr theSubObject )
 {
   Unexpect aCatch(SALOME_SalomeException);
-  if(MYDEBUG) MESSAGE( "SMESH_Gen_i::GetComputeErrors()" );
+  MESSAGE( "SMESH_Gen_i::GetComputeErrors()" );
 
   if ( CORBA::is_nil( theSubObject ) && theMesh->HasShapeToMesh())
     THROW_SALOME_CORBA_EXCEPTION( "bad shape object reference", SALOME::BAD_PARAM );
@@ -1797,7 +1810,7 @@ SMESH_Gen_i::GetBadInputElements( SMESH::SMESH_Mesh_ptr theMesh,
                                   CORBA::Short          theSubShapeID )
 {
   Unexpect aCatch(SALOME_SalomeException);
-  if(MYDEBUG) MESSAGE( "SMESH_Gen_i::GetBadInputElements()" );
+  MESSAGE( "SMESH_Gen_i::GetBadInputElements()" );
 
   if ( CORBA::is_nil( theMesh ) )
     THROW_SALOME_CORBA_EXCEPTION( "bad Mesh reference",SALOME::BAD_PARAM );
@@ -1894,7 +1907,7 @@ SMESH_Gen_i::MakeGroupsOfBadInputElements( SMESH::SMESH_Mesh_ptr theMesh,
     if ( SMESH_Mesh_i* meshServant = SMESH::DownCast<SMESH_Mesh_i*>( theMesh ))
     {
       groups = meshServant->MakeGroupsOfBadInputElements( theSubShapeID, theGroupName );
-      TPythonDump() << groups << " = " << this
+      TPythonDump(this) << groups << " = " << this
                     << ".MakeGroupsOfBadInputElements( "
                     << theMesh << ", " << theSubShapeID << ", '" << theGroupName << "' )";
     }
@@ -1918,7 +1931,7 @@ SMESH::algo_error_array* SMESH_Gen_i::GetAlgoState( SMESH::SMESH_Mesh_ptr theMes
                                                     GEOM::GEOM_Object_ptr theSubObject )
 {
   Unexpect aCatch(SALOME_SalomeException);
-  if(MYDEBUG) MESSAGE( "SMESH_Gen_i::GetAlgoState()" );
+  MESSAGE( "SMESH_Gen_i::GetAlgoState()" );
 
   if ( CORBA::is_nil( theSubObject ) && theMesh->HasShapeToMesh())
     THROW_SALOME_CORBA_EXCEPTION( "bad shape object reference", SALOME::BAD_PARAM );
@@ -1979,7 +1992,7 @@ SMESH_Gen_i::GetSubShapesId( GEOM::GEOM_Object_ptr      theMainShapeObject,
                              const SMESH::object_array& theListOfSubShapeObject )
 {
   Unexpect aCatch(SALOME_SalomeException);
-  if(MYDEBUG) MESSAGE( "SMESH_Gen_i::GetSubShapesId" );
+  MESSAGE( "SMESH_Gen_i::GetSubShapesId" );
 
   SMESH::long_array_var shapesId = new SMESH::long_array;
   set<int> setId;
@@ -2006,19 +2019,19 @@ SMESH_Gen_i::GetSubShapesId( GEOM::GEOM_Object_ptr      theMainShapeObject,
       {
         const TopoDS_Face& F = TopoDS::Face(exp.Current());
         setId.insert(myIndexToShape.FindIndex(F));
-        if(MYDEBUG) SCRUTE(myIndexToShape.FindIndex(F));
+        SCRUTE(myIndexToShape.FindIndex(F));
       }
       for (TopExp_Explorer exp(locShape,TopAbs_EDGE); exp.More(); exp.Next())
       {
         const TopoDS_Edge& E = TopoDS::Edge(exp.Current());
         setId.insert(myIndexToShape.FindIndex(E));
-        if(MYDEBUG) SCRUTE(myIndexToShape.FindIndex(E));
+        SCRUTE(myIndexToShape.FindIndex(E));
       }
       for (TopExp_Explorer exp(locShape,TopAbs_VERTEX); exp.More(); exp.Next())
       {
         const TopoDS_Vertex& V = TopoDS::Vertex(exp.Current());
         setId.insert(myIndexToShape.FindIndex(V));
-        if(MYDEBUG) SCRUTE(myIndexToShape.FindIndex(V));
+        SCRUTE(myIndexToShape.FindIndex(V));
       }
     }
     shapesId->length(setId.size());
@@ -2026,9 +2039,9 @@ SMESH_Gen_i::GetSubShapesId( GEOM::GEOM_Object_ptr      theMainShapeObject,
     int i=0;
     for (iind = setId.begin(); iind != setId.end(); iind++)
     {
-      if(MYDEBUG) SCRUTE((*iind));
+      SCRUTE((*iind));
       shapesId[i] = (*iind);
-      if(MYDEBUG) SCRUTE(shapesId[i]);
+      SCRUTE(shapesId[i]);
       i++;
     }
   }
@@ -2053,7 +2066,7 @@ CORBA::Boolean SMESH_Gen_i::Compute( SMESH::SMESH_Mesh_ptr theMesh,
 {
   //MEMOSTAT;
   Unexpect aCatch(SALOME_SalomeException);
-  if(MYDEBUG) MESSAGE( "SMESH_Gen_i::Compute" );
+  MESSAGE( "SMESH_Gen_i::Compute" );
 
   if ( CORBA::is_nil( theShapeObject ) && theMesh->HasShapeToMesh())
     THROW_SALOME_CORBA_EXCEPTION( "bad shape object reference",
@@ -2064,8 +2077,10 @@ CORBA::Boolean SMESH_Gen_i::Compute( SMESH::SMESH_Mesh_ptr theMesh,
                                   SALOME::BAD_PARAM );
 
   // Update Python script
-  TPythonDump() << "isDone = " << this << ".Compute( "
-                << theMesh << ", " << theShapeObject << ")";
+  TPythonDump(this) << "isDone = " << this << ".Compute( "
+                    << theMesh << ", " << theShapeObject << ")";
+  TPythonDump(this) << this << ".CheckCompute( "
+                    << theMesh << ")";
 
   try {
     // get mesh servant
@@ -2148,7 +2163,7 @@ SMESH::MeshPreviewStruct* SMESH_Gen_i::Precompute( SMESH::SMESH_Mesh_ptr theMesh
                                                    SMESH::long_array&    theShapesId)
 {
   Unexpect aCatch(SALOME_SalomeException);
-  if(MYDEBUG) MESSAGE( "SMESH_Gen_i::Precompute" );
+  MESSAGE( "SMESH_Gen_i::Precompute" );
 
   if ( CORBA::is_nil( theShapeObject ) && theMesh->HasShapeToMesh())
     THROW_SALOME_CORBA_EXCEPTION( "bad shape object reference",
@@ -2330,12 +2345,11 @@ SMESH::MeshPreviewStruct* SMESH_Gen_i::Precompute( SMESH::SMESH_Mesh_ptr theMesh
  */
 //=============================================================================
 
-SMESH::long_array* SMESH_Gen_i::Evaluate(SMESH::SMESH_Mesh_ptr theMesh,
-                                         GEOM::GEOM_Object_ptr theShapeObject)
-//                                     SMESH::long_array& theNbElems)
+SMESH::smIdType_array* SMESH_Gen_i::Evaluate(SMESH::SMESH_Mesh_ptr theMesh,
+                                             GEOM::GEOM_Object_ptr theShapeObject)
 {
   Unexpect aCatch(SALOME_SalomeException);
-  if(MYDEBUG) MESSAGE( "SMESH_Gen_i::Evaluate" );
+  MESSAGE( "SMESH_Gen_i::Evaluate" );
 
   if ( CORBA::is_nil( theShapeObject ) && theMesh->HasShapeToMesh())
     THROW_SALOME_CORBA_EXCEPTION( "bad shape object reference", SALOME::BAD_PARAM );
@@ -2343,14 +2357,14 @@ SMESH::long_array* SMESH_Gen_i::Evaluate(SMESH::SMESH_Mesh_ptr theMesh,
   if ( CORBA::is_nil( theMesh ) )
     THROW_SALOME_CORBA_EXCEPTION( "bad Mesh reference", SALOME::BAD_PARAM );
 
-  SMESH::long_array_var nbels = new SMESH::long_array;
+  SMESH::smIdType_array_var nbels = new SMESH::smIdType_array;
   nbels->length(SMESH::Entity_Last);
   int i = SMESH::Entity_Node;
   for (; i < SMESH::Entity_Last; i++)
     nbels[i] = 0;
 
   // Update Python script
-  TPythonDump() << "theNbElems = " << this << ".Evaluate( "
+  TPythonDump(this) << "theNbElems = " << this << ".Evaluate( "
                 << theMesh << ", " << theShapeObject << ")";
 
   try {
@@ -2373,9 +2387,9 @@ SMESH::long_array* SMESH_Gen_i::Evaluate(SMESH::SMESH_Mesh_ptr theMesh,
       /*CORBA::Boolean ret =*/ myGen.Evaluate( myLocMesh, myLocShape, aResMap);
       MapShapeNbElemsItr anIt = aResMap.begin();
       for(; anIt!=aResMap.end(); anIt++) {
-        const vector<int>& aVec = (*anIt).second;
+        const vector<smIdType>& aVec = (*anIt).second;
         for ( i = SMESH::Entity_Node; i < (int)aVec.size(); i++ ) {
-          int nbElem = aVec[i];
+          smIdType nbElem = aVec[i];
           if ( nbElem < 0 ) // algo failed, check that it has reported a message
           {
             SMESH_subMesh*            sm = anIt->first;
@@ -2418,7 +2432,7 @@ SMESH::long_array* SMESH_Gen_i::Evaluate(SMESH::SMESH_Mesh_ptr theMesh,
 
 GEOM::GEOM_Object_ptr
 SMESH_Gen_i::GetGeometryByMeshElement( SMESH::SMESH_Mesh_ptr  theMesh,
-                                       CORBA::Long            theElementID,
+                                       SMESH::smIdType        theElementID,
                                        const char*            theGeomName)
 {
   Unexpect aCatch(SALOME_SalomeException);
@@ -2482,7 +2496,7 @@ SMESH_Gen_i::GetGeometryByMeshElement( SMESH::SMESH_Mesh_ptr  theMesh,
 
 GEOM::GEOM_Object_ptr
 SMESH_Gen_i::FindGeometryByMeshElement( SMESH::SMESH_Mesh_ptr  theMesh,
-                                        CORBA::Long            theElementID)
+                                        SMESH::smIdType            theElementID)
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( CORBA::is_nil( theMesh ) )
@@ -2607,7 +2621,7 @@ SMESH_Gen_i::ConcatenateCommon(const SMESH::ListOfIDSources& theMeshesArray,
                                CORBA::Boolean                theCommonGroups,
                                SMESH::SMESH_Mesh_ptr         theMeshToAppendTo)
 {
-  std::unique_ptr< TPythonDump > pPythonDump( new TPythonDump );
+  std::unique_ptr< TPythonDump > pPythonDump( new TPythonDump(this) );
   TPythonDump& pythonDump = *pPythonDump; // prevent dump of called methods
 
   // create mesh if theMeshToAppendTo not provided
@@ -2670,7 +2684,7 @@ SMESH_Gen_i::ConcatenateCommon(const SMESH::ListOfIDSources& theMeshesArray,
     }
 
     // remember nb of elements before filling in
-    SMESH::long_array_var prevState =  newMesh->GetNbElementsByType();
+    SMESH::smIdType_array_var prevState =  newMesh->GetNbElementsByType();
 
     // copy nodes
 
@@ -2684,28 +2698,31 @@ SMESH_Gen_i::ConcatenateCommon(const SMESH::ListOfIDSources& theMeshesArray,
 
     // copy elements
 
-    SMESH::array_of_ElementType_var srcElemTypes = theMeshesArray[i]->GetTypes();
-    if ( srcElemTypes->length() == 1 && srcElemTypes[0] == SMESH::NODE ) // group of nodes
-      continue;
     std::vector< const SMDS_MeshElement* > newElems( initMeshDS->NbElements() + 1, 0 );
-    elemIt = initImpl->GetElements( theMeshesArray[i], SMESH::ALL );
-    while ( elemIt->more() )
+    SMESH::array_of_ElementType_var srcElemTypes = theMeshesArray[i]->GetTypes();
+    bool hasElems = (( srcElemTypes->length() > 1 ) ||
+                     ( srcElemTypes->length() == 1 && srcElemTypes[0] != SMESH::NODE ));
+    if ( hasElems )
     {
-      const SMDS_MeshElement* elem = elemIt->next();
-      elemType.myNodes.resize( elem->NbNodes() );
-
-      SMDS_NodeIteratorPtr itNodes = elem->nodeIterator();
-      for ( int k = 0; itNodes->more(); k++)
+      elemIt = initImpl->GetElements( theMeshesArray[i], SMESH::ALL );
+      while ( elemIt->more() )
       {
-        const SMDS_MeshNode* node = itNodes->next();
-        elemType.myNodes[ k ] = static_cast< const SMDS_MeshNode*> ( newNodes[ node->GetID() ]);
-      }
+        const SMDS_MeshElement* elem = elemIt->next();
+        elemType.myNodes.resize( elem->NbNodes() );
 
-      // creates a corresponding element on existent nodes in new mesh
-      newElems[ elem->GetID() ] =
-        newEditor.AddElement( elemType.myNodes, elemType.Init( elem, /*basicOnly=*/false ));
+        SMDS_NodeIteratorPtr itNodes = elem->nodeIterator();
+        for ( int k = 0; itNodes->more(); k++)
+        {
+          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
+        newElems[ elem->GetID() ] =
+          newEditor.AddElement( elemType.myNodes, elemType.Init( elem, /*basicOnly=*/false ));
+      }
+      newEditor.ClearLastCreated(); // forget the history
     }
-    newEditor.ClearLastCreated(); // forget the history
 
 
     // create groups of just added elements
@@ -2715,12 +2732,12 @@ SMESH_Gen_i::ConcatenateCommon(const SMESH::ListOfIDSources& theMeshesArray,
     {
       // 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();
+      // check of typeNames: compilation failure mains that NB_ELEMENT_TYPES changed:
+      static_assert( sizeof(typeNames) / sizeof(const char*) ==SMESH::NB_ELEMENT_TYPES,
+                     "Update names of ElementType's!!!" );
+
+      SMESH::smIdType_array_var curState = newMesh->GetNbElementsByType();
 
       for( groupType = SMESH::NODE;
            groupType < SMESH::NB_ELEMENT_TYPES;
@@ -2767,7 +2784,7 @@ SMESH_Gen_i::ConcatenateCommon(const SMESH::ListOfIDSources& theMeshesArray,
 
       SMESH::SMESH_GroupBase_ptr group;
       CORBA::String_var          groupName;
-      SMESH::long_array_var newIDs = new SMESH::long_array();
+      SMESH::smIdType_array_var newIDs = new SMESH::smIdType_array();
 
       // loop on groups of a source mesh
       SMESH::ListOfGroups_var listOfGroups = initImpl->GetGroups();
@@ -2870,6 +2887,138 @@ SMESH_Gen_i::ConcatenateCommon(const SMESH::ListOfIDSources& theMeshesArray,
   return newMesh._retn();
 }
 
+
+//================================================================================
+/*!
+ * \brief Create a mesh by copying a part of another mesh
+ *  \param mesh - TetraHedron mesh
+ *  \param meshName Name of the created mesh
+ *  \retval SMESH::SMESH_Mesh_ptr - the new mesh
+ */
+//================================================================================
+
+SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CreateDualMesh(SMESH::SMESH_IDSource_ptr mesh,
+                                                  const char*               meshName,
+                                                  CORBA::Boolean            adapt_to_shape)
+{
+  Unexpect aCatch(SALOME_SalomeException);
+
+  TPythonDump* pyDump = new TPythonDump(this); // prevent dump from CreateMesh()
+  std::unique_ptr<TPythonDump> pyDumpDeleter( pyDump );
+
+  // 1. Get source mesh
+
+  if ( CORBA::is_nil( mesh ))
+    THROW_SALOME_CORBA_EXCEPTION( "bad IDSource", SALOME::BAD_PARAM );
+
+  SMESH::SMESH_Mesh_var srcMesh = mesh->GetMesh();
+  SMESH_Mesh_i*       srcMesh_i = SMESH::DownCast<SMESH_Mesh_i*>( srcMesh );
+  if ( !srcMesh_i )
+    THROW_SALOME_CORBA_EXCEPTION( "bad mesh of IDSource", SALOME::BAD_PARAM );
+
+  CORBA::String_var mesh_var=GetORB()->object_to_string(mesh);
+  std::string mesh_ior = mesh_var.in();
+
+  //temporary folder for the generation of the med file
+  fs::path tmp_folder = fs::temp_directory_path() / fs::unique_path(fs::path("dual_mesh-%%%%"));
+  fs::create_directories(tmp_folder);
+  fs::path dual_mesh_file = tmp_folder / fs::path("tmp_dual_mesh.med");
+  std::string mesh_name(meshName);
+  MESSAGE("Working in folder" + tmp_folder.string());
+
+  // Running Python script
+  assert(Py_IsInitialized());
+  PyGILState_STATE gstate;
+  gstate = PyGILState_Ensure();
+
+
+  std::string ats;
+  if(adapt_to_shape)
+    ats = "True";
+  else
+    ats = "False";
+
+  std::string cmd="import salome.smesh.smesh_tools as smt\n";
+  cmd +="smt.smesh_create_dual_mesh(\"" + mesh_ior + "\", r\"" +
+        dual_mesh_file.string() + "\", mesh_name=\"" + mesh_name + "\", adapt_to_shape=" + ats + ")";
+  MESSAGE(cmd);
+
+  PyObject *py_main = PyImport_AddModule("__main__");
+  PyObject *py_dict = PyModule_GetDict(py_main);
+  PyObject *local_dict = PyDict_New();
+
+  PyRun_String(cmd.c_str(), Py_file_input, py_dict, local_dict);
+
+  if (PyErr_Occurred()) {
+    // Restrieving python error
+    MESSAGE("Catching error");
+    PyObject *errtype, *errvalue, *traceback;
+    PyErr_Fetch(&errtype, &errvalue, &traceback);
+    if(errvalue != NULL) {
+      MESSAGE("Error has a value");
+      PyObject *s = PyObject_Str(errvalue);
+      Py_ssize_t size;
+      std::string msg = PyUnicode_AsUTF8AndSize(s, &size);
+      msg = "Issue with the execution of create_dual_mesh:\n"+msg;
+      MESSAGE("throwing exception");
+      // We need to deactivate the GIL before throwing the exception
+      PyGILState_Release(gstate);
+      THROW_SALOME_CORBA_EXCEPTION(msg.c_str(), SALOME::INTERNAL_ERROR );
+      Py_DECREF(s);
+    }
+    Py_XDECREF(errvalue);
+    Py_XDECREF(errtype);
+    Py_XDECREF(traceback);
+  }
+
+  PyGILState_Release(gstate);
+
+  MESSAGE("Mesh created in " + dual_mesh_file.string());
+
+  // Import created MED
+  SMESH::SMESH_Mesh_var newMesh = CreateMesh(GEOM::GEOM_Object::_nil());
+  SMESH_Mesh_i*       newMesh_i = SMESH::DownCast<SMESH_Mesh_i*>( newMesh );
+  if ( !newMesh_i )
+    THROW_SALOME_CORBA_EXCEPTION( "can't create a mesh", SALOME::INTERNAL_ERROR );
+  SALOMEDS::SObject_wrap meshSO = ObjectToSObject( newMesh );
+  if ( !meshSO->_is_nil() )
+  {
+    SetName( meshSO, meshName, meshName );
+    SetPixMap( meshSO, "ICON_SMESH_TREE_MESH_IMPORTED");
+  }
+  int ret = newMesh_i->ImportMEDFile(dual_mesh_file.string().c_str(), meshName);
+  if(ret)
+    THROW_SALOME_CORBA_EXCEPTION( "Issue when importing mesh", SALOME::INTERNAL_ERROR );
+
+  /*
+  SMESH_Mesh& newMesh2 = newMesh_i->GetImpl();
+
+
+  MESSAGE("Loading file: " << dual_mesh_file.string() << " with mesh " << meshName);
+  int ret = newMesh2.MEDToMesh(dual_mesh_file.c_str(), meshName);
+    */
+
+  newMesh_i->GetImpl().GetMeshDS()->Modified();
+
+  *pyDump << newMesh << " = " << this
+          << ".CreateDualMesh("
+          << mesh << ", "
+          << "'" << mesh_name << "', "
+          << ats << ") ";
+
+  pyDumpDeleter.reset(); // allow dump in GetGroups()
+
+  if ( srcMesh_i->GetImpl().GetGroupIds().size() > 0 ) // dump created groups
+    MESSAGE("Dump of groups");
+    SMESH::ListOfGroups_var groups = newMesh->GetGroups();
+
+#ifndef _DEBUG_
+  fs::remove_all(tmp_folder);
+#endif
+
+  return newMesh._retn();
+}
+
 //================================================================================
 /*!
  * \brief Create a mesh by copying a part of another mesh
@@ -2888,7 +3037,7 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CopyMesh(SMESH::SMESH_IDSource_ptr meshPart,
 {
   Unexpect aCatch(SALOME_SalomeException);
 
-  TPythonDump* pyDump = new TPythonDump; // prevent dump from CreateMesh()
+  TPythonDump* pyDump = new TPythonDump(this); // prevent dump from CreateMesh()
   std::unique_ptr<TPythonDump> pyDumpDeleter( pyDump );
 
   // 1. Get source mesh
@@ -2932,7 +3081,7 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CopyMesh(SMESH::SMESH_IDSource_ptr meshPart,
   }
   else
   {
-    SMESH::long_array_var ids = meshPart->GetIDs();
+    SMESH::smIdType_array_var ids = meshPart->GetIDs();
     if ( srcElemTypes->length() == 1 && srcElemTypes[0] == SMESH::NODE ) // group of nodes
     {
       for ( CORBA::ULong i=0; i < ids->length(); i++ )
@@ -3055,8 +3204,8 @@ SMESH::SMESH_Mesh_ptr SMESH_Gen_i::CopyMesh(SMESH::SMESH_IDSource_ptr meshPart,
       {
         TE2EMap & e2eMap = e2eMapByType[ groupDS->GetType() ];
         if ( e2eMap.empty() ) continue;
-        int minID = e2eMap.begin()->first->GetID();
-        int maxID = e2eMap.rbegin()->first->GetID();
+        smIdType minID = e2eMap.begin()->first->GetID();
+        smIdType maxID = e2eMap.rbegin()->first->GetID();
         TE2EMap::iterator e2e;
         while ( eIt->more() && groupElems.size() < e2eMap.size())
         {
@@ -3670,7 +3819,7 @@ CORBA::Boolean SMESH_Gen_i::CopyMeshWithGeom( SMESH::SMESH_Mesh_ptr       theSou
   bool ok = true;
   SMESH_TRY;
 
-  TPythonDump pyDump; // prevent dump from CreateMesh()
+  TPythonDump pyDump(this); // prevent dump from CreateMesh()
 
   theNewMesh        = CreateMesh( theNewGeometry );
   theNewGroups      = new SMESH::ListOfGroups();
@@ -3887,7 +4036,7 @@ CORBA::Boolean SMESH_Gen_i::CopyMeshWithGeom( SMESH::SMESH_Mesh_ptr       theSou
     {
       if ( newMeshDS->GetMeshInfo().NbElements( SMDSAbs_ElementType( elemType )) > 0 )
       {
-        SMESH::long_array_var elemIDs = stdlGroup->GetIDs();
+        SMESH::smIdType_array_var elemIDs = stdlGroup->GetIDs();
         const bool isElem = ( elemType != SMESH::NODE );
         CORBA::ULong iE = 0;
         for ( ; iE < elemIDs->length(); ++iE ) // check if any element has been copied
@@ -4214,8 +4363,9 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
   system(cmd.ToCString());
 
   // MED writer to be used by storage process
-  DriverMED_W_SMESHDS_Mesh myWriter;
-  myWriter.SetFile( meshfile.ToCString() );
+  DriverMED_W_SMESHDS_Mesh writer;
+  writer.SetFile( meshfile.ToCString() );
+  //writer.SetSaveNumbers( false ); // bos #24400 -- it leads to change of element IDs
 
   // IMP issue 20918
   // SetStoreName() to groups before storing hypotheses to let them refer to
@@ -4230,7 +4380,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
           SMESH::SMESH_Mesh_var myMesh = SMESH::SMESH_Mesh::_narrow( anObject ) ;
           if ( !myMesh->_is_nil() ) {
             myMesh->Load(); // load from study file if not yet done
-            TPythonDump pd; // not to dump GetGroups()
+            TPythonDump pd(this); // not to dump GetGroups()
             SMESH::ListOfGroups_var groups = myMesh->GetGroups();
             for ( CORBA::ULong i = 0; i < groups->length(); ++i )
             {
@@ -4422,8 +4572,8 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
             // check if the mesh is not empty
             if ( mySMESHDSMesh->NbNodes() > 0 ) {
               // write mesh data to med file
-              myWriter.SetMesh( mySMESHDSMesh );
-              myWriter.SetMeshId( id );
+              writer.SetMesh( mySMESHDSMesh );
+              writer.SetMeshId( id );
               strHasData = "1";
             }
             aSize[ 0 ] = strHasData.length() + 1;
@@ -4471,7 +4621,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
             // write reference on a shape if exists
             SALOMEDS::SObject_wrap myRef;
             bool shapeRefFound = false;
-            bool found = gotBranch->FindSubObject( GetRefOnShapeTag(), myRef.inout() );
+            bool found = gotBranch->FindSubObject( (CORBA::Long)GetRefOnShapeTag(), myRef.inout() );
             if ( found ) {
               SALOMEDS::SObject_wrap myShape;
               bool ok = myRef->ReferencedObject( myShape.inout() );
@@ -4502,7 +4652,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() );
+            found = gotBranch->FindSubObject( (CORBA::Long)GetRefOnAppliedHypothesisTag(), myHypBranch.inout() );
             if ( found && !shapeRefFound && hasShape ) { // remove applied hyps
               aStudy->NewBuilder()->RemoveObjectWithChildren( myHypBranch );
             }
@@ -4897,7 +5047,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
                     // Pass SMESHDS_Group to MED writer
                     SMESHDS_Group* aGrpDS = dynamic_cast<SMESHDS_Group*>( aGrpBaseDS );
                     if ( aGrpDS )
-                      myWriter.AddGroup( aGrpDS );
+                      writer.AddGroup( aGrpDS );
 
                     // write reference on a shape if exists
                     SMESHDS_GroupOnGeom* aGeomGrp =
@@ -4922,7 +5072,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
                       else // shape ref is invalid:
                       {
                         // save a group on geometry as ordinary group
-                        myWriter.AddGroup( aGeomGrp );
+                        writer.AddGroup( aGeomGrp );
                       }
                     }
                     else if ( SMESH_GroupOnFilter_i* aFilterGrp_i =
@@ -4945,7 +5095,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
             if ( strcmp( strHasData.c_str(), "1" ) == 0 )
             {
               // Flush current mesh information into MED file
-              myWriter.Perform();
+              writer.Perform();
 
               // save info on nb of elements
               SMESH_PreMeshInfo::SaveToFile( myImpl, id, aFile );
@@ -4972,7 +5122,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
                 {
                   SMDS_ElemIteratorPtr eIt =
                     mySMESHDSMesh->elementsIterator( isNode ? SMDSAbs_Node : SMDSAbs_All );
-                  int nbElems = isNode ? mySMESHDSMesh->NbNodes() : mySMESHDSMesh->GetMeshInfo().NbElements();
+                  smIdType nbElems = isNode ? mySMESHDSMesh->NbNodes() : mySMESHDSMesh->GetMeshInfo().NbElements();
                   if ( nbElems < 1 )
                     continue;
                   std::vector<int> smIDs; smIDs.reserve( nbElems );
@@ -5013,7 +5163,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
                   SMESHDS_SubMesh* aSubMesh = const_cast< SMESHDS_SubMesh* >( smIt->next() );
                   if ( aSubMesh->IsComplexSubmesh() )
                     continue; // submesh containing other submeshs
-                  int nbNodes = aSubMesh->NbNodes();
+                  smIdType nbNodes = aSubMesh->NbNodes();
                   if ( nbNodes == 0 ) continue;
 
                   int aShapeID = aSubMesh->GetID();
@@ -5154,7 +5304,7 @@ SALOMEDS::TMPFile* SMESH_Gen_i::Save( SALOMEDS::SComponent_ptr theComponent,
 SALOMEDS::TMPFile* SMESH_Gen_i::SaveASCII( SALOMEDS::SComponent_ptr theComponent,
                                            const char*              theURL,
                                            bool                     isMultiFile ) {
-  if(MYDEBUG) MESSAGE( "SMESH_Gen_i::SaveASCII" );
+  MESSAGE( "SMESH_Gen_i::SaveASCII" );
   SALOMEDS::TMPFile_var aStreamFile = Save( theComponent, theURL, isMultiFile );
   return aStreamFile._retn();
 
@@ -5201,7 +5351,8 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
   TCollection_AsciiString aStudyName( "" );
   if ( isMultiFile ) {
     CORBA::WString_var url = aStudy->URL();
-    aStudyName = (char*)SALOMEDS_Tool::GetNameFromPath( Kernel_Utils::encode(url.in()) ).c_str();
+    SMESHUtils::ArrayDeleter<const char> urlMulibyte( Kernel_Utils::encode( url.in()) );
+    aStudyName = (char*)SALOMEDS_Tool::GetNameFromPath( urlMulibyte.get() ).c_str();
   }
   // Set names of temporary files
   TCollection_AsciiString filename = tmpDir + aStudyName + "_SMESH.hdf";
@@ -5226,7 +5377,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
     return false;
   }
 
-  TPythonDump pd; // prevent dump during loading
+  TPythonDump pd(this); // prevent dump during loading
 
   // For PAL13473 ("Repetitive mesh") implementation.
   // New dependencies between SMESH objects are established:
@@ -5293,7 +5444,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
               size = aDataset->GetSize();
               char* libname_str = new char[ size ];
               aDataset->ReadFromDisk( libname_str );
-              if(MYDEBUG) SCRUTE( libname_str );
+              SCRUTE( libname_str );
               libname = string( libname_str );
               delete [] libname_str;
               aDataset->CloseOnDisk();
@@ -5315,7 +5466,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
 
           // --> restore hypothesis from data
           if ( id > 0 && !hypname.empty()/* && !hypdata.empty()*/ ) { // VSR : persistent data can be empty
-            if(MYDEBUG) MESSAGE("VSR - load hypothesis : id = " << id <<
+            MESSAGE("VSR - load hypothesis : id = " << id <<
                                 ", name = " << hypname.c_str() << ", persistent string = " << hypdata.c_str());
             SMESH::SMESH_Hypothesis_var myHyp;
 
@@ -5335,7 +5486,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
               myStudyContext->mapOldToNew( id, newId );
             }
             else
-              if(MYDEBUG) MESSAGE( "VSR - SMESH_Gen::Load - can't get servant" );
+              MESSAGE( "VSR - SMESH_Gen::Load - can't get servant" );
           }
         }
       }
@@ -5392,7 +5543,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
               size = aDataset->GetSize();
               char* libname_str = new char[ size ];
               aDataset->ReadFromDisk( libname_str );
-              if(MYDEBUG) SCRUTE( libname_str );
+              SCRUTE( libname_str );
               libname = string( libname_str );
               delete [] libname_str;
               aDataset->CloseOnDisk();
@@ -5404,7 +5555,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
               size = aDataset->GetSize();
               char* hypdata_str = new char[ size ];
               aDataset->ReadFromDisk( hypdata_str );
-              if(MYDEBUG) SCRUTE( hypdata_str );
+              SCRUTE( hypdata_str );
               hypdata = string( hypdata_str );
               delete [] hypdata_str;
               aDataset->CloseOnDisk();
@@ -5415,7 +5566,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
 
           // --> restore algorithm from data
           if ( id > 0 && !hypname.empty()/* && !hypdata.empty()*/ ) { // VSR : persistent data can be empty
-            if(MYDEBUG) MESSAGE("VSR - load algo : id = " << id <<
+            MESSAGE("VSR - load algo : id = " << id <<
                                 ", name = " << hypname.c_str() << ", persistent string = " << hypdata.c_str());
             SMESH::SMESH_Hypothesis_var myHyp;
 
@@ -5439,7 +5590,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
               myStudyContext->mapOldToNew( id, newId );
             }
             else
-              if(MYDEBUG) MESSAGE( "VSR - SMESH_Gen::Load - can't get servant" );
+              MESSAGE( "VSR - SMESH_Gen::Load - can't get servant" );
           }
         }
       }
@@ -5468,7 +5619,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
         int aNbObjects = aTopGroup->nInternalObjects();
         if ( aNbObjects > 0 ) {
           // create mesh
-          if(MYDEBUG) MESSAGE( "VSR - load mesh : id = " << id );
+          MESSAGE( "VSR - load mesh : id = " << id );
           SMESH::SMESH_Mesh_var myNewMesh = this->createMesh();
           SMESH_Mesh_i* myNewMeshImpl = dynamic_cast<SMESH_Mesh_i*>( GetServant( myNewMesh ).in() );
           if ( !myNewMeshImpl )
@@ -5555,7 +5706,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
       }
     } // reading MESHes
 
-    // As all object that can be referred by hypothesis are created,
+    // As all objects that can be referred by hypothesis are created,
     // we can restore hypothesis data
 
     list< pair< SMESH_Hypothesis_i*, string > >::iterator hyp_data;
@@ -5604,7 +5755,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
         aGroup->OpenOnDisk();
         // get number of applied algorithms
         int aNbSubObjects = aGroup->nInternalObjects();
-        if(MYDEBUG) MESSAGE( "VSR - number of applied algos " << aNbSubObjects );
+        MESSAGE( "VSR - number of applied algos " << aNbSubObjects );
         for ( int j = 0; j < aNbSubObjects; j++ ) {
           char name_dataset[ HDF_NAME_MAX_LEN+1 ];
           aGroup->InternalObjectIndentify( j, name_dataset );
@@ -5731,7 +5882,7 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
                     if ( aSubMesh->_is_nil() )
                       continue;
                     string iorSubString = GetORB()->object_to_string( aSubMesh );
-                    int newSubId = myStudyContext->findId( iorSubString );
+                    int        newSubId = myStudyContext->findId( iorSubString );
                     myStudyContext->mapOldToNew( subid, newSubId );
                   }
                 }
@@ -5923,7 +6074,8 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
               if ( aNewGroup->_is_nil() )
                 continue;
 
-              string iorSubString = GetORB()->object_to_string( aNewGroup );
+              CORBA::String_var iorSubStringVar = GetORB()->object_to_string( aNewGroup );
+              string iorSubString(iorSubStringVar.in());
               int        newSubId = myStudyContext->findId( iorSubString );
               myStudyContext->mapOldToNew( subid, newSubId );
 
@@ -6002,13 +6154,8 @@ bool SMESH_Gen_i::Load( SALOMEDS::SComponent_ptr theComponent,
         aDataset->ReadFromDisk((char*) dataString.data() );
         aDataset->CloseOnDisk();
 
-        std::istringstream istream( dataString.data() );
-        boost::archive::text_iarchive archive( istream );
         std::list< std::list< std::string > > orderEntryLists;
-        try {
-          archive >> orderEntryLists;
-        }
-        catch (...) {}
+        SMESHUtils::BoostTxtArchive( dataString ) >> orderEntryLists;
 
         TListOfListOfInt anOrderIds;
         for ( const std::list< std::string >& entryList : orderEntryLists )
@@ -6111,7 +6258,7 @@ bool SMESH_Gen_i::LoadASCII( SALOMEDS::SComponent_ptr theComponent,
                              const SALOMEDS::TMPFile& theStream,
                              const char*              theURL,
                              bool                     isMultiFile ) {
-  if(MYDEBUG) MESSAGE( "SMESH_Gen_i::LoadASCII" );
+  MESSAGE( "SMESH_Gen_i::LoadASCII" );
   return Load( theComponent, theStream, theURL, isMultiFile );
 
   //before call main ::Load method it's need for decipher text format to
@@ -6148,7 +6295,7 @@ bool SMESH_Gen_i::LoadASCII( SALOMEDS::SComponent_ptr theComponent,
 
 void SMESH_Gen_i::Close( SALOMEDS::SComponent_ptr theComponent )
 {
-  if(MYDEBUG) MESSAGE( "SMESH_Gen_i::Close" );
+  MESSAGE( "SMESH_Gen_i::Close" );
 
   // Clear study contexts data
   myStudyContext->Clear();
@@ -6172,7 +6319,7 @@ void SMESH_Gen_i::Close( SALOMEDS::SComponent_ptr theComponent )
 
 char* SMESH_Gen_i::ComponentDataType()
 {
-  if(MYDEBUG) MESSAGE( "SMESH_Gen_i::ComponentDataType" );
+  MESSAGE( "SMESH_Gen_i::ComponentDataType" );
   return CORBA::string_dup( "SMESH" );
 }
 
@@ -6190,12 +6337,12 @@ char* SMESH_Gen_i::IORToLocalPersistentID( SALOMEDS::SObject_ptr /*theSObject*/,
                                            CORBA::Boolean        /*isMultiFile*/,
                                            CORBA::Boolean        /*isASCII*/ )
 {
-  if(MYDEBUG) MESSAGE( "SMESH_Gen_i::IORToLocalPersistentID" );
+  MESSAGE( "SMESH_Gen_i::IORToLocalPersistentID" );
 
   if ( myStudyContext && strcmp( IORString, "" ) != 0 ) {
     int anId = myStudyContext->findId( IORString );
     if ( anId ) {
-      if(MYDEBUG) MESSAGE( "VSR " << anId )
+      MESSAGE( "VSR " << anId );
       char strId[ 20 ];
       sprintf( strId, "%d", anId );
       return  CORBA::string_dup( strId );
@@ -6217,7 +6364,7 @@ char* SMESH_Gen_i::LocalPersistentIDToIOR( SALOMEDS::SObject_ptr /*theSObject*/,
                                            CORBA::Boolean        /*isMultiFile*/,
                                            CORBA::Boolean        /*isASCII*/ )
 {
-  if(MYDEBUG) MESSAGE( "SMESH_Gen_i::LocalPersistentIDToIOR(): id = " << aLocalPersistentID );
+  MESSAGE( "SMESH_Gen_i::LocalPersistentIDToIOR(): id = " << aLocalPersistentID );
 
   if ( myStudyContext && strcmp( aLocalPersistentID, "" ) != 0 ) {
     int anId = atoi( aLocalPersistentID );
@@ -6248,11 +6395,12 @@ int SMESH_Gen_i::RegisterObject(CORBA::Object_ptr theObject)
  */
 //================================================================================
 
-CORBA::Long SMESH_Gen_i::GetObjectId(CORBA::Object_ptr theObject)
+CORBA::Long  SMESH_Gen_i::GetObjectId(CORBA::Object_ptr theObject)
 {
   if ( myStudyContext && !CORBA::is_nil( theObject )) {
-    string iorString = GetORB()->object_to_string( theObject );
-    return myStudyContext->findId( iorString );
+    CORBA::String_var iorString = GetORB()->object_to_string( theObject );
+    string iorStringCpp(iorString.in());
+    return myStudyContext->findId( iorStringCpp );
   }
   return 0;
 }
@@ -6326,46 +6474,6 @@ void SMESH_Gen_i::Move( const SMESH::sobject_list& what,
       useCaseBuilder->AppendTo( where, sobj );        // append to the end of list
   }
 }
-//================================================================================
-/*!
- * \brief Returns true if algorithm can be used to mesh a given geometry
- *  \param [in] theAlgoType - the algorithm type
- *  \param [in] theLibName - a name of the Plug-in library implementing the algorithm
- *  \param [in] theGeomObject - the geometry to mesh
- *  \param [in] toCheckAll - if \c True, returns \c True if all shapes are meshable,
- *         else, returns \c True if at least one shape is meshable
- *  \return CORBA::Boolean - can or can't
- */
-//================================================================================
-
-CORBA::Boolean SMESH_Gen_i::IsApplicable ( const char*           theAlgoType,
-                                           const char*           theLibName,
-                                           GEOM::GEOM_Object_ptr theGeomObject,
-                                           CORBA::Boolean        toCheckAll)
-{
-  SMESH_TRY;
-
-  std::string aPlatformLibName;
-  GenericHypothesisCreator_i* aCreator =
-    getHypothesisCreator(theAlgoType, theLibName, aPlatformLibName);
-  if (aCreator)
-  {
-    TopoDS_Shape shape = GeomObjectToShape( theGeomObject );
-    const SMESH_Algo::Features& feat = SMESH_Algo::GetFeatures( theAlgoType );
-    return shape.IsNull() || aCreator->IsApplicable( shape, toCheckAll, feat._dim );
-  }
-  else
-  {
-    return false;
-  }
-
-  SMESH_CATCH( SMESH::doNothing );
-
-#ifdef _DEBUG_
-  cout << "SMESH_Gen_i::IsApplicable(): exception in " << ( theAlgoType ? theAlgoType : "") << endl;
-#endif
-  return true;
-}
 
 //================================================================================
 /*!
@@ -6548,7 +6656,7 @@ std::vector<long> SMESH_Gen_i::_GetInside( SMESH::SMESH_IDSource_ptr meshPart,
   SMESH::SMESH_Group_var gsource = SMESH::SMESH_Group::_narrow(meshPart);
   if ( !gsource->_is_nil() ) {
     if(theElemType == SMESH::NODE) {
-      SMESH::long_array_var nodes = gsource->GetNodeIDs();
+      SMESH::smIdType_array_var nodes = gsource->GetNodeIDs();
       for ( CORBA::ULong i = 0; i < nodes->length(); ++i ) {
         if ( const SMDS_MeshNode* node = meshDS->FindNode( nodes[i] )) {
           long anId = node->GetID();
@@ -6557,7 +6665,7 @@ std::vector<long> SMESH_Gen_i::_GetInside( SMESH::SMESH_IDSource_ptr meshPart,
         }
       }
     } else if (gsource->GetType() == theElemType || theElemType == SMESH::ALL ) {
-      SMESH::long_array_var elems = gsource->GetListOfID();
+      SMESH::smIdType_array_var elems = gsource->GetListOfID();
       for ( CORBA::ULong i = 0; i < elems->length(); ++i ) {
         if ( const SMDS_MeshElement* elem = meshDS->FindElement( elems[i] )) {
           long anId = elem->GetID();
@@ -6569,7 +6677,7 @@ std::vector<long> SMESH_Gen_i::_GetInside( SMESH::SMESH_IDSource_ptr meshPart,
   }
   SMESH::SMESH_subMesh_var smsource = SMESH::SMESH_subMesh::_narrow(meshPart);
   if ( !smsource->_is_nil() ) {
-    SMESH::long_array_var elems = smsource->GetElementsByType( theElemType );
+    SMESH::smIdType_array_var elems = smsource->GetElementsByType( theElemType );
     for ( CORBA::ULong i = 0; i < elems->length(); ++i ) {
       const SMDS_MeshElement* elem = ( theElemType == SMESH::NODE ) ? meshDS->FindNode( elems[i] ) : meshDS->FindElement( elems[i] );
       if (elem) {
@@ -6582,25 +6690,44 @@ std::vector<long> SMESH_Gen_i::_GetInside( SMESH::SMESH_IDSource_ptr meshPart,
   return res;
 }
 
-//=============================================================================
+//================================================================================
 /*!
- *  SMESHEngine_factory
- *
- *  C factory, accessible with dlsym, after dlopen
+ * \brief Returns true if algorithm can be used to mesh a given geometry
+ *  \param [in] theAlgoType - the algorithm type
+ *  \param [in] theLibName - a name of the Plug-in library implementing the algorithm
+ *  \param [in] theGeomObject - the geometry to mesh
+ *  \param [in] toCheckAll - if \c True, returns \c True if all shapes are meshable,
+ *         else, returns \c True if at least one shape is meshable
+ *  \return CORBA::Boolean - can or can't
  */
-//=============================================================================
+//================================================================================
+
+#undef SMY_OWN_CATCH
+#define SMY_OWN_CATCH // prevent re-throwing SALOME::SALOME_Exception in IsApplicable()
 
-extern "C"
-{ SMESH_I_EXPORT
-  PortableServer::ObjectId* SMESHEngine_factory( CORBA::ORB_ptr            orb,
-                                                 PortableServer::POA_ptr   poa,
-                                                 PortableServer::ObjectId* contId,
-                                                 const char*               instanceName,
-                                                 const char*               interfaceName )
+CORBA::Boolean SMESH_Gen_i::IsApplicable ( const char*           theAlgoType,
+                                           const char*           theLibName,
+                                           GEOM::GEOM_Object_ptr theGeomObject,
+                                           CORBA::Boolean        toCheckAll)
+{
+  SMESH_TRY;
+
+  std::string aPlatformLibName;
+  GenericHypothesisCreator_i* aCreator =
+    getHypothesisCreator(theAlgoType, theLibName, aPlatformLibName);
+  if (aCreator)
+  {
+    TopoDS_Shape shape = GeomObjectToShape( theGeomObject );
+    const SMESH_Algo::Features& feat = SMESH_Algo::GetFeatures( theAlgoType );
+    return shape.IsNull() || aCreator->IsApplicable( shape, toCheckAll, feat._dim );
+  }
+  else
   {
-    if(MYDEBUG) MESSAGE( "PortableServer::ObjectId* SMESHEngine_factory()" );
-    if(MYDEBUG) SCRUTE(interfaceName);
-    SMESH_Gen_i* aSMESHGen = new SMESH_Gen_i(orb, poa, contId, instanceName, interfaceName);
-    return aSMESHGen->getId() ;
+    return false;
   }
+
+  SMESH_CATCH( SMESH::doNothing );
+
+  MESSAGE("SMESH_Gen_i::IsApplicable(): exception in " << ( theAlgoType ? theAlgoType : ""));
+  return true;
 }
index fb16909b89743ceb7c0822599a0afd0ef66409a9..ce5e28973d288b90b68891e5ef38c51caab76a74 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -35,6 +35,7 @@
 #include CORBA_CLIENT_HEADER(GEOM_Gen)
 #include CORBA_CLIENT_HEADER(SALOMEDS)
 #include CORBA_CLIENT_HEADER(SALOMEDS_Attributes)
+#include CORBA_CLIENT_HEADER(SALOME_ModuleCatalog)
 
 #include "SMESH_Gen.hxx"
 #include "SMESH_Mesh_i.hxx"
@@ -45,6 +46,7 @@
 #include <Utils_CorbaException.hxx>
 
 #include <GEOM_Client.hxx>
+#include <smIdType.hxx>
 
 #include <TCollection_AsciiString.hxx>
 #include <Resource_DataMapOfAsciiStringAsciiString.hxx>
@@ -93,9 +95,7 @@ private:
 // ===========================================================
 // SMESH module's engine
 // ==========================================================
-class SMESH_I_EXPORT SMESH_Gen_i:
-  public virtual POA_SMESH::SMESH_Gen,
-  public virtual Engines_Component_i
+class SMESH_I_EXPORT SMESH_Gen_i : public POA_SMESH::SMESH_Gen, public Engines_Component_i
 {
 public:
   // Get last created instance of the class
@@ -104,21 +104,30 @@ public:
   static CORBA::ORB_var GetORB() { return myOrb;}
   // Get SMESH module's POA object
   static PortableServer::POA_var GetPOA() { return myPoa;}
+  // Set Naming Service object
+  static void SetNS(SALOME_NamingService_Abstract *ns);
   // Get Naming Service object
-  static SALOME_NamingService* GetNS();
+  static SALOME_NamingService_Abstract* GetNS();
   // Get SALOME_LifeCycleCORBA object
   static SALOME_LifeCycleCORBA* GetLCC();
   // Retrieve and get GEOM engine reference
-  static GEOM::GEOM_Gen_var GetGeomEngine( bool isShaper );
   static GEOM::GEOM_Gen_var GetGeomEngine( GEOM::GEOM_Object_ptr );
+  // Retrieve Study depending on Session / Standalone mode
+  virtual GEOM::GEOM_Gen_var GetGeomEngine( bool isShaper ) = 0;
+  SALOMEDS::Study_var getStudyServant() const { return this->getStudyServantVirtual(); }
+  virtual SALOMEDS::Study_var getStudyServantVirtual() const = 0 ;
+  virtual SALOME_ModuleCatalog::ModuleCatalog_var getModuleCatalog() const = 0;
+  SALOMEDS::SObject_ptr publish(CORBA::Object_ptr     theIOR,
+                                SALOMEDS::SObject_ptr theFatherObject,
+                                const int             theTag = 0,
+                                const char*           thePixMap = 0,
+                                const bool            theSelectable = true);
   // Get object of the CORBA reference
   static PortableServer::ServantBase_var GetServant( CORBA::Object_ptr theObject );
   // Get CORBA object corresponding to the SALOMEDS::SObject
   static CORBA::Object_var SObjectToObject( SALOMEDS::SObject_ptr theSObject );
   // Get the SALOMEDS::SObject corresponding to a CORBA object
-  static SALOMEDS::SObject_ptr ObjectToSObject( CORBA::Object_ptr theObject );
-  // Get the SALOMEDS::Study from naming service
-  static SALOMEDS::Study_var getStudyServant();
+  SALOMEDS::SObject_ptr ObjectToSObject( CORBA::Object_ptr theObject );
   // Get GEOM Object corresponding to TopoDS_Shape
   static GEOM::GEOM_Object_ptr ShapeToGeomObject( const TopoDS_Shape& theShape );
   // Get TopoDS_Shape corresponding to GEOM_Object
@@ -133,7 +142,8 @@ public:
                PortableServer::POA_ptr   poa,
                PortableServer::ObjectId* contId,
                const char*               instanceName,
-               const char*               interfaceName );
+               const char*               interfaceName,
+               bool                      checkNS = true);
   // Destructor
   virtual ~SMESH_Gen_i();
 
@@ -221,6 +231,9 @@ public:
   // Create empty mesh on a shape
   SMESH::SMESH_Mesh_ptr CreateMesh( GEOM::GEOM_Object_ptr theShapeObject );
 
+  // Create empty parallel mesh on a shape
+  SMESH::SMESH_ParallelMesh_ptr CreateParallelMesh( GEOM::GEOM_Object_ptr theShapeObject );
+
   // Create empty mesh
   SMESH::SMESH_Mesh_ptr CreateEmptyMesh();
 
@@ -231,10 +244,6 @@ public:
   SMESH::mesh_array* CreateMeshesFromMED( const char* theFileName,
                                           SMESH::DriverMED_ReadStatus& theStatus );
 
-  //  Create mesh(es) and import data from MED file
-  SMESH::mesh_array* CreateMeshesFromSAUV( const char* theFileName,
-                                           SMESH::DriverMED_ReadStatus& theStatus );
-
   //  Create a mesh and import data from a STL file
   SMESH::SMESH_Mesh_ptr CreateMeshesFromSTL( const char* theFileName );
 
@@ -247,6 +256,11 @@ public:
                                              CORBA::Boolean          theMakeRequiredGroups,
                                              SMESH::ComputeError_out theError);
 
+  // Create dual mesh of a tetrahedron mesh
+  SMESH::SMESH_Mesh_ptr CreateDualMesh(SMESH::SMESH_IDSource_ptr meshPart,
+                                       const char*               meshName,
+                                       CORBA::Boolean            adapt_to_shape);
+
   // Copy a part of mesh
   SMESH::SMESH_Mesh_ptr CopyMesh(SMESH::SMESH_IDSource_ptr meshPart,
                                  const char*               meshName,
@@ -285,7 +299,7 @@ public:
    *  returns statistic of mesh elements
    * Result array of number enityties
    */
-  SMESH::long_array* Evaluate(SMESH::SMESH_Mesh_ptr theMesh,
+  SMESH::smIdType_array* Evaluate(SMESH::SMESH_Mesh_ptr theMesh,
                               GEOM::GEOM_Object_ptr theShapeObject);
 
   // Returns true if mesh contains enough data to be computed
@@ -321,12 +335,12 @@ public:
 
   // Return geometrical object the given element is built on. Publish it in study.
   GEOM::GEOM_Object_ptr GetGeometryByMeshElement( SMESH::SMESH_Mesh_ptr  theMesh,
-                                                  CORBA::Long            theElementID,
+                                                  SMESH::smIdType        theElementID,
                                                   const char*            theGeomName);
 
   // Return geometrical object the given element is built on. Don't publish it in study.
   GEOM::GEOM_Object_ptr FindGeometryByMeshElement( SMESH::SMESH_Mesh_ptr  theMesh,
-                                                   CORBA::Long            theElementID);
+                                                   SMESH::smIdType        theElementID);
 
   // Concatenate the given meshes into one mesh
   SMESH::SMESH_Mesh_ptr ConcatenateCommon(const SMESH::ListOfIDSources& meshesArray,
@@ -468,7 +482,13 @@ public:
 
   void CleanPythonTrace();
 
-  static int CountInPyDump(const TCollection_AsciiString& text);
+  int CountInPyDump(const TCollection_AsciiString& text);
+
+  SMESH::MG_ADAPT_ptr CreateMG_ADAPT();
+  SMESHHOMARD::HOMARD_Gen_ptr CreateHOMARD_ADAPT();
+  SMESH::MG_ADAPT_ptr CreateAdaptationHypothesis();
+  //SMESH::MG_ADAPT_OBJECT_ptr Adaptation( const char* adaptationType);
+  SALOME::GenericObj_ptr Adaptation( const char* adaptationType);
 
   // *****************************************
   // Internal methods
@@ -522,12 +542,12 @@ public:
                                  SMESH::SMESH_Hypothesis_ptr theHyp);
   SALOMEDS::SObject_ptr GetMeshOrSubmeshByShape (SMESH::SMESH_Mesh_ptr theMesh,
                                                  GEOM::GEOM_Object_ptr theShape);
-  static void SetName(SALOMEDS::SObject_ptr theSObject,
-                      const char*           theName,
-                      const char*           theDefaultName = 0);
+  void SetName(SALOMEDS::SObject_ptr theSObject,
+              const char*           theName,
+              const char*           theDefaultName = 0);
 
-  static void SetPixMap(SALOMEDS::SObject_ptr theSObject,
-                        const char*           thePixMap);
+  void SetPixMap(SALOMEDS::SObject_ptr theSObject, const char *thePixMap);
+  void addReference (SALOMEDS::SObject_ptr theSObject, CORBA::Object_ptr theToObject, int theTag = 0);
 
   //  Get study context
   StudyContext* GetStudyContext();
@@ -615,6 +635,7 @@ private:
                                                 const char* theLibName);
   // Create empty mesh on shape
   SMESH::SMESH_Mesh_ptr createMesh();
+  SMESH::SMESH_ParallelMesh_ptr createParallelMesh();
 
   // Check mesh icon
   bool isGeomModifIcon( SMESH::SMESH_Mesh_ptr mesh );
@@ -627,21 +648,17 @@ private:
 
   void highLightInvalid( SALOMEDS::SObject_ptr theSObject, bool isInvalid );
 
-  SMESH::mesh_array* CreateMeshesFromMEDorSAUV( const char* theFileName,
-                                                SMESH::DriverMED_ReadStatus& theStatus,
-                                                const char* theCommandNameForPython,
-                                                const char* theFileNameForPython);
-
   std::vector<long> _GetInside(SMESH::SMESH_IDSource_ptr meshPart,
                                SMESH::ElementType        ElemType,
                                const TopoDS_Shape&       Shape,
                                double*                   Tolerance = NULL);
 
-private:
+protected:
   static GEOM::GEOM_Gen_var      myGeomGen;
+  static SALOME_NamingService_Abstract*   myNS;          // Naming Service
+private:
   static CORBA::ORB_var          myOrb;         // ORB reference
   static PortableServer::POA_var myPoa;         // POA reference
-  static SALOME_NamingService*   myNS;          // Naming Service
   static SALOME_LifeCycleCORBA*  myLCC;         // Life Cycle CORBA
   static SMESH_Gen_i*            mySMESHGen;    // Point to last created instance of the class
   ::SMESH_Gen                    myGen;         // SMESH_Gen local implementation
index 8f6077ca98c4a86b6dd26d699de7461ed2801987..0d2ff3d6f633ffd8b348a75dfb729c566f4a6770 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 #include "SMESH_Mesh_i.hxx"
 #include "SMESH_subMesh_i.hxx"
 
-#include CORBA_CLIENT_HEADER(SALOME_ModuleCatalog)
-
 #include <utilities.h>
 #include <Utils_ExceptHandlers.hxx>
 #include <SALOMEDS_wrap.hxx>
 #include <SALOMEDS_Attributes_wrap.hxx>
-#include <SALOME_KernelServices.hxx>
+#include "SALOME_KernelServices.hxx"
+#include "SALOME_ModuleCatalog_impl.hxx"
 
 #include <TCollection_AsciiString.hxx>
 #include <TopoDS_Solid.hxx>
 
 #include <cctype>
 
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-#else
-static int MYDEBUG = 0;
-#endif
-
 using namespace std;
 
 //=============================================================================
@@ -163,7 +156,7 @@ long SMESH_Gen_i::GetBallElementsGroupsTag()
 
 bool SMESH_Gen_i::CanPublishInStudy(CORBA::Object_ptr theIOR)
 {
-  if(MYDEBUG) MESSAGE("CanPublishInStudy - "<<!CORBA::is_nil(getStudyServant()));
+  MESSAGE("CanPublishInStudy - "<<!CORBA::is_nil(getStudyServant()));
   
   if ( !myIsEnablePublish )
     return false;
@@ -184,7 +177,7 @@ bool SMESH_Gen_i::CanPublishInStudy(CORBA::Object_ptr theIOR)
   if( !aGroup->_is_nil() )
     return true;
 
-  if(MYDEBUG) MESSAGE("CanPublishInStudy--CANT");
+  MESSAGE("CanPublishInStudy--CANT");
   return false;
 }
 
@@ -209,15 +202,6 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::ObjectToSObject(CORBA::Object_ptr theObject)
   return aSO._retn();
 }
 
-//=======================================================================
-//function : GetStudyPtr
-//purpose  : Get study from naming service
-//=======================================================================
-SALOMEDS::Study_var SMESH_Gen_i::getStudyServant()
-{
-  return SALOMEDS::Study::_duplicate(KERNEL::getStudyServant());
-}
-
 //=======================================================================
 //function : objectToServant
 //purpose  : 
@@ -291,14 +275,14 @@ GEOM::GEOM_Object_ptr SMESH_Gen_i::GetGeomObjectByEntry( const std::string& entr
 //purpose  :
 //=======================================================================
 
-static SALOMEDS::SObject_ptr publish(CORBA::Object_ptr     theIOR,
-                                     SALOMEDS::SObject_ptr theFatherObject,
-                                     const int             theTag = 0,
-                                     const char*           thePixMap = 0,
-                                     const bool            theSelectable = true)
+SALOMEDS::SObject_ptr SMESH_Gen_i::publish(CORBA::Object_ptr     theIOR,
+                                           SALOMEDS::SObject_ptr theFatherObject,
+                                           const int             theTag,
+                                           const char*           thePixMap,
+                                           const bool            theSelectable)
 {
-  SALOMEDS::Study_var theStudy = SMESH_Gen_i::getStudyServant();
-  SALOMEDS::SObject_wrap SO = SMESH_Gen_i::ObjectToSObject( theIOR );
+  SALOMEDS::Study_var theStudy = getStudyServant();
+  SALOMEDS::SObject_wrap SO = ObjectToSObject( theIOR );
   SALOMEDS::StudyBuilder_var     aStudyBuilder = theStudy->NewBuilder();
   SALOMEDS::UseCaseBuilder_wrap useCaseBuilder = theStudy->GetUseCaseBuilder();
   bool isNewSO = false, isInUseCaseTree = false;
@@ -439,9 +423,7 @@ void SMESH_Gen_i::SetPixMap(SALOMEDS::SObject_ptr theSObject,
 //purpose  : 
 //=======================================================================
 
-static void addReference (SALOMEDS::SObject_ptr theSObject,
-                          CORBA::Object_ptr     theToObject,
-                          int                   theTag = 0)
+void SMESH_Gen_i::addReference (SALOMEDS::SObject_ptr theSObject, CORBA::Object_ptr theToObject, int theTag)
 {
   SALOMEDS::Study_var aStudy = SMESH_Gen_i::getStudyServant();
   SALOMEDS::SObject_wrap aToObjSO = SMESH_Gen_i::ObjectToSObject( theToObject );
@@ -513,7 +495,7 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishInStudy(SALOMEDS::SObject_ptr /*theSOb
     return aSO._retn();
   if ( CORBA::is_nil( theIOR ))
     return aSO._retn();
-  if(MYDEBUG) MESSAGE("PublishInStudy");
+  MESSAGE("PublishInStudy");
 
   // Publishing a mesh
   SMESH::SMESH_Mesh_var aMesh = SMESH::SMESH_Mesh::_narrow( theIOR );
@@ -540,28 +522,31 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishInStudy(SALOMEDS::SObject_ptr /*theSOb
     aMesh = aGroup->GetMesh();
     aSO = PublishGroup( aMesh, aGroup, aShapeObject, theName );
   }
-  if(MYDEBUG) MESSAGE("PublishInStudy_END");
+  MESSAGE("PublishInStudy_END");
 
   return aSO._retn();
 }
 
 //=======================================================================
 //function : PublishComponent
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 SALOMEDS::SComponent_ptr SMESH_Gen_i::PublishComponent()
 {
-  if(MYDEBUG) MESSAGE("PublishComponent");
+  MESSAGE("PublishComponent");
   if ( !myIsEnablePublish )
     return SALOMEDS::SComponent::_nil();
 
   SALOMEDS::StudyBuilder_var    aStudyBuilder  = getStudyServant()->NewBuilder();
   SALOMEDS::UseCaseBuilder_wrap useCaseBuilder = getStudyServant()->GetUseCaseBuilder();
 
-  std::string compDataType = ComponentDataType(); // SMESH module's data type
-  std::string ior = SMESH_Gen_i::GetORB()->object_to_string( SMESH_Gen::_this() ); // IOR of this SMESH engine
-
+  CORBA::String_var compDataType = ComponentDataType(); // SMESH module's data type
+  std::string ior;
+  {
+    CORBA::String_var iorString = GetORB()->object_to_string( SMESH_Gen::_this() );
+    ior = std::string( iorString.in() ); // IOR of this SMESH engine
+  }
   // Find study component which corresponds to this SMESH engine
 
   SALOMEDS::SComponent_wrap father;
@@ -570,12 +555,14 @@ SALOMEDS::SComponent_ptr SMESH_Gen_i::PublishComponent()
     SALOMEDS::SComponent_wrap f_i = citer->Value();
     CORBA::String_var ior_i;
     bool ok = f_i->ComponentIOR(ior_i.out());
-    if ( ok && compDataType == f_i->ComponentDataType() && ior == ior_i.in()) {
+    CORBA::String_var cdt(f_i->ComponentDataType());
+    if ( ok && strcmp( compDataType.in(), cdt.in() ) == 0 && ior == ior_i.in())
+    {
       father = f_i;
       break;
     }
   }
-  
+
   if ( !CORBA::is_nil( father ) ) {
     // check that the component is added to the use case browser
     if ( !useCaseBuilder->IsUseCaseNode( father ) ) {
@@ -587,19 +574,18 @@ SALOMEDS::SComponent_ptr SMESH_Gen_i::PublishComponent()
 
   // If component for this SMESH engine does not exist in the study, create it
 
-  SALOME_ModuleCatalog::ModuleCatalog_var aCat =
-    SALOME_ModuleCatalog::ModuleCatalog::_narrow( GetNS()->Resolve("/Kernel/ModulCatalog") );
+  SALOME_ModuleCatalog::ModuleCatalog_var aCat = this->getModuleCatalog();
   if ( CORBA::is_nil( aCat ) )
     return father._retn();
 
-  SALOME_ModuleCatalog::Acomponent_var aComp = aCat->GetComponent( compDataType.c_str() );
+  SALOME_ModuleCatalog::Acomponent_var aComp = aCat->GetComponent( compDataType.in() );
   if ( CORBA::is_nil( aComp ) )
     return father._retn();
 
   SALOMEDS::GenericAttribute_wrap anAttr;
   SALOMEDS::AttributePixMap_wrap  aPixmap;
 
-  father  = aStudyBuilder->NewComponent( compDataType.c_str() );
+  father  = aStudyBuilder->NewComponent( compDataType.in() );
   aStudyBuilder->DefineComponentInstance( father, SMESH_Gen::_this() );
   anAttr  = aStudyBuilder->FindOrCreateAttribute( father, "AttributePixMap" );
   aPixmap = anAttr;
@@ -610,7 +596,7 @@ SALOMEDS::SComponent_ptr SMESH_Gen_i::PublishComponent()
   // (to support tree representation customization and drag-n-drop)
   useCaseBuilder->SetRootCurrent();
   useCaseBuilder->Append( father ); // component object is added as the top level item
-  if(MYDEBUG) MESSAGE("PublishComponent--END");
+  MESSAGE("PublishComponent--END");
 
   return father._retn();
 }
@@ -627,7 +613,7 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishMesh (SMESH::SMESH_Mesh_ptr theMesh,
     return SALOMEDS::SObject::_nil();
   if ( CORBA::is_nil( theMesh ))
     return SALOMEDS::SObject::_nil();
-  if(MYDEBUG) MESSAGE("PublishMesh--IN");
+  MESSAGE("PublishMesh--IN");
 
   // find or publish a mesh
 
@@ -698,7 +684,7 @@ SALOMEDS::SObject_ptr SMESH_Gen_i::PublishMesh (SMESH::SMESH_Mesh_ptr theMesh,
     }
   }
 
-  if(MYDEBUG) MESSAGE("PublishMesh_END");
+  MESSAGE("PublishMesh_END");
   return aMeshSO._retn();
 }
 
@@ -908,7 +894,7 @@ SALOMEDS::SObject_ptr
 SMESH_Gen_i::PublishHypothesis (SMESH::SMESH_Hypothesis_ptr theHyp,
                                 const char*                 theName)
 {
-  if(MYDEBUG) MESSAGE("PublishHypothesis");
+  MESSAGE("PublishHypothesis");
   if ( !myIsEnablePublish )
     return SALOMEDS::SObject::_nil();
   if (theHyp->_is_nil())
@@ -943,7 +929,7 @@ SMESH_Gen_i::PublishHypothesis (SMESH::SMESH_Hypothesis_ptr theHyp,
 
   SetName( aHypSO, theName, hypType.in() );
 
-  if(MYDEBUG) MESSAGE("PublishHypothesis--END")
+  MESSAGE("PublishHypothesis--END");
   return aHypSO._retn();
 }
 
@@ -1001,7 +987,7 @@ void SMESH_Gen_i::UpdateIcons( SMESH::SMESH_Mesh_ptr theMesh )
       {
         if ( isGroupOnFilter ) // GetTypes() can be very long on GroupOnFilter!
         {
-          SMESH::long_array_var nbByType = mesh_i->GetNbElementsByType();
+          SMESH::smIdType_array_var nbByType = mesh_i->GetNbElementsByType();
           isEmpty = ( nbByType[ grp->GetType() ] == 0 );
         }
         else
@@ -1105,7 +1091,7 @@ SALOMEDS::SObject_ptr
 SMESH_Gen_i::GetMeshOrSubmeshByShape (SMESH::SMESH_Mesh_ptr theMesh,
                                       GEOM::GEOM_Object_ptr theShape)
 {
-  if(MYDEBUG) MESSAGE("GetMeshOrSubmeshByShape")
+  MESSAGE("GetMeshOrSubmeshByShape");
   SALOMEDS::SObject_wrap aMeshOrSubMesh;
   if (theMesh->_is_nil() || ( theShape->_is_nil() && theMesh->HasShapeToMesh()))
     return aMeshOrSubMesh._retn();
@@ -1129,7 +1115,7 @@ SMESH_Gen_i::GetMeshOrSubmeshByShape (SMESH::SMESH_Mesh_ptr theMesh,
         aMeshOrSubMesh = ObjectToSObject( aSubMesh );
     }
   }
-  if(MYDEBUG) MESSAGE("GetMeshOrSubmeshByShape--END")
+  MESSAGE("GetMeshOrSubmeshByShape--END");
   return aMeshOrSubMesh._retn();
 }
 
@@ -1142,7 +1128,7 @@ bool SMESH_Gen_i::AddHypothesisToShape(SMESH::SMESH_Mesh_ptr       theMesh,
                                        GEOM::GEOM_Object_ptr       theShape,
                                        SMESH::SMESH_Hypothesis_ptr theHyp)
 {
-  if(MYDEBUG) MESSAGE("AddHypothesisToShape")
+  MESSAGE("AddHypothesisToShape");
   if (theMesh->_is_nil() ||
       theHyp->_is_nil() || (theShape->_is_nil()
                             && theMesh->HasShapeToMesh()) )
@@ -1183,7 +1169,7 @@ bool SMESH_Gen_i::AddHypothesisToShape(SMESH::SMESH_Mesh_ptr       theMesh,
 
   addReference( AHR, theHyp );
 
-  if(MYDEBUG) MESSAGE("AddHypothesisToShape--END")
+  MESSAGE("AddHypothesisToShape--END");
   return true;
 }
 
index d3fbdc742e35463c1c63c3d47637068344d8ee2f..ddc625907d15db26e683a696a317519ef81dec4d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -43,8 +43,6 @@
 
 #include "utilities.h"
 
-using namespace SMESH;
-
 //=============================================================================
 /*!
  *  
@@ -158,7 +156,7 @@ void SMESH_GroupBase_i::SetName( const char* theName )
     aGen->SetName( anSO, theName );
 
     // Update Python script
-    TPythonDump() <<  anSO << ".SetName( '" << theName << "' )";
+    SMESH::TPythonDump() <<  anSO << ".SetName( '" << theName << "' )";
   }
 }
 
@@ -209,7 +207,7 @@ SMESH::ElementType SMESH_GroupBase_i::GetType()
  */
 //=============================================================================
 
-CORBA::Long SMESH_GroupBase_i::Size()
+SMESH::smIdType SMESH_GroupBase_i::Size()
 {
   if ( myPreMeshInfo )
     return GetType() == SMESH::NODE ? myPreMeshInfo->NbNodes() : myPreMeshInfo->NbElements();
@@ -264,7 +262,7 @@ void SMESH_Group_i::Clear()
     myPreMeshInfo->FullLoadFromFile();
 
   // Update Python script
-  TPythonDump() << SMESH::SMESH_Group_var(_this()) << ".Clear()";
+  SMESH::TPythonDump() << SMESH::SMESH_Group_var(_this()) << ".Clear()";
 
   // Clear the group
   SMESHDS_Group* aGroupDS = dynamic_cast<SMESHDS_Group*>( GetGroupDS() );
@@ -281,7 +279,7 @@ void SMESH_Group_i::Clear()
  */
 //=============================================================================
 
-CORBA::Boolean SMESH_GroupBase_i::Contains( CORBA::Long theID )
+CORBA::Boolean SMESH_GroupBase_i::Contains( SMESH::smIdType theID )
 {
   if ( myPreMeshInfo )
     myPreMeshInfo->FullLoadFromFile();
@@ -298,13 +296,13 @@ CORBA::Boolean SMESH_GroupBase_i::Contains( CORBA::Long theID )
  */
 //=============================================================================
 
-CORBA::Long SMESH_Group_i::Add( const SMESH::long_array& theIDs )
+SMESH::smIdType  SMESH_Group_i::Add( const SMESH::smIdType_array& theIDs )
 {
   if ( myPreMeshInfo )
     myPreMeshInfo->FullLoadFromFile();
 
   // Update Python script
-  TPythonDump() << "nbAdd = " << SMESH::SMESH_Group_var(_this()) << ".Add( " << theIDs << " )";
+  SMESH::TPythonDump() << "nbAdd = " << SMESH::SMESH_Group_var(_this()) << ".Add( " << theIDs << " )";
 
   // Add elements to the group
   SMESHDS_Group* aGroupDS = dynamic_cast<SMESHDS_Group*>( GetGroupDS() );
@@ -329,13 +327,13 @@ CORBA::Long SMESH_Group_i::Add( const SMESH::long_array& theIDs )
  */
 //=============================================================================
 
-CORBA::Long SMESH_Group_i::Remove( const SMESH::long_array& theIDs )
+SMESH::smIdType  SMESH_Group_i::Remove( const SMESH::smIdType_array& theIDs )
 {
   if ( myPreMeshInfo )
     myPreMeshInfo->FullLoadFromFile();
 
   // Update Python script
-  TPythonDump() << "nbDel = " << SMESH::SMESH_Group_var(_this())
+  SMESH::TPythonDump() << "nbDel = " << SMESH::SMESH_Group_var(_this())
                 << ".Remove( " << theIDs << " )";
 
   // Remove elements from the group
@@ -361,13 +359,13 @@ CORBA::Long SMESH_Group_i::Remove( const SMESH::long_array& theIDs )
  */
 //=============================================================================
 
-typedef bool (SMESHDS_Group::*TFunChangeGroup)(const int);
+typedef bool (SMESHDS_Group::*TFunChangeGroup)(const smIdType);
 
 CORBA::Long 
-ChangeByPredicate( SMESH::Predicate_i* thePredicate,
-                   SMESHDS_GroupBase*  theGroupBase,
-                   NotifyerAndWaiter*  theGroupImpl,
-                   TFunChangeGroup     theFun)
+ChangeByPredicate( SMESH::Predicate_i*       thePredicate,
+                   SMESHDS_GroupBase*        theGroupBase,
+                   SMESH::NotifyerAndWaiter* theGroupImpl,
+                   TFunChangeGroup           theFun)
 {
   CORBA::Long aNb = 0;
   if(SMESHDS_Group* aGroupDS = dynamic_cast<SMESHDS_Group*>(theGroupBase)){
@@ -386,7 +384,7 @@ ChangeByPredicate( SMESH::Predicate_i* thePredicate,
   return aNb;
 }
 
-CORBA::Long 
+SMESH::smIdType  
 SMESH_Group_i::
 AddByPredicate( SMESH::Predicate_ptr thePredicate )
 {
@@ -394,14 +392,14 @@ AddByPredicate( SMESH::Predicate_ptr thePredicate )
     myPreMeshInfo->FullLoadFromFile();
 
   if(SMESH::Predicate_i* aPredicate = SMESH::GetPredicate(thePredicate)){
-    TPythonDump() << SMESH::SMESH_Group_var(_this())
-                  << ".AddByPredicate( " << aPredicate << " )";
+    SMESH::TPythonDump() << SMESH::SMESH_Group_var(_this())
+                         << ".AddByPredicate( " << aPredicate << " )";
     return ChangeByPredicate( aPredicate, GetGroupDS(), this, &SMESHDS_Group::Add );
   }
   return 0;
 }
 
-CORBA::Long 
+SMESH::smIdType  
 SMESH_Group_i::
 RemoveByPredicate( SMESH::Predicate_ptr thePredicate )
 {
@@ -409,19 +407,19 @@ RemoveByPredicate( SMESH::Predicate_ptr thePredicate )
     myPreMeshInfo->FullLoadFromFile();
 
   if(SMESH::Predicate_i* aPredicate = SMESH::GetPredicate(thePredicate)){
-    TPythonDump() << SMESH::SMESH_Group_var(_this())
-                  << ".RemoveByPredicate( " << aPredicate << " )";
+    SMESH::TPythonDump() << SMESH::SMESH_Group_var(_this())
+                         << ".RemoveByPredicate( " << aPredicate << " )";
     return ChangeByPredicate(aPredicate,GetGroupDS(),this, &SMESHDS_Group::Remove);
   }
   return 0;
 }
 
-CORBA::Long SMESH_Group_i::AddFrom( SMESH::SMESH_IDSource_ptr theSource )
+SMESH::smIdType  SMESH_Group_i::AddFrom( SMESH::SMESH_IDSource_ptr theSource )
 {
   if ( myPreMeshInfo )
     myPreMeshInfo->FullLoadFromFile();
 
-  TPythonDump pd;
+  SMESH::TPythonDump pd;
   long prevNb = Size();
   SMESHDS_Group* aGroupDS = dynamic_cast<SMESHDS_Group*>( GetGroupDS() );
   if (aGroupDS) {
@@ -441,11 +439,11 @@ CORBA::Long SMESH_Group_i::AddFrom( SMESH::SMESH_IDSource_ptr theSource )
 
 //=============================================================================
 /*!
- *
+ * Return ID of theIndex-th group item
  */
 //=============================================================================
 
-CORBA::Long SMESH_GroupBase_i::GetID( CORBA::Long theIndex )
+SMESH::smIdType  SMESH_GroupBase_i::GetID( SMESH::smIdType theIndex )
 {
   if ( myPreMeshInfo )
     myPreMeshInfo->FullLoadFromFile();
@@ -463,19 +461,19 @@ CORBA::Long SMESH_GroupBase_i::GetID( CORBA::Long theIndex )
  */
 //=============================================================================
 
-SMESH::long_array* SMESH_GroupBase_i::GetListOfID()
+SMESH::smIdType_array* SMESH_GroupBase_i::GetListOfID()
 {
   if ( myPreMeshInfo )
     myPreMeshInfo->FullLoadFromFile();
 
-  SMESH::long_array_var aRes = new SMESH::long_array();
+  SMESH::smIdType_array_var aRes = new SMESH::smIdType_array();
   SMESHDS_GroupBase* aGroupDS = GetGroupDS();
   if (aGroupDS)
   {
-    int aSize = aGroupDS->Extent();
+    smIdType aSize = aGroupDS->Extent();
     aRes->length(aSize);
     SMDS_ElemIteratorPtr it = aGroupDS->GetElements();
-    for (int i = 0; it->more(); i++)
+    for (::smIdType i = 0; it->more(); i++)
       aRes[i] = it->next()->GetID();
 
     if ( 0 < aSize && aSize < 100 ) // for comfortable testing ;)
@@ -509,7 +507,7 @@ namespace
  */
 //================================================================================
 
-CORBA::Long SMESH_GroupBase_i::GetNumberOfNodes()
+SMESH::smIdType  SMESH_GroupBase_i::GetNumberOfNodes()
 {
   if ( GetType() == SMESH::NODE )
     return Size();
@@ -553,7 +551,7 @@ CORBA::Boolean SMESH_GroupBase_i::IsNodeInfoAvailable()
  */
 //================================================================================
 
-SMESH::long_array* SMESH_GroupBase_i::GetNodeIDs()
+SMESH::smIdType_array* SMESH_GroupBase_i::GetNodeIDs()
 {
   if ( GetType() == SMESH::NODE )
     return GetListOfID();
@@ -561,7 +559,7 @@ SMESH::long_array* SMESH_GroupBase_i::GetNodeIDs()
   if ( myPreMeshInfo )
     myPreMeshInfo->FullLoadFromFile();
 
-  SMESH::long_array_var aRes = new SMESH::long_array();
+  SMESH::smIdType_array_var aRes = new SMESH::smIdType_array();
   if ( SMESHDS_GroupBase* g = GetGroupDS())
   {
     std::set<const SMDS_MeshNode* > nodes;
@@ -639,9 +637,9 @@ void SMESH_GroupBase_i::SetColor(const SALOMEDS::Color& color)
     if ( oldColor != aQColor )
     {
       aGroupDS->SetColor(aQColor);
-      TPythonDump()<< SMESH::SMESH_GroupBase_var(_this())
-                   << ".SetColor( SALOMEDS.Color( "
-                   <<color.R<<", "<<color.G<<", "<<color.B<<" ))";
+      SMESH::TPythonDump()<< SMESH::SMESH_GroupBase_var(_this())
+                          << ".SetColor( SALOMEDS.Color( "
+                          <<color.R<<", "<<color.G<<", "<<color.B<<" ))";
     }
   }
 }
@@ -651,7 +649,7 @@ void SMESH_GroupBase_i::SetColor(const SALOMEDS::Color& color)
  *
  */
 //=============================================================================
-CORBA::Long SMESH_GroupBase_i::GetColorNumber()
+CORBA::Long  SMESH_GroupBase_i::GetColorNumber()
 {
   SMESHDS_GroupBase* aGroupDS = GetGroupDS();
   if (aGroupDS)
@@ -671,7 +669,7 @@ void SMESH_GroupBase_i::SetColorNumber(CORBA::Long color)
   if (aGroupDS)
   {
     aGroupDS->SetColorGroup(color);
-    TPythonDump()<<SMESH::SMESH_GroupBase_var(_this())<<".SetColorNumber( "<<color<<" )";
+    SMESH::TPythonDump()<<SMESH::SMESH_GroupBase_var(_this())<<".SetColorNumber( "<<color<<" )";
   }
   return ;
 }
@@ -684,12 +682,12 @@ void SMESH_GroupBase_i::SetColorNumber(CORBA::Long color)
  */
 //=============================================================================
 
-SMESH::long_array* SMESH_GroupBase_i::GetMeshInfo()
+SMESH::smIdType_array* SMESH_GroupBase_i::GetMeshInfo()
 {
   if ( myPreMeshInfo )
     return myPreMeshInfo->GetMeshInfo();
 
-  SMESH::long_array_var aRes = new SMESH::long_array();
+  SMESH::smIdType_array_var aRes = new SMESH::smIdType_array();
   aRes->length(SMESH::Entity_Last);
   for (int i = SMESH::Entity_Node; i < SMESH::Entity_Last; i++)
     aRes[i] = 0;
@@ -712,9 +710,9 @@ SMESH::long_array* SMESH_GroupBase_i::GetMeshInfo()
  */
 //=============================================================================
 
-SMESH::long_array* SMESH_GroupBase_i::GetNbElementsByType()
+SMESH::smIdType_array* SMESH_GroupBase_i::GetNbElementsByType()
 {
-  SMESH::long_array_var aRes = new SMESH::long_array();
+  SMESH::smIdType_array_var aRes = new SMESH::smIdType_array();
   aRes->length(SMESH::NB_ELEMENT_TYPES);
   for (int i = 0; i < SMESH::NB_ELEMENT_TYPES; i++)
     aRes[ i ] = 0;
@@ -732,7 +730,7 @@ SMESH::long_array* SMESH_GroupBase_i::GetNbElementsByType()
 //purpose  : Return ids of members
 //=======================================================================
 
-SMESH::long_array* SMESH_GroupBase_i::GetIDs()
+SMESH::smIdType_array* SMESH_GroupBase_i::GetIDs()
 {
   return GetListOfID();
 }
@@ -844,7 +842,7 @@ void SMESH_GroupOnFilter_i::SetFilter(SMESH::Filter_ptr theFilter)
   GetMeshServant()->GetGen()->HighLightInvalid( me, false );
 
 
-  TPythonDump()<< me <<".SetFilter( "<< theFilter <<" )";
+  SMESH::TPythonDump()<< me <<".SetFilter( "<< theFilter <<" )";
 }
 
 //================================================================================
@@ -856,7 +854,7 @@ void SMESH_GroupOnFilter_i::SetFilter(SMESH::Filter_ptr theFilter)
 SMESH::Filter_ptr SMESH_GroupOnFilter_i::GetFilter()
 {
   SMESH::Filter_var f = myFilter;
-  TPythonDump() << f << " = " << SMESH::SMESH_GroupOnFilter_var(_this()) << ".GetFilter()";
+  SMESH::TPythonDump() << f << " = " << SMESH::SMESH_GroupOnFilter_var(_this()) << ".GetFilter()";
   return f._retn();
 }
 
@@ -893,12 +891,12 @@ bool SMESH_GroupOnFilter_i::IsMeshInfoCorrect()
 //purpose  : Return ids of members
 //=======================================================================
 
-SMESH::long_array* SMESH_GroupOnFilter_i::GetListOfID()
+SMESH::smIdType_array* SMESH_GroupOnFilter_i::GetListOfID()
 {
   if ( myPreMeshInfo )
     myPreMeshInfo->FullLoadFromFile();
 
-  SMESH::long_array_var aRes = new SMESH::long_array();
+  SMESH::smIdType_array_var aRes = new SMESH::smIdType_array();
   SMESHDS_GroupBase* aGroupDS = GetGroupDS();
   if ( SMESHDS_GroupOnFilter* grDS = dynamic_cast< SMESHDS_GroupOnFilter*>( GetGroupDS() ))
   {
@@ -921,12 +919,12 @@ SMESH::long_array* SMESH_GroupOnFilter_i::GetListOfID()
  */
 //=============================================================================
 
-SMESH::long_array* SMESH_GroupOnFilter_i::GetMeshInfo()
+SMESH::smIdType_array* SMESH_GroupOnFilter_i::GetMeshInfo()
 {
   if ( myPreMeshInfo )
     return myPreMeshInfo->GetMeshInfo();
 
-  SMESH::long_array_var aRes = new SMESH::long_array();
+  SMESH::smIdType_array_var aRes = new SMESH::smIdType_array();
   aRes->length(SMESH::Entity_Last);
   for (int i = SMESH::Entity_Node; i < SMESH::Entity_Last; i++)
     aRes[i] = 0;
@@ -938,7 +936,7 @@ SMESH::long_array* SMESH_GroupOnFilter_i::GetMeshInfo()
 
     if ( g->GetType() != SMDSAbs_Node )
     {
-      std::vector< int > nbElems = static_cast< SMESHDS_GroupOnFilter* >( g )->GetMeshInfo();
+      std::vector< smIdType > nbElems = static_cast< SMESHDS_GroupOnFilter* >( g )->GetMeshInfo();
       for ( size_t i = SMESH::Entity_Node; i < SMESH::Entity_Last; i++)
         if ( i < nbElems.size() )
           aRes[i] = nbElems[ i ];
@@ -1039,7 +1037,7 @@ SMESH::Filter_ptr SMESH_GroupOnFilter_i::StringToFilter(const std::string& thePe
   }
 
   // create a filter
-  TPythonDump pd;
+  SMESH::TPythonDump pd;
   SMESH::FilterManager_i* aFilterMgr = new SMESH::FilterManager_i();
   filter = aFilterMgr->CreateFilter();
   filter->SetCriteria( criteria.inout() );
index 92a34a24806afec599061acee35cf212b3bb071b..bea575605986455f7b4e9270b49e10845e1ede96 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -61,13 +61,13 @@ class SMESH_I_EXPORT SMESH_GroupBase_i:
   void SetName(const char* name);
   char* GetName();
   SMESH::ElementType GetType();
-  CORBA::Long Size();
+  SMESH::smIdType Size();
   CORBA::Boolean IsEmpty();
-  CORBA::Boolean Contains(CORBA::Long elem_id);
-  CORBA::Long GetID(CORBA::Long elem_index);
-  SMESH::long_array* GetListOfID();
-  SMESH::long_array* GetNodeIDs();
-  CORBA::Long GetNumberOfNodes();
+  CORBA::Boolean Contains(SMESH::smIdType elem_id);
+  SMESH::smIdType GetID(SMESH::smIdType elem_index);
+  SMESH::smIdType_array* GetListOfID();
+  SMESH::smIdType_array* GetNodeIDs();
+  SMESH::smIdType GetNumberOfNodes();
   CORBA::Boolean IsNodeInfoAvailable(); // for gui
 
   virtual SMESH::SMESH_Mesh_ptr GetMesh();
@@ -77,15 +77,15 @@ class SMESH_I_EXPORT SMESH_GroupBase_i:
    * Result array of number of elements per \a EntityType
    * Inherited from SMESH_IDSource
    */
-  virtual SMESH::long_array* GetMeshInfo();
+  virtual SMESH::smIdType_array* GetMeshInfo();
   /*!
    * Returns number of mesh elements of each \a ElementType
    */
-  virtual SMESH::long_array* GetNbElementsByType();
+  virtual SMESH::smIdType_array* GetNbElementsByType();
   /*!
    * Returns a sequence of all element IDs
    */
-  virtual SMESH::long_array* GetIDs();
+  virtual SMESH::smIdType_array* GetIDs();
   /*!
    * Returns types of elements it contains
    * Inherited from SMESH_IDSource interface
@@ -109,7 +109,7 @@ class SMESH_I_EXPORT SMESH_GroupBase_i:
 
 
   // Internal C++ interface
-  int GetLocalID() const { return myLocalID; }
+  int GetLocalID() const { return myLocalID; } // return group persistent ID
   SMESH_Mesh_i* GetMeshServant() const { return myMeshServant; }
   SMESH_Group* GetSmeshGroup() const;
   SMESHDS_GroupBase* GetGroupDS() const;
@@ -150,13 +150,13 @@ class SMESH_I_EXPORT SMESH_Group_i:
                  const int               theLocalID );
   // CORBA interface implementation
   void Clear();
-  CORBA::Long Add( const SMESH::long_array& theIDs );
-  CORBA::Long Remove( const SMESH::long_array& theIDs );
+  SMESH::smIdType Add( const SMESH::smIdType_array& theIDs );
+  SMESH::smIdType Remove( const SMESH::smIdType_array& theIDs );
 
-  CORBA::Long AddByPredicate( SMESH::Predicate_ptr thePredicate );
-  CORBA::Long RemoveByPredicate( SMESH::Predicate_ptr thePredicate );
+  SMESH::smIdType AddByPredicate( SMESH::Predicate_ptr thePredicate );
+  SMESH::smIdType RemoveByPredicate( SMESH::Predicate_ptr thePredicate );
 
-  CORBA::Long AddFrom( SMESH::SMESH_IDSource_ptr theSource );
+  SMESH::smIdType AddFrom( SMESH::SMESH_IDSource_ptr theSource );
 };
 
 // =========================
@@ -199,8 +199,8 @@ class SMESH_I_EXPORT SMESH_GroupOnFilter_i:
   void SetFilter(SMESH::Filter_ptr theFilter);
   SMESH::Filter_ptr GetFilter();
   virtual CORBA::Boolean IsUpToDate();
-  virtual SMESH::long_array* GetListOfID();
-  virtual SMESH::long_array* GetMeshInfo();
+  virtual SMESH::smIdType_array* GetListOfID();
+  virtual SMESH::smIdType_array* GetMeshInfo();
   //! @return false in two cases: 1) if mesh not loaded and GetMeshInfo() returns
   //! incorrect information 2) mesh loaded but group contents is not computed.
   virtual bool IsMeshInfoCorrect();
diff --git a/src/SMESH_I/SMESH_Homard_i.cxx b/src/SMESH_I/SMESH_Homard_i.cxx
new file mode 100644 (file)
index 0000000..293507c
--- /dev/null
@@ -0,0 +1,2848 @@
+// Copyright (C) 2011-2024  CEA, EDF
+//
+// 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 "SMESH_Homard_i.hxx"
+#include "SMESH_Homard.hxx"
+
+#include "SMESH_Gen_i.hxx"
+#include "SMESH_PythonDump.hxx"
+
+#include "SMESH_File.hxx"
+
+#include "utilities.h"
+#include "Basics_Utils.hxx"
+#include "Basics_DirUtils.hxx"
+#include "Utils_SINGLETON.hxx"
+#include "Utils_CorbaException.hxx"
+#include "SALOMEDS_Tool.hxx"
+#include "SALOME_LifeCycleCORBA.hxx"
+#include "SALOMEconfig.h"
+
+// Have to be included before std headers
+#include <Python.h>
+#include <structmember.h>
+
+#include <vector>
+#include <cmath>
+#include <cstdlib>
+#include <stdlib.h>
+#include <sys/stat.h>
+#include <algorithm>
+
+#include <med.h>
+
+#ifdef WIN32
+#include <direct.h>
+#else
+#include <dirent.h>
+#endif
+
+#include <string>
+#include <cstring>
+#include <iostream>
+#include <fstream>
+#include <iomanip>
+#include <set>
+#include <vector>
+#include <stdio.h>
+
+// C'est le ASSERT de SALOMELocalTrace/utilities.h dans KERNEL
+#ifndef VERIFICATION
+#define VERIFICATION(condition) \
+        if (!(condition)){INTERRUPTION("CONDITION "<<#condition<<" NOT VERIFIED")}
+#endif /* VERIFICATION */
+
+// La gestion des repertoires
+#ifndef CHDIR
+  #ifdef WIN32
+    #define CHDIR _chdir
+  #else
+    #define CHDIR chdir
+  #endif
+#endif
+
+using namespace std;
+
+SMESHHOMARD::HOMARD_Gen_ptr SMESH_Gen_i::CreateHOMARD_ADAPT()
+{
+  if (getenv("HOMARD_ROOT_DIR") == NULL) {
+    THROW_SALOME_CORBA_EXCEPTION("HOMARD_ROOT_DIR is not defined", SALOME::INTERNAL_ERROR);
+  }
+  else {
+    std::string homard_exec = getenv("HOMARD_ROOT_DIR");
+    homard_exec += "/bin/salome/homard";
+    if (!SMESH_File(homard_exec).exists())
+      THROW_SALOME_CORBA_EXCEPTION("HOMARD module is not built", SALOME::INTERNAL_ERROR);
+  }
+  SMESHHOMARD_I::HOMARD_Gen_i* aHomardGen = new SMESHHOMARD_I::HOMARD_Gen_i();
+  SMESHHOMARD::HOMARD_Gen_var anObj = aHomardGen->_this();
+  return anObj._retn();
+}
+
+namespace SMESHHOMARD_I
+{
+
+//=============================================================================
+/*!
+ *  standard constructor
+ */
+//=============================================================================
+HOMARD_Boundary_i::HOMARD_Boundary_i()
+  : SALOME::GenericObj_i(SMESH_Gen_i::GetPOA())
+{
+  MESSAGE("Default constructor, not for use");
+  ASSERT(0);
+}
+//=============================================================================
+/*!
+ *  standard constructor
+ */
+//=============================================================================
+HOMARD_Boundary_i::HOMARD_Boundary_i(SMESHHOMARD::HOMARD_Gen_var engine)
+  : SALOME::GenericObj_i(SMESH_Gen_i::GetPOA())
+{
+  MESSAGE("HOMARD_Boundary_i");
+  _gen_i = engine;
+  myHomardBoundary = new SMESHHOMARDImpl::HOMARD_Boundary();
+  ASSERT(myHomardBoundary);
+}
+//=============================================================================
+/*!
+ *  standard destructor
+ */
+//=============================================================================
+HOMARD_Boundary_i::~HOMARD_Boundary_i()
+{
+}
+//=============================================================================
+//=============================================================================
+// Generalites
+//=============================================================================
+//=============================================================================
+void HOMARD_Boundary_i::SetName(const char* Name)
+{
+  ASSERT(myHomardBoundary);
+  myHomardBoundary->SetName(Name);
+}
+//=============================================================================
+char* HOMARD_Boundary_i::GetName()
+{
+  ASSERT(myHomardBoundary);
+  return CORBA::string_dup(myHomardBoundary->GetName().c_str());
+}
+//=============================================================================
+char* HOMARD_Boundary_i::GetDumpPython()
+{
+  ASSERT(myHomardBoundary);
+  return CORBA::string_dup(myHomardBoundary->GetDumpPython().c_str());
+}
+//=============================================================================
+//=============================================================================
+// Caracteristiques
+//=============================================================================
+//=============================================================================
+void HOMARD_Boundary_i::SetType(CORBA::Long Type)
+{
+  ASSERT(myHomardBoundary);
+  myHomardBoundary->SetType(Type);
+}
+//=============================================================================
+CORBA::Long HOMARD_Boundary_i::GetType()
+{
+  ASSERT(myHomardBoundary);
+  return  CORBA::Long(myHomardBoundary->GetType());
+}
+//=============================================================================
+void HOMARD_Boundary_i::SetMeshName(const char* MeshName)
+{
+  ASSERT(myHomardBoundary);
+  myHomardBoundary->SetMeshName(MeshName);
+}
+//=============================================================================
+char* HOMARD_Boundary_i::GetMeshName()
+{
+  ASSERT(myHomardBoundary);
+  return CORBA::string_dup(myHomardBoundary->GetMeshName().c_str());
+}
+//=============================================================================
+void HOMARD_Boundary_i::SetDataFile(const char* DataFile)
+{
+  ASSERT(myHomardBoundary);
+  myHomardBoundary->SetDataFile(DataFile);
+}
+//=============================================================================
+char* HOMARD_Boundary_i::GetDataFile()
+{
+  ASSERT(myHomardBoundary);
+  return CORBA::string_dup(myHomardBoundary->GetDataFile().c_str());
+}
+//=============================================================================
+void HOMARD_Boundary_i::SetCylinder(double X0, double X1, double X2, double X3, double X4, double X5, double X6)
+{
+  ASSERT(myHomardBoundary);
+  myHomardBoundary->SetCylinder(X0, X1, X2, X3, X4, X5, X6);
+}
+//=============================================================================
+void HOMARD_Boundary_i::SetSphere(double Xcentre, double Ycentre, double ZCentre, double rayon)
+{
+  ASSERT(myHomardBoundary);
+  myHomardBoundary->SetSphere(Xcentre, Ycentre, ZCentre, rayon);
+}
+//=============================================================================
+void HOMARD_Boundary_i::SetConeR(double Xcentre1, double Ycentre1, double Zcentre1, double Rayon1, double Xcentre2, double Ycentre2, double Zcentre2, double Rayon2)
+{
+  ASSERT(myHomardBoundary);
+  myHomardBoundary->SetConeR(Xcentre1, Ycentre1, Zcentre1, Rayon1, Xcentre2, Ycentre2, Zcentre2, Rayon2);
+}
+//=============================================================================
+void HOMARD_Boundary_i::SetConeA(double Xaxe, double Yaxe, double Zaxe, double Angle, double Xcentre, double Ycentre, double Zcentre)
+{
+  ASSERT(myHomardBoundary);
+  myHomardBoundary->SetConeA(Xaxe, Yaxe, Zaxe, Angle, Xcentre, Ycentre, Zcentre);
+}
+//=============================================================================
+void HOMARD_Boundary_i::SetTorus(double X0, double X1, double X2, double X3, double X4, double X5, double X6, double X7)
+{
+  ASSERT(myHomardBoundary);
+  myHomardBoundary->SetTorus(X0, X1, X2, X3, X4, X5, X6, X7);
+}
+//=============================================================================
+SMESHHOMARD::double_array* HOMARD_Boundary_i::GetCoords()
+{
+  ASSERT(myHomardBoundary);
+  SMESHHOMARD::double_array_var aResult = new SMESHHOMARD::double_array();
+  std::vector<double> mesCoor = myHomardBoundary->GetCoords();
+  aResult->length(mesCoor .size());
+  std::vector<double>::const_iterator it;
+  int i = 0;
+  for (it = mesCoor.begin(); it != mesCoor.end(); it++)
+    aResult[i++] = (*it);
+  return aResult._retn();
+}
+//=============================================================================
+void HOMARD_Boundary_i::SetLimit(double Xincr, double Yincr, double Zincr)
+{
+  ASSERT(myHomardBoundary);
+  myHomardBoundary->SetLimit(Xincr, Yincr, Zincr);
+}
+//=============================================================================
+SMESHHOMARD::double_array* HOMARD_Boundary_i::GetLimit()
+{
+  ASSERT(myHomardBoundary);
+  SMESHHOMARD::double_array_var aResult = new SMESHHOMARD::double_array();
+  std::vector<double> mesCoor = myHomardBoundary->GetLimit();
+  aResult->length(mesCoor .size());
+  std::vector<double>::const_iterator it;
+  int i = 0;
+  for (it = mesCoor.begin(); it != mesCoor.end(); it++)
+    aResult[i++] = (*it);
+  return aResult._retn();
+}
+//=============================================================================
+void HOMARD_Boundary_i::AddGroup(const char* Group)
+{
+  ASSERT(myHomardBoundary);
+  myHomardBoundary->AddGroup(Group);
+}
+//=============================================================================
+void HOMARD_Boundary_i::SetGroups(const SMESHHOMARD::ListGroupType& ListGroup)
+{
+  ASSERT(myHomardBoundary);
+  std::list<std::string> ListString;
+  for (unsigned int i = 0; i < ListGroup.length(); i++) {
+    ListString.push_back(std::string(ListGroup[i]));
+  }
+  myHomardBoundary->SetGroups(ListString);
+}
+//=============================================================================
+SMESHHOMARD::ListGroupType*  HOMARD_Boundary_i::GetGroups()
+{
+  ASSERT(myHomardBoundary);
+  const std::list<std::string>& ListString = myHomardBoundary->GetGroups();
+  SMESHHOMARD::ListGroupType_var aResult = new SMESHHOMARD::ListGroupType;
+  aResult->length(ListString.size());
+  std::list<std::string>::const_iterator it;
+  int i = 0;
+  for (it = ListString.begin(); it != ListString.end(); it++)
+  {
+    aResult[i++] = CORBA::string_dup((*it).c_str());
+  }
+  return aResult._retn();
+}
+
+//=============================================================================
+/*!
+ *  standard constructor
+ */
+//=============================================================================
+HOMARD_Cas_i::HOMARD_Cas_i()
+  : SALOME::GenericObj_i(SMESH_Gen_i::GetPOA())
+{
+  MESSAGE("Default constructor, not for use");
+  ASSERT(0);
+}
+
+//=============================================================================
+/*!
+ *  standard constructor
+ */
+//=============================================================================
+HOMARD_Cas_i::HOMARD_Cas_i(SMESHHOMARD::HOMARD_Gen_var engine)
+  : SALOME::GenericObj_i(SMESH_Gen_i::GetPOA())
+{
+  MESSAGE("HOMARD_Cas_i");
+  _gen_i = engine;
+  myHomardCas = new SMESHHOMARDImpl::HOMARD_Cas();
+  ASSERT(myHomardCas);
+}
+
+//=============================================================================
+/*!
+ *  standard destructor
+ */
+//=============================================================================
+HOMARD_Cas_i::~HOMARD_Cas_i()
+{
+}
+//=============================================================================
+char* HOMARD_Cas_i::GetDumpPython()
+{
+  ASSERT(myHomardCas);
+  return CORBA::string_dup(myHomardCas->GetDumpPython().c_str());
+}
+//=============================================================================
+//=============================================================================
+// Caracteristiques
+//=============================================================================
+//=============================================================================
+void HOMARD_Cas_i::SetDirName(const char* NomDir)
+{
+  ASSERT(myHomardCas);
+  int codret;
+  // A. recuperation du nom; on ne fait rien si c'est le meme
+  char* oldrep = GetDirName();
+  if (strcmp(oldrep,NomDir) == 0) return;
+  MESSAGE ("SetDirName : passage de oldrep = "<< oldrep << " a NomDir = "<<NomDir);
+  // C. Changement/creation du repertoire
+  codret = myHomardCas->SetDirName(NomDir);
+  if (codret != 0) {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    std::string text;
+    if (codret == 1)
+      text = "The directory for the case cannot be modified because some iterations are already defined.";
+    else
+      text = "The directory for the case cannot be reached.";
+    es.text = CORBA::string_dup(text.c_str());
+    throw SALOME::SALOME_Exception(es);
+  }
+
+  // D. En cas de reprise, deplacement du point de depart
+  HOMARD_Gen_i* aGenImpl = SMESH::DownCast<HOMARD_Gen_i*>(_gen_i);
+  HOMARD_Iteration_i* Iter0 = aGenImpl->GetIteration(0);
+  int state = Iter0->GetNumber();
+  if (state != 0) { // GetState()
+    MESSAGE ("etat : " << state);
+    // D.1. Nom local du repertoire de l'iteration de depart dans le repertoire actuel du cas
+    char* DirNameIter = Iter0->GetDirNameLoc();
+    MESSAGE ("SetDirName : nom actuel pour le repertoire de l iteration, DirNameIter = "<< DirNameIter);
+    // D.2. Recherche d'un nom local pour l'iteration de depart dans le futur repertoire du cas
+    char* nomDirIter = aGenImpl->CreateDirNameIter(NomDir, 0);
+    MESSAGE ("SetDirName : nom futur pour le repertoire de l iteration, nomDirIter = "<< nomDirIter);
+    // D.3. Creation du futur repertoire local pour l'iteration de depart
+    std::string nomDirIterTotal;
+    nomDirIterTotal = std::string(NomDir) + "/" + std::string(nomDirIter);
+#ifndef WIN32
+    if (mkdir(nomDirIterTotal.c_str(), S_IRWXU|S_IRGRP|S_IXGRP) != 0)
+#else
+    if (_mkdir(nomDirIterTotal.c_str()) != 0)
+#endif
+    {
+      MESSAGE ("nomDirIterTotal : " << nomDirIterTotal);
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      std::string text = "The directory for the starting iteration cannot be created.";
+      es.text = CORBA::string_dup(text.c_str());
+      throw SALOME::SALOME_Exception(es);
+    }
+    // D.4. Deplacement du contenu du repertoire
+    std::string oldnomDirIterTotal;
+    oldnomDirIterTotal = std::string(oldrep) + "/" + std::string(DirNameIter);
+    std::string commande = "mv " + std::string(oldnomDirIterTotal) + "/*" + " " + std::string(nomDirIterTotal);
+    codret = system(commande.c_str());
+    if (codret != 0)
+    {
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      std::string text = "The starting point for the case cannot be moved into the new directory.";
+      es.text = CORBA::string_dup(text.c_str());
+      throw SALOME::SALOME_Exception(es);
+    }
+    commande = "rm -rf " + std::string(oldnomDirIterTotal);
+    codret = system(commande.c_str());
+    if (codret != 0)
+    {
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      std::string text = "The starting point for the case cannot be deleted.";
+      es.text = CORBA::string_dup(text.c_str());
+      throw SALOME::SALOME_Exception(es);
+    }
+    // D.5. Memorisation du nom du repertoire de l'iteration
+    Iter0->SetDirNameLoc(nomDirIter);
+  }
+}
+//=============================================================================
+char* HOMARD_Cas_i::GetDirName()
+{
+  ASSERT(myHomardCas);
+  return CORBA::string_dup(myHomardCas->GetDirName().c_str());
+}
+//=============================================================================
+void HOMARD_Cas_i::SetBoundingBox(const SMESHHOMARD::extrema& LesExtrema)
+{
+  ASSERT(myHomardCas);
+  std::vector<double> VExtrema;
+  ASSERT(LesExtrema.length() == 10);
+  VExtrema.resize(LesExtrema.length());
+  for (int i = 0; i < (int)LesExtrema.length(); i++) {
+    VExtrema[i] = LesExtrema[i];
+  }
+  myHomardCas->SetBoundingBox(VExtrema);
+}
+//=============================================================================
+SMESHHOMARD::extrema* HOMARD_Cas_i::GetBoundingBox()
+{
+  ASSERT(myHomardCas);
+  SMESHHOMARD::extrema_var aResult = new SMESHHOMARD::extrema();
+  std::vector<double> LesExtremes = myHomardCas->GetBoundingBox();
+  ASSERT(LesExtremes.size() == 10);
+  aResult->length(10);
+  for (unsigned int i = 0; i < LesExtremes.size(); i++) {
+    aResult[i] = LesExtremes[i];
+  }
+  return aResult._retn();
+}
+
+//=============================================================================
+void HOMARD_Cas_i::AddGroup(const char* Group)
+{
+  ASSERT(myHomardCas);
+  myHomardCas->AddGroup(Group);
+}
+//=============================================================================
+void HOMARD_Cas_i::SetGroups(const SMESHHOMARD::ListGroupType& ListGroup)
+{
+  ASSERT(myHomardCas);
+  std::list<std::string> ListString;
+  for (unsigned int i = 0; i < ListGroup.length(); i++)
+  {
+    ListString.push_back(std::string(ListGroup[i]));
+  }
+  myHomardCas->SetGroups(ListString);
+}
+//=============================================================================
+SMESHHOMARD::ListGroupType* HOMARD_Cas_i::GetGroups()
+{
+  ASSERT(myHomardCas);
+  const std::list<std::string>& ListString = myHomardCas->GetGroups();
+  SMESHHOMARD::ListGroupType_var aResult = new SMESHHOMARD::ListGroupType();
+  aResult->length(ListString.size());
+  std::list<std::string>::const_iterator it;
+  int i = 0;
+  for (it = ListString.begin(); it != ListString.end(); it++) {
+    aResult[i++] = CORBA::string_dup((*it).c_str());
+  }
+  return aResult._retn();
+}
+
+//=============================================================================
+void HOMARD_Cas_i::AddBoundary(const char* BoundaryName)
+{
+  MESSAGE ("HOMARD_Cas_i::AddBoundary : BoundaryName = "<< BoundaryName);
+  const char * Group = "";
+  AddBoundaryGroup(BoundaryName, Group);
+}
+//=============================================================================
+void HOMARD_Cas_i::AddBoundaryGroup(const char* BoundaryName, const char* Group)
+{
+  MESSAGE ("HOMARD_Cas_i::AddBoundaryGroup : BoundaryName = "<< BoundaryName << ", Group = " << Group);
+  ASSERT(myHomardCas);
+  // A. Préalables
+  // A.1. Caractéristiques de la frontière à ajouter
+  SMESHHOMARD::HOMARD_Boundary_ptr myBoundary = _gen_i->GetBoundary(BoundaryName);
+  ASSERT(!CORBA::is_nil(myBoundary));
+  int BoundaryType = myBoundary->GetType();
+  MESSAGE (". BoundaryType = " << BoundaryType);
+  // A.2. La liste des frontiere+groupes
+  const std::list<std::string>& ListBoundaryGroup = myHomardCas->GetBoundaryGroup();
+  std::list<std::string>::const_iterator it;
+  // B. Controles
+  const char * boun;
+  int erreur = 0;
+  while (erreur == 0)
+  {
+    // B.1. Si on ajoute une frontière CAO, elle doit être la seule frontière
+    if (BoundaryType == -1)
+    {
+      for (it = ListBoundaryGroup.begin(); it != ListBoundaryGroup.end(); it++)
+      {
+        boun = (*it).c_str();
+        MESSAGE ("..  Frontiere enregistrée : "<< boun);
+        if (*it != BoundaryName)
+        { erreur = 1;
+          break; }
+        // On saute le nom du groupe
+        it++;
+      }
+    }
+    if (erreur != 0) { break; }
+    // B.2. Si on ajoute une frontière non CAO, il ne doit pas y avoir de frontière CAO
+    if (BoundaryType != -1)
+    {
+      for (it = ListBoundaryGroup.begin(); it != ListBoundaryGroup.end(); it++)
+      {
+        boun = (*it).c_str();
+        MESSAGE ("..  Frontiere enregistrée : "<< boun);
+        SMESHHOMARD::HOMARD_Boundary_ptr myBoundary_0 = _gen_i->GetBoundary(boun);
+        int BoundaryType_0 = myBoundary_0->GetType();
+        MESSAGE (".. BoundaryType_0 = " << BoundaryType_0);
+        if (BoundaryType_0 == -1)
+        { erreur = 2;
+          break; }
+        // On saute le nom du groupe
+        it++;
+      }
+      if (erreur != 0) { break; }
+    }
+    // B.3. Si on ajoute une frontière discrète, il ne doit pas y avoir d'autre frontière discrète
+    if (BoundaryType == 0)
+    {
+      for (it = ListBoundaryGroup.begin(); it != ListBoundaryGroup.end(); it++)
+      {
+        boun = (*it).c_str();
+        MESSAGE ("..  Frontiere enregistrée : "<< boun);
+        if (boun != BoundaryName)
+        {
+          SMESHHOMARD::HOMARD_Boundary_ptr myBoundary_0 = _gen_i->GetBoundary(boun);
+          int BoundaryType_0 = myBoundary_0->GetType();
+          MESSAGE (".. BoundaryType_0 = " << BoundaryType_0);
+          if (BoundaryType_0 == 0)
+          { erreur = 3;
+            break; }
+        }
+        // On saute le nom du groupe
+        it++;
+      }
+      if (erreur != 0) { break; }
+    }
+    // B.4. Pour une nouvelle frontiere, publication dans l'arbre d'etudes sous le cas
+    for (it = ListBoundaryGroup.begin(); it != ListBoundaryGroup.end(); it++) {
+      MESSAGE ("..  Frontiere : "<< *it);
+      // On saute le nom du groupe
+      it++;
+    }
+    // B.5. Le groupe est-il deja enregistre pour une frontiere de ce cas ?
+    for (it = ListBoundaryGroup.begin(); it != ListBoundaryGroup.end(); it++) {
+      boun = (*it).c_str();
+      it++;
+      MESSAGE ("..  Groupe enregistré : "<< *it);
+      if (*it == Group) {
+        erreur = 5;
+        break;
+      }
+    }
+    if (erreur != 0) { break; }
+    //
+    break;
+  }
+  // F. Si aucune erreur, enregistrement du couple (frontiere,groupe) dans la reference du cas
+  //    Sinon, arrêt
+  if (erreur == 0) {
+    myHomardCas->AddBoundaryGroup(BoundaryName, Group);
+  }
+  else {
+    std::stringstream ss;
+    ss << erreur;
+    std::string str = ss.str();
+    std::string texte;
+    texte = "Erreur numéro " + str + " pour la frontière à enregistrer : " + std::string(BoundaryName);
+    if (erreur == 1) { texte += "\nIl existe déjà la frontière "; }
+    else if (erreur == 2) { texte += "\nIl existe déjà la frontière CAO "; }
+    else if (erreur == 3) { texte += "\nIl existe déjà une frontière discrète : "; }
+    else if (erreur == 5) { texte += "\nLe groupe " + std::string(Group) + " est déjà enregistré pour la frontière "; }
+    texte += std::string(boun);
+    //
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    
+    if (SALOME::VerbosityActivated())
+      texte += "\nInvalid AddBoundaryGroup";
+
+    INFOS(texte);
+    es.text = CORBA::string_dup(texte.c_str());
+    throw SALOME::SALOME_Exception(es);
+  }
+}
+//=============================================================================
+SMESHHOMARD::ListBoundaryGroupType* HOMARD_Cas_i::GetBoundaryGroup()
+{
+  MESSAGE ("GetBoundaryGroup");
+  ASSERT(myHomardCas);
+  const std::list<std::string>& ListBoundaryGroup = myHomardCas->GetBoundaryGroup();
+  SMESHHOMARD::ListBoundaryGroupType_var aResult = new SMESHHOMARD::ListBoundaryGroupType();
+  aResult->length(ListBoundaryGroup.size());
+  std::list<std::string>::const_iterator it;
+  int i = 0;
+  for (it = ListBoundaryGroup.begin(); it != ListBoundaryGroup.end(); it++)
+  {
+    aResult[i++] = CORBA::string_dup((*it).c_str());
+  }
+  return aResult._retn();
+}
+//=============================================================================
+void HOMARD_Cas_i::SupprBoundaryGroup()
+{
+  MESSAGE ("SupprBoundaryGroup");
+  ASSERT(myHomardCas);
+  myHomardCas->SupprBoundaryGroup();
+}
+
+void HOMARD_Cas_i::AddIteration(const char* NomIteration)
+{
+  ASSERT(myHomardCas);
+  myHomardCas->AddIteration(NomIteration);
+}
+
+//=============================================================================
+/*!
+ *  standard constructor
+ */
+//=============================================================================
+HOMARD_Iteration_i::HOMARD_Iteration_i()
+{
+  MESSAGE("Default constructor, not for use");
+  ASSERT(0);
+}
+//=============================================================================
+/*!
+ *  standard constructor
+ */
+//=============================================================================
+HOMARD_Iteration_i::HOMARD_Iteration_i(SMESHHOMARD::HOMARD_Gen_var engine)
+{
+  MESSAGE("constructor");
+  _gen_i = engine;
+  myHomardIteration = new SMESHHOMARDImpl::HOMARD_Iteration();
+  ASSERT(myHomardIteration);
+}
+//=============================================================================
+/*!
+ *  standard destructor
+ */
+//=============================================================================
+HOMARD_Iteration_i::~HOMARD_Iteration_i()
+{
+}
+//=============================================================================
+void HOMARD_Iteration_i::SetName(const char* Name)
+{
+  ASSERT(myHomardIteration);
+  myHomardIteration->SetName(Name);
+}
+//=============================================================================
+char* HOMARD_Iteration_i::GetName()
+{
+  ASSERT(myHomardIteration);
+  return CORBA::string_dup(myHomardIteration->GetName().c_str());
+}
+//=============================================================================
+void HOMARD_Iteration_i::SetDirNameLoc(const char* NomDir)
+{
+  ASSERT(myHomardIteration);
+  myHomardIteration->SetDirNameLoc(NomDir);
+}
+//=============================================================================
+char* HOMARD_Iteration_i::GetDirNameLoc()
+{
+  ASSERT(myHomardIteration);
+  return CORBA::string_dup(myHomardIteration->GetDirNameLoc().c_str());
+}
+//=============================================================================
+char* HOMARD_Iteration_i::GetDirName()
+{
+  ASSERT(myHomardIteration);
+  SMESHHOMARD::HOMARD_Cas_ptr caseiter = _gen_i->GetCase();
+  std::string dirnamecase = caseiter->GetDirName();
+  std::string dirname = dirnamecase + "/" +  GetDirNameLoc();
+  return CORBA::string_dup(dirname.c_str());
+}
+//=============================================================================
+void HOMARD_Iteration_i::SetNumber(CORBA::Long NumIter)
+{
+  ASSERT(myHomardIteration);
+  myHomardIteration->SetNumber(NumIter);
+}
+//=============================================================================
+CORBA::Long HOMARD_Iteration_i::GetNumber()
+{
+  ASSERT(myHomardIteration);
+  return myHomardIteration->GetNumber();
+}
+//=============================================================================
+void HOMARD_Iteration_i::SetState(CORBA::Long Etat)
+{
+  ASSERT(myHomardIteration);
+  myHomardIteration->SetState(Etat);
+}
+//=============================================================================
+CORBA::Long HOMARD_Iteration_i::GetState()
+{
+  ASSERT(myHomardIteration);
+  return myHomardIteration->GetState();
+}
+//=============================================================================
+void HOMARD_Iteration_i::SetMeshName(const char* NomMesh)
+{
+  ASSERT(myHomardIteration);
+  myHomardIteration->SetMeshName(NomMesh);
+}
+//=============================================================================
+char* HOMARD_Iteration_i::GetMeshName()
+{
+  ASSERT(myHomardIteration);
+  return CORBA::string_dup(myHomardIteration->GetMeshName().c_str());
+}
+//=============================================================================
+void HOMARD_Iteration_i::SetMeshFile(const char* MeshFile)
+{
+  ASSERT(myHomardIteration);
+  myHomardIteration->SetMeshFile(MeshFile);
+}
+//=============================================================================
+char* HOMARD_Iteration_i::GetMeshFile()
+{
+  ASSERT(myHomardIteration);
+  return CORBA::string_dup(myHomardIteration->GetMeshFile().c_str());
+}
+//=============================================================================
+void HOMARD_Iteration_i::SetLogFile(const char* LogFile)
+{
+  ASSERT(myHomardIteration);
+  myHomardIteration->SetLogFile(LogFile);
+}
+//=============================================================================
+char* HOMARD_Iteration_i::GetLogFile()
+{
+  ASSERT(myHomardIteration);
+  return CORBA::string_dup(myHomardIteration->GetLogFile().c_str());
+}
+//=============================================================================
+void HOMARD_Iteration_i::SetFileInfo(const char* FileInfo)
+{
+  ASSERT(myHomardIteration);
+  myHomardIteration->SetFileInfo(FileInfo);
+}
+//=============================================================================
+char* HOMARD_Iteration_i::GetFileInfo()
+{
+  ASSERT(myHomardIteration);
+  return CORBA::string_dup(myHomardIteration->GetFileInfo().c_str());
+}
+//=============================================================================
+void HOMARD_Iteration_i::SetInfoCompute(CORBA::Long MessInfo)
+{
+  ASSERT(myHomardIteration);
+  myHomardIteration->SetInfoCompute(MessInfo);
+}
+//=============================================================================
+CORBA::Long HOMARD_Iteration_i::GetInfoCompute()
+{
+  ASSERT(myHomardIteration);
+  return myHomardIteration->GetInfoCompute();
+}
+
+//=============================================================================
+/*!
+ *  standard constructor
+ */
+//=============================================================================
+HOMARD_Gen_i::HOMARD_Gen_i() : SALOME::GenericObj_i(SMESH_Gen_i::GetPOA()),
+                               myIteration0(NULL),
+                               myIteration1(NULL),
+                               _ConfType(0),
+                               _KeepMedOUT(true),
+                               _PublishMeshOUT(false),
+                               _KeepWorkingFiles(false),
+                               _LogInFile(false),
+                               _RemoveLogOnSuccess(false),
+                               _VerboseLevel(0),
+                               _MeshNameOUT(""),
+                               _MeshFileOUT(""),
+                               _LogFile(""),
+                               _CaseOnMedFile(true),
+                               _SmeshMesh(SMESH::SMESH_Mesh::_nil()),
+                               _TmpMeshFile("")
+{
+  MESSAGE("constructor de HOMARD_Gen_i");
+  myHomard = new SMESHHOMARDImpl::HOMARD_Gen;
+}
+
+//=============================================================================
+/*!
+ *  standard destructor
+ */
+//=============================================================================
+HOMARD_Gen_i::~HOMARD_Gen_i()
+{
+  MESSAGE ("HOMARD_Gen_i::~HOMARD_Gen_i()");
+}
+
+//=============================================================================
+//=============================================================================
+// Destruction des structures identifiees par leurs noms
+//=============================================================================
+//=============================================================================
+CORBA::Long HOMARD_Gen_i::DeleteBoundary(const char* BoundaryName)
+{
+  MESSAGE ("DeleteBoundary : BoundaryName = " << BoundaryName);
+  SMESHHOMARD::HOMARD_Boundary_var myBoundary = _mesBoundarys[BoundaryName];
+  if (CORBA::is_nil(myBoundary)) {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Invalid boundary";
+    throw SALOME::SALOME_Exception(es);
+  }
+
+  // Boundaries should be deleted only after all cases deletion!!!
+
+  // comme on a un _var comme pointeur CORBA, on ne se preoccupe pas du delete
+  _mesBoundarys.erase(BoundaryName);
+
+  return 0;
+}
+
+//=============================================================================
+CORBA::Long HOMARD_Gen_i::DeleteIteration(int numIter)
+{
+  MESSAGE ("DeleteIteration : numIter = " << numIter);
+
+  if (numIter == 0) {
+    if (myIteration0 != NULL) {
+      delete myIteration0;
+      myIteration0 = NULL;
+    }
+  }
+  else {
+    if (myIteration1 != NULL) {
+      // Invalide Iteration
+      if (myIteration1->GetState() > 0) {
+        myIteration1->SetState(1);
+        if (!_KeepWorkingFiles) {
+          std::string nomDir = myIteration1->GetDirName();
+          std::string commande = "rm -rf " + nomDir;
+          if (numIter > 0 && !_KeepMedOUT) {
+            // Remove associated mesh file
+            std::string nomFichier = myIteration1->GetMeshFile();
+            commande = commande + ";rm -rf " + nomFichier;
+          }
+          MESSAGE ("commande = " << commande);
+          if ((system(commande.c_str())) != 0) {
+            SALOME::ExceptionStruct es;
+            es.type = SALOME::BAD_PARAM;
+            es.text = "The directory for the calculation cannot be cleared.";
+            throw SALOME::SALOME_Exception(es);
+          }
+        }
+      }
+
+      delete myIteration1;
+      myIteration1 = NULL;
+    }
+  }
+
+  return 0;
+}
+
+//=============================================================================
+//=============================================================================
+// Invalidation des structures identifiees par leurs noms
+//=============================================================================
+//=============================================================================
+void HOMARD_Gen_i::InvalideBoundary(const char* BoundaryName)
+{
+  MESSAGE("InvalideBoundary : BoundaryName = " << BoundaryName);
+  SMESHHOMARD::HOMARD_Boundary_var myBoundary = _mesBoundarys[BoundaryName];
+  if (CORBA::is_nil(myBoundary)) {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Invalid boundary";
+    throw SALOME::SALOME_Exception(es);
+  }
+  else {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "No change is allowed in a boundary. Ask for evolution.";
+    throw SALOME::SALOME_Exception(es);
+  }
+}
+
+//=============================================================================
+//=============================================================================
+// Association de lien entre des structures identifiees par leurs noms
+//=============================================================================
+//=============================================================================
+void HOMARD_Gen_i::AssociateCaseIter(int numIter, const char* labelIter)
+{
+  MESSAGE("AssociateCaseIter : " << numIter << ", "  << labelIter);
+
+  if (CORBA::is_nil(myCase)) {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Invalid case";
+    throw SALOME::SALOME_Exception(es);
+  }
+
+  if (numIter == 0) {
+    if (myIteration0 == NULL) {
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      es.text = "Invalid iteration";
+      throw SALOME::SALOME_Exception(es);
+    }
+
+    HOMARD_Cas_i* aCaseImpl = SMESH::DownCast<HOMARD_Cas_i*>(myCase);
+    aCaseImpl->AddIteration(myIteration0->GetName());
+  }
+  else {
+    if (myIteration1 == NULL) {
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      es.text = "Invalid iteration";
+      throw SALOME::SALOME_Exception(es);
+    }
+
+    HOMARD_Cas_i* aCaseImpl = SMESH::DownCast<HOMARD_Cas_i*>(myCase);
+    aCaseImpl->AddIteration(myIteration1->GetName());
+  }
+}
+
+//=============================================================================
+//=============================================================================
+// Recuperation des listes
+//=============================================================================
+//=============================================================================
+SMESHHOMARD::listeBoundarys* HOMARD_Gen_i::GetAllBoundarysName()
+{
+  MESSAGE("GetAllBoundarysName");
+
+  SMESHHOMARD::listeBoundarys_var ret = new SMESHHOMARD::listeBoundarys;
+  ret->length(_mesBoundarys.size());
+  std::map<std::string, SMESHHOMARD::HOMARD_Boundary_var>::const_iterator it;
+  int i = 0;
+  for (it = _mesBoundarys.begin();
+       it != _mesBoundarys.end(); it++) {
+    ret[i++] = CORBA::string_dup((*it).first.c_str());
+  }
+
+  return ret._retn();
+}
+
+//=============================================================================
+//=============================================================================
+// Recuperation des structures identifiees par leurs noms
+//=============================================================================
+//=============================================================================
+SMESHHOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::GetBoundary(const char* nomBoundary)
+{
+  SMESHHOMARD::HOMARD_Boundary_var myBoundary = _mesBoundarys[nomBoundary];
+  ASSERT(!CORBA::is_nil(myBoundary));
+  return SMESHHOMARD::HOMARD_Boundary::_duplicate(myBoundary);
+}
+//=============================================================================
+SMESHHOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::GetCase()
+{
+  ASSERT(!CORBA::is_nil(myCase));
+  return SMESHHOMARD::HOMARD_Cas::_duplicate(myCase);
+}
+//=============================================================================
+HOMARD_Iteration_i* HOMARD_Gen_i::GetIteration(CORBA::Long numIter)
+{
+  if (numIter == 0) {
+    ASSERT(myIteration0);
+    return myIteration0;
+  }
+
+  ASSERT(myIteration1);
+  return myIteration1;
+}
+
+//=============================================================================
+//=============================================================================
+// Nouvelles structures
+//=============================================================================
+//=============================================================================
+SMESHHOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::newCase()
+{
+  SMESHHOMARD::HOMARD_Gen_var engine = POA_SMESHHOMARD::HOMARD_Gen::_this();
+  HOMARD_Cas_i* aServant = new HOMARD_Cas_i(engine);
+  SMESHHOMARD::HOMARD_Cas_var aCase = SMESHHOMARD::HOMARD_Cas::_narrow(aServant->_this());
+  return aCase._retn();
+}
+//=============================================================================
+HOMARD_Iteration_i* HOMARD_Gen_i::newIteration()
+{
+  SMESHHOMARD::HOMARD_Gen_var engine = POA_SMESHHOMARD::HOMARD_Gen::_this();
+  HOMARD_Iteration_i* aServant = new HOMARD_Iteration_i(engine);
+  return aServant;
+}
+//=============================================================================
+SMESHHOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::newBoundary()
+{
+  SMESHHOMARD::HOMARD_Gen_var engine = POA_SMESHHOMARD::HOMARD_Gen::_this();
+  HOMARD_Boundary_i* aServant = new HOMARD_Boundary_i(engine);
+  SMESHHOMARD::HOMARD_Boundary_var aBoundary =
+    SMESHHOMARD::HOMARD_Boundary::_narrow(aServant->_this());
+  return aBoundary._retn();
+}
+
+//=============================================================================
+// Creation of a case
+// MeshName : name of the mesh
+// smeshMesh : correspondent mesh
+// theWorkingDir : path to working directory
+//=============================================================================
+SMESHHOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::CreateCaseOnMesh (const char* MeshName,
+                                                            SMESH::SMESH_Mesh_ptr smeshMesh,
+                                                            const char* theWorkingDir)
+{
+  INFOS("CreateCaseOnMesh");
+
+  // A. Controles
+  // A.1. Controle du nom :
+  if (!myCase->_is_nil()) {
+    DeleteCase();
+  }
+
+  // A.2. Controle du objet maillage
+  if (CORBA::is_nil(smeshMesh)) {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "The mesh object is null.";
+    throw SALOME::SALOME_Exception(es);
+  }
+  MESSAGE("CreateCaseOnMesh : smeshMesh is not nil");
+
+  // A.3. Write mesh object in a temporary file in the working directory
+  std::string aTmpMeshFile = theWorkingDir;
+  aTmpMeshFile = theWorkingDir;
+  aTmpMeshFile += std::string("/") + std::string(MeshName) + "_saved_from_SMESH";
+  _TmpMeshFile = aTmpMeshFile + ".med";
+  SMESH_File aFile (_TmpMeshFile, false);
+  for (int ii = 1; aFile.exists(); ii++) {
+    _TmpMeshFile = aTmpMeshFile + std::string("_") + std::to_string(ii) + ".med";
+    aFile = SMESH_File(_TmpMeshFile, false);
+  }
+  const char* MeshFile = _TmpMeshFile.c_str();
+  bool toOverwrite = true;
+  bool toFindOutDim = true;
+
+  // Prevent dump of ExportMED
+  {
+    SMESH::TPythonDump pDump; // do not delete this line of code
+    smeshMesh->ExportMED(MeshFile, false, -1, toOverwrite, toFindOutDim);
+  }
+
+  // A.4. Controle du fichier du maillage
+  med_idt medIdt = MEDfileOpen(MeshFile, MED_ACC_RDONLY);
+  bool existeMeshFile = medIdt >= 0;
+  if (existeMeshFile) MEDfileClose(medIdt);
+  MESSAGE("CreateCaseOnMesh : existeMeshFile = " << existeMeshFile);
+  if (!existeMeshFile) {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "The mesh file does not exist.";
+    throw SALOME::SALOME_Exception(es);
+  }
+
+  // B. Creation de l'objet cas
+  myCase = newCase();
+  _CaseOnMedFile = false;
+  _SmeshMesh = SMESH::SMESH_Mesh::_duplicate(smeshMesh);
+
+  // C. Caracteristiques du maillage
+  if (existeMeshFile) {
+    // Les valeurs extremes des coordonnées
+    //MESSAGE ("CreateCaseOnMesh : Les valeurs extremes des coordonnées");
+    std::vector<double> LesExtremes = GetBoundingBoxInMedFile(MeshFile);
+    SMESHHOMARD::extrema_var aSeq = new SMESHHOMARD::extrema();
+    if (LesExtremes.size() != 10) { return 0; }
+    aSeq->length(10);
+    for (unsigned int i = 0; i < LesExtremes.size(); i++)
+      aSeq[i] = LesExtremes[i];
+    myCase->SetBoundingBox(aSeq);
+    // Les groupes
+    //MESSAGE ("CreateCaseOnMesh : Les groupes");
+    std::set<std::string> LesGroupes = GetListeGroupesInMedFile(MeshFile);
+    SMESHHOMARD::ListGroupType_var aSeqGroupe = new SMESHHOMARD::ListGroupType;
+    aSeqGroupe->length(LesGroupes.size());
+    std::set<std::string>::const_iterator it;
+    int i = 0;
+    for (it = LesGroupes.begin(); it != LesGroupes.end(); it++)
+      aSeqGroupe[i++] = (*it).c_str();
+    myCase->SetGroups(aSeqGroupe);
+  }
+
+  // D. L'iteration initiale du cas
+  MESSAGE ("CreateCaseOnMesh : iteration initiale du cas");
+  // D.1. Recherche d'un nom : par defaut, on prend le nom du maillage correspondant.
+  // Si ce nom d'iteration existe deja, on incremente avec 0, 1, 2, etc.
+  MESSAGE("CreateCaseOnMesh : ==> NomIteration = " << MeshName);
+
+  // D.2. Creation de l'iteration 0
+  myIteration0 = newIteration();
+  myIteration0->SetName(MeshName);
+  AssociateCaseIter(0, "IterationHomard");
+
+  // D.4. Maillage correspondant
+  if (existeMeshFile) {
+    myIteration0->SetMeshFile(MeshFile);
+  }
+  myIteration0->SetMeshName(MeshName);
+  myIteration0->SetNumber(0);
+  myIteration0->SetState(0);
+
+  // Only after full initialization of Iteration0
+  myCase->SetDirName(theWorkingDir);
+
+  return SMESHHOMARD::HOMARD_Cas::_duplicate(myCase);
+}
+
+//=============================================================================
+// Creation of a case
+// MeshName : name of the mesh
+// MeshFile : med file
+// theWorkingDir : path to working directory
+//=============================================================================
+SMESHHOMARD::HOMARD_Cas_ptr HOMARD_Gen_i::CreateCase(const char* MeshName,
+                                                     const char* MeshFile,
+                                                     const char* theWorkingDir)
+{
+  INFOS("CreateCase : MeshName = " << MeshName << ", MeshFile = " << MeshFile);
+
+  // A. Controles
+  // A.1. Controle du nom :
+  if (!myCase->_is_nil()) {
+    DeleteCase();
+  }
+
+  // A.3. Controle du fichier du maillage
+  med_idt medIdt = MEDfileOpen(MeshFile, MED_ACC_RDONLY);
+  bool existeMeshFile = medIdt >= 0;
+  if (existeMeshFile) MEDfileClose(medIdt);
+  MESSAGE("CreateCase : existeMeshFile = " << existeMeshFile);
+  if (!existeMeshFile) {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "The mesh file does not exist.";
+    throw SALOME::SALOME_Exception(es);
+  }
+
+  // B. Creation de l'objet cas
+  myCase = newCase();
+  _CaseOnMedFile = true;
+
+  // C. Caracteristiques du maillage
+  if (existeMeshFile) {
+    // Les valeurs extremes des coordonnées
+    //MESSAGE ("CreateCase : Les valeurs extremes des coordonnées");
+    std::vector<double> LesExtremes = GetBoundingBoxInMedFile(MeshFile);
+    SMESHHOMARD::extrema_var aSeq = new SMESHHOMARD::extrema();
+    if (LesExtremes.size() != 10) { return 0; }
+    aSeq->length(10);
+    for (unsigned int i = 0; i < LesExtremes.size(); i++)
+      aSeq[i] = LesExtremes[i];
+    myCase->SetBoundingBox(aSeq);
+    // Les groupes
+    //MESSAGE ("CreateCase : Les groupes");
+    std::set<std::string> LesGroupes = GetListeGroupesInMedFile(MeshFile);
+    SMESHHOMARD::ListGroupType_var aSeqGroupe = new SMESHHOMARD::ListGroupType;
+    aSeqGroupe->length(LesGroupes.size());
+    std::set<std::string>::const_iterator it;
+    int i = 0;
+    for (it = LesGroupes.begin(); it != LesGroupes.end(); it++)
+      aSeqGroupe[i++] = (*it).c_str();
+    myCase->SetGroups(aSeqGroupe);
+  }
+
+  // D. L'iteration initiale du cas
+  MESSAGE ("CreateCase : iteration initiale du cas");
+  // D.1. Recherche d'un nom : par defaut, on prend le nom du maillage correspondant.
+  // Si ce nom d'iteration existe deja, on incremente avec 0, 1, 2, etc.
+  MESSAGE("CreateCas : ==> NomIteration = " << MeshName);
+
+  // D.2. Creation de l'iteration
+  myIteration0 = newIteration();
+  myIteration0->SetName(MeshName);
+  AssociateCaseIter(0, "IterationHomard");
+
+  // D.4. Maillage correspondant
+  if (existeMeshFile) {
+    myIteration0->SetMeshFile(MeshFile);
+  }
+  myIteration0->SetMeshName(MeshName);
+  myIteration0->SetNumber(0);
+  myIteration0->SetState(0);
+
+  // Only after full initialization of Iteration0
+  myCase->SetDirName(theWorkingDir);
+
+  return SMESHHOMARD::HOMARD_Cas::_duplicate(myCase);
+}
+
+//=============================================================================
+// Create Iteration1
+//=============================================================================
+HOMARD_Iteration_i* HOMARD_Gen_i::CreateIteration()
+{
+  if (myIteration0 == NULL) {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "The parent iteration is not defined.";
+    throw SALOME::SALOME_Exception(es);
+  }
+
+  if (CORBA::is_nil(myCase)) {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Invalid case context";
+    throw SALOME::SALOME_Exception(es);
+  }
+  const char* nomDirCase = myCase->GetDirName();
+
+  if (myIteration1 != NULL) {
+    DeleteIteration(1);
+  }
+
+  myIteration1 = newIteration();
+  if (myIteration1 == NULL) {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Unable to create the iteration 1";
+    throw SALOME::SALOME_Exception(es);
+  }
+
+  // Nom de l'iteration et du maillage
+  myIteration1->SetName("Iter_1");
+  myIteration1->SetMeshName("Iter_1");
+  myIteration1->SetState(1);
+  myIteration1->SetNumber(1);
+
+  int nbitercase = 1;
+  char* nomDirIter = CreateDirNameIter(nomDirCase, nbitercase);
+  myIteration1->SetDirNameLoc(nomDirIter);
+
+  // Le nom du fichier du maillage MED est indice par le nombre d'iterations du cas.
+  // Si on a une chaine unique depuis le depart, ce nombre est le meme que le
+  // numero d'iteration dans la sucession : maill.01.med, maill.02.med, etc... C'est la
+  // situation la plus frequente.
+  // Si on a plusieurs branches, donc des iterations du meme niveau d'adaptation, utiliser
+  // le nombre d'iterations du cas permet d'eviter les collisions.
+  int jaux;
+  if      (nbitercase <    100) { jaux = 2; }
+  else if (nbitercase <   1000) { jaux = 3; }
+  else if (nbitercase <  10000) { jaux = 4; }
+  else if (nbitercase < 100000) { jaux = 5; }
+  else                          { jaux = 9; }
+  std::ostringstream iaux;
+  iaux << std::setw(jaux) << std::setfill('0') << nbitercase;
+  std::stringstream MeshFile;
+  MeshFile << nomDirCase << "/maill." << iaux.str() << ".med";
+  myIteration1->SetMeshFile(MeshFile.str().c_str());
+
+  // Association avec le cas
+  std::string nomIterParent = myIteration0->GetName();
+  std::string label = "IterationHomard_" + nomIterParent;
+  AssociateCaseIter(1, label.c_str());
+
+  return myIteration1;
+}
+//=============================================================================
+SMESHHOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundary(const char* BoundaryName,
+                                                              CORBA::Long BoundaryType)
+{
+  MESSAGE ("CreateBoundary : BoundaryName  = " << BoundaryName <<
+           ", BoundaryType = " << BoundaryType);
+
+  // Controle du nom :
+  if ((_mesBoundarys).find(BoundaryName) != (_mesBoundarys).end()) {
+    MESSAGE ("CreateBoundary : la frontiere " << BoundaryName << " existe deja");
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "This boundary has already been defined";
+    throw SALOME::SALOME_Exception(es);
+  }
+
+  SMESHHOMARD::HOMARD_Boundary_var myBoundary = newBoundary();
+  myBoundary->SetName(BoundaryName);
+  myBoundary->SetType(BoundaryType);
+
+  _mesBoundarys[BoundaryName] = myBoundary;
+
+  return SMESHHOMARD::HOMARD_Boundary::_duplicate(myBoundary);
+}
+//=============================================================================
+SMESHHOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundaryCAO(const char* BoundaryName, const char* CAOFile)
+{
+  MESSAGE ("CreateBoundaryCAO : BoundaryName  = " << BoundaryName << ", CAOFile = " << CAOFile);
+  SMESHHOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, -1);
+  myBoundary->SetDataFile(CAOFile);
+
+  return SMESHHOMARD::HOMARD_Boundary::_duplicate(myBoundary);
+}
+//=============================================================================
+SMESHHOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundaryDi(const char* BoundaryName, const char* MeshName, const char* MeshFile)
+{
+  MESSAGE ("CreateBoundaryDi : BoundaryName  = " << BoundaryName << ", MeshName = " << MeshName << ", MeshFile = " << MeshFile);
+  SMESHHOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 0);
+  myBoundary->SetDataFile(MeshFile);
+  myBoundary->SetMeshName(MeshName);
+
+  return SMESHHOMARD::HOMARD_Boundary::_duplicate(myBoundary);
+}
+//=============================================================================
+SMESHHOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundaryCylinder(const char* BoundaryName,
+                                      CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre,
+                                      CORBA::Double Xaxe, CORBA::Double Yaxe, CORBA::Double Zaxe,
+                                      CORBA::Double Rayon)
+{
+  MESSAGE ("CreateBoundaryCylinder : BoundaryName  = " << BoundaryName);
+//
+  SALOME::ExceptionStruct es;
+  int error = 0;
+  if (Rayon <= 0.0)
+  { es.text = "The radius must be positive.";
+    error = 1; }
+  double daux = fabs(Xaxe) + fabs(Yaxe) + fabs(Zaxe);
+  if (daux < 0.0000001)
+  { es.text = "The axis must be a non 0 vector.";
+    error = 2; }
+  if (error != 0)
+  {
+    es.type = SALOME::BAD_PARAM;
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+//
+  SMESHHOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 1);
+  myBoundary->SetCylinder(Xcentre, Ycentre, Zcentre, Xaxe, Yaxe, Zaxe, Rayon);
+
+  return SMESHHOMARD::HOMARD_Boundary::_duplicate(myBoundary);
+}
+//=============================================================================
+SMESHHOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundarySphere(const char* BoundaryName,
+                                      CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre,
+                                      CORBA::Double Rayon)
+{
+  MESSAGE ("CreateBoundarySphere : BoundaryName  = " << BoundaryName);
+//
+  SALOME::ExceptionStruct es;
+  int error = 0;
+  if (Rayon <= 0.0)
+  { es.text = "The radius must be positive.";
+    error = 1; }
+  if (error != 0)
+  {
+    es.type = SALOME::BAD_PARAM;
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+//
+  SMESHHOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 2);
+  myBoundary->SetSphere(Xcentre, Ycentre, Zcentre, Rayon);
+
+  return SMESHHOMARD::HOMARD_Boundary::_duplicate(myBoundary);
+}
+//=============================================================================
+SMESHHOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundaryConeA(const char* BoundaryName,
+                                      CORBA::Double Xaxe, CORBA::Double Yaxe, CORBA::Double Zaxe, CORBA::Double Angle,
+                                      CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre)
+{
+  MESSAGE ("CreateBoundaryConeA : BoundaryName  = " << BoundaryName);
+//
+  SALOME::ExceptionStruct es;
+  int error = 0;
+  if (Angle <= 0.0 || Angle >= 90.0)
+  { es.text = "The angle must be included higher than 0 degree and lower than 90 degrees.";
+    error = 1; }
+  double daux = fabs(Xaxe) + fabs(Yaxe) + fabs(Zaxe);
+  if (daux < 0.0000001)
+  { es.text = "The axis must be a non 0 vector.";
+    error = 2; }
+  if (error != 0)
+  {
+    es.type = SALOME::BAD_PARAM;
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+//
+  SMESHHOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 3);
+  myBoundary->SetConeA(Xaxe, Yaxe, Zaxe, Angle, Xcentre, Ycentre, Zcentre);
+
+  return SMESHHOMARD::HOMARD_Boundary::_duplicate(myBoundary);
+}
+//=============================================================================
+SMESHHOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundaryConeR(const char* BoundaryName,
+                                      CORBA::Double Xcentre1, CORBA::Double Ycentre1, CORBA::Double Zcentre1, CORBA::Double Rayon1,
+                                      CORBA::Double Xcentre2, CORBA::Double Ycentre2, CORBA::Double Zcentre2, CORBA::Double Rayon2)
+{
+  MESSAGE ("CreateBoundaryConeR : BoundaryName  = " << BoundaryName);
+//
+  SALOME::ExceptionStruct es;
+  int error = 0;
+  if (Rayon1 < 0.0 || Rayon2 < 0.0)
+  { es.text = "The radius must be positive.";
+    error = 1; }
+  double daux = fabs(Rayon2-Rayon1);
+  if (daux < 0.0000001)
+  { es.text = "The radius must be different.";
+    error = 2; }
+  daux = fabs(Xcentre2-Xcentre1) + fabs(Ycentre2-Ycentre1) + fabs(Zcentre2-Zcentre1);
+  if (daux < 0.0000001)
+  { es.text = "The centers must be different.";
+    error = 3; }
+  if (error != 0)
+  {
+    es.type = SALOME::BAD_PARAM;
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+//
+  SMESHHOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 4);
+  myBoundary->SetConeR(Xcentre1, Ycentre1, Zcentre1, Rayon1, Xcentre2, Ycentre2, Zcentre2, Rayon2);
+
+  return SMESHHOMARD::HOMARD_Boundary::_duplicate(myBoundary);
+}
+//=============================================================================
+SMESHHOMARD::HOMARD_Boundary_ptr HOMARD_Gen_i::CreateBoundaryTorus(const char* BoundaryName,
+                                      CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre,
+                                      CORBA::Double Xaxe, CORBA::Double Yaxe, CORBA::Double Zaxe,
+                                      CORBA::Double RayonRev, CORBA::Double RayonPri)
+{
+  MESSAGE ("CreateBoundaryTorus : BoundaryName  = " << BoundaryName);
+//
+  SALOME::ExceptionStruct es;
+  int error = 0;
+  if ((RayonRev <= 0.0) || (RayonPri <= 0.0))
+  { es.text = "The radius must be positive.";
+    error = 1; }
+  double daux = fabs(Xaxe) + fabs(Yaxe) + fabs(Zaxe);
+  if (daux < 0.0000001)
+  { es.text = "The axis must be a non 0 vector.";
+    error = 2; }
+  if (error != 0)
+  {
+    es.type = SALOME::BAD_PARAM;
+    throw SALOME::SALOME_Exception(es);
+    return 0;
+  };
+//
+  SMESHHOMARD::HOMARD_Boundary_var myBoundary = CreateBoundary(BoundaryName, 5);
+  myBoundary->SetTorus(Xcentre, Ycentre, Zcentre, Xaxe, Yaxe, Zaxe, RayonRev, RayonPri);
+
+  return SMESHHOMARD::HOMARD_Boundary::_duplicate(myBoundary);
+}
+
+//=============================================================================
+//=============================================================================
+CORBA::Long HOMARD_Gen_i::Compute()
+{
+  INFOS ("Compute");
+  // A. Prealable
+  int codret = 0;
+
+  // A.0. Create Iteration 1
+  CreateIteration();
+  myIteration1->SetInfoCompute(_VerboseLevel);
+  myIteration1->SetMeshName(_MeshNameOUT.c_str());
+  myIteration1->SetMeshFile(_MeshFileOUT.c_str());
+  if (_LogInFile) myIteration1->SetLogFile(_LogFile.c_str());
+
+  // A.1. L'objet iteration
+  ASSERT(myIteration1);
+
+  // A.2. Controle de la possibilite d'agir
+  // A.2.1. Etat de l'iteration
+  int etat = myIteration1->GetState();
+  MESSAGE ("etat = " << etat);
+  // A.2.2. On ne calcule pas l'iteration initiale, ni une iteration deja calculee
+  if (etat == 2) {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "This iteration is already computed.";
+    throw SALOME::SALOME_Exception(es);
+  }
+
+  // A.3. Numero de l'iteration
+  //     siterp1 : numero de l'iteration a traiter
+  //     Si adaptation :
+  //        siter: numero de l'iteration parent, ou 0 si deja au debut mais cela ne servira pas !
+  //     Ou si information :
+  //        siter = siterp1
+  int NumeIter = myIteration1->GetNumber();
+  std::string siterp1;
+  std::stringstream saux1;
+  saux1 << NumeIter;
+  siterp1 = saux1.str();
+  if (NumeIter < 10) { siterp1 = "0" + siterp1; }
+
+  std::string siter;
+  std::stringstream saux0;
+  int iaux = max(0, NumeIter-1);
+  saux0 << iaux;
+  siter = saux0.str();
+  if (NumeIter < 11) { siter = "0" + siter; }
+
+  // A.4. Le cas
+  ASSERT(!CORBA::is_nil(myCase));
+
+  // B. Les répertoires
+  // B.1. Le répertoire courant
+  std::string nomDirWork = getenv("PWD");
+  // B.2. Le sous-répertoire de l'iteration a traiter
+  char* DirCompute = ComputeDirManagement();
+  MESSAGE(". DirCompute = " << DirCompute);
+
+  // C. Le fichier des messages
+  // C.1. Le deroulement de l'execution de HOMARD
+  std::string LogFile = myIteration1->GetLogFile();
+  if (LogFile.empty()) {
+    LogFile = DirCompute;
+    LogFile += "/Liste." + siter + ".vers." + siterp1 + ".log";
+    myIteration1->SetLogFile(LogFile.c_str());
+  }
+  MESSAGE (". LogFile = " << LogFile);
+  // C.2. Le bilan de l'analyse du maillage
+  std::string FileInfo = DirCompute;
+  FileInfo += "/apad." + siterp1 + ".bilan";
+  myIteration1->SetFileInfo(FileInfo.c_str());
+
+   // D. On passe dans le répertoire de l'iteration a calculer
+  MESSAGE (". On passe dans DirCompute = " << DirCompute);
+  CHDIR(DirCompute);
+
+  // E. Les données de l'exécution HOMARD
+  // E.1. L'objet du texte du fichier de configuration
+  SMESHHOMARDImpl::HomardDriver* myDriver = new SMESHHOMARDImpl::HomardDriver(siter, siterp1);
+  myDriver->TexteInit(DirCompute, LogFile, "English");
+
+  // E.2. Le maillage associe a l'iteration
+  const char* NomMesh = myIteration1->GetMeshName();
+  MESSAGE (". NomMesh = " << NomMesh);
+  const char* MeshFile = myIteration1->GetMeshFile();
+  MESSAGE (". MeshFile = " << MeshFile);
+
+  // E.3. Les données du traitement HOMARD
+  iaux = 1;
+  myDriver->TexteMaillageHOMARD(DirCompute, siterp1, iaux);
+  myDriver->TexteMaillage(NomMesh, MeshFile, 1);
+  codret = ComputeAdap(myDriver);
+
+  // E.4. Ajout des informations liees a l'eventuel suivi de frontiere
+  int BoundaryOption = DriverTexteBoundary(myDriver);
+
+  // E.5. Ecriture du texte dans le fichier
+  MESSAGE (". Ecriture du texte dans le fichier de configuration; codret = "<<codret);
+  if (codret == 0)
+  { myDriver->CreeFichier(); }
+
+  // G. Execution
+  //
+  int codretexec = 1789;
+  if (codret == 0) {
+    codretexec = myDriver->ExecuteHomard();
+    //
+    MESSAGE ("Erreur en executant HOMARD : " << codretexec);
+    // En mode adaptation, on ajuste l'etat de l'iteration
+    if (codretexec == 0) { myIteration1->SetState(2); }
+    else                 { myIteration1->SetState(1); }
+  }
+
+  // H. Gestion des resultats
+  if (codret == 0) {
+    std::string Commentaire;
+    // H.1. Le fichier des messages, dans tous les cas
+    Commentaire = "log";
+    Commentaire += " " + siterp1;
+
+    // H.2. Si tout s'est bien passe :
+    if (codretexec == 0) {
+      // H.2.1. Le fichier de bilan
+      Commentaire = "Summary";
+      Commentaire += " " + siterp1;
+      // H.2.2. Le fichier de  maillage obtenu
+      std::stringstream saux0;
+      Commentaire = "Mesh";
+      Commentaire += " " + siterp1;
+      if (_PublishMeshOUT) PublishResultInSmesh(MeshFile);
+    }
+    // H.3 Message d'erreur
+    if (codretexec != 0) {
+      std::string text = "";
+      // Message d'erreur en cas de probleme en adaptation
+      text = "Error during the adaptation.\n";
+      bool stopvu = false;
+      std::ifstream fichier(LogFile.c_str());
+      if (fichier) { // ce test échoue si le fichier n'est pas ouvert
+        std::string ligne; // variable contenant chaque ligne lue
+        while (std::getline(fichier, ligne)) {
+          //INFOS(ligne);
+          if (stopvu) { text += ligne+ "\n"; }
+          else {
+            int position = ligne.find("===== HOMARD ===== STOP =====");
+            if (position > 0) { stopvu = true; }
+          }
+        }
+      }
+      text += "\n\nSee the file " + LogFile + "\n";
+      INFOS (text);
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      es.text = CORBA::string_dup(text.c_str());
+      throw SALOME::SALOME_Exception(es);
+    }
+  }
+
+  // I. Menage et retour dans le répertoire du cas
+  if (codret == 0) {
+    delete myDriver;
+    MESSAGE (". On retourne dans nomDirWork = " << nomDirWork);
+    CHDIR(nomDirWork.c_str());
+  }
+
+  // J. Suivi de la frontière CAO
+  if (codret == 0) {
+    if ((BoundaryOption % 5 == 0) && (codretexec == 0)) {
+      MESSAGE ("Suivi de frontière CAO");
+      codret = ComputeCAO();
+    }
+  }
+
+  if (codretexec == 0) {
+    // Python Dump
+    PythonDump();
+
+    // Delete log file, if required
+    if (myIteration1 != NULL) {
+      MESSAGE("myIteration1->GetLogFile() = " << myIteration1->GetLogFile());
+      if (_LogInFile && _RemoveLogOnSuccess) {
+        // Remove log file on success
+        SMESH_File(myIteration1->GetLogFile(), false).remove();
+      }
+    }
+
+    // Clean all data
+    DeleteCase();
+  }
+
+  return codretexec;
+}
+
+void HOMARD_Gen_i::DeleteCase()
+{
+  MESSAGE ("DeleteCase");
+  if (myCase->_is_nil()) return;
+
+  // Delete all boundaries
+  _mesBoundarys.clear();
+
+  // Delete iterations
+  DeleteIteration(1);
+  DeleteIteration(0);
+
+  // Delete case
+  myCase = SMESHHOMARD::HOMARD_Cas::_nil();
+
+  // Delete tmp mesh file
+  if (!_CaseOnMedFile && !_TmpMeshFile.empty()) {
+    SMESH_File aFile (_TmpMeshFile, false);
+    if (aFile.exists()) aFile.remove();
+    _TmpMeshFile = "";
+  }
+  _SmeshMesh = SMESH::SMESH_Mesh::_nil();
+}
+
+//=============================================================================
+// Calcul d'une iteration : partie spécifique à l'adaptation
+//=============================================================================
+CORBA::Long HOMARD_Gen_i::ComputeAdap(SMESHHOMARDImpl::HomardDriver* myDriver)
+{
+  MESSAGE ("ComputeAdap");
+
+  // A. Prealable
+  // A.1. Bases
+  int codret = 0;
+  // Numero de l'iteration
+  int NumeIter = 1;
+  std::stringstream saux0;
+  saux0 << NumeIter-1;
+  std::string siter = saux0.str();
+  if (NumeIter < 11) { siter = "0" + siter; }
+
+  // B. L'iteration parent
+  ASSERT(myIteration0);
+
+  // C. Le sous-répertoire de l'iteration precedente
+  char* DirComputePa = ComputeDirPaManagement();
+  MESSAGE(". DirComputePa = " << DirComputePa);
+
+  // D. Les données de l'adaptation HOMARD
+  // D.1. Le type de conformite
+  MESSAGE (". ConfType = " << _ConfType);
+
+  // D.3. Le maillage de depart
+  const char* NomMeshParent = myIteration0->GetMeshName();
+  MESSAGE (". NomMeshParent = " << NomMeshParent);
+  const char* MeshFileParent = myIteration0->GetMeshFile();
+  MESSAGE (". MeshFileParent = " << MeshFileParent);
+
+  // D.4. Le maillage associe a l'iteration
+  const char* MeshFile = myIteration1->GetMeshFile();
+  MESSAGE (". MeshFile = " << MeshFile);
+  FILE *file = fopen(MeshFile,"r");
+  if (file != NULL) {
+    fclose(file);
+    // CleanOption = 0 : report an error if output mesh file exists
+    // CleanOption = 1 : destruction du répertoire d'execution
+    int CleanOption = 1;
+    if (CleanOption == 0) {
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      std::string text = "MeshFile : " + std::string(MeshFile) + " already exists ";
+      es.text = CORBA::string_dup(text.c_str());
+      throw SALOME::SALOME_Exception(es);
+    }
+    else {
+      std::string commande = "rm -f " + std::string(MeshFile);
+      codret = system(commande.c_str());
+      if (codret != 0) {
+        SALOME::ExceptionStruct es;
+        es.type = SALOME::BAD_PARAM;
+        es.text = "The mesh file cannot be deleted.";
+        throw SALOME::SALOME_Exception(es);
+      }
+    }
+  }
+
+  // E. Texte du fichier de configuration
+  // E.1. Incontournables du texte
+  myDriver->TexteAdap();
+  int iaux = 0;
+  myDriver->TexteMaillageHOMARD(DirComputePa, siter, iaux);
+  myDriver->TexteMaillage(NomMeshParent, MeshFileParent, 0);
+  myDriver->TexteConfRaffDera(_ConfType);
+
+  // E.6. Ajout des options avancees
+  //myDriver->TexteAdvanced(NivMax, DiamMin, AdapInit, ExtraOutput);
+  myDriver->TexteAdvanced(-1, -1.0, 0, 1);
+
+  // E.7. Ajout des informations sur le deroulement de l'execution
+  int MessInfo = myIteration1->GetInfoCompute();
+  MESSAGE (". MessInfo = " << MessInfo);
+  myDriver->TexteInfoCompute(MessInfo);
+
+  return codret;
+}
+//=============================================================================
+// Calcul d'une iteration : partie spécifique au suivi de frontière CAO
+//=============================================================================
+CORBA::Long HOMARD_Gen_i::ComputeCAO()
+{
+  MESSAGE ("ComputeCAO");
+
+  // A. Prealable
+  // A.1. Bases
+  int codret = 0;
+#ifndef DISABLE_HOMARD_ADAPT
+  // A.2. Le sous-répertoire de l'iteration en cours de traitement
+  char* DirCompute = myIteration1->GetDirName();
+  // A.3. Le maillage résultat de l'iteration en cours de traitement
+  char* MeshFile = myIteration1->GetMeshFile();
+
+  // B. Les données pour FrontTrack
+  // B.1. Le maillage à modifier
+  const std::string theInputMedFile = MeshFile;
+  MESSAGE (". theInputMedFile  = " << theInputMedFile);
+
+  // B.2. Le maillage après modification : fichier identique
+  const std::string theOutputMedFile = MeshFile;
+  MESSAGE (". theOutputMedFile = " << theInputMedFile);
+
+  // B.3. La liste des fichiers contenant les numéros des noeuds à bouger
+  std::vector< std::string > theInputNodeFiles;
+  MESSAGE (". DirCompute = " << DirCompute);
+  std::basic_string<char>::size_type bilan;
+  int icpt = 0;
+#ifndef WIN32
+  DIR *dp;
+  struct dirent *dirp;
+  dp  = opendir(DirCompute);
+  while ((dirp = readdir(dp)) != NULL)
+  {
+    std::string file_name(dirp->d_name);
+    bilan = file_name.find("fr");
+    if (bilan != string::npos)
+    {
+      std::stringstream filename_total;
+      filename_total << DirCompute << "/" << file_name;
+      theInputNodeFiles.push_back(filename_total.str());
+      icpt += 1;
+    }
+  }
+#else
+  HANDLE hFind = INVALID_HANDLE_VALUE;
+  WIN32_FIND_DATA ffd;
+  hFind = FindFirstFile(DirNameStart, &ffd);
+  if (INVALID_HANDLE_VALUE != hFind) {
+    while (FindNextFile(hFind, &ffd) != 0) {
+      std::string file_name(ffd.cFileName);
+      bilan = file_name.find("fr");
+      if (bilan != string::npos)
+      {
+        std::stringstream filename_total;
+        filename_total << DirCompute << "/" << file_name;
+        theInputNodeFiles.push_back(filename_total.str());
+        icpt += 1;
+      }
+    }
+    FindClose(hFind);
+  }
+#endif
+  for (int i = 0; i < icpt; i++)
+  { MESSAGE (". theInputNodeFiles["<< i << "] = " << theInputNodeFiles[i]); }
+
+  // B.4. Le fichier de la CAO
+  SMESHHOMARD::ListBoundaryGroupType* ListBoundaryGroupType = myCase->GetBoundaryGroup();
+  std::string BoundaryName = std::string((*ListBoundaryGroupType)[0]);
+  MESSAGE (". BoundaryName = " << BoundaryName);
+  SMESHHOMARD::HOMARD_Boundary_var myBoundary = _mesBoundarys[BoundaryName];
+  const std::string theXaoFileName = myBoundary->GetDataFile();
+  MESSAGE (". theXaoFileName = " << theXaoFileName);
+
+  // C. Lancement des projections
+  MESSAGE (". Lancement des projections");
+
+  assert(Py_IsInitialized());
+  PyGILState_STATE gstate;
+  gstate = PyGILState_Ensure();
+  PyRun_SimpleString("from FrontTrack import FrontTrack");
+  // FrontTrack().track( fic_med_brut, fic_med_new, l_fr, xao_file )
+  std::string pyCommand ("FrontTrack().track( \"");
+  pyCommand += theInputMedFile + "\", \"" + theOutputMedFile + "\", [";
+  for (int i = 0; i < icpt; i++) {
+    if (i > 0) pyCommand += ", ";
+    pyCommand += "\"";
+    pyCommand += theInputNodeFiles[i];
+    pyCommand += "\"";
+  }
+  pyCommand += "], \"" + theXaoFileName + "\", False )";
+  MESSAGE (". Lancement des projections: pyCommand = " << pyCommand);
+  PyRun_SimpleString(pyCommand.c_str());
+  PyGILState_Release(gstate);
+
+  // D. Transfert des coordonnées modifiées dans le fichier historique de HOMARD
+  //    On lance une exécution spéciale de HOMARD en attendant
+  //    de savoir le faire avec MEDCoupling
+  MESSAGE (". Transfert des coordonnées");
+  codret = ComputeCAObis();
+#endif
+  return codret;
+}
+//=============================================================================
+//=============================================================================
+// Transfert des coordonnées en suivi de frontière CAO
+//=============================================================================
+CORBA::Long HOMARD_Gen_i::ComputeCAObis()
+{
+  MESSAGE ("ComputeCAObis");
+
+  // A. Prealable
+  int codret = 0;
+
+  // A.1. Controle de la possibilite d'agir
+  // A.1.1. Etat de l'iteration
+  int etat = myIteration1->GetState();
+  MESSAGE ("etat = " << etat);
+  // A.1.2. L'iteration doit être calculee
+  if (etat == 1) {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "This iteration is not computed.";
+    throw SALOME::SALOME_Exception(es);
+    return 1;
+  }
+  // A.2. Numero de l'iteration
+  //     siterp1 : numero de l'iteration a traiter
+  int NumeIter = myIteration1->GetNumber();
+  std::string siterp1;
+  std::stringstream saux1;
+  saux1 << NumeIter;
+  siterp1 = saux1.str();
+  if (NumeIter < 10) { siterp1 = "0" + siterp1; }
+  MESSAGE ("siterp1 = "<<siterp1);
+
+  // A.3. Le cas
+  ASSERT(!CORBA::is_nil(myCase));
+
+  // A.4. Le sous-répertoire de l'iteration a traiter
+  char* DirCompute = myIteration1->GetDirName();
+  MESSAGE(". DirCompute = " << DirCompute);
+
+  // C. Le fichier des messages
+  std::string LogFile = DirCompute;
+  LogFile += "/Liste." + siterp1 + ".maj_coords.log";
+  MESSAGE (". LogFile = " << LogFile);
+  myIteration1->SetFileInfo(LogFile.c_str());
+
+  // D. On passe dans le répertoire de l'iteration a calculer
+  MESSAGE (". On passe dans DirCompute = " << DirCompute);
+  CHDIR(DirCompute);
+
+  // E. Les données de l'exécution HOMARD
+  // E.1. L'objet du texte du fichier de configuration
+  SMESHHOMARDImpl::HomardDriver* myDriver = new SMESHHOMARDImpl::HomardDriver("", siterp1);
+  myDriver->TexteInit(DirCompute, LogFile, "English");
+
+  // E.2. Le maillage associe a l'iteration
+  const char* NomMesh = myIteration1->GetMeshName();
+  MESSAGE (". NomMesh = " << NomMesh);
+  const char* MeshFile = myIteration1->GetMeshFile();
+  MESSAGE (". MeshFile = " << MeshFile);
+
+  // E.3. Les données du traitement HOMARD
+  myDriver->TexteMajCoords(NumeIter);
+  int iaux = 0;
+  myDriver->TexteMaillageHOMARD(DirCompute, siterp1, iaux);
+  myDriver->TexteMaillage(NomMesh, MeshFile, 0);
+  //
+  // E.4. Ecriture du texte dans le fichier
+  MESSAGE (". Ecriture du texte dans le fichier de configuration; codret = "<<codret);
+  if (codret == 0) myDriver->CreeFichier();
+
+  // F. Execution
+  //
+  int codretexec = 1789;
+  if (codret == 0) {
+    codretexec = myDriver->ExecuteHomard();
+    MESSAGE ("Erreur en executant HOMARD : " << codretexec);
+  }
+
+  // G. Gestion des resultats
+  if (codret == 0) {
+    // G.1. Le fichier des messages, dans tous les cas
+    std::string Commentaire = "logmaj_coords";
+    // G.2 Message d'erreur
+    if (codretexec != 0) {
+      std::string text = "\n\nSee the file " + LogFile + "\n";
+      INFOS (text);
+      SALOME::ExceptionStruct es;
+      es.type = SALOME::BAD_PARAM;
+      es.text = CORBA::string_dup(text.c_str());
+      throw SALOME::SALOME_Exception(es);
+
+      // On force le succes pour pouvoir consulter le fichier log
+      codretexec = 0;
+    }
+  }
+
+  // H. Menage et retour dans le répertoire du cas
+  if (codret == 0) { delete myDriver; }
+
+  return codret;
+}
+//=============================================================================
+// Creation d'un nom de sous-répertoire pour l'iteration au sein d'un répertoire parent
+//  nomrep : nom du répertoire parent
+//  num : le nom du sous-répertoire est sous la forme 'In', n est >= num
+//=============================================================================
+char* HOMARD_Gen_i::CreateDirNameIter(const char* nomrep, CORBA::Long num)
+{
+#ifndef DISABLE_HOMARD_ADAPT 
+  MESSAGE ("CreateDirNameIter : nomrep ="<< nomrep << ", num = "<<num);
+  // On verifie que le répertoire parent existe
+  int codret = CHDIR(nomrep);
+  if (codret != 0) {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "The directory of the case does not exist.";
+    throw SALOME::SALOME_Exception(es);
+  }
+  std::string nomDirActuel = getenv("PWD");
+  std::string DirName;
+  // On boucle sur tous les noms possibles jusqu'a trouver un nom correspondant a un répertoire inconnu
+  bool a_chercher = true;
+  while (a_chercher) {
+    // On passe dans le répertoire parent
+
+    CHDIR(nomrep);
+    // On recherche un nom sous la forme Iabc, avec abc representant le numero
+    int jaux;
+    if      (num <    100) { jaux = 2; }
+    else if (num <   1000) { jaux = 3; }
+    else if (num <  10000) { jaux = 4; }
+    else if (num < 100000) { jaux = 5; }
+    else                     { jaux = 9; }
+    std::ostringstream iaux;
+    iaux << std::setw(jaux) << std::setfill('0') << num;
+    std::ostringstream DirNameA;
+    DirNameA << "I" << iaux.str();
+    // Si on ne pas peut entrer dans le répertoire, on doit verifier
+    // que c'est bien un probleme d'absence
+    if (CHDIR(DirNameA.str().c_str()) != 0)
+    {
+      bool existe = false;
+#ifndef WIN32
+      DIR *dp;
+      struct dirent *dirp;
+      dp  = opendir(nomrep);
+      while ((dirp = readdir(dp)) != NULL)
+      {
+        std::string file_name(dirp->d_name);
+#else
+      HANDLE hFind = INVALID_HANDLE_VALUE;
+      WIN32_FIND_DATA ffd;
+      hFind = FindFirstFile(nomrep, &ffd);
+      if (INVALID_HANDLE_VALUE != hFind) {
+        while (FindNextFile(hFind, &ffd) != 0) {
+         if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) continue; //skip directories
+         std::string file_name(ffd.cFileName);
+#endif
+        if (file_name == DirNameA.str()) { existe = true; }
+      }
+#ifndef WIN32
+      closedir(dp);
+#else
+      FindClose(hFind);
+#endif
+      if (!existe)
+      {
+        DirName = DirNameA.str();
+        a_chercher = false;
+        break;
+      }
+    }
+    num += 1;
+  }
+
+  MESSAGE ("==> DirName = " << DirName);
+  MESSAGE (". On retourne dans nomDirActuel = " << nomDirActuel);
+  CHDIR(nomDirActuel.c_str());
+  return CORBA::string_dup(DirName.c_str());
+#else
+       return "";
+#endif
+}
+//=============================================================================
+// Calcul d'une iteration : gestion du répertoire de calcul
+//=============================================================================
+char* HOMARD_Gen_i::ComputeDirManagement()
+{
+#ifndef DISABLE_HOMARD_ADAPT
+  MESSAGE ("ComputeDirManagement : répertoires pour le calcul");
+
+  //Si le sous-répertoire existe :
+  //  CleanOption =  0 : on sort en erreur si le répertoire n'est pas vide
+  //  CleanOption =  1 : on fait le menage du répertoire
+  //  CleanOption = -1 : on ne fait rien
+  int CleanOption = 0;
+
+  // B.2. Le répertoire du cas
+  const char* nomDirCase = myCase->GetDirName();
+  MESSAGE (". nomDirCase = " << nomDirCase);
+
+  // B.3. Le sous-répertoire de l'iteration a calculer, puis le répertoire complet a creer
+  // B.3.1. Le nom du sous-répertoire
+  const char* nomDirIt = myIteration1->GetDirNameLoc();
+
+  // B.3.2. Le nom complet du sous-répertoire
+  std::stringstream DirCompute;
+  DirCompute << nomDirCase << "/" << nomDirIt;
+  MESSAGE (". DirCompute = " << DirCompute.str());
+
+  // B.3.3. Si le sous-répertoire n'existe pas, on le cree
+  if (CHDIR(DirCompute.str().c_str()) != 0)
+  {
+#ifndef WIN32
+    if (mkdir(DirCompute.str().c_str(), S_IRWXU|S_IRGRP|S_IXGRP) != 0)
+#else
+    if (_mkdir(DirCompute.str().c_str()) != 0)
+#endif
+    {
+       // GERALD -- QMESSAGE BOX
+       std::cerr << "Pb Creation du répertoire DirCompute = " << DirCompute.str() << std::endl;
+       VERIFICATION("Pb a la creation du répertoire" == 0);
+    }
+  }
+  else
+  {
+    //  Le répertoire existe
+    //  On demande de faire le menage de son contenu :
+    if (CleanOption == 1) {
+      MESSAGE (". Menage du répertoire DirCompute = " << DirCompute.str());
+      std::string commande = "rm -rf " + DirCompute.str()+"/*";
+      int codret = system(commande.c_str());
+      if (codret != 0)
+      {
+        // GERALD -- QMESSAGE BOX
+        std::cerr << ". Menage du répertoire de calcul" << DirCompute.str() << std::endl;
+        VERIFICATION("Pb au menage du répertoire de calcul" == 0);
+      }
+    }
+    //  On n'a pas demande de faire le menage de son contenu : on sort en erreur :
+    else {
+      if (CleanOption == 0) {
+#ifndef WIN32
+        DIR *dp;
+        struct dirent *dirp;
+        dp  = opendir(DirCompute.str().c_str());
+        bool result = true;
+        while ((dirp = readdir(dp)) != NULL && result)
+        {
+          std::string file_name(dirp->d_name);
+          result = file_name.empty() || file_name == "." || file_name == ".."; //if any file - break and return false
+        }
+        closedir(dp);
+#else
+       HANDLE hFind = INVALID_HANDLE_VALUE;
+       WIN32_FIND_DATA ffd;
+       hFind = FindFirstFile(DirCompute.str().c_str(), &ffd);
+       bool result = true;
+       if (INVALID_HANDLE_VALUE != hFind) {
+         while (FindNextFile(hFind, &ffd) != 0) {
+          if (ffd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) continue; //skip directories
+          std::string file_name(ffd.cFileName);
+          result = file_name.empty() || file_name == "." || file_name == ".."; //if any file - break and return false
+         }
+       }
+       FindClose(hFind);
+#endif
+        if (result == false)
+        {
+          SALOME::ExceptionStruct es;
+          es.type = SALOME::BAD_PARAM;
+          std::string text = "Directory : " + DirCompute.str() + " is not empty";
+          es.text = CORBA::string_dup(text.c_str());
+          throw SALOME::SALOME_Exception(es);
+          VERIFICATION("Directory is not empty" == 0);
+        }
+      }
+    }
+  }
+
+  return CORBA::string_dup(DirCompute.str().c_str());
+#else
+       return "";
+#endif
+}
+//=============================================================================
+// Calcul d'une iteration : gestion du répertoire de calcul de l'iteration parent
+//=============================================================================
+char* HOMARD_Gen_i::ComputeDirPaManagement()
+{
+  MESSAGE ("ComputeDirPaManagement : répertoires pour le calcul");
+  // Le répertoire du cas
+  const char* nomDirCase = myCase->GetDirName();
+  MESSAGE (". nomDirCase = " << nomDirCase);
+
+  // Le sous-répertoire de l'iteration precedente
+
+  const char* nomDirItPa = myIteration0->GetDirNameLoc();
+  std::stringstream DirComputePa;
+  DirComputePa << nomDirCase << "/" << nomDirItPa;
+  MESSAGE(". nomDirItPa = " << nomDirItPa);
+  MESSAGE(". DirComputePa = " << DirComputePa.str());
+
+  return CORBA::string_dup(DirComputePa.str().c_str());
+}
+
+//=============================================================================
+// Calcul d'une iteration : ecriture des frontieres dans le fichier de configuration
+// On ecrit dans l'ordre :
+//    1. la definition des frontieres
+//    2. les liens avec les groupes
+//    3. un entier resumant le type de comportement pour les frontieres
+//=============================================================================
+int HOMARD_Gen_i::DriverTexteBoundary(SMESHHOMARDImpl::HomardDriver* myDriver)
+{
+  MESSAGE ("... DriverTexteBoundary");
+  // 1. Recuperation des frontieres
+  std::list<std::string>  ListeBoundaryTraitees;
+  SMESHHOMARD::ListBoundaryGroupType* ListBoundaryGroupType = myCase->GetBoundaryGroup();
+  int numberOfitems = ListBoundaryGroupType->length();
+  MESSAGE ("... number of string for Boundary+Group = " << numberOfitems);
+  int BoundaryOption = 1;
+  // 2. Parcours des frontieres pour ecrire leur description
+  int NumBoundaryAnalytical = 0;
+  for (int NumBoundary = 0; NumBoundary< numberOfitems; NumBoundary=NumBoundary+2)
+  {
+    std::string BoundaryName = std::string((*ListBoundaryGroupType)[NumBoundary]);
+    MESSAGE ("... BoundaryName = " << BoundaryName);
+    // 2.1. La frontiere a-t-elle deja ete ecrite ?
+    //      Cela arrive quand elle est liee a plusieurs groupes. Il ne faut l'ecrire que la premiere fois
+    int A_faire = 1;
+    std::list<std::string>::const_iterator it = ListeBoundaryTraitees.begin();
+    while (it != ListeBoundaryTraitees.end())
+    {
+      MESSAGE ("..... BoundaryNameTraitee = " << *it);
+      if (BoundaryName == *it) { A_faire = 0; }
+      it++;
+    }
+    // 2.2. Ecriture de la frontiere
+    if (A_faire == 1)
+    {
+      // 2.2.1. Caracteristiques de la frontiere
+      SMESHHOMARD::HOMARD_Boundary_var myBoundary = _mesBoundarys[BoundaryName];
+      ASSERT(!CORBA::is_nil(myBoundary));
+      int BoundaryType = myBoundary->GetType();
+      MESSAGE ("... BoundaryType = " << BoundaryType);
+      // 2.2.2. Ecriture selon le type
+      // 2.2.2.1. Cas d une frontiere CAO
+      if (BoundaryType == -1)
+      {
+//         const char* CAOFile = myBoundary->GetDataFile();
+//         MESSAGE (". CAOFile = " << CAOFile);
+        if (BoundaryOption % 5 != 0) { BoundaryOption = BoundaryOption*5; }
+      }
+      // 2.2.2.2. Cas d une frontiere discrete
+      else if (BoundaryType == 0)
+      {
+        const char* MeshName = myBoundary->GetMeshName();
+        MESSAGE (". MeshName = " << MeshName);
+        const char* MeshFile = myBoundary->GetDataFile();
+        MESSAGE (". MeshFile = " << MeshFile);
+        myDriver->TexteBoundaryDi(MeshName, MeshFile);
+        if (BoundaryOption % 2 != 0) { BoundaryOption = BoundaryOption*2; }
+      }
+      // 2.2.2.3. Cas d une frontiere analytique
+      else
+      {
+        NumBoundaryAnalytical++;
+        SMESHHOMARD::double_array* coor = myBoundary->GetCoords();
+        if (BoundaryType == 1) // Cas d un cylindre
+        {
+          myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], (*coor)[4], (*coor)[5], (*coor)[6], 0.);
+          if (BoundaryOption % 3 != 0) { BoundaryOption = BoundaryOption*3; }
+        }
+        else if (BoundaryType == 2) // Cas d une sphere
+        {
+          myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], 0., 0., 0., 0.);
+          if (BoundaryOption % 3 != 0) { BoundaryOption = BoundaryOption*3; }
+        }
+        else if (BoundaryType == 3) // Cas d un cone defini par un axe et un angle
+        {
+          myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], (*coor)[4], (*coor)[5], (*coor)[6], 0.);
+          if (BoundaryOption % 3 != 0) { BoundaryOption = BoundaryOption*3; }
+        }
+        else if (BoundaryType == 4) // Cas d un cone defini par les 2 rayons
+        {
+          myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], (*coor)[4], (*coor)[5], (*coor)[6], (*coor)[7]);
+          if (BoundaryOption % 3 != 0) { BoundaryOption = BoundaryOption*3; }
+        }
+        else if (BoundaryType == 5) // Cas d un tore
+        {
+          myDriver->TexteBoundaryAn(BoundaryName, NumBoundaryAnalytical, BoundaryType, (*coor)[0], (*coor)[1], (*coor)[2], (*coor)[3], (*coor)[4], (*coor)[5], (*coor)[6], (*coor)[7]);
+          if (BoundaryOption % 3 != 0) { BoundaryOption = BoundaryOption*3; }
+        }
+      }
+      // 2.2.3. Memorisation du traitement
+      ListeBoundaryTraitees.push_back(BoundaryName);
+    }
+  }
+  // 3. Parcours des frontieres pour ecrire les liens avec les groupes
+  NumBoundaryAnalytical = 0;
+  for (int NumBoundary = 0; NumBoundary< numberOfitems; NumBoundary=NumBoundary+2)
+  {
+    std::string BoundaryName = std::string((*ListBoundaryGroupType)[NumBoundary]);
+    MESSAGE ("... BoundaryName = " << BoundaryName);
+    SMESHHOMARD::HOMARD_Boundary_var myBoundary = _mesBoundarys[BoundaryName];
+    ASSERT(!CORBA::is_nil(myBoundary));
+    int BoundaryType = myBoundary->GetType();
+    MESSAGE ("... BoundaryType = " << BoundaryType);
+    // 3.1. Recuperation du nom du groupe
+    std::string GroupName = std::string((*ListBoundaryGroupType)[NumBoundary+1]);
+    MESSAGE ("... GroupName = " << GroupName);
+    // 3.2. Cas d une frontiere CAO
+    if (BoundaryType == -1)
+    {
+      if (GroupName.size() > 0) { myDriver->TexteBoundaryCAOGr (GroupName); }
+    }
+    // 3.3. Cas d une frontiere discrete
+    else if (BoundaryType == 0)
+    {
+      if (GroupName.size() > 0) { myDriver->TexteBoundaryDiGr (GroupName); }
+    }
+    // 3.4. Cas d une frontiere analytique
+    else
+    {
+      NumBoundaryAnalytical++;
+      myDriver->TexteBoundaryAnGr (BoundaryName, NumBoundaryAnalytical, GroupName);
+    }
+  }
+  // 4. Ecriture de l'option finale
+  myDriver->TexteBoundaryOption(BoundaryOption);
+//
+  return BoundaryOption;
+}
+//===========================================================================
+//===========================================================================
+
+//===========================================================================
+// Publication
+//===========================================================================
+void HOMARD_Gen_i::PublishResultInSmesh(const char* NomFich)
+{
+  // Prevent dump of CreateMeshesFromMED
+  SMESH::TPythonDump pDump; // do not delete this line of code
+
+  MESSAGE("PublishResultInSmesh " << NomFich);
+  if (CORBA::is_nil(SMESH_Gen_i::GetSMESHGen()->getStudyServant())) {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Invalid study context";
+    throw SALOME::SALOME_Exception(es);
+  }
+
+  // Le module SMESH est-il actif ?
+  SALOMEDS::SObject_var aSmeshSO =
+    SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindComponent("SMESH");
+  //
+  // TODO?
+  // Temporary suppressed depublication of mesh with the same name of file
+  /*
+  if (!CORBA::is_nil(aSmeshSO)) {
+    // On verifie que le fichier n est pas deja publie
+    SALOMEDS::ChildIterator_var aIter =
+      SMESH_Gen_i::GetSMESHGen()->getStudyServant()->NewChildIterator(aSmeshSO);
+    for (; aIter->More(); aIter->Next()) {
+      SALOMEDS::SObject_var aSO = aIter->Value();
+      SALOMEDS::GenericAttribute_var aGAttr;
+      if (aSO->FindAttribute(aGAttr, "AttributeExternalFileDef")) {
+        SALOMEDS::AttributeExternalFileDef_var anAttr =
+          SALOMEDS::AttributeExternalFileDef::_narrow(aGAttr);
+        CORBA::String_var value = anAttr->Value();
+        if (strcmp((const char*)value, NomFich) == 0) {
+          MESSAGE ("PublishResultInSmesh : le fichier " << NomFich << " est deja publie.");
+          // Pour un fichier importe, on ne republie pas
+          // Option = 0 : fichier issu d'une importation
+          // Option = 1 : fichier issu d'une execution HOMARD
+          if (Option == 0) { return; }
+          // Pour un fichier calcule, on commence par faire la depublication
+          else {
+            MESSAGE("PublishResultInSmesh : depublication");
+            if (aSO->FindAttribute(aGAttr, "AttributeName")) {
+              SALOMEDS::AttributeName_var anAttr2 = SALOMEDS::AttributeName::_narrow(aGAttr);
+              CORBA::String_var value2 = anAttr2->Value();
+              std::string MeshName = string(value2);
+              MESSAGE("PublishResultInSmesh : depublication de " << MeshName);
+              DeleteResultInSmesh(NomFich, MeshName);
+            }
+          }
+        }
+      }
+    }
+  }
+  */
+
+  // On enregistre le fichier
+  MESSAGE("Enregistrement du fichier");
+  //
+  //SMESH::SMESH_Gen_var aSmeshEngine = this->retrieveSMESHInst();
+  SMESH_Gen_i* aSmeshEngine = SMESH_Gen_i::GetSMESHGen();
+  //
+  //ASSERT(!CORBA::is_nil(aSmeshEngine));
+  aSmeshEngine->UpdateStudy();
+  SMESH::DriverMED_ReadStatus theStatus;
+
+  // On met a jour les attributs AttributeExternalFileDef et AttributePixMap
+  SMESH::mesh_array* mesMaillages = aSmeshEngine->CreateMeshesFromMED(NomFich, theStatus);
+  if (CORBA::is_nil(aSmeshSO)) {
+    aSmeshSO = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindComponent("SMESH");
+    if (CORBA::is_nil(aSmeshSO)) return;
+  }
+
+  for (int i = 0; i < (int)mesMaillages->length(); i++) {
+    MESSAGE(". Mise a jour des attributs du maillage");
+    SMESH::SMESH_Mesh_var monMaillage = (*mesMaillages)[i];
+    SALOMEDS::SObject_var aSO = SALOMEDS::SObject::_narrow
+      (SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindObjectIOR
+       (SMESH_Gen_i::GetORB()->object_to_string(monMaillage)));
+    SALOMEDS::StudyBuilder_var aStudyBuilder =
+      SMESH_Gen_i::GetSMESHGen()->getStudyServant()->NewBuilder();
+    SALOMEDS::GenericAttribute_var aGAttr =
+      aStudyBuilder->FindOrCreateAttribute(aSO, "AttributeExternalFileDef");
+    SALOMEDS::AttributeExternalFileDef_var anAttr =
+      SALOMEDS::AttributeExternalFileDef::_narrow(aGAttr);
+    anAttr->SetValue(NomFich);
+    SALOMEDS::GenericAttribute_var aPixMap =
+      aStudyBuilder->FindOrCreateAttribute(aSO, "AttributePixMap");
+    SALOMEDS::AttributePixMap_var anAttr2 = SALOMEDS::AttributePixMap::_narrow(aPixMap);
+    anAttr2->SetPixMap("mesh_tree_mesh.png");
+  }
+}
+
+//=============================================================================
+void HOMARD_Gen_i::DeleteResultInSmesh(std::string NomFich, std::string MeshName)
+{
+  MESSAGE ("DeleteResultInSmesh pour le maillage " << MeshName << " dans le fichier " << NomFich);
+  if (CORBA::is_nil(SMESH_Gen_i::GetSMESHGen()->getStudyServant())) {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    es.text = "Invalid study context";
+    throw SALOME::SALOME_Exception(es);
+  }
+
+  // Le module SMESH est-il actif ?
+  SALOMEDS::SObject_var aSmeshSO =
+    SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindComponent("SMESH");
+  //
+  if (CORBA::is_nil(aSmeshSO)) return;
+  // On verifie que le fichier est deja publie
+  SALOMEDS::StudyBuilder_var myBuilder =
+    SMESH_Gen_i::GetSMESHGen()->getStudyServant()->NewBuilder();
+  SALOMEDS::ChildIterator_var aIter =
+    SMESH_Gen_i::GetSMESHGen()->getStudyServant()->NewChildIterator(aSmeshSO);
+  for (; aIter->More(); aIter->Next()) {
+    SALOMEDS::SObject_var  aSO = aIter->Value();
+    SALOMEDS::GenericAttribute_var aGAttr;
+    if (aSO->FindAttribute(aGAttr, "AttributeExternalFileDef")) {
+      SALOMEDS::AttributeExternalFileDef_var anAttr =
+        SALOMEDS::AttributeExternalFileDef::_narrow(aGAttr);
+      CORBA::String_var value = anAttr->Value();
+      if (strcmp((const char*)value, NomFich.c_str()) == 0) {
+        if (aSO->FindAttribute(aGAttr, "AttributeName")) {
+          SALOMEDS::AttributeName_var anAttr2 = SALOMEDS::AttributeName::_narrow(aGAttr);
+          CORBA::String_var value2 = anAttr2->Value();
+          if (strcmp((const char*)value2, MeshName.c_str()) == 0) {
+            myBuilder->RemoveObjectWithChildren(aSO);
+          }
+        }
+      }
+    }
+  }
+}
+
+void HOMARD_Gen_i::PythonDump()
+{
+  MESSAGE ("Begin PythonDump");
+  SMESH::TPythonDump pd;
+
+  // SMESH_Homard
+  pd << "import SMESHHOMARD\n";
+  //pd << "smeshhomard = " << SMESH_Gen_i::GetSMESHGen() << ".CreateHOMARD_ADAPT()\n";
+  pd << "smeshhomard = " << SMESH_Gen_i::GetSMESHGen() << ".Adaptation(\"Uniform\")\n";
+
+  // Boundaries
+  if (_mesBoundarys.size() > 0) MESSAGE(". Creation of the boundaries");
+  std::map<std::string, SMESHHOMARD::HOMARD_Boundary_var>::const_iterator it_boundary;
+  for (it_boundary  = _mesBoundarys.begin();
+       it_boundary != _mesBoundarys.end(); ++it_boundary) {
+    SMESHHOMARD::HOMARD_Boundary_var maBoundary = (*it_boundary).second;
+    //MESSAGE ("PythonDump  of boundary " << (*it_boundary).first <<
+    //         " : " << maBoundary->GetDumpPython());
+    pd << maBoundary->GetDumpPython();
+  }
+
+  // Case
+  ASSERT(!myCase->_is_nil());
+  MESSAGE (". Creation of the case");
+
+  if (_CaseOnMedFile) {
+    pd << "smeshhomard.CreateCase(\"" << myIteration0->GetMeshName();
+    pd << "\", \"" << myIteration0->GetMeshFile();
+    pd << "\", \"" << myCase->GetDirName() << "\")\n";
+  }
+  else {
+    pd << "smeshhomard.CreateCaseOnMesh(\"" << myIteration0->GetMeshName();
+    pd << "\", " << _SmeshMesh;
+    pd << ".GetMesh(), \"" << myCase->GetDirName() << "\")\n";
+  }
+
+  pd << myCase->GetDumpPython();
+
+  // Preferences
+  pd << "smeshhomard.SetConfType(" << _ConfType << ")\n";
+  pd << "smeshhomard.SetKeepMedOUT(" << (_KeepMedOUT ? "True" : "False") << ")\n";
+  pd << "smeshhomard.SetPublishMeshOUT(" << (_PublishMeshOUT ? "True" : "False") << ")\n";
+  pd << "smeshhomard.SetMeshNameOUT(\"" << _MeshNameOUT << "\")\n";
+  pd << "smeshhomard.SetMeshFileOUT(\"" << _MeshFileOUT << "\")\n";
+
+  pd << "smeshhomard.SetKeepWorkingFiles(" << (_KeepWorkingFiles ? "True" : "False") << ")\n";
+  pd << "smeshhomard.SetLogInFile(" << (_LogInFile ? "True" : "False") << ")\n";
+  if (_LogInFile) pd << "smeshhomard.SetLogFile(\"" << _LogFile << "\")\n";
+  pd << "smeshhomard.SetRemoveLogOnSuccess(" << (_RemoveLogOnSuccess ? "True" : "False") << ")\n";
+  pd << "smeshhomard.SetVerboseLevel(" << _VerboseLevel << ")\n";
+
+  // Compute
+  pd << "smeshhomard.Compute()\n";
+  MESSAGE ("End PythonDump");
+}
+
+void HOMARD_Gen_i::AddBoundary(const char* BoundaryName)
+{
+  MESSAGE("HOMARD_Gen_i::AddBoundary : BoundaryName = " << BoundaryName);
+  if (myCase->_is_nil()) {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    std::string text = "The input mesh must be defined before boundary addition";
+    es.text = CORBA::string_dup(text.c_str());
+    throw SALOME::SALOME_Exception(es);
+  }
+  myCase->AddBoundary(BoundaryName);
+}
+
+void HOMARD_Gen_i::AddBoundaryGroup(const char* BoundaryName, const char* Group)
+{
+  MESSAGE("HOMARD_Gen_i::AddBoundaryGroup : BoundaryName = " <<
+          BoundaryName << ", Group = " << Group);
+  if (myCase->_is_nil()) {
+    SALOME::ExceptionStruct es;
+    es.type = SALOME::BAD_PARAM;
+    std::string text = "The input mesh must be defined before boundary group addition";
+    es.text = CORBA::string_dup(text.c_str());
+    throw SALOME::SALOME_Exception(es);
+  }
+  myCase->AddBoundaryGroup(BoundaryName, Group);
+}
+
+//===============================================================================
+// Preferences
+//===============================================================================
+void HOMARD_Gen_i::SetConfType(CORBA::Long theConfType)
+{
+  _ConfType = theConfType;
+}
+void HOMARD_Gen_i::SetKeepMedOUT(bool theKeepMedOUT)
+{
+  _KeepMedOUT = theKeepMedOUT;
+}
+void HOMARD_Gen_i::SetPublishMeshOUT(bool thePublishMeshOUT)
+{
+  _PublishMeshOUT = thePublishMeshOUT;
+}
+void HOMARD_Gen_i::SetKeepWorkingFiles(bool theKeepWorkingFiles)
+{
+  _KeepWorkingFiles = theKeepWorkingFiles;
+}
+void HOMARD_Gen_i::SetLogInFile(bool theLogInFile)
+{
+  _LogInFile = theLogInFile;
+}
+void HOMARD_Gen_i::SetRemoveLogOnSuccess(bool theRemoveLogOnSuccess)
+{
+  _RemoveLogOnSuccess = theRemoveLogOnSuccess;
+}
+void HOMARD_Gen_i::SetVerboseLevel(CORBA::Long theVerboseLevel)
+{
+  _VerboseLevel = theVerboseLevel;
+}
+void HOMARD_Gen_i::SetMeshNameOUT(const char* theMeshNameOUT)
+{
+  _MeshNameOUT = theMeshNameOUT;
+}
+void HOMARD_Gen_i::SetMeshFileOUT(const char* theMeshFileOUT)
+{
+  _MeshFileOUT = theMeshFileOUT;
+}
+void HOMARD_Gen_i::SetLogFile(const char* theLogFile)
+{
+  _LogFile = theLogFile;
+}
+
+// =======================================================================
+std::set<std::string> GetListeGroupesInMedFile(const char * aFile)
+{
+  std::set<std::string> ListeGroupes;
+  med_err erreur = 0;
+  med_idt medIdt;
+  while (erreur == 0) {
+    //  Ouverture du fichier
+    medIdt = MEDfileOpen(aFile,MED_ACC_RDONLY);
+    if (medIdt < 0) {
+      erreur = 1;
+      break;
+    }
+    // Caracteristiques du maillage
+    char meshname[MED_NAME_SIZE+1];
+    med_int spacedim,meshdim;
+    med_mesh_type meshtype;
+    char descriptionription[MED_COMMENT_SIZE+1];
+    char dtunit[MED_SNAME_SIZE+1];
+    med_sorting_type sortingtype;
+    med_int nstep;
+    med_axis_type axistype;
+    int naxis = MEDmeshnAxis(medIdt,1);
+    char *axisname=new char[naxis*MED_SNAME_SIZE+1];
+    char *axisunit=new char[naxis*MED_SNAME_SIZE+1];
+    erreur = MEDmeshInfo(medIdt,
+                            1,
+                            meshname,
+                            &spacedim,
+                            &meshdim,
+                            &meshtype,
+                            descriptionription,
+                            dtunit,
+                            &sortingtype,
+                            &nstep,
+                            &axistype,
+                            axisname,
+                            axisunit);
+    delete[] axisname;
+    delete[] axisunit;
+    if (erreur < 0) { break; }
+    // Nombre de familles
+    med_int nfam;
+    nfam = MEDnFamily(medIdt,meshname);
+    if (nfam < 0) {
+      erreur = 2;
+      break;
+    }
+    // Lecture des caracteristiques des familles
+    for (int i=0;i<nfam;i++) {
+      // Lecture du nombre de groupes
+      med_int ngro = MEDnFamilyGroup(medIdt,meshname,i+1);
+      if (ngro < 0) {
+        erreur = 3;
+        break;
+      }
+      // Lecture de la famille
+      else if (ngro > 0) {
+        char familyname[MED_NAME_SIZE+1];
+        med_int numfam;
+        char* gro = (char*) malloc(MED_LNAME_SIZE*ngro+1);
+        erreur = MEDfamilyInfo(medIdt,
+                               meshname,
+                               i+1,
+                               familyname,
+                               &numfam,
+                               gro);
+        if (erreur < 0) {
+          free(gro);
+          break;
+        }
+        // Lecture des groupes pour une famille de mailles
+        if (numfam < 0) {
+          for (int j=0;j<ngro;j++) {
+            char str2[MED_LNAME_SIZE+1];
+            strncpy(str2,gro+j*MED_LNAME_SIZE,MED_LNAME_SIZE);
+            str2[MED_LNAME_SIZE] = '\0';
+            ListeGroupes.insert(std::string(str2));
+          }
+        }
+        free(gro);
+      }
+    }
+    break;
+  }
+  // Fermeture du fichier
+  if (medIdt > 0) MEDfileClose(medIdt);
+
+  return ListeGroupes;
+}
+
+// =======================================================================
+// Le vecteur en retour contiendra les informations suivantes :
+// en position 0 et 1 Xmin, Xmax et en position 2 Dx si < 0  2D
+// en position 3 et 4 Ymin, Ymax et en position 5 Dy si < 0  2D
+// en position 6 et 7 Zmin, Zmax et en position 8 Dz si < 0  2D
+//  9 distance max dans le maillage
+// =======================================================================
+std::vector<double> GetBoundingBoxInMedFile(const char * aFile)
+{
+  std::vector<double> LesExtremes;
+  med_err erreur = 0;
+  med_idt medIdt;
+  while (erreur == 0) {
+    //  Ouverture du fichier
+    medIdt = MEDfileOpen(aFile,MED_ACC_RDONLY);
+    if (medIdt < 0) {
+      erreur = 1;
+      break;
+    }
+    //Nombre de maillage : on ne peut en lire qu'un seul
+    med_int numberOfMeshes = MEDnMesh(medIdt);
+    if (numberOfMeshes != 1) {
+      erreur = 2;
+      break;
+    }
+    // Caracteristiques du maillage
+    char meshname[MED_NAME_SIZE+1];
+    med_int spacedim,meshdim;
+    med_mesh_type meshtype;
+    char descriptionription[MED_COMMENT_SIZE+1];
+    char dtunit[MED_SNAME_SIZE+1];
+    med_sorting_type sortingtype;
+    med_int nstep;
+    med_axis_type axistype;
+    int naxis = MEDmeshnAxis(medIdt,1);
+    char *axisname=new char[naxis*MED_SNAME_SIZE+1];
+    char *axisunit=new char[naxis*MED_SNAME_SIZE+1];
+    erreur = MEDmeshInfo(medIdt,
+                            1,
+                            meshname,
+                            &spacedim,
+                            &meshdim,
+                            &meshtype,
+                            descriptionription,
+                            dtunit,
+                            &sortingtype,
+                            &nstep,
+                            &axistype,
+                            axisname,
+                            axisunit);
+    delete[] axisname;
+    delete[] axisunit;
+    if (erreur < 0) { break; }
+
+    // Nombre de noeuds
+    med_bool chgt,trsf;
+    med_int nnoe  = MEDmeshnEntity(medIdt,
+                              meshname,
+                              MED_NO_DT,
+                              MED_NO_IT,
+                              MED_NODE,
+                              MED_NO_GEOTYPE,
+                              MED_COORDINATE,
+                              MED_NO_CMODE,
+                              &chgt,
+                              &trsf);
+    if (nnoe < 0) {
+      erreur =  4;
+      break;
+    }
+
+    // Les coordonnees
+    med_float* coo = (med_float*) malloc(sizeof(med_float)*nnoe*spacedim);
+
+    erreur = MEDmeshNodeCoordinateRd(medIdt,
+                                      meshname,
+                                      MED_NO_DT,
+                                      MED_NO_IT,
+                                      MED_NO_INTERLACE,
+                                      coo);
+    if (erreur < 0) {
+      free(coo);
+      break;
+    }
+
+    // Calcul des extremes
+    med_float xmin,xmax,ymin,ymax,zmin,zmax;
+
+    xmin = coo[0];
+    xmax = coo[0];
+    for (int i = 1; i < nnoe; i++) {
+      xmin = std::min(xmin, coo[i]);
+      xmax = std::max(xmax, coo[i]);
+    }
+    //
+    if (spacedim > 1) {
+      ymin = coo[nnoe];
+      ymax = coo[nnoe];
+      for (int i = nnoe + 1; i < 2*nnoe; i++) {
+        ymin = std::min(ymin,coo[i]);
+        ymax = std::max(ymax,coo[i]);
+      }
+    }
+    else {
+      ymin = 0;
+      ymax = 0;
+      zmin = 0;
+      zmax = 0;
+    }
+    //
+    if (spacedim > 2) {
+      zmin = coo[2*nnoe];
+      zmax = coo[2*nnoe];
+      for (int i = 2*nnoe + 1; i < 3*nnoe; i++) {
+        zmin = std::min(zmin,coo[i]);
+        zmax = std::max(zmax,coo[i]);
+      }
+    }
+    else {
+      zmin = 0;
+      zmax = 0;
+    }
+
+    MESSAGE("_______________________________________");
+    MESSAGE("xmin : " << xmin << " xmax : " << xmax);
+    MESSAGE("ymin : " << ymin << " ymax : " << ymax);
+    MESSAGE("zmin : " << zmin << " zmax : " << zmax);
+    MESSAGE("_______________________________________");
+    double epsilon = 1.e-6;
+    LesExtremes.push_back(xmin);
+    LesExtremes.push_back(xmax);
+    LesExtremes.push_back(0);
+    LesExtremes.push_back(ymin);
+    LesExtremes.push_back(ymax);
+    LesExtremes.push_back(0);
+    LesExtremes.push_back(zmin);
+    LesExtremes.push_back(zmax);
+    LesExtremes.push_back(0);
+
+    double max1 = std::max (LesExtremes[1] - LesExtremes[0], LesExtremes[4] - LesExtremes[3]);
+    double max2 = std::max (max1 , LesExtremes[7] - LesExtremes[6]);
+    LesExtremes.push_back(max2);
+
+    // LesExtremes[0] = Xmini du maillage
+    // LesExtremes[1] = Xmaxi du maillage
+    // LesExtremes[2] = increment de progression en X
+    // LesExtremes[3,4,5] : idem pour Y
+    // LesExtremes[6,7,8] : idem pour Z
+    // LesExtremes[9] = ecart maximal entre coordonnees
+    // On fait un traitement pour dans le cas d'une coordonnee constante
+    // inhiber ce cas en mettant un increment negatif
+    //
+    double diff = LesExtremes[1] - LesExtremes[0];
+    if (fabs(diff) > epsilon*max2) { LesExtremes[2] = diff/100.; }
+    else                           { LesExtremes[2] = -1.; }
+
+    diff = LesExtremes[4] - LesExtremes[3];
+    if (fabs(diff) > epsilon*max2) { LesExtremes[5]=diff/100.; }
+    else                           { LesExtremes[5] = -1.; }
+
+    diff = LesExtremes[7] - LesExtremes[6];
+    if (fabs(diff) > epsilon*max2) { LesExtremes[8]=diff/100.; }
+    else                           { LesExtremes[8] = -1.;  }
+
+    MESSAGE ("_______________________________________");
+    MESSAGE ("xmin : " << LesExtremes[0] << " xmax : " << LesExtremes[1] << " xincr : " << LesExtremes[2]);
+    MESSAGE ("ymin : " << LesExtremes[3] << " ymax : " << LesExtremes[4] << " yincr : " << LesExtremes[5]);
+    MESSAGE ("zmin : " << LesExtremes[6] << " zmax : " << LesExtremes[7] << " zincr : " << LesExtremes[8]);
+    MESSAGE ("dmax : " << LesExtremes[9]);
+    MESSAGE ("_______________________________________");
+
+    free(coo);
+    break;
+  }
+  // Fermeture du fichier
+  if (medIdt > 0) MEDfileClose(medIdt);
+
+  return  LesExtremes;
+}
+
+}; // namespace SMESHHOMARD_I
diff --git a/src/SMESH_I/SMESH_Homard_i.hxx b/src/SMESH_I/SMESH_Homard_i.hxx
new file mode 100644 (file)
index 0000000..3e85a26
--- /dev/null
@@ -0,0 +1,310 @@
+// Copyright (C) 2011-2024  CEA, EDF
+//
+// 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 _SMESH_HOMARD_I_HXX_
+#define _SMESH_HOMARD_I_HXX_
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_Homard)
+#include CORBA_CLIENT_HEADER(SALOMEDS)
+#include CORBA_CLIENT_HEADER(SALOMEDS_Attributes)
+#include CORBA_CLIENT_HEADER(SALOME_ModuleCatalog)
+#include CORBA_CLIENT_HEADER(SMESH_Gen)
+#include CORBA_CLIENT_HEADER(SMESH_Mesh)
+
+#include "SMESH.hxx"
+#include "SMESH_Homard.hxx"
+//#include "FrontTrack.hxx"
+#include "SALOME_Component_i.hxx"
+#include "SALOME_NamingService.hxx"
+#include "Utils_CorbaException.hxx"
+
+#include <map>
+#include <set>
+#include <string>
+#include <vector>
+
+namespace SMESHHOMARD_I
+{
+
+class SMESH_I_EXPORT HOMARD_Boundary_i : public virtual SALOME::GenericObj_i,
+                                         public virtual POA_SMESHHOMARD::HOMARD_Boundary
+{
+public:
+  HOMARD_Boundary_i(SMESHHOMARD::HOMARD_Gen_var gen_i);
+  HOMARD_Boundary_i();
+
+  virtual ~HOMARD_Boundary_i();
+
+  // Generalites
+  void                   SetName(const char* Name);
+  char*                  GetName();
+
+  char*                  GetDumpPython();
+
+  // Caracteristiques
+  void                   SetType(CORBA::Long Type);
+  CORBA::Long            GetType();
+
+  void                   SetMeshName(const char* MeshName);
+  char*                  GetMeshName();
+
+  void                   SetDataFile(const char* DataFile);
+  char*                  GetDataFile();
+
+  void                   SetCylinder(double Xcentre, double Ycentre, double ZCentre,
+                                      double Xaxe, double Yaxe, double Zaxe,
+                                      double rayon);
+  void                   SetSphere(double Xcentre, double Ycentre, double ZCentre,
+                                    double rayon);
+  void                   SetConeR(double Xcentre1, double Ycentre1, double Zcentre1, double Rayon1,
+                                   double Xcentre2, double Ycentre2, double Zcentre2, double Rayon2);
+  void                   SetConeA(double Xaxe, double Yaxe, double Zaxe, double Angle,
+                                   double Xcentre, double Ycentre, double ZCentre);
+  void                   SetTorus(double Xcentre, double Ycentre, double ZCentre,
+                                      double Xaxe, double Yaxe, double Zaxe,
+                                      double rayonRev, double rayonPri);
+
+  SMESHHOMARD::double_array*  GetCoords();
+
+  void                   SetLimit(double Xincr, double Yincr, double Zincr);
+  SMESHHOMARD::double_array*  GetLimit();
+
+  void                   AddGroup(const char* Group);
+  void                   SetGroups(const SMESHHOMARD::ListGroupType& ListGroup);
+  SMESHHOMARD::ListGroupType* GetGroups();
+
+private:
+  SMESHHOMARDImpl::HOMARD_Boundary* myHomardBoundary;
+  SMESHHOMARD::HOMARD_Gen_var _gen_i;
+};
+
+class SMESH_I_EXPORT HOMARD_Cas_i : public virtual SALOME::GenericObj_i,
+                                    public virtual POA_SMESHHOMARD::HOMARD_Cas
+{
+public:
+  HOMARD_Cas_i(SMESHHOMARD::HOMARD_Gen_var gen_i);
+  HOMARD_Cas_i();
+
+  virtual ~HOMARD_Cas_i();
+
+  char* GetDumpPython();
+
+  // Caracteristiques
+  void  SetDirName(const char* NomDir);
+  char* GetDirName();
+
+  void                  SetBoundingBox(const SMESHHOMARD::extrema& LesExtremes);
+  SMESHHOMARD::extrema* GetBoundingBox();
+
+  void AddGroup(const char* Group);
+  void SetGroups(const SMESHHOMARD::ListGroupType& ListGroup);
+  SMESHHOMARD::ListGroupType* GetGroups();
+
+  void AddBoundary(const char* Boundary);
+  void AddBoundaryGroup(const char* Boundary, const char* Group);
+  SMESHHOMARD::ListBoundaryGroupType* GetBoundaryGroup();
+  void SupprBoundaryGroup();
+
+  void AddIteration(const char* NomIteration);
+
+private:
+  SMESHHOMARDImpl::HOMARD_Cas* myHomardCas;
+  SMESHHOMARD::HOMARD_Gen_var _gen_i;
+};
+
+class SMESH_I_EXPORT HOMARD_Iteration_i
+{
+public:
+  HOMARD_Iteration_i(SMESHHOMARD::HOMARD_Gen_var gen_i);
+  HOMARD_Iteration_i();
+
+  virtual ~HOMARD_Iteration_i();
+
+  // Generalites
+  void                   SetName(const char* Name);
+  char*                  GetName();
+
+  // Caracteristiques
+  void                   SetDirNameLoc(const char* NomDir);
+  char*                  GetDirNameLoc();
+
+  char*                  GetDirName();
+
+  void                   SetNumber(CORBA::Long NumIter);
+  CORBA::Long            GetNumber();
+
+  void                   SetState(CORBA::Long etat);
+  CORBA::Long            GetState();
+
+  void                   SetMeshName(const char* NomMesh);
+  char*                  GetMeshName();
+
+  void                   SetMeshFile(const char* MeshFile);
+  char*                  GetMeshFile();
+
+  void                   SetLogFile(const char* LogFile);
+  char*                  GetLogFile();
+
+  void                   SetFileInfo(const char* FileInfo);
+  char*                  GetFileInfo();
+
+  // Liens avec les autres structures
+  void                   SetCaseName(const char* NomCas);
+  char*                  GetCaseName();
+
+  // Drivers
+  void                   SetInfoCompute(CORBA::Long MessInfo);
+  CORBA::Long            GetInfoCompute();
+
+private:
+  SMESHHOMARDImpl::HOMARD_Iteration* myHomardIteration;
+  SMESHHOMARD::HOMARD_Gen_var _gen_i;
+};
+
+class SMESH_I_EXPORT HOMARD_Gen_i : public virtual SALOME::GenericObj_i,
+                                    public virtual POA_SMESHHOMARD::HOMARD_Gen
+{
+public:
+  HOMARD_Gen_i();
+  virtual ~HOMARD_Gen_i();
+
+  // Les creations
+  SMESHHOMARD::HOMARD_Boundary_ptr CreateBoundary (const char* nomBoundary,
+                                                   CORBA::Long typeBoundary);
+  SMESHHOMARD::HOMARD_Boundary_ptr CreateBoundaryCAO (const char* nomBoundary,
+                                                      const char* DataFile);
+  SMESHHOMARD::HOMARD_Boundary_ptr CreateBoundaryDi (const char* nomBoundary,
+                                                     const char* MeshName, const char* DataFile);
+  SMESHHOMARD::HOMARD_Boundary_ptr CreateBoundaryCylinder
+    (const char* nomBoundary,
+     CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre,
+     CORBA::Double Xaxis, CORBA::Double Yaxis, CORBA::Double Zaxis,
+     CORBA::Double Rayon);
+  SMESHHOMARD::HOMARD_Boundary_ptr CreateBoundarySphere
+    (const char* nomBoundary,
+     CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre,
+     CORBA::Double Rayon);
+  SMESHHOMARD::HOMARD_Boundary_ptr CreateBoundaryConeR
+    (const char* nomBoundary,
+     CORBA::Double Xcentre1, CORBA::Double Ycentre1, CORBA::Double Zcentre1,
+     CORBA::Double Rayon1,
+     CORBA::Double Xcentre2, CORBA::Double Ycentre2, CORBA::Double Zcentre2,
+     CORBA::Double Rayon2);
+  SMESHHOMARD::HOMARD_Boundary_ptr CreateBoundaryConeA
+    (const char* nomBoundary,
+     CORBA::Double Xaxis, CORBA::Double Yaxis, CORBA::Double Zaxis,
+     CORBA::Double Angle,
+     CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre);
+  SMESHHOMARD::HOMARD_Boundary_ptr CreateBoundaryTorus
+    (const char* nomBoundary,
+     CORBA::Double Xcentre, CORBA::Double Ycentre, CORBA::Double Zcentre,
+     CORBA::Double Xaxis, CORBA::Double Yaxis, CORBA::Double Zaxis,
+     CORBA::Double RayonRev, CORBA::Double RayonPri);
+
+  SMESHHOMARD::HOMARD_Cas_ptr CreateCaseOnMesh (const char* MeshName,
+                                                SMESH::SMESH_Mesh_ptr smeshMesh,
+                                                const char* theWorkingDir);
+  SMESHHOMARD::HOMARD_Cas_ptr CreateCase (const char* MeshName,
+                                          const char* FileName,
+                                          const char* theWorkingDir);
+
+  HOMARD_Iteration_i* CreateIteration();
+
+  // Les informations
+  SMESHHOMARD::HOMARD_Boundary_ptr  GetBoundary  (const char* nomBoundary);
+  SMESHHOMARD::HOMARD_Cas_ptr       GetCase      ();
+  HOMARD_Iteration_i* GetIteration (CORBA::Long numIter);
+
+  SMESHHOMARD::listeBoundarys* GetAllBoundarysName();
+
+  void InvalideBoundary(const char* nomBoundary);
+
+  CORBA::Long DeleteBoundary(const char* nomBoundary);
+  void        DeleteCase();
+  CORBA::Long DeleteIteration(int numIter);
+
+  void AddBoundary(const char* Boundary);
+  void AddBoundaryGroup(const char* Boundary, const char* Group);
+
+  void AssociateCaseIter(int numIter, const char* labelIter);
+  char* CreateDirNameIter(const char* nomrep, CORBA::Long num);
+
+  CORBA::Long Compute();
+  CORBA::Long ComputeAdap(SMESHHOMARDImpl::HomardDriver* myDriver);
+  CORBA::Long ComputeCAO();
+  CORBA::Long ComputeCAObis();
+  char* ComputeDirManagement();
+  char* ComputeDirPaManagement();
+  int   DriverTexteBoundary(SMESHHOMARDImpl::HomardDriver* myDriver);
+
+  void PublishResultInSmesh(const char* NomFich);
+  void DeleteResultInSmesh(std::string NomFich, std::string MeshName);
+
+  void PythonDump();
+
+  // Preferences
+  void SetConfType (CORBA::Long theConfType);
+  void SetKeepMedOUT (bool theKeepMedOUT);
+  void SetPublishMeshOUT (bool thePublishMeshOUT);
+  void SetMeshNameOUT (const char* theMeshNameOUT);
+  void SetMeshFileOUT (const char* theMeshFileOUT);
+
+  void SetVerboseLevel (CORBA::Long theVerboseLevel);
+  void SetKeepWorkingFiles(bool theKeepWorkingFiles);
+  void SetLogInFile(bool theLogInFile);
+  void SetLogFile (const char* theLogFile);
+  void SetRemoveLogOnSuccess(bool theRemoveLogOnSuccess);
+
+private:
+  SMESHHOMARD::HOMARD_Boundary_ptr newBoundary();
+  SMESHHOMARD::HOMARD_Cas_ptr      newCase();
+  HOMARD_Iteration_i*              newIteration();
+
+private:
+  SMESHHOMARDImpl::HOMARD_Gen* myHomard;
+  HOMARD_Iteration_i*          myIteration0;
+  HOMARD_Iteration_i*          myIteration1;
+  SMESHHOMARD::HOMARD_Cas_var  myCase;
+  std::map<std::string, SMESHHOMARD::HOMARD_Boundary_var> _mesBoundarys;
+
+  // Preferences
+  int  _ConfType; // Le type de conformite ou non conformite
+  bool _KeepMedOUT;
+  bool _PublishMeshOUT;
+  bool _KeepWorkingFiles;
+  bool _LogInFile;
+  bool _RemoveLogOnSuccess;
+  int         _VerboseLevel;
+  std::string _MeshNameOUT;
+  std::string _MeshFileOUT;
+  std::string _LogFile;
+
+  // Input data type
+  bool _CaseOnMedFile;
+  SMESH::SMESH_Mesh_var _SmeshMesh;
+  std::string _TmpMeshFile;
+};
+
+SMESH_I_EXPORT std::vector<double>   GetBoundingBoxInMedFile(const char * aFile);
+SMESH_I_EXPORT std::set<std::string> GetListeGroupesInMedFile(const char * aFile);
+
+}; // namespace SMESHHOMARD_I
+
+#endif
index fae136798babbda3ea2b366ca41dcd38fbd11fa5..7dca0ac18e0ab42aeca671c09b3319c2dac7e4ca 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -114,7 +114,7 @@ void SMESH_Hypothesis_i::SetLibName(const char* theLibName)
  */
 //=============================================================================
 
-CORBA::Long SMESH_Hypothesis_i::GetId()
+CORBA::Short SMESH_Hypothesis_i::GetId()
 {
   return myBaseImpl->GetID();
 }
@@ -130,7 +130,7 @@ bool SMESH_Hypothesis_i::IsPublished()
   bool res = false;
   if ( SMESH_Gen_i::GetSMESHGen() )
   {
-    SALOMEDS::SObject_wrap SO = SMESH_Gen_i::ObjectToSObject( _this());
+    SALOMEDS::SObject_wrap SO = SMESH_Gen_i::GetSMESHGen()->ObjectToSObject( _this());
     res = !SO->_is_nil();
   }
   return res;
index 0fcc83ca82b0b8deafc303af62192831cdd44c1f..1c778582838c72ff3873a684117b7f7b567e5d0f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -69,7 +69,7 @@ public:
   void SetLibName( const char* theLibName );
 
   // Get unique id of hypothesis
-  virtual CORBA::Long GetId();
+  virtual CORBA::Short GetId();
 
   // Return true if a hypothesis has parameters
   virtual CORBA::Boolean HasParameters();
index 20f62446e4299c8618b1e8fba191b70304dc53fb..3ff5343d6e12790a942956de82753405b6e433f1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //  File   : SMESH_Measurements_i.cxx
 //  Author : Pavel TELKOV, Open CASCADE S.A.S. (pavel.telkov@opencascade.com)
 
-#ifdef WIN32
-#define NOMINMAX
-#endif
-
 #include "SMESH_Measurements_i.hxx"
 
 #include "SMDS_ElemIterator.hxx"
@@ -40,7 +36,7 @@
 
 #include <cmath>
 
-using namespace SMESH;
+//using namespace SMESH;
 
 /**
  * this local function to avoid uninitialized fields
@@ -80,7 +76,7 @@ SMESH::Measurements_ptr SMESH_Gen_i::CreateMeasurements()
 // name    : Measurements_i
 // Purpose : Constructor
 //=======================================================================
-Measurements_i::Measurements_i()
+SMESH::Measurements_i::Measurements_i()
 : SALOME::GenericObj_i( SMESH_Gen_i::GetPOA() )
 {
   //Base class Salome_GenericObject do it inmplicitly by overriding PortableServer::POA_ptr _default_POA() method
@@ -92,7 +88,7 @@ Measurements_i::Measurements_i()
 // name    : ~Measurements_i
 // Purpose : Destructor
 //=======================================================================
-Measurements_i::~Measurements_i()
+SMESH::Measurements_i::~Measurements_i()
 {
   //TPythonDump()<<this<<".UnRegister()";
 }
@@ -152,7 +148,7 @@ static SMESHDS_Mesh* getMesh(SMESH::SMESH_IDSource_ptr theSource)
   if (!CORBA::is_nil( theSource ))
   {
     SMESH::SMESH_Mesh_var mesh = theSource->GetMesh();
-    SMESH_Mesh_i* anImplPtr = DownCast<SMESH_Mesh_i*>( mesh );
+    SMESH_Mesh_i* anImplPtr = SMESH::DownCast<SMESH_Mesh_i*>( mesh );
     if (anImplPtr)
       return anImplPtr->GetImpl().GetMeshDS();
   }
@@ -174,7 +170,7 @@ static double getNumericalValue(SMESH::SMESH_IDSource_ptr            theSource,
     if ( aMesh ) {
       theFunctor->SetMesh( aMesh );
       
-      SMESH::long_array_var anElementsId = theSource->GetIDs();
+      SMESH::smIdType_array_var anElementsId = theSource->GetIDs();
       for ( CORBA::ULong i = 0; i < anElementsId->length(); i++) {
         value += theFunctor->GetValue( anElementsId[i] );
       }
@@ -187,7 +183,7 @@ static double getNumericalValue(SMESH::SMESH_IDSource_ptr            theSource,
 // name    : MinDistance
 // Purpose : minimal distance between two given entities
 //=======================================================================
-SMESH::Measure Measurements_i::MinDistance
+SMESH::Measure SMESH::Measurements_i::MinDistance
  (SMESH::SMESH_IDSource_ptr theSource1,
   SMESH::SMESH_IDSource_ptr theSource2)
 {
@@ -209,8 +205,8 @@ SMESH::Measure Measurements_i::MinDistance
   bool isNode1 = isNodeType(types1);
   bool isNode2 = isOrigin || isNodeType(types2);
 
-  SMESH::long_array_var aElementsId1 = theSource1->GetIDs();
-  SMESH::long_array_var aElementsId2;
+  SMESH::smIdType_array_var aElementsId1 = theSource1->GetIDs();
+  SMESH::smIdType_array_var aElementsId2;
 
   // compute distance between two entities
   /* NOTE: currently only node-to-node case is implemented
@@ -289,7 +285,7 @@ static void enlargeBoundingBox(const SMESH::SMESH_IDSource_ptr theObject,
   if ( !aMesh )
     return;
 
-  if ( DownCast<SMESH_Mesh_i*>( theObject )) // theObject is mesh
+  if (SMESH::DownCast<SMESH_Mesh_i*>( theObject )) // theObject is mesh
   {
     for (SMDS_NodeIteratorPtr aNodeIter = aMesh->nodesIterator(); aNodeIter->more(); )
       enlargeBoundingBox( aNodeIter->next(), theMeasure);
@@ -297,7 +293,7 @@ static void enlargeBoundingBox(const SMESH::SMESH_IDSource_ptr theObject,
   else
   {
     SMESH::array_of_ElementType_var types = theObject->GetTypes();
-    SMESH::long_array_var     aElementsId = theObject->GetIDs();
+    SMESH::smIdType_array_var aElementsId = theObject->GetIDs();
     // here we assume that type of all IDs defined by first type in array
     const bool isNode = isNodeType( types );
     for(int i = 0, n = aElementsId->length(); i < n; i++)
@@ -318,7 +314,7 @@ static void enlargeBoundingBox(const SMESH::SMESH_IDSource_ptr theObject,
 // name    : BoundingBox
 // Purpose : compute common bounding box of entities
 //=======================================================================
-SMESH::Measure Measurements_i::BoundingBox (const SMESH::ListOfIDSources& theSources)
+SMESH::Measure SMESH::Measurements_i::BoundingBox (const SMESH::ListOfIDSources& theSources)
 {
   SMESH::Measure aMeasure;
   initMeasure(aMeasure);
@@ -334,7 +330,7 @@ SMESH::Measure Measurements_i::BoundingBox (const SMESH::ListOfIDSources& theSou
 // name    : Length
 // Purpose : sum of length of 1D elements of the source
 //=======================================================================
-double Measurements_i::Length(SMESH::SMESH_IDSource_ptr theSource)
+double SMESH::Measurements_i::Length(SMESH::SMESH_IDSource_ptr theSource)
 {
   return getNumericalValue( theSource, SMESH::Controls::NumericalFunctorPtr(new SMESH::Controls::Length()) );
 }
@@ -343,7 +339,7 @@ double Measurements_i::Length(SMESH::SMESH_IDSource_ptr theSource)
 // name    : Area
 // Purpose : sum of area of 2D elements of the source
 //=======================================================================
-double Measurements_i::Area(SMESH::SMESH_IDSource_ptr theSource)
+double SMESH::Measurements_i::Area(SMESH::SMESH_IDSource_ptr theSource)
 {
   return getNumericalValue( theSource, SMESH::Controls::NumericalFunctorPtr(new SMESH::Controls::Area()) );
 }
@@ -352,7 +348,7 @@ double Measurements_i::Area(SMESH::SMESH_IDSource_ptr theSource)
 // name    : Volume
 // Purpose : sum of volume of 3D elements of the source
 //=======================================================================
-double Measurements_i::Volume(SMESH::SMESH_IDSource_ptr theSource)
+double SMESH::Measurements_i::Volume(SMESH::SMESH_IDSource_ptr theSource)
 {
   return getNumericalValue( theSource, SMESH::Controls::NumericalFunctorPtr(new SMESH::Controls::Volume()) );
 }
@@ -362,7 +358,7 @@ double Measurements_i::Volume(SMESH::SMESH_IDSource_ptr theSource)
 //purpose  : return gravity center of the source: average coordinates of all nodes
 //=======================================================================
 
-SMESH::PointStruct Measurements_i::GravityCenter(SMESH::SMESH_IDSource_ptr theSource)
+SMESH::PointStruct SMESH::Measurements_i::GravityCenter(SMESH::SMESH_IDSource_ptr theSource)
 {
   SMESH::PointStruct grCenter = { 0.,0.,0. };
   const SMESHDS_Mesh* mesh = getMesh( theSource );
@@ -404,9 +400,9 @@ SMESH::PointStruct Measurements_i::GravityCenter(SMESH::SMESH_IDSource_ptr theSo
 //purpose  : Return angle in radians defined by 3 points <(p1,p2,p3)
 //=======================================================================
 
-CORBA::Double Measurements_i::Angle(const SMESH::PointStruct& p1,
-                                    const SMESH::PointStruct& p2,
-                                    const SMESH::PointStruct& p3 )
+CORBA::Double SMESH::Measurements_i::Angle(const SMESH::PointStruct& p1,
+                                           const SMESH::PointStruct& p2,
+                                           const SMESH::PointStruct& p3 )
 {
   gp_Vec v1( p1.x - p2.x, p1.y - p2.y, p1.z - p2.z );
   gp_Vec v2( p3.x - p2.x, p3.y - p2.y, p3.z - p2.z );
index c1053f4b8a74a169bfd892e53b62bee0a3c837fe..50af085d123c4f289a3e02286d9604ce9742b192 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index d542d9c85ac4e29210a0f39c945615b3daea1db1..eea74a45445027150db035bc5a46929aeaf6b6ac 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -102,7 +102,7 @@ namespace MeshEditor_I {
     //!< Constructor
     TPreviewMesh(SMDSAbs_ElementType previewElements = SMDSAbs_All) {
       _isShapeToMesh = (_id = 0);
-      _myMeshDS  = new SMESHDS_Mesh( _id, true );
+      _meshDS  = new SMESHDS_Mesh( _id, true );
       myPreviewType = previewElements;
     }
     //!< Copy a set of elements
@@ -135,9 +135,9 @@ namespace MeshEditor_I {
     {
       // copy element nodes
       int anElemNbNodes = anElem->NbNodes();
-      vector< int > anElemNodesID( anElemNbNodes ) ;
+      vector< smIdType > anElemNodesID( anElemNbNodes ) ;
       SMDS_ElemIteratorPtr itElemNodes = anElem->nodesIterator();
-      for ( int i = 0; itElemNodes->more(); i++)
+      for ( smIdType i = 0; itElemNodes->more(); i++)
       {
         const SMDS_MeshNode* anElemNode = cast2Node( itElemNodes->next() );
         Copy( anElemNode );
@@ -155,8 +155,8 @@ namespace MeshEditor_I {
     //!< Copy a node
     SMDS_MeshNode* Copy( const SMDS_MeshNode* anElemNode )
     {
-      return _myMeshDS->AddNodeWithID(anElemNode->X(), anElemNode->Y(), anElemNode->Z(),
-                                      anElemNode->GetID());
+      return _meshDS->AddNodeWithID(anElemNode->X(), anElemNode->Y(), anElemNode->Z(),
+                                    anElemNode->GetID());
     }
     void RemoveAll()
     {
@@ -264,11 +264,11 @@ namespace MeshEditor_I {
    */
   //================================================================================
 
-  void arrayToSet(const SMESH::long_array & IDs,
-                  const SMESHDS_Mesh*       aMesh,
-                  TIDSortedElemSet&         aMap,
-                  const SMDSAbs_ElementType aType = SMDSAbs_All,
-                  SMDS_MeshElement::Filter* aFilter = NULL)
+  void arrayToSet(const SMESH::smIdType_array & IDs,
+                  const SMESHDS_Mesh*           aMesh,
+                  TIDSortedElemSet&             aMap,
+                  const SMDSAbs_ElementType     aType = SMDSAbs_All,
+                  SMDS_MeshElement::Filter*     aFilter = NULL)
   {
     SMDS_MeshElement::NonNullFilter filter1;
     SMDS_MeshElement::TypeFilter    filter2( aType );
@@ -314,7 +314,7 @@ namespace MeshEditor_I {
     else
     {
       SMESH::array_of_ElementType_var types = theObject->GetTypes();
-      SMESH::long_array_var     aElementsId = theObject->GetIDs();
+      SMESH::smIdType_array_var aElementsId = theObject->GetIDs();
       if ( types->length() == 1 && types[0] == SMESH::NODE)
       {
         for ( CORBA::ULong i = 0; i < aElementsId->length(); i++ )
@@ -573,7 +573,7 @@ SMESH::MeshPreviewStruct* SMESH_MeshEditor_i::GetPreviewData()
          aMeshElem->nodeIterator() );
       while ( itElemNodes->more() ) {
         const SMDS_MeshNode* aMeshNode = itElemNodes->next();
-        int aNodeID = aMeshNode->GetID();
+        smIdType aNodeID = aMeshNode->GetID();
         TNodesMap::iterator anIter = nodesMap.find(aNodeID);
         if ( anIter == nodesMap.end() ) {
           // filling the nodes coordinates
@@ -615,10 +615,10 @@ SMESH::MeshPreviewStruct* SMESH_MeshEditor_i::GetPreviewData()
  */
 //================================================================================
 
-SMESH::long_array* SMESH_MeshEditor_i::GetLastCreatedNodes()
+SMESH::smIdType_array* SMESH_MeshEditor_i::GetLastCreatedNodes()
 {
   SMESH_TRY;
-  SMESH::long_array_var myLastCreatedNodes = new SMESH::long_array();
+  SMESH::smIdType_array_var myLastCreatedNodes = new SMESH::smIdType_array();
 
   const SMESH_SequenceOfElemPtr& aSeq = getEditor().GetLastCreatedNodes();
   myLastCreatedNodes->length( aSeq.size() );
@@ -637,10 +637,10 @@ SMESH::long_array* SMESH_MeshEditor_i::GetLastCreatedNodes()
  */
 //================================================================================
 
-SMESH::long_array* SMESH_MeshEditor_i::GetLastCreatedElems()
+SMESH::smIdType_array* SMESH_MeshEditor_i::GetLastCreatedElems()
 {
   SMESH_TRY;
-  SMESH::long_array_var myLastCreatedElems = new SMESH::long_array();
+  SMESH::smIdType_array_var myLastCreatedElems = new SMESH::smIdType_array();
 
   const SMESH_SequenceOfElemPtr& aSeq = getEditor().GetLastCreatedElems();
   myLastCreatedElems->length( aSeq.size() );
@@ -704,16 +704,16 @@ SMESH::ComputeError* SMESH_MeshEditor_i::GetLastError()
 struct SMESH_MeshEditor_i::_IDSource : public virtual POA_SMESH::SMESH_IDSource,
                                        public virtual SALOME::GenericObj_i
 {
-  SMESH::long_array     _ids;
-  SMESH::ElementType    _type;
-  SMESH::SMESH_Mesh_ptr _mesh;
-  SMESH::long_array* GetIDs()      { return new SMESH::long_array( _ids ); }
-  SMESH::long_array* GetMeshInfo() { return 0; }
-  SMESH::long_array* GetNbElementsByType()
+  SMESH::smIdType_array     _ids;
+  SMESH::ElementType        _type;
+  SMESH::SMESH_Mesh_ptr     _mesh;
+  SMESH::smIdType_array*    GetIDs()      { return new SMESH::smIdType_array( _ids ); }
+  SMESH::smIdType_array* GetMeshInfo() { return 0; }
+  SMESH::smIdType_array* GetNbElementsByType()
   {
-    SMESH::long_array_var aRes = new SMESH::long_array();
+    SMESH::smIdType_array_var aRes = new SMESH::smIdType_array();
     aRes->length(SMESH::NB_ELEMENT_TYPES);
-    for (int i = 0; i < SMESH::NB_ELEMENT_TYPES; i++)
+    for (smIdType i = 0; i < SMESH::NB_ELEMENT_TYPES; i++)
       aRes[ i ] = ( i == _type ) ? _ids.length() : 0;
     return aRes._retn();  
   }
@@ -735,8 +735,8 @@ struct SMESH_MeshEditor_i::_IDSource : public virtual POA_SMESH::SMESH_IDSource,
   }
 };
 
-SMESH::SMESH_IDSource_ptr SMESH_MeshEditor_i::MakeIDSource(const SMESH::long_array& ids,
-                                                           SMESH::ElementType       type)
+SMESH::SMESH_IDSource_ptr SMESH_MeshEditor_i::MakeIDSource(const SMESH::smIdType_array& ids,
+                                                           SMESH::ElementType           type)
 {
   _IDSource* idSrc = new _IDSource;
   idSrc->_mesh = myMesh_i->_this();
@@ -755,12 +755,12 @@ bool SMESH_MeshEditor_i::IsTemporaryIDSource( SMESH::SMESH_IDSource_ptr& idSourc
   return SMESH::DownCast<SMESH_MeshEditor_i::_IDSource*>( idSource );
 }
 
-CORBA::Long* SMESH_MeshEditor_i::GetTemporaryIDs( SMESH::SMESH_IDSource_ptr& idSource,
-                                                  int&                       nbIds)
+SMESH::smIdType* SMESH_MeshEditor_i::GetTemporaryIDs( SMESH::SMESH_IDSource_ptr& idSource,
+                                                      SMESH::smIdType&           nbIds)
 {
   if ( _IDSource* tmpIdSource = SMESH::DownCast<SMESH_MeshEditor_i::_IDSource*>( idSource ))
   {
-    nbIds = (int) tmpIdSource->_ids.length();
+    nbIds = (SMESH::smIdType) tmpIdSource->_ids.length();
     return & tmpIdSource->_ids[0];
   }
   nbIds = 0;
@@ -782,12 +782,12 @@ CORBA::Long* SMESH_MeshEditor_i::GetTemporaryIDs( SMESH::SMESH_IDSource_ptr& idS
 //=============================================================================
 
 CORBA::Boolean
-SMESH_MeshEditor_i::RemoveElements(const SMESH::long_array & IDsOfElements)
+SMESH_MeshEditor_i::RemoveElements(const SMESH::smIdType_array & IDsOfElements)
 {
   SMESH_TRY;
   initData();
 
-  list< int > IdList;
+  list< smIdType > IdList;
 
   for ( CORBA::ULong i = 0; i < IDsOfElements.length(); i++ )
     IdList.push_back( IDsOfElements[i] );
@@ -811,12 +811,12 @@ SMESH_MeshEditor_i::RemoveElements(const SMESH::long_array & IDsOfElements)
  */
 //=============================================================================
 
-CORBA::Boolean SMESH_MeshEditor_i::RemoveNodes(const SMESH::long_array & IDsOfNodes)
+CORBA::Boolean SMESH_MeshEditor_i::RemoveNodes(const SMESH::smIdType_array & IDsOfNodes)
 {
   SMESH_TRY;
   initData();
 
-  list< int > IdList;
+  list< smIdType > IdList;
   for ( CORBA::ULong i = 0; i < IDsOfNodes.length(); i++)
     IdList.push_back( IDsOfNodes[i] );
 
@@ -834,11 +834,11 @@ CORBA::Boolean SMESH_MeshEditor_i::RemoveNodes(const SMESH::long_array & IDsOfNo
 
 //=============================================================================
 /*!
- *
+ * Remove orphan nodes
  */
 //=============================================================================
 
-CORBA::Long SMESH_MeshEditor_i::RemoveOrphanNodes()
+SMESH::smIdType SMESH_MeshEditor_i::RemoveOrphanNodes()
 {
   SMESH_TRY;
   initData();
@@ -852,11 +852,11 @@ CORBA::Long SMESH_MeshEditor_i::RemoveOrphanNodes()
   SMESH::Controls::Filter::GetElementsId( getMeshDS(), predicate, seq );
 
   // remove orphan nodes (if there are any)
-  list< int > IdList( seq.begin(), seq.end() );
+  list< smIdType > IdList( seq.begin(), seq.end() );
 
-  int nbNodesBefore = myMesh->NbNodes();
+  SMESH::smIdType nbNodesBefore = myMesh->NbNodes();
   getEditor().Remove( IdList, true );
-  int nbNodesAfter = myMesh->NbNodes();
+  SMESH::smIdType nbNodesAfter = myMesh->NbNodes();
 
   declareMeshModified( /*isReComputeSafe=*/ IdList.size() == 0 ); // issue 0020693
   return nbNodesBefore - nbNodesAfter;
@@ -865,13 +865,65 @@ CORBA::Long SMESH_MeshEditor_i::RemoveOrphanNodes()
   return 0;
 }
 
+//=============================================================================
+/*!
+ * Remove a node and fill a hole appeared by changing surrounding faces
+ */
+//=============================================================================
+
+void SMESH_MeshEditor_i::RemoveNodeWithReconnection( SMESH::smIdType nodeID )
+{
+  SMESH_TRY;
+  initData();
+
+  const SMDS_MeshNode * node = getMeshDS()->FindNode( nodeID );
+  if ( ! node )
+    THROW_SALOME_CORBA_EXCEPTION( SMESH_Comment( "Invalid node ID ") << nodeID,
+                                  SALOME::BAD_PARAM);
+  if ( node->NbInverseElements( SMDSAbs_Volume ) > 0 )
+    THROW_SALOME_CORBA_EXCEPTION( "RemoveNodeWithReconnection() applies to 2D mesh only",
+                                  SALOME::BAD_PARAM);
+
+  if ( myIsPreviewMode ) // make preview data
+  {
+    // in a preview mesh, make edges linked to a node
+    TPreviewMesh& tmpMesh = *getPreviewMesh( SMDSAbs_Edge );
+    TIDSortedElemSet linkedNodes;
+    ::SMESH_MeshEditor::GetLinkedNodes( node, linkedNodes );
+    SMDS_MeshNode *nodeCpy1 = tmpMesh.Copy( node );
+    for ( const SMDS_MeshElement* n : linkedNodes )
+    {
+      SMDS_MeshNode *nodeCpy2 = tmpMesh.Copy ( cast2Node( n ));
+      tmpMesh.GetMeshDS()->AddEdge( nodeCpy1, nodeCpy2 );
+    }
+    // copy surrounding faces
+    for ( SMDS_ElemIteratorPtr fIt = node->GetInverseElementIterator( SMDSAbs_Face ); fIt->more(); )
+      tmpMesh.Copy ( fIt->next() );
+    
+    // remove copied node
+    if ( nodeCpy1 )
+      getEditor().RemoveNodeWithReconnection( nodeCpy1 );
+  }
+  else
+  {
+    getEditor().RemoveNodeWithReconnection( node );
+
+    // Update Python script
+    TPythonDump() << this << ".RemoveNodeWithReconnection( " << nodeID << " )";
+
+    declareMeshModified( /*isReComputeSafe=*/ true );
+  }
+
+  SMESH_CATCH( SMESH::throwCorbaException );
+}
+
 //=============================================================================
 /*!
  * Add a new node.
  */
 //=============================================================================
 
-CORBA::Long SMESH_MeshEditor_i::AddNode(CORBA::Double x,CORBA::Double y, CORBA::Double z)
+SMESH::smIdType SMESH_MeshEditor_i::AddNode(CORBA::Double x,CORBA::Double y, CORBA::Double z)
 {
   SMESH_TRY;
   initData();
@@ -895,8 +947,8 @@ CORBA::Long SMESH_MeshEditor_i::AddNode(CORBA::Double x,CORBA::Double y, CORBA::
  */
 //=============================================================================
 
-CORBA::Long SMESH_MeshEditor_i::Add0DElement(CORBA::Long    IDOfNode,
-                                             CORBA::Boolean DuplicateElements)
+SMESH::smIdType SMESH_MeshEditor_i::Add0DElement(SMESH::smIdType    IDOfNode,
+                                                 CORBA::Boolean DuplicateElements)
 {
   SMESH_TRY;
   initData();
@@ -925,7 +977,7 @@ CORBA::Long SMESH_MeshEditor_i::Add0DElement(CORBA::Long    IDOfNode,
  */
 //=============================================================================
 
-CORBA::Long SMESH_MeshEditor_i::AddBall(CORBA::Long IDOfNode, CORBA::Double diameter)
+SMESH::smIdType SMESH_MeshEditor_i::AddBall(SMESH::smIdType IDOfNode, CORBA::Double diameter)
 {
   SMESH_TRY;
   initData();
@@ -954,17 +1006,17 @@ CORBA::Long SMESH_MeshEditor_i::AddBall(CORBA::Long IDOfNode, CORBA::Double diam
  */
 //=============================================================================
 
-CORBA::Long SMESH_MeshEditor_i::AddEdge(const SMESH::long_array & IDsOfNodes)
+SMESH::smIdType SMESH_MeshEditor_i::AddEdge(const SMESH::smIdType_array & IDsOfNodes)
 {
   SMESH_TRY;
   initData();
 
-  int NbNodes = IDsOfNodes.length();
+  SMESH::smIdType NbNodes = IDsOfNodes.length();
   SMDS_MeshElement* elem = 0;
   if (NbNodes == 2)
   {
-    CORBA::Long index1 = IDsOfNodes[0];
-    CORBA::Long index2 = IDsOfNodes[1];
+    SMESH::smIdType index1 = IDsOfNodes[0];
+    SMESH::smIdType index2 = IDsOfNodes[1];
     elem = getMeshDS()->AddEdge( getMeshDS()->FindNode(index1),
                                  getMeshDS()->FindNode(index2));
 
@@ -973,9 +1025,9 @@ CORBA::Long SMESH_MeshEditor_i::AddEdge(const SMESH::long_array & IDsOfNodes)
                   << index1 << ", " << index2 <<" ])";
   }
   if (NbNodes == 3) {
-    CORBA::Long n1 = IDsOfNodes[0];
-    CORBA::Long n2 = IDsOfNodes[1];
-    CORBA::Long n12 = IDsOfNodes[2];
+    SMESH::smIdType n1 = IDsOfNodes[0];
+    SMESH::smIdType n2 = IDsOfNodes[1];
+    SMESH::smIdType n12 = IDsOfNodes[2];
     elem = getMeshDS()->AddEdge( getMeshDS()->FindNode(n1),
                                  getMeshDS()->FindNode(n2),
                                  getMeshDS()->FindNode(n12));
@@ -997,7 +1049,7 @@ CORBA::Long SMESH_MeshEditor_i::AddEdge(const SMESH::long_array & IDsOfNodes)
  */
 //=============================================================================
 
-CORBA::Long SMESH_MeshEditor_i::AddFace(const SMESH::long_array & IDsOfNodes)
+SMESH::smIdType SMESH_MeshEditor_i::AddFace(const SMESH::smIdType_array & IDsOfNodes)
 {
   SMESH_TRY;
   initData();
@@ -1045,7 +1097,7 @@ CORBA::Long SMESH_MeshEditor_i::AddFace(const SMESH::long_array & IDsOfNodes)
  */
 //=============================================================================
 
-CORBA::Long SMESH_MeshEditor_i::AddPolygonalFace (const SMESH::long_array & IDsOfNodes)
+SMESH::smIdType SMESH_MeshEditor_i::AddPolygonalFace (const SMESH::smIdType_array & IDsOfNodes)
 {
   SMESH_TRY;
   initData();
@@ -1080,7 +1132,7 @@ CORBA::Long SMESH_MeshEditor_i::AddPolygonalFace (const SMESH::long_array & IDsO
  */
 //=============================================================================
 
-CORBA::Long SMESH_MeshEditor_i::AddQuadPolygonalFace (const SMESH::long_array & IDsOfNodes)
+SMESH::smIdType SMESH_MeshEditor_i::AddQuadPolygonalFace (const SMESH::smIdType_array & IDsOfNodes)
 {
   SMESH_TRY;
   initData();
@@ -1115,7 +1167,7 @@ CORBA::Long SMESH_MeshEditor_i::AddQuadPolygonalFace (const SMESH::long_array &
  */
 //=============================================================================
 
-CORBA::Long SMESH_MeshEditor_i::AddVolume(const SMESH::long_array & IDsOfNodes)
+SMESH::smIdType SMESH_MeshEditor_i::AddVolume(const SMESH::smIdType_array & IDsOfNodes)
 {
   SMESH_TRY;
   initData();
@@ -1174,7 +1226,7 @@ CORBA::Long SMESH_MeshEditor_i::AddVolume(const SMESH::long_array & IDsOfNodes)
  *  AddPolyhedralVolume
  */
 //=============================================================================
-CORBA::Long SMESH_MeshEditor_i::AddPolyhedralVolume (const SMESH::long_array & IDsOfNodes,
+SMESH::smIdType SMESH_MeshEditor_i::AddPolyhedralVolume (const SMESH::smIdType_array & IDsOfNodes,
                                                      const SMESH::long_array & Quantities)
 {
   SMESH_TRY;
@@ -1213,7 +1265,7 @@ CORBA::Long SMESH_MeshEditor_i::AddPolyhedralVolume (const SMESH::long_array & I
  */
 //=============================================================================
 
-CORBA::Long SMESH_MeshEditor_i::AddPolyhedralVolumeByFaces (const SMESH::long_array & IdsOfFaces)
+SMESH::smIdType SMESH_MeshEditor_i::AddPolyhedralVolumeByFaces (const SMESH::smIdType_array & IdsOfFaces)
 {
   SMESH_TRY;
   initData();
@@ -1272,7 +1324,7 @@ SMESH_MeshEditor_i::Create0DElementsOnAllNodes(SMESH::SMESH_IDSource_ptr theObje
   if ( idSourceToSet( theObject, getMeshDS(), elements, SMDSAbs_All, /*emptyIfIsMesh=*/1))
     getEditor().Create0DElementsOnAllNodes( elements, elems0D, theDuplicateElements );
 
-  SMESH::long_array_var newElems = new SMESH::long_array;
+  SMESH::smIdType_array_var newElems = new SMESH::smIdType_array;
   newElems->length( elems0D.size() );
   TIDSortedElemSet::iterator eIt = elems0D.begin();
   for ( size_t i = 0; i < elems0D.size(); ++i, ++eIt )
@@ -1329,7 +1381,7 @@ SMESH_MeshEditor_i::Create0DElementsOnAllNodes(SMESH::SMESH_IDSource_ptr theObje
  */
 //=============================================================================
 
-void SMESH_MeshEditor_i::SetNodeOnVertex(CORBA::Long NodeID, CORBA::Long VertexID)
+void SMESH_MeshEditor_i::SetNodeOnVertex(SMESH::smIdType NodeID, CORBA::Long VertexID)
 {
   SMESH_TRY;
 
@@ -1362,7 +1414,7 @@ void SMESH_MeshEditor_i::SetNodeOnVertex(CORBA::Long NodeID, CORBA::Long VertexI
  */
 //=============================================================================
 
-void SMESH_MeshEditor_i::SetNodeOnEdge(CORBA::Long NodeID, CORBA::Long EdgeID,
+void SMESH_MeshEditor_i::SetNodeOnEdge(SMESH::smIdType NodeID, CORBA::Long EdgeID,
                                        CORBA::Double paramOnEdge)
 {
   SMESH_TRY;
@@ -1405,7 +1457,7 @@ void SMESH_MeshEditor_i::SetNodeOnEdge(CORBA::Long NodeID, CORBA::Long EdgeID,
  */
 //=============================================================================
 
-void SMESH_MeshEditor_i::SetNodeOnFace(CORBA::Long NodeID, CORBA::Long FaceID,
+void SMESH_MeshEditor_i::SetNodeOnFace(SMESH::smIdType NodeID, CORBA::Long FaceID,
                                        CORBA::Double u, CORBA::Double v)
 {
   SMESH_TRY;
@@ -1450,7 +1502,7 @@ void SMESH_MeshEditor_i::SetNodeOnFace(CORBA::Long NodeID, CORBA::Long FaceID,
  */
 //=============================================================================
 
-void SMESH_MeshEditor_i::SetNodeInVolume(CORBA::Long NodeID, CORBA::Long SolidID)
+void SMESH_MeshEditor_i::SetNodeInVolume(SMESH::smIdType NodeID, CORBA::Long SolidID)
 {
   SMESH_TRY;
   SMESHDS_Mesh * mesh = getMeshDS();
@@ -1479,7 +1531,7 @@ void SMESH_MeshEditor_i::SetNodeInVolume(CORBA::Long NodeID, CORBA::Long SolidID
  */
 //=============================================================================
 
-void SMESH_MeshEditor_i::SetMeshElementOnShape(CORBA::Long ElementID,
+void SMESH_MeshEditor_i::SetMeshElementOnShape(SMESH::smIdType ElementID,
                                                CORBA::Long ShapeID)
 {
   SMESH_TRY;
@@ -1511,8 +1563,8 @@ void SMESH_MeshEditor_i::SetMeshElementOnShape(CORBA::Long ElementID,
  */
 //=============================================================================
 
-CORBA::Boolean SMESH_MeshEditor_i::InverseDiag(CORBA::Long NodeID1,
-                                               CORBA::Long NodeID2)
+CORBA::Boolean SMESH_MeshEditor_i::InverseDiag(SMESH::smIdType NodeID1,
+                                               SMESH::smIdType NodeID2)
 {
   SMESH_TRY;
   initData();
@@ -1541,8 +1593,8 @@ CORBA::Boolean SMESH_MeshEditor_i::InverseDiag(CORBA::Long NodeID1,
  */
 //=============================================================================
 
-CORBA::Boolean SMESH_MeshEditor_i::DeleteDiag(CORBA::Long NodeID1,
-                                              CORBA::Long NodeID2)
+CORBA::Boolean SMESH_MeshEditor_i::DeleteDiag(SMESH::smIdType NodeID1,
+                                              SMESH::smIdType NodeID2)
 {
   SMESH_TRY;
   initData();
@@ -1567,20 +1619,135 @@ CORBA::Boolean SMESH_MeshEditor_i::DeleteDiag(CORBA::Long NodeID1,
   return 0;
 }
 
+//=============================================================================
+/*!
+ * \brief Split a diagonal of a quadrangle formed by two adjacent triangles
+ *        so that four new triangles appear in place of the two triangles
+ */
+//=============================================================================
+
+void SMESH_MeshEditor_i::AddNodeOnSegment(SMESH::smIdType nodeID1,
+                                          SMESH::smIdType nodeID2,
+                                          CORBA::Double   position)
+{
+  SMESH_TRY;
+  initData();
+
+  const SMDS_MeshNode * n1 = getMeshDS()->FindNode( nodeID1 );
+  const SMDS_MeshNode * n2 = getMeshDS()->FindNode( nodeID2 );
+  if ( !n1 )
+    THROW_SALOME_CORBA_EXCEPTION( SMESH_Comment( "Invalid node ID: ") << nodeID1,
+                                  SALOME::BAD_PARAM);
+  if ( !n2 )
+    THROW_SALOME_CORBA_EXCEPTION( SMESH_Comment( "Invalid node ID: ") << nodeID2,
+                                  SALOME::BAD_PARAM);
+
+  if ( myIsPreviewMode ) // make preview data
+  {
+    TPreviewMesh* tmpMesh = getPreviewMesh();
+    TIDSortedElemSet elemSet, avoidSet;
+    TopoDS_Shape shape;
+    while ( const SMDS_MeshElement* face = SMESH_MeshAlgos::FindFaceInSet( n1, n2,
+                                                                           elemSet, avoidSet ))
+    {
+      if ( avoidSet.empty() )
+      {
+        shape = getMeshDS()->IndexToShape( face->GetShapeID() );
+        if ( !shape.IsNull() )
+        {
+          tmpMesh->ShapeToMesh( TopoDS_Shape() );
+          tmpMesh->ShapeToMesh( shape );
+        }
+      }
+      SMDS_MeshElement* faceCopy = tmpMesh->Copy ( face );
+      avoidSet.insert( face );
+
+      if ( !shape.IsNull() )
+        tmpMesh->GetMeshDS()->SetMeshElementOnShape( faceCopy, shape );
+    }
+    n1 = tmpMesh->GetMeshDS()->FindNode( nodeID1 );
+    n2 = tmpMesh->GetMeshDS()->FindNode( nodeID2 );
+
+    if ( !shape.IsNull() )
+    {
+      tmpMesh->GetMeshDS()->SetMeshElementOnShape( n1, shape );
+      tmpMesh->GetMeshDS()->SetMeshElementOnShape( n2, shape );
+    }
+  }
+
+  getEditor().SplitEdge( n1, n2, position );
+
+  if ( !myIsPreviewMode )
+  {
+    // Update Python script
+    TPythonDump() << this << ".AddNodeOnSegment( "
+                  << nodeID1 << ", " << nodeID2 << ", " << position << " )";
+
+    declareMeshModified( /*isReComputeSafe=*/true );
+  }
+
+  SMESH_CATCH( SMESH::throwCorbaException );
+}
+
+//=============================================================================
+/*!
+ * \brief Split a face into triangles by adding a new node onto the face
+ *        and connecting the new node with face nodes
+ */
+//=============================================================================
+
+void  SMESH_MeshEditor_i::AddNodeOnFace(SMESH::smIdType theFaceID,
+                                        CORBA::Double   theX,
+                                        CORBA::Double   theY,
+                                        CORBA::Double   theZ)
+{
+  SMESH_TRY;
+  initData();
+
+  const SMDS_MeshElement * face = getMeshDS()->FindElement( theFaceID );
+  if ( !face )
+    THROW_SALOME_CORBA_EXCEPTION( SMESH_Comment( "Invalid face ID: ") << theFaceID,
+                                  SALOME::BAD_PARAM);
+  if ( face->GetType() != SMDSAbs_Face )
+    THROW_SALOME_CORBA_EXCEPTION( "The element is not a face ", SALOME::BAD_PARAM );
+
+  if ( myIsPreviewMode ) // make preview data
+  {
+    TPreviewMesh* tmpMesh = getPreviewMesh();
+    face = tmpMesh->Copy ( face );
+  }
+
+  getEditor().SplitFace( face, theX, theY, theZ );
+
+  if ( !myIsPreviewMode )
+  {
+    // Update Python script
+    TPythonDump() << this << ".AddNodeOnFace( "
+                  << theFaceID << ", "
+                  << theX << ", "
+                  << theY << ", "
+                  << theZ << " )";
+
+    declareMeshModified( /*isReComputeSafe=*/true );
+  }
+
+  SMESH_CATCH( SMESH::throwCorbaException );
+}
+
 //=============================================================================
 /*!
  *
  */
 //=============================================================================
 
-CORBA::Boolean SMESH_MeshEditor_i::Reorient(const SMESH::long_array & IDsOfElements)
+CORBA::Boolean SMESH_MeshEditor_i::Reorient(const SMESH::smIdType_array & IDsOfElements)
 {
   SMESH_TRY;
   initData();
 
   for ( CORBA::ULong i = 0; i < IDsOfElements.length(); i++ )
   {
-    CORBA::Long index = IDsOfElements[i];
+    SMESH::smIdType index = IDsOfElements[i];
     const SMDS_MeshElement * elem = getMeshDS()->FindElement(index);
     if ( elem )
       getEditor().Reorient( elem );
@@ -1610,7 +1777,7 @@ CORBA::Boolean SMESH_MeshEditor_i::ReorientObject(SMESH::SMESH_IDSource_ptr theO
 
   prepareIdSource( theObject );
 
-  SMESH::long_array_var anElementsId = theObject->GetIDs();
+  SMESH::smIdType_array_var anElementsId = theObject->GetIDs();
   CORBA::Boolean isDone = Reorient(anElementsId);
 
   // Update Python script
@@ -1696,7 +1863,8 @@ CORBA::Long SMESH_MeshEditor_i::Reorient2D(SMESH::SMESH_IDSource_ptr the2Dgroup,
   if ( dirVec.Magnitude() < std::numeric_limits< double >::min() )
     THROW_SALOME_CORBA_EXCEPTION("Zero size vector", SALOME::BAD_PARAM);
 
-  int nbReori = getEditor().Reorient2D( elements, dirVec, face );
+  TIDSortedElemSet refFaces = { face };
+  int nbReori = getEditor().Reorient2D( elements, dirVec, refFaces, /*allowNonManifold=*/true );
 
   if ( nbReori ) {
     declareMeshModified( /*isReComputeSafe=*/false );
@@ -1713,6 +1881,64 @@ CORBA::Long SMESH_MeshEditor_i::Reorient2D(SMESH::SMESH_IDSource_ptr the2Dgroup,
   return 0;
 }
 
+//=======================================================================
+//function : Reorient2DByNeighbours
+//purpose  : Reorient faces contained in a list of objectFaces
+//           equally to faces contained in a list of referenceFaces.
+//=======================================================================
+
+CORBA::Long
+SMESH_MeshEditor_i::Reorient2DByNeighbours(const SMESH::ListOfIDSources& theObjectFaces,
+                                           const SMESH::ListOfIDSources& theReferenceFaces)
+{
+  SMESH_TRY;
+  initData(/*deleteSearchers=*/false);
+
+  if ( theObjectFaces.length() == 0 )
+    return 0;
+
+  // get object faces
+  TIDSortedElemSet objFaces;
+  bool invalidObjFaces = false;
+  for ( CORBA::ULong i = 0; i < theObjectFaces.length(); ++i )
+  {
+    IDSource_Error err;
+    if ( !idSourceToSet( theObjectFaces[i], getMeshDS(), objFaces, SMDSAbs_Face,
+                         /*emptyIfIsMesh=*/1, &err ) &&
+         err == IDSource_INVALID )
+      invalidObjFaces = true;
+  }
+  if ( objFaces.empty() && invalidObjFaces )
+    THROW_SALOME_CORBA_EXCEPTION("No valid faces in given groups", SALOME::BAD_PARAM);
+
+  // get reference faces
+  TIDSortedElemSet refFaces;
+  for ( CORBA::ULong i = 0; i < theReferenceFaces.length(); ++i )
+  {
+    idSourceToSet( theReferenceFaces[i], getMeshDS(), refFaces, SMDSAbs_Face, /*emptyIfIsMesh=*/1 );
+  }
+  if ( refFaces.empty() && theReferenceFaces.length() > 0 )
+    THROW_SALOME_CORBA_EXCEPTION("Reference faces are invalid", SALOME::BAD_PARAM);
+
+
+  gp_Vec zeroVec( 0,0,0 );
+
+  // reorient
+  int nbReori = getEditor().Reorient2D( objFaces, zeroVec, refFaces, /*allowNonManifold=*/false );
+
+  if ( nbReori )
+    declareMeshModified( /*isReComputeSafe=*/false );
+
+  TPythonDump() << this << ".Reorient2DByNeighbours("
+                << theObjectFaces << ", "
+                << theReferenceFaces << ")";
+
+  return nbReori;
+
+  SMESH_CATCH( SMESH::throwCorbaException );
+  return 0;
+}
+
 //=======================================================================
 //function : Reorient2DBy3D
 //purpose  : Reorient faces basing on orientation of adjacent volumes.
@@ -1768,7 +1994,7 @@ CORBA::Long SMESH_MeshEditor_i::Reorient2DBy3D(const SMESH::ListOfIDSources& fac
  */
 //=============================================================================
 
-CORBA::Boolean SMESH_MeshEditor_i::TriToQuad (const SMESH::long_array &   IDsOfElements,
+CORBA::Boolean SMESH_MeshEditor_i::TriToQuad (const SMESH::smIdType_array &   IDsOfElements,
                                               SMESH::NumericalFunctor_ptr Criterion,
                                               CORBA::Double               MaxAngle)
 {
@@ -1826,7 +2052,7 @@ CORBA::Boolean SMESH_MeshEditor_i::TriToQuadObject (SMESH::SMESH_IDSource_ptr
   TPythonDump aTPythonDump;  // suppress dump in TriToQuad()
 
   prepareIdSource( theObject );
-  SMESH::long_array_var anElementsId = theObject->GetIDs();
+  SMESH::smIdType_array_var anElementsId = theObject->GetIDs();
   CORBA::Boolean isDone = TriToQuad(anElementsId, Criterion, MaxAngle);
 
   if ( !myIsPreviewMode ) {
@@ -1850,7 +2076,7 @@ CORBA::Boolean SMESH_MeshEditor_i::TriToQuadObject (SMESH::SMESH_IDSource_ptr
  */
 //=============================================================================
 
-CORBA::Boolean SMESH_MeshEditor_i::QuadToTri (const SMESH::long_array &   IDsOfElements,
+CORBA::Boolean SMESH_MeshEditor_i::QuadToTri (const SMESH::smIdType_array &   IDsOfElements,
                                               SMESH::NumericalFunctor_ptr Criterion)
 {
   SMESH_TRY;
@@ -1896,7 +2122,7 @@ CORBA::Boolean SMESH_MeshEditor_i::QuadToTriObject (SMESH::SMESH_IDSource_ptr
   TPythonDump aTPythonDump;  // suppress dump in QuadToTri()
 
   prepareIdSource( theObject );
-  SMESH::long_array_var anElementsId = theObject->GetIDs();
+  SMESH::smIdType_array_var anElementsId = theObject->GetIDs();
   CORBA::Boolean isDone = QuadToTri(anElementsId, Criterion);
 
   SMESH::NumericalFunctor_i* aNumericalFunctor =
@@ -1943,7 +2169,7 @@ void SMESH_MeshEditor_i::QuadTo4Tri (SMESH::SMESH_IDSource_ptr theObject)
  */
 //=============================================================================
 
-CORBA::Boolean SMESH_MeshEditor_i::SplitQuad (const SMESH::long_array & IDsOfElements,
+CORBA::Boolean SMESH_MeshEditor_i::SplitQuad (const SMESH::smIdType_array & IDsOfElements,
                                               CORBA::Boolean            Diag13)
 {
   SMESH_TRY;
@@ -1981,7 +2207,7 @@ CORBA::Boolean SMESH_MeshEditor_i::SplitQuadObject (SMESH::SMESH_IDSource_ptr th
   TPythonDump aTPythonDump;  // suppress dump in SplitQuad()
 
   prepareIdSource( theObject );
-  SMESH::long_array_var anElementsId = theObject->GetIDs();
+  SMESH::smIdType_array_var anElementsId = theObject->GetIDs();
   CORBA::Boolean isDone = SplitQuad(anElementsId, Diag13);
 
   // Update Python script
@@ -2006,8 +2232,8 @@ CORBA::Boolean SMESH_MeshEditor_i::SplitQuadObject (SMESH::SMESH_IDSource_ptr th
  */
 //=============================================================================
 
-CORBA::Long SMESH_MeshEditor_i::BestSplit (CORBA::Long                 IDOfQuad,
-                                           SMESH::NumericalFunctor_ptr Criterion)
+CORBA::Short SMESH_MeshEditor_i::BestSplit (SMESH::smIdType             IDOfQuad,
+                                            SMESH::NumericalFunctor_ptr Criterion)
 {
   SMESH_TRY;
   initData();
@@ -2090,7 +2316,7 @@ void SMESH_MeshEditor_i::SplitHexahedraIntoPrisms( SMESH::SMESH_IDSource_ptr  el
                             facetToSplitNormal.PS.z ));
   TIDSortedElemSet elemSet;
   prepareIdSource( elems );
-  SMESH::long_array_var anElementsId = elems->GetIDs();
+  SMESH::smIdType_array_var anElementsId = elems->GetIDs();
   SMDS_MeshElement::GeomFilter filter( SMDSGeom_HEXA );
   arrayToSet( anElementsId, getMeshDS(), elemSet, SMDSAbs_Volume, &filter );
 
@@ -2167,9 +2393,9 @@ void SMESH_MeshEditor_i::SplitBiQuadraticIntoLinear(const SMESH::ListOfIDSources
 //=======================================================================
 
 CORBA::Boolean
-SMESH_MeshEditor_i::Smooth(const SMESH::long_array &              IDsOfElements,
-                           const SMESH::long_array &              IDsOfFixedNodes,
-                           CORBA::Long                            MaxNbOfIterations,
+SMESH_MeshEditor_i::Smooth(const SMESH::smIdType_array &          IDsOfElements,
+                           const SMESH::smIdType_array &          IDsOfFixedNodes,
+                           CORBA::Short                           MaxNbOfIterations,
                            CORBA::Double                          MaxAspectRatio,
                            SMESH::SMESH_MeshEditor::Smooth_Method Method)
 {
@@ -2184,9 +2410,9 @@ SMESH_MeshEditor_i::Smooth(const SMESH::long_array &              IDsOfElements,
 //=======================================================================
 
 CORBA::Boolean
-SMESH_MeshEditor_i::SmoothParametric(const SMESH::long_array &              IDsOfElements,
-                                     const SMESH::long_array &              IDsOfFixedNodes,
-                                     CORBA::Long                            MaxNbOfIterations,
+SMESH_MeshEditor_i::SmoothParametric(const SMESH::smIdType_array &          IDsOfElements,
+                                     const SMESH::smIdType_array &          IDsOfFixedNodes,
+                                     CORBA::Short                           MaxNbOfIterations,
                                      CORBA::Double                          MaxAspectRatio,
                                      SMESH::SMESH_MeshEditor::Smooth_Method Method)
 {
@@ -2202,8 +2428,8 @@ SMESH_MeshEditor_i::SmoothParametric(const SMESH::long_array &              IDsO
 
 CORBA::Boolean
 SMESH_MeshEditor_i::SmoothObject(SMESH::SMESH_IDSource_ptr              theObject,
-                                 const SMESH::long_array &              IDsOfFixedNodes,
-                                 CORBA::Long                            MaxNbOfIterations,
+                                 const SMESH::smIdType_array &          IDsOfFixedNodes,
+                                 CORBA::Short                           MaxNbOfIterations,
                                  CORBA::Double                          MaxAspectRatio,
                                  SMESH::SMESH_MeshEditor::Smooth_Method Method)
 {
@@ -2219,8 +2445,8 @@ SMESH_MeshEditor_i::SmoothObject(SMESH::SMESH_IDSource_ptr              theObjec
 
 CORBA::Boolean
 SMESH_MeshEditor_i::SmoothParametricObject(SMESH::SMESH_IDSource_ptr              theObject,
-                                           const SMESH::long_array &              IDsOfFixedNodes,
-                                           CORBA::Long                            MaxNbOfIterations,
+                                           const SMESH::smIdType_array &          IDsOfFixedNodes,
+                                           CORBA::Short                           MaxNbOfIterations,
                                            CORBA::Double                          MaxAspectRatio,
                                            SMESH::SMESH_MeshEditor::Smooth_Method Method)
 {
@@ -2236,9 +2462,9 @@ SMESH_MeshEditor_i::SmoothParametricObject(SMESH::SMESH_IDSource_ptr
 //=============================================================================
 
 CORBA::Boolean
-SMESH_MeshEditor_i::smooth(const SMESH::long_array &              IDsOfElements,
-                           const SMESH::long_array &              IDsOfFixedNodes,
-                           CORBA::Long                            MaxNbOfIterations,
+SMESH_MeshEditor_i::smooth(const SMESH::smIdType_array &          IDsOfElements,
+                           const SMESH::smIdType_array &          IDsOfFixedNodes,
+                           CORBA::Short                           MaxNbOfIterations,
                            CORBA::Double                          MaxAspectRatio,
                            SMESH::SMESH_MeshEditor::Smooth_Method Method,
                            bool                                   IsParametric)
@@ -2253,7 +2479,7 @@ SMESH_MeshEditor_i::smooth(const SMESH::long_array &              IDsOfElements,
 
   set<const SMDS_MeshNode*> fixedNodes;
   for ( CORBA::ULong i = 0; i < IDsOfFixedNodes.length(); i++) {
-    CORBA::Long index = IDsOfFixedNodes[i];
+    SMESH::smIdType index = IDsOfFixedNodes[i];
     const SMDS_MeshNode * node = aMesh->FindNode(index);
     if ( node )
       fixedNodes.insert( node );
@@ -2290,8 +2516,8 @@ SMESH_MeshEditor_i::smooth(const SMESH::long_array &              IDsOfElements,
 
 CORBA::Boolean
 SMESH_MeshEditor_i::smoothObject(SMESH::SMESH_IDSource_ptr              theObject,
-                                 const SMESH::long_array &              IDsOfFixedNodes,
-                                 CORBA::Long                            MaxNbOfIterations,
+                                 const SMESH::smIdType_array &          IDsOfFixedNodes,
+                                 CORBA::Short                           MaxNbOfIterations,
                                  CORBA::Double                          MaxAspectRatio,
                                  SMESH::SMESH_MeshEditor::Smooth_Method Method,
                                  bool                                   IsParametric)
@@ -2302,7 +2528,7 @@ SMESH_MeshEditor_i::smoothObject(SMESH::SMESH_IDSource_ptr              theObjec
   TPythonDump aTPythonDump;  // suppress dump in smooth()
 
   prepareIdSource( theObject );
-  SMESH::long_array_var anElementsId = theObject->GetIDs();
+  SMESH::smIdType_array_var anElementsId = theObject->GetIDs();
   CORBA::Boolean isDone = smooth (anElementsId, IDsOfFixedNodes, MaxNbOfIterations,
                                   MaxAspectRatio, Method, IsParametric);
 
@@ -2741,12 +2967,12 @@ SMESH_MeshEditor_i::ExtrusionByNormal(const SMESH::ListOfIDSources& objects,
 //=======================================================================
 
 SMESH::ListOfGroups*
-SMESH_MeshEditor_i::AdvancedExtrusion(const SMESH::long_array & theIDsOfElements,
-                                      const SMESH::DirStruct &  theStepVector,
-                                      CORBA::Long               theNbOfSteps,
-                                      CORBA::Long               theExtrFlags,
-                                      CORBA::Double             theSewTolerance,
-                                      CORBA::Boolean            theMakeGroups)
+SMESH_MeshEditor_i::AdvancedExtrusion(const SMESH::smIdType_array & theIDsOfElements,
+                                      const SMESH::DirStruct &      theStepVector,
+                                      CORBA::Long                   theNbOfSteps,
+                                      CORBA::Long                   theExtrFlags,
+                                      CORBA::Double                 theSewTolerance,
+                                      CORBA::Boolean                theMakeGroups)
 {
   SMESH_TRY;
   initData();
@@ -2823,7 +3049,7 @@ SMESH_MeshEditor_i::ExtrusionAlongPathObjects(const SMESH::ListOfIDSources & the
                                               const SMESH::ListOfIDSources & theFaces,
                                               SMESH::SMESH_IDSource_ptr      thePathObject,
                                               GEOM::GEOM_Object_ptr          thePathShape,
-                                              CORBA::Long                    theNodeStart,
+                                              SMESH::smIdType                theNodeStart,
                                               CORBA::Boolean                 theHasAngles,
                                               const SMESH::double_array &    theAngles,
                                               CORBA::Boolean                 theAnglesVariation,
@@ -2999,7 +3225,7 @@ SMESH_MeshEditor_i::LinearAnglesVariation(SMESH::SMESH_Mesh_ptr       thePathMes
     SMESH_subMesh* aSubMesh = aMeshImp->GetImpl().GetSubMesh( aShape );
     if ( !aSubMesh || !aSubMesh->GetSubMeshDS())
       return aResult._retn();
-    int nbSteps = aSubMesh->GetSubMeshDS()->NbElements();
+    smIdType nbSteps = aSubMesh->GetSubMeshDS()->NbElements();
     if ( nbSteps == nbAngles )
     {
       aResult.inout() = theAngles;
@@ -3118,7 +3344,7 @@ SMESH_MeshEditor_i::mirror(TIDSortedElemSet &                  theElements,
 //purpose  :
 //=======================================================================
 
-void SMESH_MeshEditor_i::Mirror(const SMESH::long_array &           theIDsOfElements,
+void SMESH_MeshEditor_i::Mirror(const SMESH::smIdType_array &       theIDsOfElements,
                                 const SMESH::AxisStruct &           theAxis,
                                 SMESH::SMESH_MeshEditor::MirrorType theMirrorType,
                                 CORBA::Boolean                      theCopy)
@@ -3170,7 +3396,7 @@ void SMESH_MeshEditor_i::MirrorObject(SMESH::SMESH_IDSource_ptr           theObj
 //=======================================================================
 
 SMESH::ListOfGroups*
-SMESH_MeshEditor_i::MirrorMakeGroups(const SMESH::long_array&            theIDsOfElements,
+SMESH_MeshEditor_i::MirrorMakeGroups(const SMESH::smIdType_array&        theIDsOfElements,
                                      const SMESH::AxisStruct&            theMirror,
                                      SMESH::SMESH_MeshEditor::MirrorType theMirrorType)
 {
@@ -3227,7 +3453,7 @@ SMESH_MeshEditor_i::MirrorObjectMakeGroups(SMESH::SMESH_IDSource_ptr           t
 //=======================================================================
 
 SMESH::SMESH_Mesh_ptr
-SMESH_MeshEditor_i::MirrorMakeMesh(const SMESH::long_array&            theIDsOfElements,
+SMESH_MeshEditor_i::MirrorMakeMesh(const SMESH::smIdType_array&        theIDsOfElements,
                                    const SMESH::AxisStruct&            theMirror,
                                    SMESH::SMESH_MeshEditor::MirrorType theMirrorType,
                                    CORBA::Boolean                      theCopyGroups,
@@ -3375,9 +3601,9 @@ SMESH_MeshEditor_i::translate(TIDSortedElemSet        & theElements,
 //purpose  :
 //=======================================================================
 
-void SMESH_MeshEditor_i::Translate(const SMESH::long_array & theIDsOfElements,
-                                   const SMESH::DirStruct &  theVector,
-                                   CORBA::Boolean            theCopy)
+void SMESH_MeshEditor_i::Translate(const SMESH::smIdType_array & theIDsOfElements,
+                                   const SMESH::DirStruct &      theVector,
+                                   CORBA::Boolean                theCopy)
 {
   if (!myIsPreviewMode) {
     TPythonDump() << this << ".Translate( "
@@ -3421,8 +3647,8 @@ void SMESH_MeshEditor_i::TranslateObject(SMESH::SMESH_IDSource_ptr theObject,
 //=======================================================================
 
 SMESH::ListOfGroups*
-SMESH_MeshEditor_i::TranslateMakeGroups(const SMESH::long_array& theIDsOfElements,
-                                        const SMESH::DirStruct&  theVector)
+SMESH_MeshEditor_i::TranslateMakeGroups(const SMESH::smIdType_array& theIDsOfElements,
+                                        const SMESH::DirStruct&      theVector)
 {
   TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
 
@@ -3438,7 +3664,7 @@ SMESH_MeshEditor_i::TranslateMakeGroups(const SMESH::long_array& theIDsOfElement
                 << theIDsOfElements << ", "
                 << theVector        << " )";
   }
-  return aGroups;
+  return aGroups ? aGroups : new SMESH::ListOfGroups();
 }
 
 //=======================================================================
@@ -3463,7 +3689,7 @@ SMESH_MeshEditor_i::TranslateObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObjec
                 << theObject << ", "
                 << theVector << " )";
   }
-  return aGroups;
+  return aGroups ? aGroups : new SMESH::ListOfGroups();
 }
 
 //=======================================================================
@@ -3472,10 +3698,10 @@ SMESH_MeshEditor_i::TranslateObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObjec
 //=======================================================================
 
 SMESH::SMESH_Mesh_ptr
-SMESH_MeshEditor_i::TranslateMakeMesh(const SMESH::long_array& theIDsOfElements,
-                                      const SMESH::DirStruct&  theVector,
-                                      CORBA::Boolean           theCopyGroups,
-                                      const char*              theMeshName)
+SMESH_MeshEditor_i::TranslateMakeMesh(const SMESH::smIdType_array& theIDsOfElements,
+                                      const SMESH::DirStruct&      theVector,
+                                      CORBA::Boolean               theCopyGroups,
+                                      const char*                  theMeshName)
 {
   SMESH_Mesh_i* mesh_i;
   SMESH::SMESH_Mesh_var mesh;
@@ -3619,10 +3845,10 @@ SMESH_MeshEditor_i::rotate(TIDSortedElemSet &        theElements,
 //purpose  :
 //=======================================================================
 
-void SMESH_MeshEditor_i::Rotate(const SMESH::long_array & theIDsOfElements,
-                                const SMESH::AxisStruct & theAxis,
-                                CORBA::Double             theAngle,
-                                CORBA::Boolean            theCopy)
+void SMESH_MeshEditor_i::Rotate(const SMESH::smIdType_array & theIDsOfElements,
+                                const SMESH::AxisStruct &     theAxis,
+                                CORBA::Double                 theAngle,
+                                CORBA::Boolean                theCopy)
 {
   if (!myIsPreviewMode) {
     TPythonDump() << this << ".Rotate( "
@@ -3668,9 +3894,9 @@ void SMESH_MeshEditor_i::RotateObject(SMESH::SMESH_IDSource_ptr theObject,
 //=======================================================================
 
 SMESH::ListOfGroups*
-SMESH_MeshEditor_i::RotateMakeGroups(const SMESH::long_array& theIDsOfElements,
-                                     const SMESH::AxisStruct& theAxis,
-                                     CORBA::Double            theAngle)
+SMESH_MeshEditor_i::RotateMakeGroups(const SMESH::smIdType_array& theIDsOfElements,
+                                     const SMESH::AxisStruct&     theAxis,
+                                     CORBA::Double                theAngle)
 {
   TPythonDump aPythonDump; // it is here to prevent dump of GetGroups()
 
@@ -3688,7 +3914,7 @@ SMESH_MeshEditor_i::RotateMakeGroups(const SMESH::long_array& theIDsOfElements,
                 << theAxis          << ", "
                 << TVar( theAngle ) << " )";
   }
-  return aGroups;
+  return aGroups ? aGroups : new SMESH::ListOfGroups();
 }
 
 //=======================================================================
@@ -3715,7 +3941,7 @@ SMESH_MeshEditor_i::RotateObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
                 << theAxis          << ", "
                 << TVar( theAngle ) << " )";
   }
-  return aGroups;
+  return aGroups ? aGroups : new SMESH::ListOfGroups();
 }
 
 //=======================================================================
@@ -3724,11 +3950,11 @@ SMESH_MeshEditor_i::RotateObjectMakeGroups(SMESH::SMESH_IDSource_ptr theObject,
 //=======================================================================
 
 SMESH::SMESH_Mesh_ptr
-SMESH_MeshEditor_i::RotateMakeMesh(const SMESH::long_array& theIDsOfElements,
-                                   const SMESH::AxisStruct& theAxis,
-                                   CORBA::Double            theAngleInRadians,
-                                   CORBA::Boolean           theCopyGroups,
-                                   const char*              theMeshName)
+SMESH_MeshEditor_i::RotateMakeMesh(const SMESH::smIdType_array& theIDsOfElements,
+                                   const SMESH::AxisStruct&     theAxis,
+                                   CORBA::Double                theAngleInRadians,
+                                   CORBA::Boolean               theCopyGroups,
+                                   const char*                  theMeshName)
 {
   SMESH_TRY;
   SMESH::SMESH_Mesh_var mesh;
@@ -4052,9 +4278,9 @@ SMESH::SMESH_Mesh_ptr SMESH_MeshEditor_i::Offset( SMESH::SMESH_IDSource_ptr theO
     if ( *theMeshName && mesh_var->NbFaces() == 0 )
     {
       // new mesh empty, remove it
-      SALOMEDS::Study_var          study = SMESH_Gen_i::getStudyServant();
+      SALOMEDS::Study_var          study = SMESH_Gen_i::GetSMESHGen()->getStudyServant();
       SALOMEDS::StudyBuilder_var builder = study->NewBuilder();
-      SALOMEDS::SObject_wrap      meshSO = SMESH_Gen_i::ObjectToSObject( mesh_var );
+      SALOMEDS::SObject_wrap      meshSO = SMESH_Gen_i::GetSMESHGen()->ObjectToSObject( mesh_var );
       builder->RemoveObjectWithChildren( meshSO );
       THROW_SALOME_CORBA_EXCEPTION("Offset failed", SALOME::INTERNAL_ERROR);
     }
@@ -4304,10 +4530,10 @@ void SMESH_MeshEditor_i::FindEqualElements(const SMESH::ListOfIDSources&  theObj
     for (CORBA::Long j = 0; arraysIt != aListOfListOfElementsID.end(); ++arraysIt, ++j)
     {
       SMESH::long_array& aGroup = (*theGroupsOfElementsID)[ j ];
-      list<int>&      listOfIDs = *arraysIt;
+      list<smIdType>&      listOfIDs = *arraysIt;
       aGroup.length( listOfIDs.size() );
-      list<int>::iterator idIt = listOfIDs.begin();
-      for (int k = 0; idIt != listOfIDs.end(); ++idIt, ++k )
+      list<smIdType>::iterator idIt = listOfIDs.begin();
+      for (smIdType k = 0; idIt != listOfIDs.end(); ++idIt, ++k )
         aGroup[ k ] = *idIt;
     }
 
@@ -4341,7 +4567,7 @@ void SMESH_MeshEditor_i::MergeElements(const SMESH::array_of_long_array& theGrou
     SMESH::array_of_ElementType_var elemTypes = theElementsToKeep[i]->GetTypes();
     if ( elemTypes->length() == 1 && elemTypes[0] == SMESH::NODE )
       continue;
-    SMESH::long_array_var elementsId = theElementsToKeep[i]->GetIDs();
+    SMESH::smIdType_array_var elementsId = theElementsToKeep[i]->GetIDs();
     for ( CORBA::ULong j = 0; j < elementsId->length(); ++j )
       idsToKeep.Add( elementsId[ j ]);
   }
@@ -4351,11 +4577,11 @@ void SMESH_MeshEditor_i::MergeElements(const SMESH::array_of_long_array& theGrou
   for ( CORBA::ULong i = 0; i < theGroupsOfElementsID.length(); i++ )
   {
     const SMESH::long_array& anElemsIDGroup = theGroupsOfElementsID[ i ];
-    aListOfListOfElementsID.push_back( list< int >() );
-    list< int >& aListOfElemsID = aListOfListOfElementsID.back();
+    aListOfListOfElementsID.push_back( list< smIdType >() );
+    list< smIdType >& aListOfElemsID = aListOfListOfElementsID.back();
     for ( CORBA::ULong j = 0; j < anElemsIDGroup.length(); j++ )
     {
-      CORBA::Long id = anElemsIDGroup[ j ];
+      SMESH::smIdType id = anElemsIDGroup[ j ];
       if ( idsToKeep.Contains( id )) aListOfElemsID.push_front( id );
       else                           aListOfElemsID.push_back( id );
     }
@@ -4399,10 +4625,10 @@ void SMESH_MeshEditor_i::MergeEqualElements()
  */
 //=============================================================================
 
-CORBA::Boolean SMESH_MeshEditor_i::MoveNode(CORBA::Long   NodeID,
-                                            CORBA::Double x,
-                                            CORBA::Double y,
-                                            CORBA::Double z)
+CORBA::Boolean SMESH_MeshEditor_i::MoveNode(SMESH::smIdType NodeID,
+                                            CORBA::Double   x,
+                                            CORBA::Double   y,
+                                            CORBA::Double   z)
 {
   SMESH_TRY;
   initData(/*deleteSearchers=*/false);
@@ -4430,7 +4656,6 @@ CORBA::Boolean SMESH_MeshEditor_i::MoveNode(CORBA::Long   NodeID,
     // move copied node
     if ( nodeCpy1 )
       tmpMesh.GetMeshDS()->MoveNode(nodeCpy1, x, y, z);
-    // fill preview data
   }
   else if ( theNodeSearcher ) // move node and update theNodeSearcher data accordingly
     theNodeSearcher->MoveNode(node, gp_Pnt( x,y,z ));
@@ -4456,7 +4681,7 @@ CORBA::Boolean SMESH_MeshEditor_i::MoveNode(CORBA::Long   NodeID,
  */
 //================================================================================
 
-CORBA::Long SMESH_MeshEditor_i::FindNodeClosestTo(CORBA::Double x,
+SMESH::smIdType SMESH_MeshEditor_i::FindNodeClosestTo(CORBA::Double x,
                                                   CORBA::Double y,
                                                   CORBA::Double z)
 {
@@ -4481,10 +4706,10 @@ CORBA::Long SMESH_MeshEditor_i::FindNodeClosestTo(CORBA::Double x,
  */
 //================================================================================
 
-CORBA::Long SMESH_MeshEditor_i::MoveClosestNodeToPoint(CORBA::Double x,
-                                                       CORBA::Double y,
-                                                       CORBA::Double z,
-                                                       CORBA::Long   theNodeID)
+SMESH::smIdType SMESH_MeshEditor_i::MoveClosestNodeToPoint(CORBA::Double   x,
+                                                       CORBA::Double   y,
+                                                       CORBA::Double   z,
+                                                       SMESH::smIdType theNodeID)
 {
   SMESH_TRY;
   // We keep theNodeSearcher until any mesh modification:
@@ -4495,7 +4720,7 @@ CORBA::Long SMESH_MeshEditor_i::MoveClosestNodeToPoint(CORBA::Double x,
 
   theSearchersDeleter.Set( myMesh ); // remove theNodeSearcher if mesh is other
 
-  int nodeID = theNodeID;
+  smIdType nodeID = theNodeID;
   const SMDS_MeshNode* node = getMeshDS()->FindNode( nodeID );
   if ( !node ) // preview moving node
   {
@@ -4558,13 +4783,13 @@ CORBA::Long SMESH_MeshEditor_i::MoveClosestNodeToPoint(CORBA::Double x,
  */
 //=======================================================================
 
-SMESH::long_array* SMESH_MeshEditor_i::FindElementsByPoint(CORBA::Double      x,
+SMESH::smIdType_array* SMESH_MeshEditor_i::FindElementsByPoint(CORBA::Double      x,
                                                            CORBA::Double      y,
                                                            CORBA::Double      z,
                                                            SMESH::ElementType type)
 {
   SMESH_TRY;
-  SMESH::long_array_var res = new SMESH::long_array;
+  SMESH::smIdType_array_var res = new SMESH::smIdType_array;
   vector< const SMDS_MeshElement* > foundElems;
 
   theSearchersDeleter.Set( myMesh );
@@ -4591,7 +4816,7 @@ SMESH::long_array* SMESH_MeshEditor_i::FindElementsByPoint(CORBA::Double      x,
 //           'ALL' type means elements of any type excluding nodes
 //=======================================================================
 
-SMESH::long_array*
+SMESH::smIdType_array*
 SMESH_MeshEditor_i::FindAmongElementsByPoint(SMESH::SMESH_IDSource_ptr elementIDs,
                                              CORBA::Double             x,
                                              CORBA::Double             y,
@@ -4599,7 +4824,7 @@ SMESH_MeshEditor_i::FindAmongElementsByPoint(SMESH::SMESH_IDSource_ptr elementID
                                              SMESH::ElementType        type)
 {
   SMESH_TRY;
-  SMESH::long_array_var res = new SMESH::long_array;
+  SMESH::smIdType_array_var res = new SMESH::smIdType_array;
 
   prepareIdSource( elementIDs );
   if ( type != SMESH::NODE )
@@ -4663,7 +4888,7 @@ SMESH_MeshEditor_i::FindAmongElementsByPoint(SMESH::SMESH_IDSource_ptr elementID
 //           In the case if nothing found, return -1 and []
 //=======================================================================
 
-CORBA::Long SMESH_MeshEditor_i::ProjectPoint(CORBA::Double             x,
+SMESH::smIdType SMESH_MeshEditor_i::ProjectPoint(CORBA::Double             x,
                                              CORBA::Double             y,
                                              CORBA::Double             z,
                                              SMESH::ElementType        type,
@@ -4793,7 +5018,7 @@ CORBA::Boolean SMESH_MeshEditor_i::IsCoherentOrientation2D()
 
 SMESH::array_of_long_array*
 SMESH_MeshEditor_i::Get1DBranches( SMESH::SMESH_IDSource_ptr      theEdges,
-                                   CORBA::Long                    theStartNode,
+                                   SMESH::smIdType                theStartNode,
                                    SMESH::array_of_long_array_out theNodeGroups )
 {
   if ( CORBA::is_nil( theEdges ))
@@ -5276,14 +5501,14 @@ SewCoincidentFreeBorders(const SMESH::CoincidentFreeBorders& freeBorders,
 //=======================================================================
 
 SMESH::SMESH_MeshEditor::Sew_Error
-SMESH_MeshEditor_i::SewFreeBorders(CORBA::Long FirstNodeID1,
-                                   CORBA::Long SecondNodeID1,
-                                   CORBA::Long LastNodeID1,
-                                   CORBA::Long FirstNodeID2,
-                                   CORBA::Long SecondNodeID2,
-                                   CORBA::Long LastNodeID2,
-                                   CORBA::Boolean CreatePolygons,
-                                   CORBA::Boolean CreatePolyedrs)
+SMESH_MeshEditor_i::SewFreeBorders(SMESH::smIdType FirstNodeID1,
+                                   SMESH::smIdType SecondNodeID1,
+                                   SMESH::smIdType LastNodeID1,
+                                   SMESH::smIdType FirstNodeID2,
+                                   SMESH::smIdType SecondNodeID2,
+                                   SMESH::smIdType LastNodeID2,
+                                   CORBA::Boolean  CreatePolygons,
+                                   CORBA::Boolean  CreatePolyedrs)
 {
   SMESH_TRY;
   initData();
@@ -5342,11 +5567,11 @@ SMESH_MeshEditor_i::SewFreeBorders(CORBA::Long FirstNodeID1,
 //=======================================================================
 
 SMESH::SMESH_MeshEditor::Sew_Error
-SMESH_MeshEditor_i::SewConformFreeBorders(CORBA::Long FirstNodeID1,
-                                          CORBA::Long SecondNodeID1,
-                                          CORBA::Long LastNodeID1,
-                                          CORBA::Long FirstNodeID2,
-                                          CORBA::Long SecondNodeID2)
+SMESH_MeshEditor_i::SewConformFreeBorders(SMESH::smIdType FirstNodeID1,
+                                          SMESH::smIdType SecondNodeID1,
+                                          SMESH::smIdType LastNodeID1,
+                                          SMESH::smIdType FirstNodeID2,
+                                          SMESH::smIdType SecondNodeID2)
 {
   SMESH_TRY;
   initData();
@@ -5399,13 +5624,13 @@ SMESH_MeshEditor_i::SewConformFreeBorders(CORBA::Long FirstNodeID1,
 //=======================================================================
 
 SMESH::SMESH_MeshEditor::Sew_Error
-SMESH_MeshEditor_i::SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder,
-                                    CORBA::Long SecondNodeIDOnFreeBorder,
-                                    CORBA::Long LastNodeIDOnFreeBorder,
-                                    CORBA::Long FirstNodeIDOnSide,
-                                    CORBA::Long LastNodeIDOnSide,
-                                    CORBA::Boolean CreatePolygons,
-                                    CORBA::Boolean CreatePolyedrs)
+SMESH_MeshEditor_i::SewBorderToSide(SMESH::smIdType FirstNodeIDOnFreeBorder,
+                                    SMESH::smIdType SecondNodeIDOnFreeBorder,
+                                    SMESH::smIdType LastNodeIDOnFreeBorder,
+                                    SMESH::smIdType FirstNodeIDOnSide,
+                                    SMESH::smIdType LastNodeIDOnSide,
+                                    CORBA::Boolean  CreatePolygons,
+                                    CORBA::Boolean  CreatePolyedrs)
 {
   SMESH_TRY;
   initData();
@@ -5461,12 +5686,12 @@ SMESH_MeshEditor_i::SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder,
 //=======================================================================
 
 SMESH::SMESH_MeshEditor::Sew_Error
-SMESH_MeshEditor_i::SewSideElements(const SMESH::long_array& IDsOfSide1Elements,
-                                    const SMESH::long_array& IDsOfSide2Elements,
-                                    CORBA::Long NodeID1OfSide1ToMerge,
-                                    CORBA::Long NodeID1OfSide2ToMerge,
-                                    CORBA::Long NodeID2OfSide1ToMerge,
-                                    CORBA::Long NodeID2OfSide2ToMerge)
+SMESH_MeshEditor_i::SewSideElements(const SMESH::smIdType_array& IDsOfSide1Elements,
+                                    const SMESH::smIdType_array& IDsOfSide2Elements,
+                                    SMESH::smIdType NodeID1OfSide1ToMerge,
+                                    SMESH::smIdType NodeID1OfSide2ToMerge,
+                                    SMESH::smIdType NodeID2OfSide1ToMerge,
+                                    SMESH::smIdType NodeID2OfSide2ToMerge)
 {
   SMESH_TRY;
   initData();
@@ -5520,8 +5745,8 @@ SMESH_MeshEditor_i::SewSideElements(const SMESH::long_array& IDsOfSide1Elements,
  */
 //================================================================================
 
-CORBA::Boolean SMESH_MeshEditor_i::ChangeElemNodes(CORBA::Long ide,
-                                                   const SMESH::long_array& newIDs)
+CORBA::Boolean SMESH_MeshEditor_i::ChangeElemNodes(SMESH::smIdType ide,
+                                                   const SMESH::smIdType_array& newIDs)
 {
   SMESH_TRY;
   initData();
@@ -5791,7 +6016,7 @@ bool SMESH_MeshEditor_i::idSourceToSet(SMESH::SMESH_IDSource_ptr  theIDSource,
     }
   }
   prepareIdSource( theIDSource );
-  SMESH::long_array_var anIDs = theIDSource->GetIDs();
+  SMESH::smIdType_array_var anIDs = theIDSource->GetIDs();
   if ( anIDs->length() == 0 )
   {
     if ( error ) *error = IDSource_EMPTY;
@@ -5905,8 +6130,8 @@ SMESH_MeshEditor_i::DoubleElements(SMESH::SMESH_IDSource_ptr theElements,
 */
 //================================================================================
 
-CORBA::Boolean SMESH_MeshEditor_i::DoubleNodes( const SMESH::long_array& theNodes,
-                                                const SMESH::long_array& theModifiedElems )
+CORBA::Boolean SMESH_MeshEditor_i::DoubleNodes( const SMESH::smIdType_array& theNodes,
+                                                const SMESH::smIdType_array& theModifiedElems )
 {
   SMESH_TRY;
   initData();
@@ -5944,11 +6169,11 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodes( const SMESH::long_array& theNode
 */
 //================================================================================
 
-CORBA::Boolean SMESH_MeshEditor_i::DoubleNode( CORBA::Long              theNodeId,
-                                               const SMESH::long_array& theModifiedElems )
+CORBA::Boolean SMESH_MeshEditor_i::DoubleNode( SMESH::smIdType              theNodeId,
+                                               const SMESH::smIdType_array& theModifiedElems )
 {
   SMESH_TRY;
-  SMESH::long_array_var aNodes = new SMESH::long_array;
+  SMESH::smIdType_array_var aNodes = new SMESH::smIdType_array;
   aNodes->length( 1 );
   aNodes[ 0 ] = theNodeId;
 
@@ -5982,12 +6207,12 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeGroup(SMESH::SMESH_GroupBase_ptr th
   if ( CORBA::is_nil( theNodes ) && theNodes->GetType() != SMESH::NODE )
     return false;
 
-  SMESH::long_array_var aNodes = theNodes->GetListOfID();
-  SMESH::long_array_var aModifiedElems;
+  SMESH::smIdType_array_var aNodes = theNodes->GetListOfID();
+  SMESH::smIdType_array_var aModifiedElems;
   if ( !CORBA::is_nil( theModifiedElems ) )
     aModifiedElems = theModifiedElems->GetListOfID();
   else
-    aModifiedElems = new SMESH::long_array;
+    aModifiedElems = new SMESH::smIdType_array;
 
   TPythonDump pyDump; // suppress dump by the next line
 
@@ -6023,12 +6248,12 @@ SMESH_MeshEditor_i::DoubleNodeGroupNew( SMESH::SMESH_GroupBase_ptr theNodes,
     return aNewGroup._retn();
 
   // Duplicate nodes
-  SMESH::long_array_var aNodes = theNodes->GetListOfID();
-  SMESH::long_array_var aModifiedElems;
+  SMESH::smIdType_array_var aNodes = theNodes->GetListOfID();
+  SMESH::smIdType_array_var aModifiedElems;
   if ( !CORBA::is_nil( theModifiedElems ) )
     aModifiedElems = theModifiedElems->GetListOfID();
   else {
-    aModifiedElems = new SMESH::long_array;
+    aModifiedElems = new SMESH::smIdType_array;
     aModifiedElems->length( 0 );
   }
 
@@ -6038,7 +6263,7 @@ SMESH_MeshEditor_i::DoubleNodeGroupNew( SMESH::SMESH_GroupBase_ptr theNodes,
   if ( aResult )
   {
     // Create group with newly created nodes
-    SMESH::long_array_var anIds = GetLastCreatedNodes();
+    SMESH::smIdType_array_var anIds = GetLastCreatedNodes();
     if (anIds->length() > 0) {
       std::string anUnindexedName (theNodes->GetName());
       std::string aNewName = GenerateGroupName(anUnindexedName + "_double");
@@ -6075,13 +6300,13 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeGroups(const SMESH::ListOfGroups& t
   initData();
 
   std::list< int > aNodes;
-  int i, n, j, m;
+  smIdType i, n, j, m;
   for ( i = 0, n = theNodes.length(); i < n; i++ )
   {
     SMESH::SMESH_GroupBase_var aGrp = theNodes[ i ];
     if ( !CORBA::is_nil( aGrp ) && aGrp->GetType() == SMESH::NODE )
     {
-      SMESH::long_array_var aCurr = aGrp->GetListOfID();
+      SMESH::smIdType_array_var aCurr = aGrp->GetListOfID();
       for ( j = 0, m = aCurr->length(); j < m; j++ )
         aNodes.push_back( aCurr[ j ] );
     }
@@ -6093,7 +6318,7 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeGroups(const SMESH::ListOfGroups& t
     SMESH::SMESH_GroupBase_var aGrp = theModifiedElems[ i ];
     if ( !CORBA::is_nil( aGrp ) && aGrp->GetType() != SMESH::NODE )
     {
-      SMESH::long_array_var aCurr = aGrp->GetListOfID();
+      SMESH::smIdType_array_var aCurr = aGrp->GetListOfID();
       for ( j = 0, m = aCurr->length(); j < m; j++ )
         anElems.push_back( aCurr[ j ] );
     }
@@ -6135,7 +6360,7 @@ SMESH_MeshEditor_i::DoubleNodeGroupsNew( const SMESH::ListOfGroups& theNodes,
   if ( aResult )
   {
     // Create group with newly created nodes
-    SMESH::long_array_var anIds = GetLastCreatedNodes();
+    SMESH::smIdType_array_var anIds = GetLastCreatedNodes();
     if (anIds->length() > 0) {
       std::string anUnindexedName (theNodes[0]->GetName());
       std::string aNewName = GenerateGroupName(anUnindexedName + "_double");
@@ -6165,9 +6390,9 @@ SMESH_MeshEditor_i::DoubleNodeGroupsNew( const SMESH::ListOfGroups& theNodes,
 */
 //================================================================================
 
-CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeElem( const SMESH::long_array& theElems,
-                                                   const SMESH::long_array& theNodesNot,
-                                                   const SMESH::long_array& theAffectedElems )
+CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeElem( const SMESH::smIdType_array& theElems,
+                                                   const SMESH::smIdType_array& theNodesNot,
+                                                   const SMESH::smIdType_array& theAffectedElems )
 {
   SMESH_TRY;
   initData();
@@ -6205,9 +6430,9 @@ CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeElem( const SMESH::long_array& theE
 */
 //================================================================================
 
-CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeElemInRegion ( const SMESH::long_array& theElems,
-                                                            const SMESH::long_array& theNodesNot,
-                                                            GEOM::GEOM_Object_ptr    theShape )
+CORBA::Boolean SMESH_MeshEditor_i::DoubleNodeElemInRegion ( const SMESH::smIdType_array& theElems,
+                                                            const SMESH::smIdType_array& theNodesNot,
+                                                            GEOM::GEOM_Object_ptr        theShape )
 {
   SMESH_TRY;
   initData();
@@ -6360,14 +6585,14 @@ SMESH_MeshEditor_i::DoubleNodeElemGroup2New(SMESH::SMESH_GroupBase_ptr theElems,
     std::string aNewName = GenerateGroupName( std::string(elemGroupName.in()) + "_double");
     if ( !getEditor().GetLastCreatedElems().empty() && theElemGroupNeeded )
     {
-      SMESH::long_array_var anIds = GetLastCreatedElems();
+      SMESH::smIdType_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().empty() && theNodeGroupNeeded )
     {
-      SMESH::long_array_var anIds = GetLastCreatedNodes();
+      SMESH::smIdType_array_var anIds = GetLastCreatedNodes();
       aNewNodeGroup = myMesh_i->CreateGroup(SMESH::NODE, aNewName.c_str());
       aNewNodeGroup->Add(anIds);
     }
@@ -6461,7 +6686,7 @@ static void listOfGroupToSet(const SMESH::ListOfGroups& theGrpList,
     if ( !CORBA::is_nil( aGrp ) && (theIsNodeGrp ? aGrp->GetType() == SMESH::NODE
                                     : aGrp->GetType() != SMESH::NODE ) )
     {
-      SMESH::long_array_var anIDs = aGrp->GetIDs();
+      SMESH::smIdType_array_var anIDs = aGrp->GetIDs();
       arrayToSet( anIDs, theMeshDS, theElemSet, theIsNodeGrp ? SMDSAbs_Node : SMDSAbs_All );
     }
   }
@@ -6588,14 +6813,14 @@ SMESH_MeshEditor_i::DoubleNodeElemGroups2New(const SMESH::ListOfGroups& theElems
     std::string aNewName = GenerateGroupName( std::string(elemGroupName.in()) + "_double");
     if ( !getEditor().GetLastCreatedElems().empty() && theElemGroupNeeded )
     {
-      SMESH::long_array_var anIds = GetLastCreatedElems();
+      SMESH::smIdType_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().empty() && theNodeGroupNeeded )
     {
-      SMESH::long_array_var anIds = GetLastCreatedNodes();
+      SMESH::smIdType_array_var anIds = GetLastCreatedNodes();
       aNewNodeGroup = myMesh_i->CreateGroup(SMESH::NODE, aNewName.c_str());
       aNewNodeGroup->Add(anIds);
     }
@@ -6671,7 +6896,7 @@ SMESH_MeshEditor_i::DoubleNodeElemGroupsInRegion(const SMESH::ListOfGroups& theE
          duplication is not performed.
   This method is the first step of DoubleNodeElemGroupsInRegion.
   \param theElems - list of groups of elements (edges or faces) to be replicated
-  \param theNodesNot - list of groups of nodes not to replicated
+  \param theNodesNot - list of groups of nodes not to 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.
@@ -6709,9 +6934,9 @@ SMESH_MeshEditor_i::AffectedElemGroupsInRegion( const SMESH::ListOfGroups& theEl
   TPythonDump pyDump;
   if ( aResult && anAffected.size() > 0 )
   {
-    SMESH::long_array_var volumeIds = new SMESH::long_array;
-    SMESH::long_array_var   faceIds = new SMESH::long_array;
-    SMESH::long_array_var   edgeIds = new SMESH::long_array;
+    SMESH::smIdType_array_var volumeIds = new SMESH::smIdType_array;
+    SMESH::smIdType_array_var   faceIds = new SMESH::smIdType_array;
+    SMESH::smIdType_array_var   edgeIds = new SMESH::smIdType_array;
     volumeIds->length( anAffected.size() );
     faceIds  ->length( anAffected.size() );
     edgeIds  ->length( anAffected.size() );
@@ -6723,7 +6948,7 @@ SMESH_MeshEditor_i::AffectedElemGroupsInRegion( const SMESH::ListOfGroups& theEl
     for (; eIt != anAffected.end(); ++eIt)
     {
       const SMDS_MeshElement* anElem = *eIt;
-      int elemId = anElem->GetID();
+      smIdType elemId = anElem->GetID();
       switch ( anElem->GetType() ) {
       case SMDSAbs_Volume: volumeIds[ivol++] = elemId; break;
       case SMDSAbs_Face:    faceIds[iface++] = elemId; break;
@@ -6845,7 +7070,7 @@ SMESH_MeshEditor_i::DoubleNodesOnGroupBoundaries( const SMESH::ListOfGroups& the
     {
 //      if ( aGrp->GetType() != SMESH::VOLUME )
 //        THROW_SALOME_CORBA_EXCEPTION("Not a volume group", SALOME::BAD_PARAM);
-      SMESH::long_array_var anIDs = aGrp->GetIDs();
+      SMESH::smIdType_array_var anIDs = aGrp->GetIDs();
       arrayToSet( anIDs, aMeshDS, domains[ i ], SMDSAbs_All );
     }
   }
@@ -6897,7 +7122,7 @@ SMESH_MeshEditor_i::CreateFlatElementsOnFacesGroups( const SMESH::ListOfGroups&
       TIDSortedElemSet faceGroup;
       faceGroup.clear();
       faceGroups.push_back(faceGroup);
-      SMESH::long_array_var anIDs = aGrp->GetIDs();
+      SMESH::smIdType_array_var anIDs = aGrp->GetIDs();
       arrayToSet( anIDs, aMeshDS, faceGroups[ i ], SMDSAbs_All );
     }
   }
@@ -7081,6 +7306,7 @@ SMESH_MeshEditor_i::MakeBoundaryMesh(SMESH::SMESH_IDSource_ptr idSource,
  *    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 toCreateAllElements - if true all the dim element are created from the mesh
  *  \param groups - optional groups of elements to make boundary around
  *  \param mesh - returns the mesh where elements were added to
  *  \param group - returns the created group, if any
@@ -7092,6 +7318,7 @@ CORBA::Long SMESH_MeshEditor_i::MakeBoundaryElements(SMESH::Bnd_Dimension dim,
                                                      const char* groupName,
                                                      const char* meshName,
                                                      CORBA::Boolean toCopyAll,
+                                                     CORBA::Boolean toCreateAllElements,
                                                      const SMESH::ListOfIDSources& groups,
                                                      SMESH::SMESH_Mesh_out mesh,
                                                      SMESH::SMESH_Group_out group)
@@ -7129,7 +7356,7 @@ CORBA::Long SMESH_MeshEditor_i::MakeBoundaryElements(SMESH::Bnd_Dimension dim,
     // process groups belonging to another mesh
     SMESH::SMESH_Mesh_var    otherMesh = groupsOfOtherMesh[0]->GetMesh();
     SMESH::SMESH_MeshEditor_var editor = otherMesh->GetMeshEditor();
-    nbAdded += editor->MakeBoundaryElements( dim, groupName, meshName, toCopyAll,
+    nbAdded += editor->MakeBoundaryElements( dim, groupName, meshName, toCopyAll, toCreateAllElements,
                                              groupsOfOtherMesh, mesh, group );
   }
 
@@ -7156,6 +7383,7 @@ CORBA::Long SMESH_MeshEditor_i::MakeBoundaryElements(SMESH::Bnd_Dimension dim,
   SMESH_Mesh*     srcMesh = ( toCopyMesh && !toCopyAll ) ? myMesh : tgtMesh;
   SMESHDS_Mesh* srcMeshDS = srcMesh->GetMeshDS();
 
+
   // group of boundary elements
   SMESH_Group* smesh_group = 0;
   SMDSAbs_ElementType elemType = (dim == SMESH::BND_2DFROM3D) ? SMDSAbs_Volume : SMDSAbs_Face;
@@ -7168,7 +7396,6 @@ CORBA::Long SMESH_MeshEditor_i::MakeBoundaryElements(SMESH::Bnd_Dimension dim,
   }
 
   TIDSortedElemSet elements;
-
   if ( groups.length() > 0 )
   {
     for ( int i = 0; i < nbGroups; ++i )
@@ -7185,7 +7412,8 @@ CORBA::Long SMESH_MeshEditor_i::MakeBoundaryElements(SMESH::Bnd_Dimension dim,
                                                  /*toCopyElements=*/false,
                                                  /*toCopyExistingBondary=*/srcMesh != tgtMesh,
                                                  /*toAddExistingBondary=*/true,
-                                                 /*aroundElements=*/true);
+                                                 /*aroundElements=*/true,
+                                                 /*toCreateAllElements=*/toCreateAllElements);
       }
     }
   }
@@ -7197,7 +7425,8 @@ CORBA::Long SMESH_MeshEditor_i::MakeBoundaryElements(SMESH::Bnd_Dimension dim,
                                              tgtMesh,
                                              /*toCopyElements=*/false,
                                              /*toCopyExistingBondary=*/srcMesh != tgtMesh,
-                                             /*toAddExistingBondary=*/true);
+                                             /*toAddExistingBondary=*/true,
+                                             /*aroundElements=*/toCreateAllElements);
   }
   tgtMesh->GetMeshDS()->Modified();
 
@@ -7212,13 +7441,21 @@ CORBA::Long SMESH_MeshEditor_i::MakeBoundaryElements(SMESH::Bnd_Dimension dim,
   if ( group_var->_is_nil() )
     pyDump << "_NoneGroup = "; // assignment to None is forbidden
   else
+
     pyDump << group_var << " = ";
-  pyDump << this << ".MakeBoundaryElements( "
-         << "SMESH." << dimName[int(dim)] << ", "
-         << "'" << groupName << "', "
-         << "'" << meshName<< "', "
-         << toCopyAll << ", "
-         << groups << ")";
+  
+  if ( toCreateAllElements )
+    pyDump << this << ".MakeBoundaryOfEachElement( ";
+  else
+  {
+    pyDump << this << ".MakeBoundaryElements( "
+           << "SMESH." << dimName[int(dim)] << ", ";
+  }
+
+  pyDump<< "'" << groupName << "', "
+        << "'" << meshName<< "', "
+        << toCopyAll << ", "
+        << groups << ")";
 
   mesh  = mesh_var._retn();
   group = group_var._retn();
index b0b9dd2707e881f02ea23072ed0b21d843586a31..4280181c20d6c80731be7a2f64eaa69202473f1d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -71,13 +71,13 @@ public:
    * created this method returns list of their IDs, if new nodes
    * not created - returns an empty list
    */
-  SMESH::long_array* GetLastCreatedNodes();
+  SMESH::smIdType_array* GetLastCreatedNodes();
   /*!
    * If during last operation of MeshEditor some elements were
    * created this method returns list of their IDs, if new elements
    * not created - returns an empty list
    */
-  SMESH::long_array* GetLastCreatedElems();
+  SMESH::smIdType_array* GetLastCreatedElems();
   /*!
    * \brief Clears sequences of last created elements and nodes 
    */
@@ -90,35 +90,36 @@ public:
   /*!
    * \brief Wrap a sequence of ids in a SMESH_IDSource
    */
-  SMESH::SMESH_IDSource_ptr MakeIDSource(const SMESH::long_array& IDsOfElements,
-                                         SMESH::ElementType       type);
+  SMESH::SMESH_IDSource_ptr MakeIDSource(const SMESH::smIdType_array& IDsOfElements,
+                                         SMESH::ElementType           type);
   static bool               IsTemporaryIDSource( SMESH::SMESH_IDSource_ptr& idSource );
-  static CORBA::Long*       GetTemporaryIDs( SMESH::SMESH_IDSource_ptr& idSource, int& nbIds );
+  static SMESH::smIdType*       GetTemporaryIDs( SMESH::SMESH_IDSource_ptr& idSource, SMESH::smIdType& nbIds );
 
   /*!
    * \brief Generates the unique group name
    */
   std::string GenerateGroupName(const std::string& thePrefix);
 
-  CORBA::Boolean RemoveElements(const SMESH::long_array & IDsOfElements);
-  CORBA::Boolean RemoveNodes   (const SMESH::long_array & IDsOfNodes);
-  CORBA::Long    RemoveOrphanNodes();
+  CORBA::Boolean  RemoveElements(const SMESH::smIdType_array & IDsOfElements);
+  CORBA::Boolean  RemoveNodes   (const SMESH::smIdType_array & IDsOfNodes);
+  SMESH::smIdType RemoveOrphanNodes();
+  void            RemoveNodeWithReconnection(SMESH::smIdType nodeID);
 
   /*!
    * Methods for creation new elements.
    * Returns ID of created element or 0 if element not created
    */
-  CORBA::Long AddNode(CORBA::Double x, CORBA::Double y, CORBA::Double z);
-  CORBA::Long Add0DElement(CORBA::Long IDOfNode, CORBA::Boolean DuplicateElements);
-  CORBA::Long AddBall(CORBA::Long IDOfNodem, CORBA::Double diameter);
-  CORBA::Long AddEdge(const SMESH::long_array & IDsOfNodes);
-  CORBA::Long AddFace(const SMESH::long_array & IDsOfNodes);
-  CORBA::Long AddPolygonalFace(const SMESH::long_array & IDsOfNodes);
-  CORBA::Long AddQuadPolygonalFace(const SMESH::long_array & IDsOfNodes);
-  CORBA::Long AddVolume(const SMESH::long_array & IDsOfNodes);
-  CORBA::Long AddPolyhedralVolume(const SMESH::long_array & IDsOfNodes,
+  SMESH::smIdType AddNode(CORBA::Double x, CORBA::Double y, CORBA::Double z);
+  SMESH::smIdType Add0DElement(SMESH::smIdType IDOfNode, CORBA::Boolean DuplicateElements);
+  SMESH::smIdType AddBall(SMESH::smIdType IDOfNodem, CORBA::Double diameter);
+  SMESH::smIdType AddEdge(const SMESH::smIdType_array & IDsOfNodes);
+  SMESH::smIdType AddFace(const SMESH::smIdType_array & IDsOfNodes);
+  SMESH::smIdType AddPolygonalFace(const SMESH::smIdType_array & IDsOfNodes);
+  SMESH::smIdType AddQuadPolygonalFace(const SMESH::smIdType_array & IDsOfNodes);
+  SMESH::smIdType AddVolume(const SMESH::smIdType_array & IDsOfNodes);
+  SMESH::smIdType AddPolyhedralVolume(const SMESH::smIdType_array & IDsOfNodes,
                                   const SMESH::long_array & Quantities);
-  CORBA::Long AddPolyhedralVolumeByFaces(const SMESH::long_array & IdsOfFaces);
+  SMESH::smIdType AddPolyhedralVolumeByFaces(const SMESH::smIdType_array & IdsOfFaces);
 
   /*!
    * \brief Create 0D elements on all nodes of the given object except those 
@@ -139,14 +140,14 @@ public:
    * \param NodeID - node ID
    * \param VertexID - vertex ID available through GEOM_Object.GetSubShapeIndices()[0]
    */
-  void SetNodeOnVertex(CORBA::Long NodeID, CORBA::Long VertexID);
+  void SetNodeOnVertex(SMESH::smIdType NodeID, CORBA::Long VertexID);
   /*!
    * \brief Store node position on an edge
    * \param NodeID - node ID
    * \param EdgeID - edge ID available through GEOM_Object.GetSubShapeIndices()[0]
    * \param paramOnEdge - parameter on edge where the node is located
    */
-  void SetNodeOnEdge(CORBA::Long NodeID, CORBA::Long EdgeID,
+  void SetNodeOnEdge(SMESH::smIdType NodeID, CORBA::Long EdgeID,
                      CORBA::Double paramOnEdge);
   /*!
    * \brief Store node position on a face
@@ -155,30 +156,57 @@ public:
    * \param u - U parameter on face where the node is located
    * \param v - V parameter on face where the node is located
    */
-  void SetNodeOnFace(CORBA::Long NodeID, CORBA::Long FaceID,
+  void SetNodeOnFace(SMESH::smIdType NodeID, CORBA::Long FaceID,
                      CORBA::Double u, CORBA::Double v);
   /*!
    * \brief Bind a node to a solid
    * \param NodeID - node ID
    * \param SolidID - vertex ID available through GEOM_Object.GetSubShapeIndices()[0]
    */
-  void SetNodeInVolume(CORBA::Long NodeID, CORBA::Long SolidID);
+  void SetNodeInVolume(SMESH::smIdType NodeID, CORBA::Long SolidID);
   /*!
    * \brief Bind an element to a shape
    * \param ElementID - element ID
    * \param ShapeID - shape ID available through GEOM_Object.GetSubShapeIndices()[0]
    */
-  void SetMeshElementOnShape(CORBA::Long ElementID, CORBA::Long ShapeID);
+  void SetMeshElementOnShape(SMESH::smIdType ElementID, CORBA::Long ShapeID);
 
-
-  CORBA::Boolean MoveNode(CORBA::Long NodeID,
+  /*!
+   * \brief Change node location
+   */
+  CORBA::Boolean MoveNode(SMESH::smIdType NodeID,
                           CORBA::Double x, CORBA::Double y, CORBA::Double z);
 
-  CORBA::Boolean InverseDiag(CORBA::Long NodeID1, CORBA::Long NodeID2);
-  CORBA::Boolean DeleteDiag(CORBA::Long NodeID1, CORBA::Long NodeID2);
-  CORBA::Boolean Reorient(const SMESH::long_array & IDsOfElements);
-  CORBA::Boolean ReorientObject(SMESH::SMESH_IDSource_ptr theObject);
+  /*!
+   * \brief Swap a diagonal of a quadrangle formed by two adjacent triangles
+   */
+  CORBA::Boolean InverseDiag(SMESH::smIdType NodeID1, SMESH::smIdType NodeID2);
+  /*!
+   * \brief Delete a diagonal of a quadrangle formed by two adjacent triangles
+   *        so that a new quadrangle appears in place of the triangles
+   */
+  CORBA::Boolean DeleteDiag(SMESH::smIdType NodeID1, SMESH::smIdType NodeID2);
+  /*!
+   * \brief Split a diagonal of a quadrangle formed by two adjacent triangles
+   *        so that four new triangles appear in place of the two triangles
+   */
+  void AddNodeOnSegment(SMESH::smIdType segmentNode1, SMESH::smIdType segmentNode2,
+                        CORBA::Double   position);
+  /*!
+   * \brief Split a face into triangles by adding a new node onto the face
+   *        and connecting the new node with face nodes
+   */
+  void AddNodeOnFace(SMESH::smIdType triangle,
+                     CORBA::Double x, CORBA::Double y, CORBA::Double z);
 
+  /*!
+   * \brief Change orientation of cells
+   */
+  CORBA::Boolean Reorient(const SMESH::smIdType_array & IDsOfElements);
+  /*!
+   * \brief Change orientation of cells
+   */
+  CORBA::Boolean ReorientObject(SMESH::SMESH_IDSource_ptr theObject);
   /*!
    * \brief Reorient faces contained in \a the2Dgroup.
    * \param the2Dgroup - the mesh or its part to reorient
@@ -192,6 +220,17 @@ public:
                          const SMESH::DirStruct&   theDirection,
                          CORBA::Long               theFace,
                          const SMESH::PointStruct& thePoint);
+  /*!
+   * \brief Reorient faces contained in a list of \a objectFaces
+   *        equally to faces contained in a list of \a referenceFaces.
+   * \param objectFaces - faces to reorient in a list including either
+   *        the whole mesh or groups and/or sub-meshes.
+   * \param referenceFaces  - correctly oriented faces in a list of groups and/or sub-meshes.
+   *        It can be empty, then the 1st face in \a objectFaces is used as the reference.
+   * \return number of reoriented faces.
+   */
+  CORBA::Long Reorient2DByNeighbours(const SMESH::ListOfIDSources& objectFaces,
+                                     const SMESH::ListOfIDSources& referenceFaces);
   /*!
    * \brief Reorient faces basing on orientation of adjacent volumes.
    * \param faces - a list of objects containing face to reorient
@@ -205,23 +244,23 @@ public:
                              CORBA::Boolean                 outsideNormal);
 
   // Split/Join
-  CORBA::Boolean TriToQuad       (const SMESH::long_array &   IDsOfElements,
-                                  SMESH::NumericalFunctor_ptr Criterion,
-                                  CORBA::Double               MaxAngle);
-  CORBA::Boolean TriToQuadObject (SMESH::SMESH_IDSource_ptr   theObject,
-                                  SMESH::NumericalFunctor_ptr Criterion,
-                                  CORBA::Double               MaxAngle);
-  CORBA::Boolean QuadToTri       (const SMESH::long_array &   IDsOfElements,
-                                  SMESH::NumericalFunctor_ptr Criterion);
-  CORBA::Boolean QuadToTriObject (SMESH::SMESH_IDSource_ptr   theObject,
-                                  SMESH::NumericalFunctor_ptr Criterion);
-  void           QuadTo4Tri      (SMESH::SMESH_IDSource_ptr   theObject);
-  CORBA::Boolean SplitQuad       (const SMESH::long_array &   IDsOfElements,
-                                  CORBA::Boolean              Diag13);
-  CORBA::Boolean SplitQuadObject (SMESH::SMESH_IDSource_ptr   theObject,
-                                  CORBA::Boolean              Diag13);
-  CORBA::Long    BestSplit       (CORBA::Long                 IDOfQuad,
-                                  SMESH::NumericalFunctor_ptr Criterion);
+  CORBA::Boolean TriToQuad       (const SMESH::smIdType_array & IDsOfElements,
+                                  SMESH::NumericalFunctor_ptr   Criterion,
+                                  CORBA::Double                 MaxAngle);
+  CORBA::Boolean TriToQuadObject (SMESH::SMESH_IDSource_ptr     theObject,
+                                  SMESH::NumericalFunctor_ptr   Criterion,
+                                  CORBA::Double                 MaxAngle);
+  CORBA::Boolean QuadToTri       (const SMESH::smIdType_array & IDsOfElements,
+                                  SMESH::NumericalFunctor_ptr   Criterion);
+  CORBA::Boolean QuadToTriObject (SMESH::SMESH_IDSource_ptr     theObject,
+                                  SMESH::NumericalFunctor_ptr   Criterion);
+  void           QuadTo4Tri      (SMESH::SMESH_IDSource_ptr     theObject);
+  CORBA::Boolean SplitQuad       (const SMESH::smIdType_array & IDsOfElements,
+                                  CORBA::Boolean                Diag13);
+  CORBA::Boolean SplitQuadObject (SMESH::SMESH_IDSource_ptr     theObject,
+                                  CORBA::Boolean                Diag13);
+  CORBA::Short   BestSplit       (SMESH::smIdType               IDOfQuad,
+                                  SMESH::NumericalFunctor_ptr   Criterion);
   void           SplitVolumesIntoTetra(SMESH::SMESH_IDSource_ptr elems,
                                        CORBA::Short             methodFlags);
   void           SplitHexahedraIntoPrisms(SMESH::SMESH_IDSource_ptr  elems,
@@ -231,35 +270,35 @@ public:
                                           CORBA::Boolean             allDomains);
   void           SplitBiQuadraticIntoLinear(const SMESH::ListOfIDSources& elems);
 
-  CORBA::Boolean Smooth(const SMESH::long_array &              IDsOfElements,
-                        const SMESH::long_array &              IDsOfFixedNodes,
-                        CORBA::Long                            MaxNbOfIterations,
+  CORBA::Boolean Smooth(const SMESH::smIdType_array &          IDsOfElements,
+                        const SMESH::smIdType_array &          IDsOfFixedNodes,
+                        CORBA::Short                           MaxNbOfIterations,
                         CORBA::Double                          MaxAspectRatio,
                         SMESH::SMESH_MeshEditor::Smooth_Method Method);
   CORBA::Boolean SmoothObject(SMESH::SMESH_IDSource_ptr              theObject,
-                              const SMESH::long_array &              IDsOfFixedNodes,
-                              CORBA::Long                            MaxNbOfIterations,
+                              const SMESH::smIdType_array &          IDsOfFixedNodes,
+                              CORBA::Short                           MaxNbOfIterations,
                               CORBA::Double                          MaxAspectRatio,
                               SMESH::SMESH_MeshEditor::Smooth_Method Method);
-  CORBA::Boolean SmoothParametric(const SMESH::long_array &              IDsOfElements,
-                                  const SMESH::long_array &              IDsOfFixedNodes,
-                                  CORBA::Long                            MaxNbOfIterations,
+  CORBA::Boolean SmoothParametric(const SMESH::smIdType_array &          IDsOfElements,
+                                  const SMESH::smIdType_array &          IDsOfFixedNodes,
+                                  CORBA::Short                           MaxNbOfIterations,
                                   CORBA::Double                          MaxAspectRatio,
                                   SMESH::SMESH_MeshEditor::Smooth_Method Method) ;
   CORBA::Boolean SmoothParametricObject(SMESH::SMESH_IDSource_ptr              theObject,
-                                        const SMESH::long_array &              IDsOfFixedNodes,
-                                        CORBA::Long                            MaxNbOfIterations,
+                                        const SMESH::smIdType_array &          IDsOfFixedNodes,
+                                        CORBA::Short                           MaxNbOfIterations,
                                         CORBA::Double                          MaxAspectRatio,
                                         SMESH::SMESH_MeshEditor::Smooth_Method Method);
-  CORBA::Boolean smooth(const SMESH::long_array &              IDsOfElements,
-                        const SMESH::long_array &              IDsOfFixedNodes,
-                        CORBA::Long                            MaxNbOfIterations,
+  CORBA::Boolean smooth(const SMESH::smIdType_array &          IDsOfElements,
+                        const SMESH::smIdType_array &          IDsOfFixedNodes,
+                        CORBA::Short                           MaxNbOfIterations,
                         CORBA::Double                          MaxAspectRatio,
                         SMESH::SMESH_MeshEditor::Smooth_Method Method,
                         bool                                   IsParametric);
   CORBA::Boolean smoothObject(SMESH::SMESH_IDSource_ptr              theObject,
-                              const SMESH::long_array &              IDsOfFixedNodes,
-                              CORBA::Long                            MaxNbOfIterations,
+                              const SMESH::smIdType_array &          IDsOfFixedNodes,
+                              CORBA::Short                           MaxNbOfIterations,
                               CORBA::Double                          MaxAspectRatio,
                               SMESH::SMESH_MeshEditor::Smooth_Method Method,
                               bool                                   IsParametric);
@@ -303,12 +342,12 @@ public:
                                          CORBA::Boolean                useInputElemsOnly,
                                          CORBA::Boolean                makeGroups,
                                          CORBA::Short                  dim);
-  SMESH::ListOfGroups*  AdvancedExtrusion(const SMESH::long_array & theIDsOfElements,
-                                          const SMESH::DirStruct &  theStepVector,
-                                          CORBA::Long               theNbOfSteps,
-                                          CORBA::Long               theExtrFlags,
-                                          CORBA::Double             theSewTolerance,
-                                          CORBA::Boolean            theMakeGroups);
+  SMESH::ListOfGroups*  AdvancedExtrusion(const SMESH::smIdType_array & theIDsOfElements,
+                                          const SMESH::DirStruct &      theStepVector,
+                                          CORBA::Long                   theNbOfSteps,
+                                          CORBA::Long                   theExtrFlags,
+                                          CORBA::Double                 theSewTolerance,
+                                          CORBA::Boolean                theMakeGroups);
 
   SMESH::ListOfGroups*
     ExtrusionAlongPathObjects(const SMESH::ListOfIDSources & Nodes,
@@ -316,7 +355,7 @@ public:
                               const SMESH::ListOfIDSources & Faces,
                               SMESH::SMESH_IDSource_ptr      PathMesh,
                               GEOM::GEOM_Object_ptr          PathShape,
-                              CORBA::Long                    NodeStart,
+                              SMESH::smIdType                NodeStart,
                               CORBA::Boolean                 HasAngles,
                               const SMESH::double_array &    Angles,
                               CORBA::Boolean                 AnglesVariation,
@@ -331,7 +370,7 @@ public:
                                                GEOM::GEOM_Object_ptr       PathShape,
                                                const SMESH::double_array & Angles);
 
-  void Mirror(const SMESH::long_array &           IDsOfElements,
+  void Mirror(const SMESH::smIdType_array &       IDsOfElements,
               const SMESH::AxisStruct &           Axis,
               SMESH::SMESH_MeshEditor::MirrorType MirrorType,
               CORBA::Boolean                      Copy);
@@ -339,39 +378,39 @@ public:
                     const SMESH::AxisStruct &           Axis,
                     SMESH::SMESH_MeshEditor::MirrorType MirrorType,
                     CORBA::Boolean                      Copy);
-  void Translate(const SMESH::long_array & IDsOfElements,
-                 const SMESH::DirStruct &   Vector,
-                 CORBA::Boolean            Copy);
+  void Translate(const SMESH::smIdType_array & IDsOfElements,
+                 const SMESH::DirStruct &      Vector,
+                 CORBA::Boolean                Copy);
   void TranslateObject(SMESH::SMESH_IDSource_ptr  theObject,
                        const SMESH::DirStruct &   Vector,
                        CORBA::Boolean             Copy);
-  void Rotate(const SMESH::long_array & IDsOfElements,
-              const SMESH::AxisStruct &  Axis,
-              CORBA::Double             Angle,
-              CORBA::Boolean            Copy);
+  void Rotate(const SMESH::smIdType_array & IDsOfElements,
+              const SMESH::AxisStruct &     Axis,
+              CORBA::Double                 Angle,
+              CORBA::Boolean                Copy);
   void RotateObject(SMESH::SMESH_IDSource_ptr  theObject,
                     const SMESH::AxisStruct &  Axis,
                     CORBA::Double              Angle,
                     CORBA::Boolean             Copy);
 
-  SMESH::ListOfGroups* MirrorMakeGroups(const SMESH::long_array&            IDsOfElements,
+  SMESH::ListOfGroups* MirrorMakeGroups(const SMESH::smIdType_array&        IDsOfElements,
                                         const SMESH::AxisStruct&            Mirror,
                                         SMESH::SMESH_MeshEditor::MirrorType MirrorType);
   SMESH::ListOfGroups* MirrorObjectMakeGroups(SMESH::SMESH_IDSource_ptr           Object,
                                               const SMESH::AxisStruct&            Mirror,
                                               SMESH::SMESH_MeshEditor::MirrorType MirrorType);
-  SMESH::ListOfGroups* TranslateMakeGroups(const SMESH::long_array& IDsOfElements,
-                                           const SMESH::DirStruct&  Vector);
+  SMESH::ListOfGroups* TranslateMakeGroups(const SMESH::smIdType_array& IDsOfElements,
+                                           const SMESH::DirStruct&      Vector);
   SMESH::ListOfGroups* TranslateObjectMakeGroups(SMESH::SMESH_IDSource_ptr Object,
                                                  const SMESH::DirStruct&   Vector);
-  SMESH::ListOfGroups* RotateMakeGroups(const SMESH::long_array& IDsOfElements,
-                                        const SMESH::AxisStruct& Axis,
-                                        CORBA::Double            AngleInRadians);
+  SMESH::ListOfGroups* RotateMakeGroups(const SMESH::smIdType_array& IDsOfElements,
+                                        const SMESH::AxisStruct&     Axis,
+                                        CORBA::Double                AngleInRadians);
   SMESH::ListOfGroups* RotateObjectMakeGroups(SMESH::SMESH_IDSource_ptr Object,
                                               const SMESH::AxisStruct&  Axis,
                                               CORBA::Double             AngleInRadians);
 
-  SMESH::SMESH_Mesh_ptr MirrorMakeMesh(const SMESH::long_array&            IDsOfElements,
+  SMESH::SMESH_Mesh_ptr MirrorMakeMesh(const SMESH::smIdType_array&        IDsOfElements,
                                        const SMESH::AxisStruct&            Mirror,
                                        SMESH::SMESH_MeshEditor::MirrorType MirrorType,
                                        CORBA::Boolean                      CopyGroups,
@@ -381,19 +420,19 @@ public:
                                              SMESH::SMESH_MeshEditor::MirrorType MirrorType,
                                              CORBA::Boolean                      CopyGroups,
                                              const char*                         MeshName);
-  SMESH::SMESH_Mesh_ptr TranslateMakeMesh(const SMESH::long_array& IDsOfElements,
-                                          const SMESH::DirStruct&  Vector,
-                                          CORBA::Boolean           CopyGroups,
-                                          const char*              MeshName);
+  SMESH::SMESH_Mesh_ptr TranslateMakeMesh(const SMESH::smIdType_array& IDsOfElements,
+                                          const SMESH::DirStruct&      Vector,
+                                          CORBA::Boolean               CopyGroups,
+                                          const char*                  MeshName);
   SMESH::SMESH_Mesh_ptr TranslateObjectMakeMesh(SMESH::SMESH_IDSource_ptr Object,
                                                 const SMESH::DirStruct&   Vector,
                                                 CORBA::Boolean            CopyGroups,
                                                 const char*               MeshName);
-  SMESH::SMESH_Mesh_ptr RotateMakeMesh(const SMESH::long_array& IDsOfElements,
-                                       const SMESH::AxisStruct& Axis,
-                                       CORBA::Double            AngleInRadians,
-                                       CORBA::Boolean           CopyGroups,
-                                       const char*              MeshName);
+  SMESH::SMESH_Mesh_ptr RotateMakeMesh(const SMESH::smIdType_array& IDsOfElements,
+                                       const SMESH::AxisStruct&     Axis,
+                                       CORBA::Double                AngleInRadians,
+                                       CORBA::Boolean               CopyGroups,
+                                       const char*                  MeshName);
   SMESH::SMESH_Mesh_ptr RotateObjectMakeMesh(SMESH::SMESH_IDSource_ptr Object,
                                              const SMESH::AxisStruct&  Axis,
                                              CORBA::Double             AngleInRadians,
@@ -443,21 +482,21 @@ public:
   void MergeElements(const SMESH::array_of_long_array& GroupsOfElementsID,
                      const SMESH::ListOfIDSources&     ElementsToKeep);
   void MergeEqualElements();
-  CORBA::Long MoveClosestNodeToPoint(CORBA::Double x,
-                                     CORBA::Double y,
-                                     CORBA::Double z,
-                                     CORBA::Long   nodeID);
+  SMESH::smIdType MoveClosestNodeToPoint(CORBA::Double   x,
+                                         CORBA::Double   y,
+                                         CORBA::Double   z,
+                                         SMESH::smIdType nodeID);
   /*!
    * \brief Return ID of node closest to a given point
    */
-  CORBA::Long FindNodeClosestTo(CORBA::Double x,
+  SMESH::smIdType FindNodeClosestTo(CORBA::Double x,
                                 CORBA::Double y,
                                 CORBA::Double z);
   /*!
    * Return elements of given type where the given point is IN or ON.
    * 'ALL' type means elements of any type excluding nodes
    */
-  SMESH::long_array* FindElementsByPoint(CORBA::Double      x,
+  SMESH::smIdType_array* FindElementsByPoint(CORBA::Double      x,
                                          CORBA::Double      y,
                                          CORBA::Double      z,
                                          SMESH::ElementType type);
@@ -466,7 +505,7 @@ public:
    * where the given point is IN or ON.
    * 'ALL' type means elements of any type excluding nodes
    */
-  SMESH::long_array* FindAmongElementsByPoint(SMESH::SMESH_IDSource_ptr elements,
+  SMESH::smIdType_array* FindAmongElementsByPoint(SMESH::SMESH_IDSource_ptr elements,
                                               CORBA::Double             x,
                                               CORBA::Double             y,
                                               CORBA::Double             z,
@@ -478,7 +517,7 @@ public:
    * and coordinates of the projection point.
    * In the case if nothing found, return -1 and []
    */
-  CORBA::Long ProjectPoint(CORBA::Double             x,
+  SMESH::smIdType ProjectPoint(CORBA::Double             x,
                            CORBA::Double             y,
                            CORBA::Double             z,
                            SMESH::ElementType        type,
@@ -509,7 +548,7 @@ public:
    *         If a group is closed, the first and last nodes of the group are same.
    */
   SMESH::array_of_long_array* Get1DBranches( SMESH::SMESH_IDSource_ptr      edges,
-                                             CORBA::Long                    startNode,
+                                             SMESH::smIdType                startNode,
                                              SMESH::array_of_long_array_out nodeGroups);
 
   /*!
@@ -535,51 +574,51 @@ public:
                                         CORBA::Boolean                      createPolyedrs);
 
   SMESH::SMESH_MeshEditor::Sew_Error
-    SewFreeBorders(CORBA::Long FirstNodeID1,
-                   CORBA::Long SecondNodeID1,
-                   CORBA::Long LastNodeID1,
-                   CORBA::Long FirstNodeID2,
-                   CORBA::Long SecondNodeID2,
-                   CORBA::Long LastNodeID2,
-                   CORBA::Boolean CreatePolygons,
-                   CORBA::Boolean CreatePolyedrs);
+    SewFreeBorders(SMESH::smIdType FirstNodeID1,
+                   SMESH::smIdType SecondNodeID1,
+                   SMESH::smIdType LastNodeID1,
+                   SMESH::smIdType FirstNodeID2,
+                   SMESH::smIdType SecondNodeID2,
+                   SMESH::smIdType LastNodeID2,
+                   CORBA::Boolean  CreatePolygons,
+                   CORBA::Boolean  CreatePolyedrs);
   SMESH::SMESH_MeshEditor::Sew_Error
-    SewConformFreeBorders(CORBA::Long FirstNodeID1,
-                          CORBA::Long SecondNodeID1,
-                          CORBA::Long LastNodeID1,
-                          CORBA::Long FirstNodeID2,
-                          CORBA::Long SecondNodeID2);
+    SewConformFreeBorders(SMESH::smIdType FirstNodeID1,
+                          SMESH::smIdType SecondNodeID1,
+                          SMESH::smIdType LastNodeID1,
+                          SMESH::smIdType FirstNodeID2,
+                          SMESH::smIdType SecondNodeID2);
   SMESH::SMESH_MeshEditor::Sew_Error
-    SewBorderToSide(CORBA::Long FirstNodeIDOnFreeBorder,
-                    CORBA::Long SecondNodeIDOnFreeBorder,
-                    CORBA::Long LastNodeIDOnFreeBorder,
-                    CORBA::Long FirstNodeIDOnSide,
-                    CORBA::Long LastNodeIDOnSide,
+    SewBorderToSide(SMESH::smIdType FirstNodeIDOnFreeBorder,
+                    SMESH::smIdType SecondNodeIDOnFreeBorder,
+                    SMESH::smIdType LastNodeIDOnFreeBorder,
+                    SMESH::smIdType FirstNodeIDOnSide,
+                    SMESH::smIdType LastNodeIDOnSide,
                     CORBA::Boolean CreatePolygons,
                     CORBA::Boolean CreatePolyedrs);
   SMESH::SMESH_MeshEditor::Sew_Error
-    SewSideElements(const SMESH::long_array& IDsOfSide1Elements,
-                    const SMESH::long_array& IDsOfSide2Elements,
-                    CORBA::Long NodeID1OfSide1ToMerge,
-                    CORBA::Long NodeID1OfSide2ToMerge,
-                    CORBA::Long NodeID2OfSide1ToMerge,
-                    CORBA::Long NodeID2OfSide2ToMerge);
+    SewSideElements(const SMESH::smIdType_array& IDsOfSide1Elements,
+                    const SMESH::smIdType_array& IDsOfSide2Elements,
+                    SMESH::smIdType NodeID1OfSide1ToMerge,
+                    SMESH::smIdType NodeID1OfSide2ToMerge,
+                    SMESH::smIdType NodeID2OfSide1ToMerge,
+                    SMESH::smIdType NodeID2OfSide2ToMerge);
 
   /*!
    * Set new nodes for given element.
    * If number of nodes is not corresponded to type of
    * element - returns false
    */
-  CORBA::Boolean ChangeElemNodes(CORBA::Long ide, const SMESH::long_array& newIDs);
+  CORBA::Boolean ChangeElemNodes(SMESH::smIdType ide, const SMESH::smIdType_array& newIDs);
 
   SMESH::SMESH_Group_ptr DoubleElements(SMESH::SMESH_IDSource_ptr theElements,
                                         const char*               theGroupName);
 
-  CORBA::Boolean DoubleNodes( const SMESH::long_array& theNodes,
-                              const SMESH::long_array& theModifiedElems );
+  CORBA::Boolean DoubleNodes( const SMESH::smIdType_array& theNodes,
+                              const SMESH::smIdType_array& theModifiedElems );
 
-  CORBA::Boolean DoubleNode( CORBA::Long theNodeId,
-                             const SMESH::long_array& theModifiedElems );
+  CORBA::Boolean DoubleNode( SMESH::smIdType theNodeId,
+                             const SMESH::smIdType_array& theModifiedElems );
 
   CORBA::Boolean DoubleNodeGroup( SMESH::SMESH_GroupBase_ptr theNodes,
                                   SMESH::SMESH_GroupBase_ptr theModifiedElems );
@@ -611,9 +650,9 @@ public:
    * \return TRUE if operation has been completed successfully, FALSE otherwise
    * \sa DoubleNodeGroup(), DoubleNodeGroups()
    */
-  CORBA::Boolean DoubleNodeElem( const SMESH::long_array& theElems, 
-                                 const SMESH::long_array& theNodesNot,
-                                 const SMESH::long_array& theAffectedElems );
+  CORBA::Boolean DoubleNodeElem( const SMESH::smIdType_array& theElems, 
+                                 const SMESH::smIdType_array& theNodesNot,
+                                 const SMESH::smIdType_array& theAffectedElems );
 
   /*!
    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -626,9 +665,9 @@ public:
    * \return TRUE if operation has been completed successfully, FALSE otherwise
    * \sa DoubleNodeGroupInRegion(), DoubleNodeGroupsInRegion()
    */
-  CORBA::Boolean DoubleNodeElemInRegion( const SMESH::long_array& theElems, 
-                                         const SMESH::long_array& theNodesNot,
-                                         GEOM::GEOM_Object_ptr    theShape );
+  CORBA::Boolean DoubleNodeElemInRegion( const SMESH::smIdType_array& theElems, 
+                                         const SMESH::smIdType_array& theNodesNot,
+                                         GEOM::GEOM_Object_ptr        theShape );
 
   /*!
    * \brief Creates a hole in a mesh by doubling the nodes of some particular elements
@@ -798,6 +837,7 @@ public:
                                    const char* groupName,
                                    const char* meshName,
                                    CORBA::Boolean toCopyAll,
+                                   CORBA::Boolean toCreateAllElements,
                                    const SMESH::ListOfIDSources& groups,
                                    SMESH::SMESH_Mesh_out mesh,
                                    SMESH::SMESH_Group_out group);
index 07ce9770654bafef37888628093ef37fba6205b2..3fac69b3e36ce782a77d4cf9110382e3186b1166 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -28,6 +28,7 @@
 
 #include "SMESHDS_Mesh.hxx"
 #include "SMESH_TypeDefs.hxx"
+#include <smIdType.hxx>
 
 #include <SALOMEconfig.h>
 #include CORBA_SERVER_HEADER(SMESH_Mesh)
@@ -59,10 +60,10 @@ public:
   virtual const SMDS_MeshElement *FindElement(int IDelem) const;
 
   virtual bool HasNumerationHoles();
-  virtual int MaxNodeID() const;
-  virtual int MinNodeID() const;
-  virtual int MaxElementID() const;
-  virtual int MinElementID() const;
+  virtual smIdType MaxNodeID() const;
+  virtual smIdType MinNodeID() const;
+  virtual smIdType MaxElementID() const;
+  virtual smIdType MinElementID() const;
 
 private:
   TIDSortedElemSet _elements[ SMDSAbs_NbElementTypes ];
index b5c003e4c3b292fc5764cd60495a741205b11ac3..13c602d92236e2149961b4aad33e877a31a5106c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 
 #include <vtkUnstructuredGridWriter.h>
 
-// to pass CORBA exception through SMESH_TRY
-#define SMY_OWN_CATCH catch( SALOME::SALOME_Exception& se ) { throw se; }
+// to pass CORBA exception and TooLargeForExport exception through SMESH_TRY
+#define SMY_OWN_CATCH                                                                           \
+  catch( SALOME::SALOME_Exception& se ) { throw se; }                                           \
+  catch( ::SMESH_Mesh::TooLargeForExport& ex )                                                  \
+  { SALOME::ExceptionStruct se = {                                                              \
+      SALOME::COMM,                                                                             \
+      CORBA::string_dup(SMESH_Comment("Mesh is too large for export in format ") << ex.what()), \
+      CORBA::string_dup(SMESH_Comment("format=") <<  ex.what() ), 0 };                          \
+    throw SALOME::SALOME_Exception( se );  }
 
 #include "SMESH_TryCatch.hxx" // include after OCCT headers!
 
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-#else
-static int MYDEBUG = 0;
-#endif
-
 using namespace std;
 using SMESH::TPythonDump;
 using SMESH::TVar;
@@ -461,8 +462,7 @@ SMESH::DriverMED_ReadStatus SMESH_Mesh_i::ImportCGNSFile( const char*  theFileNa
 
 char* SMESH_Mesh_i::GetVersionString(CORBA::Long minor, CORBA::Short nbDigits)
 {
-  string ver = DriverMED_W_SMESHDS_Mesh::GetVersionString(minor,
-                                                          nbDigits);
+  string ver = DriverMED_W_SMESHDS_Mesh::GetVersionString(minor, nbDigits);
   return CORBA::string_dup( ver.c_str() );
 }
 
@@ -640,7 +640,7 @@ SMESH_Mesh_i::AddHypothesis(GEOM::GEOM_Object_ptr       aSubShape,
 {
   Unexpect aCatch(SALOME_SalomeException);
 
-  const int prevNbMeshEnt = NbNodes() + NbElements();
+  const smIdType prevNbMeshEnt = NbNodes() + NbElements();
 
   if ( _preMeshInfo )
     _preMeshInfo->ForgetOrLoad();
@@ -658,7 +658,7 @@ SMESH_Mesh_i::AddHypothesis(GEOM::GEOM_Object_ptr       aSubShape,
     if ( prevNbMeshEnt > 0 /*newNbMeshEnt != prevNbMeshEnt*/ )
       _gen_i->UpdateIcons( mesh );
   }
-  if(MYDEBUG) MESSAGE( " AddHypothesis(): status = " << status );
+  MESSAGE( " AddHypothesis(): status = " << status );
 
   // Update Python script
   TPythonDump() << "status = " << mesh << ".AddHypothesis( "
@@ -678,7 +678,7 @@ SMESH_Mesh_i::addHypothesis(GEOM::GEOM_Object_ptr       aSubShape,
                             SMESH::SMESH_Hypothesis_ptr anHyp,
                             std::string*                anErrorText)
 {
-  if(MYDEBUG) MESSAGE("addHypothesis");
+  MESSAGE("addHypothesis");
 
   if (CORBA::is_nil( aSubShape ) && HasShapeToMesh())
     THROW_SALOME_CORBA_EXCEPTION("bad Sub-shape reference",SALOME::BAD_PARAM);
@@ -764,7 +764,7 @@ SMESH_Hypothesis::Hypothesis_Status
 SMESH_Mesh_i::removeHypothesis(GEOM::GEOM_Object_ptr       aSubShape,
                                SMESH::SMESH_Hypothesis_ptr anHyp)
 {
-  if(MYDEBUG) MESSAGE("removeHypothesis()");
+  MESSAGE("removeHypothesis()");
 
   if (CORBA::is_nil( aSubShape ) && HasShapeToMesh())
     THROW_SALOME_CORBA_EXCEPTION("bad Sub-shape reference", SALOME::BAD_PARAM);
@@ -810,7 +810,7 @@ SMESH::ListOfHypothesis *
 SMESH_Mesh_i::GetHypothesisList(GEOM::GEOM_Object_ptr aSubShape)
 {
   Unexpect aCatch(SALOME_SalomeException);
-  if (MYDEBUG) MESSAGE("GetHypothesisList");
+  MESSAGE("GetHypothesisList");
   if (_impl->HasShapeToMesh() && CORBA::is_nil(aSubShape))
     THROW_SALOME_CORBA_EXCEPTION("bad Sub-shape reference", SALOME::BAD_PARAM);
 
@@ -850,7 +850,7 @@ SMESH_Mesh_i::GetHypothesisList(GEOM::GEOM_Object_ptr aSubShape)
 SMESH::submesh_array* SMESH_Mesh_i::GetSubMeshes()
 {
   Unexpect aCatch(SALOME_SalomeException);
-  if (MYDEBUG) MESSAGE("GetSubMeshes");
+  MESSAGE("GetSubMeshes");
 
   SMESH::submesh_array_var aList = new SMESH::submesh_array();
 
@@ -1117,7 +1117,7 @@ void SMESH_Mesh_i::RemoveGroup( SMESH::SMESH_GroupBase_ptr theGroup )
     TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".RemoveGroup( " << aGroupSO << " )";
 
     // Remove group's SObject
-    SALOMEDS::StudyBuilder_var builder = SMESH_Gen_i::getStudyServant()->NewBuilder();
+    SALOMEDS::StudyBuilder_var builder = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->NewBuilder();
     builder->RemoveObjectWithChildren( aGroupSO );
   }
   aGroup->Modified(/*removed=*/true); // notify dependent Filter with FT_BelongToMeshGroup criterion
@@ -1148,11 +1148,11 @@ void SMESH_Mesh_i::RemoveGroupWithContents( SMESH::SMESH_GroupBase_ptr theGroup
     THROW_SALOME_CORBA_EXCEPTION( "RemoveGroupWithContents(): group does not belong to this mesh",
                                   SALOME::BAD_PARAM);
 
-  vector<int> nodeIds; // to remove nodes becoming free
+  vector<smIdType> nodeIds; // to remove nodes becoming free
   bool isNodal = ( theGroup->GetType() == SMESH::NODE );
   if ( !isNodal && !theGroup->IsEmpty() )
   {
-    CORBA::Long elemID = theGroup->GetID( 1 );
+    SMESH::smIdType elemID = theGroup->GetID( 1 );
     int nbElemNodes = GetElemNbNodes( elemID );
     if ( nbElemNodes > 0 )
       nodeIds.reserve( theGroup->Size() * nbElemNodes );
@@ -1214,7 +1214,7 @@ void SMESH_Mesh_i::RemoveGroupWithContents( SMESH::SMESH_GroupBase_ptr theGroup
 SMESH::ListOfGroups * SMESH_Mesh_i::GetGroups()
 {
   Unexpect aCatch(SALOME_SalomeException);
-  if (MYDEBUG) MESSAGE("GetGroups");
+  MESSAGE("GetGroups");
 
   SMESH::ListOfGroups_var aList = new SMESH::ListOfGroups();
 
@@ -1857,7 +1857,7 @@ SMESH_Mesh_i::CreateDimGroup(const SMESH::ListOfIDSources& theGroups,
         SMDS_ElemIteratorPtr nIt = elOfType->nodesIterator();
         for ( nbChecked = 1; nIt->more() && !toStopChecking; ++nbChecked )
         {
-          const int nID = nIt->next()->GetID();
+          const smIdType nID = nIt->next()->GetID();
           if ( nID < isNodeInGroupsSize && isNodeInGroups[ nID ] &&
                isToInclude( nbChecked, ++nbCommon, nbNodes, nbCorners, toStopChecking ))
           {
@@ -2059,7 +2059,7 @@ void SMESH_Mesh_i::ReplaceShape(GEOM::GEOM_Object_ptr theNewGeom)
   }
 
   typedef struct {
-    int shapeID, fromID, toID; // indices of elements of a sub-mesh
+    int shapeID; smIdType fromID, toID; // indices of elements of a sub-mesh
   } TRange;
   std::vector< TRange > elemRanges, nodeRanges; // elements of sub-meshes
   std::vector< SMDS_PositionPtr > positions; // node positions
@@ -2090,7 +2090,7 @@ void SMESH_Mesh_i::ReplaceShape(GEOM::GEOM_Object_ptr theNewGeom)
       while ( elemIt->more() )
       {
         const SMDS_MeshElement* e = elemIt->next();
-        const int          elemID = e->GetID();
+        const smIdType     elemID = e->GetID();
         const int         shapeID = e->GetShapeID();
         TRange &        lastRange = ranges.back();
         if ( lastRange.shapeID != shapeID ||
@@ -2407,11 +2407,13 @@ void SMESH_Mesh_i::CheckGeomModif( bool theIsBreakLink )
   if ( !theIsBreakLink )
     if ( mainGO->GetType() == GEOM_GROUP || !geomChanged )  // is group or not modified
     {
-      int nb = NbNodes() + NbElements();
+      smIdType nb = NbNodes() + NbElements();
       CheckGeomGroupModif();
-      if ( nb != NbNodes() + NbElements() ) // something removed due to hypotheses change
+      bool updated = ( nb != NbNodes() + NbElements() );
+      if ( updated ) // something removed due to hypotheses change
         _gen_i->UpdateIcons( me );
-      return;
+      if ( updated == geomChanged || nb == 0 )
+        return;
     }
 
   // Update after shape modification or breakLink w/o geometry change
@@ -2498,7 +2500,7 @@ void SMESH_Mesh_i::CheckGeomModif( bool theIsBreakLink )
         }
         old2newShapeMap.Bind( group->GetShape(), groupsData.back()._shape );
       }
-      
+
     }
   }
   // store assigned hypotheses
@@ -2795,7 +2797,7 @@ void SMESH_Mesh_i::CheckGeomGroupModif()
 
   if ( !_impl->HasShapeToMesh() ) return;
 
-  CORBA::Long nbEntities = NbNodes() + NbElements();
+  SMESH::smIdType nbEntities = NbNodes() + NbElements();
 
   // Check if group contents changed
 
@@ -2997,7 +2999,7 @@ void SMESH_Mesh_i::CheckGeomGroupModif()
 
   // Update icons
 
-  CORBA::Long newNbEntities = NbNodes() + NbElements();
+  SMESH::smIdType newNbEntities = NbNodes() + NbElements();
   list< SALOMEDS::SObject_wrap > soToUpdateIcons;
   if ( newNbEntities != nbEntities )
   {
@@ -3055,7 +3057,7 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::ConvertToStandalone( SMESH::SMESH_GroupBase
 
   SALOMEDS::StudyBuilder_var builder;
   SALOMEDS::SObject_wrap     aGroupSO;
-  SALOMEDS::Study_var        aStudy = SMESH_Gen_i::getStudyServant();
+  SALOMEDS::Study_var        aStudy = SMESH_Gen_i::GetSMESHGen()->getStudyServant();
   if ( !aStudy->_is_nil() ) {
     builder  = aStudy->NewBuilder();
     aGroupSO = _gen_i->ObjectToSObject( theGroup );
@@ -3114,7 +3116,7 @@ SMESH::SMESH_Group_ptr SMESH_Mesh_i::ConvertToStandalone( SMESH::SMESH_GroupBase
 
 SMESH::SMESH_subMesh_ptr SMESH_Mesh_i::createSubMesh( GEOM::GEOM_Object_ptr theSubShapeObject )
 {
-  if(MYDEBUG) MESSAGE( "createSubMesh" );
+  MESSAGE( "createSubMesh" );
   TopoDS_Shape  myLocSubShape = _gen_i->GeomObjectToShape(theSubShapeObject);
   ::SMESH_subMesh * mySubMesh = _impl->GetSubMesh(myLocSubShape);
   int               subMeshId = 0;
@@ -3146,8 +3148,7 @@ SMESH::SMESH_subMesh_ptr SMESH_Mesh_i::createSubMesh( GEOM::GEOM_Object_ptr theS
 
   // register CORBA object for persistence
   int nextId = _gen_i->RegisterObject( subMesh );
-  if(MYDEBUG) { MESSAGE( "Add submesh to map with id = "<< nextId); }
-  else        { (void)nextId; } // avoid "unused variable" warning
+  MESSAGE( "Add submesh to map with id = "<< nextId);
 
   // to track changes of GEOM groups
   if ( subMeshId > 0 )
@@ -3283,8 +3284,7 @@ SMESH::SMESH_GroupBase_ptr SMESH_Mesh_i::createGroup (SMESH::ElementType
 
     // register CORBA object for persistence
     int nextId = _gen_i->RegisterObject( aGroup );
-    if(MYDEBUG) { MESSAGE( "Add group to map with id = "<< nextId); }
-    else        { nextId = ( nextId > 0 ); } // avoid "unused variable" warning in release mode
+    MESSAGE( "Add group to map with id = "<< nextId);
 
     // to track changes of GEOM groups
     if ( !theShape.IsNull() ) {
@@ -3305,7 +3305,7 @@ SMESH::SMESH_GroupBase_ptr SMESH_Mesh_i::createGroup (SMESH::ElementType
 
 void SMESH_Mesh_i::removeGroup( const int theId )
 {
-  if(MYDEBUG) MESSAGE("SMESH_Mesh_i::removeGroup()" );
+  MESSAGE("SMESH_Mesh_i::removeGroup()");
   if ( _mapGroups.find( theId ) != _mapGroups.end() ) {
     SMESH::SMESH_GroupBase_var group = _mapGroups[theId];
     _mapGroups.erase( theId );
@@ -3342,10 +3342,10 @@ SMESH::log_array * SMESH_Mesh_i::GetLog(CORBA::Boolean clearAfterGet)
   while(its != logDS.end()){
     SMESHDS_Command *com = *its;
     int comType = com->GetType();
-    int lgcom = com->GetNumber();
-    const list < int >&intList = com->GetIndexes();
+    smIdType lgcom = com->GetNumber();
+    const list < smIdType >&intList = com->GetIndexes();
     int inum = intList.size();
-    list < int >::const_iterator ii = intList.begin();
+    list < smIdType >::const_iterator ii = intList.begin();
     const list < double >&coordList = com->GetCoords();
     int rnum = coordList.size();
     list < double >::const_iterator ir = coordList.begin();
@@ -3472,7 +3472,7 @@ void SMESH_Mesh_i::onHypothesisModified(int theHypID, bool theUpdateIcons)
 
 void SMESH_Mesh_i::SetImpl(::SMESH_Mesh * impl)
 {
-  if(MYDEBUG) MESSAGE("SMESH_Mesh_i::SetImpl");
+  MESSAGE("SMESH_Mesh_i::SetImpl");
   _impl = impl;
   if ( _impl )
     _impl->SetCallUp( new TCallUp_i(this));
@@ -3486,7 +3486,7 @@ void SMESH_Mesh_i::SetImpl(::SMESH_Mesh * impl)
 
 ::SMESH_Mesh & SMESH_Mesh_i::GetImpl()
 {
-  if(MYDEBUG) MESSAGE("SMESH_Mesh_i::GetImpl()");
+  MESSAGE("SMESH_Mesh_i::GetImpl()");
   return *_impl;
 }
 
@@ -3678,6 +3678,25 @@ void SMESH_Mesh_i::PrepareForWriting (const char* file, bool overwrite)
   }
 }
 
+/*!
+  Return a MeshName
+ */
+std::string SMESH_Mesh_i::generateMeshName()
+{
+  string aMeshName = "Mesh";
+  SALOMEDS::Study_var aStudy = SMESH_Gen_i::GetSMESHGen()->getStudyServant();
+  if ( !aStudy->_is_nil() )
+  {
+    SALOMEDS::SObject_wrap aMeshSO = _gen_i->ObjectToSObject(  _this() );
+    if ( !aMeshSO->_is_nil() )
+    {
+      CORBA::String_var name = aMeshSO->GetName();
+      aMeshName = name;
+    }
+  }
+  return aMeshName;
+}
+
 //================================================================================
 /*!
  * \brief Prepare a file for export and pass names of mesh groups from study to mesh DS
@@ -3692,13 +3711,11 @@ string SMESH_Mesh_i::prepareMeshNameAndGroups(const char*    file,
 {
   // Perform Export
   PrepareForWriting(file, overwrite);
-  string aMeshName = "Mesh";
-  SALOMEDS::Study_var aStudy = SMESH_Gen_i::getStudyServant();
+  string aMeshName(this->generateMeshName());
+  SALOMEDS::Study_var aStudy = SMESH_Gen_i::GetSMESHGen()->getStudyServant();
   if ( !aStudy->_is_nil() ) {
     SALOMEDS::SObject_wrap aMeshSO = _gen_i->ObjectToSObject(  _this() );
     if ( !aMeshSO->_is_nil() ) {
-      CORBA::String_var name = aMeshSO->GetName();
-      aMeshName = name;
       // asv : 27.10.04 : fix of 6903: check for StudyLocked before adding attributes
       if ( !aStudy->GetProperties()->IsLocked() )
       {
@@ -3732,11 +3749,11 @@ string SMESH_Mesh_i::prepareMeshNameAndGroups(const char*    file,
  */
 //================================================================================
 
-void SMESH_Mesh_i::ExportMED(const char*        file,
-                             CORBA::Boolean     auto_groups,
-                             CORBA::Long        version,
-                             CORBA::Boolean     overwrite,
-                             CORBA::Boolean     autoDimension)
+void SMESH_Mesh_i::ExportMED(const char*    file,
+                             CORBA::Boolean auto_groups,
+                             CORBA::Long    version,
+                             CORBA::Boolean overwrite,
+                             CORBA::Boolean autoDimension)
 {
   //MESSAGE("MED minor version: "<< minor);
   SMESH_TRY;
@@ -3757,46 +3774,46 @@ void SMESH_Mesh_i::ExportMED(const char*        file,
   SMESH_CATCH( SMESH::throwCorbaException );
 }
 
-//================================================================================
-/*!
- * \brief Export a mesh to a SAUV file
- */
-//================================================================================
-
-void SMESH_Mesh_i::ExportSAUV (const char* file,
-                               CORBA::Boolean auto_groups)
+CORBA::LongLong SMESH_Mesh_i::ExportMEDCoupling(CORBA::Boolean auto_groups, CORBA::Boolean autoDimension)
 {
-  Unexpect aCatch(SALOME_SalomeException);
+  MEDCoupling::MCAuto<MEDCoupling::DataArrayByte> data;
+  SMESH_TRY;
+  // TODO : Fix me ! 2 next lines are required
+  if( !this->_gen_i->isSSLMode() )
+    SMESH::throwCorbaException("SMESH_Mesh_i::ExportMEDCoupling : only for embedded mode !");
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  string aMeshName = prepareMeshNameAndGroups(file, true);
-  TPythonDump() << SMESH::SMESH_Mesh_var( _this())
-                << ".ExportSAUV( r'" << file << "', " << auto_groups << " )";
-  _impl->ExportSAUV(file, aMeshName.c_str(), auto_groups);
+  string aMeshName = this->generateMeshName();
+  data = _impl->ExportMEDCoupling( aMeshName.c_str(), auto_groups, 0, autoDimension );
+  SMESH_CATCH( SMESH::throwCorbaException );
+  MEDCoupling::DataArrayByte *ret(data.retn());
+  return reinterpret_cast<CORBA::LongLong>(ret);
 }
 
-
 //================================================================================
 /*!
  * \brief Export a mesh to a DAT file
  */
 //================================================================================
 
-void SMESH_Mesh_i::ExportDAT (const char *file)
+void SMESH_Mesh_i::ExportDAT (const char *file, CORBA::Boolean renumber )
 {
-  Unexpect aCatch(SALOME_SalomeException);
+  SMESH_TRY;
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  // Update Python script
   // check names of groups
   checkGroupNames();
-  TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".ExportDAT( r'" << file << "' )";
+  // Update Python script
+  TPythonDump() << SMESH::SMESH_Mesh_var(_this())
+                << ".ExportDAT( r'" << file<< ", " << renumber << "' )";
 
   // Perform Export
-  PrepareForWriting(file);
-  _impl->ExportDAT(file);
+  PrepareForWriting( file );
+  _impl->ExportDAT( file, /*part=*/nullptr, renumber );
+
+  SMESH_CATCH( SMESH::throwCorbaException );
 }
 
 //================================================================================
@@ -3805,20 +3822,23 @@ void SMESH_Mesh_i::ExportDAT (const char *file)
  */
 //================================================================================
 
-void SMESH_Mesh_i::ExportUNV (const char *file)
+void SMESH_Mesh_i::ExportUNV (const char *file, CORBA::Boolean renumber)
 {
-  Unexpect aCatch(SALOME_SalomeException);
+  SMESH_TRY;
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  // Update Python script
   // check names of groups
   checkGroupNames();
-  TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".ExportUNV( r'" << file << "' )";
+  // Update Python script
+  TPythonDump() << SMESH::SMESH_Mesh_var(_this())
+                << ".ExportUNV( r'" << file << "', " << renumber << " )";
 
   // Perform Export
-  PrepareForWriting(file);
-  _impl->ExportUNV(file);
+  PrepareForWriting( file );
+  _impl->ExportUNV( file, /*part=*/nullptr, renumber );
+
+  SMESH_CATCH( SMESH::throwCorbaException );
 }
 
 //================================================================================
@@ -3829,13 +3849,13 @@ void SMESH_Mesh_i::ExportUNV (const char *file)
 
 void SMESH_Mesh_i::ExportSTL (const char *file, const bool isascii)
 {
-  Unexpect aCatch(SALOME_SalomeException);
+  SMESH_TRY;
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  // Update Python script
   // check names of groups
   checkGroupNames();
+  // Update Python script
   TPythonDump() << SMESH::SMESH_Mesh_var(_this())
                 << ".ExportSTL( r'" << file << "', " << isascii << " )";
 
@@ -3847,25 +3867,68 @@ void SMESH_Mesh_i::ExportSTL (const char *file, const bool isascii)
   // Perform Export
   PrepareForWriting( file );
   _impl->ExportSTL( file, isascii, name.in() );
+
+  SMESH_CATCH( SMESH::throwCorbaException );
 }
 
+//================================================================================
+
+class MEDFileSpeCls
+{
+public:
+  MEDFileSpeCls(const char *   file,
+                CORBA::Boolean overwrite,
+                CORBA::Long    version)
+    :_file(file), _overwrite(overwrite), _version(version)
+  {}
+  std::string prepareMeshNameAndGroups(SMESH_Mesh_i& self)
+  {
+    return self.prepareMeshNameAndGroups(_file.c_str(),_overwrite);
+  }
+
+  void exportTo(SMESH_Mesh *mesh, const std::string& aMeshName, CORBA::Boolean auto_groups,
+                SMESH_MeshPartDS* partDS, CORBA::Boolean autoDimension, bool have0dField,
+                CORBA::Double ZTolerance, CORBA::Boolean saveNumbers )
+  {
+    mesh->ExportMED( _file.c_str(), aMeshName.c_str(), auto_groups, _version,
+                     partDS, autoDimension, have0dField, ZTolerance, saveNumbers );
+  }
+
+  void exportField(SMESH_Mesh_i& self, const std::string& aMeshName, bool have0dField,
+                   SMESHDS_Mesh *meshDS, const GEOM::ListOfFields& fields,
+                   const char*geomAssocFields)
+  {
+    DriverMED_W_Field fieldWriter;
+    fieldWriter.SetFile( _file.c_str() );
+    fieldWriter.SetMeshName( aMeshName );
+    fieldWriter.AddODOnVertices( have0dField );
+    self.exportMEDFields( fieldWriter, meshDS, fields, geomAssocFields );
+  }
+
+  void prepareForWriting(SMESH_Mesh_i& self) { self.PrepareForWriting(_file.c_str(), _overwrite); }
+
+private:
+  std::string    _file;
+  CORBA::Boolean _overwrite;
+  CORBA::Long    _version;
+};
+
 //================================================================================
 /*!
  * \brief Export a part of mesh to a med file
  */
 //================================================================================
 
-void SMESH_Mesh_i::ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
-                                   const char*               file,
-                                   CORBA::Boolean            auto_groups,
-                                   CORBA::Long               version,
-                                   CORBA::Boolean            overwrite,
-                                   CORBA::Boolean            autoDimension,
-                                   const GEOM::ListOfFields& fields,
-                                   const char*               geomAssocFields,
-                                   CORBA::Double             ZTolerance)
+template<class SPECLS>
+void SMESH_Mesh_i::ExportPartToMEDCommon(SPECLS&                   speCls,
+                                         SMESH::SMESH_IDSource_ptr meshPart,
+                                         CORBA::Boolean            auto_groups,
+                                         CORBA::Boolean            autoDimension,
+                                         const GEOM::ListOfFields& fields,
+                                         const char*               geomAssocFields,
+                                         CORBA::Double             ZTolerance,
+                                         CORBA::Boolean            saveNumbers)
 {
-  MESSAGE("MED version: "<< version);
   SMESH_TRY;
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
@@ -3887,8 +3950,7 @@ void SMESH_Mesh_i::ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
       if ( fieldShape->_is_nil() )
         THROW_SALOME_CORBA_EXCEPTION( "Null shape under a field", SALOME::INTERNAL_ERROR );
       if ( !fieldShape->IsSame( shapeToMesh ) )
-        THROW_SALOME_CORBA_EXCEPTION
-          ( "Field defined not on shape", SALOME::BAD_PARAM);
+        THROW_SALOME_CORBA_EXCEPTION( "Field defined not on shape", SALOME::BAD_PARAM);
       if ( fields[i]->GetDimension() == 0 )
         have0dField = true;
     }
@@ -3911,10 +3973,9 @@ void SMESH_Mesh_i::ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
   if ( CORBA::is_nil( meshPart ) ||
        SMESH::DownCast< SMESH_Mesh_i* >( meshPart ))
   {
-    aMeshName = prepareMeshNameAndGroups(file, overwrite);
-    _impl->ExportMED( file, aMeshName.c_str(), auto_groups, version,
-                      0, autoDimension, /*addODOnVertices=*/have0dField,
-                      ZTolerance);
+    aMeshName = speCls.prepareMeshNameAndGroups(*this);
+    speCls.exportTo(_impl, aMeshName, auto_groups, nullptr, autoDimension,
+                    have0dField, ZTolerance, saveNumbers );
     meshDS = _impl->GetMeshDS();
   }
   else
@@ -3922,7 +3983,7 @@ void SMESH_Mesh_i::ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
     if ( _preMeshInfo )
       _preMeshInfo->FullLoadFromFile();
 
-    PrepareForWriting(file, overwrite);
+    speCls.prepareForWriting(*this);
 
     SALOMEDS::SObject_wrap SO = _gen_i->ObjectToSObject( meshPart );
     if ( !SO->_is_nil() ) {
@@ -3931,8 +3992,8 @@ void SMESH_Mesh_i::ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
     }
 
     SMESH_MeshPartDS* partDS = new SMESH_MeshPartDS( meshPart );
-    _impl->ExportMED( file, aMeshName.c_str(), auto_groups, version,
-                      partDS, autoDimension, /*addODOnVertices=*/have0dField, ZTolerance);
+    speCls.exportTo(_impl, aMeshName, auto_groups, partDS, autoDimension,
+                    have0dField, ZTolerance, saveNumbers);
     meshDS = tmpDSDeleter._obj = partDS;
   }
 
@@ -3940,15 +4001,35 @@ void SMESH_Mesh_i::ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
 
   if ( _impl->HasShapeToMesh() )
   {
-    DriverMED_W_Field fieldWriter;
-    fieldWriter.SetFile( file );
-    fieldWriter.SetMeshName( aMeshName );
-    fieldWriter.AddODOnVertices( have0dField );
-
-    exportMEDFields( fieldWriter, meshDS, fields, geomAssocFields );
+    speCls.exportField( *this, aMeshName, have0dField, meshDS, fields, geomAssocFields);
   }
+  SMESH_CATCH( SMESH::throwCorbaException );
+}
+
+//================================================================================
+/*!
+ * \brief Export a part of mesh to a med file
+ */
+//================================================================================
+
+void SMESH_Mesh_i::ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
+                                   const char*               file,
+                                   CORBA::Boolean            auto_groups,
+                                   CORBA::Long               version,
+                                   CORBA::Boolean            overwrite,
+                                   CORBA::Boolean            autoDimension,
+                                   const GEOM::ListOfFields& fields,
+                                   const char*               geomAssocFields,
+                                   CORBA::Double             ZTolerance,
+                                   CORBA::Boolean            saveNumbers)
+{
+  MESSAGE("MED version: "<< version);
 
+  MEDFileSpeCls spe( file, overwrite, version );
+  this->ExportPartToMEDCommon( spe, meshPart, auto_groups, autoDimension, fields,
+                               geomAssocFields, ZTolerance, saveNumbers );
   // dump
+  SMESH_TRY;
   GEOM::ListOfGBO_var goList = new GEOM::ListOfGBO;
   goList->length( fields.length() );
   for ( size_t i = 0; i < fields.length(); ++i )
@@ -3965,10 +4046,74 @@ void SMESH_Mesh_i::ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
                 << autoDimension << ", "
                 << goList << ", '"
                 << ( geomAssocFields ? geomAssocFields : "" ) << "',"
-                << TVar( ZTolerance )
+                << TVar( ZTolerance ) << ", "
+                << saveNumbers
                 << " )";
+  SMESH_CATCH( SMESH::throwCorbaException );
+}
+
+//================================================================================
+
+class MEDFileMemSpeCls
+{
+public:
+  std::string prepareMeshNameAndGroups(SMESH_Mesh_i& self) { return self.generateMeshName(); }
+
+  void exportTo(SMESH_Mesh *mesh, const std::string& aMeshName, CORBA::Boolean auto_groups,
+                SMESH_MeshPartDS* partDS, CORBA::Boolean autoDimension, bool have0dField,
+                CORBA::Double ZTolerance, CORBA::Boolean saveNumbers )
+  {
+    _res = mesh->ExportMEDCoupling(aMeshName.c_str(), auto_groups, partDS,
+                                   autoDimension, have0dField, ZTolerance, saveNumbers );
+  }
+  void prepareForWriting(SMESH_Mesh_i& /*self*/) { /* nothing here */ }
+
+  void exportField(SMESH_Mesh_i& self, const std::string& aMeshName, bool have0dField,
+                   SMESHDS_Mesh *meshDS, const GEOM::ListOfFields& fields,
+                   const char*geomAssocFields)
+  {
+    DriverMED_W_Field_Mem fieldWriter(_res);
+    fieldWriter.SetMeshName( aMeshName );
+    fieldWriter.AddODOnVertices( have0dField );
+    self.exportMEDFields( fieldWriter, meshDS, fields, geomAssocFields );
+    _res = fieldWriter.getData();
+  }
+public:
+  MEDCoupling::MCAuto<MEDCoupling::DataArrayByte> getData() { return _res; }
+
+private:
+  MEDCoupling::MCAuto<MEDCoupling::DataArrayByte> _res;
+};
+
+//================================================================================
+/*!
+ * \brief Export a part of mesh to a MEDCoupling DS
+ */
+//================================================================================
+
+CORBA::LongLong SMESH_Mesh_i::ExportPartToMEDCoupling(SMESH::SMESH_IDSource_ptr meshPart,
+                                                      CORBA::Boolean            auto_groups,
+                                                      CORBA::Boolean            autoDimension,
+                                                      const GEOM::ListOfFields& fields,
+                                                      const char*               geomAssocFields,
+                                                      CORBA::Double             ZTolerance,
+                                                      CORBA::Boolean            saveNumbers)
+{
+  MEDCoupling::MCAuto<MEDCoupling::DataArrayByte> data;
+
+  SMESH_TRY;
+  if( !this->_gen_i->isSSLMode() )
+    SMESH::throwCorbaException("SMESH_Mesh_i::ExportPartToMEDCoupling : only for embedded mode !");
+
+  MEDFileMemSpeCls spe;
+  this->ExportPartToMEDCommon( spe, meshPart, auto_groups, autoDimension, fields, geomAssocFields,
+                               ZTolerance, saveNumbers );
+  data = spe.getData();
 
   SMESH_CATCH( SMESH::throwCorbaException );
+
+  MEDCoupling::DataArrayByte *ret(data.retn());
+  return reinterpret_cast<CORBA::LongLong>(ret);
 }
 
 //================================================================================
@@ -4246,20 +4391,19 @@ void SMESH_Mesh_i::exportMEDFields( DriverMED_W_Field&        fieldWriter,
  */
 //================================================================================
 
-void SMESH_Mesh_i::ExportPartToDAT(::SMESH::SMESH_IDSource_ptr meshPart,
-                                   const char*                 file)
+void SMESH_Mesh_i::ExportPartToDAT(SMESH::SMESH_IDSource_ptr meshPart,
+                                   const char*               file,
+                                   CORBA::Boolean            renumber )
 {
-  Unexpect aCatch(SALOME_SalomeException);
-  if ( _preMeshInfo )
-    _preMeshInfo->FullLoadFromFile();
-
-  PrepareForWriting(file);
+  SMESH_TRY;
 
   SMESH_MeshPartDS partDS( meshPart );
-  _impl->ExportDAT(file,&partDS);
+  _impl->ExportDAT( file, &partDS, renumber );
 
   TPythonDump() << SMESH::SMESH_Mesh_var(_this())
-                << ".ExportPartToDAT( " << meshPart << ", r'" << file << "' )";
+                << ".ExportPartToDAT( " << meshPart << ", r'" << file << ", " << renumber << "' )";
+
+  SMESH_CATCH( SMESH::throwCorbaException );
 }
 //================================================================================
 /*!
@@ -4267,20 +4411,23 @@ void SMESH_Mesh_i::ExportPartToDAT(::SMESH::SMESH_IDSource_ptr meshPart,
  */
 //================================================================================
 
-void SMESH_Mesh_i::ExportPartToUNV(::SMESH::SMESH_IDSource_ptr meshPart,
-                                   const char*                 file)
+void SMESH_Mesh_i::ExportPartToUNV(SMESH::SMESH_IDSource_ptr meshPart,
+                                   const char*               file,
+                                   CORBA::Boolean            renumber)
 {
-  Unexpect aCatch(SALOME_SalomeException);
+  SMESH_TRY;
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
   PrepareForWriting(file);
 
   SMESH_MeshPartDS partDS( meshPart );
-  _impl->ExportUNV(file, &partDS);
+  _impl->ExportUNV(file, &partDS, renumber );
 
   TPythonDump() << SMESH::SMESH_Mesh_var(_this())
-                << ".ExportPartToUNV( " << meshPart<< ", r'" << file << "' )";
+                << ".ExportPartToUNV( " << meshPart<< ", r'" << file << ", " << renumber << "' )";
+
+  SMESH_CATCH( SMESH::throwCorbaException );
 }
 //================================================================================
 /*!
@@ -4292,7 +4439,7 @@ void SMESH_Mesh_i::ExportPartToSTL(::SMESH::SMESH_IDSource_ptr meshPart,
                                    const char*                 file,
                                    ::CORBA::Boolean            isascii)
 {
-  Unexpect aCatch(SALOME_SalomeException);
+  SMESH_TRY;
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
@@ -4308,6 +4455,8 @@ void SMESH_Mesh_i::ExportPartToSTL(::SMESH::SMESH_IDSource_ptr meshPart,
 
   TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".ExportPartToSTL( "
                 << meshPart<< ", r'" << file << "', " << isascii << ")";
+
+  SMESH_CATCH( SMESH::throwCorbaException );
 }
 
 //================================================================================
@@ -4322,7 +4471,7 @@ void SMESH_Mesh_i::ExportCGNS(::SMESH::SMESH_IDSource_ptr meshPart,
                               CORBA::Boolean              groupElemsByType)
 {
 #ifdef WITH_CGNS
-  Unexpect aCatch(SALOME_SalomeException);
+  SMESH_TRY;
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
@@ -4344,6 +4493,9 @@ void SMESH_Mesh_i::ExportCGNS(::SMESH::SMESH_IDSource_ptr meshPart,
 
   TPythonDump() << SMESH::SMESH_Mesh_var(_this()) << ".ExportCGNS( "
                 << meshPart<< ", r'" << file << "', " << overwrite << ")";
+
+  SMESH_CATCH( SMESH::throwCorbaException );
+
 #else
   THROW_SALOME_CORBA_EXCEPTION("CGNS library is unavailable", SALOME::INTERNAL_ERROR);
 #endif
@@ -4359,7 +4511,7 @@ void SMESH_Mesh_i::ExportGMF(::SMESH::SMESH_IDSource_ptr meshPart,
                              const char*                 file,
                              bool                        withRequiredGroups)
 {
-  Unexpect aCatch(SALOME_SalomeException);
+  SMESH_TRY;
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
@@ -4372,6 +4524,8 @@ void SMESH_Mesh_i::ExportGMF(::SMESH::SMESH_IDSource_ptr meshPart,
                 << meshPart<< ", r'"
                 << file << "', "
                 << withRequiredGroups << ")";
+
+  SMESH_CATCH( SMESH::throwCorbaException );
 }
 
 //=============================================================================
@@ -4396,7 +4550,7 @@ CORBA::Double SMESH_Mesh_i::GetComputeProgress()
  */
 //================================================================================
 
-CORBA::Long SMESH_Mesh_i::NbNodes()
+SMESH::smIdType SMESH_Mesh_i::NbNodes()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4411,7 +4565,7 @@ CORBA::Long SMESH_Mesh_i::NbNodes()
  */
 //================================================================================
 
-CORBA::Long SMESH_Mesh_i::NbElements()
+SMESH::smIdType SMESH_Mesh_i::NbElements()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4426,7 +4580,7 @@ CORBA::Long SMESH_Mesh_i::NbElements()
  */
 //================================================================================
 
-CORBA::Long SMESH_Mesh_i::Nb0DElements()
+SMESH::smIdType SMESH_Mesh_i::Nb0DElements()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4441,7 +4595,7 @@ CORBA::Long SMESH_Mesh_i::Nb0DElements()
  */
 //================================================================================
 
-CORBA::Long SMESH_Mesh_i::NbBalls()
+SMESH::smIdType SMESH_Mesh_i::NbBalls()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4456,7 +4610,7 @@ CORBA::Long SMESH_Mesh_i::NbBalls()
  */
 //================================================================================
 
-CORBA::Long SMESH_Mesh_i::NbEdges()
+SMESH::smIdType SMESH_Mesh_i::NbEdges()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4471,7 +4625,7 @@ CORBA::Long SMESH_Mesh_i::NbEdges()
  */
 //================================================================================
 
-CORBA::Long SMESH_Mesh_i::NbEdgesOfOrder(SMESH::ElementOrder order)
+SMESH::smIdType SMESH_Mesh_i::NbEdgesOfOrder(SMESH::ElementOrder order)
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4486,7 +4640,7 @@ CORBA::Long SMESH_Mesh_i::NbEdgesOfOrder(SMESH::ElementOrder order)
  */
 //================================================================================
 
-CORBA::Long SMESH_Mesh_i::NbFaces()
+SMESH::smIdType SMESH_Mesh_i::NbFaces()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4501,7 +4655,7 @@ CORBA::Long SMESH_Mesh_i::NbFaces()
  */
 //================================================================================
 
-CORBA::Long SMESH_Mesh_i::NbTriangles()
+SMESH::smIdType SMESH_Mesh_i::NbTriangles()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4516,7 +4670,7 @@ CORBA::Long SMESH_Mesh_i::NbTriangles()
  */
 //================================================================================
 
-CORBA::Long SMESH_Mesh_i::NbBiQuadTriangles()
+SMESH::smIdType SMESH_Mesh_i::NbBiQuadTriangles()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4525,7 +4679,7 @@ CORBA::Long SMESH_Mesh_i::NbBiQuadTriangles()
   return _impl->NbBiQuadTriangles();
 }
 
-CORBA::Long SMESH_Mesh_i::NbQuadrangles()
+SMESH::smIdType SMESH_Mesh_i::NbQuadrangles()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4534,7 +4688,7 @@ CORBA::Long SMESH_Mesh_i::NbQuadrangles()
   return _impl->NbQuadrangles();
 }
 
-CORBA::Long SMESH_Mesh_i::NbBiQuadQuadrangles()
+SMESH::smIdType SMESH_Mesh_i::NbBiQuadQuadrangles()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4543,7 +4697,7 @@ CORBA::Long SMESH_Mesh_i::NbBiQuadQuadrangles()
   return _impl->NbBiQuadQuadrangles();
 }
 
-CORBA::Long SMESH_Mesh_i::NbPolygons()
+SMESH::smIdType SMESH_Mesh_i::NbPolygons()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4552,7 +4706,7 @@ CORBA::Long SMESH_Mesh_i::NbPolygons()
   return _impl->NbPolygons();
 }
 
-CORBA::Long SMESH_Mesh_i::NbPolygonsOfOrder(SMESH::ElementOrder order)
+SMESH::smIdType SMESH_Mesh_i::NbPolygonsOfOrder(SMESH::ElementOrder order)
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4561,7 +4715,7 @@ CORBA::Long SMESH_Mesh_i::NbPolygonsOfOrder(SMESH::ElementOrder order)
   return _impl->NbPolygons((SMDSAbs_ElementOrder)order);
 }
 
-CORBA::Long SMESH_Mesh_i::NbFacesOfOrder(SMESH::ElementOrder order)
+SMESH::smIdType SMESH_Mesh_i::NbFacesOfOrder(SMESH::ElementOrder order)
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4570,7 +4724,7 @@ CORBA::Long SMESH_Mesh_i::NbFacesOfOrder(SMESH::ElementOrder order)
   return _impl->NbFaces( (SMDSAbs_ElementOrder) order);
 }
 
-CORBA::Long SMESH_Mesh_i::NbTrianglesOfOrder(SMESH::ElementOrder order)
+SMESH::smIdType SMESH_Mesh_i::NbTrianglesOfOrder(SMESH::ElementOrder order)
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4579,7 +4733,7 @@ CORBA::Long SMESH_Mesh_i::NbTrianglesOfOrder(SMESH::ElementOrder order)
   return _impl->NbTriangles( (SMDSAbs_ElementOrder) order);
 }
 
-CORBA::Long SMESH_Mesh_i::NbQuadranglesOfOrder(SMESH::ElementOrder order)
+SMESH::smIdType SMESH_Mesh_i::NbQuadranglesOfOrder(SMESH::ElementOrder order)
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4590,7 +4744,7 @@ CORBA::Long SMESH_Mesh_i::NbQuadranglesOfOrder(SMESH::ElementOrder order)
 
 //=============================================================================
 
-CORBA::Long SMESH_Mesh_i::NbVolumes()
+SMESH::smIdType SMESH_Mesh_i::NbVolumes()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4599,7 +4753,7 @@ CORBA::Long SMESH_Mesh_i::NbVolumes()
   return _impl->NbVolumes();
 }
 
-CORBA::Long SMESH_Mesh_i::NbTetras()
+SMESH::smIdType SMESH_Mesh_i::NbTetras()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4608,7 +4762,7 @@ CORBA::Long SMESH_Mesh_i::NbTetras()
   return _impl->NbTetras();
 }
 
-CORBA::Long SMESH_Mesh_i::NbHexas()
+SMESH::smIdType SMESH_Mesh_i::NbHexas()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4617,7 +4771,7 @@ CORBA::Long SMESH_Mesh_i::NbHexas()
   return _impl->NbHexas();
 }
 
-CORBA::Long SMESH_Mesh_i::NbTriQuadraticHexas()
+SMESH::smIdType SMESH_Mesh_i::NbTriQuadraticHexas()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4626,7 +4780,7 @@ CORBA::Long SMESH_Mesh_i::NbTriQuadraticHexas()
   return _impl->NbTriQuadraticHexas();
 }
 
-CORBA::Long SMESH_Mesh_i::NbPyramids()
+SMESH::smIdType SMESH_Mesh_i::NbPyramids()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4635,7 +4789,7 @@ CORBA::Long SMESH_Mesh_i::NbPyramids()
   return _impl->NbPyramids();
 }
 
-CORBA::Long SMESH_Mesh_i::NbPrisms()
+SMESH::smIdType SMESH_Mesh_i::NbPrisms()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4644,7 +4798,7 @@ CORBA::Long SMESH_Mesh_i::NbPrisms()
   return _impl->NbPrisms();
 }
 
-CORBA::Long SMESH_Mesh_i::NbHexagonalPrisms()
+SMESH::smIdType SMESH_Mesh_i::NbHexagonalPrisms()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4653,7 +4807,7 @@ CORBA::Long SMESH_Mesh_i::NbHexagonalPrisms()
   return _impl->NbHexagonalPrisms();
 }
 
-CORBA::Long SMESH_Mesh_i::NbPolyhedrons()
+SMESH::smIdType SMESH_Mesh_i::NbPolyhedrons()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4662,7 +4816,7 @@ CORBA::Long SMESH_Mesh_i::NbPolyhedrons()
   return _impl->NbPolyhedrons();
 }
 
-CORBA::Long SMESH_Mesh_i::NbVolumesOfOrder(SMESH::ElementOrder order)
+SMESH::smIdType SMESH_Mesh_i::NbVolumesOfOrder(SMESH::ElementOrder order)
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4671,7 +4825,7 @@ CORBA::Long SMESH_Mesh_i::NbVolumesOfOrder(SMESH::ElementOrder order)
   return _impl->NbVolumes( (SMDSAbs_ElementOrder) order);
 }
 
-CORBA::Long SMESH_Mesh_i::NbTetrasOfOrder(SMESH::ElementOrder order)
+SMESH::smIdType SMESH_Mesh_i::NbTetrasOfOrder(SMESH::ElementOrder order)
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4680,7 +4834,7 @@ CORBA::Long SMESH_Mesh_i::NbTetrasOfOrder(SMESH::ElementOrder order)
   return _impl->NbTetras( (SMDSAbs_ElementOrder) order);
 }
 
-CORBA::Long SMESH_Mesh_i::NbHexasOfOrder(SMESH::ElementOrder order)
+SMESH::smIdType SMESH_Mesh_i::NbHexasOfOrder(SMESH::ElementOrder order)
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4689,7 +4843,7 @@ CORBA::Long SMESH_Mesh_i::NbHexasOfOrder(SMESH::ElementOrder order)
   return _impl->NbHexas( (SMDSAbs_ElementOrder) order);
 }
 
-CORBA::Long SMESH_Mesh_i::NbPyramidsOfOrder(SMESH::ElementOrder order)
+SMESH::smIdType SMESH_Mesh_i::NbPyramidsOfOrder(SMESH::ElementOrder order)
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4698,7 +4852,7 @@ CORBA::Long SMESH_Mesh_i::NbPyramidsOfOrder(SMESH::ElementOrder order)
   return _impl->NbPyramids( (SMDSAbs_ElementOrder) order);
 }
 
-CORBA::Long SMESH_Mesh_i::NbPrismsOfOrder(SMESH::ElementOrder order)
+SMESH::smIdType SMESH_Mesh_i::NbPrismsOfOrder(SMESH::ElementOrder order)
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
@@ -4713,7 +4867,7 @@ CORBA::Long SMESH_Mesh_i::NbPrismsOfOrder(SMESH::ElementOrder order)
  */
 //=============================================================================
 
-CORBA::Long SMESH_Mesh_i::NbSubMesh()
+SMESH::smIdType SMESH_Mesh_i::NbSubMesh()
 {
   Unexpect aCatch(SALOME_SalomeException);
   return _mapSubMesh_i.size();
@@ -4738,7 +4892,7 @@ char* SMESH_Mesh_i::Dump()
  */
 //=============================================================================
 
-SMESH::long_array* SMESH_Mesh_i::GetIDs()
+SMESH::smIdType_array* SMESH_Mesh_i::GetIDs()
 {
   return GetElementsId();
 }
@@ -4749,22 +4903,22 @@ SMESH::long_array* SMESH_Mesh_i::GetIDs()
  */
 //=============================================================================
 
-SMESH::long_array* SMESH_Mesh_i::GetElementsId()
+SMESH::smIdType_array* SMESH_Mesh_i::GetElementsId()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  SMESH::long_array_var aResult = new SMESH::long_array();
+  SMESH::smIdType_array_var aResult = new SMESH::smIdType_array();
   SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS();
 
   if ( aSMESHDS_Mesh == NULL )
     return aResult._retn();
 
-  long nbElements = NbElements();
+  smIdType nbElements = NbElements();
   aResult->length( nbElements );
   SMDS_ElemIteratorPtr anIt = aSMESHDS_Mesh->elementsIterator();
-  for ( int i = 0, n = nbElements; i < n && anIt->more(); i++ )
+  for ( smIdType i = 0, n = nbElements; i < n && anIt->more(); i++ )
     aResult[i] = anIt->next()->GetID();
 
   return aResult._retn();
@@ -4777,19 +4931,19 @@ SMESH::long_array* SMESH_Mesh_i::GetElementsId()
  */
 //=============================================================================
 
-SMESH::long_array* SMESH_Mesh_i::GetElementsByType( SMESH::ElementType theElemType )
+SMESH::smIdType_array* SMESH_Mesh_i::GetElementsByType( SMESH::ElementType theElemType )
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  SMESH::long_array_var aResult = new SMESH::long_array();
+  SMESH::smIdType_array_var aResult = new SMESH::smIdType_array();
   SMESHDS_Mesh* aSMESHDS_Mesh = _impl->GetMeshDS();
 
   if ( aSMESHDS_Mesh == NULL )
     return aResult._retn();
 
-  long nbElements = NbElements();
+  smIdType nbElements = NbElements();
 
   // No sense in returning ids of elements along with ids of nodes:
   // when theElemType == SMESH::ALL, return node ids only if
@@ -4799,7 +4953,7 @@ SMESH::long_array* SMESH_Mesh_i::GetElementsByType( SMESH::ElementType theElemTy
 
   aResult->length( nbElements );
 
-  int i = 0;
+  smIdType i = 0;
 
   SMDS_ElemIteratorPtr anIt = aSMESHDS_Mesh->elementsIterator( (SMDSAbs_ElementType)theElemType );
   while ( i < nbElements && anIt->more() )
@@ -4816,22 +4970,22 @@ SMESH::long_array* SMESH_Mesh_i::GetElementsByType( SMESH::ElementType theElemTy
  */
 //=============================================================================
 
-SMESH::long_array* SMESH_Mesh_i::GetNodesId()
+SMESH::smIdType_array* SMESH_Mesh_i::GetNodesId()
 {
   Unexpect aCatch(SALOME_SalomeException);
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  SMESH::long_array_var aResult = new SMESH::long_array();
+  SMESH::smIdType_array_var aResult = new SMESH::smIdType_array();
   SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS();
 
   if ( aMeshDS == NULL )
     return aResult._retn();
 
-  long nbNodes = NbNodes();
+  smIdType nbNodes = NbNodes();
   aResult->length( nbNodes );
   SMDS_NodeIteratorPtr anIt = aMeshDS->nodesIterator();
-  for ( int i = 0, n = nbNodes; i < n && anIt->more(); i++ )
+  for ( smIdType i = 0, n = nbNodes; i < n && anIt->more(); i++ )
     aResult[i] = anIt->next()->GetID();
 
   return aResult._retn();
@@ -4843,7 +4997,7 @@ SMESH::long_array* SMESH_Mesh_i::GetNodesId()
  */
 //=============================================================================
 
-SMESH::ElementType SMESH_Mesh_i::GetElementType( const CORBA::Long id, const bool iselem )
+SMESH::ElementType SMESH_Mesh_i::GetElementType( const SMESH::smIdType id, const bool iselem )
 {
   SMESH::ElementType type = SMESH::ALL;
   SMESH_TRY;
@@ -4864,7 +5018,7 @@ SMESH::ElementType SMESH_Mesh_i::GetElementType( const CORBA::Long id, const boo
  */
 //=============================================================================
 
-SMESH::EntityType SMESH_Mesh_i::GetElementGeomType( const CORBA::Long id )
+SMESH::EntityType SMESH_Mesh_i::GetElementGeomType( const SMESH::smIdType id )
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
@@ -4882,7 +5036,7 @@ SMESH::EntityType SMESH_Mesh_i::GetElementGeomType( const CORBA::Long id )
  */
 //=============================================================================
 
-SMESH::GeometryType SMESH_Mesh_i::GetElementShape( const CORBA::Long id )
+SMESH::GeometryType SMESH_Mesh_i::GetElementShape( const SMESH::smIdType id )
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
@@ -4900,9 +5054,9 @@ SMESH::GeometryType SMESH_Mesh_i::GetElementShape( const CORBA::Long id )
  */
 //=============================================================================
 
-SMESH::long_array* SMESH_Mesh_i::GetSubMeshElementsId(const CORBA::Long ShapeID)
+SMESH::smIdType_array* SMESH_Mesh_i::GetSubMeshElementsId(const CORBA::Long ShapeID)
 {
-  SMESH::long_array_var aResult = new SMESH::long_array();
+  SMESH::smIdType_array_var aResult = new SMESH::smIdType_array();
 
   SMESH_TRY;
   if ( _preMeshInfo )
@@ -4917,7 +5071,7 @@ SMESH::long_array* SMESH_Mesh_i::GetSubMeshElementsId(const CORBA::Long ShapeID)
   aResult->length(SDSM->NbElements());
 
   SMDS_ElemIteratorPtr eIt = SDSM->GetElements();
-  int i = 0;
+  smIdType i = 0;
   while ( eIt->more() ) {
     aResult[i++] = eIt->next()->GetID();
   }
@@ -4935,10 +5089,10 @@ SMESH::long_array* SMESH_Mesh_i::GetSubMeshElementsId(const CORBA::Long ShapeID)
  */
 //=============================================================================
 
-SMESH::long_array* SMESH_Mesh_i::GetSubMeshNodesId(const CORBA::Long ShapeID,
+SMESH::smIdType_array* SMESH_Mesh_i::GetSubMeshNodesId(const CORBA::Long ShapeID,
                                                    CORBA::Boolean    all)
 {
-  SMESH::long_array_var aResult = new SMESH::long_array();
+  SMESH::smIdType_array_var aResult = new SMESH::smIdType_array();
 
   SMESH_TRY;
   if ( _preMeshInfo )
@@ -4950,7 +5104,7 @@ SMESH::long_array* SMESH_Mesh_i::GetSubMeshNodesId(const CORBA::Long ShapeID,
   SMESHDS_SubMesh* SDSM = SM->GetSubMeshDS();
   if(!SDSM) return aResult._retn();
 
-  set<int> theElems;
+  set<smIdType> theElems;
   if( !all || (SDSM->NbElements()==0) ) { // internal nodes or vertex submesh
     SMDS_NodeIteratorPtr nIt = SDSM->GetNodes();
     while ( nIt->more() ) {
@@ -4971,8 +5125,8 @@ SMESH::long_array* SMESH_Mesh_i::GetSubMeshNodesId(const CORBA::Long ShapeID,
   }
 
   aResult->length(theElems.size());
-  set<int>::iterator itElem;
-  int i = 0;
+  set<smIdType>::iterator itElem;
+  smIdType i = 0;
   for ( itElem = theElems.begin(); itElem != theElems.end(); itElem++ )
     aResult[i++] = *itElem;
 
@@ -5027,7 +5181,7 @@ CORBA::LongLong SMESH_Mesh_i::GetMeshPtr()
     _preMeshInfo->FullLoadFromFile();
 
   CORBA::LongLong pointeur = CORBA::LongLong(_impl);
-  if ( MYDEBUG ) MESSAGE("CORBA::LongLong SMESH_Mesh_i::GetMeshPtr() "<<pointeur);
+  MESSAGE("CORBA::LongLong SMESH_Mesh_i::GetMeshPtr() "<<pointeur);
   return pointeur;
 }
 
@@ -5039,7 +5193,7 @@ CORBA::LongLong SMESH_Mesh_i::GetMeshPtr()
  */
 //=============================================================================
 
-SMESH::double_array* SMESH_Mesh_i::GetNodeXYZ(const CORBA::Long id)
+SMESH::double_array* SMESH_Mesh_i::GetNodeXYZ(const SMESH::smIdType id)
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
@@ -5070,13 +5224,13 @@ SMESH::double_array* SMESH_Mesh_i::GetNodeXYZ(const CORBA::Long id)
  */
 //=============================================================================
 
-SMESH::long_array* SMESH_Mesh_i::GetNodeInverseElements(const CORBA::Long  id,
-                                                        SMESH::ElementType elemType)
+SMESH::smIdType_array* SMESH_Mesh_i::GetNodeInverseElements(const SMESH::smIdType  id,
+                                                            SMESH::ElementType elemType)
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  SMESH::long_array_var aResult = new SMESH::long_array();
+  SMESH::smIdType_array_var aResult = new SMESH::smIdType_array();
   SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS();
   if ( aMeshDS == NULL )
     return aResult._retn();
@@ -5090,7 +5244,7 @@ SMESH::long_array* SMESH_Mesh_i::GetNodeInverseElements(const CORBA::Long  id,
   SMDSAbs_ElementType type = SMDSAbs_ElementType( elemType );
   SMDS_ElemIteratorPtr eIt = aNode->GetInverseElementIterator( type );
   aResult->length( aNode->NbInverseElements( type ));
-  for( int i = 0; eIt->more(); ++i )
+  for( smIdType i = 0; eIt->more(); ++i )
   {
     const SMDS_MeshElement* elem = eIt->next();
     aResult[ i ] = elem->GetID();
@@ -5104,7 +5258,7 @@ SMESH::long_array* SMESH_Mesh_i::GetNodeInverseElements(const CORBA::Long  id,
  */
 //=============================================================================
 
-SMESH::NodePosition* SMESH_Mesh_i::GetNodePosition(CORBA::Long NodeID)
+SMESH::NodePosition* SMESH_Mesh_i::GetNodePosition(SMESH::smIdType NodeID)
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
@@ -5157,7 +5311,7 @@ SMESH::NodePosition* SMESH_Mesh_i::GetNodePosition(CORBA::Long NodeID)
  */
 //=============================================================================
 
-SMESH::ElementPosition SMESH_Mesh_i::GetElementPosition(CORBA::Long ElemID)
+SMESH::ElementPosition SMESH_Mesh_i::GetElementPosition(SMESH::smIdType ElemID)
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
@@ -5204,7 +5358,7 @@ SMESH::ElementPosition SMESH_Mesh_i::GetElementPosition(CORBA::Long ElemID)
  */
 //=============================================================================
 
-CORBA::Long SMESH_Mesh_i::GetShapeID(const CORBA::Long id)
+CORBA::Long SMESH_Mesh_i::GetShapeID(const SMESH::smIdType id)
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
@@ -5231,7 +5385,7 @@ CORBA::Long SMESH_Mesh_i::GetShapeID(const CORBA::Long id)
  */
 //=============================================================================
 
-CORBA::Long SMESH_Mesh_i::GetShapeIDForElem(const CORBA::Long id)
+CORBA::Long SMESH_Mesh_i::GetShapeIDForElem(const SMESH::smIdType id)
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
@@ -5261,7 +5415,7 @@ CORBA::Long SMESH_Mesh_i::GetShapeIDForElem(const CORBA::Long id)
  */
 //=============================================================================
 
-CORBA::Long SMESH_Mesh_i::GetElemNbNodes(const CORBA::Long id)
+CORBA::Short SMESH_Mesh_i::GetElemNbNodes(const SMESH::smIdType id)
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
@@ -5283,7 +5437,7 @@ CORBA::Long SMESH_Mesh_i::GetElemNbNodes(const CORBA::Long id)
  */
 //=============================================================================
 
-CORBA::Long SMESH_Mesh_i::GetElemNode(const CORBA::Long id, const CORBA::Long index)
+SMESH::smIdType SMESH_Mesh_i::GetElemNode(const SMESH::smIdType id, const CORBA::Short index)
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
@@ -5302,12 +5456,12 @@ CORBA::Long SMESH_Mesh_i::GetElemNode(const CORBA::Long id, const CORBA::Long in
  */
 //=============================================================================
 
-SMESH::long_array* SMESH_Mesh_i::GetElemNodes(const CORBA::Long id)
+SMESH::smIdType_array* SMESH_Mesh_i::GetElemNodes(const SMESH::smIdType id)
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  SMESH::long_array_var aResult = new SMESH::long_array();
+  SMESH::smIdType_array_var aResult = new SMESH::smIdType_array();
   if ( SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS() )
   {
     if ( const SMDS_MeshElement* elem = aMeshDS->FindElement(id) )
@@ -5328,7 +5482,7 @@ SMESH::long_array* SMESH_Mesh_i::GetElemNodes(const CORBA::Long id)
  */
 //=============================================================================
 
-CORBA::Boolean SMESH_Mesh_i::IsMediumNode(const CORBA::Long ide, const CORBA::Long idn)
+CORBA::Boolean SMESH_Mesh_i::IsMediumNode(const SMESH::smIdType ide, const SMESH::smIdType idn)
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
@@ -5353,7 +5507,7 @@ CORBA::Boolean SMESH_Mesh_i::IsMediumNode(const CORBA::Long ide, const CORBA::Lo
  */
 //=============================================================================
 
-CORBA::Boolean SMESH_Mesh_i::IsMediumNodeOfAnyElem(const CORBA::Long idn,
+CORBA::Boolean SMESH_Mesh_i::IsMediumNodeOfAnyElem(const SMESH::smIdType idn,
                                                    SMESH::ElementType theElemType)
 {
   if ( _preMeshInfo )
@@ -5384,7 +5538,7 @@ CORBA::Boolean SMESH_Mesh_i::IsMediumNodeOfAnyElem(const CORBA::Long idn,
  */
 //=============================================================================
 
-CORBA::Long SMESH_Mesh_i::ElemNbEdges(const CORBA::Long id)
+CORBA::Long SMESH_Mesh_i::ElemNbEdges(const SMESH::smIdType id)
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
@@ -5403,7 +5557,7 @@ CORBA::Long SMESH_Mesh_i::ElemNbEdges(const CORBA::Long id)
  */
 //=============================================================================
 
-CORBA::Long SMESH_Mesh_i::ElemNbFaces(const CORBA::Long id)
+CORBA::Long SMESH_Mesh_i::ElemNbFaces(const SMESH::smIdType id)
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
@@ -5421,13 +5575,13 @@ CORBA::Long SMESH_Mesh_i::ElemNbFaces(const CORBA::Long id)
  */
 //================================================================================
 
-SMESH::long_array* SMESH_Mesh_i::GetElemFaceNodes(CORBA::Long  elemId,
-                                                  CORBA::Short faceIndex)
+SMESH::smIdType_array* SMESH_Mesh_i::GetElemFaceNodes(SMESH::smIdType  elemId,
+                                                      CORBA::Short     faceIndex)
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  SMESH::long_array_var aResult = new SMESH::long_array();
+  SMESH::smIdType_array_var aResult = new SMESH::smIdType_array();
   if ( SMESHDS_Mesh* aMeshDS = _impl->GetMeshDS() )
   {
     if ( const SMDS_MeshElement* elem = aMeshDS->FindElement(elemId) )
@@ -5479,7 +5633,7 @@ SMESH::double_array* SMESH_Mesh_i::GetFaceNormal(CORBA::Long    elemId,
  */
 //================================================================================
 
-CORBA::Long SMESH_Mesh_i::FindElementByNodes(const SMESH::long_array& nodes)
+SMESH::smIdType SMESH_Mesh_i::FindElementByNodes(const SMESH::smIdType_array& nodes)
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
@@ -5509,13 +5663,13 @@ CORBA::Long SMESH_Mesh_i::FindElementByNodes(const SMESH::long_array& nodes)
  */
 //================================================================================
 
-SMESH::long_array* SMESH_Mesh_i::GetElementsByNodes(const SMESH::long_array& nodes,
-                                                    SMESH::ElementType       elemType)
+SMESH::smIdType_array* SMESH_Mesh_i::GetElementsByNodes(const SMESH::smIdType_array& nodes,
+                                                        SMESH::ElementType       elemType)
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
 
-  SMESH::long_array_var result = new SMESH::long_array();
+  SMESH::smIdType_array_var result = new SMESH::smIdType_array();
 
   if ( SMESHDS_Mesh* mesh = _impl->GetMeshDS() )
   {
@@ -5538,7 +5692,7 @@ SMESH::long_array* SMESH_Mesh_i::GetElementsByNodes(const SMESH::long_array& nod
  */
 //=============================================================================
 
-CORBA::Boolean SMESH_Mesh_i::IsPoly(const CORBA::Long id)
+CORBA::Boolean SMESH_Mesh_i::IsPoly(const SMESH::smIdType id)
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
@@ -5557,7 +5711,7 @@ CORBA::Boolean SMESH_Mesh_i::IsPoly(const CORBA::Long id)
  */
 //=============================================================================
 
-CORBA::Boolean SMESH_Mesh_i::IsQuadratic(const CORBA::Long id)
+CORBA::Boolean SMESH_Mesh_i::IsQuadratic(const SMESH::smIdType id)
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
@@ -5575,7 +5729,7 @@ CORBA::Boolean SMESH_Mesh_i::IsQuadratic(const CORBA::Long id)
  */
 //=============================================================================
 
-CORBA::Double SMESH_Mesh_i::GetBallDiameter(CORBA::Long id)
+CORBA::Double SMESH_Mesh_i::GetBallDiameter(SMESH::smIdType id)
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
@@ -5593,7 +5747,7 @@ CORBA::Double SMESH_Mesh_i::GetBallDiameter(CORBA::Long id)
  */
 //=============================================================================
 
-SMESH::double_array* SMESH_Mesh_i::BaryCenter(const CORBA::Long id)
+SMESH::double_array* SMESH_Mesh_i::BaryCenter(const SMESH::smIdType id)
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
@@ -5769,8 +5923,7 @@ void SMESH_Mesh_i::CreateGroupServants()
 
     // register CORBA object for persistence
     int nextId = _gen_i->RegisterObject( groupVar );
-    if(MYDEBUG) { MESSAGE( "Add group to map with id = "<< nextId); }
-    else        { (void)nextId; } // avoid "unused variable" warning in release mode
+    MESSAGE( "Add group to map with id = "<< nextId);
 
     // publishing the groups in the study
     GEOM::GEOM_Object_var shapeVar = _gen_i->ShapeToGeomObject( shape );
@@ -5801,7 +5954,7 @@ void SMESH_Mesh_i::CreateGroupServants()
  */
 //=============================================================================
 
-bool SMESH_Mesh_i::IsComputedOK()
+CORBA::Boolean SMESH_Mesh_i::IsComputedOK()
 {
   return _impl->IsComputedOK();
 }
@@ -5955,7 +6108,7 @@ SMESH::string_array* SMESH_Mesh_i::GetLastParameters()
   SMESH_Gen_i *gen = SMESH_Gen_i::GetSMESHGen();
   if(gen) {
     CORBA::String_var aParameters = GetParameters();
-    SALOMEDS::ListOfListOfStrings_var aSections = SMESH_Gen_i::getStudyServant()->ParseVariables(aParameters);
+    SALOMEDS::ListOfListOfStrings_var aSections = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->ParseVariables(aParameters);
     if ( aSections->length() > 0 ) {
       SALOMEDS::ListOfStrings aVars = aSections[ aSections->length() - 1 ];
       aResult->length( aVars.length() );
@@ -6008,8 +6161,8 @@ SMESH::SMESH_Mesh_ptr SMESH_Mesh_i::GetMesh()
 /*!
  * \brief Return false if GetMeshInfo() return incorrect information that may
  *        happen if mesh data is not yet fully loaded from the file of study.
- * 
- * 
+ *
+ *
  */
 //================================================================================
 
@@ -6024,12 +6177,12 @@ bool SMESH_Mesh_i::IsMeshInfoCorrect()
  */
 //=============================================================================
 
-SMESH::long_array* SMESH_Mesh_i::GetMeshInfo()
+SMESH::smIdType_array* SMESH_Mesh_i::GetMeshInfo()
 {
   if ( _preMeshInfo )
     return _preMeshInfo->GetMeshInfo();
 
-  SMESH::long_array_var aRes = new SMESH::long_array();
+  SMESH::smIdType_array_var aRes = new SMESH::smIdType_array();
   aRes->length(SMESH::Entity_Last);
   for (int i = SMESH::Entity_Node; i < SMESH::Entity_Last; i++)
     aRes[i] = 0;
@@ -6048,11 +6201,11 @@ SMESH::long_array* SMESH_Mesh_i::GetMeshInfo()
  */
 //=============================================================================
 
-SMESH::long_array* SMESH_Mesh_i::GetNbElementsByType()
+SMESH::smIdType_array* SMESH_Mesh_i::GetNbElementsByType()
 {
-  SMESH::long_array_var aRes = new SMESH::long_array();
+  SMESH::smIdType_array_var aRes = new SMESH::smIdType_array();
   aRes->length(SMESH::NB_ELEMENT_TYPES);
-  for (int i = 0; i < SMESH::NB_ELEMENT_TYPES; i++)
+  for (smIdType i = 0; i < SMESH::NB_ELEMENT_TYPES; i++)
     aRes[ i ] = 0;
 
   const SMDS_MeshInfo* meshInfo = 0;
@@ -6062,7 +6215,7 @@ SMESH::long_array* SMESH_Mesh_i::GetNbElementsByType()
     meshInfo = & meshDS->GetMeshInfo();
 
   if (meshInfo)
-    for (int i = 0; i < SMESH::NB_ELEMENT_TYPES; i++)
+    for (smIdType i = 0; i < SMESH::NB_ELEMENT_TYPES; i++)
       aRes[i] = meshInfo->NbElements((SMDSAbs_ElementType)i);
 
   return aRes._retn();
@@ -6075,7 +6228,7 @@ SMESH::long_array* SMESH_Mesh_i::GetNbElementsByType()
 //=============================================================================
 
 void SMESH_Mesh_i::CollectMeshInfo(const SMDS_ElemIteratorPtr theItr,
-                                   SMESH::long_array&         theInfo)
+                                   SMESH::smIdType_array&     theInfo)
 {
   if (!theItr) return;
   while (theItr->more())
@@ -6155,25 +6308,25 @@ namespace /* Iterators used in SMESH_Mesh_i::GetElements(SMESH::SMESH_IDSource_v
   //-----------------------------------------------------------------------------
   struct IDSourceIterator : public SMDS_ElemIterator
   {
-    const CORBA::Long*        _idPtr;
-    const CORBA::Long*        _idEndPtr;
-    SMESH::long_array_var     _idArray;
-    const SMDS_Mesh*          _mesh;
-    const SMDSAbs_ElementType _type;
-    const SMDS_MeshElement*   _elem;
-
-    IDSourceIterator( const SMDS_Mesh*    mesh,
-                      const CORBA::Long*  ids,
-                      const int           nbIds,
-                      SMDSAbs_ElementType type):
+    const SMESH::smIdType*        _idPtr;
+    const SMESH::smIdType*        _idEndPtr;
+    SMESH::smIdType_array_var     _idArray;
+    const SMDS_Mesh*              _mesh;
+    const SMDSAbs_ElementType     _type;
+    const SMDS_MeshElement*       _elem;
+
+    IDSourceIterator( const SMDS_Mesh*       mesh,
+                      const SMESH::smIdType* ids,
+                      const smIdType         nbIds,
+                      SMDSAbs_ElementType    type):
       _idPtr( ids ), _idEndPtr( ids + nbIds ), _mesh( mesh ), _type( type ), _elem( 0 )
     {
       if ( _idPtr && nbIds && _mesh )
         next();
     }
-    IDSourceIterator( const SMDS_Mesh*    mesh,
-                      SMESH::long_array*  idArray,
-                      SMDSAbs_ElementType type):
+    IDSourceIterator( const SMDS_Mesh*       mesh,
+                      SMESH::smIdType_array* idArray,
+                      SMDSAbs_ElementType    type):
       _idPtr( 0 ), _idEndPtr( 0 ), _idArray( idArray), _mesh( mesh ), _type( type ), _elem( 0 )
     {
       if ( idArray && _mesh )
@@ -6324,13 +6477,13 @@ SMDS_ElemIteratorPtr SMESH_Mesh_i::GetElements(SMESH::SMESH_IDSource_ptr theObje
     SMDSAbs_ElementType iterType = isNodes ? SMDSAbs_Node : elemType;
     if ( SMESH_MeshEditor_i::IsTemporaryIDSource( theObject ))
     {
-      int nbIds;
-      if ( CORBA::Long* ids = SMESH_MeshEditor_i::GetTemporaryIDs( theObject, nbIds ))
+      SMESH::smIdType nbIds;
+      if ( SMESH::smIdType* ids = SMESH_MeshEditor_i::GetTemporaryIDs( theObject, nbIds ))
         elemIt = SMDS_ElemIteratorPtr( new IDSourceIterator( meshDS, ids, nbIds, iterType ));
     }
     else
     {
-      SMESH::long_array_var ids = theObject->GetIDs();
+      SMESH::smIdType_array_var ids = theObject->GetIDs();
       elemIt = SMDS_ElemIteratorPtr( new IDSourceIterator( meshDS, ids._retn(), iterType ));
     }
     typeOK = ( isNodes == ( elemType == SMDSAbs_Node )) || ( elemType == SMDSAbs_All );
@@ -6875,6 +7028,7 @@ TListOfListOfInt SMESH_Mesh_i::findConcurrentSubMeshes()
   return res;
 }
 
+
 //=============================================================================
 /*!
  * \brief Convert submesh ids into submesh interfaces
@@ -6978,7 +7132,7 @@ SMESH_MeshPartDS::SMESH_MeshPartDS(SMESH::SMESH_IDSource_ptr meshPart):
   else
   {
     TMeshInfo tmpInfo;
-    SMESH::long_array_var           anIDs = meshPart->GetIDs();
+    SMESH::smIdType_array_var       anIDs = meshPart->GetIDs();
     SMESH::array_of_ElementType_var types = meshPart->GetTypes();
     if ( types->length() == 1 && types[0] == SMESH::NODE ) // group of nodes
     {
@@ -7057,35 +7211,35 @@ bool SMESH_MeshPartDS::HasNumerationHoles()
            MaxElementID() != NbElements() );
 }
 // -------------------------------------------------------------------------------------
-int SMESH_MeshPartDS::MaxNodeID() const
+smIdType SMESH_MeshPartDS::MaxNodeID() const
 {
   if ( _meshDS ) return _meshDS->MaxNodeID();
   return NbNodes() == 0 ? 0 : (*_elements[ SMDSAbs_Node ].rbegin())->GetID();
 }
 // -------------------------------------------------------------------------------------
-int SMESH_MeshPartDS::MinNodeID() const
+smIdType SMESH_MeshPartDS::MinNodeID() const
 {
   if ( _meshDS ) return _meshDS->MinNodeID();
   return NbNodes() == 0 ? 0 : (*_elements[ SMDSAbs_Node ].begin())->GetID();
-}  
+}
 // -------------------------------------------------------------------------------------
-int SMESH_MeshPartDS::MaxElementID() const
+smIdType SMESH_MeshPartDS::MaxElementID() const
 {
   if ( _meshDS ) return _meshDS->MaxElementID();
-  int maxID = 0;
+  smIdType maxID = 0;
   for ( int iType = SMDSAbs_Edge; iType < SMDSAbs_NbElementTypes; ++iType )
     if ( !_elements[ iType ].empty() )
-      maxID = Max( maxID, (*_elements[ iType ].rbegin())->GetID() );
+      maxID = std::max( maxID, (*_elements[ iType ].rbegin())->GetID() );
   return maxID;
 }
 // -------------------------------------------------------------------------------------
-int SMESH_MeshPartDS::MinElementID() const
+smIdType SMESH_MeshPartDS::MinElementID() const
 {
   if ( _meshDS ) return _meshDS->MinElementID();
-  int minID = 0;
+  smIdType minID = 0;
   for ( int iType = SMDSAbs_Edge; iType < SMDSAbs_NbElementTypes; ++iType )
     if ( !_elements[ iType ].empty() )
-      minID = Min( minID, (*_elements[ iType ].begin())->GetID() );
+      minID = std::min( minID, (*_elements[ iType ].begin())->GetID() );
   return minID;
 }
 // -------------------------------------------------------------------------------------
index 56edeee76b2d030a91b718027fc92ab40f8bd897..d56f4e28aabd9643f47f7893dbb3c1c2248bf276 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -212,10 +212,11 @@ public:
                   CORBA::Boolean     overwrite,
                   CORBA::Boolean     autoDimension = true);
 
-  void ExportSAUV( const char* file, CORBA::Boolean auto_groups );
+  CORBA::LongLong ExportMEDCoupling(CORBA::Boolean auto_groups,
+                                    CORBA::Boolean autoDimension = true);
 
-  void ExportDAT( const char* file );
-  void ExportUNV( const char* file );
+  void ExportDAT( const char* file, const CORBA::Boolean renumber );
+  void ExportUNV( const char* file, const CORBA::Boolean renumber  );
   void ExportSTL( const char* file, bool isascii );
   void ExportCGNS(SMESH::SMESH_IDSource_ptr meshPart,
                   const char*               file,
@@ -225,6 +226,17 @@ public:
                  const char*               file,
                  CORBA::Boolean            withRequiredGroups);
 
+
+  template<class SPECLS>
+    void ExportPartToMEDCommon(SPECLS&                   speCls,
+                               SMESH::SMESH_IDSource_ptr meshPart,
+                               CORBA::Boolean            auto_groups,
+                               CORBA::Boolean            autoDim,
+                               const GEOM::ListOfFields& fields,
+                               const char*               geomAssocFields,
+                               CORBA::Double             ZTolerance,
+                               CORBA::Boolean            saveNumbers );
+
   void ExportPartToMED(SMESH::SMESH_IDSource_ptr meshPart,
                        const char*               file,
                        CORBA::Boolean            auto_groups,
@@ -233,100 +245,112 @@ public:
                        CORBA::Boolean            autoDim,
                        const GEOM::ListOfFields& fields,
                        const char*               geomAssocFields,
-                       CORBA::Double             ZTolerance);
+                       CORBA::Double             ZTolerance,
+                       CORBA::Boolean            saveNumbers );
+
+  CORBA::LongLong ExportPartToMEDCoupling(SMESH::SMESH_IDSource_ptr meshPart,
+                                          CORBA::Boolean            auto_groups,
+                                          CORBA::Boolean            autoDim,
+                                          const GEOM::ListOfFields& fields,
+                                          const char*               geomAssocFields,
+                                          CORBA::Double             ZTolerance,
+                                          CORBA::Boolean            saveNumbers);
+
   void ExportPartToDAT(SMESH::SMESH_IDSource_ptr meshPart,
-                       const char*               file);
+                       const char*               file,
+                       CORBA::Boolean            renumber);
   void ExportPartToUNV(SMESH::SMESH_IDSource_ptr meshPart,
-                       const char*               file);
+                       const char*               file,
+                       CORBA::Boolean            renumber);
   void ExportPartToSTL(SMESH::SMESH_IDSource_ptr meshPart,
                        const char*               file,
                        CORBA::Boolean            isascii);
 
   CORBA::Double GetComputeProgress();
 
-  CORBA::Long NbNodes();
+  SMESH::smIdType NbNodes();
 
-  CORBA::Long NbElements();
+  SMESH::smIdType NbElements();
 
-  CORBA::Long Nb0DElements();
+  SMESH::smIdType Nb0DElements();
 
-  CORBA::Long NbBalls();
+  SMESH::smIdType NbBalls();
 
-  CORBA::Long NbEdges();
+  SMESH::smIdType NbEdges();
 
-  CORBA::Long NbEdgesOfOrder(SMESH::ElementOrder order);
+  SMESH::smIdType NbEdgesOfOrder(SMESH::ElementOrder order);
 
-  CORBA::Long NbFaces();
+  SMESH::smIdType NbFaces();
 
-  CORBA::Long NbFacesOfOrder(SMESH::ElementOrder order);
+  SMESH::smIdType NbFacesOfOrder(SMESH::ElementOrder order);
 
-  CORBA::Long NbTriangles();
+  SMESH::smIdType NbTriangles();
 
-  CORBA::Long NbTrianglesOfOrder(SMESH::ElementOrder order);
+  SMESH::smIdType NbTrianglesOfOrder(SMESH::ElementOrder order);
 
-  CORBA::Long NbBiQuadTriangles();
+  SMESH::smIdType NbBiQuadTriangles();
 
-  CORBA::Long NbQuadrangles();
+  SMESH::smIdType NbQuadrangles();
 
-  CORBA::Long NbQuadranglesOfOrder(SMESH::ElementOrder order);
+  SMESH::smIdType NbQuadranglesOfOrder(SMESH::ElementOrder order);
 
-  CORBA::Long NbBiQuadQuadrangles();
+  SMESH::smIdType NbBiQuadQuadrangles();
 
-  CORBA::Long NbPolygons();
+  SMESH::smIdType NbPolygons();
 
-  CORBA::Long NbPolygonsOfOrder(SMESH::ElementOrder order = SMESH::ORDER_ANY);
+  SMESH::smIdType NbPolygonsOfOrder(SMESH::ElementOrder order = SMESH::ORDER_ANY);
 
-  CORBA::Long NbVolumes();
+  SMESH::smIdType NbVolumes();
 
-  CORBA::Long NbVolumesOfOrder(SMESH::ElementOrder order);
+  SMESH::smIdType NbVolumesOfOrder(SMESH::ElementOrder order);
 
-  CORBA::Long NbTetras();
+  SMESH::smIdType NbTetras();
 
-  CORBA::Long NbTetrasOfOrder(SMESH::ElementOrder order);
+  SMESH::smIdType NbTetrasOfOrder(SMESH::ElementOrder order);
 
-  CORBA::Long NbHexas();
+  SMESH::smIdType NbHexas();
 
-  CORBA::Long NbHexasOfOrder(SMESH::ElementOrder order);
+  SMESH::smIdType NbHexasOfOrder(SMESH::ElementOrder order);
 
-  CORBA::Long NbTriQuadraticHexas();
+  SMESH::smIdType NbTriQuadraticHexas();
 
-  CORBA::Long NbPyramids();
+  SMESH::smIdType NbPyramids();
 
-  CORBA::Long NbPyramidsOfOrder(SMESH::ElementOrder order);
+  SMESH::smIdType NbPyramidsOfOrder(SMESH::ElementOrder order);
 
-  CORBA::Long NbPrisms();
+  SMESH::smIdType NbPrisms();
 
-  CORBA::Long NbPrismsOfOrder(SMESH::ElementOrder order);
+  SMESH::smIdType NbPrismsOfOrder(SMESH::ElementOrder order);
 
-  CORBA::Long NbHexagonalPrisms();
+  SMESH::smIdType NbHexagonalPrisms();
 
-  CORBA::Long NbPolyhedrons();
+  SMESH::smIdType NbPolyhedrons();
 
-  CORBA::Long NbSubMesh();
+  SMESH::smIdType NbSubMesh();
 
-  SMESH::long_array* GetElementsId();
+  SMESH::smIdType_array* GetElementsId();
 
-  SMESH::long_array* GetElementsByType( SMESH::ElementType theElemType );
+  SMESH::smIdType_array* GetElementsByType( SMESH::ElementType theElemType );
 
-  SMESH::long_array* GetNodesId();
+  SMESH::smIdType_array* GetNodesId();
 
-  SMESH::ElementType GetElementType( CORBA::Long id, bool iselem );
+  SMESH::ElementType GetElementType( SMESH::smIdType id, bool iselem );
 
-  SMESH::EntityType GetElementGeomType( CORBA::Long id );
+  SMESH::EntityType GetElementGeomType( SMESH::smIdType id );
 
-  SMESH::GeometryType GetElementShape( CORBA::Long id );
+  SMESH::GeometryType GetElementShape( SMESH::smIdType id );
 
   /*!
    * Returns ID of elements for given submesh
    */
-  SMESH::long_array* GetSubMeshElementsId(CORBA::Long ShapeID);
+  SMESH::smIdType_array* GetSubMeshElementsId(CORBA::Long ShapeID);
 
   /*!
    * Returns ID of nodes for given submesh
    * If param all==true - returns all nodes, else -
    * returns only nodes on shapes.
    */
-  SMESH::long_array* GetSubMeshNodesId(CORBA::Long ShapeID, CORBA::Boolean all);
+  SMESH::smIdType_array* GetSubMeshNodesId(CORBA::Long ShapeID, CORBA::Boolean all);
 
   /*!
    * Returns type of elements for given submesh
@@ -400,15 +424,15 @@ public:
    */
   void CreateGroupServants();
 
-  /*!
-   * \brief Return true if all sub-meshes are computed OK - to update an icon
-   */
-  bool IsComputedOK();
 
 
   // ====================================
   // SMESH_Mesh interface (continuation)
   // ====================================
+  /*!
+   * \brief Return true if all sub-meshes are computed OK - to update an icon
+   */
+  CORBA::Boolean IsComputedOK();
 
   /*!
    * \brief Return groups cantained in _mapGroups by their IDs
@@ -419,82 +443,82 @@ public:
    * Get XYZ coordinates of node as list of double
    * If there is not node for given ID - returns empty list
    */
-  SMESH::double_array* GetNodeXYZ(CORBA::Long id);
+  SMESH::double_array* GetNodeXYZ(SMESH::smIdType id);
 
   /*!
    * For given node returns list of IDs of inverse elements
    * If there is not node for given ID - returns empty list
    */
-  SMESH::long_array* GetNodeInverseElements(CORBA::Long        id,
+  SMESH::smIdType_array* GetNodeInverseElements(SMESH::smIdType    id,
                                             SMESH::ElementType elemType);
 
   /*!
    * \brief Return position of a node on shape
    */
-  SMESH::NodePosition* GetNodePosition(CORBA::Long NodeID);
+  SMESH::NodePosition* GetNodePosition(SMESH::smIdType NodeID);
 
   /*!
    * \brief Return position of an element on shape
    */
-  SMESH::ElementPosition GetElementPosition(CORBA::Long ElemID);
+  SMESH::ElementPosition GetElementPosition(SMESH::smIdType ElemID);
 
   /*!
    * If given element is node returns IDs of shape from position
    * If there is not node for given ID - returns -1
    */
-  CORBA::Long GetShapeID(CORBA::Long id);
+  CORBA::Long GetShapeID(SMESH::smIdType id);
 
   /*!
    * For given element returns ID of result shape after
    * ::FindShape() from SMESH_MeshEditor
    * If there is not element for given ID - returns -1
    */
-  CORBA::Long GetShapeIDForElem(CORBA::Long id);
+  CORBA::Long GetShapeIDForElem(SMESH::smIdType id);
 
   /*!
    * Returns number of nodes for given element
    * If there is not element for given ID - returns -1
    */
-  CORBA::Long GetElemNbNodes(CORBA::Long id);
+  CORBA::Short GetElemNbNodes(SMESH::smIdType id);
 
   /*!
    * Returns IDs of nodes of given element
    */
-  SMESH::long_array* GetElemNodes(CORBA::Long id);
+  SMESH::smIdType_array* GetElemNodes(SMESH::smIdType id);
 
   /*!
    * Returns ID of node by given index for given element
    * If there is not element for given ID - returns -1
    * If there is not node for given index - returns -2
    */
-  CORBA::Long GetElemNode(CORBA::Long id, CORBA::Long index);
+  SMESH::smIdType GetElemNode(SMESH::smIdType id, CORBA::Short index);
 
   /*!
    * Returns true if given node is medium node
    * in given quadratic element
    */
-  CORBA::Boolean IsMediumNode(CORBA::Long ide, CORBA::Long idn);
+  CORBA::Boolean IsMediumNode(SMESH::smIdType ide, SMESH::smIdType idn);
 
   /*!
    * Returns true if given node is medium node
    * in one of quadratic elements
    */
-  CORBA::Boolean IsMediumNodeOfAnyElem(CORBA::Long        idn,
+  CORBA::Boolean IsMediumNodeOfAnyElem(SMESH::smIdType    idn,
                                        SMESH::ElementType elemType);
 
   /*!
    * Returns number of edges for given element
    */
-  CORBA::Long ElemNbEdges(CORBA::Long id);
+  CORBA::Long ElemNbEdges(SMESH::smIdType id);
 
   /*!
    * Returns number of faces for given element
    */
-  CORBA::Long ElemNbFaces(CORBA::Long id);
+  CORBA::Long ElemNbFaces(SMESH::smIdType id);
   /*!
    * Returns nodes of given face (counted from zero) for given element.
    */
-  SMESH::long_array* GetElemFaceNodes(CORBA::Long elemId, CORBA::Short faceIndex);
+  SMESH::smIdType_array* GetElemFaceNodes(SMESH::smIdType elemId, CORBA::Short faceIndex);
 
   /*!
    * Returns three components of normal of given mesh face (or an empty array in KO case)
@@ -504,33 +528,33 @@ public:
   /*!
    * Returns an element based on all given nodes.
    */
-  CORBA::Long FindElementByNodes(const SMESH::long_array& nodes);
+  SMESH::smIdType FindElementByNodes(const SMESH::smIdType_array& nodes);
 
   /*!
    * Return elements including all given nodes.
    */
-  SMESH::long_array* GetElementsByNodes(const SMESH::long_array& nodes,
+  SMESH::smIdType_array* GetElementsByNodes(const SMESH::smIdType_array& nodes,
                                         SMESH::ElementType       elemType);
 
   /*!
    * Returns true if given element is polygon
    */
-  CORBA::Boolean IsPoly(CORBA::Long id);
+  CORBA::Boolean IsPoly(SMESH::smIdType id);
 
   /*!
    * Returns true if given element is quadratic
    */
-  CORBA::Boolean IsQuadratic(CORBA::Long id);
+  CORBA::Boolean IsQuadratic(SMESH::smIdType id);
 
   /*!
    * Returns diameter of ball discrete element or zero in case of an invalid \a id
    */
-  CORBA::Double GetBallDiameter(CORBA::Long id);
+  CORBA::Double GetBallDiameter(SMESH::smIdType id);
 
   /*!
    * Returns bary center for given element
    */
-  SMESH::double_array* BaryCenter(CORBA::Long id);
+  SMESH::double_array* BaryCenter(SMESH::smIdType id);
 
   /*!
    * Returns information about imported MED file
@@ -547,7 +571,7 @@ public:
    * Persistence of geometry tick
    */
   int& MainShapeTick() { return _mainShapeTick; }
-  
+
 
   /*!
    * Sets list of notebook variables used for Mesh operations separated by ":" symbol
@@ -582,7 +606,7 @@ public:
    * Collect statistic of mesh elements given by iterator
    */
   static void CollectMeshInfo(const SMDS_ElemIteratorPtr theItr,
-                              SMESH::long_array&         theInfo);
+                              SMESH::smIdType_array&     theInfo);
   /*!
    * \brief Return iterator on elements of given type in given object
    */
@@ -593,17 +617,17 @@ public:
   // SMESH_IDSource interface
   // =========================
 
-  virtual SMESH::long_array* GetIDs();
+  virtual SMESH::smIdType_array* GetIDs();
   /*!
    * Returns number of mesh elements of each \a EntityType
    * Result array of number of elements per \a EntityType
    * Inherited from SMESH_IDSource
    */
-  virtual SMESH::long_array* GetMeshInfo();
+  virtual SMESH::smIdType_array* GetMeshInfo();
   /*!
    * Returns number of mesh elements of each \a ElementType
    */
-  virtual SMESH::long_array* GetNbElementsByType();
+  virtual SMESH::smIdType_array* GetNbElementsByType();
   /*!
    * Returns types of elements it contains
    */
@@ -626,14 +650,9 @@ public:
   std::map<int, SMESH_subMesh_i*> _mapSubMesh_i; //NRI
   std::map<int, ::SMESH_subMesh*> _mapSubMesh;   //NRI
 
-private:
+public:
+  std::string generateMeshName( );
   std::string prepareMeshNameAndGroups( const char* file, CORBA::Boolean overwrite );
-
-  /*!
-   * Check and correct names of mesh groups
-   */
-  void checkGroupNames();
-
   /*
    * Write GEOM fields to MED file
    */
@@ -641,6 +660,12 @@ private:
                         SMESHDS_Mesh*             meshDS,
                         const GEOM::ListOfFields& fields,
                         const char*               geomAssocFields);
+private:
+  /*!
+   * Check and correct names of mesh groups
+   */
+  void checkGroupNames();
+
   /*!
    * Convert submesh ids into submesh interfaces
    */
@@ -653,10 +678,11 @@ private:
    */
   TListOfListOfInt findConcurrentSubMeshes();
 
+ protected:
+  ::SMESH_Mesh* _impl;        // :: force no namespace here
  private:
 
   static int    _idGenerator;
-  ::SMESH_Mesh* _impl;        // :: force no namespace here
   SMESH_Gen_i*  _gen_i;
   int           _id;          // id given by creator (unique within the creator instance)
   int           _nbInvalidHypos;
index 3f53f2c28a461126e79a5cecfcaa19db0dbdc00a..6576b5d5e545aa4d39fd2b6cf56d3f9a2c683ad3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 #include <vector>
 #include <string>
 
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-#else
-static int MYDEBUG = 0;
-#endif
-
 using namespace std;
 
 
@@ -242,7 +236,7 @@ void SMESH_NoteBook::ReplaceVariables()
     TCollection_AsciiString aMethod      = aCmd->GetMethod();
     TCollection_AsciiString aObject      = aCmd->GetObject();
     TCollection_AsciiString aResultValue = aCmd->GetResultValue();
-    if(MYDEBUG) {
+    if(SALOME::VerbosityActivated()) {
       cout<<"Command before : "<< aCmd->GetString()<<endl;
       cout<<"Method : "<< aMethod<<endl;
       cout<<"Object : "<< aObject<<endl;
@@ -329,7 +323,7 @@ void SMESH_NoteBook::ReplaceVariables()
     }
 
     if(it != _objectMap.end()) {
-      if(MYDEBUG)
+      if(SALOME::VerbosityActivated())
         cout << "Found object : " << (*it).first << endl;
       SMESH_ObjectStates *aStates = (*it).second;
       // Case for LocalLength hypothesis
@@ -384,7 +378,7 @@ void SMESH_NoteBook::ReplaceVariables()
         if(aMethod == "SetLayerDistribution"){
           LayerDistributionStates* aLDStates = (LayerDistributionStates*)(aStates);
           aLDStates->AddDistribution(aCmd->GetArg(1));
-          if(MYDEBUG)
+          if(SALOME::VerbosityActivated())
             cout<<"Add Distribution :"<<aCmd->GetArg(1)<<endl;
         }
       }
@@ -707,7 +701,7 @@ void SMESH_NoteBook::ReplaceVariables()
         // dumped calls due to the fix of
         // issue 0021364:: Dump of netgen parameters has duplicate lines
         SMESH_Gen_i *          aGen = SMESH_Gen_i::GetSMESHGen();
-        SALOMEDS::SObject_wrap sobj = SMESH_Gen_i::getStudyServant()->FindObjectID( (*it).first.ToCString() );
+        SALOMEDS::SObject_wrap sobj = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindObjectID( (*it).first.ToCString() );
         CORBA::Object_var       obj = aGen->SObjectToObject( sobj );
         if ( SMESH_Hypothesis_i* h = SMESH::DownCast< SMESH_Hypothesis_i*>( obj ))
         {
@@ -723,10 +717,10 @@ void SMESH_NoteBook::ReplaceVariables()
       }
     }
     else {
-      if(MYDEBUG)
+      if(SALOME::VerbosityActivated())
         cout << "Object not found" << endl;
     }
-    if(MYDEBUG) {
+    if(SALOME::VerbosityActivated()) {
       cout<<"Command after: "<< aCmd->GetString()<<endl;
     }
   }
@@ -744,7 +738,7 @@ void SMESH_NoteBook::InitObjectMap()
   if(!aGen)
     return;
   
-  SALOMEDS::Study_var aStudy = SMESH_Gen_i::getStudyServant();
+  SALOMEDS::Study_var aStudy = SMESH_Gen_i::GetSMESHGen()->getStudyServant();
   if(aStudy->_is_nil())
     return;
   
@@ -766,7 +760,7 @@ void SMESH_NoteBook::InitObjectMap()
       std::vector< std::string >     allVars = aGen->GetAllParameters( anID.in() );
       SALOMEDS::ListOfListOfStrings_var aSections = aStudy->ParseVariables(aParameters.in());
       _entry2VarsMap[ TCollection_AsciiString( anID.in() )] = allVars;
-      if(MYDEBUG) {
+      if(SALOME::VerbosityActivated()) {
         cout<<"Entry : "<< anID<<endl;
         cout<<"aParameters : "<<aParameters<<endl;
       }
@@ -781,7 +775,7 @@ void SMESH_NoteBook::InitObjectMap()
       else if (!aMesh->_is_nil() ) {
         anObjType = "Mesh";
       }
-      if(MYDEBUG)
+      if(SALOME::VerbosityActivated())
         cout<<"The object Type : "<<anObjType<<endl;
       SMESH_ObjectStates *aState = NULL;
       if(anObjType == "LayerDistribution")
@@ -800,7 +794,7 @@ void SMESH_NoteBook::InitObjectMap()
             aVar.InsertAfter(aVar.Length(), SMESH::TVar::Quote() );
           }
           aVars.push_back(aVar);
-          if(MYDEBUG) {
+          if(SALOME::VerbosityActivated()) {
             cout<<"Variable: '"<<aVar<<"'"<<endl;
           }
         }
@@ -826,7 +820,7 @@ void SMESH_NoteBook::InitObjectMap()
 //================================================================================
 void SMESH_NoteBook::AddCommand(const TCollection_AsciiString& theString)
 {
-  if(MYDEBUG)
+  if(SALOME::VerbosityActivated())
     cout<<theString<<endl;
   Handle(_pyCommand) aCommand = new _pyCommand( theString, -1);
   _commands.push_back(aCommand);
@@ -953,7 +947,7 @@ bool SMESH_NoteBook::GetReal(const TCollection_AsciiString& theVarName, double&
 {
   bool ok = false;
 
-  SALOMEDS::Study_ptr aStudy = SMESH_Gen_i::getStudyServant();
+  SALOMEDS::Study_ptr aStudy = SMESH_Gen_i::GetSMESHGen()->getStudyServant();
   if(aStudy->_is_nil())
     return ok;
 
index 5e5d821233e8696ad4f598677db5b2a5ac233b1c..fe0040c97bf8fcc94ab2841841b52ab36d6a32c4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
diff --git a/src/SMESH_I/SMESH_ParallelMesh_i.cxx b/src/SMESH_I/SMESH_ParallelMesh_i.cxx
new file mode 100644 (file)
index 0000000..882aeae
--- /dev/null
@@ -0,0 +1,227 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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_ParallelMesh_i.cxx
+//  Author : Yoann AUDOUIN, EDF
+//  Module : SMESH
+
+#include "SMESH_ParallelMesh_i.hxx"
+#include "SMESH_Mesh_i.hxx"
+
+#include "SMESH_Gen_i.hxx"
+
+
+//=============================================================================
+namespace
+{
+  //!< implementation of struct used to call methods of SMESH_Mesh_i from SMESH_Mesh
+  // issue 0020918: groups removal is caused by hyp modification
+  // issue 0021208: to forget not loaded mesh data at hyp modification
+  struct TCallUp_i : public SMESH_ParallelMesh::TCallUp
+  {
+    SMESH_ParallelMesh_i* _mesh;
+    TCallUp_i(SMESH_ParallelMesh_i* mesh):_mesh(mesh) {}
+    void RemoveGroup (const int theGroupID) override { _mesh->removeGroup( theGroupID ); }
+    void HypothesisModified( int hypID,
+                             bool updIcons) override { _mesh->onHypothesisModified( hypID,
+                                                                                    updIcons ); }
+    void Load ()                            override { _mesh->Load(); }
+    bool IsLoaded()                         override { return _mesh->IsLoaded(); }
+    TopoDS_Shape GetShapeByEntry(const std::string& entry) override
+    {
+      GEOM::GEOM_Object_var go = SMESH_Gen_i::GetGeomObjectByEntry( entry );
+      return SMESH_Gen_i::GeomObjectToShape( go );
+    }
+  };
+}
+
+::SMESH_ParallelMesh* SMESH_ParallelMesh_i::DownCast()
+{
+  ::SMESH_ParallelMesh* myImpl = dynamic_cast<::SMESH_ParallelMesh*>(_impl);
+  if (myImpl == NULL)
+    THROW_SALOME_CORBA_EXCEPTION("Could not cast as ParallelMesh", SALOME::INTERNAL_ERROR);
+
+  return myImpl;
+}
+
+//=============================================================================
+/*!
+ * \brief Get the parallellism method
+ */
+//=============================================================================
+
+CORBA::Long SMESH_ParallelMesh_i::GetParallelismMethod(){
+  return DownCast()->GetParallelismMethod();
+}
+
+//=============================================================================
+/*!
+ * \brief Set the parallellism method
+ */
+//=============================================================================
+void SMESH_ParallelMesh_i::SetParallelismMethod(CORBA::Long aMethod){
+  DownCast()->SetParallelismMethod(aMethod);
+}
+
+//=============================================================================
+/*!
+ * \brief Get the parallell dimension
+ */
+//=============================================================================
+
+CORBA::Long SMESH_ParallelMesh_i::GetParallelismDimension(){
+  return DownCast()->GetParallelismDimension();
+}
+
+//=============================================================================
+/*!
+ * \brief Set the parallell dimension
+ */
+//=============================================================================
+void SMESH_ParallelMesh_i::SetParallelismDimension(CORBA::Long aDim){
+  DownCast()->SetParallelismDimension(aDim);
+}
+
+//=============================================================================
+/*!
+ * \brief Get the number of threads for a parallel computation
+ */
+//=============================================================================
+CORBA::Long SMESH_ParallelMesh_i::GetNbThreads(){
+  return DownCast()->GetNbThreads();
+}
+
+//=============================================================================
+/*!
+ * \brief Set the number of threads for a parallel computation
+ */
+//=============================================================================
+void SMESH_ParallelMesh_i::SetNbThreads(CORBA::Long nbThreads){
+  DownCast()->SetNbThreads(nbThreads);
+}
+
+//=============================================================================
+/*!
+ * \brief Get the ressource to connect to
+ */
+//=============================================================================
+char* SMESH_ParallelMesh_i::GetResource(){
+  return CORBA::string_dup(DownCast()->GetResource().c_str());
+}
+
+//=============================================================================
+/*!
+ * \brief Set the ressource to connect to
+ */
+//=============================================================================
+void SMESH_ParallelMesh_i::SetResource(const char* aResource){
+  DownCast()->SetResource(std::string(aResource));
+}
+
+//=============================================================================
+/*!
+ * \brief Get the number of processor to use on ressource
+ */
+//=============================================================================
+CORBA::Long SMESH_ParallelMesh_i::GetNbProc(){
+  return DownCast()->GetNbProc();
+}
+
+//=============================================================================
+/*!
+ * \brief Set the number of processor to use on ressource
+ */
+//=============================================================================
+void SMESH_ParallelMesh_i::SetNbProc(CORBA::Long nbProcs){
+  DownCast()->SetNbProc(nbProcs);
+}
+
+//=============================================================================
+/*!
+ * \brief Get the number of processor per node to use on ressource
+ */
+//=============================================================================
+CORBA::Long SMESH_ParallelMesh_i::GetNbProcPerNode(){
+  return DownCast()->GetNbProcPerNode();
+}
+
+//=============================================================================
+/*!
+ * \brief Set the number of processor per node to use on ressource
+ */
+//=============================================================================
+void SMESH_ParallelMesh_i::SetNbProcPerNode(CORBA::Long nbProcPerNodes){
+  DownCast()->SetNbProcPerNode(nbProcPerNodes);
+}
+
+//=============================================================================
+/*!
+ * \brief Get the number of node to use on ressource
+ */
+//=============================================================================
+CORBA::Long SMESH_ParallelMesh_i::GetNbNode(){
+  return DownCast()->GetNbNode();
+}
+
+//=============================================================================
+/*!
+ * \brief Set the number of node to use on ressource
+ */
+//=============================================================================
+void SMESH_ParallelMesh_i::SetNbNode(CORBA::Long nbNodes){
+  DownCast()->SetNbNode(nbNodes);
+}
+
+//=============================================================================
+/*!
+ * \brief Get the wckey to use on ressource
+ */
+//=============================================================================
+char* SMESH_ParallelMesh_i::GetWcKey(){
+  return CORBA::string_dup(DownCast()->GetWcKey().c_str());
+}
+
+//=============================================================================
+/*!
+ * \brief Set the wckey to use on ressource
+ */
+//=============================================================================
+void SMESH_ParallelMesh_i::SetWcKey(const char* wcKey){
+  DownCast()->SetWcKey(std::string(wcKey));
+}
+
+//=============================================================================
+/*!
+ * \brief Get the walltime to use on ressource
+ */
+//=============================================================================
+char* SMESH_ParallelMesh_i::GetWalltime(){
+  return CORBA::string_dup(DownCast()->GetWalltime().c_str());
+}
+
+//=============================================================================
+/*!
+ * \brief Set the walltime to use on ressource
+ */
+//=============================================================================
+void SMESH_ParallelMesh_i::SetWalltime(const char* walltime){
+  DownCast()->SetWalltime(std::string(walltime));
+}
diff --git a/src/SMESH_I/SMESH_ParallelMesh_i.hxx b/src/SMESH_I/SMESH_ParallelMesh_i.hxx
new file mode 100644 (file)
index 0000000..6613d6b
--- /dev/null
@@ -0,0 +1,84 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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_ParallelMesh_i.hxx
+//  Author : Yoann AUDOUIN, EDF
+//  Module : SMESH
+
+#ifndef _SMESH_PARALLELMESH_I_HXX_
+#define _SMESH_PARALLELMESH_I_HXX_
+
+#include "SMESH.hxx"
+
+#include "SMESH_Hypothesis.hxx"
+#include "SMESH_Mesh_i.hxx"
+#include "SMESH_ParallelMesh.hxx"
+
+#include <SALOME_GenericObj_i.hh>
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_Mesh)
+
+#include <map>
+
+class SMESH_I_EXPORT SMESH_ParallelMesh_i:
+  public virtual POA_SMESH::SMESH_ParallelMesh,
+  public virtual SMESH_Mesh_i
+{
+  SMESH_ParallelMesh_i();
+  SMESH_ParallelMesh_i(const SMESH_ParallelMesh_i&);
+  public:
+  SMESH_ParallelMesh_i( PortableServer::POA_ptr thePOA,
+                        SMESH_Gen_i*            myGen_i ):SMESH_Mesh_i(thePOA, myGen_i){};
+
+  virtual ~SMESH_ParallelMesh_i(){};
+
+  CORBA::Long GetParallelismMethod();
+  void SetParallelismMethod(CORBA::Long aMethod);
+
+  CORBA::Long GetParallelismDimension();
+  void SetParallelismDimension(CORBA::Long aDim);
+
+  CORBA::Long GetNbThreads();
+  void SetNbThreads(CORBA::Long nbThreads);
+
+  char* GetResource();
+  void SetResource(const char* aResource);
+
+  CORBA::Long GetNbProc();
+  void SetNbProc(CORBA::Long nbProcs);
+
+  CORBA::Long GetNbProcPerNode();
+  void SetNbProcPerNode(CORBA::Long nbProcPerNodes);
+
+  CORBA::Long GetNbNode();
+  void SetNbNode(CORBA::Long nbNodes);
+
+  char* GetWcKey();
+  void SetWcKey(const char* wcKey);
+
+  char* GetWalltime();
+  void SetWalltime(const char* walltime);
+
+  private:
+  ::SMESH_ParallelMesh* DownCast();
+};
+
+#endif
index f540e358de4ce12503c1b0b4e6bdcef217cea5bb..dcdf81fa0fb0bc8f1c56b9c93801118ea8302de0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -273,10 +273,10 @@ SMESH::point_array* SMESH_Pattern_i::ApplyTo3DBlock(GEOM::GEOM_Object_ptr theBlo
 //=======================================================================
 
 SMESH::point_array*
-  SMESH_Pattern_i::ApplyToMeshFaces(SMESH::SMESH_Mesh_ptr    theMesh,
-                                    const SMESH::long_array& theFacesIDs,
-                                    CORBA::Long              theNodeIndexOnKeyPoint1,
-                                    CORBA::Boolean           theReverse)
+  SMESH_Pattern_i::ApplyToMeshFaces(SMESH::SMESH_Mesh_ptr        theMesh,
+                                    const SMESH::smIdType_array& theFacesIDs,
+                                    CORBA::Short                 theNodeIndexOnKeyPoint1,
+                                    CORBA::Boolean               theReverse)
 {
   SMESH::point_array_var points = new SMESH::point_array;
 
@@ -288,7 +288,7 @@ SMESH::point_array*
   set<const SMDS_MeshFace*> fset;
   for ( CORBA::ULong i = 0; i < theFacesIDs.length(); i++)
   {
-    CORBA::Long index = theFacesIDs[i];
+    SMESH::smIdType index = theFacesIDs[i];
     const SMDS_MeshElement * elem = aMesh->GetMeshDS()->FindElement(index);
     if ( elem && elem->GetType() == SMDSAbs_Face )
       fset.insert( static_cast<const SMDS_MeshFace *>( elem ));
@@ -332,10 +332,10 @@ SMESH::point_array*
 //=======================================================================
 
 SMESH::point_array*
-  SMESH_Pattern_i::ApplyToHexahedrons(SMESH::SMESH_Mesh_ptr    theMesh,
-                                      const SMESH::long_array& theVolumesIDs,
-                                      CORBA::Long              theNode000Index,
-                                      CORBA::Long              theNode001Index)
+  SMESH_Pattern_i::ApplyToHexahedrons(SMESH::SMESH_Mesh_ptr        theMesh,
+                                      const SMESH::smIdType_array& theVolumesIDs,
+                                      CORBA::Short                 theNode000Index,
+                                      CORBA::Short                 theNode001Index)
 {
   SMESH::point_array_var points = new SMESH::point_array;
 
@@ -347,7 +347,7 @@ SMESH::point_array*
   set<const SMDS_MeshVolume*> vset;
   for ( CORBA::ULong i = 0; i < theVolumesIDs.length(); i++)
   {
-    CORBA::Long index = theVolumesIDs[i];
+    SMESH::smIdType index = theVolumesIDs[i];
     const SMDS_MeshElement * elem = aMesh->GetMeshDS()->FindElement(index);
     if ( elem && elem->GetType() == SMDSAbs_Volume && elem->NbNodes() == 8 )
       vset.insert( static_cast<const SMDS_MeshVolume *>( elem ));
@@ -389,7 +389,7 @@ CORBA::Boolean SMESH_Pattern_i::MakeMesh (SMESH::SMESH_Mesh_ptr theMesh,
                 << CreatePolygons << ", " << CreatePolyedrs << " )";
   addErrorCode( "MakeMesh" );
 
-  int nb = aMesh->NbNodes() + aMesh->NbEdges() + aMesh->NbFaces() + aMesh->NbVolumes();
+  smIdType nb = aMesh->NbNodes() + aMesh->NbEdges() + aMesh->NbFaces() + aMesh->NbVolumes();
 
   bool res = myPattern.MakeMesh( aMesh, CreatePolygons, CreatePolyedrs );
 
index 7ab6c96830cb79dcd1cf4e747789a931b0e7132f..21b27d1bbe2c12310dfc3e582b004927e16e0a96 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -66,15 +66,15 @@ class SMESH_I_EXPORT SMESH_Pattern_i:
                                      GEOM::GEOM_Object_ptr theVertex000,
                                      GEOM::GEOM_Object_ptr theVertex001);
 
-  SMESH::point_array* ApplyToMeshFaces(SMESH::SMESH_Mesh_ptr    theMesh,
-                                       const SMESH::long_array& theFacesIDs,
-                                       CORBA::Long              theNodeIndexOnKeyPoint1,
-                                       CORBA::Boolean           theReverse);
+  SMESH::point_array* ApplyToMeshFaces(SMESH::SMESH_Mesh_ptr        theMesh,
+                                       const SMESH::smIdType_array& theFacesIDs,
+                                       CORBA::Short                 theNodeIndexOnKeyPoint1,
+                                       CORBA::Boolean               theReverse);
 
-  SMESH::point_array* ApplyToHexahedrons(SMESH::SMESH_Mesh_ptr    theMesh,
-                                         const SMESH::long_array& theVolumesIDs,
-                                         CORBA::Long              theNode000Index,
-                                         CORBA::Long              theNode001Index);
+  SMESH::point_array* ApplyToHexahedrons(SMESH::SMESH_Mesh_ptr        theMesh,
+                                         const SMESH::smIdType_array& theVolumesIDs,
+                                         CORBA::Short                 theNode000Index,
+                                         CORBA::Short                 theNode001Index);
 
   //for omniORB conflict compilation
   /*CORBA::Boolean MakeMesh (SMESH::SMESH_Mesh_ptr theMesh,
index 7514ad21580bf1dd2b3a451346aa63836cea69a9..2089462109aec6a2a3cf9a3d5a4c2b344d2c711e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -53,6 +53,8 @@
 
 #include "SMESH_TryCatch.hxx"
 
+#include <memory>
+
 #include CORBA_SERVER_HEADER(SALOME_Session)
 
 using namespace std;
@@ -242,9 +244,9 @@ namespace
    */
   //================================================================================
 
-  void meshInfo2hdf( SMESH::long_array_var meshInfo,
-                     const std::string&    name,
-                     HDFgroup*             hdfGroup)
+  void meshInfo2hdf( SMESH::smIdType_array_var meshInfo,
+                     const std::string&        name,
+                     HDFgroup*                 hdfGroup)
   {
     // we use med identification of element (MED::EGeometrieElement) types
     // but not enum SMDSAbs_EntityType because values of SMDSAbs_EntityType may
@@ -262,8 +264,8 @@ namespace
 
     if ( !data.empty() )
     {
-      hdf_size datasetSize[] = { data.size() };
-      HDFarray* anArray = new HDFarray(0, HDF_INT32, 1, datasetSize);
+      hdf_size *datasetSize = new hdf_size[1]; datasetSize[0] = data.size();
+      std::unique_ptr<HDFarray> anArray( new HDFarray(0, HDF_INT32, 1, datasetSize) );
       anArray->CreateOnDisk();
       datasetSize[0] = 1;
       HDFdataset* dataset = new HDFdataset( name.c_str(), hdfGroup, HDF_ARRAY, datasetSize, 1 );
@@ -924,9 +926,9 @@ 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 ( elemSet.size() < nbElems ) {
-#ifdef _DEBUG_
-            cout << "SMESH_Gen_i::Load(), warning: Node position data is invalid" << endl;
-#endif
+            if (SALOME::VerbosityActivated())
+              cout << "SMESH_Gen_i::Load(), warning: Node position data is invalid" << endl;
+
             nbElems = elemSet.size();
           }
           // add elements to sub-meshes
@@ -1198,9 +1200,9 @@ SMESH::array_of_ElementType* SMESH_PreMeshInfo::GetTypes() const
  */
 //================================================================================
 
-SMESH::long_array* SMESH_PreMeshInfo::GetMeshInfo() const
+SMESH::smIdType_array* SMESH_PreMeshInfo::GetMeshInfo() const
 {
-  SMESH::long_array_var aRes = new SMESH::long_array();
+  SMESH::smIdType_array_var aRes = new SMESH::smIdType_array();
   aRes->length(SMESH::Entity_Last);
   for (int i = SMESH::Entity_Node; i < SMESH::Entity_Last; i++)
     aRes[i] = 0;
@@ -1233,7 +1235,7 @@ void SMESH_PreMeshInfo::RemoveStudyFiles_TMP_METHOD(SALOMEDS::SComponent_ptr sme
 {
   if ( theMeshCounter > 0 )
   {
-    SALOMEDS::ChildIterator_wrap itBig = SMESH_Gen_i::getStudyServant()->NewChildIterator( smeshComp );
+    SALOMEDS::ChildIterator_wrap itBig = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->NewChildIterator( smeshComp );
     for ( ; itBig->More(); itBig->Next() ) {
       SALOMEDS::SObject_wrap gotBranch = itBig->Value();
       CORBA::Object_var       anObject = SMESH_Gen_i::SObjectToObject( gotBranch );
index b27b965fa2898451d639f50e123b8d4f00adaed0..61fb3735112e86039f02a20f3ed3691a59807f71 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -80,7 +80,7 @@ public:
 
   // meshods of SMESH_IDSource interface
   SMESH::array_of_ElementType* GetTypes() const;
-  SMESH::long_array*           GetMeshInfo() const;
+  SMESH::smIdType_array*       GetMeshInfo() const;
   bool                         IsMeshInfoCorrect() const;
 
   ~SMESH_PreMeshInfo();
index 3ecff618477b9bb3f43b2cc468048125bb85bbff..a07d95377541553de0a6f8d8a0ab397c24008872 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 
 #include <cstring>
 
-#ifdef _DEBUG_
-static int MYDEBUG = 0;
-#else
-static int MYDEBUG = 0;
-#endif
-
 #include "SMESH_TryCatch.hxx"
 
 namespace SMESH
@@ -60,17 +54,22 @@ namespace SMESH
   size_t TPythonDump::myCounter = 0;
   const char theNotPublishedObjectName[] = "__NOT__Published__Object__";
 
-  TVar::TVar(CORBA::Double value):myVals(1), myIsList(false) { myVals[0] = SMESH_Comment(value); }
-  TVar::TVar(CORBA::Long   value):myVals(1), myIsList(false) { myVals[0] = SMESH_Comment(value); }
-  TVar::TVar(CORBA::Short  value):myVals(1), myIsList(false) { myVals[0] = SMESH_Comment(value); }
+  TVar::TVar(CORBA::Double   value):myVals(1), myIsList(false) { myVals[0] = SMESH_Comment(value); }
+  TVar::TVar(CORBA::Long     value):myVals(1), myIsList(false) { myVals[0] = SMESH_Comment(value); }
+  TVar::TVar(CORBA::LongLong value):myVals(1), myIsList(false) { myVals[0] = SMESH_Comment(value); }
+  TVar::TVar(CORBA::Short    value):myVals(1), myIsList(false) { myVals[0] = SMESH_Comment(value); }
   TVar::TVar(const SMESH::double_array& value):myVals(value.length()), myIsList(true)
   {
     for ( size_t i = 0; i < value.length(); i++)
       myVals[i] = SMESH_Comment(value[i]);
   }
+  
+  TPythonDump::TPythonDump():myVarsCounter(0),mySmesh(SMESH_Gen_i::GetSMESHGen())
+  {
+    ++myCounter;
+  }
 
-  TPythonDump::
-  TPythonDump():myVarsCounter(0)
+  TPythonDump::TPythonDump(SMESH_Gen_i *smesh):myVarsCounter(0),mySmesh(smesh)
   {
     ++myCounter;
   }
@@ -87,7 +86,7 @@ namespace SMESH
         if ( !objEntry.empty() )
           aCollection += (TVar::ObjPrefix() + objEntry ).c_str();
         aSMESHGen->AddToPythonScript(aCollection);
-        if(MYDEBUG) MESSAGE(aString);
+        MESSAGE(aString);
         // prevent misuse of already treated variables
         aSMESHGen->UpdateParameters(CORBA::Object_var().in(),"");
       }
@@ -139,6 +138,13 @@ namespace SMESH
     return *this;
   }
 
+  TPythonDump&
+  TPythonDump::
+  operator<<(long long theArg){
+    myStream<<theArg;
+    return *this;
+  }
+
   TPythonDump&
   TPythonDump::
   operator<<(double theArg){
@@ -258,6 +264,13 @@ namespace SMESH
     return *this;
   }
 
+  TPythonDump&
+  TPythonDump::operator<<(const SMESH::smIdType_array& theArg)
+  {
+    DumpArray( theArg, *this );
+    return *this;
+  }
+
   TPythonDump&
   TPythonDump::operator<<(const SMESH::double_array& theArg)
   {
@@ -304,7 +317,7 @@ namespace SMESH
   operator<<(CORBA::Object_ptr theArg)
   {
     SMESH_Gen_i*          aSMESHGen = SMESH_Gen_i::GetSMESHGen();
-    SALOMEDS::SObject_wrap aSObject = SMESH_Gen_i::ObjectToSObject(theArg);
+    SALOMEDS::SObject_wrap aSObject = mySmesh->ObjectToSObject(theArg);
     if(!aSObject->_is_nil()) {
       CORBA::String_var id = aSObject->GetID();
       myStream << id;
@@ -323,7 +336,7 @@ namespace SMESH
   TPythonDump::
   operator<<(SMESH::SMESH_Hypothesis_ptr theArg)
   {
-    SALOMEDS::SObject_wrap aSObject = SMESH_Gen_i::ObjectToSObject(theArg);
+    SALOMEDS::SObject_wrap aSObject = mySmesh->ObjectToSObject(theArg);
     if(aSObject->_is_nil() && !CORBA::is_nil(theArg))
       myStream << "hyp_" << theArg->GetId();
     else
@@ -337,7 +350,7 @@ namespace SMESH
   {
     if ( CORBA::is_nil( theArg ) )
       return *this << "None";
-    SALOMEDS::SObject_wrap aSObject = SMESH_Gen_i::ObjectToSObject(theArg);
+    SALOMEDS::SObject_wrap aSObject = mySmesh->ObjectToSObject(theArg);
     if(!aSObject->_is_nil())
     {
       return *this << aSObject;
@@ -348,11 +361,12 @@ namespace SMESH
     }
     if ( SMESH_MeshEditor_i::IsTemporaryIDSource( theArg ))
     {
-      SMESH::SMESH_Mesh_var            mesh = theArg->GetMesh();
-      SMESH::long_array_var    anElementsId = theArg->GetIDs();
-      SMESH::array_of_ElementType_var types = theArg->GetTypes();
-      SMESH::ElementType               type = types->length() ? types[0] : SMESH::ALL;
-      SALOMEDS::SObject_wrap         meshSO = SMESH_Gen_i::ObjectToSObject(mesh);
+      SMESH::SMESH_Mesh_var             mesh = theArg->GetMesh();
+      SMESH::smIdType_array_var anElementsId = theArg->GetIDs();
+      SMESH::array_of_ElementType_var  types = theArg->GetTypes();
+      SMESH::ElementType                type = types->length() ? types[0] : SMESH::ALL;
+      SALOMEDS::SObject_wrap          meshSO = mySmesh->ObjectToSObject(mesh);
+
       if ( meshSO->_is_nil() ) // don't waste memory for dumping not published objects
         return *this << mesh << ".GetIDSource([], " << type << ")";
       else
@@ -395,11 +409,13 @@ namespace SMESH
       case FT_AspectRatio:           myStream<< "aAspectRatio";           break;
       case FT_AspectRatio3D:         myStream<< "aAspectRatio3D";         break;
       case FT_Warping:               myStream<< "aWarping";               break;
+      case FT_Warping3D:             myStream<< "aWarping3D";             break;
       case FT_MinimumAngle:          myStream<< "aMinimumAngle";          break;
       case FT_Taper:                 myStream<< "aTaper";                 break;
       case FT_Skew:                  myStream<< "aSkew";                  break;
       case FT_Area:                  myStream<< "aArea";                  break;
       case FT_Volume3D:              myStream<< "aVolume3D";              break;
+      case FT_ScaledJacobian:        myStream<< "aScaledJacobian";        break;
       case FT_MaxElementLength2D:    myStream<< "aMaxElementLength2D";    break;
       case FT_MaxElementLength3D:    myStream<< "aMaxElementLength3D";    break;
       case FT_FreeBorders:           myStream<< "aFreeBorders";           break;
@@ -673,11 +689,8 @@ namespace SMESH
 
   void printException( const char* text )
   {
-#ifdef _DEBUG_
-    std::cout << "Exception in SMESH_Gen_i::DumpPython(): " << text << std::endl;
-#else
-    (void)text; // unused in release mode
-#endif
+    if (SALOME::VerbosityActivated())
+      std::cout << "Exception in SMESH_Gen_i::DumpPython(): " << text << std::endl;
   }
 
 //=======================================================================
index 1025f4cf85381d3490eb986d46e8d0a4f416f58b..803c15052eb6579eb0820091b1788aff25316bbc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -99,9 +99,10 @@ namespace SMESH
   {
     std::vector< std::string > myVals;
     bool                       myIsList;
-    TVar(CORBA::Double value);
-    TVar(CORBA::Long   value);
-    TVar(CORBA::Short  value);
+    TVar(CORBA::Double   value);
+    TVar(CORBA::Long     value);
+    TVar(CORBA::LongLong value);
+    TVar(CORBA::Short    value);
     TVar(const SMESH::double_array& value);
     // string used to temporary quote variable names in order
     // not to confuse variables with string arguments
@@ -121,7 +122,9 @@ namespace SMESH
     std::ostringstream myStream;
     static size_t      myCounter;
     int                myVarsCounter; // counts stored TVar's
+    SMESH_Gen_i       *mySmesh = nullptr;
   public:
+    TPythonDump(SMESH_Gen_i *smesh);
     TPythonDump();
     virtual ~TPythonDump();
 
@@ -134,6 +137,9 @@ namespace SMESH
     TPythonDump&
     operator<<(int theArg);
 
+    TPythonDump&
+    operator<<(long long theArg);
+
     TPythonDump&
     operator<<(double theArg);
 
@@ -158,6 +164,9 @@ namespace SMESH
     TPythonDump&
     operator<<(const SMESH::long_array& theArg);
 
+    TPythonDump&
+    operator<<(const SMESH::smIdType_array& theArg);
+
     TPythonDump&
     operator<<(const SMESH::double_array& theArg);
 
diff --git a/src/SMESH_I/SMESH_SequentialMesh_i.hxx b/src/SMESH_I/SMESH_SequentialMesh_i.hxx
new file mode 100644 (file)
index 0000000..a4a6569
--- /dev/null
@@ -0,0 +1,50 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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_SequentialMesh_i.hxx
+//  Author : Yoann AUDOUIN, EDF
+//  Module : SMESH
+
+#ifndef _SMESH_SEQUENTIALMESH_I_HXX_
+#define _SMESH_SEQUENTIALMESH_I_HXX_
+
+#include "SMESH.hxx"
+
+#include "SMESH_SequentialMesh.hxx"
+#include "SMESH_Mesh_i.hxx"
+#include "SMESH_Gen_i.hxx"
+
+#include <SALOME_GenericObj_i.hh>
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_Mesh)
+
+class SMESH_I_EXPORT SMESH_SequentialMesh_i:
+  public virtual POA_SMESH::SMESH_SequentialMesh,
+  public virtual SMESH_Mesh_i
+{
+  SMESH_SequentialMesh_i( PortableServer::POA_ptr thePOA,
+                          SMESH_Gen_i*            myGen_i ):SMESH_Mesh_i(thePOA, myGen_i){};
+
+  virtual ~SMESH_SequentialMesh_i(){};
+
+};
+
+#endif
index 5982ff089b339981cff994dd71183106d91d0dae..f5a74eb67469dfb4d4c8e890a35e6739e4772069 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -140,7 +140,7 @@ bool getSubMeshes(::SMESH_subMesh*  theSubMesh,
  */
 //=============================================================================
 
-CORBA::Long SMESH_subMesh_i::GetNumberOfElements()
+SMESH::smIdType SMESH_subMesh_i::GetNumberOfElements()
 {
   Unexpect aCatch(SALOME_SalomeException);
 
@@ -152,7 +152,7 @@ CORBA::Long SMESH_subMesh_i::GetNumberOfElements()
 
   ::SMESH_subMesh* aSubMesh = _mesh_i->_mapSubMesh[_localId];
 
-  int nbElems = 0;
+  SMESH::smIdType nbElems = 0;
 
   TListOfSubMeshes smList;
   if ( getSubMeshes( aSubMesh, smList ))
@@ -170,7 +170,7 @@ CORBA::Long SMESH_subMesh_i::GetNumberOfElements()
  */
 //=============================================================================
 
-CORBA::Long SMESH_subMesh_i::GetNumberOfNodes(CORBA::Boolean all)
+SMESH::smIdType SMESH_subMesh_i::GetNumberOfNodes(CORBA::Boolean all)
 {
   Unexpect aCatch(SALOME_SalomeException);
 
@@ -197,7 +197,7 @@ CORBA::Long SMESH_subMesh_i::GetNumberOfNodes(CORBA::Boolean all)
   }
   if ( all ) // get nodes from aSubMesh and all child sub-meshes
   {
-    int nbNodes = 0;
+    SMESH::smIdType nbNodes = 0;
     SMESH_subMeshIteratorPtr smIt = aSubMesh->getDependsOnIterator( /*includeSelf=*/true );
     while ( smIt->more() )
     {
@@ -217,11 +217,11 @@ CORBA::Long SMESH_subMesh_i::GetNumberOfNodes(CORBA::Boolean all)
  */
 //=============================================================================
 
-SMESH::long_array* SMESH_subMesh_i::GetElementsId()
+SMESH::smIdType_array* SMESH_subMesh_i::GetElementsId()
 {
   Unexpect aCatch(SALOME_SalomeException);
 
-  SMESH::long_array_var aResult = new SMESH::long_array();
+  SMESH::smIdType_array_var aResult = new SMESH::smIdType_array();
 
   if ( _mesh_i->_mapSubMesh.find( _localId ) == _mesh_i->_mapSubMesh.end() )
     return aResult._retn();
@@ -231,7 +231,7 @@ SMESH::long_array* SMESH_subMesh_i::GetElementsId()
 
   ::SMESH_subMesh* aSubMesh = _mesh_i->_mapSubMesh[_localId];
 
-  int nbElems = 0;
+  SMESH::smIdType nbElems = 0;
   TListOfSubMeshes smList;
   if ( getSubMeshes( aSubMesh, smList ))
   {
@@ -261,11 +261,11 @@ SMESH::long_array* SMESH_subMesh_i::GetElementsId()
  */
 //=============================================================================
 
-SMESH::long_array* SMESH_subMesh_i::GetElementsByType( SMESH::ElementType theElemType )
+SMESH::smIdType_array* SMESH_subMesh_i::GetElementsByType( SMESH::ElementType theElemType )
 {
   Unexpect aCatch(SALOME_SalomeException);
 
-  SMESH::long_array_var aResult = new SMESH::long_array();
+  SMESH::smIdType_array_var aResult = new SMESH::smIdType_array();
 
   if ( _mesh_i->_mapSubMesh.find( _localId ) == _mesh_i->_mapSubMesh.end() )
     return aResult._retn();
@@ -276,8 +276,8 @@ SMESH::long_array* SMESH_subMesh_i::GetElementsByType( SMESH::ElementType theEle
   ::SMESH_subMesh* aSubMesh = _mesh_i->_mapSubMesh[_localId];
 
   // PAL5440, return all nodes belonging to elements of the sub-mesh
-  set<int> nodeIds;
-  int nbElems = 0;
+  set<smIdType> nodeIds;
+  smIdType nbElems = 0;
 
   // volumes may be bound to shell instead of solid
   TListOfSubMeshes smList;
@@ -317,7 +317,7 @@ SMESH::long_array* SMESH_subMesh_i::GetElementsByType( SMESH::ElementType theEle
   int i = 0, n = aResult->length();
 
   if ( theElemType == SMESH::NODE && !nodeIds.empty() ) {
-    set<int>::iterator idIt = nodeIds.begin();
+    set<smIdType>::iterator idIt = nodeIds.begin();
     for ( ; i < n && idIt != nodeIds.end() ; i++, idIt++ )
       aResult[i] = *idIt;
   }
@@ -346,11 +346,11 @@ SMESH::long_array* SMESH_subMesh_i::GetElementsByType( SMESH::ElementType theEle
  */
 //=============================================================================
   
-SMESH::long_array* SMESH_subMesh_i::GetNodesId()
+SMESH::smIdType_array* SMESH_subMesh_i::GetNodesId()
 {
   Unexpect aCatch(SALOME_SalomeException);
 
-  SMESH::long_array_var aResult = GetElementsByType( SMESH::NODE );
+  SMESH::smIdType_array_var aResult = GetElementsByType( SMESH::NODE );
   return aResult._retn();
 }
 
@@ -358,7 +358,7 @@ SMESH::long_array* SMESH_subMesh_i::GetNodesId()
 /*!
  *  
  */
-//=============================================================================
+//========error:=====================================================================
   
 SMESH::SMESH_Mesh_ptr SMESH_subMesh_i::GetFather()
 {
@@ -410,7 +410,7 @@ GEOM::GEOM_Object_ptr SMESH_subMesh_i::GetSubShape()
  *  
  */
 //=============================================================================
-SMESH::long_array* SMESH_subMesh_i::GetIDs()
+SMESH::smIdType_array* SMESH_subMesh_i::GetIDs()
 {
   return GetElementsId();
 }
@@ -420,7 +420,7 @@ SMESH::long_array* SMESH_subMesh_i::GetIDs()
  *
  */
 //=============================================================================
-SMESH::ElementType SMESH_subMesh_i::GetElementType( const CORBA::Long id, const bool iselem )
+SMESH::ElementType SMESH_subMesh_i::GetElementType( const SMESH::smIdType id, const bool iselem )
 {
   if ( _preMeshInfo )
     _preMeshInfo->FullLoadFromFile();
@@ -434,12 +434,12 @@ SMESH::ElementType SMESH_subMesh_i::GetElementType( const CORBA::Long id, const
  */
 //=============================================================================
 
-SMESH::long_array* SMESH_subMesh_i::GetMeshInfo()
+SMESH::smIdType_array* SMESH_subMesh_i::GetMeshInfo()
 {
   if ( _preMeshInfo )
     return _preMeshInfo->GetMeshInfo();
 
-  SMESH::long_array_var aRes = new SMESH::long_array();
+  SMESH::smIdType_array_var aRes = new SMESH::smIdType_array();
   aRes->length(SMESH::Entity_Last);
   for (int i = SMESH::Entity_Node; i < SMESH::Entity_Last; i++)
     aRes[i] = 0;
@@ -464,9 +464,9 @@ SMESH::long_array* SMESH_subMesh_i::GetMeshInfo()
  */
 //=======================================================================
 
-SMESH::long_array* SMESH_subMesh_i::GetNbElementsByType()
+SMESH::smIdType_array* SMESH_subMesh_i::GetNbElementsByType()
 {
-  SMESH::long_array_var aRes = new SMESH::long_array();
+  SMESH::smIdType_array_var aRes = new SMESH::smIdType_array();
   aRes->length(SMESH::NB_ELEMENT_TYPES);
   for (int i = 0; i < SMESH::NB_ELEMENT_TYPES; i++)
     if ( _preMeshInfo )
index 97c940b996ce1551b3cce122c72ead5e0ea2b92e..1db9a2fabdb861eece70e9637427ec0581b02eeb 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -53,17 +53,17 @@ public:
                    int                     localId );
   ~SMESH_subMesh_i();
 
-  CORBA::Long GetNumberOfElements();
+  SMESH::smIdType GetNumberOfElements();
   
-  CORBA::Long  GetNumberOfNodes( CORBA::Boolean all );
+  SMESH::smIdType  GetNumberOfNodes( CORBA::Boolean all );
   
-  SMESH::long_array* GetElementsId();
+  SMESH::smIdType_array* GetElementsId();
 
-  SMESH::long_array* GetElementsByType( SMESH::ElementType theElemType );
+  SMESH::smIdType_array* GetElementsByType( SMESH::ElementType theElemType );
   
-  SMESH::ElementType GetElementType( CORBA::Long id, bool iselem );
+  SMESH::ElementType GetElementType( SMESH::smIdType id, bool iselem );
   
-  SMESH::long_array* GetNodesId();
+  SMESH::smIdType_array* GetNodesId();
   
   SMESH::SMESH_Mesh_ptr GetFather();
   
@@ -78,17 +78,17 @@ public:
   /*!
    * Returns a sequence of all element IDs
    */
-  virtual SMESH::long_array* GetIDs();
+  virtual SMESH::smIdType_array* GetIDs();
   /*!
    * Returns number of mesh elements of each \a EntityType
    * Result array of number of elements per \a EntityType
    * Inherited from SMESH_IDSource
    */
-  virtual SMESH::long_array* GetMeshInfo();
+  virtual SMESH::smIdType_array* GetMeshInfo();
   /*!
    * Returns number of mesh elements of each \a ElementType
    */
-  virtual SMESH::long_array* GetNbElementsByType();
+  virtual SMESH::smIdType_array* GetNbElementsByType();
   /*!
    * Returns types of elements it contains
    */
index 169e7bde4959906b3e97c351abae7fbb195fee19..b86ea9073380efb3818ae5d0ae073253d392b5dd 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
 
 # scripts / static
 SET(_bin_SCRIPTS
-  __init__.py
   smeshstudytools.py
 )
 
 # --- rules ---
 
-SALOME_INSTALL_SCRIPTS("${_bin_SCRIPTS}" ${SALOME_INSTALL_PYTHON}/salome/smesh)
\ No newline at end of file
+SALOME_INSTALL_SCRIPTS("${_bin_SCRIPTS}" ${SALOME_INSTALL_PYTHON}/salome/smesh)
+SALOME_CONFIGURE_FILE(__init__.py __init__.py INSTALL ${SALOME_INSTALL_PYTHON}/salome/smesh)
index 5406b7250f083b4317b666742744b31874f98875..13238df418da9810c43e63fbcf3c6a5e82746a3e 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: iso-8859-1 -*-
-# Copyright (C) 2010-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2010-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -18,3 +18,4 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
+__version__ = "@SALOMESMESH_GIT_SHA1@"
index f5dd2b3a28443cda5efc6be4b15f4cf51a6cecab..53b58b4c2bea3761e514c94275ef98ff67b5ee28 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 #
-# Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -203,6 +203,8 @@ def TEST_createBoxMesh():
     Hexa_3D = smesh.CreateHypothesis('Hexa_3D')
     status = boxmesh.AddHypothesis(Hexa_3D)
     isDone = boxmesh.Compute()
+    if not isDone:
+      raise Exception("Error when computing Mesh")
 
     smesh.SetName(boxmesh.GetMesh(), 'boxmesh')
     if salome.sg.hasDesktop():
index becd38840d877acd9622ce0ee9c9b454a779de64..05c253a042b960797795500c2185707b2e52fdee 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # 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
 #
 
-# --- scripts ---
+include(${SWIG_USE_FILE})
 
-# scripts / static
-SET(_bin_SCRIPTS
-  ex00_all.py
-  ex01_cube2build.py
-  ex02_cube2primitive.py
-  ex03_cube2partition.py
-  ex04_cube5tetraHexa.py
-  ex05_hole1build.py
-  ex06_hole1boolean.py
-  ex07_hole1partition.py
-  ex08_hole2build.py
-  ex09_grid4build.py
-  ex10_grid4geometry.py
-  ex11_grid3partition.py
-  ex12_grid17partition.py
-  ex13_hole1partial.py
-  ex14_cyl1holed.py
-  ex15_cyl2geometry.py
-  ex16_cyl2complementary.py
-  ex17_dome1.py
-  ex18_dome2.py
-  ex19_sphereINcube.py
-  ex21_lamp.py
-  ex24_cylinder.py
-  ex29_refine.py
-  ex30_tepal.py
-  ex30_groupsOp.py
-  ex31_dimGroup.py
-  SMESH_test.py
-  SMESH_test0.py
-  SMESH_test1.py
-  SMESH_test1_AndDisplay.py
-  SMESH_test2.py
-  SMESH_test3.py
-  SMESH_test4.py
-  SMESH_test5.py
-  SMESH_mechanic.py
-  SMESH_mechanic_tetra.py
-  SMESH_mechanic_editor.py
-  SMESH_mechanic_netgen.py
-  SMESH_fixation.py
-  SMESH_fixation_hexa.py
-  SMESH_fixation_tetra.py
-  SMESH_fixation_netgen.py
-  SMESH_box_tetra.py
-  SMESH_box2_tetra.py
-  SMESH_box3_tetra.py
-  SMESH_flight_skin.py
-  SMESH_Partition1_tetra.py
-  SMESH_controls.py
-  SMESH_freebord.py
-  SMESH_blocks.py
-  SMESH_BelongToGeom.py
-  SMESH_GroupFromGeom2.py
-  SMESH_box.py
-  SMESH_demo_hexa2_upd.py
-  SMESH_hexaedre.py
-  SMESH_Sphere.py
-  SMESH_GroupFromGeom.py
-  SMESH_Nut.py
-  SMESH_GroupLyingOnGeom.py
-  SMESH_AdvancedEditor.py
-  SMESH_BuildCompound.py
-  PAL_MESH_041_mesh.py
-  PAL_MESH_043_2D.py
-  PAL_MESH_043_3D.py
-  SMESH_reg.py
-  smesh_selection.py
-  YACS_geomesh0.py
+include_directories(
+  ${PROJECT_SOURCE_DIR}/src/SMESHDS
+  ${PROJECT_SOURCE_DIR}/src/SMESHUtils
+  ${PROJECT_SOURCE_DIR}/src/SMDS
+  ${PROJECT_SOURCE_DIR}/src/SMESH
+  ${PROJECT_SOURCE_DIR}/src/SMESH_I
+  ${PROJECT_SOURCE_DIR}/src/Driver
+  ${PROJECT_SOURCE_DIR}/src/DriverGMF
+  ${CMAKE_CURRENT_SOURCE_DIR}
+  ${PROJECT_BINARY_DIR}/idl
 )
 
+# scripts / static
+
 SET(smesh_SCRIPTS
   smeshBuilder.py
   smesh_algorithm.py
+  smesh_selection.py
+  smesh_tools.py
+)
+
+SET(smesh_exe_SCRIPTS
+  mesher_launcher.py
+  send_files.py
 )
 
 SET(StdMeshers_SCRIPTS
   __init__.py
   StdMeshersBuilder.py
 )
+
+# additional preprocessor / compiler flags
+ADD_DEFINITIONS(${OMNIORB_DEFINITIONS})
+SET(SMeshHelper_HEADERS SMeshHelper.h SMeshHelper.i)
+SET(SMeshHelper_SOURCES SMeshHelper.cxx ${SMeshHelper_HEADERS})
+SET_SOURCE_FILES_PROPERTIES(SMeshHelper.i PROPERTIES CPLUSPLUS ON)
+SET_SOURCE_FILES_PROPERTIES(SMeshHelper.i PROPERTIES SWIG_FLAGS "-py3")
+SET_SOURCE_FILES_PROPERTIES(SMeshHelper_wrap.cpp PROPERTIES COMPILE_FLAGS "-DHAVE_CONFIG_H")
+SET(_swig_SCRIPTS ${CMAKE_CURRENT_BINARY_DIR}/SMeshHelper.py )
+IF(${CMAKE_VERSION} VERSION_LESS "3.8.0")
+  SWIG_ADD_MODULE(SMeshHelper python ${SMeshHelper_SOURCES})
+ELSE()
+  SWIG_ADD_LIBRARY(SMeshHelper LANGUAGE python SOURCES ${SMeshHelper_SOURCES})
+ENDIF()
+SWIG_LINK_LIBRARIES(SMeshHelper ${PYTHON_LIBRARIES} ${PLATFORM_LIBS} SMESHEngine MeshDriverGMF )
+SWIG_CHECK_GENERATION(SMeshHelper)
+IF(WIN32)
+  SET_TARGET_PROPERTIES(_SMeshHelper PROPERTIES DEBUG_OUTPUT_NAME _SMeshHelper_d)
+ENDIF(WIN32)
+install(TARGETS _SMeshHelper DESTINATION ${SALOME_INSTALL_LIBS})
+install(FILES ${SMeshHelper_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS})
+SALOME_INSTALL_SCRIPTS("${_swig_SCRIPTS}"  ${SALOME_INSTALL_BINS} EXTRA_DPYS "${SWIG_MODULE_SMeshHelper_REAL_NAME}")
+SALOME_INSTALL_SCRIPTS("${smesh_exe_SCRIPTS}"  ${SALOME_INSTALL_BINS})
+
 # --- rules ---
-SALOME_INSTALL_SCRIPTS("${_bin_SCRIPTS}" ${SALOME_INSTALL_PYTHON} DEF_PERMS)
 SALOME_INSTALL_SCRIPTS("${smesh_SCRIPTS}" ${SALOME_INSTALL_PYTHON}/salome/smesh DEF_PERMS)
 SALOME_INSTALL_SCRIPTS("${StdMeshers_SCRIPTS}" ${SALOME_INSTALL_PYTHON}/salome/StdMeshers DEF_PERMS)
-SALOME_INSTALL_SCRIPTS(SMESH_shared_modules.py ${SALOME_INSTALL_PYTHON}/shared_modules DEF_PERMS)
diff --git a/src/SMESH_SWIG/PAL_MESH_041_mesh.py b/src/SMESH_SWIG/PAL_MESH_041_mesh.py
deleted file mode 100644 (file)
index cbf5e5c..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-
-#-----------------------------GEOM----------------------------------------
-
-#----------Vertexes------------
-p1 = geompy.MakeVertex(20.0,30.0,40.0)
-p2 = geompy.MakeVertex(90.0,80.0,0.0)
-p3 = geompy.MakeVertex(30.0,80.0,200.0)
-
-#----------Edges---------------
-e1 = geompy.MakeEdge(p1,p2)
-e2 = geompy.MakeEdge(p2,p3)
-e3 = geompy.MakeEdge(p3,p1)
-
-#----------Wire----------------
-ListOfEdges = []
-ListOfEdges.append(e3)
-ListOfEdges.append(e2)
-ListOfEdges.append(e1)
-wire1 = geompy.MakeWire(ListOfEdges)
-
-
-#----------Face----------------
-WantPlanarFace = 1
-face1 = geompy.MakeFace(wire1,WantPlanarFace)
-
-Id_face1 = geompy.addToStudy(face1,"Face1")
-
-
-
-#-----------------------------SMESH-------------------------------------------
-
-# -- Init mesh --
-plane_mesh = salome.IDToObject( Id_face1)
-
-mesh = smesh.Mesh(plane_mesh, "Mesh_1")
-
-print("---------------------Hypothesis and Algorithms")
-
-#---------------- NumberOfSegments
-
-numberOfSegment = 9
-
-algoWireDes = mesh.Segment()
-listHyp = algoWireDes.GetCompatibleHypothesis()
-print(algoWireDes.GetName())
-algoWireDes.SetName("Ware descritisation")
-
-hypNbSeg = algoWireDes.NumberOfSegments(numberOfSegment)
-print(hypNbSeg.GetName())
-print(hypNbSeg.GetNumberOfSegments())
-smesh.SetName(hypNbSeg, "Nb. Segments")
-
-
-#--------------------------Max. Element Area
-maxElementArea = 200
-
-algoMef = mesh.Triangle()
-listHyp = algoMef.GetCompatibleHypothesis()
-print(algoMef.GetName())
-algoMef.SetName("Triangle (Mefisto)")
-
-hypArea200 = algoMef.MaxElementArea(maxElementArea)
-print(hypArea200.GetName())
-print(hypArea200.GetMaxElementArea())
-smesh.SetName(hypArea200, "Max. Element Area")
-
-
-print("---------------------Compute the mesh")
-
-ret = mesh.Compute()
-print(ret)
-
-salome.sg.updateObjBrowser()
-
diff --git a/src/SMESH_SWIG/PAL_MESH_043_2D.py b/src/SMESH_SWIG/PAL_MESH_043_2D.py
deleted file mode 100644 (file)
index 2f6f754..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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_testExtrusion2D.py
-#  Module      : SMESH
-#  Description : Create meshes to test extrusion of mesh elements along path
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-
-#----------------------------------GEOM
-
-# create points
-p1 = geompy.MakeVertex(100, 0, 0)
-p2 = geompy.MakeVertex(100, 0, 100)
-p3 = geompy.MakeVertex(0, 0, 0)
-p4 = geompy.MakeVertex(0, 100, 0)
-
-
-# create two vectors
-vector1 = geompy.MakeVector(p1,p2)
-vector2 = geompy.MakeVector(p3,p4)
-
-# make two ellipses
-ellipse1 = geompy.MakeEllipse(p1,vector1,50,25)
-ellipse2 = geompy.MakeEllipse(p3,vector2,300,50)
-
-# publish circular face and second circle
-id_ellipse1 = geompy.addToStudy(ellipse1, "Ellips 1")
-id_ellipse2 = geompy.addToStudy(ellipse2, "Ellips 2")
-
-
-#---------------------------------SMESH
-
-# create the path mesh
-mesh1 = smesh.Mesh(ellipse1, "Path Mesh")
-
-algoReg1 = mesh1.Segment()
-algoReg1.SetName("Regular_1D")
-hypNbSeg1 = algoReg1.NumberOfSegments(18)
-smesh.SetName(hypNbSeg1, "NumberOfSegments 1")
-
-# create the tool mesh
-mesh2 = smesh.Mesh(ellipse2, "Tool Mesh")
-algoReg2 = mesh2.Segment()
-algoReg2.SetName("Regular_1D")
-hypNbSeg2 = algoReg2.NumberOfSegments(34)
-smesh.SetName(hypNbSeg2, "NumberOfSegments 2")
-
-# compute meshes
-mesh1.Compute()
-mesh2.Compute()
-
-
-# ---- udate object browser
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/PAL_MESH_043_3D.py b/src/SMESH_SWIG/PAL_MESH_043_3D.py
deleted file mode 100644 (file)
index c1d5159..0000000
+++ /dev/null
@@ -1,93 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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_testExtrusion3D.py
-#  Module      : SMESH
-#  Description : Create meshes to test extrusion of mesh elements along path
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-
-# create points to build two circles
-p1 = geompy.MakeVertex(0,  100,  0)
-p2 = geompy.MakeVertex(100,  0,  0)
-p3 = geompy.MakeVertex(0, -100,  0)
-p4 = geompy.MakeVertex(0,   70,  0)
-p5 = geompy.MakeVertex(0,  100, 30)
-p6 = geompy.MakeVertex(0,  130,  0)
-
-# create two circles
-circle = geompy.MakeCircleThreePnt(p1, p2, p3)
-cf     = geompy.MakeCircleThreePnt(p4, p5, p6)
-
-# make circular face
-wire = geompy.MakeWire([cf])
-face = geompy.MakeFace(wire, 1)
-
-# publish circular face and second circle
-idcircle = geompy.addToStudy(circle, "Circle")
-idface   = geompy.addToStudy(face,   "Circular face")
-
-
-# init a Mesh with the circular face
-mesh1 = smesh.Mesh(face, "Mesh on circular face")
-
-# set hypotheses and algos to the first mesh
-numberOfSegments1 = 12
-algoReg1 = mesh1.Segment()
-algoReg1.SetName("Regular_1D")
-hypNbSeg1 = algoReg1.NumberOfSegments(numberOfSegments1)
-smesh.SetName(hypNbSeg1, "NumberOfSegments_" + str(numberOfSegments1))
-
-maxElementArea = 30
-
-algoMef = mesh1.Triangle()
-algoMef.SetName("MEFISTO_2D")
-hypArea = algoMef.MaxElementArea(maxElementArea)
-smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
-
-
-# init a Mesh with the second circle
-mesh2 = smesh.Mesh(circle, "Mesh on circular edge")
-
-numberOfSegments2 = 12
-algoReg2 = mesh2.Segment()
-algoReg2.SetName("Regular_1D")
-hypNbSeg2 = algoReg2.NumberOfSegments(numberOfSegments2)
-smesh.SetName(hypNbSeg2, "NumberOfSegments_" + str(numberOfSegments2))
-
-
-# compute meshes
-mesh1.Compute()
-mesh2.Compute()
-
-# ---- update object browser
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_AdvancedEditor.py b/src/SMESH_SWIG/SMESH_AdvancedEditor.py
deleted file mode 100644 (file)
index 20fbac0..0000000
+++ /dev/null
@@ -1,220 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2020  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
-#
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-import math
-
-def GetNewNodes(mesh,Elems,OldNodes):
-    """
-    Auxiliary function, which return list of nodes from
-    given Elems avoided nodes from OldNodes
-    """
-    newnodes = []
-    for i in Elems:
-        nbn = mesh.GetElemNbNodes(i)
-        for j in range(0,nbn):
-            nn = mesh.GetElemNode(i,j)
-            isold = 0
-            for k in range(0,len(newnodes)):
-                if nn==newnodes[k]:
-                    isold = 1
-                    break
-                pass
-            if isold: continue
-            for k in range(0,len(OldNodes)):
-                if nn==OldNodes[k]:
-                    isold = 1
-                    break
-                pass
-            if isold: continue
-            newnodes.append(nn)
-            pass
-        pass
-    return newnodes
-            
-
-# create empty mesh
-mesh = smesh.Mesh()
-
-tol = 0.001
-
-# create a cross from quadrangle faces
-# 1. create first edge and make extrusion along 0x
-n1 = mesh.AddNode(55,-5,0)
-n2 = mesh.AddNode(55,5,0)
-e1 = mesh.AddEdge([n1,n2])
-dir1 = SMESH.DirStruct(SMESH.PointStruct(-10,0,0))
-mesh.ExtrusionSweep([e1],dir1,11)
-# 2. create second edge and make extrusion along 0y
-n3 = mesh.AddNode(-5,-55,0)
-n4 = mesh.AddNode(5,-55,0)
-e2 = mesh.AddEdge([n3,n4])
-dir2 = SMESH.DirStruct(SMESH.PointStruct(0,10,0))
-mesh.ExtrusionSweep([e2],dir2,11)
-
-# since result has coincident nodes and faces
-# we have to make merge
-nodes = mesh.FindCoincidentNodes(0.001)
-mesh.MergeNodes(nodes)
-mesh.MergeEqualElements()
-
-# make extrusion faces along 0z
-faces = mesh.GetElementsByType(SMESH.FACE)
-nbf = len(faces)
-maxang = 2.0
-zstep = 5
-nbzsteps = 50
-dir3 = SMESH.DirStruct(SMESH.PointStruct(0,0,zstep))
-newfaces = [] # list for keeping created top faces
-              # during extrusion
-
-for i in range(0,nbzsteps):
-    mesh.ExtrusionSweep(faces,dir3,1)
-    # find top faces after each extrusion and keep them
-    res = mesh.GetLastCreatedElems()
-    nbr = len(res)
-    nfaces = []
-    for j in res:
-        nbn = mesh.GetElemNbNodes(j)
-        if nbn!=4: continue
-        nn1 = mesh.GetElemNode(j,0)
-        xyz1 = mesh.GetNodeXYZ(nn1)
-        nn2 = mesh.GetElemNode(j,1)
-        xyz2 = mesh.GetNodeXYZ(nn2)
-        nn3 = mesh.GetElemNode(j,2)
-        xyz3 = mesh.GetNodeXYZ(nn3)
-        if abs(xyz1[2]-xyz2[2])<tol and abs(xyz1[2]-xyz3[2])<tol :
-            # this face is a top face
-            nfaces.append(j)
-            pass
-        pass
-    if len(nfaces)!=nbf:
-        print("len(nfaces)!=nbf")
-        break
-    newfaces.append(nfaces)
-    # update faces for before next step of extrusion
-    faces = nfaces
-    pass
-    
-# rotate faces from newfaces
-axisr1 = SMESH.AxisStruct(0,0,0,0,0,1)
-for i in range(0,nbzsteps):
-    ang = maxang*(1-math.cos((i+1)*math.pi/nbzsteps))
-    mesh.Rotate(newfaces[i],axisr1,ang,0)
-
-
-# create circles
-# create two edges and rotate them for creation
-# full circle
-n5 = mesh.AddNode(65,0,0)
-n6 = mesh.AddNode(67.5,0,0)
-n7 = mesh.AddNode(70,0,0)
-e56 = mesh.AddEdge([n5,n6])
-e67 = mesh.AddEdge([n6,n7])
-axisr2 = SMESH.AxisStruct(65,0,0,0,1,0)
-mesh.RotationSweep([e56,e67],axisr2, math.pi/6, 12, tol)
-res = mesh.GetLastCreatedElems()
-faces1 = []
-for i in res:
-    nbn = mesh.GetElemNbNodes(i)
-    if nbn>2: faces1.append(i)
-    pass
-nbf1 = len(faces1)
-
-# create other two edges and rotate them for creation
-# other full circle
-n8 = mesh.AddNode(-65,0,0)
-n9 = mesh.AddNode(-67.5,0,0)
-n10 = mesh.AddNode(-70,0,0)
-e8 = mesh.AddEdge([n8,n9])
-e9 = mesh.AddEdge([n9,n10])
-axisr3 = SMESH.AxisStruct(-65,0,0,0,-1,0)
-mesh.RotationSweep([e8,e9],axisr3, math.pi/6, 12, tol)
-res = mesh.GetLastCreatedElems()
-faces2 = []
-for i in res:
-    nbn = mesh.GetElemNbNodes(i)
-    if nbn>2: faces2.append(i)
-    pass
-nbf2 = len(faces2)
-
-# there are coincident nodes after rotation
-# therefore we have to merge nodes
-nodes = mesh.FindCoincidentNodes(0.001)
-mesh.MergeNodes(nodes)
-
-nbcircs = 2
-nbrsteps = 24
-nbrs = nbcircs*nbrsteps
-dz = nbzsteps*zstep/nbrs
-
-# create first spiral
-oldnodes = []
-newnodes = GetNewNodes(mesh,faces1,oldnodes)
-oldnodes = newnodes
-
-nodes = []
-mesh.RotationSweep(faces1,axisr1, math.pi*2/nbrsteps, nbrs, tol)
-res = mesh.GetLastCreatedElems()
-
-for i in range(0,nbrs):
-    volumes = []
-    for j in range(0,nbf1): volumes.append(res[i+j*nbrs])
-    newnodes = GetNewNodes(mesh,volumes,oldnodes)
-    for j in newnodes:
-        xyz = mesh.GetNodeXYZ(j)
-        mesh.MoveNode(j,xyz[0],xyz[1],xyz[2]+dz*(i+1))
-        pass
-    oldnodes = newnodes
-    pass
-
-# create second spiral
-oldnodes = []
-newnodes = GetNewNodes(mesh,faces2,oldnodes)
-oldnodes = newnodes
-
-nodes = []
-mesh.RotationSweep(faces2,axisr1, math.pi*2/nbrsteps, nbrs, tol)
-res = mesh.GetLastCreatedElems()
-
-for i in range(0,nbrs):
-    volumes = []
-    for j in range(0,nbf2): volumes.append(res[i+j*nbrs])
-    newnodes = GetNewNodes(mesh,volumes,oldnodes)
-    for j in newnodes:
-        xyz = mesh.GetNodeXYZ(j)
-        mesh.MoveNode(j,xyz[0],xyz[1],xyz[2]+dz*(i+1))
-        pass
-    oldnodes = newnodes
-    pass
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_BelongToGeom.py b/src/SMESH_SWIG/SMESH_BelongToGeom.py
deleted file mode 100644 (file)
index ef616a7..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-from SMESH_test1 import *
-
-## Old style
-def CheckBelongToGeomFilterOld(theMeshGen, theMesh, theShape, theSubShape, theElemType):
-    if theShape != theSubShape:
-        aName = str(theSubShape)
-        geompy.addToStudyInFather(theShape,theSubShape,aName)
-
-    theMeshGen.Compute(theMesh,theShape)
-
-    aFilterMgr = theMeshGen.CreateFilterManager()
-    aFilter = aFilterMgr.CreateFilter()
-   
-    aBelongToGeom = aFilterMgr.CreateBelongToGeom()
-    aBelongToGeom.SetGeom(theSubShape)
-    aBelongToGeom.SetElementType(theElemType)
-    
-    aFilter.SetPredicate(aBelongToGeom)
-    aFilterMgr.UnRegister()
-    return aFilter.GetElementsId(theMesh)
-
-## Current style
-def CheckBelongToGeomFilter(theMesh, theShape, theSubShape, theElemType):
-    if theShape != theSubShape:
-        aName = str(theSubShape)
-        geompy.addToStudyInFather(theShape,theSubShape,aName)
-
-    theMesh.Compute()
-    aFilter = smesh.GetFilter(theElemType, SMESH.FT_BelongToGeom, theSubShape)
-    return aFilter.GetElementsId(theMesh.GetMesh())
-    
-
-anElemType = SMESH.FACE;
-print("anElemType =", anElemType)
-#anIds = CheckBelongToGeomFilter(mesh,box,subShapeList[1],anElemType)
-anIds = CheckBelongToGeomFilter(mesh,box,box,anElemType)
-print("Number of ids = ", len(anIds))
-print("anIds = ", anIds)
-## Check old version
-#anIds = CheckBelongToGeomFilterOld(smesh,mesh.GetMesh(),box,box,anElemType)
-#print "anIds = ", anIds
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_BuildCompound.py b/src/SMESH_SWIG/SMESH_BuildCompound.py
deleted file mode 100644 (file)
index f991a39..0000000
+++ /dev/null
@@ -1,107 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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   : SMESH_BuildCompound.py
-#  Author : Alexander KOVALEV
-#  Module : SMESH
-#  $Header$
-# ! Please, if you edit this example file, update also
-# ! SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.doc
-# ! as some sequences of symbols from this example are used during
-# ! documentation generation to identify certain places of this file
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-## create a bottom box
-Box_inf = geompy.MakeBox(0., 0., 0., 200., 200., 50.)
-
-# get a top face
-Psup1=geompy.MakeVertex(100., 100., 50.)
-Fsup1=geompy.GetFaceNearPoint(Box_inf, Psup1)
-# get a bottom face
-Pinf1=geompy.MakeVertex(100., 100., 0.)
-Finf1=geompy.GetFaceNearPoint(Box_inf, Pinf1)
-
-## create a top box
-Box_sup = geompy.MakeBox(100., 100., 50., 200., 200., 100.)
-
-# get a top face
-Psup2=geompy.MakeVertex(150., 150., 100.)
-Fsup2=geompy.GetFaceNearPoint(Box_sup, Psup2)
-# get a bottom face
-Pinf2=geompy.MakeVertex(150., 150., 50.)
-Finf2=geompy.GetFaceNearPoint(Box_sup, Pinf2)
-
-## Publish in the study
-geompy.addToStudy(Box_inf, "Box_inf")
-geompy.addToStudyInFather(Box_inf, Fsup1, "Fsup")
-geompy.addToStudyInFather(Box_inf, Finf1, "Finf")
-
-geompy.addToStudy(Box_sup, "Box_sup")
-geompy.addToStudyInFather(Box_sup, Fsup2, "Fsup")
-geompy.addToStudyInFather(Box_sup, Finf2, "Finf")
-
-
-## create a bottom mesh
-Mesh_inf = smesh.Mesh(Box_inf, "Mesh_inf")
-algo1D_1=Mesh_inf.Segment()
-algo1D_1.NumberOfSegments(10)
-algo2D_1=Mesh_inf.Quadrangle()
-algo3D_1=Mesh_inf.Hexahedron()
-Mesh_inf.Compute()
-
-# create a group on the top face
-Gsup1=Mesh_inf.Group(Fsup1, "Sup")
-# create a group on the bottom face
-Ginf1=Mesh_inf.Group(Finf1, "Inf")
-
-## create a top mesh
-Mesh_sup = smesh.Mesh(Box_sup, "Mesh_sup")
-algo1D_2=Mesh_sup.Segment()
-algo1D_2.NumberOfSegments(5)
-algo2D_2=Mesh_sup.Quadrangle()
-algo3D_2=Mesh_sup.Hexahedron()
-Mesh_sup.Compute()
-
-# create a group on the top face
-Gsup2=Mesh_sup.Group(Fsup2, "Sup")
-# create a group on the bottom face
-Ginf2=Mesh_sup.Group(Finf2, "Inf")
-
-## create compounds
-# create a compound of two meshes with renaming groups with the same names and
-# merging of elements with the given tolerance
-Compound1 = smesh.Concatenate([Mesh_inf.GetMesh(), Mesh_sup.GetMesh()], 0, 1, 1e-05)
-smesh.SetName(Compound1, 'Compound_with_RenamedGrps_and_MergeElems')
-# create a compound of two meshes with uniting groups with the same names and
-# creating groups of all elements
-Compound2 = smesh.Concatenate([Mesh_inf.GetMesh(), Mesh_sup.GetMesh()], 1, 0, 1e-05, True)
-smesh.SetName(Compound2, 'Compound_with_UniteGrps_and_GrpsOfAllElems')
-#end
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_GroupFromGeom.py b/src/SMESH_SWIG/SMESH_GroupFromGeom.py
deleted file mode 100644 (file)
index 3c77da0..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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_GroupFromGeom.py
-#  Module : SMESH
-#
-from SMESH_test1 import *
-
-# Compute the mesh created in SMESH_test1
-
-mesh.Compute()
-
-# Create geometry groups on plane:
-aGeomGroup1 = geompy.CreateGroup(face , geompy.ShapeType["FACE"])
-geompy.AddObject(aGeomGroup1, 1)
-
-aGeomGroup2 = geompy.CreateGroup(face , geompy.ShapeType["EDGE"])
-
-geompy.AddObject(aGeomGroup2, 3)
-geompy.AddObject(aGeomGroup2, 6)
-geompy.AddObject(aGeomGroup2, 8)
-geompy.AddObject(aGeomGroup2, 10)
-
-geompy.addToStudy(aGeomGroup1, "Group on Faces")
-geompy.addToStudy(aGeomGroup2, "Group on Edges")
-
-aSmeshGroup1 = mesh.GroupOnGeom(aGeomGroup1, "SMESHGroup1", SMESH.FACE)
-aSmeshGroup2 = mesh.GroupOnGeom(aGeomGroup2, "SMESHGroup2", SMESH.EDGE)
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_GroupFromGeom2.py b/src/SMESH_SWIG/SMESH_GroupFromGeom2.py
deleted file mode 100644 (file)
index 059c29e..0000000
+++ /dev/null
@@ -1,77 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-#==============================================================================
-#  Info.
-#  Bug (from script, bug)   : SMESH_GroupFromGeom.py, PAL6945
-#  Modified                 : 25/11/2004
-#  Author                   : Kovaltchuk Alexey
-#  Project                  : PAL/SALOME
-#============================================================================== 
-#
-from SMESH_test1 import *
-
-
-# Compute the mesh created in SMESH_test1
-
-mesh.Compute()
-
-# Create geometry groups on plane:
-aGeomGroup1 = geompy.CreateGroup(face , geompy.ShapeType["FACE"])
-geompy.AddObject(aGeomGroup1, 1)
-
-aGeomGroup2 = geompy.CreateGroup(face , geompy.ShapeType["EDGE"])
-
-geompy.AddObject(aGeomGroup2, 3)
-geompy.AddObject(aGeomGroup2, 6)
-geompy.AddObject(aGeomGroup2, 8)
-geompy.AddObject(aGeomGroup2, 10)
-
-geompy.addToStudy(aGeomGroup1, "Group on Faces")
-geompy.addToStudy(aGeomGroup2, "Group on Edges")
-
-aSmeshGroup1 = mesh.GroupOnGeom(aGeomGroup1, "SMESHGroup1", SMESH.FACE)
-aSmeshGroup2 = mesh.GroupOnGeom(aGeomGroup2, "SMESHGroup2", SMESH.EDGE)
-
-print("Create aGroupOnShell - a group linked to a shell")
-aGroupOnShell = mesh.GroupOnGeom(shell, "GroupOnShell", SMESH.EDGE)
-print("aGroupOnShell type =", aGroupOnShell.GetType())
-print("aGroupOnShell size =", aGroupOnShell.Size())
-print("aGroupOnShell ids :", aGroupOnShell.GetListOfID())
-
-print(" ")
-
-print("Modify <LocalLength> hypothesis: 100 -> 50")
-hypLen1.SetLength(50)
-print("Contents of aGroupOnShell changes:")
-print("aGroupOnShell size =", aGroupOnShell.Size())
-print("aGroupOnShell ids :", aGroupOnShell.GetListOfID())
-
-print(" ")
-
-print("Re-compute mesh, contents of aGroupOnShell changes again:")
-mesh.Compute()
-print("aGroupOnShell size =", aGroupOnShell.Size())
-print("aGroupOnShell ids :", aGroupOnShell.GetListOfID())
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_GroupLyingOnGeom.py b/src/SMESH_SWIG/SMESH_GroupLyingOnGeom.py
deleted file mode 100644 (file)
index c67c0a1..0000000
+++ /dev/null
@@ -1,50 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-def BuildGroupLyingOn(theMesh, theElemType, theName, theShape):
-    aFilterMgr = smesh.CreateFilterManager()
-    aFilter = aFilterMgr.CreateFilter()
-   
-    aLyingOnGeom = aFilterMgr.CreateLyingOnGeom()
-    aLyingOnGeom.SetGeom(theShape)
-    aLyingOnGeom.SetElementType(theElemType)
-    
-    aFilter.SetPredicate(aLyingOnGeom)
-    anIds = aFilter.GetElementsId(theMesh)
-    aFilterMgr.UnRegister()
-
-    aGroup = theMesh.CreateGroup(theElemType, theName)
-    aGroup.Add(anIds)
-
-#Example
-from SMESH_test1 import *
-
-mesh.Compute()
-
-# First way
-BuildGroupLyingOn(mesh.GetMesh(), SMESH.FACE, "Group of faces lying on edge #1", edge )
-
-# Second way
-mesh.MakeGroup("Group of faces lying on edge #2", SMESH.FACE, SMESH.FT_LyingOnGeom, edge)
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_Nut.py b/src/SMESH_SWIG/SMESH_Nut.py
deleted file mode 100644 (file)
index e33021d..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-#####################################################################
-#Created                :17/02/2005
-#Author                 :MASLOV Eugeny, KOVALTCHUK Alexey 
-#####################################################################
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-import os
-import math
-
-#Sketcher_1 creation
-print("Sketcher creation...")
-Sketcher_1 = geompy.MakeSketcher("Sketcher:F 100 -57.7:TT 100 57.7:TT 0 115.47:TT -100 57.7:TT -100 -57.7:TT 0 -115.47:WW") 
-geompy.addToStudy(Sketcher_1, "Sketcher_1")
-Face_1 = geompy.MakeFace(Sketcher_1, 1)
-geompy.addToStudy(Face_1, "Face_1")
-
-#Line creation
-print("Line  creation...")
-Line_1 = geompy.MakeLineTwoPnt(geompy.MakeVertex(0,0,0), geompy.MakeVertex(0,0,100))
-geompy.addToStudy(Line_1, "Line_1")
-
-#Prism creation
-print("Prism creation...")
-Prism_1 = geompy.MakePrismVecH(Face_1, Line_1, 100)
-geompy.addToStudy(Prism_1, "Prism_1")
-
-#Sketcher_2 creation
-print("Sketcher creation...")
-Sketcher_2 = geompy.MakeSketcher("Sketcher:F 50 0:TT 80 0:TT 112 13:TT 112 48:TT 80 63:TT 80 90:TT 50 90:WW", [0,0,0, 1,0,0, 0,1,0]) 
-geompy.addToStudy(Sketcher_2, "Sketcher_2")
-Face_2 = geompy.MakeFace(Sketcher_2, 1)
-geompy.addToStudy(Face_2, "Face_2")
-
-#Revolution creation
-print("Revolution creation...")
-Revolution_1 = geompy.MakeRevolution(Face_2, Line_1, 2*math.pi)
-geompy.addToStudy(Revolution_1, "Revolution_1")
-
-#Common applying
-print("Common of Revolution and Prism...")
-Common_1 = geompy.MakeBoolean(Revolution_1, Prism_1, 1)
-geompy.addToStudy(Common_1, "Common_1")
-
-#Explode Common_1 on edges
-CommonExplodedListEdges = geompy.SubShapeAll(Common_1, geompy.ShapeType["EDGE"])
-for i in range(0, len(CommonExplodedListEdges)):
-    name = "Edge_"+str(i+1)
-    geompy.addToStudyInFather(Common_1, CommonExplodedListEdges[i], name)
-
-#Fillet applying
-print("Fillet creation...")
-Fillet_1 = geompy.MakeFillet(Common_1, 10, geompy.ShapeType["EDGE"], [5])
-geompy.addToStudy(Fillet_1, "Fillet_1")
-
-#Chamfer applying
-print("Chamfer creation...")
-cyl_face = geompy.GetFaceNearPoint( Fillet_1, geompy.MakeVertex( 50, 0, 45 ), theName='cyl_face')
-cyl_face_id = geompy.GetSubShapeID( Fillet_1, cyl_face )
-top_face = geompy.GetFaceNearPoint( Fillet_1, geompy.MakeVertex( 60, 0, 90 ), theName='top_face')
-top_face_id = geompy.GetSubShapeID( Fillet_1, top_face )
-Chamfer_1 = geompy.MakeChamferEdge(Fillet_1, 10, 10, cyl_face_id, top_face_id, theName='Chamfer_1' )
-
-cyl_face = geompy.GetFaceNearPoint( Chamfer_1, geompy.MakeVertex( 80, 0, 85 ), theName='cyl_face')
-cyl_face_id = geompy.GetSubShapeID( Chamfer_1, cyl_face )
-top_face = geompy.GetFaceNearPoint( Chamfer_1, geompy.MakeVertex( 65, 0, 90 ), theName='top_face')
-top_face_id = geompy.GetSubShapeID( Chamfer_1, top_face )
-Chamfer_2 = geompy.MakeChamferEdge(Chamfer_1, 10, 10, cyl_face_id, top_face_id, theName='Chamfer_2' )
-
-#Import of the shape from "slots.brep"
-print("Import multi-rotation from the DATA_DIR/Shapes/Brep/slots.brep")
-thePath = os.getenv("DATA_DIR")
-theFileName = os.path.join( thePath,"Shapes","Brep","slots.brep")
-theShapeForCut = geompy.ImportBREP(theFileName)
-geompy.addToStudy(theShapeForCut, "slot.brep_1")
-
-#Cut applying
-print("Cut...")
-Cut_1 = geompy.MakeBoolean(Chamfer_2, theShapeForCut, 2)
-Cut_1_ID = geompy.addToStudy(Cut_1, "Cut_1")
-
-#Mesh creation
-
-# -- Init --
-shape_mesh = salome.IDToObject( Cut_1_ID )
-
-mesh = smesh.Mesh(shape_mesh, "Nut")
-
-#HYPOTHESIS CREATION
-print("-------------------------- Average length")
-theAverageLength = 5
-algoReg1D = mesh.Segment()
-hAvLength = algoReg1D.LocalLength(theAverageLength)
-print(hAvLength.GetName())
-print(hAvLength.GetId())
-print(hAvLength.GetLength())
-smesh.SetName(hAvLength, "AverageLength_"+str(theAverageLength))
-
-print("-------------------------- MaxElementArea")
-theMaxElementArea = 20
-algoMef = mesh.Triangle(smeshBuilder.MEFISTO)
-hArea = algoMef.MaxElementArea( theMaxElementArea )
-print(hArea.GetName())
-print(hArea.GetId())
-print(hArea.GetMaxElementArea())
-smesh.SetName(hArea, "MaxElementArea_"+str(theMaxElementArea))
-
-print("-------------------------- MaxElementVolume")
-theMaxElementVolume = 150
-algoNg = mesh.Tetrahedron(smeshBuilder.NETGEN)
-hVolume = algoNg.MaxElementVolume( theMaxElementVolume )
-print(hVolume.GetName())
-print(hVolume.GetId())
-print(hVolume.GetMaxElementVolume())
-smesh.SetName(hVolume, "MaxElementVolume_"+str(theMaxElementVolume))
-
-
-print("-------------------------- compute the mesh of the mechanic piece")
-mesh.Compute()
-
-print("Information about the Nut:")
-print("Number of nodes       : ", mesh.NbNodes())
-print("Number of edges       : ", mesh.NbEdges())
-print("Number of faces       : ", mesh.NbFaces())
-print("Number of triangles   : ", mesh.NbTriangles())
-print("Number of quadrangles : ", mesh.NbQuadrangles())
-print("Number of volumes     : ", mesh.NbVolumes())
-print("Number of tetrahedrons: ", mesh.NbTetras())
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_Partition1_tetra.py b/src/SMESH_SWIG/SMESH_Partition1_tetra.py
deleted file mode 100644 (file)
index c201a23..0000000
+++ /dev/null
@@ -1,187 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# Tetrahedrization of the geometry generated by the Python script GEOM_Partition1.py
-# Hypothesis and algorithms for the mesh generation are global
-# -- Rayon de la bariere
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-from math import sqrt
-
-
-#---------------------------------------------------------------
-
-barier_height = 7.0
-barier_radius = 5.6 / 2 # Rayon de la bariere
-colis_radius = 1.0 / 2  # Rayon du colis
-colis_step = 2.0        # Distance s�parant deux colis
-cc_width = 0.11         # Epaisseur du complement de colisage
-
-# --
-
-cc_radius = colis_radius + cc_width
-colis_center = sqrt(2.0)*colis_step/2
-
-# --
-
-boolean_common  = 1
-boolean_cut     = 2
-boolean_fuse    = 3
-boolean_section = 4
-
-# --
-
-p0 = geompy.MakeVertex(0.,0.,0.)
-vz = geompy.MakeVectorDXDYDZ(0.,0.,1.)
-
-# --
-
-barier = geompy.MakeCylinder(p0, vz, barier_radius, barier_height)
-
-# --
-
-colis = geompy.MakeCylinder(p0, vz, colis_radius, barier_height)
-cc    = geompy.MakeCylinder(p0, vz,    cc_radius, barier_height)
-
-colis_cc = geompy.MakeCompound([colis, cc])
-colis_cc = geompy.MakeTranslation(colis_cc, colis_center, 0.0, 0.0)
-
-colis_cc_multi = geompy.MultiRotate1D(colis_cc, vz, 4)
-
-# --
-
-Compound1 = geompy.MakeCompound([colis_cc_multi, barier])
-SubShape_theShape = geompy.SubShapeAll(Compound1,geompy.ShapeType["SOLID"])
-alveole = geompy.MakePartition(SubShape_theShape)
-
-print("Analysis of the geometry to mesh (right after the Partition) :")
-
-subShellList = geompy.SubShapeAll(alveole, geompy.ShapeType["SHELL"])
-subFaceList  = geompy.SubShapeAll(alveole, geompy.ShapeType["FACE"])
-subEdgeList  = geompy.SubShapeAll(alveole, geompy.ShapeType["EDGE"])
-
-print("number of Shells in alveole : ", len(subShellList))
-print("number of Faces  in alveole : ", len(subFaceList))
-print("number of Edges  in alveole : ", len(subEdgeList))
-
-subshapes = geompy.SubShapeAll(alveole, geompy.ShapeType["SHAPE"])
-
-## there are 9 sub-shapes
-
-comp1 = geompy.MakeCompound( [ subshapes[0], subshapes[1] ] )
-comp2 = geompy.MakeCompound( [ subshapes[2], subshapes[3] ] )
-comp3 = geompy.MakeCompound( [ subshapes[4], subshapes[5] ] )
-comp4 = geompy.MakeCompound( [ subshapes[6], subshapes[7] ] )
-
-compGOs = []
-compGOs.append( comp1 )
-compGOs.append( comp2 )
-compGOs.append( comp3 )
-compGOs.append( comp4 )
-comp = geompy.MakeCompound( compGOs )
-
-alveole = geompy.MakeCompound( [ comp, subshapes[8] ])
-
-idalveole = geompy.addToStudy(alveole, "alveole")
-
-print("Analysis of the geometry to mesh (right after the MakeCompound) :")
-
-subShellList = geompy.SubShapeAll(alveole, geompy.ShapeType["SHELL"])
-subFaceList  = geompy.SubShapeAll(alveole, geompy.ShapeType["FACE"])
-subEdgeList  = geompy.SubShapeAll(alveole, geompy.ShapeType["EDGE"])
-
-print("number of Shells in alveole : ", len(subShellList))
-print("number of Faces  in alveole : ", len(subFaceList))
-print("number of Edges  in alveole : ", len(subEdgeList))
-
-status = geompy.CheckShape(alveole)
-print(" check status ", status)
-
-
-# ---- init a Mesh with the alveole
-shape_mesh = salome.IDToObject( idalveole )
-
-mesh = smesh.Mesh(shape_mesh, "MeshAlveole")
-
-print("-------------------------- create Hypothesis (In this case global hypothesis are used)")
-
-print("-------------------------- NumberOfSegments")
-
-numberOfSegments = 10
-
-regular1D = mesh.Segment()
-hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
-print(hypNbSeg.GetName())
-print(hypNbSeg.GetId())
-print(hypNbSeg.GetNumberOfSegments())
-smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
-
-print("-------------------------- MaxElementArea")
-
-maxElementArea = 0.1
-
-mefisto2D = mesh.Triangle()
-hypArea = mefisto2D.MaxElementArea(maxElementArea)
-print(hypArea.GetName())
-print(hypArea.GetId())
-print(hypArea.GetMaxElementArea())
-smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
-
-print("-------------------------- MaxElementVolume")
-
-maxElementVolume = 0.5
-
-netgen3D = mesh.Tetrahedron(smeshBuilder.NETGEN)
-hypVolume = netgen3D.MaxElementVolume(maxElementVolume)
-print(hypVolume.GetName())
-print(hypVolume.GetId())
-print(hypVolume.GetMaxElementVolume())
-smesh.SetName(hypVolume, "MaxElementVolume_" + str(maxElementVolume))
-
-print("-------------------------- compute the mesh of alveole ")
-ret = mesh.Compute()
-
-if ret != 0:
-    log=mesh.GetLog(0) # no erase trace
-    # for linelog in log:
-    #     print(linelog)
-    print("Information about the Mesh_mechanic:")
-    print("Number of nodes       : ", mesh.NbNodes())
-    print("Number of edges       : ", mesh.NbEdges())
-    print("Number of faces       : ", mesh.NbFaces())
-    print("Number of triangles   : ", mesh.NbTriangles())
-    print("Number of volumes     : ", mesh.NbVolumes())
-    print("Number of tetrahedrons: ", mesh.NbTetras())
-else:
-    print("problem when computing the mesh")
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_Sphere.py b/src/SMESH_SWIG/SMESH_Sphere.py
deleted file mode 100644 (file)
index 7776cb4..0000000
+++ /dev/null
@@ -1,121 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-#  GEOM GEOM_SWIG : binding of C++ implementation with Python
-#  File   : GEOM_Sphere.py
-#  Author : Damien COQUERET, Open CASCADE
-#  Module : GEOM
-#  $Header: 
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-import math
-
-# It is an example of creating a hexahedrical mesh on a sphere.
-#
-# Used approach allows to avoid problems with degenerated and
-# seam edges without special processing of geometrical shapes
-
-#-----------------------------------------------------------------------
-#Variables
-Radius  = 100.
-Dist    = Radius / 2.
-Factor  = 2.5
-Angle90 = math.pi / 2.
-NbSeg   = 10
-
-PointsList = []
-ShapesList = []
-
-#Basic Elements
-P0 = geompy.MakeVertex(0., 0., 0.)
-P1 = geompy.MakeVertex(-Dist, -Dist, -Dist)
-P2 = geompy.MakeVertex(-Dist, -Dist, Dist)
-P3 = geompy.MakeVertex(-Dist, Dist, Dist)
-P4 = geompy.MakeVertex(-Dist, Dist, -Dist)
-
-VZ = geompy.MakeVectorDXDYDZ(0., 0., 1.)
-
-#Construction Elements
-PointsList.append(P1)
-PointsList.append(P2)
-PointsList.append(P3)
-PointsList.append(P4)
-PointsList.append(P1)
-
-PolyLine = geompy.MakePolyline(PointsList)
-
-Face1 = geompy.MakeFace(PolyLine, 1)
-Face2 = geompy.MakeScaleTransform(Face1, P0, Factor)
-Face3 = geompy.MakeScaleTransform(Face1, P0, -1.)
-
-#Models
-Sphere = geompy.MakeSphereR(Radius)
-
-Block = geompy.MakeHexa2Faces(Face1, Face2)
-Cube  = geompy.MakeHexa2Faces(Face1, Face3)
-
-Common1 = geompy.MakeBoolean(Sphere, Block, 1)
-Common2 = geompy.MakeRotation(Common1, VZ, Angle90)
-
-MultiBlock1 = geompy.MakeMultiTransformation1D(Common1, 20, -1, 3)
-MultiBlock2 = geompy.MakeMultiTransformation1D(Common2, 30, -1, 3)
-
-#Reconstruct sphere from several blocks
-ShapesList.append(Cube)
-ShapesList.append(MultiBlock1)
-ShapesList.append(MultiBlock2)
-Compound = geompy.MakeCompound(ShapesList)
-
-Result = geompy.MakeGlueFaces(Compound, 0.1)
-
-#addToStudy
-Id_Sphere      = geompy.addToStudy(Sphere, "Sphere")
-Id_Cube        = geompy.addToStudy(Cube, "Cube")
-
-Id_Common1     = geompy.addToStudy(Common1, "Common1")
-Id_Common2     = geompy.addToStudy(Common2, "Common2")
-
-Id_MultiBlock1 = geompy.addToStudy(MultiBlock1, "MultiBlock1")
-Id_MultiBlock2 = geompy.addToStudy(MultiBlock2, "MultiBlock2")
-
-Id_Result      = geompy.addToStudy(Result, "Result")
-
-#-----------------------------------------------------------------------
-#Meshing
-my_hexa = smesh.Mesh(Result, "Sphere_Mesh")
-algo = my_hexa.Segment()
-algo.NumberOfSegments(NbSeg)
-my_hexa.Quadrangle()
-my_hexa.Hexahedron()
-my_hexa.Compute()
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_blocks.py b/src/SMESH_SWIG/SMESH_blocks.py
deleted file mode 100644 (file)
index cae0cb6..0000000
+++ /dev/null
@@ -1,49 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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 SMESH_SWIG : binding of C++ implementation with Python
-#  File   : SMESH_blocks.py
-#  Author : Julia DOROVSKIKH
-#  Module : SMESH
-#  $Header$
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-import math
-
-import GEOM_Spanner
-
-isBlocksTest = 0 # False
-isMeshTest   = 1 # True
-
-GEOM_Spanner.MakeSpanner(geompy, math, isBlocksTest, isMeshTest, smesh)
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_box.py b/src/SMESH_SWIG/SMESH_box.py
deleted file mode 100644 (file)
index 82a6517..0000000
+++ /dev/null
@@ -1,73 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-#==============================================================================
-#  Info.
-#  Bug (from script, bug)   : box.py, PAL5223
-#  Modified                 : 25/11/2004
-#  Author                   : Kovaltchuk Alexey
-#  Project                  : PAL/SALOME
-#==============================================================================
-# Salome geometry and meshing for a box
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-from salome import sg
-
-# Plate
-
-box    = geompy.MakeBox(0.,0.,0.,1.,1.,1.)
-boxId  = geompy.addToStudy(box,"box")
-
-# ---- SMESH
-
-# ---- init a Mesh
-
-box_mesh=smesh.Mesh(box, "box_mesh")
-
-# set Hypothesis and Algorithm
-
-alg1D = box_mesh.Segment()
-alg1D.SetName("algo1D")
-hypL1 = alg1D.LocalLength(0.25)
-smesh.SetName(hypL1, "LocalLength")
-    
-alg2D = box_mesh.Quadrangle()
-alg2D.SetName("algo2D")
-
-alg3D = box_mesh.Hexahedron()
-alg3D.SetName("algo3D")
-
-# compute mesh
-
-box_mesh.Compute()
-
-sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_box2_tetra.py b/src/SMESH_SWIG/SMESH_box2_tetra.py
deleted file mode 100644 (file)
index 719862a..0000000
+++ /dev/null
@@ -1,141 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# Tetrahedrization of the geometry union of 2 boxes having a face in common
-# Hypothesis and algorithms for the mesh generation are global
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-
-# ---- define 2 boxes box1 and box2
-
-box1 = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
-
-idbox1 = geompy.addToStudy(box1, "box1")
-
-print("Analysis of the geometry box1 :")
-subShellList = geompy.SubShapeAll(box1, geompy.ShapeType["SHELL"])
-subFaceList  = geompy.SubShapeAll(box1, geompy.ShapeType["FACE"])
-subEdgeList  = geompy.SubShapeAll(box1, geompy.ShapeType["EDGE"])
-
-print("number of Shells in box1 : ", len(subShellList))
-print("number of Faces  in box1 : ", len(subFaceList))
-print("number of Edges  in box1 : ", len(subEdgeList))
-
-box2 = geompy.MakeBox(100., 0., 0., 200., 200., 300.)
-
-idbox2 = geompy.addToStudy(box2, "box2")
-
-print("Analysis of the geometry box2 :")
-subShellList = geompy.SubShapeAll(box2, geompy.ShapeType["SHELL"])
-subFaceList  = geompy.SubShapeAll(box2, geompy.ShapeType["FACE"])
-subEdgeList  = geompy.SubShapeAll(box2, geompy.ShapeType["EDGE"])
-
-print("number of Shells in box2 : ", len(subShellList))
-print("number of Faces  in box2 : ", len(subFaceList))
-print("number of Edges  in box2 : ", len(subEdgeList))
-
-# append the tow boxes to make ine shel, referrencing only once
-# the internal interface
-
-shell = geompy.MakePartition([box1, box2])
-idshell = geompy.addToStudy(shell, "shell")
-
-print("Analysis of the geometry shell (union of box1 and box2) :")
-subShellList = geompy.SubShapeAll(shell, geompy.ShapeType["SHELL"])
-subFaceList  = geompy.SubShapeAll(shell, geompy.ShapeType["FACE"])
-subEdgeList  = geompy.SubShapeAll(shell, geompy.ShapeType["EDGE"])
-
-print("number of Shells in shell : ", len(subShellList))
-print("number of Faces  in shell : ", len(subFaceList))
-print("number of Edges  in shell : ", len(subEdgeList))
-
-
-### ---------------------------- SMESH --------------------------------------
-
-# ---- init a Mesh with the shell
-
-mesh = smesh.Mesh(shell, "MeshBox2")
-
-
-# ---- set Hypothesis and Algorithm
-
-print("-------------------------- NumberOfSegments")
-
-numberOfSegments = 10
-
-regular1D = mesh.Segment()
-hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
-print(hypNbSeg.GetName())
-print(hypNbSeg.GetId())
-print(hypNbSeg.GetNumberOfSegments())
-smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
-
-print("-------------------------- MaxElementArea")
-
-maxElementArea = 500
-
-mefisto2D = mesh.Triangle()
-hypArea = mefisto2D.MaxElementArea(maxElementArea)
-print(hypArea.GetName())
-print(hypArea.GetId())
-print(hypArea.GetMaxElementArea())
-smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
-
-print("-------------------------- MaxElementVolume")
-
-maxElementVolume = 500
-
-netgen3D = mesh.Tetrahedron(smeshBuilder.NETGEN)
-hypVolume = netgen3D.MaxElementVolume(maxElementVolume)
-print(hypVolume.GetName())
-print(hypVolume.GetId())
-print(hypVolume.GetMaxElementVolume())
-smesh.SetName(hypVolume, "MaxElementVolume_" + str(maxElementVolume))
-
-print("-------------------------- compute shell")
-ret = mesh.Compute()
-print(ret)
-if ret != 0:
-    log = mesh.GetLog(0) # no erase trace
-    # for linelog in log:
-    #     print(linelog)
-    print("Information about the MeshBox2:")
-    print("Number of nodes       : ", mesh.NbNodes())
-    print("Number of edges       : ", mesh.NbEdges())
-    print("Number of faces       : ", mesh.NbFaces())
-    print("Number of triangles   : ", mesh.NbTriangles())
-    print("Number of volumes     : ", mesh.NbVolumes())
-    print("Number of tetrahedrons: ", mesh.NbTetras())
-else:
-    print("probleme when computing the mesh")
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_box3_tetra.py b/src/SMESH_SWIG/SMESH_box3_tetra.py
deleted file mode 100644 (file)
index 728728d..0000000
+++ /dev/null
@@ -1,151 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# Tetrahedrization of the geometry union of 3 boxes aligned where the middle
-# one has a race in common with the two others.
-# Hypothesis and algorithms for the mesh generation are global
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# ---- define 3 boxes box1, box2 and box3
-
-box1 = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
-
-idbox1 = geompy.addToStudy(box1, "box1")
-
-print("Analysis of the geometry box1 :")
-subShellList = geompy.SubShapeAll(box1, geompy.ShapeType["SHELL"])
-subFaceList  = geompy.SubShapeAll(box1, geompy.ShapeType["FACE"])
-subEdgeList  = geompy.SubShapeAll(box1, geompy.ShapeType["EDGE"])
-
-print("number of Shells in box1 : ", len(subShellList))
-print("number of Faces  in box1 : ", len(subFaceList))
-print("number of Edges  in box1 : ", len(subEdgeList))
-
-box2 = geompy.MakeBox(100., 0., 0., 200., 200., 300.)
-
-idbox2 = geompy.addToStudy(box2, "box2")
-
-print("Analysis of the geometry box2 :")
-subShellList = geompy.SubShapeAll(box2, geompy.ShapeType["SHELL"])
-subFaceList  = geompy.SubShapeAll(box2, geompy.ShapeType["FACE"])
-subEdgeList  = geompy.SubShapeAll(box2, geompy.ShapeType["EDGE"])
-
-print("number of Shells in box2 : ", len(subShellList))
-print("number of Faces  in box2 : ", len(subFaceList))
-print("number of Edges  in box2 : ", len(subEdgeList))
-
-box3 = geompy.MakeBox(0., 0., 300., 200., 200., 500.)
-
-idbox3 = geompy.addToStudy(box3, "box3")
-
-print("Analysis of the geometry box3 :")
-subShellList = geompy.SubShapeAll(box3, geompy.ShapeType["SHELL"])
-subFaceList  = geompy.SubShapeAll(box3, geompy.ShapeType["FACE"])
-subEdgeList  = geompy.SubShapeAll(box3, geompy.ShapeType["EDGE"])
-
-print("number of Shells in box3 : ", len(subShellList))
-print("number of Faces  in box3 : ", len(subFaceList))
-print("number of Edges  in box3 : ", len(subEdgeList))
-
-shell = geompy.MakePartition([box1, box2, box3])
-idshell = geompy.addToStudy(shell,"shell")
-
-print("Analysis of the geometry shell (union of box1, box2 and box3) :")
-subShellList = geompy.SubShapeAll(shell, geompy.ShapeType["SHELL"])
-subFaceList  = geompy.SubShapeAll(shell, geompy.ShapeType["FACE"])
-subEdgeList  = geompy.SubShapeAll(shell, geompy.ShapeType["EDGE"])
-
-print("number of Shells in shell : ", len(subShellList))
-print("number of Faces  in shell : ", len(subFaceList))
-print("number of Edges  in shell : ", len(subEdgeList))
-
-
-### ---------------------------- SMESH --------------------------------------
-
-# ---- init a Mesh with the shell
-
-mesh = smesh.Mesh(shell, "MeshBox3")
-
-
-# ---- set Hypothesis and Algorithm
-
-print("-------------------------- NumberOfSegments")
-
-numberOfSegments = 10
-
-regular1D = mesh.Segment()
-hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
-print(hypNbSeg.GetName())
-print(hypNbSeg.GetId())
-print(hypNbSeg.GetNumberOfSegments())
-smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
-
-print("-------------------------- MaxElementArea")
-
-maxElementArea = 500
-
-mefisto2D = mesh.Triangle()
-hypArea = mefisto2D.MaxElementArea(maxElementArea)
-print(hypArea.GetName())
-print(hypArea.GetId())
-print(hypArea.GetMaxElementArea())
-smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
-
-print("-------------------------- MaxElementVolume")
-
-maxElementVolume = 500
-
-netgen3D = mesh.Tetrahedron(smeshBuilder.NETGEN)
-hypVolume = netgen3D.MaxElementVolume(maxElementVolume)
-print(hypVolume.GetName())
-print(hypVolume.GetId())
-print(hypVolume.GetMaxElementVolume())
-smesh.SetName(hypVolume, "MaxElementVolume_" + str(maxElementVolume))
-
-print("-------------------------- compute shell")
-ret = mesh.Compute()
-print(ret)
-if ret != 0:
-    log = mesh.GetLog(0) # no erase trace
-    # for linelog in log:
-    #     print(linelog)
-    print("Information about the MeshBox3:")
-    print("Number of nodes       : ", mesh.NbNodes())
-    print("Number of edges       : ", mesh.NbEdges())
-    print("Number of faces       : ", mesh.NbFaces())
-    print("Number of triangles   : ", mesh.NbTriangles())
-    print("Number of volumes     : ", mesh.NbVolumes())
-    print("Number of tetrahedrons: ", mesh.NbTetras())
-else:
-    print("probleme when computing the mesh")
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_box_tetra.py b/src/SMESH_SWIG/SMESH_box_tetra.py
deleted file mode 100644 (file)
index 27565e6..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# Tetrahedrization of a simple box. Hypothesis and algorithms for
-# the mesh generation are global
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# ---- define a box
-
-box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
-
-idbox = geompy.addToStudy(box, "box")
-
-print("Analysis of the geometry box :")
-subShellList = geompy.SubShapeAll(box, geompy.ShapeType["SHELL"])
-subFaceList  = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
-subEdgeList  = geompy.SubShapeAll(box, geompy.ShapeType["EDGE"])
-
-print("number of Shells in box : ", len(subShellList))
-print("number of Faces  in box : ", len(subFaceList))
-print("number of Edges  in box : ", len(subEdgeList))
-
-
-### ---------------------------- SMESH --------------------------------------
-
-# ---- init a Mesh with the box
-
-mesh = smesh.Mesh(box, "MeshBox")
-
-# ---- set Hypothesis and Algorithm
-
-print("-------------------------- NumberOfSegments")
-numberOfSegments = 10
-
-regular1D = mesh.Segment()
-hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
-print(hypNbSeg.GetName())
-print(hypNbSeg.GetId())
-print(hypNbSeg.GetNumberOfSegments())
-smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
-
-print("-------------------------- MaxElementArea")
-
-maxElementArea = 500
-
-mefisto2D = mesh.Triangle()
-hypArea = mefisto2D.MaxElementArea(maxElementArea)
-print(hypArea.GetName())
-print(hypArea.GetId())
-print(hypArea.GetMaxElementArea())
-smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
-
-print("-------------------------- MaxElementVolume")
-
-maxElementVolume = 500
-
-netgen3D = mesh.Tetrahedron(smeshBuilder.NETGEN)
-hypVolume = netgen3D.MaxElementVolume(maxElementVolume)
-print(hypVolume.GetName())
-print(hypVolume.GetId())
-print(hypVolume.GetMaxElementVolume())
-smesh.SetName(hypVolume, "MaxElementVolume_" + str(maxElementVolume))
-
-print("-------------------------- compute the mesh of the box")
-ret = mesh.Compute()
-print(ret)
-if ret != 0:
-    log = mesh.GetLog(0) # no erase trace
-    # for linelog in log:
-    #     print(linelog)
-    print("Information about the MeshBox:")
-    print("Number of nodes       : ", mesh.NbNodes())
-    print("Number of edges       : ", mesh.NbEdges())
-    print("Number of faces       : ", mesh.NbFaces())
-    print("Number of triangles   : ", mesh.NbTriangles())
-    print("Number of volumes     : ", mesh.NbVolumes())
-    print("Number of tetrahedrons: ", mesh.NbTetras())
-else:
-    print("probleme when computing the mesh")
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_controls.py b/src/SMESH_SWIG/SMESH_controls.py
deleted file mode 100644 (file)
index 8ffdb87..0000000
+++ /dev/null
@@ -1,144 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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_control.py
-#  Author : Sergey LITONIN
-#  Module : SMESH
-#
-import salome
-import SMESH_mechanic
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-mesh = SMESH_mechanic.mesh
-
-# ---- Criterion : AREA > 100
-
-# create group
-aGroup = mesh.MakeGroup("Area > 100", SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 100)
-
-# print result
-anIds = aGroup.GetIDs()
-print("Criterion: Area > 100 Nb = ", len( anIds ))
-#for i in range( len( anIds ) ):
-  #print anIds[ i ]
-
-
-# ----  Criterion : Taper > 3e-15
-
-# create group
-aGroup = mesh.MakeGroup("Taper > 3e-15", SMESH.FACE, SMESH.FT_Taper, SMESH.FT_MoreThan, 3e-15)
-
-# print result
-anIds = aGroup.GetIDs()
-print("Criterion: Taper > 3e-15 Nb = ", len( anIds ))
-#for i in range( len( anIds ) ):
-  #print anIds[ i ]
-
-
-# ----  Criterion : ASPECT RATIO > 1.3
-
-# create group
-aGroup = mesh.MakeGroup("Aspect Ratio > 1.3", SMESH.FACE, SMESH.FT_AspectRatio, SMESH.FT_MoreThan, 1.3)
-
-# print result
-anIds = aGroup.GetIDs()
-print("Criterion: Aspect Ratio > 1.3 Nb = ", len( anIds ))
-#for i in range( len( anIds ) ):
-  #print anIds[ i ]
-
-
-# ----  Criterion : MINIMUM ANGLE < 30
-
-# create group
-aGroup = mesh.MakeGroup("Minimum Angle < 30", SMESH.FACE, SMESH.FT_MinimumAngle, SMESH.FT_LessThan, 30)
-
-# print result
-anIds = aGroup.GetIDs()
-print("Criterion: Minimum Angle < 30 Nb = ", len( anIds ))
-#for i in range( len( anIds ) ):
-  #print anIds[ i ]
-
-
-# ---- Criterion : Warp > 2e-13
-
-# create group
-aGroup = mesh.MakeGroup("Warp > 2e-13", SMESH.FACE, SMESH.FT_Warping, SMESH.FT_MoreThan, 2e-13 )
-
-# print result
-anIds = aGroup.GetIDs()
-print("Criterion: Warp > 2e-13 Nb = ", len( anIds ))
-#for i in range( len( anIds ) ):
-  #print anIds[ i ]
-
-
-# ---- Criterion : Skew > 18
-
-# create group
-aGroup = mesh.MakeGroup("Skew > 18", SMESH.FACE, SMESH.FT_Skew, SMESH.FT_MoreThan, 18 )
-
-# print result
-anIds = aGroup.GetIDs()
-print("Criterion: Skew > 18 Nb = ", len( anIds ))
-#for i in range( len( anIds ) ):
-  #print anIds[ i ]
-
-
-# Criterion : Length > 10
-
-# create group
-aGroup = mesh.MakeGroup("Length > 10", SMESH.FACE, SMESH.FT_Length, SMESH.FT_MoreThan, 10 )
-
-# print result
-anIds = aGroup.GetIDs()
-print("Criterion: Length > 10 Nb = ", len( anIds ))
-#for i in range( len( anIds ) ):
-  #print anIds[ i ]
-
-
-# Criterion : Borders at multi-connections = 2
-
-# create group
-aGroup = mesh.MakeGroup("Borders at multi-connections = 2", SMESH.EDGE, SMESH.FT_MultiConnection, SMESH.FT_EqualTo, 2)
-
-# print result
-anIds = aGroup.GetIDs()
-print("Criterion: Borders at multi-connections = 2 Nb = ", len( anIds ))
-#for i in range( len( anIds ) ):
-  #print anIds[ i ]
-
-
-# Criterion : Element Diameter 2D > 10
-
-# create group
-aGroup = mesh.MakeGroup("Element Diameter 2D > 10", SMESH.FACE, SMESH.FT_MaxElementLength2D, SMESH.FT_MoreThan, 10 )
-
-# print result
-anIds = aGroup.GetIDs()
-print("Criterion: Element Diameter 2D > 10 Nb = ", len( anIds ))
-#for i in range( len( anIds ) ):
-  #print anIds[ i ]
-
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_demo_hexa2_upd.py b/src/SMESH_SWIG/SMESH_demo_hexa2_upd.py
deleted file mode 100644 (file)
index d3b6fc0..0000000
+++ /dev/null
@@ -1,200 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-#==============================================================================
-#  Info.
-#  Bug (from script, bug)   : SMESH_demo_hexa2_upd.py, PAL6781
-#  Modified                 : 25/11/2004
-#  Author                   : Kovaltchuk Alexey
-#  Project                  : PAL/SALOME
-#==============================================================================
-# Tetrahedrization of a geometry (box minus a inner cylinder).
-# Hypothesis and algorithms for the mesh generation are not global:
-# the mesh of some edges is thinner
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-import math
-
-
-# -----------------------------------------------------------------------------
-
-ShapeTypeShell     = 3
-ShapeTypeFace      = 4
-ShapeTypeEdge      = 6
-
-a = math.sqrt(2.)/4.
-ma = - a
-zero = 0.
-un = 1.
-mun= - un
-demi = 1./2.
-
-Orig = geompy.MakeVertex(zero,zero,zero)
-P0 = geompy.MakeVertex(a,a,zero)
-P1 = geompy.MakeVertex(zero,demi,zero)
-P2 = geompy.MakeVertex(ma,a,zero)
-P3 = geompy.MakeVertex(mun,un,zero)
-P4 = geompy.MakeVertex(un,un,zero)
-P5 = geompy.MakeVertex(zero,zero,un)
-
-arc = geompy.MakeArc(P0,P1,P2)
-e1 = geompy.MakeEdge(P2,P3)
-e2 = geompy.MakeEdge(P3,P4)
-e3 = geompy.MakeEdge(P4,P0)
-
-list = []
-list.append(arc)
-list.append(e1)
-list.append(e2)
-list.append(e3)
-
-wire = geompy.MakeWire(list)
-face = geompy.MakeFace(wire,1)
-
-dir = geompy.MakeVector(Orig,P5)
-vol1 = geompy.MakePipe(face,dir)
-
-angle = math.pi/2.
-#dir = geom.MakeVector(Orig,P5)
-vol2 = geompy.MakeRotation(vol1,dir,angle)
-
-vol3 = geompy.MakeRotation(vol2,dir,angle)
-
-vol4 = geompy.MakeRotation(vol3,dir,angle)
-
-list = []
-list.append(vol1)
-list.append(vol2)
-list.append(vol3)
-list.append(vol4)
-
-volComp = geompy.MakeCompound(list)
-
-tol3d = 1.e-3
-vol = geompy.MakeGlueFaces(volComp,tol3d)
-idVol = geompy.addToStudy(vol,"volume")
-
-print("Analysis of the final volume:")
-subShellList = geompy.SubShapeAllSorted(vol,ShapeTypeShell)
-subFaceList = geompy.SubShapeAllSorted(vol,ShapeTypeFace)
-subEdgeList = geompy.SubShapeAllSorted(vol,ShapeTypeEdge)
-
-print("number of Shells in the volume : ",len(subShellList))
-print("number of Faces in the volume : ",len(subFaceList))
-print("number of Edges in the volume : ",len(subEdgeList))
-
-idSubEdge = []
-for k in range(len(subEdgeList)):
-    idSubEdge.append(geompy.addToStudyInFather(vol,subEdgeList[k],"SubEdge"+str(k)))
-
-edgeZ = []
-edgeZ.append(subEdgeList[0])
-edgeZ.append(subEdgeList[3])
-edgeZ.append(subEdgeList[10])
-edgeZ.append(subEdgeList[11])
-edgeZ.append(subEdgeList[20])
-edgeZ.append(subEdgeList[21])
-edgeZ.append(subEdgeList[28])
-edgeZ.append(subEdgeList[31])
-
-idEdgeZ = []
-for i in range(8):
-    idEdgeZ.append(geompy.addToStudyInFather(vol,edgeZ[i],"EdgeZ"+str(i+1)))
-
-### ---------------------------- SMESH --------------------------------------
-smesh.UpdateStudy()
-
-# ---- init a Mesh with the volume
-
-mesh = smesh.Mesh(vol, "meshVolume")
-
-# ---- set Hypothesis and Algorithm to main shape
-
-print("-------------------------- NumberOfSegments the global one")
-
-numberOfSegments = 10
-
-regular1D = mesh.Segment()
-regular1D.SetName("Wire Discretisation")
-hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
-print(hypNbSeg.GetName())
-print(hypNbSeg.GetId())
-print(hypNbSeg.GetNumberOfSegments())
-smesh.SetName(hypNbSeg, "NumberOfSegments")
-
-
-print("-------------------------- Quadrangle_2D")
-
-quad2D=mesh.Quadrangle()
-quad2D.SetName("Quadrangle_2D")
-
-print("-------------------------- Hexa_3D")
-
-hexa3D=mesh.Hexahedron()
-hexa3D.SetName("Hexa_3D")
-
-
-print("-------------------------- NumberOfSegments in the Z direction")
-
-numberOfSegmentsZ = 40
-
-for i in range(8):
-    print("-------------------------- add hypothesis to edge in the Z directions", (i+1))
-
-    algo = mesh.Segment(edgeZ[i])
-    hyp = algo.NumberOfSegments(numberOfSegmentsZ)
-    smesh.SetName(hyp, "NumberOfSegmentsZ")
-    smesh.SetName(algo.GetSubMesh(), "SubMeshEdgeZ_"+str(i+1))
-  
-
-salome.sg.updateObjBrowser()
-
-print("-------------------------- compute the mesh of the volume")
-
-ret=mesh.Compute()
-
-print(ret)
-if ret != 0:
-##    log=mesh.GetLog(0) # no erase trace
-##    for linelog in log:
-##        print linelog
-    print("Information about the MeshBox :")
-    print("Number of nodes       : ", mesh.NbNodes())
-    print("Number of edges       : ", mesh.NbEdges())
-    print("Number of faces       : ", mesh.NbFaces())
-    print("Number of triangles   : ", mesh.NbTriangles())
-    print("Number of volumes     : ", mesh.NbVolumes())
-    print("Number of tetrahedrons: ", mesh.NbTetras())
-else:
-    print("problem when Computing the mesh")
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_fixation.py b/src/SMESH_SWIG/SMESH_fixation.py
deleted file mode 100644 (file)
index 36146d3..0000000
+++ /dev/null
@@ -1,300 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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_fix_volute.py
-#  Author : Paul RASCLE, EDF
-#  Module : SMESH
-#  $Header$
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import math
-
-# -----------------------------------------------------------------------------
-
-def MakeFace(lstEdges) :
-    """
-    Create a planar face from 4 edges
-    """
-    wire = geompy.MakeWire(lstEdges)
-    face = geompy.MakeFace(wire, 1)
-    return face
-
-# -----------------------------------------------------------------------------
-
-# ---- dimensions
-
-##longueurPlq  = 0.686
-##largeurPlq   = 0.573
-##epaisseurPlq = 0.150
-
-##hauteurFlanc   = 0.380
-##epaisseurFlanc = 0.112
-##rayonConge   = 0.150 - epaisseurFlanc
-
-##epaisseurFond = 0.162
-##rayonTrou = 0.075
-##posAxeTrou = hauteurFlanc -(0.180 + rayonTrou)
-##marge = 0.01
-##tol3d = 1.e-5
-
-longueurPlq  = 686
-largeurPlq   = 573
-epaisseurPlq = 150
-
-hauteurFlanc   = 380
-epaisseurFlanc = 112
-rayonConge   = 150 - epaisseurFlanc
-
-epaisseurFond = 162
-rayonTrou = 75
-posAxeTrou = hauteurFlanc - (180 + rayonTrou)
-marge = 10
-tol3d = 1.e-3
-
-# ---- points, directions de base
-
-p0 = geompy.MakeVertex(0., 0., 0.)
-
-vx = geompy.MakeVectorDXDYDZ(100., 0., 0.)
-vy = geompy.MakeVectorDXDYDZ(0., 100., 0.)
-vz = geompy.MakeVectorDXDYDZ(0., 0., 100.)
-
-# ---- ellipse du flanc
-
-he = hauteurFlanc - 2*rayonConge
-re = 0.5*(largeurPlq - epaisseurFond) - rayonConge
-sine = re/he
-cose = math.sqrt(1. - sine*sine)
-
-ve = geompy.MakeVectorDXDYDZ(sine, 0., cose)
-cyl0 = geompy.MakeCylinder(p0, ve, re, 2*he)
-cyl1 = geompy.MakeRotation(cyl0, ve, 0.5)
-cyle = geompy.MakeTranslation(cyl1, -marge*sine, 0., -marge*cose)
-
-pbe = geompy.MakeVertex(3*he, -2*re, 3*he)
-boxe = geompy.MakeBoxTwoPnt(p0, pbe)
-
-cylcoup = geompy.MakeBoolean(cyle, boxe, 2)
-
-aretes = []
-aretes = geompy.SubShapeAllSorted(cylcoup, geompy.ShapeType["EDGE"])
-
-shape = geompy.MakeCopy(aretes[0])
-aShape = geompy.MakeTranslation(shape, 0., rayonConge + re, epaisseurPlq + 2*rayonConge)
-
-
-# -----------------------------------------------------------------------------
-# ---- decoupage de la piece en volumes a 6 faces de 4 cotes
-# -----------------------------------------------------------------------------
-
-# ---- cotes x
-
-x0  = 0.
-x0h = rayonConge
-x1  = rayonConge + epaisseurFlanc
-xc  = longueurPlq/2
-x2  = longueurPlq - rayonConge - epaisseurFlanc
-x3h = longueurPlq - rayonConge
-x3  = longueurPlq
-
-# ---- cotes y
-
-y0  = 0.
-y0h = rayonConge
-y1  = largeurPlq - epaisseurFond
-y1m = y1 - marge
-y2  = largeurPlq
-y2p = largeurPlq + marge
-
-# ---- cotes z
-
-z0  = 0.
-z1m = epaisseurPlq - marge
-z1  = epaisseurPlq
-z2  = epaisseurPlq + rayonConge
-z3  = epaisseurPlq + 2*rayonConge
-z4  = epaisseurPlq + hauteurFlanc
-z4p = epaisseurPlq + hauteurFlanc + marge
-
-zc  = epaisseurPlq + posAxeTrou
-zc2 = epaisseurPlq + (posAxeTrou - rayonTrou)/3
-zc3 = epaisseurPlq + 2*(posAxeTrou - rayonTrou)/3
-
-# ---- decoupe du fond
-
-p11 = geompy.MakeVertex(x1, y1m, z1)
-p12 = geompy.MakeVertex(x1, y1m, z2)
-p13 = geompy.MakeVertex(x1, y1m, z3)
-p14 = geompy.MakeVertex(x1, y1m, z4)
-pc1 = geompy.MakeVertex(xc, y1m, z1)
-pc2 = geompy.MakeVertex(xc, y1m, zc2)
-pc3 = geompy.MakeVertex(xc, y1m, zc3)
-pcc = geompy.MakeVertex(xc, y1m, zc)
-pc4 = geompy.MakeVertex(xc, y1m, z4)
-p21 = geompy.MakeVertex(x2, y1m, z1)
-p22 = geompy.MakeVertex(x2, y1m, z2)
-p23 = geompy.MakeVertex(x2, y1m, z3)
-p24 = geompy.MakeVertex(x2, y1m, z4)
-pcf = geompy.MakeVertex(xc, y2p, zc)
-
-arc2 = geompy.MakeArc(p12,pc2,p22)
-arc3 = geompy.MakeArc(p13,pc3,p23)
-
-segz1  = geompy.MakeVector(p11,p21)
-segz41 = geompy.MakeVector(p14,pc4)
-segz42 = geompy.MakeVector(pc4,p24)
-segx11 = geompy.MakeVector(p11,p12)
-segx12 = geompy.MakeVector(p12,p13)
-segx13 = geompy.MakeVector(p13,p14)
-segxc2 = geompy.MakeVector(pc1,pc2)
-segxc3 = geompy.MakeVector(pc2,pc3)
-segxc4 = geompy.MakeVector(pcc,pc4)
-segx21 = geompy.MakeVector(p21,p22)
-segx22 = geompy.MakeVector(p22,p23)
-segx23 = geompy.MakeVector(p23,p24)
-segx1c1 = geompy.MakeVector(p13,pcc)
-segx1c2 = geompy.MakeVector(p14,pcc)
-segx2c1 = geompy.MakeVector(p23,pcc)
-segx2c2 = geompy.MakeVector(p24,pcc)
-
-facef = []
-facef.append(MakeFace([segx13,segx1c2,segx1c1]))
-facef.append(MakeFace([segx23,segx2c2,segx2c1]))
-facef.append(MakeFace([segx2c2,segxc4,segz42]))
-facef.append(MakeFace([segx1c2,segz41,segxc4]))
-facef.append(MakeFace([segx1c1,arc3,segx2c1]))
-facef.append(MakeFace([segx12,arc2,segx22,arc3]))
-facef.append(MakeFace([segx11,segz1,segx21,arc2]))
-
-vcccf = geompy.MakeVector(pcc, pcf)
-hcccf = y2p - y1m
-decf = []
-for face in facef:
-    decf.append(geompy.MakePrismVecH(face,vcccf,hcccf))
-
-pc  = geompy.MakeVertex(xc, 0., zc)
-py2 = geompy.MakeVertex(xc, y2, zc)
-axeCyl = geompy.MakeVector(pc, py2)
-
-cylFond = geompy.MakeCylinder(pc, vy, rayonTrou, 1.1*largeurPlq)
-cylFond2 = geompy.MakeRotation(cylFond, axeCyl, math.pi)
-
-fondec = []
-for id in (0,1,2,3):
-    fondec.append(geompy.MakeBoolean(decf[id], cylFond2, 2))
-fondec.append(geompy.MakeBoolean(decf[4], cylFond, 2))
-for id in (5,6):
-    fondec.append(decf[id])
-
-p_xcy2pz4p = geompy.MakeVertex(xc,y2p,z4p)
-p_x3y2pz4p = geompy.MakeVertex(x3,y2p,z4p)
-pxc = geompy.MakeVertex(xc,y0,z0)
-bcut1 = geompy.MakeBoxTwoPnt(p0, p_xcy2pz4p)
-bcut2 = geompy.MakeBoxTwoPnt(pxc, p_x3y2pz4p)
-
-fondec2 = []
-for id in (0,1,2,3):
-    fondec2.append(fondec[id])
-for id in (4,5,6):
-    fondec2.append(geompy.MakeBoolean(fondec[id], bcut1, 1))
-    fondec2.append(geompy.MakeBoolean(fondec[id], bcut2, 1))
-
-# ----- autres blocs de decoupe
-
-bcong1 = geompy.MakeBox(x0,y0,z1, x1,y1,z2)
-bcong2 = geompy.MakeBox(x0,y1,z1, x1,y2,z2)
-bcong3 = geompy.MakeBox(x2,y0,z1, x3,y1,z2)
-bcong4 = geompy.MakeBox(x2,y1,z1, x3,y2,z2)
-
-pcylx0 = geompy.MakeVertex(0., -marge, z2)
-pcylx3 = geompy.MakeVertex(longueurPlq, -marge, z2)
-pcyly0 = geompy.MakeVertex(-marge, 0., z2)
-
-cylcongx0 = geompy.MakeCylinder(pcylx0, vy, rayonConge, largeurPlq + 2*marge)
-cylcongx3 = geompy.MakeCylinder(pcylx3, vy, rayonConge, largeurPlq + 2*marge)
-cylcongy0 = geompy.MakeCylinder(pcyly0, vx, rayonConge, longueurPlq + 2*marge)
-
-bcong1 = geompy.MakeBoolean(bcong1,cylcongx0,2)
-bcong2 = geompy.MakeBoolean(bcong2,cylcongx0,2)
-bcong1 = geompy.MakeBoolean(bcong1,cylcongy0,2)
-#NRI : inverse order of BOP
-bcong3 = geompy.MakeBoolean(bcong3,cylcongy0,2)
-bcong3 = geompy.MakeBoolean(bcong3,cylcongx3,2)
-bcong4 = geompy.MakeBoolean(bcong4,cylcongx3,2)
-
-pf1 = geompy.MakeVertex(0., y0h, z3)
-pf2 = geompy.MakeVertex(0., y1, z3)
-pf3 = geompy.MakeVertex(0., y1, z4)
-pf4 = geompy.MakeVertex(0., 0.5*(largeurPlq - epaisseurFond) , z4)
-
-vf1 = geompy.MakeEdge(pf1, pf2)
-vf2 = geompy.MakeEdge(pf2, pf3)
-vf3 = geompy.MakeEdge(pf3, pf4)
-
-faceFlanc = MakeFace([vf1,vf2,vf3,aShape])
-
-flanc1 = geompy.MakePrismVecH(faceFlanc, vx, epaisseurFlanc)
-flanc2 = geompy.MakeCopy(flanc1)
-flanc1 = geompy.MakeTranslation(flanc1, rayonConge, 0., 0.)
-flanc2 = geompy.MakeTranslation(flanc2, longueurPlq - rayonConge - epaisseurFlanc, 0., 0.)
-
-# ---- constitution et decoupe des blocs
-boxfond2 = geompy.MakeBox(x0, y1, z0, x3, y2, z4p)
-
-blocs = []
-for dec in fondec2:
-    blocs.append(geompy.MakeBoolean(boxfond2, dec, 1))
-
-blocs.append(geompy.MakeBox(x0,y1,z0, x1,y2,z1))
-blocs.append(geompy.MakeBox(x1,y1,z0, xc,y2,z1))
-blocs.append(geompy.MakeBox(xc,y1,z0, x2,y2,z1))
-blocs.append(geompy.MakeBox(x2,y1,z0, x3,y2,z1))
-blocs.append(geompy.MakeBox(x0,y0,z0, x1,y1,z1))
-blocs.append(geompy.MakeBox(x1,y0,z0, xc,y1,z1))
-blocs.append(geompy.MakeBox(xc,y0,z0, x2,y1,z1))
-blocs.append(geompy.MakeBox(x2,y0,z0, x3,y1,z1))
-blocs.append(bcong2)
-blocs.append(bcong4)
-blocs.append(bcong1)
-blocs.append(bcong3)
-blocs.append(geompy.MakeBox(x0h,y1, z2, x1, y2, z3))
-blocs.append(geompy.MakeBox(x2, y1, z2, x3h,y2, z3))
-blocs.append(geompy.MakeBox(x0h,y0h,z2, x1, y1, z3))
-blocs.append(geompy.MakeBox(x2, y0h,z2, x3h,y1, z3))
-blocs.append(geompy.MakeBox(x0h,y1, z3, x1, y2, z4))
-blocs.append(geompy.MakeBox(x2, y1, z3, x3h,y2, z4))
-blocs.append(flanc1)
-blocs.append(flanc2)
-
-compbloc = geompy.MakeCompound(blocs)
-idcomp = geompy.addToStudy(compbloc, "compbloc")
-
-# ---- eliminer les faces en double, solid-->shell
-
-compshell = geompy.MakeGlueFaces(compbloc,tol3d)
-idcomp = geompy.addToStudy(compshell, "compshell")
diff --git a/src/SMESH_SWIG/SMESH_fixation_hexa.py b/src/SMESH_SWIG/SMESH_fixation_hexa.py
deleted file mode 100644 (file)
index 7e7d1e8..0000000
+++ /dev/null
@@ -1,102 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# Hexahedrization of the geometry generated by the Python script
-# SMESH_fixation.py
-# Hypothesis and algorithms for the mesh generation are global
-#
-import salome
-import SMESH_fixation
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-compshell = SMESH_fixation.compshell
-idcomp = SMESH_fixation.idcomp
-geompy = SMESH_fixation.geompy
-salome = SMESH_fixation.salome
-
-print("Analysis of the geometry to be meshed :")
-subShellList = geompy.SubShapeAll(compshell, geompy.ShapeType["SHELL"])
-subFaceList  = geompy.SubShapeAll(compshell, geompy.ShapeType["FACE"])
-subEdgeList  = geompy.SubShapeAll(compshell, geompy.ShapeType["EDGE"])
-
-print("number of Shells in compshell : ", len(subShellList))
-print("number of Faces  in compshell : ", len(subFaceList))
-print("number of Edges  in compshell : ", len(subEdgeList))
-
-status = geompy.CheckShape(compshell)
-print(" check status ", status)
-
-### ---------------------------- SMESH --------------------------------------
-smesh.UpdateStudy()
-
-# ---- init a Mesh with the compshell
-shape_mesh = salome.IDToObject( idcomp  )
-
-mesh = smesh.Mesh(shape_mesh, "MeshCompShell")
-
-
-# ---- set Hypothesis and Algorithm
-
-print("-------------------------- NumberOfSegments")
-
-numberOfSegments = 5
-
-regular1D = mesh.Segment()
-regular1D.SetName("Wire Discretisation")
-hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
-print(hypNbSeg.GetName())
-print(hypNbSeg.GetId())
-print(hypNbSeg.GetNumberOfSegments())
-smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
-
-print("-------------------------- Quadrangle_2D")
-
-quad2D = mesh.Quadrangle()
-quad2D.SetName("Quadrangle_2D")
-
-print("-------------------------- Hexa_3D")
-
-hexa3D = mesh.Hexahedron()
-hexa3D.SetName("Hexa_3D")
-
-print("-------------------------- compute compshell")
-ret = mesh.Compute()
-print(ret)
-if ret != 0:
-    log = mesh.GetLog(0) # no erase trace
-    # for linelog in log:
-    #     print(linelog)
-    print("Information about the MeshcompShel:")
-    print("Number of nodes       : ", mesh.NbNodes())
-    print("Number of edges       : ", mesh.NbEdges())
-    print("Number of faces       : ", mesh.NbFaces())
-    print("Number of quadrangles : ", mesh.NbQuadrangles())
-    print("Number of volumes     : ", mesh.NbVolumes())
-    print("Number of hexahedrons : ", mesh.NbHexas())
-else:
-    print("problem when Computing the mesh")
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_fixation_netgen.py b/src/SMESH_SWIG/SMESH_fixation_netgen.py
deleted file mode 100644 (file)
index 477c211..0000000
+++ /dev/null
@@ -1,79 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# Tetrahedrization of the geometry generated by the Python script
-# SMESH_fixation.py
-# The new Netgen algorithm is used that discretizes baoundaries itself
-#
-import salome
-import SMESH_fixation
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-compshell = SMESH_fixation.compshell
-idcomp = SMESH_fixation.idcomp
-geompy = SMESH_fixation.geompy
-salome = SMESH_fixation.salome
-
-print("Analysis of the geometry to be meshed :")
-subShellList = geompy.SubShapeAll(compshell, geompy.ShapeType["SHELL"])
-subFaceList  = geompy.SubShapeAll(compshell, geompy.ShapeType["FACE"])
-subEdgeList  = geompy.SubShapeAll(compshell, geompy.ShapeType["EDGE"])
-
-print("number of Shells in compshell : ", len(subShellList))
-print("number of Faces  in compshell : ", len(subFaceList))
-print("number of Edges  in compshell : ", len(subEdgeList))
-
-status = geompy.CheckShape(compshell)
-print(" check status ", status)
-
-### ---------------------------- SMESH --------------------------------------
-smesh.UpdateStudy()
-
-print("-------------------------- create Mesh, algorithm, hypothesis")
-
-mesh = smesh.Mesh(compshell, "MeshcompShel");
-netgen = mesh.Tetrahedron(smeshBuilder.FULL_NETGEN)
-netgen.SetMaxSize( 50 )
-#netgen.SetSecondOrder( 0 )
-netgen.SetFineness( smeshBuilder.Fine )
-#netgen.SetOptimize( 1 )
-
-print("-------------------------- compute mesh")
-ret = mesh.Compute()
-print(ret)
-if ret != 0:
-    print("Information about the MeshcompShel:")
-    print("Number of nodes        : ", mesh.GetMesh().NbNodes())
-    print("Number of edges        : ", mesh.GetMesh().NbEdges())
-    print("Number of faces        : ", mesh.GetMesh().NbFaces())
-    print("Number of triangles    : ", mesh.GetMesh().NbTriangles())
-    print("Number of volumes      : ", mesh.GetMesh().NbVolumes())
-    print("Number of tetrahedrons : ", mesh.GetMesh().NbTetras())
-    
-else:
-    print("problem when computing the mesh")
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_fixation_tetra.py b/src/SMESH_SWIG/SMESH_fixation_tetra.py
deleted file mode 100644 (file)
index 40bf166..0000000
+++ /dev/null
@@ -1,126 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# Tetrahedrization of the geometry generated by the Python script
-# SMESH_fixation.py
-# Hypothesis and algorithms for the mesh generation are global
-#
-import salome
-import SMESH_fixation
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-compshell = SMESH_fixation.compshell
-idcomp = SMESH_fixation.idcomp
-geompy = SMESH_fixation.geompy
-salome = SMESH_fixation.salome
-
-print("Analysis of the geometry to be meshed :")
-subShellList = geompy.SubShapeAll(compshell, geompy.ShapeType["SHELL"])
-subFaceList  = geompy.SubShapeAll(compshell, geompy.ShapeType["FACE"])
-subEdgeList  = geompy.SubShapeAll(compshell, geompy.ShapeType["EDGE"])
-
-print("number of Shells in compshell : ", len(subShellList))
-print("number of Faces  in compshell : ", len(subFaceList))
-print("number of Edges  in compshell : ", len(subEdgeList))
-
-status = geompy.CheckShape(compshell)
-print(" check status ", status)
-
-### ---------------------------- SMESH --------------------------------------
-smesh.UpdateStudy()
-
-# ---- init a Mesh with the compshell
-
-mesh = smesh.Mesh(compshell, "MeshcompShell")
-
-
-# ---- set Hypothesis and Algorithm
-
-print("-------------------------- NumberOfSegments")
-
-numberOfSegments = 5
-
-regular1D = mesh.Segment()
-regular1D.SetName("Wire Discretisation")
-hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
-print(hypNbSeg.GetName())
-print(hypNbSeg.GetId())
-print(hypNbSeg.GetNumberOfSegments())
-smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
-
-## print "-------------------------- MaxElementArea"
-
-## maxElementArea = 80
-
-## mefisto2D = mesh.Triangle()
-## mefisto2D.SetName("MEFISTO_2D")
-## hypArea = mefisto2D.MaxElementArea(maxElementArea)
-## print hypArea.GetName()
-## print hypArea.GetId()
-## print hypArea.GetMaxElementArea()
-## smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
-
-print("-------------------------- LengthFromEdges")
-
-mefisto2D = mesh.Triangle()
-mefisto2D.SetName("MEFISTO_2D")
-hypLengthFromEdges = mefisto2D.LengthFromEdges()
-print(hypLengthFromEdges.GetName())
-print(hypLengthFromEdges.GetId())
-smesh.SetName(hypLengthFromEdges, "LengthFromEdges")
-
-
-print("-------------------------- MaxElementVolume")
-
-maxElementVolume = 1000
-
-netgen3D = mesh.Tetrahedron(smeshBuilder.NETGEN)
-netgen3D.SetName("NETGEN_3D")
-hypVolume = netgen3D.MaxElementVolume(maxElementVolume)
-print(hypVolume.GetName())
-print(hypVolume.GetId())
-print(hypVolume.GetMaxElementVolume())
-smesh.SetName(hypVolume, "MaxElementVolume_" + str(maxElementVolume))
-
-print("-------------------------- compute compshell")
-ret = mesh.Compute(mesh)
-print(ret)
-if ret != 0:
-    log = mesh.GetLog(0) # no erase trace
-    # for linelog in log:
-    #     print(linelog)
-    print("Information about the MeshcompShel:")
-    print("Number of nodes        : ", mesh.NbNodes())
-    print("Number of edges        : ", mesh.NbEdges())
-    print("Number of faces        : ", mesh.NbFaces())
-    print("Number of triangles    : ", mesh.NbTriangles())
-    print("Number of volumes      : ", mesh.NbVolumes())
-    print("Number of tetrahedrons : ", mesh.NbTetras())
-    
-else:
-    print("problem when computing the mesh")
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_flight_skin.py b/src/SMESH_SWIG/SMESH_flight_skin.py
deleted file mode 100644 (file)
index 766b128..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# Triangulation of the skin of the geometry from a Brep representing a plane
-# Hypothesis and algorithms for the mesh generation are global
-#
-import os
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-
-# ---------------------------- GEOM --------------------------------------
-
-# import a BRep
-#before running this script, please be sure about
-#the path the file fileName
-
-filePath = os.environ["DATA_DIR"]
-filePath = filePath + "/Shapes/Brep/"
-
-filename = "flight_solid.brep"
-filename = filePath + filename
-
-shape = geompy.Import(filename, "BREP")
-idShape = geompy.addToStudy(shape, "flight")
-
-print("Analysis of the geometry flight :")
-subShellList = geompy.SubShapeAll(shape, geompy.ShapeType["SHELL"])
-subFaceList  = geompy.SubShapeAll(shape, geompy.ShapeType["FACE"])
-subEdgeList  = geompy.SubShapeAll(shape, geompy.ShapeType["EDGE"])
-
-print("number of Shells in flight : ", len(subShellList))
-print("number of Faces  in flight : ", len(subFaceList))
-print("number of Edges  in flight : ", len(subEdgeList))
-
-
-### ---------------------------- SMESH --------------------------------------
-smesh.UpdateStudy()
-
-# ---- init a Mesh with the shell
-shape_mesh = salome.IDToObject( idShape )
-
-mesh = smesh.Mesh(shape_mesh, "MeshFlight")
-
-
-# ---- set Hypothesis and Algorithm
-
-print("-------------------------- LocalLength")
-
-lengthOfSegments = 0.3
-
-regular1D = mesh.Segment()
-hypLength = regular1D.LocalLength(lengthOfSegments)
-print(hypLength.GetName())
-print(hypLength.GetId())
-print(hypLength.GetLength())
-smesh.SetName(hypLength, "LocalLength_" + str(lengthOfSegments))
-
-print("-------------------------- LengthFromEdges")
-
-mefisto2D = mesh.Triangle()
-hypLengthFromEdge = mefisto2D.LengthFromEdges()
-print(hypLengthFromEdge.GetName())
-print(hypLengthFromEdge.GetId())
-smesh.SetName(hypLengthFromEdge,"LengthFromEdge")
-
-print("-------------------------- compute the skin flight")
-ret = mesh.Compute()
-print(ret)
-if ret != 0:
-    log = mesh.GetLog(0) # no erase trace
-    # for linelog in log:
-    #     print(linelog)
-    print("Information about the Mesh_mechanic_tetra:")
-    print("Number of nodes      : ", mesh.NbNodes())
-    print("Number of edges      : ", mesh.NbEdges())
-    print("Number of faces      : ", mesh.NbFaces())
-    print("Number of triangles  : ", mesh.NbTriangles())
-    print("Number of volumes    : ", mesh.NbVolumes())
-else:
-    print("probleme when computing the mesh")
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_freebord.py b/src/SMESH_SWIG/SMESH_freebord.py
deleted file mode 100644 (file)
index daefe28..0000000
+++ /dev/null
@@ -1,78 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-
-# Create box without one plane
-
-box = geompy.MakeBox(0., 0., 0., 10., 20., 30.)
-subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
-
-FaceList  = []
-for i in range( 5 ):
-  FaceList.append( subShapeList[ i ] )
-
-aComp = geompy.MakeCompound( FaceList )
-aBox = geompy.Sew( aComp, 1. )
-idbox = geompy.addToStudy( aBox, "box" )
-
-aBox  = salome.IDToObject( idbox )
-
-# Create mesh
-smesh.UpdateStudy()
-
-mesh = smesh.Mesh(aBox, "Mesh_freebord")
-
-algoReg = mesh.Segment()
-hypNbSeg = algoReg.NumberOfSegments(5)
-
-algoMef = mesh.Triangle()
-hypArea = algoMef.MaxElementArea(20)
-
-
-mesh.Compute()
-
-
-# Criterion : Free edges. Create group.
-
-aCriterion = smesh.GetCriterion(SMESH.EDGE, SMESH.FT_FreeEdges)
-
-aGroup = mesh.MakeGroupByCriterion("Free edges", aCriterion)
-
-anIds = aGroup.GetIDs()
-
-# print result
-print("Criterion: Free edges Nb = ", len( anIds ))
-for i in range( len( anIds ) ):
-  print(anIds[ i ])
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_hexaedre.py b/src/SMESH_SWIG/SMESH_hexaedre.py
deleted file mode 100644 (file)
index 2ac5ac9..0000000
+++ /dev/null
@@ -1,101 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# -----------------------------------------------------------------------------
-
-p0 = geompy.MakeVertex(0., 0., 0.)
-px = geompy.MakeVertex(100., 0., 0.)
-py = geompy.MakeVertex(0., 100., 0.)
-pz = geompy.MakeVertex(0., 0., 100.)
-vx = geompy.MakeVector(p0, px)
-vy = geompy.MakeVector(p0, py)
-vz = geompy.MakeVector(p0, pz)
-
-sphereExt = geompy.MakeSphere(    0.,  0.,  0., 400.)
-sphereInt = geompy.MakeSphere(    0.,-50.,  0., 350.)
-sphereA   = geompy.MakeSphere( -400., 50., 50., 400.)
-sphereB   = geompy.MakeSphere(  350.,-50.,-50., 350.)
-ptcyle    = geompy.MakeVertex(0., -300., -450.)
-cylindre  = geompy.MakeCylinder(ptcyle,vz,500.,900.)
-
-vol1=geompy.MakeCut(sphereExt,sphereA)
-vol2=geompy.MakeCut(vol1,sphereB)
-vol3=geompy.MakeCut(vol2,cylindre)
-blob=geompy.MakeCut(vol3,sphereInt)
-blob=geompy.RemoveExtraEdges(blob)
-
-idblob = geompy.addToStudy(blob,"blob")
-
-edgeGroups = geompy.Propagate( blob )
-assert len( edgeGroups ) == 3
-
-salome.sg.updateObjBrowser()
-
-# -----------------------------------------------------------------------------
-
-print("-------------------------- mesh")
-smesh.UpdateStudy()
-
-# ---- define a mesh on the geom shape 'blob'
-mesh=smesh.Mesh(blob, "MeshBlob")
-
-# ---- assign global hypothesis and algorithms to mesh
-print("-------------------------- add hypothesis to mesh")
-algo1 = mesh.Segment()
-algo2 = mesh.Quadrangle()
-algo3 = mesh.Hexahedron()
-
-# ---- assign local hypothesis and algorithms to mesh
-for edges in edgeGroups: # loop on groups of logically parallel edges
-    length = geompy.BasicProperties( edges )[0]
-    if   length < 500:  nbSeg = 4
-    elif length < 2000: nbSeg = 10
-    else:               nbSeg = 15
-    algo = mesh.Segment( edges )
-    algo.NumberOfSegments( nbSeg )
-    pass
-
-# ---- compute mesh
-print("-------------------------- compute mesh")
-ok = mesh.Compute()
-if ok:
-    print("Information about the Mesh:")
-    print("Number of nodes       : ", mesh.NbNodes())
-    print("Number of edges       : ", mesh.NbEdges())
-    print("Number of faces       : ", mesh.NbFaces())
-    print("Number of quadrangles : ", mesh.NbQuadrangles())
-    print("Number of volumes     : ", mesh.NbVolumes())
-    print("Number of hexahedrons : ", mesh.NbHexas())
-else:
-    print("problem when Computing the mesh")
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_mechanic.py b/src/SMESH_SWIG/SMESH_mechanic.py
deleted file mode 100644 (file)
index 4744f3f..0000000
+++ /dev/null
@@ -1,191 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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_withHole.py
-#  Author : Lucien PIGNOLONI
-#  Module : SMESH
-#  $Header$
-#-------------------------------------------------------------------------
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-from salome.StdMeshers import StdMeshersBuilder
-
-# ---------------------------- GEOM --------------------------------------
-
-# ---- define contiguous arcs and segment to define a closed wire
-p1   = geompy.MakeVertex( 100.0,   0.0,  0.0 )
-p2   = geompy.MakeVertex(  50.0,  50.0,  0.0 )
-p3   = geompy.MakeVertex( 100.0, 100.0,  0.0 )
-arc1 = geompy.MakeArc( p1, p2, p3 )
-
-p4   = geompy.MakeVertex( 170.0, 100.0, 0.0 )
-seg1 = geompy.MakeVector( p3, p4 )
-
-p5   = geompy.MakeVertex( 200.0, 70.0, 0.0 )
-p6   = geompy.MakeVertex( 170.0, 40.0, 0.0 )
-arc2 = geompy.MakeArc( p4, p5, p6 )
-
-p7   = geompy.MakeVertex( 120.0, 30.0, 0.0 )
-arc3 = geompy.MakeArc( p6, p7, p1 )
-
-# ---- define a closed wire with arcs and segment
-List1 = []
-List1.append( arc1 )
-List1.append( seg1 )
-List1.append( arc2 )
-List1.append( arc3 )
-
-wire1 = geompy.MakeWire( List1 )
-Id_wire1 = geompy.addToStudy( wire1, "wire1" )
-
-# ---- define a planar face with wire
-WantPlanarFace = 1 #True
-face1 = geompy.MakeFace( wire1, WantPlanarFace )
-Id_face1 = geompy.addToStudy( face1, "face1" )
-
-# ---- create a shape by extrusion
-pO = geompy.MakeVertex( 0.0, 0.0,   0.0 )
-pz = geompy.MakeVertex( 0.0, 0.0, 100.0 )
-vz = geompy.MakeVector( pO, pz )
-
-prism1 = geompy.MakePrismVecH( face1, vz, 100.0 )
-Id_prism1 = geompy.addToStudy( prism1, "prism1" )
-
-# ---- create two cylinders
-pc1 = geompy.MakeVertex(  90.0, 50.0, -40.0 )
-pc2 = geompy.MakeVertex( 170.0, 70.0, -40.0 )
-
-radius = 20.0
-height = 180.0
-cyl1 = geompy.MakeCylinder( pc1, vz, radius, height )
-cyl2 = geompy.MakeCylinder( pc2, vz, radius, height )
-
-Id_Cyl1 = geompy.addToStudy( cyl1, "cyl1" )
-Id_Cyl2 = geompy.addToStudy( cyl2, "cyl2" )
-
-# ---- cut with cyl1
-shape = geompy.MakeBoolean( prism1, cyl1, 2 )
-
-# ---- fuse with cyl2 to obtain the final mechanic piece :)
-mechanic = geompy.MakeBoolean( shape, cyl2, 3 )
-Id_mechanic = geompy.addToStudy( mechanic, "mechanic" )
-
-# ---- explode on faces
-SubFaceL = geompy.SubShapeAllSorted(mechanic, geompy.ShapeType["FACE"])
-
-# ---- add a face sub-shape in study to be meshed different
-sub_face1 = SubFaceL[0]
-name      = geompy.SubShapeName( sub_face1, mechanic )
-
-Id_SubFace1 = geompy.addToStudyInFather( mechanic, sub_face1, name )
-
-# ---- add a face sub-shape in study to be meshed different
-sub_face2 = SubFaceL[4]
-name      = geompy.SubShapeName( sub_face2, mechanic )
-
-Id_SubFace2 = geompy.addToStudyInFather( mechanic, sub_face2, name )
-
-# ---- add a face sub-shape in study to be meshed different
-sub_face3 = SubFaceL[5]
-name      = geompy.SubShapeName( sub_face3, mechanic )
-
-Id_SubFace3 = geompy.addToStudyInFather( mechanic, sub_face3, name )
-
-# ---- add a face sub-shape in study to be meshed different
-sub_face4 = SubFaceL[10]
-name      = geompy.SubShapeName( sub_face4, mechanic )
-
-Id_SubFace4 = geompy.addToStudyInFather( mechanic, sub_face4, name )
-
-# ---------------------------- SMESH --------------------------------------
-smesh.UpdateStudy()
-
-# -- Init --
-shape_mesh = salome.IDToObject( Id_mechanic )
-
-mesh = smesh.Mesh(shape_mesh, "Mesh_mechanic")
-
-print("-------------------------- NumberOfSegments")
-
-numberOfSegment = 10
-
-algo = mesh.Segment()
-hypNbSeg = algo.NumberOfSegments(numberOfSegment)
-print(hypNbSeg.GetName())
-print(hypNbSeg.GetId())
-print(hypNbSeg.GetNumberOfSegments())
-smesh.SetName(hypNbSeg, "NumberOfSegments_10")
-
-print("-------------------------- MaxElementArea")
-
-maxElementArea = 25
-
-algo = mesh.Triangle()
-hypArea25 = algo.MaxElementArea(maxElementArea)
-print(hypArea25.GetName())
-print(hypArea25.GetId())
-print(hypArea25.GetMaxElementArea())
-smesh.SetName(hypArea25, "MaxElementArea_25")
-
-# Create submesh on sub_face1 - sub_face4
-# ---------------------------------------
-
-# Set 2D algorithm to submesh on sub_face1
-algo = mesh.Quadrangle(sub_face1)
-smesh.SetName(algo.GetSubMesh(), "SubMeshFace1")
-
-# Set 2D algorithm to submesh on sub_face2
-algo = mesh.Quadrangle(sub_face2)
-smesh.SetName(algo.GetSubMesh(), "SubMeshFace2")
-
-# Set 2D algorithm to submesh on sub_face3
-algo = mesh.Quadrangle(sub_face3)
-smesh.SetName(algo.GetSubMesh(), "SubMeshFace3")
-
-# Set 2D algorithm to submesh on sub_face4
-algo = mesh.Quadrangle(sub_face4)
-smesh.SetName(algo.GetSubMesh(), "SubMeshFace4")
-
-print("-------------------------- compute the mesh of the mechanic piece")
-
-mesh.Compute()
-
-print("Information about the Mesh_mechanic:")
-print("Number of nodes       : ", mesh.NbNodes())
-print("Number of edges       : ", mesh.NbEdges())
-print("Number of faces       : ", mesh.NbFaces())
-print("Number of triangles   : ", mesh.NbTriangles())
-print("Number of quadrangles : ", mesh.NbQuadrangles())
-print("Number of volumes     : ", mesh.NbVolumes())
-print("Number of tetrahedrons: ", mesh.NbTetras())
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_mechanic_editor.py b/src/SMESH_SWIG/SMESH_mechanic_editor.py
deleted file mode 100644 (file)
index fc09165..0000000
+++ /dev/null
@@ -1,237 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (C) 2007-2020  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_withHole.py
-#  Author : Lucien PIGNOLONI
-#  Module : SMESH
-#  $Header$
-#-------------------------------------------------------------------------
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# ---------------------------- GEOM --------------------------------------
-
-# ---- define contiguous arcs and segment to define a closed wire
-p1   = geompy.MakeVertex( 100.0,   0.0,  0.0 )
-p2   = geompy.MakeVertex(  50.0,  50.0,  0.0 )
-p3   = geompy.MakeVertex( 100.0, 100.0,  0.0 )
-arc1 = geompy.MakeArc( p1, p2, p3 )
-
-p4   = geompy.MakeVertex( 170.0, 100.0, 0.0 )
-seg1 = geompy.MakeVector( p3, p4 )
-
-p5   = geompy.MakeVertex( 200.0, 70.0, 0.0 )
-p6   = geompy.MakeVertex( 170.0, 40.0, 0.0 )
-arc2 = geompy.MakeArc( p4, p5, p6 )
-
-p7   = geompy.MakeVertex( 120.0, 30.0, 0.0 )
-arc3 = geompy.MakeArc( p6, p7, p1 )
-
-# ---- define a closed wire with arcs and segment
-List1 = []
-List1.append( arc1 )
-List1.append( seg1 )
-List1.append( arc2 )
-List1.append( arc3 )
-
-wire1 = geompy.MakeWire( List1 )
-Id_wire1 = geompy.addToStudy( wire1, "wire1" )
-
-# ---- define a planar face with wire
-WantPlanarFace = 1 #True
-face1 = geompy.MakeFace( wire1, WantPlanarFace )
-Id_face1 = geompy.addToStudy( face1, "face1" )
-
-# ---- create a shape by extrusion
-pO = geompy.MakeVertex( 0.0, 0.0,   0.0 )
-pz = geompy.MakeVertex( 0.0, 0.0, 100.0 )
-vz = geompy.MakeVector( pO, pz )
-
-prism1 = geompy.MakePrismVecH( face1, vz, 100.0 )
-Id_prism1 = geompy.addToStudy( prism1, "prism1" )
-
-# ---- create two cylinders
-pc1 = geompy.MakeVertex(  90.0, 50.0, -40.0 )
-pc2 = geompy.MakeVertex( 170.0, 70.0, -40.0 )
-
-radius = 20.0
-height = 180.0
-cyl1 = geompy.MakeCylinder( pc1, vz, radius, height )
-cyl2 = geompy.MakeCylinder( pc2, vz, radius, height )
-
-Id_Cyl1 = geompy.addToStudy( cyl1, "cyl1" )
-Id_Cyl2 = geompy.addToStudy( cyl2, "cyl2" )
-
-# ---- cut with cyl1
-shape = geompy.MakeBoolean( prism1, cyl1, 2 )
-
-# ---- fuse with cyl2 to obtain the final mechanic piece :)
-mechanic = geompy.MakeBoolean( shape, cyl2, 3 )
-Id_mechanic = geompy.addToStudy( mechanic, "mechanic" )
-
-# ---- explode on faces
-SubFaceL = geompy.SubShapeAllSorted(mechanic, geompy.ShapeType["FACE"])
-
-# ---- add a face sub-shape in study to be meshed different
-sub_face1 = SubFaceL[0]
-name      = geompy.SubShapeName( sub_face1, mechanic )
-
-Id_SubFace1 = geompy.addToStudyInFather( mechanic, sub_face1, name )
-
-# ---- add a face sub-shape in study to be meshed different
-sub_face2 = SubFaceL[4]
-name      = geompy.SubShapeName( sub_face2, mechanic )
-
-Id_SubFace2 = geompy.addToStudyInFather( mechanic, sub_face2, name )
-
-# ---- add a face sub-shape in study to be meshed different
-sub_face3 = SubFaceL[5]
-name      = geompy.SubShapeName( sub_face3, mechanic )
-
-Id_SubFace3 = geompy.addToStudyInFather( mechanic, sub_face3, name )
-
-# ---- add a face sub-shape in study to be meshed different
-sub_face4 = SubFaceL[10]
-name      = geompy.SubShapeName( sub_face4, mechanic )
-
-Id_SubFace4 = geompy.addToStudyInFather( mechanic, sub_face4, name )
-
-# ---------------------------- SMESH --------------------------------------
-
-# -- Init --
-shape_mesh = salome.IDToObject( Id_mechanic )
-
-mesh = smesh.Mesh(shape_mesh, "Mesh_mechanic")
-
-print("-------------------------- NumberOfSegments")
-
-numberOfSegment = 10
-
-algo = mesh.Segment()
-hypNbSeg = algo.NumberOfSegments(numberOfSegment)
-print(hypNbSeg.GetName())
-print(hypNbSeg.GetId())
-print(hypNbSeg.GetNumberOfSegments())
-smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegment))
-
-
-print("-------------------------- MaxElementArea")
-
-maxElementArea = 25
-
-algo = mesh.Triangle()
-hypArea25 = algo.MaxElementArea(maxElementArea)
-print(hypArea25.GetName())
-print(hypArea25.GetId())
-print(hypArea25.GetMaxElementArea())
-smesh.SetName(hypArea25, "MaxElementArea_" + str(maxElementArea))
-
-
-# Create submesh on sub_face1 - sub_face4
-# ---------------------------------------
-
-# Set 2D algorithm to submesh on sub_face1
-algo = mesh.Quadrangle(sub_face1)
-smesh.SetName(algo.GetSubMesh(), "SubMeshFace1")
-submesh1 = algo.GetSubMesh()
-
-# Set 2D algorithm to submesh on sub_face2
-algo = mesh.Quadrangle(sub_face2)
-smesh.SetName(algo.GetSubMesh(), "SubMeshFace2")
-submesh2 = algo.GetSubMesh()
-
-# Set 2D algorithm to submesh on sub_face3
-algo = mesh.Quadrangle(sub_face3)
-smesh.SetName(algo.GetSubMesh(), "SubMeshFace3")
-submesh3 = algo.GetSubMesh()
-
-# Set 2D algorithm to submesh on sub_face4
-algo = mesh.Quadrangle(sub_face4)
-smesh.SetName(algo.GetSubMesh(), "SubMeshFace4")
-submesh4 = algo.GetSubMesh()
-
-
-print("-------------------------- compute the mesh of the mechanic piece")
-
-mesh.Compute()
-
-print("Information about the Mesh_mechanic:")
-print("Number of nodes       : ", mesh.NbNodes())
-print("Number of edges       : ", mesh.NbEdges())
-print("Number of faces       : ", mesh.NbFaces())
-print("Number of triangles   : ", mesh.NbTriangles())
-print("Number of quadrangles : ", mesh.NbQuadrangles())
-print("Number of volumes     : ", mesh.NbVolumes())
-print("Number of tetrahedrons: ", mesh.NbTetras())
-
-
-#1 cutting of quadrangles of the 'SubMeshFace2' submesh
-mesh.SplitQuadObject(submesh2, 1)
-
-#2 cutting of triangles of the group
-FacesTriToQuad = [ 2391, 2824, 2825, 2826, 2827, 2828, 2832, 2833, 2834, 2835, 2836, 2837, 2838, 2839, 2841, 2844, 2845, 2847, 2854, 2861, 2863, 2922, 2923, 2924, 2925, 2926, 2927, 2928, 2929, 2930, 2931, 2932, 2933, 2934, 2935, 2936, 2937, 2938, 2940, 2941, 2946, 2951, 2970, 2971, 2972, 2973, 2974, 2975, 2976, 2977, 2978, 2979, 2980, 2981, 2982, 2983, 2984, 2985 ]
-GroupTriToQuad = mesh.MakeGroupByIds("Group of faces (quad)", SMESH.FACE, FacesTriToQuad)
-mesh.TriToQuadObject(GroupTriToQuad, SMESH.FT_AspectRatio , 1.57)
-
-#3 extrusion of the group
-point = SMESH.PointStruct(0, 0, 5)
-vector = SMESH.DirStruct(point)
-mesh.ExtrusionSweepObject(GroupTriToQuad, vector, 5)
-
-#4 mirror object
-mesh.Mirror([], SMESH.AxisStruct(0, 0, 0, 0, 0, 0), smesh.POINT, 0)
-
-#5 mesh translation
-point = SMESH.PointStruct(10, 10, 10)
-vector = SMESH.DirStruct(point)
-mesh.Translate([], vector, 0)
-
-#6 mesh rotation
-axisXYZ = SMESH.AxisStruct(0, 0, 0, 10, 10, 10)
-angle180 =  180*3.141/180
-mesh.Rotate([], axisXYZ, angle180, 0)
-
-#7 group smoothing
-FacesSmooth = [864, 933, 941, 950, 1005, 1013]
-GroupSmooth = mesh.MakeGroupByIds("Group of faces (smooth)", SMESH.FACE, FacesSmooth)
-mesh.SmoothObject(GroupSmooth, [], 20, 2, smesh.CENTROIDAL_SMOOTH)
-
-#8 rotation sweep object
-FacesRotate = [492, 493, 502, 503]
-GroupRotate = mesh.MakeGroupByIds("Group of faces (rotate)", SMESH.FACE, FacesRotate)
-angle45 =  45*3.141/180
-axisXYZ = SMESH.AxisStruct(-38.3128, -73.3658, -133.321, -13.3402, -13.3265, 6.66632)
-mesh.RotationSweepObject(GroupRotate, axisXYZ, angle45, 4, 1e-5)
-
-#9 reorientation of the submesh1
-mesh.ReorientObject(submesh1)
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_mechanic_netgen.py b/src/SMESH_SWIG/SMESH_mechanic_netgen.py
deleted file mode 100644 (file)
index 6ba8a39..0000000
+++ /dev/null
@@ -1,138 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# Quadrangulation of the geometry generated by the Python script
-# SMESH_mechanic.py
-# The new Netgen algorithm is used that discretizes baoundaries itself
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# ---------------------------- GEOM --------------------------------------
-
-# ---- define contiguous arcs and segment to define a closed wire
-p1   = geompy.MakeVertex( 100.0,   0.0,  0.0 )
-p2   = geompy.MakeVertex(  50.0,  50.0,  0.0 )
-p3   = geompy.MakeVertex( 100.0, 100.0,  0.0 )
-arc1 = geompy.MakeArc( p1, p2, p3 )
-
-p4   = geompy.MakeVertex( 170.0, 100.0, 0.0 )
-seg1 = geompy.MakeVector( p3, p4 )
-
-p5   = geompy.MakeVertex( 200.0, 70.0, 0.0 )
-p6   = geompy.MakeVertex( 170.0, 40.0, 0.0 )
-arc2 = geompy.MakeArc( p4, p5, p6 )
-
-p7   = geompy.MakeVertex( 120.0, 30.0, 0.0 )
-arc3 = geompy.MakeArc( p6, p7, p1 )
-
-# ---- define a closed wire with arcs and segment
-List1 = []
-List1.append( arc1 )
-List1.append( seg1 )
-List1.append( arc2 )
-List1.append( arc3 )
-
-wire1 = geompy.MakeWire( List1 )
-Id_wire1 = geompy.addToStudy( wire1, "wire1" )
-
-# ---- define a planar face with wire
-WantPlanarFace = 1 #True
-face1 = geompy.MakeFace( wire1, WantPlanarFace )
-Id_face1 = geompy.addToStudy( face1, "face1" )
-
-# ---- create a shape by extrusion
-pO = geompy.MakeVertex( 0.0, 0.0,   0.0 )
-pz = geompy.MakeVertex( 0.0, 0.0, 100.0 )
-vz = geompy.MakeVector( pO, pz )
-
-prism1 = geompy.MakePrismVecH( face1, vz, 100.0 )
-Id_prism1 = geompy.addToStudy( prism1, "prism1")
-
-# ---- create two cylinders
-
-pc1 = geompy.MakeVertex(  90.0, 50.0, -40.0 )
-pc2 = geompy.MakeVertex( 170.0, 70.0, -40.0 )
-radius = 20.0
-height = 180.0
-cyl1  = geompy.MakeCylinder( pc1, vz, radius, height )
-cyl2  = geompy.MakeCylinder( pc2, vz, radius, height )
-
-Id_Cyl1 = geompy.addToStudy( cyl1, "cyl1" )
-Id_Cyl2 = geompy.addToStudy( cyl2, "cyl2" )
-
-# ---- cut with cyl1
-shape  = geompy.MakeBoolean( prism1, cyl1, 2 )
-
-# ---- fuse with cyl2 to obtain the final mechanic piece :)
-mechanic =  geompy.MakeBoolean( shape, cyl2, 3 )
-Id_mechanic = geompy.addToStudy( mechanic, "mechanic" )
-
-# ---- Analysis of the geometry
-
-print("Analysis of the geometry mechanic :")
-
-subShellList = geompy.SubShapeAll(mechanic,geompy.ShapeType["SHELL"])
-subFaceList  = geompy.SubShapeAll(mechanic,geompy.ShapeType["FACE"])
-subEdgeList  = geompy.SubShapeAll(mechanic,geompy.ShapeType["EDGE"])
-
-print("number of Shells in mechanic : ",len(subShellList))
-print("number of Faces in mechanic : ",len(subFaceList))
-print("number of Edges in mechanic : ",len(subEdgeList))
-
-### ---------------------------- SMESH --------------------------------------
-
-print("-------------------------- create Mesh, algorithm, hypothesis")
-
-mesh = smesh.Mesh(mechanic, "Mesh_mechanic");
-netgen = mesh.Triangle(smeshBuilder.NETGEN)
-netgen.SetMaxSize( 50 )
-#netgen.SetSecondOrder( 0 )
-netgen.SetFineness( smeshBuilder.Fine )
-netgen.SetQuadAllowed( 1 )
-#netgen.SetOptimize( 1 )
-
-print("-------------------------- compute mesh")
-ret = mesh.Compute()
-print(ret)
-if ret != 0:
-    print("Information about the MeshcompShel:")
-    print("Number of nodes        : ", mesh.NbNodes())
-    print("Number of edges        : ", mesh.NbEdges())
-    print("Number of faces        : ", mesh.NbFaces())
-    print("Number of triangles    : ", mesh.NbTriangles())
-    print("Number of quadrangles  : ", mesh.NbQuadrangles())
-    print("Number of volumes      : ", mesh.NbVolumes())
-    print("Number of tetrahedrons : ", mesh.NbTetras())
-    
-else:
-    print("problem when computing the mesh")
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_mechanic_tetra.py b/src/SMESH_SWIG/SMESH_mechanic_tetra.py
deleted file mode 100644 (file)
index d47991a..0000000
+++ /dev/null
@@ -1,161 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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_withHole.py
-#  Author : Lucien PIGNOLONI
-#  Module : SMESH
-#  $Header$
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# ---------------------------- GEOM --------------------------------------
-
-# ---- define contiguous arcs and segment to define a closed wire
-p1   = geompy.MakeVertex( 100.0,   0.0,  0.0 )
-p2   = geompy.MakeVertex(  50.0,  50.0,  0.0 )
-p3   = geompy.MakeVertex( 100.0, 100.0,  0.0 )
-arc1 = geompy.MakeArc( p1, p2, p3 )
-
-p4   = geompy.MakeVertex( 170.0, 100.0, 0.0 )
-seg1 = geompy.MakeVector( p3, p4 )
-
-p5   = geompy.MakeVertex( 200.0, 70.0, 0.0 )
-p6   = geompy.MakeVertex( 170.0, 40.0, 0.0 )
-arc2 = geompy.MakeArc( p4, p5, p6 )
-
-p7   = geompy.MakeVertex( 120.0, 30.0, 0.0 )
-arc3 = geompy.MakeArc( p6, p7, p1 )
-
-# ---- define a closed wire with arcs and segment
-List1 = []
-List1.append( arc1 )
-List1.append( seg1 )
-List1.append( arc2 )
-List1.append( arc3 )
-
-wire1 = geompy.MakeWire( List1 )
-Id_wire1 = geompy.addToStudy( wire1, "wire1" )
-
-# ---- define a planar face with wire
-WantPlanarFace = 1 #True
-face1 = geompy.MakeFace( wire1, WantPlanarFace )
-Id_face1 = geompy.addToStudy( face1, "face1" )
-
-# ---- create a shape by extrusion
-pO = geompy.MakeVertex( 0.0, 0.0,   0.0 )
-pz = geompy.MakeVertex( 0.0, 0.0, 100.0 )
-vz = geompy.MakeVector( pO, pz )
-
-prism1 = geompy.MakePrismVecH( face1, vz, 100.0 )
-Id_prism1 = geompy.addToStudy( prism1, "prism1")
-
-# ---- create two cylinders
-
-pc1 = geompy.MakeVertex(  90.0, 50.0, -40.0 )
-pc2 = geompy.MakeVertex( 170.0, 70.0, -40.0 )
-radius = 20.0
-height = 180.0
-cyl1  = geompy.MakeCylinder( pc1, vz, radius, height )
-cyl2  = geompy.MakeCylinder( pc2, vz, radius, height )
-
-Id_Cyl1 = geompy.addToStudy( cyl1, "cyl1" )
-Id_Cyl2 = geompy.addToStudy( cyl2, "cyl2" )
-
-# ---- cut with cyl1
-shape  = geompy.MakeBoolean( prism1, cyl1, 2 )
-
-# ---- fuse with cyl2 to obtain the final mechanic piece :)
-mechanic =  geompy.MakeBoolean( shape, cyl2, 3 )
-Id_mechanic = geompy.addToStudy( mechanic, "mechanic" )
-
-# ---- Analysis of the geometry
-
-print("Analysis of the geometry mechanic :")
-
-subShellList = geompy.SubShapeAll(mechanic,geompy.ShapeType["SHELL"])
-subFaceList  = geompy.SubShapeAll(mechanic,geompy.ShapeType["FACE"])
-subEdgeList  = geompy.SubShapeAll(mechanic,geompy.ShapeType["EDGE"])
-
-print("number of Shells in mechanic : ",len(subShellList))
-print("number of Faces in mechanic : ",len(subFaceList))
-print("number of Edges in mechanic : ",len(subEdgeList))
-
-### ---------------------------- SMESH --------------------------------------
-
-shape_mesh = salome.IDToObject( Id_mechanic  )
-
-mesh = smesh.Mesh(shape_mesh, "Mesh_mechanic_tetra")
-
-print("-------------------------- add hypothesis to main mechanic")
-
-numberOfSegment = 10
-
-algo1 = mesh.Segment()
-hypNbSeg = algo1.NumberOfSegments(numberOfSegment)
-print(hypNbSeg.GetName())
-print(hypNbSeg.GetId())
-print(hypNbSeg.GetNumberOfSegments())
-smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegment))
-
-
-maxElementArea = 20
-
-algo2 = mesh.Triangle(smeshBuilder.MEFISTO)
-hypArea = algo2.MaxElementArea(maxElementArea)
-print(hypArea.GetName())
-print(hypArea.GetId())
-print(hypArea.GetMaxElementArea())
-smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
-
-
-maxElementVolume = 20
-
-algo3 = mesh.Tetrahedron(smeshBuilder.NETGEN)
-hypVolume = algo3.MaxElementVolume(maxElementVolume)
-print(hypVolume.GetName())
-print(hypVolume.GetId())
-print(hypVolume.GetMaxElementVolume())
-smesh.SetName(hypVolume, "maxElementVolume_" + str(maxElementVolume))
-
-
-print("-------------------------- compute the mesh of the mechanic piece")
-mesh.Compute()
-
-print("Information about the Mesh_mechanic_tetra:")
-print("Number of nodes       : ", mesh.NbNodes())
-print("Number of edges       : ", mesh.NbEdges())
-print("Number of faces       : ", mesh.NbFaces())
-print("Number of triangles   : ", mesh.NbTriangles())
-print("Number of quadrangles: ", mesh.NbQuadrangles())
-print("Number of volumes     : ", mesh.NbVolumes())
-print("Number of tetrahedrons: ", mesh.NbTetras())
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_reg.py b/src/SMESH_SWIG/SMESH_reg.py
deleted file mode 100644 (file)
index 005d569..0000000
+++ /dev/null
@@ -1,119 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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_reg.py
-#  Module : SMESH
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-from salome.StdMeshers import StdMeshersBuilder
-
-
-# ---- define a box
-print("Define box")
-box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
-idbox = geompy.addToStudy(box, "box")
-
-# ---- add faces of box to study
-print("Add faces to study")
-idface = []
-subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
-for f in subShapeList:
-  name = geompy.SubShapeName(f, box)
-  print(name)
-  idface.append( geompy.addToStudyInFather(box, f, name) )
-
-# ---- add edges of box to study
-print("Add edges to study")
-idedge = []
-subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["EDGE"])
-for f in subShapeList:
-  name = geompy.SubShapeName(f, box)
-  print(name)
-  idedge.append( geompy.addToStudyInFather(box, f, name) )
-
-salome.sg.updateObjBrowser()
-
-# ---- launch SMESH
-smeshgui = salome.ImportComponentGUI("SMESH")
-smeshgui.Init()
-smesh.UpdateStudy()
-
-# ---- Creating meshes
-
-box = salome.IDToObject(idbox)
-names = [ "MeshBoxReg", "MeshBoxScale", "MeshBoxTable", "MeshBoxExpr" ]
-
-
-print("-------------------------- Create ", names[0], " mesh")
-mesh = smesh.Mesh(box, names[0])
-algo = mesh.Segment()
-hyp = algo.NumberOfSegments(7)
-hyp.SetDistrType(0)
-smesh.SetName(hyp, "NumberOfSegmentsReg")
-algo = mesh.Triangle()
-algo.MaxElementArea(2500)
-
-print("-------------------------- Create ", names[1], " mesh")
-mesh = smesh.Mesh(box, names[1])
-algo = mesh.Segment()
-hyp = algo.NumberOfSegments(7)
-hyp.SetDistrType(1)
-hyp.SetScaleFactor(2)
-smesh.SetName(hyp, "NumberOfSegmentsScale")
-algo = mesh.Triangle()
-algo.MaxElementArea(2500)
-
-print("-------------------------- Create ", names[2], " mesh")
-mesh = smesh.Mesh(box,names[2])
-algo = mesh.Segment()
-hyp = algo.NumberOfSegments(7)
-hyp.SetDistrType(2)
-hyp.SetTableFunction( [0, 0.1, 0.5, 1.0, 1.0, 0.1] )
-hyp.SetConversionMode(0)
-smesh.SetName(hyp, "NumberOfSegmentsTable")
-algo = mesh.Triangle()
-algo.MaxElementArea(2500)
-
-print("-------------------------- Create ", names[3], " mesh")
-mesh = smesh.Mesh(box, names[3])
-algo = mesh.Segment()
-hyp = algo.NumberOfSegments(10)
-hyp.SetDistrType(3)
-hyp.SetExpressionFunction("sin(3*t)")
-hyp.SetConversionMode(1)
-smesh.SetName(hyp, "NumberOfSegmentsExpr")
-algo = mesh.Triangle()
-algo.MaxElementArea(2500)
-
-
-salome.sg.updateObjBrowser()
-
diff --git a/src/SMESH_SWIG/SMESH_shared_modules.py b/src/SMESH_SWIG/SMESH_shared_modules.py
deleted file mode 100644 (file)
index f6a006f..0000000
+++ /dev/null
@@ -1,44 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-"""
-
-"""
-
-# force SMESH importation at interpreter initialization
-# see salome_shared_modules.py
-# (avoids incomplete import at run time)
-
-from launchConfigureParser import verbose
-
-if verbose(): print("============== import SMESH =======================")
-
-import SMESH
-
-# this function is required
-
-def init_shared_modules():
-   """
-      This function initializes shared modules that need to be
-   """
-   pass
diff --git a/src/SMESH_SWIG/SMESH_test.py b/src/SMESH_SWIG/SMESH_test.py
deleted file mode 100644 (file)
index 004996c..0000000
+++ /dev/null
@@ -1,150 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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 SMESH_I : idl implementation based on 'SMESH' unit's classes
-#  File   : SMESH_test.py
-#  Module : SMESH
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# ---- define a box
-
-box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
-idb = geompy.addToStudy(box, "box")
-
-# ---- add first face of box in study
-
-subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
-face = subShapeList[0]
-name = geompy.SubShapeName(face, box)
-idf = geompy.addToStudyInFather(box, face, name)
-
-# ---- add shell from box  in study
-
-subShellList = geompy.SubShapeAll(box, geompy.ShapeType["SHELL"])
-shell = subShellList[0]
-name = geompy.SubShapeName(shell, box)
-ids = geompy.addToStudyInFather(box, shell, name)
-
-# ---- add first edge of face in study
-
-edgeList = geompy.SubShapeAll(face, geompy.ShapeType["EDGE"])
-edge = edgeList[0];
-name = geompy.SubShapeName(edge, face)
-ide = geompy.addToStudyInFather(face, edge, name)
-
-# ---- SMESH
-
-smesh.UpdateStudy()
-box = salome.IDToObject(idb)
-mesh = smesh.Mesh(box, "Meshbox")
-
-print("-------------------------- add hypothesis to box")
-
-algo_1 = mesh.Segment(box)
-hyp = algo_1.LocalLength(100)
-print(hyp.GetName())
-print(hyp.GetId())
-print(hyp.GetLength())
-
-algo_2 = mesh.Triangle(smeshBuilder.MEFISTO, box)
-hyp = algo_2.MaxElementArea(5000)
-print(hyp.GetName())
-print(hyp.GetId())
-print(hyp.GetMaxElementArea())
-
-smesh.SetName(algo_2.GetSubMesh(), "SubMeshBox")
-
-
-print("-------------------------- add hypothesis to edge")
-
-edge = salome.IDToObject(ide)
-
-algo_3 = mesh.Segment(edge)
-hyp = algo_3.LocalLength(100)
-print(hyp.GetName())
-print(hyp.GetId())
-print(hyp.GetLength())
-
-smesh.SetName(algo_3.GetSubMesh(), "SubMeshEdge")
-
-
-print("-------------------------- compute face")
-
-face = salome.IDToObject(idf)
-
-ret = mesh.Compute(face)
-print(ret)
-log = [] #mesh.GetLog(0) # 0 - GetLog without ClearLog after, else if 1 - ClearLog after
-for a in log:
-    print("-------")
-    ii = 0
-    ir = 0
-    comType = a.commandType
-    if comType == 0:
-        for i in range(a.number):
-            ind = a.indexes[ii]
-            ii = ii+1
-            r1 = a.coords[ir]
-            ir = ir+1
-            r2 = a.coords[ir]
-            ir = ir+1
-            r3 = a.coords[ir]
-            ir = ir+1
-            print("AddNode %i - %g %g %g" % (ind, r1, r2, r3))
-    elif comType == 1:
-        for i in range(a.number):
-            ind = a.indexes[ii]
-            ii = ii+1
-            i1 = a.indexes[ii]
-            ii = ii+1
-            i2 = a.indexes[ii]
-            ii = ii+1
-            print("AddEdge %i - %i %i" % (ind, i1, i2))
-    elif comType == 2:
-        for i in range(a.number):
-            ind = a.indexes[ii]
-            print(ind)
-            ii = ii+1
-            print(ii)
-            i1 = a.indexes[ii]
-            ii = ii+1
-            i2 = a.indexes[ii]
-            print(i2)
-            ii = ii+1
-            print("ii", ii)
-            i3 = a.indexes[ii]
-            print(i3)
-            #ii = ii+1
-            ii = ii+1
-            print("AddTriangle %i - %i %i %i" % (ind, i1, i2, i3))
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_test0.py b/src/SMESH_SWIG/SMESH_test0.py
deleted file mode 100644 (file)
index 4bea6fd..0000000
+++ /dev/null
@@ -1,66 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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_test0.py
-#  Module : SMESH
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# ---- define a box
-
-box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
-idbox = geompy.addToStudy(box, "box")
-
-# ---- add first face of box in study
-
-subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
-face = subShapeList[0]
-name = geompy.SubShapeName(face, box)
-print(name)
-idface = geompy.addToStudyInFather(box, face, name)
-
-# ---- add shell from box  in study
-
-subShellList = geompy.SubShapeAll(box, geompy.ShapeType["SHELL"])
-shell = subShellList[0]
-name = geompy.SubShapeName(shell, box)
-print(name)
-idshell = geompy.addToStudyInFather(box, shell, name)
-
-# ---- add first edge of face in study
-
-edgeList = geompy.SubShapeAll(face, geompy.ShapeType["EDGE"])
-edge = edgeList[0]
-name = geompy.SubShapeName(edge, face)
-print(name)
-idedge = geompy.addToStudyInFather(face, edge, name)
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_test1.py b/src/SMESH_SWIG/SMESH_test1.py
deleted file mode 100644 (file)
index dc23b72..0000000
+++ /dev/null
@@ -1,113 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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_test1.py
-#  Module : SMESH
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# ---- define a box
-
-box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
-idbox = geompy.addToStudy(box, "box")
-
-# ---- add first face of box in study
-
-subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
-face = subShapeList[0]
-name = geompy.SubShapeName(face, box)
-print(name)
-idface = geompy.addToStudyInFather(box, face, name)
-
-# ---- add shell from box  in study
-
-subShellList = geompy.SubShapeAll(box, geompy.ShapeType["SHELL"])
-shell = subShellList[0]
-name = geompy.SubShapeName(shell, box)
-print(name)
-idshell = geompy.addToStudyInFather(box, shell, name)
-
-# ---- add first edge of face in study
-
-edgeList = geompy.SubShapeAll(face, geompy.ShapeType["EDGE"])
-edge = edgeList[0]
-name = geompy.SubShapeName(edge, face)
-print(name)
-idedge = geompy.addToStudyInFather(face, edge, name)
-
-
-# ---- SMESH
-
-# ---- Init a Mesh with the box
-
-mesh = smesh.Mesh(box, "Meshbox")
-
-print("-------------------------- add hypothesis to box")
-algoReg1 = mesh.Segment()
-hypNbSeg1 = algoReg1.NumberOfSegments(7)
-print(hypNbSeg1.GetName())
-print(hypNbSeg1.GetId())
-print(hypNbSeg1.GetNumberOfSegments())
-smesh.SetName(hypNbSeg1, "NumberOfSegments_7")
-
-algoMef1 = mesh.Triangle()
-hypArea1 = algoMef1.MaxElementArea(2500)
-print(hypArea1.GetName())
-print(hypArea1.GetId())
-print(hypArea1.GetMaxElementArea())
-smesh.SetName(hypArea1, "MaxElementArea_2500")
-
-# ---- add hypothesis to edge
-print("-------------------------- add hypothesis to edge")
-edge = salome.IDToObject(idedge)
-
-algoReg2 = mesh.Segment(edge)
-hypLen1 = algoReg2.LocalLength(100)
-smesh.SetName(algoReg2.GetSubMesh(), "SubMeshEdge")
-print(hypLen1.GetName())
-print(hypLen1.GetId())
-print(hypLen1.GetLength())
-smesh.SetName(hypLen1, "Local_Length_100")
-
-# ---- add hypothesis to face
-print("-------------------------- add hypothesis to face")
-face = salome.IDToObject(idface)
-
-algoMef2 = mesh.Triangle(face)
-hypArea2 = algoMef2.MaxElementArea(500)
-smesh.SetName(algoMef2.GetSubMesh(), "SubMeshFace")
-print(hypArea2.GetName())
-print(hypArea2.GetId())
-print(hypArea2.GetMaxElementArea())
-smesh.SetName(hypArea2, "MaxElementArea_500")
-
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_test1_AndDisplay.py b/src/SMESH_SWIG/SMESH_test1_AndDisplay.py
deleted file mode 100644 (file)
index 12beca4..0000000
+++ /dev/null
@@ -1,118 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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_test1.py
-#  Module : SMESH
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# ---- define a box
-
-box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
-idbox = geompy.addToStudy(box, "box")
-
-# ---- add first face of box in study
-
-subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
-face = subShapeList[0]
-name = geompy.SubShapeName(face, box)
-print(name)
-idface = geompy.addToStudyInFather(box, face, name)
-
-# ---- add shell from box  in study
-
-subShellList = geompy.SubShapeAll(box, geompy.ShapeType["SHELL"])
-shell = subShellList[0]
-name = geompy.SubShapeName(shell, box)
-print(name)
-idshell = geompy.addToStudyInFather(box, shell, name)
-
-# ---- add first edge of face in study
-
-edgeList = geompy.SubShapeAll(face, geompy.ShapeType["EDGE"])
-edge = edgeList[0]
-name = geompy.SubShapeName(edge, face)
-print(name)
-idedge = geompy.addToStudyInFather(face, edge, name)
-
-
-# ---- SMESH
-
-# ---- Init a Mesh with the box
-
-mesh = smesh.Mesh(box, "Meshbox")
-
-print("-------------------------- add hypothesis to box")
-algoReg1 = mesh.Segment()
-hypNbSeg1 = algoReg1.NumberOfSegments(7)
-print(hypNbSeg1.GetName())
-print(hypNbSeg1.GetId())
-print(hypNbSeg1.GetNumberOfSegments())
-smesh.SetName(hypNbSeg1, "NumberOfSegments_7")
-
-algoMef1 = mesh.Triangle()
-hypArea1 = algoMef1.MaxElementArea(2500)
-print(hypArea1.GetName())
-print(hypArea1.GetId())
-print(hypArea1.GetMaxElementArea())
-smesh.SetName(hypArea1, "MaxElementArea_2500")
-
-# ---- add hypothesis to edge
-print("-------------------------- add hypothesis to edge")
-edge = salome.IDToObject(idedge)
-
-algoReg2 = mesh.Segment(edge)
-hypLen1 = algoReg2.LocalLength(100)
-smesh.SetName(algoReg2.GetSubMesh(), "SubMeshEdge")
-print(hypLen1.GetName())
-print(hypLen1.GetId())
-print(hypLen1.GetLength())
-smesh.SetName(hypLen1, "Local_Length_100")
-
-# ---- add hypothesis to face
-print("-------------------------- add hypothesis to face")
-face = salome.IDToObject(idface)
-
-algoMef2 = mesh.Triangle(face)
-hypArea2 = algoMef2.MaxElementArea(500)
-smesh.SetName(algoMef2.GetSubMesh(), "SubMeshFace")
-print(hypArea2.GetName())
-print(hypArea2.GetId())
-print(hypArea2.GetMaxElementArea())
-smesh.SetName(hypArea2, "MaxElementArea_500")
-
-mesh.Compute()
-
-salome.sg.updateObjBrowser()
-
-sg = salome.ImportComponentGUI('SMESH')
-if not isinstance(sg, type(salome.salome_ComponentGUI)):
-    sg.CreateAndDisplayActor('0:1:2:3')
diff --git a/src/SMESH_SWIG/SMESH_test2.py b/src/SMESH_SWIG/SMESH_test2.py
deleted file mode 100644 (file)
index d3d8aaa..0000000
+++ /dev/null
@@ -1,38 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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_test2.py
-#  Module : SMESH
-#
-from SMESH_test1 import *
-
-# ---- compute box
-
-print("-------------------------- compute box")
-ret = mesh.Compute()
-print(ret)
-log = mesh.GetLog(0); # no erase trace
-# for linelog in log:
-#     print(linelog)
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_test3.py b/src/SMESH_SWIG/SMESH_test3.py
deleted file mode 100644 (file)
index a86196c..0000000
+++ /dev/null
@@ -1,104 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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_test3.py
-#  Module : SMESH
-#import salome
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-import math
-
-pi = math.pi
-
-# ---------------------------------------------
-xa = math.sin(pi/12)
-ya = 0
-za = math.cos(pi/12)
-
-xb = 0
-yb = math.sin(pi/18)
-zb = math.cos(pi/18)
-
-xc = math.cos(-pi/18)
-yc = 0
-zc = math.sin(-pi/18)
-
-rc1 = 150
-rc2 = 150
-rc3 = 150
-rc4 = 300
-
-hc1 = 300
-hc2 = 2*hc1
-hc3 = 2*hc1
-hc4 = 2*hc1
-
-# ---------------------------------------------
-point_0 = geompy.MakeVertex(0, 0, 0)
-point_z = geompy.MakeVertex(0, 0, 1)
-
-point_a = geompy.MakeVertex(xa, ya, za)
-point_b = geompy.MakeVertex(xb, yb, zb)
-point_c = geompy.MakeVertex(xc, yc, zc)
-
-dir_z = geompy.MakeVector(point_0, point_z)
-dir_a = geompy.MakeVector(point_0, point_a)
-dir_b = geompy.MakeVector(point_0, point_b)
-dir_c = geompy.MakeVector(point_0, point_c)
-
-axe_z = dir_z
-axe_a = dir_a
-axe_b = dir_b
-axe_c = dir_c
-
-cyl_1 = geompy.MakeCylinder(point_0, dir_z, rc1, hc1)
-
-cyl_t = geompy.MakeCylinder(point_0, dir_a, rc2, hc2)
-cyl_a = geompy.MakeTranslation(cyl_t, 1.2*rc1, 0.1*rc1, -0.5*hc1)
-
-cyl_t = geompy.MakeCylinder(point_0, dir_b, rc3, hc3)
-cyl_b = geompy.MakeTranslation(cyl_t, -1.2*rc1, -0.1*rc1, -0.5*hc1)
-
-cyl_t = geompy.MakeCylinder(point_0, dir_c, rc4, hc4)
-cyl_t = geompy.MakeRotation(cyl_t, axe_c, pi/2)
-cyl_c = geompy.MakeTranslation(cyl_t, -hc1, 0, 0)
-cyl_d = geompy.MakeTranslation(cyl_t, -hc1, 0, 1.3*rc4)
-
-inter_t = geompy.MakeBoolean(cyl_c,cyl_d, 1) # common
-
-blob_t = geompy.MakeBoolean(cyl_1, cyl_a, 2) # cut
-blob_t = geompy.MakeBoolean(blob_t, cyl_b, 2)
-
-blob = geompy.MakeBoolean(blob_t, inter_t, 1) # common
-
-idblob = geompy.addToStudy(blob,"blob")
-#idc = geompy.addToStudy(cyl_c,"cyl_c")
-#idd = geompy.addToStudy(cyl_d,"cyl_d")
diff --git a/src/SMESH_SWIG/SMESH_test4.py b/src/SMESH_SWIG/SMESH_test4.py
deleted file mode 100644 (file)
index c84de07..0000000
+++ /dev/null
@@ -1,80 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-
-# ---- GEOM
-
-box   = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
-idbox = geompy.addToStudy(box, "box")
-
-subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
-face   = subShapeList[0]
-name   = geompy.SubShapeName(face, box)
-idface = geompy.addToStudyInFather(box, face, name)
-
-box  = salome.IDToObject(idbox)
-face = salome.IDToObject(idface)
-
-# ---- SMESH
-
-smesh.UpdateStudy()
-mesh = smesh.Mesh(box, "Meshbox")
-
-# Set 1D algorithm/hypotheses to mesh
-algo1 = mesh.Segment()
-algo1.NumberOfSegments(10)
-
-# Set 2D algorithm/hypotheses to mesh
-algo2 = mesh.Triangle(smeshBuilder.MEFISTO)
-algo2.MaxElementArea(10)
-
-# Create submesh on face
-algo3 = mesh.Segment(face)
-algo3.NumberOfSegments(10)
-algo4 = mesh.Triangle(smeshBuilder.MEFISTO, face)
-algo4.MaxElementArea(100)
-submesh = algo4.GetSubMesh()
-smesh.SetName(submesh, "SubMeshFace")
-
-
-mesh.Compute()
-
-faces = submesh.GetElementsByType(SMESH.FACE)
-if len(faces) > 1:
-    print(len(faces), len(faces)/2)
-    group1 = mesh.CreateEmptyGroup(SMESH.FACE,"Group of faces")
-    group2 = mesh.CreateEmptyGroup(SMESH.FACE,"Another group of faces")
-    group1.Add(faces[:int(len(faces)/2)])
-    group2.Add(faces[int(len(faces)/2):])
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMESH_test5.py b/src/SMESH_SWIG/SMESH_test5.py
deleted file mode 100644 (file)
index 7546da9..0000000
+++ /dev/null
@@ -1,84 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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_test5.py
-#  Module : SMESH
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-import CORBA
-import os
-import os.path
-
-def SetSObjName(theSObj,theName) :
-    ok, anAttr = theSObj.FindAttribute("AttributeName")
-    if ok:
-        aName = anAttr._narrow(SALOMEDS.AttributeName)
-        #print aName.__dict__
-        aName.SetValue(theName)
-
-def ConvertMED2UNV(thePath,theFile) :
-    anInitFileName = thePath + theFile
-    aMeshes,aResult = smesh.CreateMeshesFromMED(anInitFileName)
-    print(aResult, aMeshes)
-
-    for iMesh in range(len(aMeshes)) :
-        aMesh = aMeshes[iMesh]
-        print(aMesh.GetName(), end=' ')
-        aFileName = anInitFileName
-        aFileName = os.path.basename(aFileName)
-        aMesh.SetName(aFileName)
-        print(aMesh.GetName())
-
-        aOutPath = '/tmp/'
-        aFileName = aOutPath + theFile + "." + str(iMesh) + ".unv"
-        aMesh.ExportUNV(aFileName)
-        aMesh = smesh.CreateMeshesFromUNV(aFileName)
-        print(aMesh.GetName(), end=' ')
-        os.remove(aFileName)
-        aFileName = os.path.basename(aFileName)
-        aMesh.SetName(aFileName)
-        print(aMesh.GetName())
-
-aPath = os.getenv('DATA_DIR') + '/MedFiles/'
-aListDir = os.listdir(aPath)
-print(aListDir)
-
-for iFile in range(len(aListDir)) :
-    aFileName = aListDir[iFile]
-    aName,anExt = os.path.splitext(aFileName)
-    if anExt == ".med" :
-        aFileName = os.path.basename(aFileName)
-        print(aFileName)
-        ConvertMED2UNV(aPath,aFileName)
-        #break
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/SMeshHelper.cxx b/src/SMESH_SWIG/SMeshHelper.cxx
new file mode 100644 (file)
index 0000000..eba4007
--- /dev/null
@@ -0,0 +1,49 @@
+// Copyright (C) 2021-2024  CEA, EDF, 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 "SMeshHelper.h"
+
+#include "SALOME_KernelServices.hxx"
+
+#include <cstring>
+
+#include <DriverGMF_Read.hxx>
+#include <SMESH_MGLicenseKeyGen.hxx>
+
+std::string GetMGLicenseKeyImpl(const char* gmfFile)
+{
+  smIdType nbVertex, nbEdge, nbFace, nbVol;
+  DriverGMF_Read gmfReader;
+  gmfReader.SetFile( gmfFile );
+  gmfReader.GetMeshInfo( nbVertex, nbEdge, nbFace, nbVol );
+
+  std::string errorTxt;
+  std::string key = SMESHUtils_MGLicenseKeyGen::GetKey( gmfFile,
+                                                        FromSmIdType<int>( nbVertex ),
+                                                        FromSmIdType<int>( nbEdge ),
+                                                        FromSmIdType<int>( nbFace ),
+                                                        FromSmIdType<int>( nbVol ),
+                                                        errorTxt );
+  if ( !errorTxt.empty() )
+  {
+    std::cerr << "Error: Pb with MeshGems license: " << errorTxt << std::endl;
+    key = "<" + errorTxt + ">";
+  }
+  return key;
+}
diff --git a/src/SMESH_SWIG/SMeshHelper.h b/src/SMESH_SWIG/SMeshHelper.h
new file mode 100644 (file)
index 0000000..efef9e4
--- /dev/null
@@ -0,0 +1,24 @@
+// Copyright (C) 2021-2024  CEA, EDF, 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
+//
+
+#pragma once
+
+#include <string>
+
+std::string GetMGLicenseKeyImpl(const char* gmfFile);
diff --git a/src/SMESH_SWIG/SMeshHelper.i b/src/SMESH_SWIG/SMeshHelper.i
new file mode 100644 (file)
index 0000000..d5dafd3
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright (C) 2021-2024  CEA, EDF, 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
+//
+
+%module SMeshHelper
+
+%include "std_string.i"
+
+%{
+#include "SMeshHelper.h"
+%}
+
+%inline
+{
+  std::string GetMGLicenseKey(const char* gmfFile)
+  {
+    return GetMGLicenseKeyImpl( gmfFile );
+  }
+}
index c2f0ed0aa068105683e627cdc64b9ae325fd6e37..280ae889ff0b620034c9a0e05a3fb09a423abcdd 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -25,6 +25,7 @@ LIBRARY = "libStdMeshersEngine.so"
 
 from salome.smesh.smesh_algorithm import Mesh_Algorithm
 import StdMeshers
+from salome.geom import geomBuilder
 
 #----------------------------
 # Mesh algo type identifiers
@@ -42,13 +43,8 @@ Algorithm type: Python 1D algorithm, see :class:`~StdMeshersBuilder.StdMeshersBu
 
 COMPOSITE   = "CompositeSegment_1D"
 """
-
 Algorithm type: Composite segment 1D algorithm, see :class:`~StdMeshersBuilder.StdMeshersBuilder_CompositeSegment`
 """
-MEFISTO     = "MEFISTO_2D"
-"""
-Algorithm type: Triangle MEFISTO 2D algorithm, see :class:`~StdMeshersBuilder.StdMeshersBuilder_Triangle_MEFISTO`
-"""
 
 Hexa        = "Hexa_3D"
 """
@@ -623,72 +619,6 @@ class StdMeshersBuilder_Segment_Python(Mesh_Algorithm):
 
     pass # end of StdMeshersBuilder_Segment_Python class
 
-class StdMeshersBuilder_Triangle_MEFISTO(Mesh_Algorithm):
-    """
-    Triangle MEFISTO 2D algorithm.
-    It is created by calling smeshBuilder.Mesh.Triangle(smeshBuilder.MEFISTO,geom=0)
-    """
-    
-
-    meshMethod = "Triangle"
-    """
-    name of the dynamic method in smeshBuilder.Mesh class
-    """
-    algoType   = MEFISTO
-    """
-    type of algorithm used with helper function in smeshBuilder.Mesh class
-    """
-    isDefault  = True
-    """
-    flag pointing whether this algorithm should be used by default in dynamic method
-        of smeshBuilder.Mesh class
-    """
-    docHelper  = "Create triangle 2D algorithm for faces"
-    """
-    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
-
-    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) - Create 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,
-                              CompareMethod=comparator)
-        hyp.SetMaxElementArea(area)
-        return hyp
-
-    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
-
 class StdMeshersBuilder_Quadrangle(Mesh_Algorithm):
     """
     Defines a quadrangle 2D algorithm.
@@ -809,9 +739,11 @@ class StdMeshersBuilder_Quadrangle(Mesh_Algorithm):
         if corners and isinstance( corners[0], GEOM._objref_GEOM_Object ):
             corners = [ self.mesh.geompyD.GetSubShapeID( self.mesh.geom, v ) for v in corners ]
 
-        if self.params.GetQuadType() != quadType:
+        #If quadType is None - will used default parameter ( StdMeshers.QUAD_STANDARD )
+        if quadType and self.params.GetQuadType() != quadType:
             self.params.SetQuadType(quadType)
-        if vertexID > 0:
+        #If triangleVertex is None - will used default parameter ( -1 ):
+        if triangleVertex and vertexID > 0:
             self.params.SetTriaVertex( vertexID )
         from salome.smesh.smeshBuilder import AssureGeomPublished
         for v in enfVertices:
@@ -2084,3 +2016,106 @@ class StdMeshersBuilder_UseExisting_2D(Mesh_Algorithm):
         pass
 
     pass # end of StdMeshersBuilder_UseExisting_2D class
+    
+class StdMeshersBuilder_ViscousLayer(Mesh_Algorithm):
+    """ Defines the prismatic layer builder.
+
+    It is created by calling smeshBuilder.Mesh.ViscousLayerBuilder(geom=TheGeometry)
+    """
+    
+    meshMethod = "ViscousLayerBuilder"
+    """
+    name of the dynamic method in smeshBuilder.Mesh class
+    """
+    algoType   = "ViscousLayerBuilder"
+    """
+    type of algorithm used with helper function in smeshBuilder.Mesh class
+    """
+    docHelper  = "Viscous layer builder for 2D and 3D geometries"
+    """
+    doc string of the method
+    """
+    
+    # On create method it will call create method from mesh python class
+    # 
+    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.thickness          = None
+        self.numberOfLayers     = None
+        self.stretchFactor      = None
+        self.elementsId         = []
+        self.isElementToIgnore  = True
+        self.extrMethod         = StdMeshers.SURF_OFFSET_SMOOTH
+        self.groupName          = ""
+        self.shrinkGeometry     = None
+        self.algo               = self.Create(mesh, geom, self.algoType)     
+        pass
+
+    def setBuilderParameters( self, thickness, numberOfLayers, stretchFactor, elementsId=[], 
+                                    isElementToIgnore=True, extrMethod=StdMeshers.SURF_OFFSET_SMOOTH, groupName="" ):            
+        self.thickness          = thickness
+        self.numberOfLayers     = numberOfLayers
+        self.stretchFactor      = stretchFactor
+        self.elementsId         = elementsId        # can be faces or edges
+        self.isElementToIgnore  = isElementToIgnore
+        self.extrMethod         = extrMethod
+        self.groupName          = groupName
+
+        self.algo.SetTotalThickness( thickness )
+        self.algo.SetNumberLayers( numberOfLayers )
+        self.algo.SetStretchFactor( stretchFactor )
+        
+        #Faces are set based on int ids so if a collection of face geom objects is recived cast it to int 
+        if elementsId and isinstance( elementsId, geomBuilder.GEOM._objref_GEOM_Object ):
+            elementsId = [ elementsId ]
+        if elementsId and isinstance( elementsId[0], geomBuilder.GEOM._objref_GEOM_Object ):
+            elementsIDs = []
+            for shape in elementsId:
+                try:
+                  ff = self.mesh.geompyD.SubShapeAll( shape, self.mesh.geompyD.ShapeType["FACE"] )
+                  if ( len( ff ) == 0 ):
+                    #try to get edges
+                    ff = self.mesh.geompyD.SubShapeAll( shape, self.mesh.geompyD.ShapeType["EDGE"] )
+
+                  for f in ff:
+                    elementsIDs.append( self.mesh.geompyD.GetSubShapeID(self.mesh.geom, f))
+                except:
+                  # try to get the SHAPERSTUDY engine directly, because GetGen does not work because of
+                  # simplification of access in geomBuilder: omniORB.registerObjref
+                  from SHAPERSTUDY_utils import getEngine
+                  gen = getEngine()
+                  if gen:
+                    aShapeOp = gen.GetIShapesOperations()
+                    ff = aShapeOp.ExtractSubShapes( shape, self.mesh.geompyD.ShapeType["FACE"], False)
+                    if (len(ff)==0):
+                        #try to get edges
+                        ff = aShapeOp.ExtractSubShapes( shape, self.mesh.geompyD.ShapeType["EDGE"], False)
+                    for f in ff:
+                      elementsIDs.append( aShapeOp.GetSubShapeIndex( self.mesh.geom, f ))
+            elementsId = elementsIDs
+
+        self.algo.SetFaces( elementsId, isElementToIgnore )    
+        self.algo.SetGroupName( groupName )   
+        self.algo.SetMethod( extrMethod )        
+        
+    def GetShrinkGeometry( self ):
+        if isinstance(self.geom, geomBuilder.GEOM._objref_GEOM_Object):
+            self.shrinkGeometry = self.algo.GetShrinkGeometry( self.mesh.GetMesh(), self.geom )
+        
+        return self.shrinkGeometry
+
+    def AddLayers( self, shrinkMesh ):
+        success = self.algo.AddLayers( shrinkMesh.GetMesh(), self.mesh.GetMesh(), self.geom )
+        if ( success ):
+            return self.mesh  #Return the original mesh of the builder
+        else:
+            return shrinkMesh
+
+    pass # end of StdMeshersBuilder_ViscousLayer class
\ No newline at end of file
diff --git a/src/SMESH_SWIG/YACS_geomesh0.py b/src/SMESH_SWIG/YACS_geomesh0.py
deleted file mode 100644 (file)
index 1b978d8..0000000
+++ /dev/null
@@ -1,192 +0,0 @@
-#!/usr/bin/env python3
-# Copyright (C) 2018-2020  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
-#
-
-# test used in YACS, ForEachLoop
-
-def geomesh(l0, r0, h0, d0, d1, my_container, direc):
-  print("Géometrie et maillage barre : (l0, r0, h0, d0, d1)=", (l0, r0, h0, d0, d1))
-
-  import sys
-  import salome
-  salome.salome_init()
-  import GEOM
-  from salome.geom import geomBuilder
-  import math
-  import os
-  import SALOMEDS
-  import  SMESH
-  from salome.smesh import smeshBuilder
-  
-  my_container.load_component_Library("GEOM")
-  #engineGeom = my_container.create_component_instance("GEOM")
-  engineGeom = my_container.load_impl("GEOM","")
-  geompy = geomBuilder.New(engineGeom)
-  my_container.load_component_Library("SMESH")
-  #engineSmesh = my_container.create_component_instance("SMESH")
-  engineSmesh = my_container.load_impl("SMESH","")
-  smesh = smeshBuilder.New(engineSmesh,engineGeom)
-  print("instances Names:", engineGeom.instanceName, engineSmesh.instanceName)
-  print("instances:", engineGeom, engineSmesh)
-  print("builders:", geompy, smesh)
-  
-  volume = (2.*l0*r0 + 0.75*math.pi*r0*r0)*h0
-  O = geompy.MakeVertex(0, 0, 0)
-  OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
-  OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
-  OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
-  Vertex_1 = geompy.MakeVertex(-l0, -r0, 0)
-  Vertex_2 = geompy.MakeVertex(-l0-r0, 0, 0)
-  Vertex_3 = geompy.MakeVertex(-l0, r0, 0)
-  Vertex_4 = geompy.MakeVertex(l0, r0, 0)
-  Vertex_5 = geompy.MakeVertex(l0+r0, 0, 0)
-  Vertex_6 = geompy.MakeVertex(l0, -r0, 0)
-  Arc_1 = geompy.MakeArc(Vertex_1, Vertex_2, Vertex_3)
-  Arc_2 = geompy.MakeArc(Vertex_4, Vertex_5, Vertex_6)
-  Line_1 = geompy.MakeLineTwoPnt(Vertex_3, Vertex_4)
-  Line_2 = geompy.MakeLineTwoPnt(Vertex_6, Vertex_1)
-  Face_1 = geompy.MakeFaceWires([Arc_1, Arc_2, Line_1, Line_2], 1)
-  barre0 = geompy.MakePrismVecH(Face_1, OZ, h0)
-  Vertex_1a = geompy.MakeVertex(-l0, -r0/2, 0)
-  Vertex_2a = geompy.MakeVertex(-l0-r0/2, 0, 0)
-  Vertex_3a = geompy.MakeVertex(-l0, r0/2, 0)
-  Vertex_4a = geompy.MakeVertex(l0, r0/2, 0)
-  Vertex_5a = geompy.MakeVertex(l0+r0/2, 0, 0)
-  Vertex_6a = geompy.MakeVertex(l0, -r0/2, 0)
-  Arc_1a = geompy.MakeArc(Vertex_1a, Vertex_2a, Vertex_3a)
-  Arc_2a = geompy.MakeArc(Vertex_4a, Vertex_5a, Vertex_6a)
-  Line_1a = geompy.MakeLineTwoPnt(Vertex_3a, Vertex_4a)
-  Line_2a = geompy.MakeLineTwoPnt(Vertex_6a, Vertex_1a)
-  Face_1a = geompy.MakeFaceWires([Arc_1a, Arc_2a, Line_1a, Line_2a], 1)
-  barrea = geompy.MakePrismVecH(Face_1a, OZ, h0)
-  barreb = geompy.MakeCut(barre0, barrea)
-  Plane_1 = geompy.MakePlane(Vertex_1, OX, 2000)
-  Plane_2 = geompy.MakePlane(Vertex_6, OX, 2000)
-  barre = geompy.MakePartition([barreb], [Plane_1, Plane_2], [], [], geompy.ShapeType["SOLID"], 0, [], 0)
-  v1 = geompy.MakeVertex(-l0-r0, 0, h0/2.)
-  v2 = geompy.MakeVertex(l0+r0, 0, h0/2.)
-  f1 = geompy.GetShapesNearPoint(barre, v1, geompy.ShapeType["FACE"])
-  f2 = geompy.GetShapesNearPoint(barre, v2, geompy.ShapeType["FACE"])
-  #f1 = geompy.CreateGroup(barre, geompy.ShapeType["FACE"])
-  #geompy.UnionIDs(f1, [3])
-  #f2 = geompy.CreateGroup(barre, geompy.ShapeType["FACE"])
-  #geompy.UnionIDs(f2, [20])
-
-  Auto_group_for_Sub_mesh_1 = geompy.CreateGroup(barre, geompy.ShapeType["FACE"])
-  geompy.UnionList(Auto_group_for_Sub_mesh_1, [f1, f2])
-  nom = r'barre_l_{:03d}__r_{:05.2f}__h_{:05.2f}__d0_{:05.2f}__d1_{:05.2f}'.format(int(l0), r0, h0, d0, d1)
-  nombrep = nom + ".brep"
-  geompy.ExportBREP(barre, direc + os.sep + nombrep )
-  props = geompy.BasicProperties(barre)
-  geomvol = props[2]
-
-  #geompy.addToStudy( barre, 'barre' )
-  #geompy.addToStudyInFather( barre, f1, 'f1' )
-  #geompy.addToStudyInFather( barre, f2, 'f2' )
-
-  smesh.SetEnablePublish( False )
-
-  isTetra = False
-  barre_1 = smesh.Mesh(barre)
-  # SO = salome.myStudy.FindObjectIOR(salome.myStudy.ConvertObjectToIOR(barre_1.GetMesh()))
-  # if SO:
-  #   print ("_______",SO.GetID(),SO.GetName())
-  # else:
-  #   print ("_______NO_SO!!!")
-  if (isTetra):
-    NETGEN_1D_2D_3D = barre_1.Tetrahedron(algo=smeshBuilder.NETGEN_1D2D3D)
-    NETGEN_3D_Parameters_1 = NETGEN_1D_2D_3D.Parameters()
-    NETGEN_3D_Parameters_1.SetMaxSize( d0 )
-    NETGEN_3D_Parameters_1.SetSecondOrder( 0 )
-    NETGEN_3D_Parameters_1.SetOptimize( 1 )
-    NETGEN_3D_Parameters_1.SetFineness( 3 )
-    NETGEN_3D_Parameters_1.SetChordalError( 0.1 )
-    NETGEN_3D_Parameters_1.SetChordalErrorEnabled( 0 )
-    NETGEN_3D_Parameters_1.SetMinSize( d0 )
-    NETGEN_3D_Parameters_1.SetUseSurfaceCurvature( 1 )
-    NETGEN_3D_Parameters_1.SetFuseEdges( 1 )
-    NETGEN_3D_Parameters_1.SetQuadAllowed( 0 )
-    NETGEN_1D_2D = barre_1.Triangle(algo=smeshBuilder.NETGEN_1D2D,geom=Auto_group_for_Sub_mesh_1)
-    NETGEN_2D_Parameters_1 = NETGEN_1D_2D.Parameters()
-    NETGEN_2D_Parameters_1.SetMaxSize( d1 )
-    NETGEN_2D_Parameters_1.SetSecondOrder( 0 )
-    NETGEN_2D_Parameters_1.SetOptimize( 1 )
-    NETGEN_2D_Parameters_1.SetFineness( 3 )
-    NETGEN_2D_Parameters_1.SetChordalError( 0.1 )
-    NETGEN_2D_Parameters_1.SetChordalErrorEnabled( 0 )
-    NETGEN_2D_Parameters_1.SetMinSize( d1 )
-    NETGEN_2D_Parameters_1.SetUseSurfaceCurvature( 1 )
-    NETGEN_2D_Parameters_1.SetFuseEdges( 1 )
-    NETGEN_2D_Parameters_1.SetQuadAllowed( 0 )
-  else:
-    Regular_1D = barre_1.Segment()
-    Number_of_Segments_1 = Regular_1D.NumberOfSegments(15)
-    Quadrangle_2D = barre_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
-    Hexa_3D = barre_1.Hexahedron(algo=smeshBuilder.Hexa)   
-  isDone = barre_1.Compute()
-  
-  f1_1 = barre_1.GroupOnGeom(f1,'f1',SMESH.FACE)
-  f2_1 = barre_1.GroupOnGeom(f2,'f2',SMESH.FACE)
-  smesh.SetName(barre_1, nom)
-  nommed = nom + ".med"
-  barre_1.ExportMED( direc + os.sep + nommed, auto_groups=0, minor=0, overwrite=1, meshPart=None, autoDimension=1 )
-  measure = smesh.CreateMeasurements()
-  meshvol = measure.Volume(barre_1.mesh)
-  print("Maillage publié : ", direc + os.sep + nommed)
-  clearMesh(barre_1, salome.myStudy, nom)
-  deltag = abs(geomvol - volume)/volume
-  deltam = abs(meshvol - geomvol)/geomvol
-  delta = abs(meshvol - volume)/volume
-  print("volumes:", volume, geomvol, meshvol, deltag, deltam)
-  assert(deltag < 1.e-5)
-  assert(deltam < 2.e-3)
-  #import time
-  #time.sleep(30)
-  return delta
-
-
-def clearMesh(theMesh, theStudy, aName):
-  theMesh.Clear()
-  aMesh = theMesh.GetMesh()
-  aMesh.UnRegister()
-  # aStudyBuilder = theStudy.NewBuilder()
-  # SO = theStudy.FindObjectIOR(theStudy.ConvertObjectToIOR(aMesh))
-  # objects_to_unpublish = [SO]
-  # refs = theStudy.FindDependances(SO)
-  # objects_to_unpublish += refs
-  # for o in objects_to_unpublish:
-  #   if o is not None:
-  #     aStudyBuilder.RemoveObjectWithChildren(o)
-  print("clearMesh done:", aName)
-
-def genere(r0, h0, my_container, direc):
-  l0 = 50.0
-  d0 = min(r0/2., h0/6.)
-  d1 = d0/2.
-  res = geomesh(l0, r0, h0, d0, d1, my_container, direc)
-  return res
-
-def genere2(r0h0, my_container, direc):
-  l0 = 50.0
-  r0 = r0h0[0]
-  h0 = r0h0[1]
-  d0 = min(r0/2., h0/6.)
-  d1 = d0/2.
-  res = geomesh(l0, r0, h0, d0, d1, my_container, direc)
-  return res
index 6ad86e5fa9ca2e3543d8eecbb489aaf65448df9a..e7ad6f4d6258222c3a70cc17208839eb2ac02b7b 100644 (file)
@@ -1,5 +1,5 @@
 #  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 #
 # Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
diff --git a/src/SMESH_SWIG/ex00_all.py b/src/SMESH_SWIG/ex00_all.py
deleted file mode 100644 (file)
index db0a100..0000000
+++ /dev/null
@@ -1,46 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# ==================================
-# Load all examples
-# -----------------
-#
-import ex01_cube2build
-import ex02_cube2primitive
-import ex03_cube2partition
-import ex04_cube5tetraHexa
-import ex05_hole1build
-import ex06_hole1boolean
-import ex07_hole1partition
-import ex08_hole2build
-import ex09_grid4build
-import ex10_grid4geometry
-import ex11_grid3partition
-import ex12_grid17partition
-import ex13_hole1partial
-import ex14_cyl1holed
-import ex15_cyl2geometry
-import ex16_cyl2complementary
-import ex17_dome1
-import ex18_dome2
-import ex19_sphereINcube
diff --git a/src/SMESH_SWIG/ex01_cube2build.py b/src/SMESH_SWIG/ex01_cube2build.py
deleted file mode 100644 (file)
index c12b293..0000000
+++ /dev/null
@@ -1,326 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# =======================================
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Geometry
-# ========
-
-# A small cube centered and put on a great cube build by points, edges, faces and solids
-
-# Points
-# ------
-
-greatPoint111 = geompy.MakeVertex( 0,  0,  0)
-greatPoint211 = geompy.MakeVertex(10,  0,  0)
-greatPoint311 = geompy.MakeVertex(20,  0,  0)
-greatPoint411 = geompy.MakeVertex(30,  0,  0)
-
-greatPoint121 = geompy.MakeVertex( 0, 10,  0)
-greatPoint221 = geompy.MakeVertex(10, 10,  0)
-greatPoint321 = geompy.MakeVertex(20, 10,  0)
-greatPoint421 = geompy.MakeVertex(30, 10,  0)
-
-greatPoint112 = geompy.MakeVertex( 0,  0, 10)
-greatPoint212 = geompy.MakeVertex(10,  0, 10)
-greatPoint312 = geompy.MakeVertex(20,  0, 10)
-greatPoint412 = geompy.MakeVertex(30,  0, 10)
-
-greatPoint122 = geompy.MakeVertex( 0, 10, 10)
-greatPoint222 = geompy.MakeVertex(10, 10, 10)
-greatPoint322 = geompy.MakeVertex(20, 10, 10)
-greatPoint422 = geompy.MakeVertex(30, 10, 10)
-
-greatPoint113 = geompy.MakeVertex( 0,  0, 20)
-greatPoint213 = geompy.MakeVertex(10,  0, 20)
-greatPoint313 = geompy.MakeVertex(20,  0, 20)
-greatPoint413 = geompy.MakeVertex(30,  0, 20)
-
-greatPoint123 = geompy.MakeVertex( 0, 10, 20)
-greatPoint223 = geompy.MakeVertex(10, 10, 20)
-greatPoint323 = geompy.MakeVertex(20, 10, 20)
-greatPoint423 = geompy.MakeVertex(30, 10, 20)
-
-greatPoint114 = geompy.MakeVertex( 0,  0, 30)
-greatPoint214 = geompy.MakeVertex(10,  0, 30)
-greatPoint314 = geompy.MakeVertex(20,  0, 30)
-greatPoint414 = geompy.MakeVertex(30,  0, 30)
-
-greatPoint124 = geompy.MakeVertex( 0, 10, 30)
-greatPoint224 = geompy.MakeVertex(10, 10, 30)
-greatPoint324 = geompy.MakeVertex(20, 10, 30)
-greatPoint424 = geompy.MakeVertex(30, 10, 30)
-
-
-smallPoint111 = greatPoint222
-smallPoint211 = greatPoint322
-smallPoint121 = geompy.MakeVertex(10, 20, 10)
-smallPoint221 = geompy.MakeVertex(20, 20, 10)
-
-smallPoint112 = greatPoint223
-smallPoint212 = greatPoint323
-smallPoint122 = geompy.MakeVertex(10, 20, 20)
-smallPoint222 = geompy.MakeVertex(20, 20, 20)
-
-# Edges
-# -----
-
-smallEdgeX11 = geompy.MakeEdge(smallPoint111, smallPoint211)
-smallEdgeX21 = geompy.MakeEdge(smallPoint121, smallPoint221)
-smallEdgeX12 = geompy.MakeEdge(smallPoint112, smallPoint212)
-smallEdgeX22 = geompy.MakeEdge(smallPoint122, smallPoint222)
-
-smallEdgeY11 = geompy.MakeEdge(smallPoint111, smallPoint121)
-smallEdgeY21 = geompy.MakeEdge(smallPoint211, smallPoint221)
-smallEdgeY12 = geompy.MakeEdge(smallPoint112, smallPoint122)
-smallEdgeY22 = geompy.MakeEdge(smallPoint212, smallPoint222)
-
-smallEdgeZ11 = geompy.MakeEdge(smallPoint111, smallPoint112)
-smallEdgeZ21 = geompy.MakeEdge(smallPoint211, smallPoint212)
-smallEdgeZ12 = geompy.MakeEdge(smallPoint121, smallPoint122)
-smallEdgeZ22 = geompy.MakeEdge(smallPoint221, smallPoint222)
-
-
-greatEdgeX111 = geompy.MakeEdge(greatPoint111, greatPoint211)
-greatEdgeX211 = geompy.MakeEdge(greatPoint211, greatPoint311)
-greatEdgeX311 = geompy.MakeEdge(greatPoint311, greatPoint411)
-greatEdgeX121 = geompy.MakeEdge(greatPoint121, greatPoint221)
-greatEdgeX221 = geompy.MakeEdge(greatPoint221, greatPoint321)
-greatEdgeX321 = geompy.MakeEdge(greatPoint321, greatPoint421)
-
-greatEdgeX112 = geompy.MakeEdge(greatPoint112, greatPoint212)
-greatEdgeX212 = geompy.MakeEdge(greatPoint212, greatPoint312)
-greatEdgeX312 = geompy.MakeEdge(greatPoint312, greatPoint412)
-greatEdgeX122 = geompy.MakeEdge(greatPoint122, greatPoint222)
-greatEdgeX222 = smallEdgeX11
-greatEdgeX322 = geompy.MakeEdge(greatPoint322, greatPoint422)
-
-greatEdgeX113 = geompy.MakeEdge(greatPoint113, greatPoint213)
-greatEdgeX213 = geompy.MakeEdge(greatPoint213, greatPoint313)
-greatEdgeX313 = geompy.MakeEdge(greatPoint313, greatPoint413)
-greatEdgeX123 = geompy.MakeEdge(greatPoint123, greatPoint223)
-greatEdgeX223 = smallEdgeX12
-greatEdgeX323 = geompy.MakeEdge(greatPoint323, greatPoint423)
-
-greatEdgeX114 = geompy.MakeEdge(greatPoint114, greatPoint214)
-greatEdgeX214 = geompy.MakeEdge(greatPoint214, greatPoint314)
-greatEdgeX314 = geompy.MakeEdge(greatPoint314, greatPoint414)
-greatEdgeX124 = geompy.MakeEdge(greatPoint124, greatPoint224)
-greatEdgeX224 = geompy.MakeEdge(greatPoint224, greatPoint324)
-greatEdgeX324 = geompy.MakeEdge(greatPoint324, greatPoint424)
-
-greatEdgeY11 = geompy.MakeEdge(greatPoint111, greatPoint121)
-greatEdgeY21 = geompy.MakeEdge(greatPoint211, greatPoint221)
-greatEdgeY31 = geompy.MakeEdge(greatPoint311, greatPoint321)
-greatEdgeY41 = geompy.MakeEdge(greatPoint411, greatPoint421)
-
-greatEdgeY12 = geompy.MakeEdge(greatPoint112, greatPoint122)
-greatEdgeY22 = geompy.MakeEdge(greatPoint212, greatPoint222)
-greatEdgeY32 = geompy.MakeEdge(greatPoint312, greatPoint322)
-greatEdgeY42 = geompy.MakeEdge(greatPoint412, greatPoint422)
-
-greatEdgeY13 = geompy.MakeEdge(greatPoint113, greatPoint123)
-greatEdgeY23 = geompy.MakeEdge(greatPoint213, greatPoint223)
-greatEdgeY33 = geompy.MakeEdge(greatPoint313, greatPoint323)
-greatEdgeY43 = geompy.MakeEdge(greatPoint413, greatPoint423)
-
-greatEdgeY14 = geompy.MakeEdge(greatPoint114, greatPoint124)
-greatEdgeY24 = geompy.MakeEdge(greatPoint214, greatPoint224)
-greatEdgeY34 = geompy.MakeEdge(greatPoint314, greatPoint324)
-greatEdgeY44 = geompy.MakeEdge(greatPoint414, greatPoint424)
-
-greatEdgeZ111 = geompy.MakeEdge(greatPoint111, greatPoint112)
-greatEdgeZ211 = geompy.MakeEdge(greatPoint211, greatPoint212)
-greatEdgeZ311 = geompy.MakeEdge(greatPoint311, greatPoint312)
-greatEdgeZ411 = geompy.MakeEdge(greatPoint411, greatPoint412)
-
-greatEdgeZ121 = geompy.MakeEdge(greatPoint121, greatPoint122)
-greatEdgeZ221 = geompy.MakeEdge(greatPoint221, greatPoint222)
-greatEdgeZ321 = geompy.MakeEdge(greatPoint321, greatPoint322)
-greatEdgeZ421 = geompy.MakeEdge(greatPoint421, greatPoint422)
-
-greatEdgeZ112 = geompy.MakeEdge(greatPoint112, greatPoint113)
-greatEdgeZ212 = geompy.MakeEdge(greatPoint212, greatPoint213)
-greatEdgeZ312 = geompy.MakeEdge(greatPoint312, greatPoint313)
-greatEdgeZ412 = geompy.MakeEdge(greatPoint412, greatPoint413)
-
-greatEdgeZ122 = geompy.MakeEdge(greatPoint122, greatPoint123)
-greatEdgeZ222 = smallEdgeZ11
-greatEdgeZ322 = smallEdgeZ21
-greatEdgeZ422 = geompy.MakeEdge(greatPoint422, greatPoint423)
-
-greatEdgeZ113 = geompy.MakeEdge(greatPoint113, greatPoint114)
-greatEdgeZ213 = geompy.MakeEdge(greatPoint213, greatPoint214)
-greatEdgeZ313 = geompy.MakeEdge(greatPoint313, greatPoint314)
-greatEdgeZ413 = geompy.MakeEdge(greatPoint413, greatPoint414)
-
-greatEdgeZ123 = geompy.MakeEdge(greatPoint123, greatPoint124)
-greatEdgeZ223 = geompy.MakeEdge(greatPoint223, greatPoint224)
-greatEdgeZ323 = geompy.MakeEdge(greatPoint323, greatPoint324)
-greatEdgeZ423 = geompy.MakeEdge(greatPoint423, greatPoint424)
-
-# Faces
-# -----
-
-smallFaceX1 = geompy.MakeQuad(smallEdgeY11, smallEdgeZ11, smallEdgeY12, smallEdgeZ12)
-smallFaceX2 = geompy.MakeQuad(smallEdgeY21, smallEdgeZ21, smallEdgeY22, smallEdgeZ22)
-smallFaceY1 = geompy.MakeQuad(smallEdgeX11, smallEdgeZ11, smallEdgeX12, smallEdgeZ21)
-smallFaceY2 = geompy.MakeQuad(smallEdgeX21, smallEdgeZ12, smallEdgeX22, smallEdgeZ22)
-smallFaceZ1 = geompy.MakeQuad(smallEdgeX11, smallEdgeY11, smallEdgeX21, smallEdgeY21)
-smallFaceZ2 = geompy.MakeQuad(smallEdgeX12, smallEdgeY12, smallEdgeX22, smallEdgeY22)
-
-
-greatFaceX11 = geompy.MakeQuad(greatEdgeY11, greatEdgeZ111, greatEdgeY12, greatEdgeZ121)
-greatFaceX21 = geompy.MakeQuad(greatEdgeY21, greatEdgeZ211, greatEdgeY22, greatEdgeZ221)
-greatFaceX31 = geompy.MakeQuad(greatEdgeY31, greatEdgeZ311, greatEdgeY32, greatEdgeZ321)
-greatFaceX41 = geompy.MakeQuad(greatEdgeY41, greatEdgeZ411, greatEdgeY42, greatEdgeZ421)
-
-greatFaceX12 = geompy.MakeQuad(greatEdgeY12, greatEdgeZ112, greatEdgeY13, greatEdgeZ122)
-greatFaceX22 = geompy.MakeQuad(greatEdgeY22, greatEdgeZ212, greatEdgeY23, greatEdgeZ222)
-greatFaceX32 = geompy.MakeQuad(greatEdgeY32, greatEdgeZ312, greatEdgeY33, greatEdgeZ322)
-greatFaceX42 = geompy.MakeQuad(greatEdgeY42, greatEdgeZ412, greatEdgeY43, greatEdgeZ422)
-
-greatFaceX13 = geompy.MakeQuad(greatEdgeY13, greatEdgeZ113, greatEdgeY14, greatEdgeZ123)
-greatFaceX23 = geompy.MakeQuad(greatEdgeY23, greatEdgeZ213, greatEdgeY24, greatEdgeZ223)
-greatFaceX33 = geompy.MakeQuad(greatEdgeY33, greatEdgeZ313, greatEdgeY34, greatEdgeZ323)
-greatFaceX43 = geompy.MakeQuad(greatEdgeY43, greatEdgeZ413, greatEdgeY44, greatEdgeZ423)
-
-greatFaceY111 = geompy.MakeQuad(greatEdgeX111, greatEdgeZ111, greatEdgeX112, greatEdgeZ211)
-greatFaceY211 = geompy.MakeQuad(greatEdgeX211, greatEdgeZ211, greatEdgeX212, greatEdgeZ311)
-greatFaceY311 = geompy.MakeQuad(greatEdgeX311, greatEdgeZ311, greatEdgeX312, greatEdgeZ411)
-greatFaceY121 = geompy.MakeQuad(greatEdgeX121, greatEdgeZ121, greatEdgeX122, greatEdgeZ221)
-greatFaceY221 = geompy.MakeQuad(greatEdgeX221, greatEdgeZ221, greatEdgeX222, greatEdgeZ321)
-greatFaceY321 = geompy.MakeQuad(greatEdgeX321, greatEdgeZ321, greatEdgeX322, greatEdgeZ421)
-
-greatFaceY112 = geompy.MakeQuad(greatEdgeX112, greatEdgeZ112, greatEdgeX113, greatEdgeZ212)
-greatFaceY212 = geompy.MakeQuad(greatEdgeX212, greatEdgeZ212, greatEdgeX213, greatEdgeZ312)
-greatFaceY312 = geompy.MakeQuad(greatEdgeX312, greatEdgeZ312, greatEdgeX313, greatEdgeZ412)
-greatFaceY122 = geompy.MakeQuad(greatEdgeX122, greatEdgeZ122, greatEdgeX123, greatEdgeZ222)
-greatFaceY222 = smallFaceY1
-greatFaceY322 = geompy.MakeQuad(greatEdgeX322, greatEdgeZ322, greatEdgeX323, greatEdgeZ422)
-
-greatFaceY113 = geompy.MakeQuad(greatEdgeX113, greatEdgeZ113, greatEdgeX114, greatEdgeZ213)
-greatFaceY213 = geompy.MakeQuad(greatEdgeX213, greatEdgeZ213, greatEdgeX214, greatEdgeZ313)
-greatFaceY313 = geompy.MakeQuad(greatEdgeX313, greatEdgeZ313, greatEdgeX314, greatEdgeZ413)
-greatFaceY123 = geompy.MakeQuad(greatEdgeX123, greatEdgeZ123, greatEdgeX124, greatEdgeZ223)
-greatFaceY223 = geompy.MakeQuad(greatEdgeX223, greatEdgeZ223, greatEdgeX224, greatEdgeZ323)
-greatFaceY323 = geompy.MakeQuad(greatEdgeX323, greatEdgeZ323, greatEdgeX324, greatEdgeZ423)
-
-greatFaceZ11 = geompy.MakeQuad(greatEdgeX111, greatEdgeY11, greatEdgeX121, greatEdgeY21)
-greatFaceZ21 = geompy.MakeQuad(greatEdgeX211, greatEdgeY21, greatEdgeX221, greatEdgeY31)
-greatFaceZ31 = geompy.MakeQuad(greatEdgeX311, greatEdgeY31, greatEdgeX321, greatEdgeY41)
-
-greatFaceZ12 = geompy.MakeQuad(greatEdgeX112, greatEdgeY12, greatEdgeX122, greatEdgeY22)
-greatFaceZ22 = geompy.MakeQuad(greatEdgeX212, greatEdgeY22, greatEdgeX222, greatEdgeY32)
-greatFaceZ32 = geompy.MakeQuad(greatEdgeX312, greatEdgeY32, greatEdgeX322, greatEdgeY42)
-
-greatFaceZ13 = geompy.MakeQuad(greatEdgeX113, greatEdgeY13, greatEdgeX123, greatEdgeY23)
-greatFaceZ23 = geompy.MakeQuad(greatEdgeX213, greatEdgeY23, greatEdgeX223, greatEdgeY33)
-greatFaceZ33 = geompy.MakeQuad(greatEdgeX313, greatEdgeY33, greatEdgeX323, greatEdgeY43)
-
-greatFaceZ14 = geompy.MakeQuad(greatEdgeX114, greatEdgeY14, greatEdgeX124, greatEdgeY24)
-greatFaceZ24 = geompy.MakeQuad(greatEdgeX214, greatEdgeY24, greatEdgeX224, greatEdgeY34)
-greatFaceZ34 = geompy.MakeQuad(greatEdgeX314, greatEdgeY34, greatEdgeX324, greatEdgeY44)
-
-# Solids
-# ------
-
-smallBlock   = geompy.MakeHexa(smallFaceX1, smallFaceX2, smallFaceY1, smallFaceY2, smallFaceZ1, smallFaceZ2)
-
-greatBlock11 = geompy.MakeHexa(greatFaceX11, greatFaceX21, greatFaceY111, greatFaceY121, greatFaceZ11, greatFaceZ12)
-greatBlock21 = geompy.MakeHexa(greatFaceX21, greatFaceX31, greatFaceY211, greatFaceY221, greatFaceZ21, greatFaceZ22)
-greatBlock31 = geompy.MakeHexa(greatFaceX31, greatFaceX41, greatFaceY311, greatFaceY321, greatFaceZ31, greatFaceZ32)
-
-greatBlock12 = geompy.MakeHexa(greatFaceX12, greatFaceX22, greatFaceY112, greatFaceY122, greatFaceZ12, greatFaceZ13)
-greatBlock22 = geompy.MakeHexa(greatFaceX22, greatFaceX32, greatFaceY212, greatFaceY222, greatFaceZ22, greatFaceZ23)
-greatBlock32 = geompy.MakeHexa(greatFaceX32, greatFaceX42, greatFaceY312, greatFaceY322, greatFaceZ32, greatFaceZ33)
-
-greatBlock13 = geompy.MakeHexa(greatFaceX13, greatFaceX23, greatFaceY113, greatFaceY123, greatFaceZ13, greatFaceZ14)
-greatBlock23 = geompy.MakeHexa(greatFaceX23, greatFaceX33, greatFaceY213, greatFaceY223, greatFaceZ23, greatFaceZ24)
-greatBlock33 = geompy.MakeHexa(greatFaceX33, greatFaceX43, greatFaceY313, greatFaceY323, greatFaceZ33, greatFaceZ34)
-
-# Compound
-# --------
-
-c_l = []
-c_l.append(smallBlock)
-c_l.append(greatBlock11)
-c_l.append(greatBlock21)
-c_l.append(greatBlock31)
-c_l.append(greatBlock12)
-c_l.append(greatBlock22)
-c_l.append(greatBlock32)
-c_l.append(greatBlock13)
-c_l.append(greatBlock23)
-c_l.append(greatBlock33)
-
-piece = geompy.MakeCompound(c_l)
-
-# Add in study
-# ------------
-
-piece_id = geompy.addToStudy(piece, "ex01_cube2build")
-
-# Meshing
-# =======
-
-# Create hexahedrical mesh on piece
-# ---------------------------------
-
-hexa = smesh.Mesh(piece, "ex01_cube2build:hexa")
-
-algo = hexa.Segment()
-algo.NumberOfSegments(4)
-
-hexa.Quadrangle()
-
-hexa.Hexahedron()
-
-# Create local hypothesis
-# -----------------------
-
-algo = hexa.Segment(greatEdgeX111)
-
-algo.Arithmetic1D(1, 4)
-
-algo.Propagation()
-
-# Compute the mesh
-# ----------------
-
-hexa.Compute()
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex02_cube2primitive.py b/src/SMESH_SWIG/ex02_cube2primitive.py
deleted file mode 100644 (file)
index 3ce884b..0000000
+++ /dev/null
@@ -1,128 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# =======================================
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Geometry
-# ========
-
-# A small cube centered and put on a great cube build by primitive geometric functionalities
-
-# Values
-# ------
-
-ox = 0
-oy = 0
-oz = 0
-
-arete = 10
-
-# Points
-# ------
-
-blockPoint111 = geompy.MakeVertex(ox      , oy, oz)
-blockPoint211 = geompy.MakeVertex(ox+arete, oy, oz)
-blockPoint112 = geompy.MakeVertex(ox      , oy, oz+arete)
-blockPoint212 = geompy.MakeVertex(ox+arete, oy, oz+arete)
-
-# Face and solid
-# --------------
-
-blockFace1 = geompy.MakeQuad4Vertices(blockPoint111, blockPoint211, blockPoint212, blockPoint112)
-
-blockSolid11  = geompy.MakePrismVecH(blockFace1, geompy.MakeVectorDXDYDZ(0, 1, 0), arete)
-
-# Translations
-# ------------
-
-blockSolid21  = geompy.MakeTranslation(blockSolid11, arete, 0, 0)
-blockSolid31  = geompy.MakeTranslation(blockSolid21, arete, 0, 0)
-
-blockSolid12  = geompy.MakeTranslation(blockSolid11, 0, 0, arete)
-blockSolid22  = geompy.MakeTranslation(blockSolid12, arete, 0, 0)
-blockSolid32  = geompy.MakeTranslation(blockSolid22, arete, 0, 0)
-
-blockSolid13  = geompy.MakeTranslation(blockSolid12, 0, 0, arete)
-blockSolid23  = geompy.MakeTranslation(blockSolid13, arete, 0, 0)
-blockSolid33  = geompy.MakeTranslation(blockSolid23, arete, 0, 0)
-
-blockSolid111 = geompy.MakeTranslation(blockSolid22, 0, arete, 0)
-
-# Compound and glue
-# -----------------
-
-c_l = []
-c_l.append(blockSolid11)
-c_l.append(blockSolid21)
-c_l.append(blockSolid31)
-c_l.append(blockSolid12)
-c_l.append(blockSolid22)
-c_l.append(blockSolid32)
-c_l.append(blockSolid13)
-c_l.append(blockSolid23)
-c_l.append(blockSolid33)
-c_l.append(blockSolid111)
-
-c_cpd = geompy.MakeCompound(c_l)
-
-piece = geompy.MakeGlueFaces(c_cpd, 1.e-5)
-
-# Add in study
-# ------------
-
-piece_id = geompy.addToStudy(piece, "ex02_cube2primitive")
-
-# Meshing
-# =======
-
-# Create hexahedrical mesh on piece
-# ---------------------------------
-
-hexa = smesh.Mesh(piece, "ex02_cube2primitive:hexa")
-
-algo = hexa.Segment()
-algo.LocalLength(1)
-
-hexa.Quadrangle()
-
-hexa.Hexahedron()
-
-# Compute the mesh
-# ----------------
-
-hexa.Compute()
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex03_cube2partition.py b/src/SMESH_SWIG/ex03_cube2partition.py
deleted file mode 100644 (file)
index 79d6458..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# =======================================
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Geometry
-# ========
-
-# A small cube centered and put on a great cube build with partition
-
-# Values
-# ------
-
-g_ox = 0
-g_oy = 0
-g_oz = 0
-
-g_arete = 10
-
-g_trim = 1000
-
-# Points
-# ------
-
-v_arete2 = g_arete*2
-v_arete3 = g_arete*3
-
-v_1 = geompy.MakeVertex(g_ox         , g_oy         , g_oz         )
-v_2 = geompy.MakeVertex(g_ox+v_arete3, g_oy+g_arete , g_oz+v_arete3)
-
-v_3 = geompy.MakeVertex(g_ox+g_arete , g_oy+g_arete , g_oz+g_arete )
-v_4 = geompy.MakeVertex(g_ox+v_arete2, g_oy+v_arete2, g_oz+v_arete2)
-
-# Solids
-# ------
-
-s_base = geompy.MakeBoxTwoPnt(v_1, v_2)
-s_haut = geompy.MakeBoxTwoPnt(v_3, v_4)
-
-# Partition
-# ---------
-
-p_dir1 = geompy.MakeVectorDXDYDZ(1, 0, 0)
-p_dir2 = geompy.MakeVectorDXDYDZ(0, 0, 1)
-p_dir3 = geompy.MakeVectorDXDYDZ(0, 1, 0)
-
-p_tools = []
-
-p_tools.append(geompy.MakePlane(v_3, p_dir1, g_trim))
-p_tools.append(geompy.MakePlane(v_4, p_dir1, g_trim))
-p_tools.append(geompy.MakePlane(v_3, p_dir2, g_trim))
-p_tools.append(geompy.MakePlane(v_4, p_dir2, g_trim))
-p_tools.append(geompy.MakePlane(v_3, p_dir3, g_trim))
-
-piece = geompy.MakePartition([s_base, s_haut], p_tools, [], [], geompy.ShapeType["SOLID"])
-
-# Study
-# -----
-
-piece_id = geompy.addToStudy(piece, "ex03_cube2partition")
-
-# Meshing
-# =======
-
-# Create hexahedrical mesh on piece
-# ---------------------------------
-
-hexa = smesh.Mesh(piece, "ex03_cube2partition:hexa")
-
-algo = hexa.Segment()
-algo.NumberOfSegments(5)
-
-hexa.Quadrangle()
-
-hexa.Hexahedron()
-
-# Compute the mesh
-# ----------------
-
-hexa.Compute()
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex04_cube5tetraHexa.py b/src/SMESH_SWIG/ex04_cube5tetraHexa.py
deleted file mode 100644 (file)
index 58425ab..0000000
+++ /dev/null
@@ -1,120 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# =======================================
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Geometry
-# ========
-
-# 5 box with a hexahedral mesh and with 2 box in tetrahedral mesh
-
-# Values
-# ------
-
-arete = 100
-
-arete0 = 0
-arete1 = arete
-arete2 = arete*2
-arete3 = arete*3
-
-# Solids
-# ------
-
-box_tetra1 = geompy.MakeBox(arete0, arete0, 0,  arete1, arete1, arete)
-
-box_ijk1   = geompy.MakeBox(arete1, arete0, 0,  arete2, arete1, arete)
-
-box_hexa   = geompy.MakeBox(arete1, arete1, 0,  arete2, arete2, arete)
-
-box_ijk2   = geompy.MakeBox(arete2, arete1, 0,  arete3, arete2, arete)
-
-box_tetra2 = geompy.MakeBox(arete2, arete2, 0,  arete3 ,arete3, arete)
-
-# Piece
-# -----
-
-piece_cpd = geompy.MakeCompound([box_tetra1, box_ijk1, box_hexa, box_ijk2, box_tetra2])
-
-piece = geompy.MakeGlueFaces(piece_cpd, 1e-4)
-
-piece_id = geompy.addToStudy(piece, "ex04_cube5tetraHexa")
-
-# Meshing
-# =======
-
-# Create a hexahedral mesh
-# ------------------------
-
-mixed = smesh.Mesh(piece, "ex04_cube5tetraHexa:mixed")
-
-algo = mixed.Segment()
-
-algo.StartEndLength(3, 25)
-
-mixed.Quadrangle()
-
-mixed.Hexahedron()
-
-# Tetrahedral local mesh
-# ----------------------
-
-def localMesh(b, hyp):
-    box   = geompy.GetInPlace(piece, b)
-    faces = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
-
-    i = 0
-    n = len(faces)
-    while i<n:
-        algo = mixed.Triangle(faces[i])
-        if hyp:
-            algo.MaxElementArea(80)
-        else:
-            algo.LengthFromEdges()
-        i = i + 1
-
-    algo = mixed.Tetrahedron(smeshBuilder.NETGEN, box)
-    algo.MaxElementVolume(400)
-
-localMesh(box_tetra1, 1)
-localMesh(box_tetra2, 0)
-
-# Mesh calculus
-# -------------
-
-mixed.Compute()
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex05_hole1build.py b/src/SMESH_SWIG/ex05_hole1build.py
deleted file mode 100644 (file)
index e0d225e..0000000
+++ /dev/null
@@ -1,155 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# =======================================
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-import math
-
-# Geometry
-# ========
-
-# A centered holed cube build by  build by points, edges, faces and solids
-
-# Values
-# ------
-
-ox = 0
-oy = 0
-oz = 0
-
-longueur = 100
-largeur  =  80
-hauteur  =  50
-
-rayon = 10
-
-# Points
-# ------
-
-basePoint111 = geompy.MakeVertex(ox         ,  oy, oz)
-basePoint211 = geompy.MakeVertex(ox+longueur,  oy, oz)
-basePoint112 = geompy.MakeVertex(ox         ,  oy, oz+largeur)
-basePoint212 = geompy.MakeVertex(ox+longueur,  oy, oz+largeur)
-
-cx = ox+longueur/2
-cy = oy
-cz = oz+largeur/2
-
-ll = longueur/largeur
-ll = ll*ll
-dx = rayon/math.sqrt(1+ll)
-dz = rayon/math.sqrt(1+1/ll)
-
-circlePoint1 = geompy.MakeVertex(cx-dx, cy, cz-dz)
-circlePoint2 = geompy.MakeVertex(cx+dx, cy, cz-dz)
-circlePoint3 = geompy.MakeVertex(cx+dx, cy, cz+dz)
-circlePoint4 = geompy.MakeVertex(cx-dx, cy, cz+dz)
-
-# Edges
-# -----
-
-squareEdge1 = geompy.MakeEdge(basePoint111, basePoint211)
-squareEdge2 = geompy.MakeEdge(basePoint211, basePoint212)
-squareEdge3 = geompy.MakeEdge(basePoint212, basePoint112)
-squareEdge4 = geompy.MakeEdge(basePoint112, basePoint111)
-
-diagEdge1   = geompy.MakeEdge(basePoint111, circlePoint1)
-diagEdge2   = geompy.MakeEdge(basePoint211, circlePoint2)
-diagEdge3   = geompy.MakeEdge(basePoint212, circlePoint3)
-diagEdge4   = geompy.MakeEdge(basePoint112, circlePoint4)
-
-arcEdge1    = geompy.MakeArc(circlePoint1, geompy.MakeVertex(cx      , cy, cz-rayon), circlePoint2)
-arcEdge2    = geompy.MakeArc(circlePoint2, geompy.MakeVertex(cx+rayon, cy, cz      ), circlePoint3)
-arcEdge3    = geompy.MakeArc(circlePoint3, geompy.MakeVertex(cx      , cy, cz+rayon), circlePoint4)
-arcEdge4    = geompy.MakeArc(circlePoint4, geompy.MakeVertex(cx-rayon, cy, cz      ), circlePoint1)
-
-# Faces
-# -----
-
-baseFace1 = geompy.MakeQuad(squareEdge1, diagEdge2, arcEdge1, diagEdge1)
-baseFace2 = geompy.MakeQuad(squareEdge2, diagEdge3, arcEdge2, diagEdge2)
-baseFace3 = geompy.MakeQuad(squareEdge3, diagEdge4, arcEdge3, diagEdge3)
-baseFace4 = geompy.MakeQuad(squareEdge4, diagEdge1, arcEdge4, diagEdge4)
-
-# Solids
-# ------
-
-baseVector = geompy.MakeVectorDXDYDZ(0, 1, 0)
-
-baseSolid1 = geompy.MakePrismVecH(baseFace1, baseVector, hauteur)
-baseSolid2 = geompy.MakePrismVecH(baseFace2, baseVector, hauteur)
-baseSolid3 = geompy.MakePrismVecH(baseFace3, baseVector, hauteur)
-baseSolid4 = geompy.MakePrismVecH(baseFace4, baseVector, hauteur)
-
-# Compound
-# --------
-
-c_l = []
-c_l.append(baseSolid1)
-c_l.append(baseSolid2)
-c_l.append(baseSolid3)
-c_l.append(baseSolid4)
-
-c_cpd = geompy.MakeCompound(c_l)
-piece = geompy.MakeGlueFaces(c_cpd, 1.e-5)
-
-# Add in study
-# ------------
-
-piece_id = geompy.addToStudy(piece, "ex05_hole1build")
-
-# Meshing
-# =======
-
-# Create a hexahedral mesh
-# ------------------------
-
-hexa = smesh.Mesh(piece, "ex05_hole1build:hexa")
-
-algo = hexa.Segment()
-
-algo.NumberOfSegments(6, 3)
-
-hexa.Quadrangle()
-
-hexa.Hexahedron()
-
-# Mesh calculus
-# -------------
-
-hexa.Compute()
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex06_hole1boolean.py b/src/SMESH_SWIG/ex06_hole1boolean.py
deleted file mode 100644 (file)
index 6e3cf6b..0000000
+++ /dev/null
@@ -1,172 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# =======================================
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Geometry
-# ========
-
-# A not centered holed cube build by boolean geometric operations
-
-# Values
-# ------
-
-ox = 0
-oy = 0
-oz = 0
-
-longueur1 = 30
-longueur2 = 70
-
-largeur1  = 30
-largeur2  = 50
-
-hauteur   = 50
-
-rayon = 10
-
-# Triangular face
-# ---------------
-
-def triangle(p1, p2, p3):
-    l = []
-    l.append(geompy.MakeEdge(p1, p2))
-    l.append(geompy.MakeEdge(p2, p3))
-    l.append(geompy.MakeEdge(p3, p1))
-    w = geompy.MakeWire(l)
-    return geompy.MakeFace(w, 1)
-
-# Points
-# ------
-
-basePoint111 = geompy.MakeVertex(ox-longueur1,  oy, oz-largeur1)
-basePoint211 = geompy.MakeVertex(ox+longueur2,  oy, oz-largeur1)
-basePoint112 = geompy.MakeVertex(ox-longueur1,  oy, oz+largeur2)
-basePoint212 = geompy.MakeVertex(ox+longueur2,  oy, oz+largeur2)
-
-holePoint    = geompy.MakeVertex(ox, oy, oz)
-
-# Faces
-# -----
-
-baseFace1 = triangle(basePoint111, basePoint211, holePoint)
-baseFace2 = triangle(basePoint211, basePoint212, holePoint)
-baseFace3 = triangle(basePoint212, basePoint112, holePoint)
-baseFace4 = triangle(basePoint112, basePoint111, holePoint)
-
-# Solids
-# ------
-
-baseVector = geompy.MakeVectorDXDYDZ(0, 1, 0)
-
-baseSolid1 = geompy.MakePrismVecH(baseFace1, baseVector, hauteur)
-baseSolid2 = geompy.MakePrismVecH(baseFace2, baseVector, hauteur)
-baseSolid3 = geompy.MakePrismVecH(baseFace3, baseVector, hauteur)
-baseSolid4 = geompy.MakePrismVecH(baseFace4, baseVector, hauteur)
-
-holeSolid = geompy.MakeCylinder(holePoint, baseVector, rayon, hauteur)
-
-# Boolean operations
-# ------------------
-
-baseHexa1 = geompy.MakeCut(baseSolid1, holeSolid)
-baseHexa2 = geompy.MakeCut(baseSolid2, holeSolid)
-baseHexa3 = geompy.MakeCut(baseSolid3, holeSolid)
-baseHexa4 = geompy.MakeCut(baseSolid4, holeSolid)
-
-# Compound, glue and repair
-# -------------------------
-
-c_l = []
-c_l.append(baseHexa1)
-c_l.append(baseHexa2)
-c_l.append(baseHexa3)
-c_l.append(baseHexa4)
-
-c_cpd = geompy.MakeCompound(c_l)
-c_glu = geompy.MakeGlueFaces(c_cpd, 1.e-5)
-piece = geompy.RemoveExtraEdges(c_glu, doUnionFaces=True)
-
-# Add in study
-# ------------
-
-piece_id = geompy.addToStudy(piece, "ex06_hole1boolean")
-
-# Meshing
-# =======
-
-# Create a hexahedral mesh
-# ------------------------
-
-hexa = smesh.Mesh(piece, "ex06_hole1boolean:hexa")
-
-algo = hexa.Segment()
-
-algo.NumberOfSegments(11)
-
-hexa.Quadrangle()
-
-hexa.Hexahedron()
-
-# Create local hypothesis
-# -----------------------
-
-edge1 = geompy.GetEdgeNearPoint(piece, geompy.MakeVertex(ox, oy, oz-largeur1))
-algo1 = hexa.Segment(edge1)
-algo1.NumberOfSegments(3)
-algo1.Propagation()
-
-edge2 = geompy.GetEdgeNearPoint(piece, geompy.MakeVertex(ox-longueur1, oy, oz))
-algo2 = hexa.Segment(edge2)
-algo2.NumberOfSegments(5)
-algo2.Propagation()
-
-edge3 = geompy.GetEdgeNearPoint(piece, geompy.MakeVertex(ox, oy, oz+largeur2))
-algo3 = hexa.Segment(edge3)
-algo3.NumberOfSegments(7)
-algo3.Propagation()
-
-edge4 = geompy.GetEdgeNearPoint(piece, geompy.MakeVertex(ox+longueur2, oy, oz))
-algo4 = hexa.Segment(edge4)
-algo4.NumberOfSegments(9)
-algo4.Propagation()
-
-# Mesh calculus
-# -------------
-
-hexa.Compute()
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex07_hole1partition.py b/src/SMESH_SWIG/ex07_hole1partition.py
deleted file mode 100644 (file)
index 958e9e5..0000000
+++ /dev/null
@@ -1,112 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# =======================================
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Geometry
-# ========
-
-# A holed cube build by partitioning geometric operations
-
-# Values
-# ------
-
-g_x = 0
-g_y = 0
-g_z = 0
-
-g_longueur = 50.0
-g_largeur  = 40.0
-g_hauteur  = 25.0
-
-g_rayon = 10
-
-g_trim = 1000
-
-# Box
-# ---
-
-b_boite = geompy.MakeBox(g_x-g_longueur, g_y-g_hauteur, g_z-g_largeur,  g_x+g_longueur, g_y+g_hauteur, g_z+g_largeur)
-
-# Cylinder
-# --------
-
-c_axe = geompy.MakeVectorDXDYDZ(0, 1, 0)
-
-c_cyl = geompy.MakeCylinder(geompy.MakeVertex(g_x, g_y-g_hauteur, g_z), c_axe, g_rayon, g_hauteur*2)
-
-c_piece = geompy.MakeCut(b_boite, c_cyl)
-
-# Partition and reperation
-# ------------------------
-
-p_centre = geompy.MakeVertex(g_x, g_y, g_z)
-
-p_tools = []
-p_tools.append(geompy.MakePlane(p_centre, geompy.MakeVectorDXDYDZ( g_largeur, 0, g_longueur), g_trim))
-p_tools.append(geompy.MakePlane(p_centre, geompy.MakeVectorDXDYDZ(-g_largeur, 0, g_longueur), g_trim))
-
-p_part = geompy.MakePartition([c_piece], p_tools, [], [], geompy.ShapeType["SOLID"])
-
-p_blocs = geompy.RemoveExtraEdges(p_part, doUnionFaces=True)
-piece   = geompy.MakeGlueFaces(p_blocs, 1.e-5)
-
-# Add in study
-# ------------
-
-piece_id = geompy.addToStudy(piece, "ex07_hole1partition")
-
-# Meshing
-# =======
-
-# Create a hexahedral mesh
-# ------------------------
-
-hexa = smesh.Mesh(piece, "ex07_hole1partition:hexa")
-
-algo = hexa.Segment()
-algo.NumberOfSegments(20)
-
-hexa.Quadrangle()
-
-hexa.Hexahedron()
-
-# Mesh calculus
-# -------------
-
-hexa.Compute()
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex08_hole2build.py b/src/SMESH_SWIG/ex08_hole2build.py
deleted file mode 100644 (file)
index 77c913a..0000000
+++ /dev/null
@@ -1,145 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# =======================================
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Geometry
-# ========
-
-# A twice holed cube build by points, edges, faces and solids
-
-# Values
-# ------
-
-ox = 0
-oy = 0
-oz = 0
-
-longueur = 200
-largeur  = 100
-hauteur  =  80
-
-cylindre = 50
-
-rayon = 20
-
-# Points
-# ------
-
-piecePoint1 = geompy.MakeVertex(ox         , oy, oz)
-piecePoint2 = geompy.MakeVertex(ox+longueur, oy, oz)
-piecePoint3 = geompy.MakeVertex(ox+longueur, oy, oz+largeur)
-piecePoint4 = geompy.MakeVertex(ox         , oy, oz+largeur)
-
-cz = oz+largeur/2
-
-cylPoint1    = geompy.MakeVertex(ox+cylindre         , oy, cz-rayon)
-cylPoint2    = geompy.MakeVertex(ox+longueur-cylindre, oy, cz-rayon)
-cylPoint3    = geompy.MakeVertex(ox+longueur-cylindre, oy, cz+rayon)
-cylPoint4    = geompy.MakeVertex(ox+cylindre         , oy, cz+rayon)
-
-# Edges
-# -----
-
-pieceEdge1 = geompy.MakeEdge(piecePoint1, piecePoint4)
-pieceEdge2 = geompy.MakeEdge(piecePoint1, cylPoint1)
-pieceEdge3 = geompy.MakeEdge(piecePoint4, cylPoint4)
-
-pieceEdge4 = geompy.MakeEdge(piecePoint2, piecePoint3)
-pieceEdge5 = geompy.MakeEdge(piecePoint2, cylPoint2)
-pieceEdge6 = geompy.MakeEdge(piecePoint3, cylPoint3)
-
-pieceEdge7 = geompy.MakeEdge(cylPoint1, cylPoint2)
-pieceEdge8 = geompy.MakeEdge(cylPoint3, cylPoint4)
-
-cylEdge1 = geompy.MakeArc(cylPoint1, geompy.MakeVertex(ox+cylindre-rayon         , oy, cz), cylPoint4)
-cylEdge2 = geompy.MakeArc(cylPoint1, geompy.MakeVertex(ox+cylindre+rayon         , oy, cz), cylPoint4)
-cylEdge3 = geompy.MakeArc(cylPoint2, geompy.MakeVertex(ox+longueur-cylindre-rayon, oy, cz), cylPoint3)
-cylEdge4 = geompy.MakeArc(cylPoint2, geompy.MakeVertex(ox+longueur-cylindre+rayon, oy, cz), cylPoint3)
-
-# Faces
-# -----
-
-pieceFace1 = geompy.MakeQuad4Vertices(piecePoint1, piecePoint2, cylPoint2 , cylPoint1 )
-pieceFace2 = geompy.MakeQuad         (pieceEdge1 , pieceEdge2 , cylEdge1  , pieceEdge3)
-pieceFace3 = geompy.MakeQuad4Vertices(piecePoint3, piecePoint4, cylPoint4 , cylPoint3 )
-pieceFace4 = geompy.MakeQuad         (pieceEdge4 , pieceEdge5 , cylEdge4  , pieceEdge6)
-pieceFace5 = geompy.MakeQuad         (pieceEdge7 , cylEdge3   , pieceEdge8, cylEdge2  )
-
-# Solids
-# ------
-
-pieceVector = geompy.MakeVectorDXDYDZ(0, 1, 0)
-
-pieceSolid1 = geompy.MakePrismVecH(pieceFace1, pieceVector, hauteur)
-pieceSolid2 = geompy.MakePrismVecH(pieceFace2, pieceVector, hauteur)
-pieceSolid3 = geompy.MakePrismVecH(pieceFace3, pieceVector, hauteur)
-pieceSolid4 = geompy.MakePrismVecH(pieceFace4, pieceVector, hauteur)
-pieceSolid5 = geompy.MakePrismVecH(pieceFace5, pieceVector, hauteur)
-
-# Compound and glue
-# -----------------
-
-c_cpd = geompy.MakeCompound([pieceSolid1, pieceSolid2, pieceSolid3, pieceSolid4, pieceSolid5])
-
-piece = geompy.MakeGlueFaces(c_cpd, 1.e-5)
-
-# Add in study
-# ------------
-
-piece_id = geompy.addToStudy(piece, "ex08_hole2build")
-
-# Meshing
-# =======
-
-# Create a hexahedral mesh
-# ------------------------
-
-hexa = smesh.Mesh(piece, "ex08_hole2build:hexa")
-
-algo = hexa.Segment()
-algo.NumberOfSegments(7)
-
-hexa.Quadrangle()
-
-hexa.Hexahedron()
-
-# Mesh calculus
-# -------------
-
-hexa.Compute()
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex09_grid4build.py b/src/SMESH_SWIG/ex09_grid4build.py
deleted file mode 100644 (file)
index a55e974..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# =======================================
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-import math
-
-# Geometry
-# ========
-
-# Element of a grid compound by a square with a cylinder on each vertex build by points, edges, faces and solids
-
-# Values
-# ------
-
-ox = 0
-oy = 0
-oz = 0
-
-arete   =  50
-hauteur = 100
-
-rayon = 10
-
-demi = rayon/2
-r3   = demi*math.sqrt(3)
-
-# Points
-# ------
-
-piecePoint111 = geompy.MakeVertex(ox+rayon      , oy, oz)
-piecePoint211 = geompy.MakeVertex(ox+arete-rayon, oy, oz)
-piecePoint112 = geompy.MakeVertex(ox            , oy, oz+rayon)
-piecePoint212 = geompy.MakeVertex(ox+arete      , oy, oz+rayon)
-piecePoint113 = geompy.MakeVertex(ox            , oy, oz+arete-rayon)
-piecePoint213 = geompy.MakeVertex(ox+arete      , oy, oz+arete-rayon)
-piecePoint114 = geompy.MakeVertex(ox+rayon      , oy, oz+arete)
-piecePoint214 = geompy.MakeVertex(ox+arete-rayon, oy, oz+arete)
-
-pieceCenter1  = geompy.MakeVertex(ox            , oy, oz)
-pieceCenter2  = geompy.MakeVertex(ox+arete      , oy, oz)
-pieceCenter3  = geompy.MakeVertex(ox            , oy, oz+arete)
-pieceCenter4  = geompy.MakeVertex(ox+arete      , oy, oz+arete)
-
-piecePass1    = geompy.MakeVertex(ox+demi       , oy, oz+r3)
-piecePass2    = geompy.MakeVertex(ox+arete-demi , oy, oz+r3)
-piecePass3    = geompy.MakeVertex(ox+arete-demi , oy, oz+arete-r3)
-piecePass4    = geompy.MakeVertex(ox+demi       , oy, oz+arete-r3)
-
-# Edges
-# -----
-
-pieceEdgeSquare1   = geompy.MakeEdge(piecePoint111, piecePoint211)
-pieceEdgeSquare2   = geompy.MakeEdge(piecePoint114, piecePoint214)
-pieceEdgeSquare3   = geompy.MakeEdge(piecePoint112, piecePoint113)
-pieceEdgeSquare4   = geompy.MakeEdge(piecePoint212, piecePoint213)
-
-pieceEdgeDiagonal1 = geompy.MakeEdge(piecePoint111, piecePoint213)
-pieceEdgeDiagonal2 = geompy.MakeEdge(piecePoint112, piecePoint214)
-
-pieceEdgeArc1 = geompy.MakeArc(piecePoint111, piecePass1, piecePoint112)
-pieceEdgeArc2 = geompy.MakeArc(piecePoint211, piecePass2, piecePoint212)
-pieceEdgeArc3 = geompy.MakeArc(piecePoint213, piecePass3, piecePoint214)
-pieceEdgeArc4 = geompy.MakeArc(piecePoint113, piecePass4, piecePoint114)
-
-# Faces
-# -----
-
-pieceFace1 = geompy.MakeQuad(pieceEdgeSquare1, pieceEdgeArc2, pieceEdgeSquare4, pieceEdgeDiagonal1)
-pieceFace2 = geompy.MakeQuad(pieceEdgeSquare2, pieceEdgeArc4, pieceEdgeSquare3, pieceEdgeDiagonal2)
-
-pieceFace3 = geompy.MakeQuad(pieceEdgeArc1, pieceEdgeDiagonal1, pieceEdgeArc3, pieceEdgeDiagonal2)
-
-# Solids
-# ------
-
-pieceVector = geompy.MakeVectorDXDYDZ(0, 1, 0)
-
-pieceSolid1 = geompy.MakePrismVecH(pieceFace1, pieceVector, hauteur)
-pieceSolid2 = geompy.MakePrismVecH(pieceFace2, pieceVector, hauteur)
-pieceSolid3 = geompy.MakePrismVecH(pieceFace3, pieceVector, hauteur)
-
-# Compound and glue
-# -----------------
-
-c_cpd = geompy.MakeCompound([pieceSolid1, pieceSolid2, pieceSolid3])
-
-piece = geompy.MakeGlueFaces(c_cpd, 1.e-5)
-
-# Add in study
-# ------------
-
-piece_id = geompy.addToStudy(piece, "ex09_grid4build")
-
-# Meshing
-# =======
-
-# Create a hexahedral mesh
-# ------------------------
-
-hexa = smesh.Mesh(piece, "ex09_grid4build:hexa")
-
-algo = hexa.Segment()
-algo.NumberOfSegments(6)
-
-hexa.Quadrangle()
-
-hexa.Hexahedron()
-
-# Mesh calculus
-# -------------
-
-hexa.Compute()
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex10_grid4geometry.py b/src/SMESH_SWIG/ex10_grid4geometry.py
deleted file mode 100644 (file)
index 4624dd2..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# =======================================
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Geometry
-# ========
-
-# Element of a grid compound by a square with a cylinder on each vertex build by using partition
-
-# Values
-# ------
-
-ox = 0
-oy = 0
-oz = 0
-
-arete   =  50
-hauteur = 100
-rayon   =  10
-
-g_trim = 1000
-
-# Box
-# ---
-
-piecePoint = geompy.MakeVertex(ox, oy, oz)
-
-pieceBox = geompy.MakeBoxTwoPnt(piecePoint, geompy.MakeVertex(ox+arete, oy+hauteur, oz+arete))
-
-# Cut by cylinders
-# ----------------
-
-dirUp = geompy.MakeVectorDXDYDZ(0, 1, 0)
-
-pieceCut1 = geompy.MakeCut(pieceBox , geompy.MakeCylinder(piecePoint                        , dirUp, rayon, hauteur))
-pieceCut2 = geompy.MakeCut(pieceCut1, geompy.MakeCylinder(geompy.MakeVertex(ox+arete, oy, oz      ), dirUp, rayon, hauteur))
-pieceCut3 = geompy.MakeCut(pieceCut2, geompy.MakeCylinder(geompy.MakeVertex(ox      , oy, oz+arete), dirUp, rayon, hauteur))
-pieceCut4 = geompy.MakeCut(pieceCut3, geompy.MakeCylinder(geompy.MakeVertex(ox+arete, oy, oz+arete), dirUp, rayon, hauteur))
-
-# Compound by make a partition of a solid
-# ---------------------------------------
-
-dir = geompy.MakeVectorDXDYDZ(-1, 0, 1)
-
-tools = []
-tools.append(geompy.MakePlane(geompy.MakeVertex(ox+rayon, oy, oz      ), dir, g_trim))
-tools.append(geompy.MakePlane(geompy.MakeVertex(ox      , oy, oz+rayon), dir, g_trim))
-
-piece = geompy.MakePartition([pieceCut4], tools, [], [], geompy.ShapeType["SOLID"])
-
-# Add in study
-# ------------
-
-piece_id = geompy.addToStudy(piece, "ex10_grid4geometry")
-
-# Meshing
-# =======
-
-# Create a hexahedral mesh
-# ------------------------
-
-hexa = smesh.Mesh(piece, "ex10_grid4geometry:hexa")
-
-algo = hexa.Segment()
-algo.NumberOfSegments(10)
-
-hexa.Quadrangle()
-
-hexa.Hexahedron()
-
-# Mesh calculus
-# -------------
-
-hexa.Compute()
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex11_grid3partition.py b/src/SMESH_SWIG/ex11_grid3partition.py
deleted file mode 100644 (file)
index 5f3eae6..0000000
+++ /dev/null
@@ -1,131 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# =======================================
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Geometry
-# ========
-
-# grid compound of 3 x 3 elements
-# an element is compound of 3 cylinders concentriques
-# an element is centered in a square of the grid
-# the smaller cylinder is a hole
-
-# prism the grid, and mesh it in hexahedral way
-
-# Values
-# ------
-
-g_x = 0
-g_y = 0
-g_z = 0
-
-g_arete   = 50
-g_hauteur = 30
-
-g_rayon1 = 20
-g_rayon2 = 30
-g_rayon3 = 40
-
-g_grid = 3
-
-g_trim = 1000
-
-# Element
-# -------
-
-e_boite = geompy.MakeBox(g_x-g_arete, g_y-g_hauteur, g_z-g_arete,  g_x+g_arete, g_y+g_hauteur, g_z+g_arete)
-
-e_hauteur = 2*g_hauteur
-e_centre  = geompy.MakeVertex(g_x, g_y-g_hauteur, g_z)
-e_dir     = geompy.MakeVectorDXDYDZ(0, 1, 0)
-
-e_cyl1 = geompy.MakeCylinder(e_centre, e_dir, g_rayon3, e_hauteur)
-
-e_blo1 = geompy.MakeCut(e_boite, e_cyl1)
-
-e_cyl2 = geompy.MakeCylinder(e_centre, e_dir, g_rayon2, e_hauteur)
-
-e_blo2 = geompy.MakeCut(e_cyl1, e_cyl2)
-
-e_cyl3 = geompy.MakeCylinder(e_centre, e_dir, g_rayon1, e_hauteur)
-
-e_blo3 = geompy.MakeCut(e_cyl2, e_cyl3)
-
-# Partition and repair
-# --------------------
-
-p_tools = []
-p_tools.append(geompy.MakePlane(e_centre, geompy.MakeVectorDXDYDZ( 1, 0, 1), g_trim))
-p_tools.append(geompy.MakePlane(e_centre, geompy.MakeVectorDXDYDZ(-1, 0, 1), g_trim))
-
-p_part = geompy.MakePartition([e_blo1, e_blo2, e_blo3], p_tools, [], [], geompy.ShapeType["SOLID"])
-
-p_element = geompy.RemoveExtraEdges(p_part, doUnionFaces=True)
-
-# Grid and glue
-# -------------
-
-grid = geompy.MakeMultiTranslation2D(p_element, geompy.MakeVectorDXDYDZ(1, 0, 0), 2*g_arete, g_grid, geompy.MakeVectorDXDYDZ(0, 0, 1), 2*g_arete, g_grid)
-
-piece = geompy.MakeGlueFaces(grid, 1e-5)
-
-# Add in study
-# ------------
-
-piece_id = geompy.addToStudy(piece, "ex11_grid3partition")
-
-# Meshing
-# =======
-
-# Create a hexahedral mesh
-# ------------------------
-
-hexa = smesh.Mesh(piece, "ex11_grid3partition:hexa")
-
-algo = hexa.Segment()
-algo.NumberOfSegments(3)
-
-hexa.Quadrangle()
-
-hexa.Hexahedron()
-
-# Mesh calculus
-# -------------
-
-hexa.Compute()
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex12_grid17partition.py b/src/SMESH_SWIG/ex12_grid17partition.py
deleted file mode 100644 (file)
index 13cfc13..0000000
+++ /dev/null
@@ -1,156 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# =======================================
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-import time
-t1= time.time()
-
-# Geometry
-# ========
-
-# grid compound of 3 x 3 elements
-# an element is compound of 3 concentric cylinders
-# an element is centered in a square of the grid
-
-# prism the grid, and mesh it in hexahedral way
-
-# Values
-# ------
-
-g_x = 0
-g_y = 0
-g_z = 0
-
-g_arete   = 50
-g_hauteur = 30
-
-g_rayon1 = 20
-g_rayon2 = 30
-g_rayon3 = 40
-
-g_grid = 3
-
-g_trim = 1000
-
-# Solids and rotation to prevent repair
-# -------------------------------------
-
-s_boite = geompy.MakeBox(g_x-g_arete, g_y-g_hauteur, g_z-g_arete,  g_x+g_arete, g_y+g_hauteur, g_z+g_arete)
-
-s_pi4     = 3.141592653/4
-s_hauteur = 2*g_hauteur
-s_centre  = geompy.MakeVertex(g_x, g_y-g_hauteur, g_z)
-s_dir     = geompy.MakeVectorDXDYDZ(0, 1, 0)
-
-s_cyl0 = geompy.MakeCylinder(s_centre, s_dir, g_rayon3, s_hauteur)
-s_cyl1 = geompy.MakeRotation(s_cyl0, s_dir, s_pi4)
-
-s_blo1 = geompy.MakeCut(s_boite, s_cyl1)
-
-s_cyl0 = geompy.MakeCylinder(s_centre, s_dir, g_rayon2, s_hauteur)
-s_cyl2 = geompy.MakeRotation(s_cyl0, s_dir, s_pi4)
-
-s_blo2 = geompy.MakeCut(s_cyl1, s_cyl2)
-
-s_cyl0 = geompy.MakeCylinder(s_centre, s_dir, g_rayon1, s_hauteur)
-s_cyl3 = geompy.MakeRotation(s_cyl0, s_dir, s_pi4)
-
-s_blo3 = geompy.MakeCut(s_cyl2, s_cyl3)
-
-s_arete = g_rayon1/2
-
-s_blo4 = geompy.MakeBox(g_x-s_arete, g_y-g_hauteur, g_z-s_arete,  g_x+s_arete, g_y+g_hauteur, g_z+s_arete)
-
-s_blo5 = geompy.MakeCut(s_cyl3, s_blo4)
-
-# Partition
-# ---------
-
-p_tools = []
-p_tools.append(geompy.MakePlane(s_centre, geompy.MakeVectorDXDYDZ( 1, 0, 1), g_trim))
-p_tools.append(geompy.MakePlane(s_centre, geompy.MakeVectorDXDYDZ(-1, 0, 1), g_trim))
-
-p_partie = geompy.MakePartition([s_blo1, s_blo2, s_blo3, s_blo5], p_tools, [], [], geompy.ShapeType["SOLID"])
-
-# Compound and glue
-# -----------------
-
-c_blocs = geompy.SubShapeAll(p_partie, geompy.ShapeType["SOLID"])
-c_blocs.append(s_blo4)
-
-c_cpd = geompy.MakeCompound(c_blocs)
-
-c_element = geompy.MakeGlueFaces(c_cpd, 1e-4)
-
-# Grid
-# ----
-
-piece = geompy.MakeMultiTranslation2D(c_element, geompy.MakeVectorDXDYDZ(1, 0, 0), 2*g_arete, g_grid, geompy.MakeVectorDXDYDZ(0, 0, 1), 2*g_arete, g_grid)
-
-# Add in study
-# ------------
-
-piece_id = geompy.addToStudy(piece, "ex12_grid17partition")
-
-t2= time.time()
-
-# Meshing
-# =======
-
-# Create a hexahedral mesh
-# ------------------------
-
-hexa = smesh.Mesh(piece, "ex12_grid17partition:hexa")
-
-algo = hexa.Segment()
-algo.NumberOfSegments(2)
-
-hexa.Quadrangle()
-
-hexa.Hexahedron()
-
-# Mesh calculus
-# -------------
-
-hexa.Compute()
-
-t3= time.time()
-
-print ("time geom",t2-t1)
-print ("time mesh",t3-t2 )
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex13_hole1partial.py b/src/SMESH_SWIG/ex13_hole1partial.py
deleted file mode 100644 (file)
index a74f77f..0000000
+++ /dev/null
@@ -1,264 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# ==================================
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Geometry
-# ========
-
-# With hexahedral, build a box partially holed by a not centered cylinder with a thickness
-
-# Values
-# ------
-
-box_dx = 1000
-box_dy =  900
-box_dz =  800
-
-cyl_x      = 500
-cyl_y      = 300
-cyl_dz     = 600
-cyl_radius = 150
-cyl_thick  =  30
-
-# Triangular face
-# ---------------
-
-def triangle(p1, p2, p3):
-    l = []
-    l.append(geompy.MakeEdge(p1, p2))
-    l.append(geompy.MakeEdge(p2, p3))
-    l.append(geompy.MakeEdge(p3, p1))
-    w = geompy.MakeWire(l)
-    return geompy.MakeFace(w, 1)
-
-# The holed part
-# ==============
-
-# Vertex of the holed part
-# ------------------------
-
-hole_point_11 = geompy.MakeVertex(0     , 0     , 0)
-hole_point_21 = geompy.MakeVertex(box_dx, 0     , 0)
-hole_point_12 = geompy.MakeVertex(0     , box_dy, 0)
-hole_point_22 = geompy.MakeVertex(box_dx, box_dy, 0)
-
-hole_center   = geompy.MakeVertex(cyl_x, cyl_y, 0)
-
-# Faces of the holed part
-# -----------------------
-
-hole_face_1 = triangle(hole_point_11, hole_point_21, hole_center)
-hole_face_2 = triangle(hole_point_21, hole_point_22, hole_center)
-hole_face_3 = triangle(hole_point_12, hole_point_22, hole_center)
-hole_face_4 = triangle(hole_point_11, hole_point_12, hole_center)
-
-# Solids of the holed part
-# ------------------------
-
-cyl_dir = geompy.MakeVectorDXDYDZ(0, 0, 1)
-
-hole_solid_1 = geompy.MakePrismVecH(hole_face_1, cyl_dir, cyl_dz)
-hole_solid_2 = geompy.MakePrismVecH(hole_face_2, cyl_dir, cyl_dz)
-hole_solid_3 = geompy.MakePrismVecH(hole_face_3, cyl_dir, cyl_dz)
-hole_solid_4 = geompy.MakePrismVecH(hole_face_4, cyl_dir, cyl_dz)
-
-hole_internal = geompy.MakeCylinder(hole_center, cyl_dir, cyl_radius          , cyl_dz)
-hole_external = geompy.MakeCylinder(hole_center, cyl_dir, cyl_radius+cyl_thick, cyl_dz)
-hole_median   = geompy.MakeCut(hole_external, hole_internal)
-
-# Boolean operations
-# ------------------
-
-blocks = []
-
-blocks.append(   geompy.MakeCut(hole_solid_1, hole_external))
-blocks.append(geompy.MakeCommon(hole_solid_1, hole_median  ))
-
-blocks.append(   geompy.MakeCut(hole_solid_2, hole_external))
-blocks.append(geompy.MakeCommon(hole_solid_2, hole_median  ))
-
-blocks.append(   geompy.MakeCut(hole_solid_3, hole_external))
-blocks.append(geompy.MakeCommon(hole_solid_3, hole_median  ))
-
-blocks.append(   geompy.MakeCut(hole_solid_4, hole_external))
-blocks.append(geompy.MakeCommon(hole_solid_4, hole_median  ))
-
-# The full part
-# =============
-
-# Vertex of the full part
-# -----------------------
-
-full_point_11 = geompy.MakeVertex(0     , 0     , cyl_dz)
-full_point_21 = geompy.MakeVertex(box_dx, 0     , cyl_dz)
-full_point_12 = geompy.MakeVertex(0     , box_dy, cyl_dz)
-full_point_22 = geompy.MakeVertex(box_dx, box_dy, cyl_dz)
-
-full_center = geompy.MakeVertex(cyl_x, cyl_y, cyl_dz)
-
-# Faces of the full part
-# ----------------------
-
-full_face_1 = triangle(full_point_11, full_point_21, full_center)
-full_face_2 = triangle(full_point_21, full_point_22, full_center)
-full_face_3 = triangle(full_point_12, full_point_22, full_center)
-full_face_4 = triangle(full_point_11, full_point_12, full_center)
-
-# Solids of the full part
-# ------------------------
-
-full_dz = box_dz - cyl_dz
-
-full_solid_1 = geompy.MakePrismVecH(full_face_1, cyl_dir, full_dz)
-full_solid_2 = geompy.MakePrismVecH(full_face_2, cyl_dir, full_dz)
-full_solid_3 = geompy.MakePrismVecH(full_face_3, cyl_dir, full_dz)
-full_solid_4 = geompy.MakePrismVecH(full_face_4, cyl_dir, full_dz)
-
-full_internal = geompy.MakeCylinder(full_center, cyl_dir, cyl_radius          , full_dz)
-full_external = geompy.MakeCylinder(full_center, cyl_dir, cyl_radius+cyl_thick, full_dz)
-full_median   = geompy.MakeCut(full_external, full_internal)
-
-# Boolean operations
-# ------------------
-
-full = []
-
-full.append(   geompy.MakeCut(full_solid_1, full_external))
-full.append(geompy.MakeCommon(full_solid_1, full_median))
-
-full.append(   geompy.MakeCut(full_solid_2, full_external))
-full.append(geompy.MakeCommon(full_solid_2, full_median ))
-
-full.append(   geompy.MakeCut(full_solid_3, full_external))
-full.append(geompy.MakeCommon(full_solid_3, full_median))
-
-full.append(   geompy.MakeCut(full_solid_4, full_external))
-full.append(geompy.MakeCommon(full_solid_4, full_median))
-
-# Filling the hole
-# ----------------
-
-box_d = cyl_radius/3
-
-x = cyl_x-box_d
-y = x * cyl_y / cyl_x
-box_point_11 = geompy.MakeVertex(x, y, cyl_dz)
-
-x = cyl_x+box_d
-y = (box_dx - x) * cyl_y / (box_dx - cyl_x)
-box_point_12 = geompy.MakeVertex(x, y, cyl_dz)
-
-x = cyl_x-box_d
-y = box_dy - x * (box_dy - cyl_y) / cyl_x
-box_point_21 = geompy.MakeVertex(x, y, cyl_dz)
-
-x = cyl_x+box_d
-y = box_dy - (box_dx - x) * (box_dy - cyl_y) / (box_dx - cyl_x)
-box_point_22 = geompy.MakeVertex(x, y, cyl_dz)
-
-box_face = geompy.MakeQuad4Vertices(box_point_11, box_point_12, box_point_21, box_point_22)
-
-box = geompy.MakePrismVecH(box_face, cyl_dir, full_dz)
-
-full.append(box)
-
-full.append(geompy.MakeCut(geompy.MakeCommon(full_solid_1, full_internal), box))
-full.append(geompy.MakeCut(geompy.MakeCommon(full_solid_2, full_internal), box))
-full.append(geompy.MakeCut(geompy.MakeCommon(full_solid_3, full_internal), box))
-full.append(geompy.MakeCut(geompy.MakeCommon(full_solid_4, full_internal), box))
-
-# Cut the cylinder thickness
-# -------------------------
-
-full_plan = geompy.MakePlane(geompy.MakeVertex(0, 0, cyl_dz+cyl_thick), cyl_dir, 5000)
-
-full_parts = geompy.MakePartition(full, [full_plan], [], [], geompy.ShapeType["SOLID"])
-
-# Geometry result
-# ---------------
-
-blocks.append(full_parts)
-
-piece_cpd = geompy.MakeCompound(blocks)
-
-piece_ok = geompy.RemoveExtraEdges(piece_cpd, doUnionFaces=True)
-
-piece = geompy.MakeGlueFaces(piece_ok, 1.e-3)
-
-piece_id = geompy.addToStudy(piece, "ex13_hole1partial")
-
-# Meshing
-# =======
-
-# Create a mesh
-# -------------
-
-hexa = smesh.Mesh(piece, "ex13_hole1partial:hexa")
-
-algo = hexa.Segment()
-algo.NumberOfSegments(2)
-
-hexa.Quadrangle()
-
-hexa.Hexahedron()
-
-# Local hypothesis
-# ----------------
-
-def local(x, y, z, d):
-    edge = geompy.GetEdgeNearPoint(piece, geompy.MakeVertex(x, y, z))
-    algo = hexa.Segment(edge)
-    algo.NumberOfSegments(d)
-    algo.Propagation()
-
-local(0, 0, 100, 40)
-local(0, 0, 700, 15)
-
-local(100, 0, 0, 20)
-local(0, 100, 0, 20)
-
-local(100, 100, 0, 25)
-
-d = cyl_radius-3*cyl_thick
-local(cyl_x+d, cyl_y+d, box_dz, 10)
-
-# Compute the mesh
-# ----------------
-
-hexa.Compute()
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex14_cyl1holed.py b/src/SMESH_SWIG/ex14_cyl1holed.py
deleted file mode 100644 (file)
index 4270fc8..0000000
+++ /dev/null
@@ -1,149 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# =======================================
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Geometrie
-# =========
-
-# Creer un cylindre avec un trou cylindrique excentre, decoupage en hexahedre et mailler.
-
-# Donnees
-# -------
-
-# unite: millimetre
-
-g_ox = 0
-g_oy = 0
-g_oz = 0
-
-g_cyl_rayon       = 1000
-g_cyl_demiHauteur = 3000
-
-g_trou_rayon       =   5
-g_trou_centre      = 300
-
-g_trim = 15000
-
-# Construire le cylindre
-# ----------------------
-
-c_point    = geompy.MakeVertex(g_ox, g_oy, g_oz-g_cyl_demiHauteur)
-c_dir      = geompy.MakeVectorDXDYDZ(0, 0, 1)
-c_hauteur  = 2*g_cyl_demiHauteur
-c_cylindre = geompy.MakeCylinder(c_point, c_dir, g_cyl_rayon, c_hauteur)
-
-# Trouer le cylindre par un minuscule cylindre excentre
-# -----------------------------------------------------
-
-t_hauteur = g_cyl_demiHauteur
-t_point   = geompy.MakeVertex(g_ox-g_trou_centre, g_oy, g_oz-t_hauteur)
-t_trou    = geompy.MakeCylinder(t_point, c_dir, g_trou_rayon, 2*t_hauteur)
-
-t_piece   = geompy.MakeCut(c_cylindre, t_trou)
-
-# Geometrie hexahedrique
-# ======================
-
-# Decouper
-# --------
-
-h_outils = []
-h_outils.append(geompy.MakePlane(t_point, geompy.MakeVectorDXDYDZ(1, 0, 0), g_trim))
-h_outils.append(geompy.MakePlane(t_point, geompy.MakeVectorDXDYDZ(0, 1, 0), g_trim))
-
-h_piece = geompy.MakePartition([t_piece], h_outils, [], [], geompy.ShapeType["SOLID"])
-
-# Decouper pour les conditions locales
-# ------------------------------------
-
-l_outils = []
-l_i = 1
-l_n = 12
-l_hauteur = c_hauteur/l_n
-
-while l_i<l_n:
-    l_outils.append(geompy.MakePlane(geompy.MakeVertex(g_ox, g_oy, g_oz-g_cyl_demiHauteur+l_i*l_hauteur), c_dir, g_trim))
-    l_i = l_i+1
-
-piece = geompy.MakePartition([h_piece], l_outils, [], [], geompy.ShapeType["SOLID"])
-
-# Ajouter la piece dans l'etude
-# -----------------------------
-
-piece_id = geompy.addToStudy(piece, "ex14_cyl1holed")
-
-# Maillage
-# ========
-
-# Creer un maillage hexahedrique
-# ------------------------------
-
-hexa = smesh.Mesh(piece, "ex14_cyl1holed:hexa")
-
-algo = hexa.Segment()
-algo.NumberOfSegments(4)
-
-hexa.Quadrangle()
-
-hexa.Hexahedron()
-
-# Poser les hypotheses locales
-# ----------------------------
-
-m_i = 0
-m_n = 12
-m_h = c_hauteur/m_n
-m_d = [4, 6, 8, 10, 10, 9, 8, 7, 6, 5, 4, 3]
-
-m_x = g_ox+g_cyl_rayon
-m_y = g_oy
-m_z = g_oz-g_cyl_demiHauteur+m_h/2
-
-while m_i<m_n:
-    m_p = geompy.MakeVertex(m_x, m_y, m_z + m_i*m_h)
-    m_e = geompy.GetEdgeNearPoint(piece, m_p)
-    m_a = hexa.Segment(m_e)
-    m_a.NumberOfSegments(m_d[m_i])
-    m_a.Propagation()
-    m_i = m_i + 1
-
-# Calculer le maillage
-# --------------------
-
-hexa.Compute()
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex15_cyl2geometry.py b/src/SMESH_SWIG/ex15_cyl2geometry.py
deleted file mode 100644 (file)
index 350f402..0000000
+++ /dev/null
@@ -1,208 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# =======================================
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Geometrie
-# =========
-
-# Construire avec des hexahedres une piece faite de 2 cylindres de diametre different
-# et dont les axes se coupent orthogonalement, puis mailler.
-
-# Valeurs
-# -------
-
-cx = 0
-cy = 0
-cz = 0
-
-g_rayon   = 100.0
-g_hauteur = 500
-
-p_rayon   =  50.0
-p_hauteur = 500
-
-g_trim = 1000
-
-# Gros cylindre
-# -------------
-
-cpd = []
-
-g_base = geompy.MakeVertex(cx, cy, cz)
-g_dir  = geompy.MakeVectorDXDYDZ(0, 0, 1)
-t_hauteur = p_rayon+10.0
-
-g_cyl = geompy.MakeCylinder(g_base, g_dir, g_rayon, g_hauteur)
-
-g_coupe   = geompy.MakeVectorDXDYDZ(1, 0, 0)
-
-g_tools = []
-g_tools.append(geompy.MakePlane(geompy.MakeVertex(cx+t_hauteur, cy, cz), g_coupe, g_trim))
-g_tools.append(geompy.MakePlane(geompy.MakeVertex(cx-t_hauteur, cy, cz), g_coupe, g_trim))
-
-g_partie = geompy.MakePartition([g_cyl], g_tools, [], [], geompy.ShapeType["SOLID"])
-g_bas, g_centre, g_haut = geompy.SubShapeAllSorted(g_partie, geompy.ShapeType["SOLID"])
-
-# Partie basse du gros cylindre
-# -----------------------------
-
-b_hauteur = 10
-b_base    = 20
-
-b_boite = geompy.MakeBox(cx-t_hauteur, cy-b_base, cz,  cx-t_hauteur-b_hauteur, cy+b_base, cz+g_hauteur)
-cpd.append(b_boite)
-
-b_cyl = geompy.MakeCut(g_bas, b_boite)
-
-b_tools = []
-b_tools.append(geompy.MakePlane(geompy.MakeVertex(cx-t_hauteur-b_hauteur, cy+b_base, cz), geompy.MakeVectorDXDYDZ( 1, 1, 0), g_trim))
-b_tools.append(geompy.MakePlane(geompy.MakeVertex(cx-t_hauteur-b_hauteur, cy-b_base, cz), geompy.MakeVectorDXDYDZ(-1, 1, 0), g_trim))
-
-b_partie = geompy.MakePartition([b_cyl], b_tools, [], [], geompy.ShapeType["SOLID"])
-b_element = geompy.SubShapeAll(b_partie, geompy.ShapeType["SOLID"])
-cpd = cpd + b_element
-
-# Partie haute du gros cylindre
-# -----------------------------
-
-h_plan = geompy.MakePlane(g_base, g_coupe, g_trim)
-
-cpd.append(geompy.MakeMirrorByPlane(b_boite, h_plan))
-
-for h in b_element:
-    h_symetrie = geompy.MakeMirrorByPlane(h, h_plan)
-    cpd.append(h_symetrie)
-
-# Petit cylindre
-# --------------
-
-z_arete = p_rayon/2
-x_arete = z_arete*t_hauteur*2/g_hauteur
-
-px = cx-x_arete
-py = cy-1.5*g_rayon
-pz = cz+g_hauteur/2
-
-p_base = geompy.MakeVertex(cx, py, pz)
-p_dir  = geompy.MakeVectorDXDYDZ(0, 1, 0)
-p_cyl  = geompy.MakeCylinder(p_base, p_dir, p_rayon, p_hauteur)
-
-p_boite = geompy.MakeBox(px, py, pz-z_arete,  cx+x_arete, py+p_hauteur, pz+z_arete)
-
-# Partie interieure du petit cylindre
-# -----------------------------------
-
-i_cyl   = geompy.MakeCommon(p_cyl, g_cyl)
-i_tuyau = geompy.MakeCut(i_cyl, p_boite)
-i_boite = geompy.MakeCommon(p_boite, g_cyl)
-
-# Partie exterieure du petit cylindre
-# -----------------------------------
-
-e_cyl0 = geompy.MakeCut(p_cyl, g_cyl)
-e_cyl  = geompy.SubShapeAllSorted(e_cyl0, geompy.ShapeType["SOLID"])
-
-e_tuyau = geompy.MakeCut(e_cyl[1], p_boite)
-
-e_boite0 = geompy.MakeCut(p_boite, g_cyl)
-e_boite  = geompy.SubShapeAllSorted(e_boite0, geompy.ShapeType["SOLID"])
-
-cpd.append(e_boite[1])
-
-# Partie centrale du gros cylindre
-# --------------------------------
-
-c_cyl = geompy.MakeCut(g_centre, p_cyl)
-
-# Partitionner
-# ------------
-
-p_tools = []
-p_tools.append(geompy.MakePlane(geompy.MakeVertex(px, py, pz-z_arete), geompy.MakeVectorDXDYDZ(-z_arete, 0, x_arete), g_trim))
-p_tools.append(geompy.MakePlane(geompy.MakeVertex(px, py, pz+z_arete), geompy.MakeVectorDXDYDZ( z_arete, 0, x_arete), g_trim))
-
-p_partie = geompy.MakePartition([e_tuyau], p_tools, [], [], geompy.ShapeType["SOLID"])
-p_element = geompy.SubShapeAll(p_partie, geompy.ShapeType["SOLID"])
-cpd = cpd + p_element
-
-q_partie = geompy.MakePartition([i_tuyau, c_cyl], p_tools, [], [], geompy.ShapeType["SOLID"])
-q_element = geompy.SubShapeAll(q_partie, geompy.ShapeType["SOLID"])
-
-q_element = q_element + [i_boite]
-
-q_tools = []
-q_tools.append(geompy.MakePlane(geompy.MakeVertex(cx, cy-b_base, cz), geompy.MakeVectorDXDYDZ(0, 1, 0), g_trim))
-q_tools.append(geompy.MakePlane(geompy.MakeVertex(cx, cy+b_base, cz), geompy.MakeVectorDXDYDZ(0, 1, 0), g_trim))
-
-r_element = []
-for e in q_element:
-    r_partie = geompy.MakePartition([e], q_tools, [], [], geompy.ShapeType["SOLID"])
-    r_element = r_element + geompy.SubShapeAll(r_partie, geompy.ShapeType["SOLID"])
-
-cpd = cpd + r_element
-
-# Compound
-# --------
-
-piece = geompy.RemoveExtraEdges(geompy.MakeCompound(cpd), True)
-
-# Ajouter la piece dans l'etude
-# -----------------------------
-
-piece_id = geompy.addToStudy(piece, "ex15_cyl2geometry")
-
-# Meshing
-# =======
-
-# Create a hexahedral mesh
-# ------------------------
-
-hexa = smesh.Mesh(piece, "ex15_cyl2geometry:hexa")
-
-algo = hexa.Segment()
-algo.NumberOfSegments(12)
-
-hexa.Quadrangle()
-
-hexa.Hexahedron()
-
-# Mesh calculus
-# -------------
-
-hexa.Compute()
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex16_cyl2complementary.py b/src/SMESH_SWIG/ex16_cyl2complementary.py
deleted file mode 100644 (file)
index f549e54..0000000
+++ /dev/null
@@ -1,152 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# =======================================
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Geometry
-# ========
-
-# Create the hexahedrical block geometry of a holed parallelepipede.
-# The hole has a T form composed by 2 cylinders with different radius, and their axis are normal.
-# This piece is meshed in hexahedrical.
-
-# Values
-# ------
-
-gx = 0
-gy = 0
-gz = 0
-
-g_dx = 250
-g_dy = 200
-g_dz = 150
-
-g_rayonGrand = 70
-g_rayonPetit = 50
-
-g_trim = 1000
-
-# The parallelepipede
-# -------------------
-
-p_boite = geompy.MakeBox(gx-g_dx, gy-g_dy, gz-g_dz,  gx+g_dx, gy+g_dy, gz+g_dz)
-
-# The great cylinder
-# ------------------
-
-g_base = geompy.MakeVertex(gx-g_dx, gy, gz)
-g_dir  = geompy.MakeVectorDXDYDZ(1, 0, 0)
-g_cyl  = geompy.MakeCylinder(g_base, g_dir, g_rayonGrand, g_dx*2)
-
-# The first hole
-# --------------
-
-b_boite = geompy.MakeCut(p_boite , g_cyl)
-
-# Partitioning
-# ------------
-
-p_base = geompy.MakeVertex(gx, gy, gz)
-
-p_tools = []
-
-p_tools.append(geompy.MakePlane(p_base, geompy.MakeVectorDXDYDZ(0,  1   , 0   ), g_trim))
-p_tools.append(geompy.MakePlane(p_base, geompy.MakeVectorDXDYDZ(0,  g_dz, g_dy), g_trim))
-p_tools.append(geompy.MakePlane(p_base, geompy.MakeVectorDXDYDZ(0, -g_dz, g_dy), g_trim))
-
-p_tools.append(geompy.MakePlane(geompy.MakeVertex(gx-g_rayonPetit, gy, gz), g_dir, g_trim))
-p_tools.append(geompy.MakePlane(geompy.MakeVertex(gx+g_rayonPetit, gy, gz), g_dir, g_trim))
-
-p_piece = geompy.MakePartition([b_boite], p_tools, [], [], geompy.ShapeType["SOLID"])
-
-# The small cylinder
-# ------------------
-
-c_cyl = geompy.MakeCylinder(p_base, geompy.MakeVectorDXDYDZ(0, 0, 1), g_rayonPetit, g_dz)
-
-# The second hole
-# ---------------
-
-d_element = geompy.SubShapeAllSorted(p_piece, geompy.ShapeType["SOLID"])
-
-d_element[ 8] = geompy.MakeCut(d_element[ 8], c_cyl)
-d_element[10] = geompy.MakeCut(d_element[10], c_cyl)
-
-# Compound
-# --------
-
-piece = geompy.RemoveExtraEdges(geompy.MakeCompound(d_element))
-piece = geompy.MakeGlueFaces(piece, 1e-07)
-
-# Add piece in study
-# ------------------
-
-piece_id = geompy.addToStudy(piece, "ex16_cyl2complementary")
-
-# Meshing
-# =======
-
-# Create a hexahedral mesh
-# ------------------------
-
-hexa = smesh.Mesh(piece, "ex16_cyl2complementary:hexa")
-
-algo = hexa.Segment()
-algo.NumberOfSegments(12)
-
-hexa.Quadrangle()
-
-hexa.Hexahedron()
-
-# Define local hypothesis
-# -----------------------
-
-def local(x, y, z, d):
-    edge = geompy.GetEdgeNearPoint(piece, geompy.MakeVertex(x, y, z))
-    algo = hexa.Segment(edge)
-    algo.NumberOfSegments(d)
-    algo.Propagation()
-
-local(gx     , gy+g_dy, gz+g_dz, 7)
-local(gx+g_dx, gy+g_dy, gz     , 21)
-local(gx+g_dx, gy-g_dy, gz     , 21)
-
-# Mesh calculus
-# -------------
-
-hexa.Compute()
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex17_dome1.py b/src/SMESH_SWIG/ex17_dome1.py
deleted file mode 100644 (file)
index 86a1a05..0000000
+++ /dev/null
@@ -1,110 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# =======================================
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Geometrie
-# =========
-
-# Creer un cylindre surplombe d'une demi-sphere le tout troue par un petit cylindre.
-# Decouper en hexahedre et mailler.
-
-# Donnees
-# -------
-
-cylindre_rayon   = 100
-cylindre_hauteur = 400
-
-trou_rayon = 20
-trou_z     = cylindre_rayon/2
-
-plan_trim = 2000
-
-# Cylindre
-# --------
-
-cylindre_base = geompy.MakeVertex(0, 0, 0)
-cylindre_dir  = geompy.MakeVectorDXDYDZ(1, 0, 0)
-cylindre      = geompy.MakeCylinder(cylindre_base, cylindre_dir, cylindre_rayon, cylindre_hauteur)
-
-# Dome
-# ----
-
-dome_sphere = geompy.MakeSpherePntR(cylindre_base, cylindre_rayon)
-dome        = geompy.MakeFuse(dome_sphere, cylindre)
-
-# Cheminee
-# --------
-
-cheminee_base = geompy.MakeVertex(-cylindre_hauteur/2, 0, trou_z)
-cheminee_trou = geompy.MakeCylinder(cheminee_base, cylindre_dir, trou_rayon, 2*cylindre_hauteur)
-cheminee      = geompy.MakeCut(dome, cheminee_trou)
-
-# Decoupage et reparation
-# -----------------------
-
-blocs_plan1 = geompy.MakePlane(cheminee_base, geompy.MakeVectorDXDYDZ(0, 1, 0), plan_trim)
-blocs_plan2 = geompy.MakePlane(cheminee_base, geompy.MakeVectorDXDYDZ(0, 0, 1), plan_trim)
-
-blocs_part = geompy.MakePartition([cheminee], [blocs_plan1, blocs_plan2], [], [], geompy.ShapeType["SOLID"])
-
-piece = geompy.RemoveExtraEdges(blocs_part)
-
-# Etude
-# -----
-
-piece_id = geompy.addToStudy(piece, "ex17_dome1")
-
-# Maillage
-# ========
-
-# Maillage hexahedrique
-# ---------------------
-
-hexa = smesh.Mesh(piece, "ex17_dome1:hexa")
-
-algo = hexa.Segment()
-algo.NumberOfSegments(20)
-
-hexa.Quadrangle()
-
-hexa.Hexahedron()
-
-# Calcul du maillage
-# ------------------
-
-hexa.Compute()
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex18_dome2.py b/src/SMESH_SWIG/ex18_dome2.py
deleted file mode 100644 (file)
index 67dffd7..0000000
+++ /dev/null
@@ -1,148 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# =======================================
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-import math
-
-# Geometrie
-# =========
-
-# Creer un cylindre ayant a chaque bout un morceau de sphere et le tout troue par un petit cylindrique excentre.
-# Decouper en hexahedre et mailler.
-
-# Donnees
-# -------
-
-# unite: millimetre
-
-g_ox = 0
-g_oy = 0
-g_oz = 0
-
-g_cyl_rayon       = 1000
-g_cyl_demiHauteur = 3000
-
-g_trou_rayon       =   5
-g_trou_centre      = 300
-
-g_sphere_rayon = 3500
-
-g_trim = 15000
-
-# Cylindre
-# --------
-
-c_point    = geompy.MakeVertex(g_ox, g_oy, g_oz-g_cyl_demiHauteur)
-c_dir      = geompy.MakeVectorDXDYDZ(0, 0, 1)
-c_hauteur  = 2*g_cyl_demiHauteur
-
-c_cylindre = geompy.MakeCylinder(c_point, c_dir, g_cyl_rayon, c_hauteur)
-
-# Sphere
-# ------
-
-s_hauteur = math.sqrt(g_sphere_rayon*g_sphere_rayon - g_cyl_rayon*g_cyl_rayon) - g_cyl_demiHauteur
-
-s_sphere  = geompy.MakeSphere(g_ox, g_oy, g_oz-s_hauteur, g_sphere_rayon)
-
-# Calottes
-# --------
-
-c_outils = []
-c_outils.append(geompy.MakePlane(geompy.MakeVertex(g_ox, g_oy, g_oz+g_cyl_demiHauteur), geompy.MakeVectorDXDYDZ(0, 0, 1), g_trim))
-
-c_cpd = geompy.MakePartition([s_sphere], c_outils, [], [], geompy.ShapeType["SOLID"])
-c_calotte_haut, c_reste = geompy.SubShapeAllSorted(c_cpd, geompy.ShapeType["SOLID"])
-
-c_plan = geompy.MakePlane(geompy.MakeVertex(g_ox, g_oy, g_oz), geompy.MakeVectorDXDYDZ(0, 0, 1), g_trim)
-c_calotte_bas = geompy.MakeMirrorByPlane(c_calotte_haut, c_plan)
-
-# Fusionner
-# ---------
-
-f_piece1 = geompy.MakeFuse(c_cylindre, c_calotte_haut)
-f_piece  = geompy.MakeFuse(f_piece1, c_calotte_bas)
-
-# Trouer
-# ------
-
-t_hauteur = g_sphere_rayon
-t_point   = geompy.MakeVertex(g_ox-g_trou_centre, g_oy, g_oz-t_hauteur)
-t_trou    = geompy.MakeCylinder(t_point, c_dir, g_trou_rayon, 2*t_hauteur)
-
-t_piece   = geompy.MakeCut(f_piece, t_trou)
-
-# Decouper
-# --------
-
-h_outils = []
-h_outils.append(geompy.MakePlane(t_point, geompy.MakeVectorDXDYDZ(1, 0, 0), g_trim))
-h_outils.append(geompy.MakePlane(t_point, geompy.MakeVectorDXDYDZ(0, 1, 0), g_trim))
-
-h_piece = geompy.MakePartition([t_piece], h_outils, [], [], geompy.ShapeType["SOLID"])
-
-# Reparer
-# -------
-
-piece = geompy.RemoveExtraEdges(h_piece)
-
-# Ajouter la piece dans l'etude
-# -----------------------------
-
-piece_id = geompy.addToStudy(piece, "ex18_dome2")
-
-# Maillage
-# ========
-
-# Maillage hexahedrique
-# ---------------------
-
-hexa = smesh.Mesh(piece, "ex18_dome2:hexa")
-
-algo = hexa.Segment()
-algo.NumberOfSegments(2)
-
-hexa.Quadrangle()
-
-hexa.Hexahedron()
-
-# Calcul du maillage
-# ------------------
-
-hexa.Compute()
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex19_sphereINcube.py b/src/SMESH_SWIG/ex19_sphereINcube.py
deleted file mode 100644 (file)
index b15fb16..0000000
+++ /dev/null
@@ -1,193 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# ==================================
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Geometrie
-# =========
-
-# Mailler en hexahedre une sphere dans un cube.
-
-# Donnees
-# -------
-
-sphere_rayon = 100
-
-cube_cote = 200
-
-plan_trim = 1000
-
-# Sphere
-# ------
-
-sphere_centre = geompy.MakeVertex(0, 0, 0)
-
-sphere_pleine = geompy.MakeSpherePntR(sphere_centre, sphere_rayon)
-
-# Cube interieur
-# --------------
-
-boite_cote = sphere_rayon / 2
-
-boite = geompy.MakeBox(-boite_cote, -boite_cote, -boite_cote,  +boite_cote, +boite_cote, +boite_cote)
-
-blocs = [boite]
-
-# Decoupage sphere
-# ----------------
-
-sphere_troue = geompy.MakeCut(sphere_pleine, boite)
-
-#sphere_outils = []
-#sphere_outils.append(MakePlane(sphere_centre, MakeVectorDXDYDZ( 1, 0,  1), plan_trim))
-#sphere_outils.append(MakePlane(sphere_centre, MakeVectorDXDYDZ( 1, 0, -1), plan_trim))
-#sphere_outils.append(MakePlane(sphere_centre, MakeVectorDXDYDZ( 1, 1,  0), plan_trim))
-#sphere_outils.append(MakePlane(sphere_centre, MakeVectorDXDYDZ(-1, 1,  0), plan_trim))
-
-f1 = geompy.MakePlane(sphere_centre, geompy.MakeVectorDXDYDZ( 1, 0,  1), plan_trim)
-f2 = geompy.MakePlane(sphere_centre, geompy.MakeVectorDXDYDZ(-1, 1,  0), plan_trim)
-f3 = geompy.MakePlane(sphere_centre, geompy.MakeVectorDXDYDZ( 1, 1,  0), plan_trim)
-f4 = geompy.MakePlane(sphere_centre, geompy.MakeVectorDXDYDZ( 1, 0, -1), plan_trim)
-
-
-#sphere_decoupee = MakePartition(solids, sphere_outils, [], [], ShapeType["SOLID"])
-
-sphere_decoupee = geompy.MakePartition([sphere_troue],    [f1], [], [], geompy.ShapeType["SOLID"])
-sphere_decoupee = geompy.MakePartition([sphere_decoupee], [f2], [], [], geompy.ShapeType["SOLID"])
-sphere_decoupee = geompy.MakePartition([sphere_decoupee], [f3], [], [], geompy.ShapeType["SOLID"])
-sphere_decoupee = geompy.MakePartition([sphere_decoupee], [f4], [], [], geompy.ShapeType["SOLID"])
-
-sphere_partie = geompy.MakeCompound([sphere_decoupee])
-
-sphere_partie   = geompy.GetBlockNearPoint(sphere_decoupee, geompy.MakeVertex(-sphere_rayon, 0, 0))
-sphere_bloc     = geompy.RemoveExtraEdges(sphere_partie)
-
-blocs.append(sphere_bloc)
-
-pi2 = 3.141592653/2
-
-sphere_dir1 = geompy.MakeVectorDXDYDZ(0, 1,  0)
-sphere_dir2 = geompy.MakeVectorDXDYDZ(0, 0,  1)
-
-blocs.append(geompy.MakeRotation(sphere_bloc, sphere_dir1, +pi2))
-blocs.append(geompy.MakeRotation(sphere_bloc, sphere_dir1, -pi2))
-
-blocs.append(geompy.MakeRotation(sphere_bloc, sphere_dir2, +pi2))
-blocs.append(geompy.MakeRotation(sphere_bloc, sphere_dir2, -pi2))
-
-blocs.append(geompy.MakeMirrorByPoint(sphere_bloc, sphere_centre))
-
-# Cube exterieur
-# --------------
-
-cube_plein   = geompy.MakeBox(-cube_cote, -cube_cote, -cube_cote,  +cube_cote, +cube_cote, +cube_cote)
-cube_trou    = geompy.MakeCut(cube_plein, sphere_pleine)
-#cube_decoupe = MakePartition([cube_trou], sphere_outils, [], [], ShapeType["SOLID"])
-
-cube_decoupe = geompy.MakePartition([cube_trou],    [f1], [], [], geompy.ShapeType["SOLID"])
-cube_decoupe = geompy.MakePartition([cube_decoupe], [f2], [], [], geompy.ShapeType["SOLID"])
-cube_decoupe = geompy.MakePartition([cube_decoupe], [f3], [], [], geompy.ShapeType["SOLID"])
-cube_decoupe = geompy.MakePartition([cube_decoupe], [f4], [], [], geompy.ShapeType["SOLID"])
-
-cube_decoupe = geompy.MakeCompound([cube_decoupe])
-
-
-cube_partie  = geompy.GetBlockNearPoint(cube_decoupe, geompy.MakeVertex(-cube_cote, 0, 0))
-cube_bloc    = geompy.RemoveExtraEdges(cube_partie)
-
-blocs.append(cube_bloc)
-
-blocs.append(geompy.MakeRotation(cube_bloc, sphere_dir1, +pi2))
-blocs.append(geompy.MakeRotation(cube_bloc, sphere_dir1, -pi2))
-
-blocs.append(geompy.MakeRotation(cube_bloc, sphere_dir2, +pi2))
-blocs.append(geompy.MakeRotation(cube_bloc, sphere_dir2, -pi2))
-
-blocs.append(geompy.MakeMirrorByPoint(cube_bloc, sphere_centre))
-
-# Piece
-# -----
-
-piece_cpd = geompy.MakeCompound(blocs)
-piece = geompy.MakeGlueFaces(piece_cpd, 1.e-3)
-
-piece_id = geompy.addToStudy(piece, "ex19_sphereINcube")
-
-# Groupe geometrique
-# ==================
-
-# Definition du groupe
-# --------------------
-
-groupe = geompy.CreateGroup(piece, geompy.ShapeType["SOLID"])
-
-groupe_nom = "ex19_sphereINcube_interieur"
-geompy.addToStudy(groupe, groupe_nom)
-groupe.SetName(groupe_nom)
-
-# Contenu du groupe
-# -----------------
-
-groupe_sphere = geompy.GetShapesOnSphere(piece, geompy.ShapeType["SOLID"], sphere_centre, sphere_rayon, GEOM.ST_ONIN)
-
-geompy.UnionList(groupe, groupe_sphere)
-
-# Meshing
-# =======
-
-# Create a hexahedral mesh
-# ------------------------
-
-hexa = smesh.Mesh(piece, "ex19_sphereINcube:hexa")
-
-algo = hexa.Segment()
-algo.NumberOfSegments(10)
-
-hexa.Quadrangle()
-
-hexa.Hexahedron()
-
-# Mesh calculus
-# -------------
-
-hexa.Compute()
-
-# Le groupe de mailles
-# --------------------
-
-hexa_groupe = hexa.Group(groupe)
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex21_lamp.py b/src/SMESH_SWIG/ex21_lamp.py
deleted file mode 100644 (file)
index b2f6cae..0000000
+++ /dev/null
@@ -1,139 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# ==================================
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Geometry
-# ========
-
-# an assembly of a box, a cylinder and a truncated cone meshed with tetrahedral.
-
-# Define values
-# -------------
-
-name = "ex21_lamp"
-
-cote = 60
-
-section = 20
-size    = 200
-
-radius_1 = 80
-radius_2 = 40
-height   = 100
-
-# Build a box
-# -----------
-
-box  = geompy.MakeBox(-cote, -cote, -cote,  +cote, +cote, +cote)
-
-# Build a cylinder
-# ----------------
-
-pt1 = geompy.MakeVertex(0, 0, cote/3)
-di1 = geompy.MakeVectorDXDYDZ(0, 0, 1)
-cyl = geompy.MakeCylinder(pt1, di1, section, size)
-
-# Build a truncated cone
-# ----------------------
-
-pt2 = geompy.MakeVertex(0, 0, size)
-cone = geompy.MakeCone(pt2, di1, radius_1, radius_2, height)
-
-# Fuse
-# ----
-
-box_cyl = geompy.MakeFuse(box, cyl)
-piece = geompy.MakeFuse(box_cyl, cone)
-
-# Add in study
-# ------------
-
-geompy.addToStudy(piece, name)
-
-# Create a group of faces
-# -----------------------
-
-group = geompy.CreateGroup(piece, geompy.ShapeType["FACE"])
-
-group_name = name + "_grp"
-geompy.addToStudy(group, group_name)
-group.SetName(group_name)
-
-# Add faces in the group
-# ----------------------
-
-faces = geompy.SubShapeAllIDs(piece, geompy.ShapeType["FACE"])
-
-geompy.UnionIDs(group, faces)
-
-# Create a mesh
-# =============
-
-# Define a mesh on a geometry
-# ---------------------------
-
-tetra = smesh.Mesh(piece, name)
-
-# Define 1D hypothesis
-# --------------------
-
-algo1d = tetra.Segment()
-algo1d.LocalLength(10)
-
-# Define 2D hypothesis
-# --------------------
-
-algo2d = tetra.Triangle()
-algo2d.LengthFromEdges()
-
-# Define 3D hypothesis
-# --------------------
-
-algo3d = tetra.Tetrahedron(smeshBuilder.NETGEN)
-algo3d.MaxElementVolume(100)
-
-# Compute the mesh
-# ----------------
-
-tetra.Compute()
-
-# Create a groupe of faces
-# ------------------------
-
-tetra.Group(group)
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
\ No newline at end of file
diff --git a/src/SMESH_SWIG/ex24_cylinder.py b/src/SMESH_SWIG/ex24_cylinder.py
deleted file mode 100644 (file)
index 534f699..0000000
+++ /dev/null
@@ -1,137 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# ==================================
-#
-import math
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-geo = geompy
-
-# Parameters
-# ----------
-
-radius =  50
-height = 200
-
-# Build a cylinder
-# ----------------
-
-base = geompy.MakeVertex(0, 0, 0)
-direction = geompy.MakeVectorDXDYDZ(0, 0, 1)
-
-cylinder = geompy.MakeCylinder(base, direction, radius, height)
-
-geompy.addToStudy(cylinder, "cylinder")
-
-# Build blocks
-# ------------
-
-size = radius/2.0
-
-box_rot = geompy.MakeBox(-size, -size, 0,  +size, +size, height)
-box_axis = geompy.MakeLine(base, direction)
-box = geompy.MakeRotation(box_rot, box_axis, math.pi/4)
-
-hole = geompy.MakeCut(cylinder, box)
-
-plane_trim = 2000
-
-plane_a = geompy.MakePlane(base, geompy.MakeVectorDXDYDZ(1, 0, 0), plane_trim)
-plane_b = geompy.MakePlane(base, geompy.MakeVectorDXDYDZ(0, 1, 0), plane_trim)
-
-blocks_part = geompy.MakePartition([hole], [plane_a, plane_b], [], [], geompy.ShapeType["SOLID"])
-blocks_list = [box] + geompy.SubShapeAll(blocks_part, geompy.ShapeType["SOLID"])
-blocks_all = geompy.MakeCompound(blocks_list)
-blocks = geompy.MakeGlueFaces(blocks_all, 0.0001)
-
-geompy.addToStudy(blocks, "cylinder:blocks")
-
-# Build geometric groups
-# ----------------------
-
-def group(name, shape, type, base=None, direction=None):
-    t = geompy.ShapeType[type]
-    g = geompy.CreateGroup(shape, t)
-
-    geompy.addToStudy(g, name)
-    g.SetName(name)
-
-    if base!=None:
-        l = geompy.GetShapesOnPlaneWithLocationIDs(shape, t, direction, base, GEOM.ST_ON)
-        geompy.UnionIDs(g, l)
-
-    return g
-
-group_a = group("baseA", blocks, "FACE", base, direction)
-
-base_b  = geompy.MakeVertex(0, 0, height)
-group_b = group("baseB", blocks, "FACE", base_b, direction)
-
-group_1 = group("limit", blocks, "SOLID")
-group_1_all = geompy.SubShapeAllIDs(blocks, geompy.ShapeType["SOLID"])
-geompy.UnionIDs(group_1, group_1_all)
-group_1_box = geompy.GetBlockNearPoint(blocks, base)
-geompy.DifferenceList(group_1, [group_1_box])
-
-# Mesh the blocks with hexahedral
-# -------------------------------
-
-smesh.UpdateStudy()
-
-def discretize(x, y, z,  n, s=blocks):
-    p = geompy.MakeVertex(x, y, z)
-    e = geompy.GetEdgeNearPoint(s, p)
-    a = hexa.Segment(e)
-    a.NumberOfSegments(n)
-    a.Propagation()
-
-hexa = smesh.Mesh(blocks)
-
-hexa_1d = hexa.Segment()
-hexa_1d.NumberOfSegments(1)
-
-discretize(+radius        , +radius,        0,   5)
-discretize(-radius        , +radius,        0,   8)
-discretize((radius+size)/2,       0,        0,  10)
-discretize(        +radius,       0, height/2,  20)
-
-hexa.Quadrangle()
-hexa.Hexahedron()
-
-hexa.Compute()
-
-hexa.Group(group_a)
-hexa.Group(group_b)
-hexa.Group(group_1)
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex29_refine.py b/src/SMESH_SWIG/ex29_refine.py
deleted file mode 100644 (file)
index f49158e..0000000
+++ /dev/null
@@ -1,235 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# =======================================
-# Procedure that take a triangulation and split all triangles in 4 others triangles
-#
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-import os
-
-# Values
-# ------
-
-tmpDir = os.getenv('SALOME_TMP_DIR', '/tmp')
-print("Output directory:", tmpDir)
-
-# Path for ".med" files
-path = os.path.join( tmpDir, "ex29_%s_" % os.getenv('USER','unknown'))
-
-# Name of the shape and the mesh
-name = "Carre"
-
-# Add a node and needed edges
-# ---------------------------
-
-def node(m, f, n1, n2, lnv):
-    x1, y1, z1 = m.GetNodeXYZ(n1)
-    x2, y2, z2 = m.GetNodeXYZ(n2)
-
-    x = (x1 + x2) / 2.0
-    y = (y1 + y2) / 2.0
-    z = (z1 + z2) / 2.0
-
-    i = m.AddNode(x, y, z)
-
-    in1 = m.GetShapeID(n1)
-    in2 = m.GetShapeID(n2)
-
-    if (in1==f) or (in2==f):
-        m.SetNodeOnFace(i, f, 0, 0)
-
-    else:
-        e1 = m.AddEdge([ n1, i  ])
-        e2 = m.AddEdge([ i , n2 ])
-
-        if n1 in lnv:
-            e = in2
-        else:
-            e = in1
-
-        m.SetMeshElementOnShape(e1, e)
-        m.SetMeshElementOnShape(e2, e)
-        m.SetNodeOnEdge(i, e, 0)
-
-    return i
-
-# Add a triangle and associate to the CAD face
-# --------------------------------------------
-
-def triangle(m, f, n1, n2, n3):
-    i = m.AddFace([ n1, n2, n3 ])
-    m.SetMeshElementOnShape(i, f)
-
-# Split all triangles in 4 triangles
-# ----------------------------------
-
-def SplitTrianglesIn4(m):
-    # Get all triangles
-    triangles = m.GetElementsByType(SMESH.FACE)
-
-    # Remove all edges
-    m.RemoveElements(m.GetElementsByType(SMESH.EDGE))
-
-    # Get the list of nodes (ids) associated with the CAD vertices
-    shape = m.GetShape()
-    lnv = []
-    for v in geompy.SubShapeAll(shape, geompy.ShapeType["VERTEX"]):
-        lnv = lnv + m.GetSubMeshNodesId(v, True)
-
-    # Split every triangle
-    for t in triangles:
-        noeud_1, noeud_2, noeud_3 = m.GetElemNodes(t)
-
-        face = m.GetShapeIDForElem(t)
-
-        noeud_12 = node(m, face, noeud_1, noeud_2, lnv)
-        noeud_23 = node(m, face, noeud_2, noeud_3, lnv)
-        noeud_13 = node(m, face, noeud_1, noeud_3, lnv)
-
-        triangle(m, face, noeud_1 , noeud_12, noeud_13)
-        triangle(m, face, noeud_2 , noeud_23, noeud_12)
-        triangle(m, face, noeud_3 , noeud_13, noeud_23)
-        triangle(m, face, noeud_12, noeud_23, noeud_13)
-
-    # Remove all initial triangles
-    m.RemoveElements(triangles)
-
-    # Merge all identical nodes
-    m.MergeNodes(m.FindCoincidentNodes(0.0001))
-
-# Build a CAD square
-# ------------------
-
-x0 = 0.0 ; y0 = 0.0 ; z0 = 0.0
-x1 = 1.0 ; y1 = 0.0 ; z1 = 0.0
-x2 = 1.0 ; y2 = 1.0 ; z2 = 0.0
-x3 = 0.0 ; y3 = 1.0 ; z3 = 0.0
-
-P0 = geompy.MakeVertex(x0, y0, z0)
-P1 = geompy.MakeVertex(x1, y1, z1)
-P2 = geompy.MakeVertex(x2, y2, z2)
-P3 = geompy.MakeVertex(x3, y3, z3)
-
-square = geompy.MakeQuad4Vertices(P0, P1, P2, P3)
-geompy.addToStudy(square, name)
-
-# Refine edges and create group of mesh
-# -------------------------------------
-
-def refine(m, p1, p2, n, k, name):
-    s = m.GetShape()
-
-    g = geompy.CreateGroup(s, geompy.ShapeType["EDGE"])
-    e = geompy.GetEdge(s, p1, p2)
-    i = geompy.GetSubShapeID(s, e)
-    geompy.AddObject(g, i)
-    m.Group(g, name)
-
-    a = m.Segment(e)
-    a.NumberOfSegments(n, k)
-
-# Mesh the square
-# ---------------
-
-MyMesh = smesh.Mesh(square)
-
-refine(MyMesh, P1, P2,  8,  7, "Droite")
-refine(MyMesh, P3, P0,  9, 10, "Gauche")
-refine(MyMesh, P0, P1,  7,  9, "Bas"   )
-refine(MyMesh, P2, P3, 12, 14, "Haut"  )
-
-algo2D = MyMesh.Triangle()
-algo2D.MaxElementArea(0.07)
-
-MyMesh.Compute()
-
-MyMesh.ExportMED(path+"110_triangles.med", 0)
-
-# Disturb the mesh
-# ----------------
-
-MyMesh.MoveNode( 37, 0.05    , 0.368967 , 0 )
-MyMesh.MoveNode( 38, 0.34    , 0.0762294, 0 )
-MyMesh.MoveNode( 40, 0.8     , 0.42     , 0 )
-MyMesh.MoveNode( 42, 0.702662, 0.74     , 0 )
-MyMesh.MoveNode( 46, 0.4     , 0.374656 , 0 )
-MyMesh.MoveNode( 47, 0.13    , 0.63     , 0 )
-MyMesh.MoveNode( 49, 0.222187, 0.3      , 0 )
-MyMesh.MoveNode( 54, 0.557791, 0.05     , 0 )
-MyMesh.MoveNode( 55, 0.7     , 0.2      , 0 )
-MyMesh.MoveNode( 56, 0.73    , 0.52     , 0 )
-MyMesh.MoveNode( 58, 0.313071, 0.31     , 0 )
-MyMesh.MoveNode( 59, 0.8     , 0.56     , 0 )
-MyMesh.MoveNode( 62, 0.592703, 0.95     , 0 )
-MyMesh.MoveNode( 63, 0.28    , 0.5      , 0 )
-MyMesh.MoveNode( 65, 0.49    , 0.93     , 0 )
-MyMesh.MoveNode( 68, 0.501038, 0.65     , 0 )
-MyMesh.MoveNode( 69, 0.37    , 0.63     , 0 )
-MyMesh.MoveNode( 70, 0.597025, 0.52     , 0 )
-MyMesh.MoveNode( 72, 0.899   , 0.878589 , 0 )
-MyMesh.MoveNode( 73, 0.92    , 0.85     , 0 )
-MyMesh.MoveNode( 74, 0.820851, 0.75     , 0 )
-
-NbCells1 = 110
-MyMesh.ExportMED(path+"110_triangles_2.med", 0)
-
-# First mesh refining
-# -------------------
-
-SplitTrianglesIn4(MyMesh)
-
-NbCells2 = NbCells1*4
-print(("Mesh with "+str(NbCells2)+" cells computed."))
-
-MyMesh.ExportMED(path+str(NbCells2)+"_triangles.med", 0)
-
-# Second mesh refining
-# --------------------
-
-SplitTrianglesIn4(MyMesh)
-
-NbCells3 = NbCells2*4
-print(("Mesh with "+str(NbCells3)+" cells computed."))
-
-MyMesh.ExportMED(path+str(NbCells3)+"_triangles.med",0)
-
-# Third mesh refining
-# -------------------
-
-SplitTrianglesIn4(MyMesh)
-
-NbCells4 = NbCells3*4
-print(("Mesh with "+str(NbCells4)+" cells computed."))
-
-MyMesh.ExportMED(path+str(NbCells4)+"_triangles.med", 0)
-
-# Update the object browser
-# -------------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex30_groupsOp.py b/src/SMESH_SWIG/ex30_groupsOp.py
deleted file mode 100644 (file)
index 172315a..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-import math
-
-global Face_1
-Face_1 = geompy.MakeFaceHW(100, 100, 1)
-geompy.addToStudy( Face_1, "Face_1" )
-
-smesh.UpdateStudy()
-from salome.StdMeshers import StdMeshersBuilder
-pattern = smesh.GetPattern()
-Mesh_1 = smesh.Mesh(Face_1)
-Regular_1D = Mesh_1.Segment()
-Nb_Segments_1 = Regular_1D.NumberOfSegments(10)
-Nb_Segments_1.SetDistrType( 0 )
-Quadrangle_2D = Mesh_1.Quadrangle()
-isDone = Mesh_1.Compute()
-
-# groups creation
-
-aListOfElems = [ 52, 53, 54, 55, 56, 57,
-                 62, 63, 64, 65, 66, 67,
-                 72, 73, 74, 75, 76, 77,
-                 82, 83, 84, 85, 86, 87 ]
-                 
-aRedGroup = Mesh_1.GetMesh().CreateGroup( SMESH.FACE, "Red" )
-aRedGroup.Add( aListOfElems );
-aRedGroup.SetColor( SALOMEDS.Color( 1, 0, 0 ) )
-
-aListOfElems = [ 55, 56, 57, 58, 59,
-                 65, 66, 67, 68, 69,
-                 75, 76, 77, 78, 79,
-                 85, 86, 87, 88, 89,
-                 95, 96, 97, 98, 99,
-                 105, 106, 107, 108, 109,
-                 115, 116, 117, 118, 119,
-                 125, 126, 127, 128, 129 ]
-                 
-aGreenGroup = Mesh_1.GetMesh().CreateGroup( SMESH.FACE, "Green" )
-aGreenGroup.Add( aListOfElems );
-aGreenGroup.SetColor( SALOMEDS.Color( 0, 1, 0 ) )
-
-aListOfElems = [ 63, 64, 65, 66, 67, 68, 
-                 73, 74, 75, 76, 77, 78,
-                 83, 84, 85, 86, 87, 88, 
-                 93, 94, 95, 96, 97, 98, 
-                 103, 104, 105, 106, 107, 108, 
-                 113, 114, 115, 116, 117, 118 ]
-                 
-aBlueGroup = Mesh_1.GetMesh().CreateGroup( SMESH.FACE, "Blue" )
-aBlueGroup.Add( aListOfElems );
-aBlueGroup.SetColor( SALOMEDS.Color( 0, 0, 1 ) )
-
-# UnionListOfGroups()
-aUnGrp = Mesh_1.UnionListOfGroups([aRedGroup, aGreenGroup, aBlueGroup], "UnionGrp" )
-
-# IntersectListOfGroups()
-aIntGrp=Mesh_1.IntersectListOfGroups([aRedGroup, aGreenGroup, aBlueGroup], "IntGrp" )
-
-# CutListOfGroups()
-aCutGrp=Mesh_1.CutListOfGroups([aRedGroup],[aGreenGroup,aBlueGroup],"CutGrp")
-
-salome.sg.updateObjBrowser()
-
diff --git a/src/SMESH_SWIG/ex30_tepal.py b/src/SMESH_SWIG/ex30_tepal.py
deleted file mode 100644 (file)
index 9ccdb09..0000000
+++ /dev/null
@@ -1,96 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-# ====================================================================
-#
-import os
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-
-# Parameters
-# ----------
-
-results = "/tmp/ZZ"
-
-radius =  50
-height = 200
-
-# Build a cylinder
-# ----------------
-
-base = geompy.MakeVertex(0, 0, 0)
-direction = geompy.MakeVectorDXDYDZ(0, 0, 1)
-
-cylinder = geompy.MakeCylinder(base, direction, radius, height)
-
-geompy.addToStudy(cylinder, "Cylinder")
-
-# Define a mesh on a geometry
-# ---------------------------
-
-smesh.UpdateStudy()
-
-m = smesh.Mesh(cylinder)
-
-# 2D mesh with BLSURF
-# -------------------
-
-algo2d = m.Triangle(smeshBuilder.BLSURF)
-
-algo2d.SetPhysicalMesh(1)
-algo2d.SetPhySize(5)
-
-algo2d.SetGeometricMesh(0)
-
-# 3D mesh with tepal
-# ------------------
-
-algo3d = m.Tetrahedron(smeshBuilder.GHS3DPRL)
-
-algo3d.SetMEDName(results)
-algo3d.SetNbPart(4)
-algo3d.SetBackground(False)
-algo3d.SetKeepFiles(False)
-
-# Launch meshers
-# --------------
-
-status = m.Compute()
-
-# Test if ok
-# ----------
-
-if os.access(results+".xml", os.F_OK):
-    print("Ok: tepal")
-else:
-    print("KO: tepal")
-
-# Update object browser
-# ---------------------
-
-salome.sg.updateObjBrowser()
diff --git a/src/SMESH_SWIG/ex31_dimGroup.py b/src/SMESH_SWIG/ex31_dimGroup.py
deleted file mode 100644 (file)
index 6d5bf1a..0000000
+++ /dev/null
@@ -1,64 +0,0 @@
-#  -*- coding: iso-8859-1 -*-
-# Copyright (C) 2007-2020  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
-#
-
-import salome
-salome.salome_init()
-import GEOM
-from salome.geom import geomBuilder
-geompy = geomBuilder.New()
-
-import SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-smesh =  smeshBuilder.New()
-import math
-
-global Box_1
-Box_1 = geompy.MakeBoxDXDYDZ(200, 200, 200)
-geompy.addToStudy( Box_1, "Box_1" )
-
-smesh.UpdateStudy()
-from salome.StdMeshers import StdMeshersBuilder
-Mesh_1 = smesh.Mesh(Box_1)
-Regular_1D = Mesh_1.Segment()
-Nb_Segments_1 = Regular_1D.NumberOfSegments(10)
-Nb_Segments_1.SetDistrType( 0 )
-Quadrangle_2D = Mesh_1.Quadrangle()
-Hexa_3D = Mesh_1.Hexahedron()
-isDone = Mesh_1.Compute()
-
-### CreateDimGroup()
-
-aListOf3d_1=list(range(721,821))
-
-aGrp3D_1=Mesh_1.GetMesh().CreateGroup( SMESH.VOLUME, "Src 3D 1" )
-aGrp3D_1.Add( aListOf3d_1 )
-
-aListOf3d_2=list(range(821, 921))
-aGrp3D_2=Mesh_1.GetMesh().CreateGroup( SMESH.VOLUME, "Src 3D 2" )
-aGrp3D_2.Add( aListOf3d_2 )
-
-aGrp2D = Mesh_1.CreateDimGroup( [aGrp3D_1, aGrp3D_2], SMESH.FACE, "Faces" )
-
-aGrp1D = Mesh_1.CreateDimGroup( [aGrp3D_1, aGrp3D_2], SMESH.EDGE, "Edges" )
-
-aGrp0D = Mesh_1.CreateDimGroup( [aGrp3D_1, aGrp3D_2], SMESH.NODE, "Nodes" )
-
-salome.sg.updateObjBrowser()
-
diff --git a/src/SMESH_SWIG/mesher_launcher.py b/src/SMESH_SWIG/mesher_launcher.py
new file mode 100644 (file)
index 0000000..b92a4b5
--- /dev/null
@@ -0,0 +1,325 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+## Copyright (C) 2021-2024  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 to run mesher from command line
+"""
+from os import environ, path
+import sys
+import subprocess as sp
+
+from argparse import ArgumentParser
+import pydefx
+import pylauncher
+
+MESHER_HANDLED = ["NETGEN3D","NETGEN2D","NETGEN1D","NETGEN1D2D","NETGEN1D2D","GMSH3D"]
+
+CMD_TEMPLATE = \
+"""{runner} {mesher} {mesh_file} {shape_file} {param_file} {elem_orientation_file} {new_element_file} {output_mesh_file} > {log_file} 2>&1"""
+
+PYTHON_CODE = \
+"""
+import subprocess as sp
+def _exec(cmd):
+    error_code = -1
+    try:
+        output = sp.check_output(cmd, shell=True)
+        error_code = 0
+    except sp.CalledProcessError as e:
+        print('Code crash')
+        print(e.output)
+        error_code = e.returncode
+        raise e
+    return error_code
+"""
+
+def create_launcher():
+    """ Initialise pylauncher
+    """
+    launcher = pylauncher.Launcher_cpp()
+    launcher.SetResourcesManager(create_resources_manager())
+    return launcher
+
+def create_resources_manager():
+    """ Look for the catalog file and create a ressource manager with it """
+    # localhost is defined anyway, even if the catalog file does not exist.
+    catalog_path = environ.get("USER_CATALOG_RESOURCES_FILE", "")
+    if not path.isfile(catalog_path):
+        salome_path = environ.get("ROOT_SALOME_INSTALL", "")
+        catalog_path = path.join(salome_path, "CatalogResources.xml")
+    if not path.isfile(catalog_path):
+        catalog_path = ""
+
+    return pylauncher.ResourcesManager_cpp(catalog_path)
+
+def create_job_parameters():
+    """ Initialsie JobParameters """
+    jparam = pylauncher.JobParameters_cpp()
+    jparam.resource_required = create_resource_parameters()
+    return jparam
+
+def create_resource_parameters():
+    """ Init resourceParams """
+    return pylauncher.resourceParams()
+
+def get_runner(mesher):
+    """
+    Get path to exe for mesher
+
+    Arguments:
+    mesher: Name of the mesher (NETGEN2D/NETGEN3D...)
+
+    retuns (string) Path to the exe
+    """
+    if sys.platform.startswith('win'):
+        ext = ".exe"
+    else:
+        ext = ""
+
+    if mesher in ['NETGEN3D','NETGEN2D','NETGEN1D','NETGEN1D2D','NETGEN1D2D']:
+        exe_path = path.join("${NETGENPLUGIN_ROOT_DIR}",
+                             "bin",
+                             "salome",
+                             "NETGENPlugin_Runner"+ext)
+    elif mesher in ['GMSH3D']:
+        exe_path = path.join("${GMSHPLUGIN_ROOT_DIR}",
+                             "bin",
+                             "salome",
+                             "GMSHPlugin_Runner"+ext)
+    else:
+        raise Exception("Mesher {mesher} is not handled".format(mesher=mesher))
+
+    return exe_path
+
+def run_local(args):
+    """ Simple Local run """
+    cmd = CMD_TEMPLATE.format(\
+        runner=get_runner(args.mesher),
+        mesher=args.mesher,
+        mesh_file=args.input_mesh_file,
+        shape_file=args.shape_file,
+        param_file=args.hypo_file,
+        elem_orientation_file=args.elem_orient_file,
+        new_element_file=args.new_element_file,
+        log_file=path.join(path.dirname(args.shape_file), "run.log"),
+        output_mesh_file=args.output_mesh_file)
+    sp.check_output(cmd, shell=True, cwd=path.dirname(args.shape_file))
+
+def run_pylauncher(args):
+    """ Run exe throuhg pylauncher """
+    import time
+    print("Cluster run")
+
+    cmd = CMD_TEMPLATE.format(\
+        runner=get_runner(args.mesher),
+        mesher=args.mesher,
+        mesh_file="../"+path.basename(args.input_mesh_file),
+        shape_file=path.basename(args.shape_file),
+        param_file=path.basename(args.hypo_file),
+        elem_orientation_file=path.basename(args.elem_orient_file),
+        new_element_file=path.basename(args.new_element_file),
+        log_file="run.log",
+        output_mesh_file=path.basename(args.output_mesh_file))
+
+    print("Cmd: ", cmd)
+
+    # salome launcher
+    launcher = create_launcher()
+
+    # See SALOME_Launcher documentation for parameters
+    job_params = create_job_parameters()
+    # different type are:
+    # command Shell out of salome session
+    # command_salome Shell in salome shell
+    # python_salome Python script
+    # yacs_file
+    job_params.job_type = "command_salome" # creates CatalogResources.xml
+
+    job_params.wckey = args.wc_key
+    job_params.resource_required.nb_proc = args.nb_proc
+    job_params.resource_required.nb_proc_per_node = args.nb_proc_per_node
+    job_params.resource_required.nb_node = args.nb_node
+    job_params.maximum_duration = args.walltime
+
+    # job_params.pre_command = pre_command # command to run on frontal
+    # script to run in batch mode
+    run_script = path.join(path.dirname(args.shape_file), "run.sh")
+    with open(run_script, "w") as f:
+        f.write("#!/bin/bash\n")
+        f.write(cmd)
+    job_params.job_file = run_script
+
+    local_dir = path.dirname(args.shape_file)
+
+    # files to copy to remote working dir
+    # Directories are copied recursively.
+    # job_file script is automaticaly copied.
+    job_params.in_files = [args.shape_file,
+                           args.hypo_file,
+                           args.elem_orient_file]
+
+    print("in_files", job_params.in_files)
+    # local path for in_files
+    job_params.local_directory = local_dir
+    # result files you want to bring back with getJobResults
+    # TODO: replace run.log by argument ? by path
+    out_files = ["run.log"]
+    if args.new_element_file != "NONE":
+        out_files.append(path.relpath(args.new_element_file, local_dir))
+    if args.output_mesh_file != "NONE":
+        out_files.append(path.relpath(args.output_mesh_file, local_dir))
+    job_params.out_files = out_files
+    print("out_files", job_params.out_files)
+    # local path where to copy out_files
+    job_params.result_directory = local_dir
+
+    job_params.job_name = "SMESH_parallel"
+    job_params.resource_required.name = args.resource
+
+    # Extra parameters
+    # String that is directly added to the job submission file
+    # job_params.extra_params = "#SBATCH --nodes=2"
+
+    # remote job directory
+    # Retrieve working dir from catalog
+    res_manager = create_resources_manager()
+    res_params = res_manager.GetResourceDefinition(args.resource)
+    job_params.work_directory = path.join(\
+            res_params.working_directory,
+            path.basename(path.dirname(path.dirname(args.shape_file))),
+            path.basename(path.dirname(args.shape_file)))
+    print("work directory", job_params.work_directory)
+
+    job_id = launcher.createJob(job_params) #SALOME id of the job
+    launcher.launchJob(job_id) # copy files, run pre_command, submit job
+
+    # wait for the end of the job
+    job_state = launcher.getJobState(job_id)
+    print("Job %d state: %s" % (job_id, job_state))
+    while job_state not in ["FINISHED", "FAILED"]:
+        time.sleep(3)
+        job_state = launcher.getJobState(job_id)
+
+    if job_state == "FAILED":
+        raise Exception("Job failed")
+    else:
+        # verify the return code of the execution
+        if(launcher.getJobWorkFile(job_id,
+                                   "logs/exit_code.log",
+                                   job_params.result_directory)):
+            exit_code_file = path.join(job_params.result_directory,
+                                       "exit_code.log")
+            exit_code = ""
+            if path.isfile(exit_code_file):
+                with open(exit_code_file) as myfile:
+                    exit_code = myfile.read()
+                    exit_code = exit_code.strip()
+            if exit_code != "0":
+                raise Exception(\
+                    "An error occured during the execution of the job.")
+        else:
+            raise Exception("Failed to get the exit code of the job.")
+
+    # Retrieve result files
+    launcher.getJobResults(job_id, "")
+
+    # Delete remote working dir
+    del_tmp_folder = True
+    try:
+       val = int(environ.get("SMESH_KEEP_TMP", "0"))
+       del_tmp_folder = val < 0
+    except Exception as e:
+        del_tmp_folder = True
+
+    if del_tmp_folder:
+        launcher.clearJobWorkingDir(job_id)
+
+def def_arg():
+    """ Define and parse arguments for the script """
+    parser = ArgumentParser()
+    parser.add_argument("mesher",
+                        choices=MESHER_HANDLED,
+                        help="mesher to use from ("+",".join(MESHER_HANDLED)+")")
+    parser.add_argument("input_mesh_file",\
+        help="MED File containing lower-dimension-elements already meshed")
+    parser.add_argument("shape_file",
+                        help="STEP file containing the shape to mesh")
+    parser.add_argument("hypo_file",
+                        help="Ascii file containint the list of parameters")
+    parser.add_argument("--elem-orient-file",\
+        help="binary file containing the list of elements from "\
+             "INPUT_MESH_FILE associated to the shape and their orientation")
+    # Output file parameters
+    output = parser.add_argument_group("Output files", "Possible output files")
+    output.add_argument("--new-element-file",
+                        default="NONE",
+                        help="contains elements and nodes added by the meshing")
+    output.add_argument(\
+        "--output-mesh-file",
+        default="NONE",
+        help="MED File containing the mesh after the run of the mesher")
+
+    # Run parameters
+    run_param = parser.add_argument_group(\
+            "Run parameters",
+            "Parameters for the run of the mesher")
+    run_param.add_argument("--method",
+                           default="local",
+                           choices=["local", "cluster"],
+                           help="Running method (default: local)")
+
+    run_param.add_argument("--resource",
+                           help="resource from SALOME Catalog")
+    run_param.add_argument("--nb-proc",
+                           default=1,
+                           type=int,
+                           help="Number of processors")
+    run_param.add_argument("--nb-proc-per-node",
+                           default=1,
+                           type=int,
+                           help="Number of processeor per node")
+    run_param.add_argument("--nb-node",
+                           default=1,
+                           type=int,
+                           help="Number of node")
+    run_param.add_argument("--walltime",
+                           default="01:00:00",
+                           help="walltime for job submission HH:MM:SS (default 01:00:00)")
+    run_param.add_argument("--wc-key",
+                           default="P11N0:SALOME",
+                           help="wc-key for job submission (default P11N0:SALOME)")
+
+    args = parser.parse_args()
+
+    return args
+
+def main():
+    """ Main function """
+    args = def_arg()
+    if args.method == "local":
+        run_local(args)
+    elif args.method == "cluster":
+        run_pylauncher(args)
+    else:
+        raise Exception("Unknown method {}".format(args.method))
+
+if __name__ == "__main__":
+    main()
diff --git a/src/SMESH_SWIG/send_files.py b/src/SMESH_SWIG/send_files.py
new file mode 100644 (file)
index 0000000..7a4a1be
--- /dev/null
@@ -0,0 +1,125 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+## Copyright (C) 2021-2024  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 to send files on remote ressource
+"""
+from os import environ, path
+
+from argparse import ArgumentParser
+import pydefx
+import pylauncher
+
+def create_launcher():
+    """ Initialise pylauncher
+    """
+    launcher = pylauncher.Launcher_cpp()
+    launcher.SetResourcesManager(create_resources_manager())
+    return launcher
+
+def create_resources_manager():
+    """ Look for the catalog file and create a ressource manager with it """
+    # localhost is defined anyway, even if the catalog file does not exist.
+    catalog_path = environ.get("USER_CATALOG_RESOURCES_FILE", "")
+    if not path.isfile(catalog_path):
+        salome_path = environ.get("ROOT_SALOME_INSTALL", "")
+        catalog_path = path.join(salome_path, "CatalogResources.xml")
+    if not path.isfile(catalog_path):
+        catalog_path = ""
+
+    return pylauncher.ResourcesManager_cpp(catalog_path)
+
+def create_job_parameters():
+    """ Initialsie JobParameters """
+    jparam = pylauncher.JobParameters_cpp()
+    jparam.resource_required = create_resource_parameters()
+    return jparam
+
+def create_resource_parameters():
+    """ Init resourceParams """
+    return pylauncher.resourceParams()
+
+def send_file(args):
+    """ job to send a file to the cluster """
+    # salome launcher
+    launcher = create_launcher()
+
+    # See SALOME_Launcher documentation for parameters
+    job_params = create_job_parameters()
+    job_params.job_type = "command_salome" # creates CatalogResources.xml
+
+    local_dir = path.dirname(args.input_file)
+
+    # job_params.pre_command = pre_command # command to run on frontal
+    # script to run in batch mode
+    run_script = path.join(path.dirname(args.input_file), "run.sh")
+    with open(run_script, "w") as f:
+        f.write("#!/bin/bash\n")
+    job_params.job_file = run_script
+    job_params.resource_required.nb_proc = 1
+
+    # files to copy to remote working dir
+    # Directories are copied recursively.
+    # job_file script is automaticaly copied.
+    job_params.in_files = [args.input_file]
+    print("in_files", job_params.in_files)
+    # local path where to copy out_files
+    job_params.result_directory = local_dir
+
+    job_params.job_name = "SMESH_transfer"
+    job_params.resource_required.name = args.resource
+
+    # remote job directory
+    # Retrieve working dir from catalog
+    res_manager = create_resources_manager()
+    res_params = res_manager.GetResourceDefinition(args.resource)
+    job_params.work_directory = path.join(\
+            res_params.working_directory,
+            path.basename(path.dirname(args.input_file)))
+
+    print("work_directory", job_params.work_directory)
+
+    job_id = launcher.createJob(job_params) #SALOME id of the job
+    launcher.exportInputFiles(job_id)
+
+
+def def_arg():
+    """ Define and parse arguments for the script """
+    parser = ArgumentParser()
+    parser.add_argument("input_file",\
+        help="file to copy")
+
+    # Run parameters
+
+    parser.add_argument("--resource",
+                        help="resource from SALOME Catalog")
+
+    args = parser.parse_args()
+
+    return args
+
+def main():
+    """ Main function """
+    args = def_arg()
+    send_file(args)
+
+if __name__ == "__main__":
+    main()
index c99e958214e6c0d16b649cb24eeb24c9e4cf9d11..2401ed74cfcc7be98c4e92706c120e297250a1c7 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -216,7 +216,7 @@ NO_NAME = "NoName"
 def GetName(obj):
     """
     Return a name of an object
-    
+
     Returns:
         object name
     """
@@ -429,26 +429,26 @@ class smeshBuilder( SMESH._objref_SMESH_Gen, object ):
     def init_smesh(self,geompyD = None):
         """
         Set Geometry component
-        """    
+        """
         #print("init_smesh")
         self.UpdateStudy(geompyD)
         notebook.myStudy = salome.myStudy
 
     def Mesh(self, obj=0, name=0):
         """
-        Create a mesh. This mesh can be either 
+        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 
+            obj: either
 
                    1. a :class:`CORBA mesh <SMESH.SMESH_Mesh>` got by calling e.g.
                       ::
 
-                        salome.myStudy.FindObjectID("0:1:2:3").GetObject() 
+                        salome.myStudy.FindObjectID("0:1:2:3").GetObject()
 
                    2. a geometrical object for meshing
                    3. none.
@@ -462,6 +462,22 @@ class smeshBuilder( SMESH._objref_SMESH_Gen, object ):
             obj,name = name,obj
         return Mesh(self, self.geompyD, obj, name)
 
+    def ParallelMesh(self, obj, name=0, split_geom=True):
+        """
+        Create a parallel mesh.
+
+        Parameters:
+            obj: geometrical object for meshing
+            name: the name for the new mesh.
+            split_geom: If True split the geometry and create the assoicated
+            sub meshes
+
+        Returns:
+            an instance of class :class:`ParallelMesh`.
+        """
+        return ParallelMesh(self, self.geompyD, obj,
+                            split_geom=split_geom, name=name)
+
     def RemoveMesh( self, mesh ):
         """
         Delete a mesh
@@ -648,7 +664,7 @@ class smeshBuilder( SMESH._objref_SMESH_Gen, object ):
         if sc:
             sb.LoadWith(sc, self)
         pass
-    
+
     def SetEnablePublish( self, theIsEnablePublish ):
         """
         Set enable publishing in the study. Calling SetEnablePublish( False ) allows to
@@ -677,7 +693,7 @@ class smeshBuilder( SMESH._objref_SMESH_Gen, object ):
         Create a Mesh object(s) importing data from the given MED file
 
         Returns:
-                a tuple ( list of class :class:`Mesh` instances, 
+                a tuple ( list of class :class:`Mesh` instances,
                 :class:`SMESH.DriverMED_ReadStatus` )
         """
 
@@ -685,18 +701,6 @@ class smeshBuilder( SMESH._objref_SMESH_Gen, object ):
         aMeshes = [ Mesh(self, self.geompyD, m) for m in aSmeshMeshes ]
         return aMeshes, aStatus
 
-    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
-
     def CreateMeshesFromSTL( self, theFileName ):
         """
         Create a Mesh object importing data from the given STL file
@@ -756,7 +760,7 @@ class smeshBuilder( SMESH._objref_SMESH_Gen, object ):
         Returns:
                 an instance of class :class:`Mesh`
 
-        See also: 
+        See also:
                 :meth:`Mesh.Append`
         """
 
@@ -785,12 +789,32 @@ class smeshBuilder( SMESH._objref_SMESH_Gen, object ):
         aMesh = Mesh( self, self.geompyD, aSmeshMesh, name=name )
         return aMesh
 
+    def CreateDualMesh( self, mesh, meshName, adaptToShape):
+        """
+        Create a dual of a mesh.
+
+        Parameters:
+                mesh: Tetrahedron mesh
+                        :class:`mesh, <SMESH.SMESH_IDSource>`.
+
+                meshName: a name of the new mesh
+                adpatToShape: if true project boundary points on shape
+
+        Returns:
+                an instance of class :class:`Mesh`
+        """
+        if isinstance( mesh, Mesh ):
+            mesh = mesh.GetMesh()
+        dualMesh = SMESH._objref_SMESH_Gen.CreateDualMesh(self, mesh, meshName, adaptToShape)
+        return Mesh(self, self.geompyD, dualMesh)
+
+
     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 
+                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*
@@ -822,7 +846,7 @@ class smeshBuilder( SMESH._objref_SMESH_Gen, object ):
                 meshName: an optional name of the new mesh. If omitted, the mesh name is kept.
                 toCopyGroups: to create groups in the new mesh.
                 toReuseHypotheses: to reuse hypotheses of the *sourceMesh*.
-                toCopyElements: to copy mesh elements present on non-modified sub-shapes of 
+                toCopyElements: to copy mesh elements present on non-modified sub-shapes of
                                 *sourceMesh*.
         Returns:
                 tuple ( ok, newMesh, newGroups, newSubMeshes, newHypotheses, invalidEntries )
@@ -1179,6 +1203,8 @@ class smeshBuilder( SMESH._objref_SMESH_Gen, object ):
             functor = aFilterMgr.CreateAspectRatio3D()
         elif theCriterion == FT_Warping:
             functor = aFilterMgr.CreateWarping()
+        elif theCriterion == FT_Warping3D:
+            functor = aFilterMgr.CreateWarping3D()
         elif theCriterion == FT_MinimumAngle:
             functor = aFilterMgr.CreateMinimumAngle()
         elif theCriterion == FT_Taper:
@@ -1209,6 +1235,8 @@ class smeshBuilder( SMESH._objref_SMESH_Gen, object ):
             functor = aFilterMgr.CreateNodeConnectivityNumber()
         elif theCriterion == FT_BallDiameter:
             functor = aFilterMgr.CreateBallDiameter()
+        elif theCriterion == FT_ScaledJacobian:
+            functor = aFilterMgr.CreateScaledJacobian()
         else:
             print("Error: given parameter is not numerical functor type.")
         aFilterMgr.UnRegister()
@@ -1297,7 +1325,7 @@ class smeshBuilder( SMESH._objref_SMESH_Gen, object ):
         Returns:
                 minimum distance value
 
-        See also: 
+        See also:
                 :meth:`GetMinDistance`
         """
 
@@ -1325,7 +1353,7 @@ class smeshBuilder( SMESH._objref_SMESH_Gen, object ):
 
         Returns:
                 :class:`SMESH.Measure` structure or None if input data is invalid
-        See also: 
+        See also:
                 :meth:`MinDistance`
         """
 
@@ -1372,7 +1400,7 @@ class smeshBuilder( SMESH._objref_SMESH_Gen, object ):
         Returns:
                 tuple of six values (minX, minY, minZ, maxX, maxY, maxZ)
 
-        See also: 
+        See also:
                :meth:`GetBoundingBox`
         """
 
@@ -1393,7 +1421,7 @@ class smeshBuilder( SMESH._objref_SMESH_Gen, object ):
         Returns:
                 :class:`SMESH.Measure` structure
 
-        See also: 
+        See also:
                 :meth:`BoundingBox`
         """
 
@@ -1472,14 +1500,14 @@ class smeshBuilder( SMESH._objref_SMESH_Gen, object ):
     def GetGravityCenter(self, obj):
         """
         Get gravity center of all nodes of a mesh object.
-        
-        Parameters:            
+
+        Parameters:
                 obj: :class:`mesh, sub-mesh, group or filter <SMESH.SMESH_IDSource>`
 
-        Returns:        
+        Returns:
                 Three components of the gravity center (x,y,z)
 
-        See also: 
+        See also:
                 :meth:`Mesh.BaryCenter`
         """
         if isinstance(obj, Mesh): obj = obj.mesh
@@ -1493,11 +1521,11 @@ class smeshBuilder( SMESH._objref_SMESH_Gen, object ):
         """
         Computes a radian measure of an angle defined by 3 points: <(p1,p2,p3)
 
-        Parameters:            
-                p1,p2,p3: coordinates of 3 points defined by either SMESH.PointStruct 
+        Parameters:
+                p1,p2,p3: coordinates of 3 points defined by either SMESH.PointStruct
                           or list [x,y,z]
 
-        Returns:        
+        Returns:
             Angle in radians
         """
         if isinstance( p1, list ): p1 = PointStruct(*p1)
@@ -1563,13 +1591,13 @@ class Mesh(metaclass = MeshMeta):
     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
 
-    def __init__(self, smeshpyD, geompyD, obj=0, name=0):
+    def __init__(self, smeshpyD, geompyD, obj=0, name=0, parallel=False):
 
         """
         Constructor
@@ -1602,7 +1630,12 @@ class Mesh(metaclass = MeshMeta):
                     else:
                         geo_name = "%s_%s to mesh"%(self.geom.GetShapeType(), id(self.geom)%100)
                     geompyD.addToStudy( self.geom, geo_name )
-                self.SetMesh( self.smeshpyD.CreateMesh(self.geom) )
+                if parallel and isinstance(self, ParallelMesh):
+                    mymesh = self.smeshpyD.CreateParallelMesh(self.geom)
+                    mymesh2 = mymesh._narrow(SMESH._objref_SMESH_Mesh)
+                    self.SetMesh( mymesh )
+                else:
+                    self.SetMesh( self.smeshpyD.CreateMesh(self.geom) )
 
             elif isinstance(obj, SMESH._objref_SMESH_Mesh):
                 self.SetMesh(obj)
@@ -1651,9 +1684,19 @@ class Mesh(metaclass = MeshMeta):
             #self.mesh.Register()
             self.geom = self.mesh.GetShapeToMesh()
             if self.geom:
-                self.geompyD = self.geom.GetGen()
+                self.geompyD = None
+                try:
+                    if salome.sg.hasDesktop():
+                        so = salome.ObjectToSObject( self.geom )
+                        comp = so.GetFatherComponent()
+                        if comp.ComponentDataType() == "SHAPERSTUDY":
+                            import shaperBuilder
+                            self.geompyD = shaperBuilder.New()
+                except:
+                    pass
+                if not self.geompyD:
+                    self.geompyD = self.geom.GetGen()
                 pass
-        pass
 
     def GetMesh(self):
         """
@@ -1844,7 +1887,6 @@ class Mesh(metaclass = MeshMeta):
                 geom = self.geom
         return self.smeshpyD.Evaluate(self.mesh, geom)
 
-
     def Compute(self, geom=0, discardModifs=False, refresh=False):
         """
         Compute the mesh and return the status of the computation
@@ -1952,12 +1994,20 @@ class Mesh(metaclass = MeshMeta):
                 print(msg)
                 print(allReasons)
             pass
-        if salome.sg.hasDesktop():
-            if not isinstance( refresh, list): # not a call from subMesh.Compute()
-                if refresh: salome.sg.updateObjBrowser()
+        if salome.sg:
+            if salome.sg.hasDesktop():
+                if not isinstance( refresh, list): # not a call from subMesh.Compute()
+                    if refresh: salome.sg.updateObjBrowser()
 
         return ok
 
+    def CheckCompute(self):
+        """
+        Check if the mesh was properly compute
+        """
+        if not self.mesh.IsComputedOK():
+            raise Exception("Could not compute {}".format(self.GetName()))
+
     def GetComputeErrors(self, shape=0 ):
         """
         Return a list of error messages (:class:`SMESH.ComputeError`) of the last :meth:`Compute`
@@ -2082,12 +2132,12 @@ class Mesh(metaclass = MeshMeta):
     def SetMeshOrder(self, submeshes):
         """
         Set priority of sub-meshes. It works in two ways:
-        
+
         * For sub-meshes with assigned algorithms of same dimension generating mesh of
           *several dimensions*, it sets the order in which the sub-meshes are computed.
         * For the rest sub-meshes, it sets the order in which the sub-meshes are checked
-          when looking for meshing parameters to apply to a sub-shape. To impose the 
-          order in which sub-meshes with uni-dimensional algorithms are computed, 
+          when looking for meshing parameters to apply to a sub-shape. To impose the
+          order in which sub-meshes with uni-dimensional algorithms are computed,
           call **submesh.Compute()** in a desired order.
 
         Parameters:
@@ -2126,7 +2176,7 @@ class Mesh(metaclass = MeshMeta):
 
     def AutomaticTetrahedralization(self, fineness=0):
         """
-        Compute a tetrahedral mesh using AutomaticLength + MEFISTO + Tetrahedron
+        Compute a tetrahedral mesh using AutomaticLength + Triangle + Tetrahedron
 
         Parameters:
                 fineness: [0.0,1.0] defines mesh fineness
@@ -2288,6 +2338,78 @@ class Mesh(metaclass = MeshMeta):
             self.mesh.RemoveHypothesis( self.geom, hyp )
             pass
         pass
+
+    def ExportMEDCoupling(self, *args, **kwargs):
+        """
+        Export the mesh in a memory representation.
+
+        Parameters:
+            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 (:class:`sub-mesh, group or filter <SMESH.SMESH_IDSource>`)
+                    to export instead of the mesh
+            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.
+            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.
+
+            zTolerance (float): tolerance in Z direction. If Z coordinate of a node is
+                            close to zero within a given tolerance, the coordinate is set to zero.
+                            If *ZTolerance* is negative (default), the node coordinates are kept as is.
+            saveNumbers(boolean) : enable saving numbers of nodes and cells.
+            """
+        auto_groups     = args[0] if len(args) > 0 else False
+        meshPart        = args[1] if len(args) > 1 else None
+        autoDimension   = args[2] if len(args) > 2 else True
+        fields          = args[3] if len(args) > 3 else []
+        geomAssocFields = args[4] if len(args) > 4 else ''
+        z_tolerance     = args[5] if len(args) > 5 else -1.
+        saveNumbers     = args[6] if len(args) > 6 else True
+        # process keywords arguments
+        auto_groups     = kwargs.get("auto_groups", auto_groups)
+        meshPart        = kwargs.get("meshPart", meshPart)
+        autoDimension   = kwargs.get("autoDimension", autoDimension)
+        fields          = kwargs.get("fields", fields)
+        geomAssocFields = kwargs.get("geomAssocFields", geomAssocFields)
+        z_tolerance     = kwargs.get("zTolerance", z_tolerance)
+        saveNumbers     = kwargs.get("saveNumbers", saveNumbers)
+
+        # invoke engine's function
+        if meshPart or fields or geomAssocFields or z_tolerance > 0 or not saveNumbers:
+            unRegister = genObjUnRegister()
+            if isinstance( meshPart, list ):
+                meshPart = self.GetIDSource( meshPart, SMESH.ALL )
+                unRegister.set( meshPart )
+
+            z_tolerance,Parameters,hasVars = ParseParameters(z_tolerance)
+            self.mesh.SetParameters(Parameters)
+
+            intPtr = self.mesh.ExportPartToMEDCoupling(meshPart, auto_groups, autoDimension,
+                                                       fields, geomAssocFields, z_tolerance,
+                                                       saveNumbers )
+            import medcoupling
+            dab = medcoupling.FromPyIntPtrToDataArrayByte(intPtr)
+            return medcoupling.MEDFileData.New(dab)
+        else:
+            intPtr = self.mesh.ExportMEDCoupling(auto_groups, autoDimension)
+            import medcoupling
+            dab = medcoupling.FromPyIntPtrToDataArrayByte(intPtr)
+            return medcoupling.MEDFileMesh.New(dab)
+
     def ExportMED(self, *args, **kwargs):
         """
         Export the mesh in a file in MED format
@@ -2300,13 +2422,14 @@ class Mesh(metaclass = MeshMeta):
                         the typical use is auto_groups=False.
                 version (int): define the version (xy, where version is x.y.z) of MED file format.
                         For instance med 3.2.1 is coded 3*10+2 = 32, med 4.0.0 is coded 4*10+0 = 40.
-                        The rules of compatibility to write a mesh in an older version than 
-                        the current version depend on the current version. For instance, 
+                        The rules of compatibility to write a mesh in an older version than
+                        the current version depend on the current version. For instance,
                         with med 4.0 it is possible to write/append med files in 4.0.0 (default)
                         or 3.2.1 or 3.3.1 formats.
                         If the version is equal to -1, the version is not changed (default).
                 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
+                meshPart: a part of mesh (:class:`sub-mesh, group or filter <SMESH.SMESH_IDSource>`)
+                        to export instead of the mesh
                 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
@@ -2315,8 +2438,8 @@ class Mesh(metaclass = MeshMeta):
 
                         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 
+                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;
@@ -2324,9 +2447,10 @@ class Mesh(metaclass = MeshMeta):
                         - 'f' stands for "_faces_" field;
                         - 's' stands for "_solids_" field.
 
-                zTolerance (float): tolerance in Z direction. If Z coordinate of a node is 
+                zTolerance (float): tolerance in Z direction. If Z coordinate of a node is
                              close to zero within a given tolerance, the coordinate is set to zero.
                              If *ZTolerance* is negative (default), the node coordinates are kept as is.
+                saveNumbers (boolean) : enable saving numbers of nodes and cells.
         """
         # process positional arguments
         #args = [i for i in args if i not in [SMESH.MED_V2_1, SMESH.MED_V2_2]] # backward compatibility
@@ -2339,6 +2463,7 @@ class Mesh(metaclass = MeshMeta):
         fields          = args[6] if len(args) > 6 else []
         geomAssocFields = args[7] if len(args) > 7 else ''
         z_tolerance     = args[8] if len(args) > 8 else -1.
+        saveNumbers     = args[9] if len(args) > 9 else True
         # process keywords arguments
         auto_groups     = kwargs.get("auto_groups", auto_groups)
         version         = kwargs.get("version", version)
@@ -2349,9 +2474,13 @@ class Mesh(metaclass = MeshMeta):
         fields          = kwargs.get("fields", fields)
         geomAssocFields = kwargs.get("geomAssocFields", geomAssocFields)
         z_tolerance     = kwargs.get("zTolerance", z_tolerance)
+        saveNumbers     = kwargs.get("saveNumbers", saveNumbers)
+
+        if isinstance( meshPart, Mesh):
+            meshPart = meshPart.GetMesh()
 
         # invoke engine's function
-        if meshPart or fields or geomAssocFields or z_tolerance > 0:
+        if meshPart or fields or geomAssocFields or z_tolerance > 0 or not saveNumbers:
             unRegister = genObjUnRegister()
             if isinstance( meshPart, list ):
                 meshPart = self.GetIDSource( meshPart, SMESH.ALL )
@@ -2362,59 +2491,47 @@ class Mesh(metaclass = MeshMeta):
 
             self.mesh.ExportPartToMED( meshPart, fileName, auto_groups,
                                        version, overwrite, autoDimension,
-                                       fields, geomAssocFields, z_tolerance)
+                                       fields, geomAssocFields, z_tolerance, saveNumbers )
         else:
             self.mesh.ExportMED(fileName, auto_groups, version, overwrite, autoDimension)
 
-    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)
-
-    def ExportDAT(self, f, meshPart=None):
+    def ExportDAT(self, f, meshPart=None, renumber=True):
         """
         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
+                renumber(boolean): enable renumbering nodes and cells in order to eliminate holes in numbering
         """
 
-        if meshPart:
+        if meshPart or not renumber:
             unRegister = genObjUnRegister()
             if isinstance( meshPart, list ):
                 meshPart = self.GetIDSource( meshPart, SMESH.ALL )
                 unRegister.set( meshPart )
-            self.mesh.ExportPartToDAT( meshPart, f )
+            self.mesh.ExportPartToDAT( meshPart, f, renumber )
         else:
-            self.mesh.ExportDAT(f)
+            self.mesh.ExportDAT( f, renumber )
 
-    def ExportUNV(self, f, meshPart=None):
+    def ExportUNV(self, f, meshPart=None, renumber=True):
         """
         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
+                renumber(boolean): enable renumbering nodes and cells in order to eliminate holes in numbering
         """
 
-        if meshPart:
+        if meshPart or not renumber:
             unRegister = genObjUnRegister()
             if isinstance( meshPart, list ):
                 meshPart = self.GetIDSource( meshPart, SMESH.ALL )
                 unRegister.set( meshPart )
-            self.mesh.ExportPartToUNV( meshPart, f )
+            self.mesh.ExportPartToUNV( meshPart, f, renumber )
         else:
-            self.mesh.ExportUNV(f)
+            self.mesh.ExportUNV( f, renumber )
 
     def ExportSTL(self, f, ascii=1, meshPart=None):
         """
@@ -2498,7 +2615,7 @@ class Mesh(metaclass = MeshMeta):
 
                         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
@@ -2575,7 +2692,7 @@ class Mesh(metaclass = MeshMeta):
         Create an empty standalone mesh group
 
         Parameters:
-                elementType: the :class:`type <SMESH.ElementType>` of elements in the group; 
+                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
 
@@ -2815,7 +2932,7 @@ class Mesh(metaclass = MeshMeta):
 
     def GetGroups(self, elemType = SMESH.ALL):
         """
-        Get the list of groups existing in the mesh in the order of creation 
+        Get the list of groups existing in the mesh in the order of creation
         (starting from the oldest one)
 
         Parameters:
@@ -3526,7 +3643,7 @@ class Mesh(metaclass = MeshMeta):
         Return the type of mesh element or node
 
         Returns:
-            the value from :class:`SMESH.ElementType` enumeration. 
+            the value from :class:`SMESH.ElementType` enumeration.
             Return SMESH.ALL if element or node with the given ID does not exist
         """
 
@@ -3820,7 +3937,7 @@ class Mesh(metaclass = MeshMeta):
         Returns:
             a list of three double values
 
-        See also: 
+        See also:
                 :meth:`smeshBuilder.GetGravityCenter`
         """
 
@@ -3938,7 +4055,7 @@ class Mesh(metaclass = MeshMeta):
         Returns:
             tuple of six values (minX, minY, minZ, maxX, maxY, maxZ)
 
-        See Also: 
+        See Also:
             :meth:`GetBoundingBox()`
         """
 
@@ -3961,7 +4078,7 @@ class Mesh(metaclass = MeshMeta):
         Returns:
             :class:`SMESH.Measure` structure
 
-        See Also: 
+        See Also:
             :meth:`BoundingBox()`
         """
 
@@ -4032,6 +4149,16 @@ class Mesh(metaclass = MeshMeta):
 
         return self.editor.RemoveNodes(IDsOfNodes)
 
+    def RemoveNodeWithReconnection(self, nodeID ):
+        """
+        Remove a node along with changing surrounding faces to cover a hole.
+
+        Parameters:
+                nodeID: ID of node to remove
+        """
+
+        return self.editor.RemoveNodeWithReconnection( nodeID )
+
     def RemoveOrphanNodes(self):
         """
         Remove all orphan (free) nodes from mesh
@@ -4087,7 +4214,7 @@ class Mesh(metaclass = MeshMeta):
         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 
+            can be retrieved from the returned object by
             calling :meth:`GetIDs() <SMESH.SMESH_IDSource.GetIDs>`
         """
 
@@ -4461,7 +4588,7 @@ class Mesh(metaclass = MeshMeta):
             edges = self.GetIDSource( edges, SMESH.EDGE )
             unRegister.set( edges )
         return self.editor.Get1DBranches( edges, startNode )
-    
+
     def FindSharpEdges( self, angle, addExisting=False ):
         """
         Return sharp edges of faces and non-manifold ones.
@@ -4525,6 +4652,30 @@ class Mesh(metaclass = MeshMeta):
 
         return self.editor.DeleteDiag(NodeID1, NodeID2)
 
+    def AddNodeOnSegment(self, Node1, Node2, position = 0.5):
+        """
+        Replace each triangle bound by Node1-Node2 segment with
+        two triangles by connecting a node made on the link with a node
+        opposite to the link.
+
+        Parameters:
+                Node1: ID of the first node
+                Node2: ID of the second node
+                position: location [0,1] of the new node on the segment
+        """
+        return self.editor.AddNodeOnSegment(Node1, Node2, position)
+
+    def AddNodeOnFace(self, face, x, y, z):
+        """
+        Split a face into triangles by adding a new node onto the face
+        and connecting the new node with face nodes
+
+        Parameters:
+                face: ID of the face
+                x,y,z: coordinates of the new node
+        """
+        return self.editor.AddNodeOnFace(face, x, y, z)
+
     def Reorient(self, IDsOfElements=None):
         """
         Reorient elements by ids
@@ -4598,6 +4749,29 @@ class Mesh(metaclass = MeshMeta):
             theFace = -1
         return self.editor.Reorient2D( the2DObject, theDirection, theFace, thePoint )
 
+    def Reorient2DByNeighbours(self, objectFaces, referenceFaces=[]):
+        """
+        Reorient faces contained in a list of *objectFaces*
+        equally to faces contained in a list of *referenceFaces*.
+
+        Parameters:
+                 objectFaces: list of :class:`mesh, sub-mesh, group, filter <SMESH.SMESH_IDSource>` holding faces to reorient.
+                 referenceFaces: list of :class:`sub-mesh, group, filter <SMESH.SMESH_IDSource>` holding reference faces. It can be empty, then any face in *objectFaces* is used as the reference.
+
+        Returns:
+                 number of reoriented faces.
+        """
+        if not isinstance( objectFaces, list ):
+            objectFaces = [ objectFaces ]
+        for i,obj2D in enumerate( objectFaces ):
+            if isinstance( obj2D, Mesh ):
+                objectFaces[i] = obj2D.GetMesh()
+        if not isinstance( referenceFaces, list ):
+            referenceFaces = [ referenceFaces ]
+
+        return self.editor.Reorient2DByNeighbours( objectFaces, referenceFaces )
+
+
     def Reorient2DBy3D(self, the2DObject, the3DObject, theOutsideNormal=True ):
         """
         Reorient faces according to adjacent volumes.
@@ -4751,7 +4925,7 @@ class Mesh(metaclass = MeshMeta):
         a quadrangle.
 
         Parameters:
-                theElements: the faces to be splitted. This can be either 
+                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
 
@@ -4820,8 +4994,8 @@ class Mesh(metaclass = MeshMeta):
                         to numerical functors.
 
         Returns:
-            * 1 if 1-3 diagonal is better, 
-            * 2 if 2-4 diagonal is better, 
+            * 1 if 1-3 diagonal is better,
+            * 2 if 2-4 diagonal is better,
             * 0 if error occurs.
 
         Note:
@@ -4973,7 +5147,7 @@ class Mesh(metaclass = MeshMeta):
         This operation uses :doc:`pattern_mapping` functionality for splitting.
 
         Parameters:
-                theObject: the object from which the list of hexahedrons is taken; 
+                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
@@ -5302,6 +5476,32 @@ class Mesh(metaclass = MeshMeta):
         if mesh: mesh = self.smeshpyD.Mesh(mesh)
         return mesh, group
 
+    def MakeBoundaryOfEachElement(self, groupName="", meshName="", toCopyAll=False, groups=[] ):
+        """
+        Create boundary elements around the whole mesh or groups of elements
+
+        Parameters:
+                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, group )
+                       - 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
+        """
+        dimension=SMESH.BND_2DFROM3D
+        toCreateAllElements = True # create all boundary elements in the mesh
+        nb, mesh, group = self.editor.MakeBoundaryElements( dimension,groupName,meshName,
+                                                           toCopyAll,toCreateAllElements,groups)
+        if mesh: mesh = self.smeshpyD.Mesh(mesh)
+        return nb, mesh, group
+
     def MakeBoundaryElements(self, dimension=SMESH.BND_2DFROM3D, groupName="", meshName="",
                              toCopyAll=False, groups=[]):
         """
@@ -5325,9 +5525,9 @@ class Mesh(metaclass = MeshMeta):
                        - mesh - the :class:`Mesh` where elements were added to
                        - group - the :class:`group <SMESH.SMESH_Group>` of boundary elements or None
         """
-
+        toCreateAllElements = False # create only elements in the boundary of the solid
         nb, mesh, group = self.editor.MakeBoundaryElements(dimension,groupName,meshName,
-                                                           toCopyAll,groups)
+                                                           toCopyAll,toCreateAllElements,groups)
         if mesh: mesh = self.smeshpyD.Mesh(mesh)
         return nb, mesh, group
 
@@ -5465,7 +5665,7 @@ class Mesh(metaclass = MeshMeta):
                 of all steps, else - size of each step
 
         Returns:
-            the list of created :class:`groups <SMESH.SMESH_GroupBase>` if *MakeGroups* == True, 
+            the list of created :class:`groups <SMESH.SMESH_GroupBase>` if *MakeGroups* == True,
             empty list otherwise
         """
 
@@ -5521,7 +5721,7 @@ class Mesh(metaclass = MeshMeta):
                         - a list of tree components of the point or
                         - a node ID or
                         - a GEOM point
-            angles: list of angles in radians. Nodes at each extrusion step are rotated 
+            angles: list of angles in radians. Nodes at each extrusion step are rotated
                 around *basePoint*, additionally to previous steps.
             anglesVariation: forces the computation of rotation angles as linear
                 variation of the given *angles* along path steps
@@ -5739,13 +5939,13 @@ class Mesh(metaclass = MeshMeta):
             PathShape: optional shape (edge or wire) which defines the sub-mesh of the mesh defined by *PathObject* if the mesh 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: not used obsolete
-            Angles: list of angles in radians. Nodes at each extrusion step are rotated 
+            Angles: list of angles in radians. Nodes at each extrusion step are rotated
                 around *basePoint*, additionally to previous steps.
             LinearVariation: forces the computation of rotation angles as linear
                 variation of the given Angles along path steps
             HasRefPoint: allows using the reference point
             RefPoint: optional scaling and rotation center (mass center of the extruded
-                elements by default). The User can specify any point as the Reference Point. 
+                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
             ScaleFactors: optional scale factors to apply during extrusion
@@ -5753,7 +5953,7 @@ class Mesh(metaclass = MeshMeta):
                 else *scaleFactors* [i] is applied to nodes at the i-th extrusion step
 
         Returns:
-            list of created :class:`groups <SMESH.SMESH_GroupBase>` and 
+            list of created :class:`groups <SMESH.SMESH_GroupBase>` and
             :class:`error code <SMESH.SMESH_MeshEditor.Extrusion_Error>`
         Example: :ref:`tui_extrusion_along_path`
         """
@@ -5773,7 +5973,7 @@ class Mesh(metaclass = MeshMeta):
         Angles,AnglesParameters,hasVars = ParseAngles(Angles)
         ScaleFactors,ScalesParameters,hasVars = ParseParameters(ScaleFactors)
         Parameters = AnglesParameters + var_separator + \
-                     RefPoint.parameters + var_separator + ScalesParameters 
+                     RefPoint.parameters + var_separator + ScalesParameters
         self.mesh.SetParameters(Parameters)
         return self.editor.ExtrusionAlongPathObjects(Nodes, Edges, Faces,
                                                      PathObject, PathShape, NodeStart,
@@ -5794,7 +5994,7 @@ class Mesh(metaclass = MeshMeta):
             Path: 1D mesh or 1D sub-mesh, along which proceeds the extrusion
             NodeStart: the start node from Path. Defines the direction of extrusion
             HasAngles: not used obsolete
-            Angles: list of angles in radians. Nodes at each extrusion step are rotated 
+            Angles: list of angles in radians. Nodes at each extrusion step are rotated
                 around *basePoint*, additionally to previous steps.
             LinearVariation: forces the computation of rotation angles as linear
                 variation of the given Angles along path steps
@@ -5837,7 +6037,7 @@ class Mesh(metaclass = MeshMeta):
             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: not used obsolete
-            Angles: list of angles in radians. Nodes at each extrusion step are rotated 
+            Angles: list of angles in radians. Nodes at each extrusion step are rotated
                 around *basePoint*, additionally to previous 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).
@@ -5878,7 +6078,7 @@ class Mesh(metaclass = MeshMeta):
             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: not used obsolete
-            Angles: list of angles in radians. Nodes at each extrusion step are rotated 
+            Angles: list of angles in radians. Nodes at each extrusion step are rotated
                 around *basePoint*, additionally to previous 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).
@@ -5889,7 +6089,7 @@ class Mesh(metaclass = MeshMeta):
                 variation of the given Angles along path steps
 
         Returns:
-            list of created :class:`groups <SMESH.SMESH_GroupBase>` and 
+            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`
@@ -5916,7 +6116,7 @@ class Mesh(metaclass = MeshMeta):
             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: not used obsolete
-            Angles: list of angles in radians. Nodes at each extrusion step are rotated 
+            Angles: list of angles in radians. Nodes at each extrusion step are rotated
                 around *basePoint*, additionally to previous 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).
@@ -5927,7 +6127,7 @@ class Mesh(metaclass = MeshMeta):
                 variation of the given Angles along path steps
 
         Returns:
-            list of created :class:`groups <SMESH.SMESH_GroupBase>` and 
+            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`
@@ -5954,7 +6154,7 @@ class Mesh(metaclass = MeshMeta):
             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: not used obsolete
-            Angles: list of angles in radians. Nodes at each extrusion step are rotated 
+            Angles: list of angles in radians. Nodes at each extrusion step are rotated
                 around *basePoint*, additionally to previous 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).
@@ -5965,7 +6165,7 @@ class Mesh(metaclass = MeshMeta):
                 variation of the given Angles along path steps
 
         Returns:
-            list of created :class:`groups <SMESH.SMESH_GroupBase>` and 
+            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`
@@ -6375,7 +6575,7 @@ class Mesh(metaclass = MeshMeta):
             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, 
+            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
 
@@ -6756,7 +6956,7 @@ class Mesh(metaclass = MeshMeta):
 
         Parameters:
             theElements: container of elements to duplicate. It can be a
-                :class:`mesh, sub-mesh, group, filter <SMESH.SMESH_IDSource>` 
+                :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.
@@ -6766,7 +6966,7 @@ class Mesh(metaclass = MeshMeta):
                 in any group.
 
         Returns:
-                a :class:`group <SMESH.SMESH_Group>` where the new elements are added. 
+                a :class:`group <SMESH.SMESH_Group>` where the new elements are added.
                 None if *theGroupName* == "".
         """
 
@@ -7035,7 +7235,7 @@ class Mesh(metaclass = MeshMeta):
         return self.editor.CreateHoleSkin( radius, theShape, groupName, theNodesCoords )
 
     def MakePolyLine(self, segments, groupName='', isPreview=False ):
-        """    
+        """
         Create a polyline consisting of 1D mesh elements each lying on a 2D element of
         the initial triangle 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.
@@ -7053,7 +7253,7 @@ class Mesh(metaclass = MeshMeta):
             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()
@@ -7208,10 +7408,10 @@ class Mesh(metaclass = MeshMeta):
         """
         Computes a radian measure of an angle defined by 3 nodes: <(node1,node2,node3)
 
-        Parameters:            
+        Parameters:
                 node1,node2,node3: IDs of the three nodes
 
-        Returns:        
+        Returns:
             Angle in radians [0,PI]. -1 if failure case.
         """
         p1 = self.GetNodeXYZ( node1 )
@@ -7269,6 +7469,19 @@ class Mesh(metaclass = MeshMeta):
 
         return self.FunctorValue(SMESH.FT_Warping, elemId)
 
+    def GetWarping3D(self, elemId):
+        """
+        Get warping angle of faces element of 3D elements.
+
+        Parameters:
+            elemId: mesh element ID
+
+        Returns:
+            element's warping angle value
+        """
+
+        return self.FunctorValue(SMESH.FT_Warping3D, elemId)
+
     def GetMinimumAngle(self, elemId):
         """
         Get minimum angle of 2D element.
@@ -7308,6 +7521,19 @@ class Mesh(metaclass = MeshMeta):
 
         return self.FunctorValue(SMESH.FT_Skew, elemId)
 
+    def GetScaledJacobian(self, elemId):
+        """
+        Get the scaled jacobian of 3D element id
+
+        Parameters:
+            elemId: mesh element ID
+
+        Returns:
+            the scaled jacobian
+        """
+
+        return self.FunctorValue(SMESH.FT_ScaledJacobian, elemId)
+
     def GetMinMax(self, funType, meshPart=None):
         """
         Return minimal and maximal value of a given functor.
@@ -7342,6 +7568,447 @@ class Mesh(metaclass = MeshMeta):
 
     pass # end of Mesh class
 
+def _copy_gmsh_param(dim, local_param, global_param):
+    if dim==3:
+        local_param.SetMaxSize(global_param.GetMaxSize())
+        local_param.SetMinSize(global_param.GetMinSize())
+        local_param.Set3DAlgo(global_param.Get3DAlgo())
+        local_param.SetRecombineAll(global_param.GetRecombineAll())
+        local_param.SetSubdivAlgo(global_param.GetSubdivAlgo())
+        local_param.SetRemeshAlgo(global_param.GetRemeshAlgo())
+        local_param.SetRemeshPara(global_param.GetRemeshPara())
+        local_param.SetSmouthSteps(global_param.GetSmouthSteps())
+        local_param.SetSizeFactor(global_param.GetSizeFactor())
+        local_param.SetUseIncomplElem(global_param.GetUseIncomplElem())
+        local_param.SetMeshCurvatureSize(global_param.GetMeshCurvatureSize())
+        local_param.SetSecondOrder(global_param.GetSecondOrder())
+        local_param.SetIs2d(global_param.GetIs2d())
+    elif dim==2:
+        local_param.SetMaxSize(global_param.GetMaxSize())
+        local_param.SetMinSize(global_param.GetMinSize())
+        local_param.Set2DAlgo(global_param.Get2DAlgo())
+        local_param.SetRecomb2DAlgo(global_param.GetRecomb2DAlgo())
+        local_param.SetRecombineAll(global_param.GetRecombineAll())
+        local_param.SetSubdivAlgo(global_param.GetSubdivAlgo())
+        local_param.SetRemeshAlgo(global_param.GetRemeshAlgo())
+        local_param.SetRemeshPara(global_param.GetRemeshPara())
+        local_param.SetSmouthSteps(global_param.GetSmouthSteps())
+        local_param.SetSizeFactor(global_param.GetSizeFactor())
+        local_param.SetUseIncomplElem(global_param.GetUseIncomplElem())
+        local_param.SetMeshCurvatureSize(global_param.GetMeshCurvatureSize())
+        local_param.SetSecondOrder(global_param.GetSecondOrder())
+        local_param.SetIs2d(global_param.GetIs2d())
+
+def _copy_netgen_param(dim, local_param, global_param):
+    """
+    Create 1D/2D/3D netgen parameters from a NETGEN 1D2D3D parameter
+    """
+    if dim==1:
+        #TODO: More global conversion ? or let user define it
+        local_param.NumberOfSegments(int(global_param.GetMaxSize()))
+    elif dim==2:
+        local_param.SetMaxSize(global_param.GetMaxSize())
+        local_param.SetMinSize(global_param.GetMinSize())
+        local_param.SetOptimize(global_param.GetOptimize())
+        local_param.SetFineness(global_param.GetFineness())
+        local_param.SetNbSegPerEdge(global_param.GetNbSegPerEdge())
+        local_param.SetNbSegPerRadius(global_param.GetNbSegPerRadius())
+        #TODO: Why the 0.9 to have same results
+        local_param.SetGrowthRate(global_param.GetGrowthRate()*0.9)
+        local_param.SetChordalError(global_param.GetChordalError())
+        local_param.SetChordalErrorEnabled(global_param.GetChordalErrorEnabled())
+        local_param.SetUseSurfaceCurvature(global_param.GetUseSurfaceCurvature())
+        local_param.SetUseDelauney(global_param.GetUseDelauney())
+        local_param.SetQuadAllowed(global_param.GetQuadAllowed())
+        local_param.SetWorstElemMeasure(global_param.GetWorstElemMeasure())
+        local_param.SetCheckChartBoundary(global_param.GetCheckChartBoundary())
+        local_param.SetNbThreads(global_param.GetNbThreads())
+    else:
+        local_param.SetMaxSize(global_param.GetMaxSize())
+        local_param.SetMinSize(global_param.GetMinSize())
+        local_param.SetOptimize(global_param.GetOptimize())
+        local_param.SetCheckOverlapping(global_param.GetCheckOverlapping())
+        local_param.SetCheckChartBoundary(global_param.GetCheckChartBoundary())
+        local_param.SetFineness(global_param.GetFineness())
+        local_param.SetNbSegPerEdge(global_param.GetNbSegPerEdge())
+        local_param.SetNbSegPerRadius(global_param.GetNbSegPerRadius())
+        local_param.SetGrowthRate(global_param.GetGrowthRate())
+        local_param.SetNbThreads(global_param.GetNbThreads())
+
+
+def _shaperstudy2geom(geompyD, shaper_obj):
+    """
+    Convertion of shaper object to geom object
+
+    Parameters:
+        geompyD: geomBuilder instance
+        shaper_obj: Shaper study object
+
+    Returns:
+        geom object
+
+    """
+    import tempfile
+    #Writing shaperstudy object into a brep file
+    fid, tmp_file = tempfile.mkstemp(suffix='.brep')
+    with open(fid, 'wb') as f:
+        f.write(shaper_obj.GetShapeStream())
+    # Reimporting brep file into geom
+    real_geom = geompyD.ImportBREP(tmp_file)
+    os.remove(tmp_file)
+
+    return real_geom
+
+
+def _split_geom(geompyD, geom):
+    """
+    Splitting geometry into n solids and a 2D/1D compound
+
+    Parameters:
+        geompyD: geomBuilder instance
+        geom: geometrical object for meshing
+
+    Returns:
+        compound containing all the 1D,2D elements
+        list of solids
+    """
+
+    # Splitting geometry into 3D elements and all the 2D/1D into one compound
+    object_solids = geompyD.ExtractShapes(geom, geompyD.ShapeType["SOLID"],
+                                          True)
+
+    solids = []
+    isolid = 0
+    for solid in object_solids:
+        isolid += 1
+        geompyD.addToStudyInFather( geom, solid, 'Solid_{}'.format(isolid) )
+        solids.append(solid)
+    # If geom is a solid ExtractShapes will return nothin in that case geom is the solids
+    if isolid == 0:
+       solids = [geom]
+
+    faces = []
+    iface = 0
+    solid_faces = geompyD.ExtractShapes(geom, geompyD.ShapeType["FACE"],
+                                        True)
+    for face in solid_faces:
+        faces.append(face)
+        iface += 1
+        geompyD.addToStudyInFather(geom, face,
+                                   'Face_{}'.format(iface))
+
+    return faces, solids
+
+
+MULTITHREAD, MULTINODE = range(2)
+class ParallelismSettings:
+    """
+    Defines the parameters for the parallelism of ParallelMesh
+    """
+    def __init__(self, mesh):
+        """
+        Construsctor
+
+        Parameters:
+        mesh: Instance of ParallelMesh
+        """
+        if not(isinstance(mesh, ParallelMesh)):
+            raise ValueError("mesh should be a ParallelMesh")
+
+        self._mesh = mesh
+
+
+class MTParallelismSettings(ParallelismSettings):
+    """
+    Defines the parameters for the parallelism of ParallelMesh using MultiThreading
+    """
+    def __init__(self, mesh):
+        ParallelismSettings.__init__(self, mesh)
+
+    # Multithreading methods
+    def SetNbThreads(self, nbThreads):
+        """ Set the number of threads for multithread """
+        if nbThreads < 1:
+            raise ValueError("Number of threads must be stricly greater than 1")
+
+        self._mesh.mesh.SetNbThreads(nbThreads)
+
+    def GetNbThreads(self):
+        """ Get Number of threads """
+        return self._mesh.mesh.GetNbThreads()
+
+    def __str__(self):
+        """ str conversion """
+        string = "\nParameter for MultiThreading parallelism:\n"
+        string += "NbThreads: {}\n".format(self.GetNbThreads())
+
+        return string
+
+
+class MNParallelismSettings(ParallelismSettings):
+    """
+    Defines the parameters for the parallelism of ParallelMesh using MultiNodal
+    """
+    def __init__(self, mesh):
+        ParallelismSettings.__init__(self, mesh)
+
+    def GetResource(self):
+        """ Get the resource on which to run """
+        return self._mesh.mesh.GetResource()
+
+    def SetResource(self, resource):
+        """ Set the resource on which to run """
+        self._mesh.mesh.SetResource(resource)
+
+    def SetNbProc(self, nbProc):
+        """ Set the number of Processor for multinode """
+        if nbProc < 1:
+            raise ValueError("Number of Proc must be stricly greater than 1")
+        self._mesh.mesh.SetNbProc(nbProc)
+
+    def GetNbProc(self):
+        """ Get Number of Processor """
+        return self._mesh.mesh.GetNbProc()
+
+    def SetNbProcPerNode(self, nbProcPerNode):
+        """ Set the number of Processor Per Node for multinode """
+        if nbProcPerNode < 1:
+            raise ValueError("Number of Processor Per Node must be stricly greater than 1")
+
+        self._mesh.mesh.SetNbProcPerNode(nbProcPerNode)
+
+    def GetNbProcPerNode(self):
+        """ Get Number of Processor Per Node """
+        return self._mesh.mesh.GetNbProcPerNode()
+
+    def SetNbNode(self, nbNode):
+        """ Set the number of Node for multinode """
+        if nbNode < 1:
+            raise ValueError("Number of Node must be stricly greater than 1")
+        self._mesh.mesh.SetNbNode(nbNode)
+
+    def GetNbNode(self):
+        """ Get Number of Node """
+        return self._mesh.mesh.GetNbNode()
+
+    def SetWcKey(self, wcKey):
+        """ Set the number of Node for multinode """
+        self._mesh.mesh.SetWcKey(wcKey)
+
+    def GetWcKey(self):
+        """ Get Number of Node """
+        return self._mesh.mesh.GetWcKey()
+
+    def SetWalltime(self, walltime):
+        """ Set the number of Node for multinode """
+        self._mesh.mesh.SetWalltime(walltime)
+
+    def GetWalltime(self):
+        """ Get Number of Node """
+        return self._mesh.mesh.GetWalltime()
+
+    def __str__(self):
+        """ str conversion """
+        string = "\nParameter for MultiNode parallelism:\n"
+        string += "Reource: {}\n".format(self.GetResource())
+        string += "NbProc: {}\n".format(self.GetNbProc())
+        string += "NbProcPerNode: {}\n".format(self.GetNbProcPerNode())
+        string += "NbNode: {}\n".format(self.GetNbNode())
+        string += "WcKey: {}\n".format(self.GetWcKey())
+        string += "Walltime: {}\n".format(self.GetWalltime())
+
+        return string
+
+
+class ParallelMesh(Mesh):
+    """
+    Surcharge on Mesh for parallel computation of a mesh
+    """
+    def __init__(self, smeshpyD, geompyD, geom, split_geom=True, name=0):
+        """
+        Create a parallel mesh.
+
+        Parameters:
+            smeshpyD: instance of smeshBuilder
+            geompyD: instance of geomBuilder
+            geom: geometrical object for meshing
+            split_geom: If true will divide geometry on solids and 1D/2D
+            coumpound and create the associated submeshes
+            name: the name for the new mesh.
+
+        Returns:
+            an instance of class :class:`ParallelMesh`.
+        """
+
+        if not isinstance(geom, geomBuilder.GEOM._objref_GEOM_Object):
+            raise ValueError("geom argument must be a geometry")
+
+        try:
+            import SHAPERSTUDY
+            shaper_object = SHAPERSTUDY.SHAPERSTUDY_ORB._objref_SHAPER_Object
+            has_shaper = True
+        except ImportError:
+            shaper_object = int
+            has_shaper = False
+
+        # If we have a shaper object converting it into geom (temporary solution)
+        if isinstance(geom, shaper_object):
+            self._geom_obj = _shaperstudy2geom(geompyD, geom)
+        elif isinstance(geom, geomBuilder.GEOM._objref_GEOM_Object):
+            self._geom_obj = geom
+        else:
+            msg= ""
+            if not has_shaper:
+                msg = "\nShaper was not compiled"
+            raise Exception("Could not handle geom format {}.{} ".format(type(geom), msg))
+
+        # Splitting geometry into one geom containing 1D and 2D elements and a
+        # list of 3D elements
+        super(ParallelMesh, self).__init__(smeshpyD, geompyD, self._geom_obj, name, parallel=True)
+
+        if split_geom:
+            self._faces, self._solids = _split_geom(geompyD, self._geom_obj)
+
+        self._param = None
+
+    def _build_submeshes(self, mesher2D, mesher3D):
+        """
+        Contruct the submeshes for a parallel use of smesh
+
+        Parameters:
+            mesher2D: name of 2D mesher for 2D parallel compute (NETGEN)
+            mesher3D: name of 3D mesher for 3D parallel compute (NETGEN or
+            GMSH)
+        """
+
+        # Building global 2D mesher
+        if mesher3D:
+            if mesher3D == "NETGEN":
+                algo2D = "NETGEN_2D"
+            elif mesher3D == "GMSH":
+                algo2D = "GMSH_2D"
+            else:
+                raise ValueError("mesher3D should be either NETGEN or GMSH")
+
+            self._algo2d = self.Triangle(geom=self._geom_obj, algo=algo2D)
+
+        # Parallel 2D
+        if mesher2D:
+            #Means that we want to mesh face of solids in parallel and not
+            #the volume
+            self._algo2d = []
+            #For the moment use AutomaticLength based on finesse
+            # TODO: replace by input hypothesis
+            self._algo1d = self.Segment(geom=self._geom_obj)
+
+            for face_id, face in enumerate(self._faces):
+                name = "face_{}".format(face_id)
+                algo2d = self.Triangle(geom=face, algo="NETGEN_2D_Remote")
+                self._algo2d.append(algo2d)
+
+        if mesher3D:
+            self._algo3d = []
+            for solid_id, solid in enumerate(self._solids):
+                name = "Solid_{}".format(solid_id)
+                if ( mesher3D == "NETGEN" ):
+                    algo3d = self.Tetrahedron(geom=solid, algo="NETGEN_3D_Remote")
+                    self._algo3d.append(algo3d)
+                elif ( mesher3D == "GMSH" ):
+                    algo3d = self.Tetrahedron(geom=solid, algo="GMSH_3D_Remote")
+                    self._algo3d.append(algo3d)
+
+    def GetNbSolids(self):
+        """
+        Return the number of 3D solids
+        """
+        return len(self._solids)
+
+    def GetNbFaces(self):
+        """
+        Return the number of 2D faces
+        """
+        return len(self._faces)
+
+    def GetParallelismMethod(self):
+        """ Get the parallelims method """
+        return self.mesh.GetParallelismMethod()
+
+    def SetParallelismMethod(self, method):
+        """ Set the parallelims method """
+        if method not in [MULTITHREAD , MULTINODE]:
+            raise ValueError("Parallelism method can only be 0:MultiThread or 1:MultiNode")
+
+        self.mesh.SetParallelismMethod(method)
+
+        if method == MULTITHREAD:
+            self._param = MTParallelismSettings(self)
+        else:
+            self._param = MNParallelismSettings(self)
+
+    def GetParallelismSettings(self):
+        """
+        Return class to set parameters for the parallelism
+        """
+        if self._param is None:
+            raise Exception("You need to set Parallelism method first (SetParallelismMethod)")
+        return self._param
+
+    def AddGlobalHypothesis(self, hyp):
+        """
+        Split hypothesis to apply it to all the submeshes:
+        - the 1D+2D
+        - each of the 3D solids
+
+        Parameters:
+                hyp: a hypothesis to assign
+
+        """
+        if isinstance(hyp, NETGENPlugin._objref_NETGENPlugin_Hypothesis):
+            copy_param = _copy_netgen_param
+            mesher3D = "NETGEN"
+        elif isinstance(hyp, GMSHPlugin._objref_GMSHPlugin_Hypothesis):
+            copy_param = _copy_gmsh_param
+            mesher3D = "GMSH"
+        else:
+            raise ValueError("param must come from NETGENPlugin or GMSHPlugin")
+
+        self.mesh.SetParallelismDimension(3)
+        self._build_submeshes(None, mesher3D)
+
+        param2d = self._algo2d.Parameters()
+        copy_param(2, param2d, hyp)
+
+        for algo3d in self._algo3d:
+            param3d = algo3d.Parameters()
+            copy_param(3, param3d, hyp)
+
+    def Add2DGlobalHypothesis(self, hyp):
+        """
+        Split hypothesis to apply it to all the submeshes:
+        - the 1D
+        - each of the 2D faces
+
+        Parameters:
+                hyp: a hypothesis to assign
+
+        """
+        if isinstance(hyp, NETGENPlugin._objref_NETGENPlugin_Hypothesis):
+            copy_param = _copy_netgen_param
+            mesher2D = "NETGEN"
+        else:
+            raise ValueError("param must come from NETGENPlugin")
+
+        self.mesh.SetParallelismDimension(2)
+        self._build_submeshes(mesher2D, None)
+
+        param1d = self._algo1d
+        copy_param(1, param1d, hyp)
+
+        for algo2d in self._algo2d:
+            param2d = algo2d.Parameters()
+            copy_param(2, param2d, hyp)
+
+    pass # End of ParallelMesh
 
 class meshProxy(SMESH._objref_SMESH_Mesh):
     """
@@ -7377,10 +8044,28 @@ class meshProxy(SMESH._objref_SMESH_Mesh):
         while len(args2) < 5:  # !!!! nb of parameters for ExportToMED IDL's method
             args2.append(True)
         SMESH._objref_SMESH_Mesh.ExportMED(self, *args2)
-    pass
+    def ExportUNV(self, *args): # renumber arg added
+        if len( args ) == 1:
+            args += True,
+        return SMESH._objref_SMESH_Mesh.ExportUNV(self, *args)
+    def ExportDAT(self, *args): # renumber arg added
+        if len( args ) == 1:
+            args += True,
+        return SMESH._objref_SMESH_Mesh.ExportDAT(self, *args)
+
 omniORB.registerObjref(SMESH._objref_SMESH_Mesh._NP_RepositoryId, meshProxy)
 
 
+class parallelMeshProxy(SMESH._objref_SMESH_ParallelMesh):
+    def __init__(self,*args):
+        SMESH._objref_SMESH_ParallelMesh.__init__(self,*args)
+    def __deepcopy__(self, memo=None):
+        new = self.__class__(self)
+        return new
+omniORB.registerObjref(SMESH._objref_SMESH_ParallelMesh._NP_RepositoryId, parallelMeshProxy)
+
+
+
 class submeshProxy(SMESH._objref_SMESH_subMesh):
 
     """
index e9867dc4e3d9ba6ebe0c079f8fe6e2a1efff931d..934b1235cbdb3813cc495dbe9e1bba226d9d0a57 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -372,7 +372,7 @@ class Mesh_Algorithm:
         """
         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
+        NETGEN 2D, NETGEN 1D-2D, Quadrangle (mapping), MG-CADSurf
 
         Parameters:
                 thickness: total thickness of layers of quadrilaterals
index cd67e724d54e0c5ff16d8615614327884fc891aa..e97581f3672d634a7e04031cf5fc1a8ebd911753 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2015-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2015-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
diff --git a/src/SMESH_SWIG/smesh_tools.py b/src/SMESH_SWIG/smesh_tools.py
new file mode 100644 (file)
index 0000000..b964f55
--- /dev/null
@@ -0,0 +1,254 @@
+#!/usr/bin/env python3
+
+import salome
+import medcoupling as mc
+
+import GEOM
+from salome.geom import geomBuilder
+
+geompy = geomBuilder.New()
+
+import  SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+
+smesh = smeshBuilder.New()
+
+from salome.kernel.logger import Logger
+logger = Logger("salome.smesh.smesh_tools")
+logger.setLevel("WARNING")
+
+# prefix for groups with internal usage
+# i.e. used to transfer the faces and edges sub-shapes ids to the mesh
+__prefix = "____"
+
+def __getIdsGrpDualFromOrig(mc_mesh_file, grp_name, mesh2d, grp_level):
+    """ Identify the polygonal cells ids matching the original group on the
+        original mesh (before dual mesh)
+
+    Args:
+        mc_mesh_file (MEDFileMesh): mesh on which to read the group
+        grp_name (string): name of the group to read
+        mesh2d (MEDCouplingUMesh): mesh at lower level (-1 or -2) containing
+                                   faces or segments cells
+        grp_level (int): level on which to load the group (-1 or -2)
+
+    Returns:
+        id_grp_poly (DataArrayInt64): ids of cells mathcing the group. None if
+                                      the group has not been found.
+        nodes_added (DataArrayInt64): new nodes added on the dual mesh
+    """
+    try:
+        grp_tria = mc_mesh_file.getGroup(grp_level, grp_name)
+    except:
+        logger.debug("""No group found for %s at level %i.
+                     It is normal behaviour for degenerated geom edge."""\
+                     %(grp_name, grp_level))
+        return None, None
+    # Retrieve the nodes in group
+    orig_grp_nodes = grp_tria.computeFetchedNodeIds()
+    # Find all the cells lying on one of the nodes
+    id_grp_poly = mesh2d.getCellIdsLyingOnNodes(orig_grp_nodes, False)
+
+    grp_poly = mesh2d[id_grp_poly]
+    if grp_poly.getNumberOfCells() == 0:
+        logger.debug("""No poly cell found for %s at level %i."""\
+                     %(grp_name, grp_level))
+        return None, None
+
+    # find the extra face cells, on the border of the group (lying on nodes,
+    # but outside the group)
+    id_poly_border = grp_poly.findCellIdsOnBoundary()
+
+    # ids of the cells in grp_poly
+    id_poly = mc.DataArrayInt64.New(grp_poly.getNumberOfCells(), 1)
+    id_poly.iota()
+
+    # cells that are really in the group
+    id_to_keep = id_poly.buildSubstraction(id_poly_border)
+
+    id_grp_poly = id_grp_poly[id_to_keep]
+
+    id_grp_poly.setName(grp_name.strip())
+
+    # get nodes added on this group
+    grp_poly = mesh2d[id_grp_poly]
+    grp_nodes_poly = grp_poly.computeFetchedNodeIds()
+    nodes_added = grp_nodes_poly.buildSubstraction(orig_grp_nodes)
+
+    return id_grp_poly, nodes_added
+
+def __projectNodeOnSubshape(nodes, subshape, coords):
+    """ Project nodes on a sub-shape (face or edge) and update the mesh
+        coordinates
+
+    Args:
+        nodes (DataArrayInt): nodes ids to project
+        subshape (GEOM object): face or edge on which to project the nodes
+        coords (DataArrayDouble): coordinates of the mesh to update. These
+                                  coordinates are modified inside this function.
+    """
+    for i in nodes:
+        x, y, z = coords[i].getValues()
+        vertex = geompy.MakeVertex(x, y, z)
+        try:
+            prj = geompy.MakeProjection(vertex, subshape)
+        except:
+            logger.warning("Projection failed for %.5f %.5f %.5f but we continue with next node"%(x, y, z))
+            continue
+        new_coor = geompy.PointCoordinates(prj)
+        # update its coordinates in the mesh
+        coords[i] = new_coor
+    pass
+
+def __deleteObj(theObj):
+    """ Delete object from a Study
+
+    Args:
+        theObj (GEOM or SMESH object): object to remove from the study
+    """
+    aStudy = salome.myStudy
+    aStudyBuilder = aStudy.NewBuilder()
+    SO = aStudy.FindObjectIOR(aStudy.ConvertObjectToIOR(theObj))
+    if SO is not None:
+        aStudyBuilder.RemoveObjectWithChildren(SO)
+    pass
+
+def smesh_create_dual_mesh(mesh_ior, output_file, adapt_to_shape=True,
+                           mesh_name="MESH"):
+    """ Create a dual of the mesh in input_file into output_file
+
+    Args:
+        mesh_ior (string): corba Id of the Tetrahedron mesh
+        output_file (string): dual mesh file
+        adapt_to_shape (bool): If True will project boundary points on shape
+        mesh_name (string): Name of the dual Mesh
+    """
+    # Import mesh from file
+    mesh = salome.orb.string_to_object(mesh_ior)
+    if not mesh:
+        raise Exception("Could not find mesh using id: ", mesh_ior)
+
+    shape = mesh.GetShapeToMesh()
+
+    if adapt_to_shape:
+        faces = geompy.SubShapeAll(shape, geompy.ShapeType["FACE"])
+        faces_ids = geompy.GetSubShapesIDs(shape, faces)
+
+        # Create group with each face
+        # so that we don't need GetFaceNearPoint to get the face to project the
+        # point to
+        id2face = {}
+        id2face_edges_ids = {}
+        mesh_groups = []
+        for face, face_id in zip(faces, faces_ids):
+            gr_mesh = mesh.CreateGroupFromGEOM(SMESH.FACE,
+                                               '%sface_%i'%(__prefix, face_id),
+                                               face)
+            id2face[face_id] = face
+            mesh_groups.append(gr_mesh)
+            # get the edges bounding this face
+            # so that we can project the nodes on edges before nodes on faces
+            face_edges = geompy.SubShapeAll(face, geompy.ShapeType["EDGE"])
+            face_edges_ids = geompy.GetSubShapesIDs(shape, face_edges)
+            id2face_edges_ids[face_id] = face_edges_ids
+
+        edges = geompy.SubShapeAll(shape, geompy.ShapeType["EDGE"])
+        edges_ids = geompy.GetSubShapesIDs(shape, edges)
+
+        id2edge = {}
+        for edge, edge_id in zip(edges, edges_ids):
+            gr_mesh = mesh.CreateGroupFromGEOM(SMESH.EDGE,
+                                               '%sedge_%i'%(__prefix, edge_id),
+                                               edge)
+            id2edge[edge_id] = edge
+            mesh_groups.append(gr_mesh)
+
+    # We got a meshProxy so we need to convert pointer to MEDCoupling
+    int_ptr = mesh.ExportMEDCoupling(True, True)
+    dab = mc.FromPyIntPtrToDataArrayByte(int_ptr)
+    mc_mesh_file = mc.MEDFileMesh.New(dab)
+    tetras = mc_mesh_file[0]
+    # End of SMESH -> MEDCoupling part for dualmesh
+
+    tetras = mc.MEDCoupling1SGTUMesh(tetras)
+
+    # Create the polyhedra from the tetrahedra (main goal of this function)
+    polyh = tetras.computeDualMesh()
+
+    ## Adding skin + transfering groups on faces from tetras mesh
+    mesh2d = polyh.buildUnstructured().computeSkin()
+    mesh2d.setName(mesh_name)
+
+    polyh_coords = polyh.getCoords()
+
+    treated_edges = []
+
+    mc_groups = []
+    for grp_name in mc_mesh_file.getGroupsOnSpecifiedLev(-1):
+        # This group is created by the export
+        if grp_name == "Group_Of_All_Faces":
+            logger.debug("Skipping group: "+ grp_name)
+            continue
+        logger.debug("Transferring group: "+ grp_name)
+
+        # get the polygons ids on the dual mesh from the triangles group
+        id_grp_poly, nodes_added_on_tri = \
+            __getIdsGrpDualFromOrig(mc_mesh_file, grp_name, mesh2d, -1)
+
+        if id_grp_poly is not None and grp_name[:4] == __prefix and adapt_to_shape:
+            # This group is on a specific geom face
+            face_id = grp_name.split("_")[-1]
+            face_id = int(face_id)
+            face = id2face[face_id]
+
+            # for each face, get the edges bounding it
+            grp_poly = mesh2d[id_grp_poly]
+            mesh1d = grp_poly.computeSkin()
+
+            face_edges_id = id2face_edges_ids[face_id]
+            for edge_id in face_edges_id:
+                grp_seg_name = "%sedge_%i"%(__prefix, edge_id)
+
+                # get the segs on the dual mesh from the segs group
+                id_grp_seg, nodes_added_on_segs = __getIdsGrpDualFromOrig(\
+                                mc_mesh_file, grp_seg_name, mesh1d, -2)
+
+                # project new nodes on its geom edge
+                # (if the group exists on this edge and it has not already been
+                # treated)
+                if id_grp_seg is not None:
+                    if edge_id not in treated_edges:
+                        edge = id2edge[edge_id]
+                        __projectNodeOnSubshape(nodes_added_on_segs,
+                                                edge, polyh_coords)
+                    else:
+                        treated_edges.append(edge_id)
+
+                    # remove these nodes from the nodes to project on face
+                    nodes_added_on_tri = \
+                       nodes_added_on_tri.buildSubstraction(nodes_added_on_segs)
+
+            # project new nodes on its geom face
+            __projectNodeOnSubshape(nodes_added_on_tri, face, polyh_coords)
+        else:
+            # add the group to write it
+            mc_groups.append(id_grp_poly)
+
+    # Creating output file
+    logger.debug("Creating file with mesh: "+mesh_name)
+    myfile = mc.MEDFileUMesh()
+    myfile.setName(mesh_name)
+    polyh.setName(mesh_name)
+    myfile.setMeshAtLevel(0, polyh)
+    myfile.setMeshAtLevel(-1, mesh2d)
+
+    for group in mc_groups:
+        myfile.addGroup(-1, group)
+
+    logger.debug("Writing dual mesh in: "+output_file)
+    myfile.write(output_file, 2)
+
+    if adapt_to_shape:
+        # delete temporary groups
+        for grp in mesh_groups:
+            __deleteObj(grp)
index 4dd581a2485be1a4c9ce580eda43afb2cf18388f..5527e26609421a143acbab818431d2afb5233307 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 3d9a9a157b4478cdb8695912fc9c310292c3d5f3..0e89bf85daae245f3895a874a55b7d5f8a235348 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -1739,7 +1739,7 @@ public:
     if ( vw->SelectionMode() == ActorSelection )
       return;
 
-    TColStd_MapOfInteger idMap;
+    SVTK_TVtkIDsMap idMap;
     std::vector<int>::const_iterator it;
     for ( it = myIds.begin(); it != myIds.end(); ++it )
     {
@@ -1834,11 +1834,11 @@ public:
     if ( vw->SelectionMode() != EdgeOfCellSelection )
       return;
 
-    SVTK_IndexedMapOfIds idMap;
+    SVTK_IndexedMapOfVtkIds idMap;
     std::vector<std::pair<int, int> >::const_iterator it;
     for ( it = myIds.begin(); it != myIds.end(); ++it )
     {
-      std::vector<int> pair;
+      std::vector<vtkIdType> pair;
       pair.push_back( (*it).first );
       pair.push_back( (*it).second );
       idMap.Add( pair );
@@ -1991,11 +1991,11 @@ public:
     if ( !actor || !actor->hasIO() )
       return;
 
-    TColStd_IndexedMapOfInteger idMap;
+    SVTK_TIndexedMapOfVtkId idMap;
     selector->GetIndex( actor->getIO(), idMap );
 
     for ( int i = 1; i <= idMap.Extent(); i++ )
-      myResult.push_back( idMap( i ) );
+      myResult.push_back( (int)idMap( i ) );
   }
 };
 
@@ -2047,12 +2047,12 @@ public:
     if ( !actor || !actor->hasIO() )
       return;
 
-    SVTK_IndexedMapOfIds idMap;
+    SVTK_IndexedMapOfVtkIds idMap;
     selector->GetCompositeIndex( actor->getIO(), idMap );
 
     for ( int i = 1; i <= idMap.Extent(); i++ ) {
       myResult.push_back( std::make_pair( (int)idMap(i)[0], (int)idMap(i)[1]) );
-       }
+    }
   }
 };
 
index eca79e82efcbaf79fa8be0e5217fb8126e7624ff..e76bcda07dad15980c29df14fd05ebef3dab1ea0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index abf6740f384339e283b3b5fdbe9c3505595fbbf9..0c1e7315b30ac0d98c8fafa5def6671d6a69ee1e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 3f7dc1af79af37fc0fc7621c81d4527bdc48e2b7..7d8b58a6d4d979dd419f5dbf8cf16d1dae8f81df 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -29,6 +29,7 @@ INCLUDE_DIRECTORIES(
   ${Boost_INCLUDE_DIRS}
   ${KERNEL_INCLUDE_DIRS}
   ${GEOM_INCLUDE_DIRS}
+  ${MEDCOUPLING_INCLUDE_DIRS}
   ${PROJECT_SOURCE_DIR}/src/SMESHUtils
   ${PROJECT_SOURCE_DIR}/src/SMESH
   ${PROJECT_SOURCE_DIR}/src/SMESHDS
@@ -37,12 +38,6 @@ INCLUDE_DIRECTORIES(
   ${TBB_INCLUDES}
 )
 
-IF(SALOME_SMESH_ENABLE_MEFISTO)
-  INCLUDE_DIRECTORIES(
-    ${PROJECT_SOURCE_DIR}/src/MEFISTO2
-  )
-ENDIF(SALOME_SMESH_ENABLE_MEFISTO)
-
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
   ${OpenCASCADE_DEFINITIONS}
@@ -67,10 +62,6 @@ SET(_link_LIBRARIES
   ${Boost_LIBRARIES}
 )
 
-IF(SALOME_SMESH_ENABLE_MEFISTO)
-  SET(_link_LIBRARIES ${_link_LIBRARIES} MEFISTO2D)
-ENDIF(SALOME_SMESH_ENABLE_MEFISTO)
-
 # --- headers ---
 
 # header files / no moc processing
@@ -129,15 +120,14 @@ SET(StdMeshers_HEADERS
   StdMeshers_Projection_1D2D.hxx
   StdMeshers_CartesianParameters3D.hxx
   StdMeshers_Cartesian_3D.hxx
+  StdMeshers_Cartesian_VL.hxx
   StdMeshers_QuadFromMedialAxis_1D2D.hxx
   StdMeshers_PolygonPerFace_2D.hxx
   StdMeshers_PolyhedronPerSolid_3D.hxx
   StdMeshers_BlockRenumber.hxx
+  StdMeshers_ViscousLayerBuilder.hxx
 )
 
-IF(SALOME_SMESH_ENABLE_MEFISTO)
-  SET(StdMeshers_HEADERS ${StdMeshers_HEADERS} StdMeshers_MEFISTO_2D.hxx)
-ENDIF(SALOME_SMESH_ENABLE_MEFISTO)
 # --- sources ---
 
 # sources / static
@@ -195,17 +185,15 @@ SET(StdMeshers_SOURCES
   StdMeshers_Projection_1D2D.cxx
   StdMeshers_CartesianParameters3D.cxx
   StdMeshers_Cartesian_3D.cxx
+  StdMeshers_Cartesian_VL.cxx
   StdMeshers_Adaptive1D.cxx
   StdMeshers_QuadFromMedialAxis_1D2D.cxx
   StdMeshers_PolygonPerFace_2D.cxx
   StdMeshers_PolyhedronPerSolid_3D.cxx
   StdMeshers_BlockRenumber.cxx
+  StdMeshers_ViscousLayerBuilder.cxx
 )
 
-IF(SALOME_SMESH_ENABLE_MEFISTO)
-  SET(StdMeshers_SOURCES ${StdMeshers_SOURCES} StdMeshers_MEFISTO_2D.cxx)
-ENDIF(SALOME_SMESH_ENABLE_MEFISTO)
-
 # --- rules ---
 
 ADD_LIBRARY(StdMeshers ${StdMeshers_SOURCES})
index c6200b7dac08867735f5ba3afc04dd1315f22812..4015d5fe77520af81c12407900f44546f4e3a3c1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index c448864732756848757ce8d1de1c583a02cd1eec..fe539a1bd9367c10952f170f8203475e3dafc93c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -241,15 +241,14 @@ namespace // internal utils
     BBox                         myBBox;
     BRepAdaptor_Surface          mySurface;
     ElementBndBoxTree*           myTree;
-    const Poly_Array1OfTriangle* myPolyTrias;
-    const TColgp_Array1OfPnt*    myNodes;
-    bool                         myOwnNodes;
+    TColgp_Array1OfPnt           myNodes;
 
     typedef vector<int> IntVec;
     IntVec                       myFoundTriaIDs;
 
     TriaTreeData( const TopoDS_Face& face, ElementBndBoxTree* triaTree );
-    ~TriaTreeData() { if ( myOwnNodes ) delete myNodes; myNodes = NULL; }
+    ~TriaTreeData() {
+    }
     virtual const Bnd_B3d* GetBox(int elemID) const { return &myTrias[elemID].myBox; }
     void PrepareToTriaSearch();
     void SetSizeByTrias( SegSizeTree& sizeTree, double deflection ) const;
@@ -311,7 +310,7 @@ namespace // internal utils
 
   TriaTreeData::TriaTreeData( const TopoDS_Face& face, ElementBndBoxTree* triaTree )
     : myTriasDeflection(0), mySurface( face ),
-      myTree(NULL), myPolyTrias(NULL), myNodes(NULL), myOwnNodes(false)
+      myTree(NULL)
   {
     TopLoc_Location loc;
     Handle(Poly_Triangulation) tr = BRep_Tool::Triangulation( face, loc );
@@ -319,21 +318,19 @@ namespace // internal utils
     {
       myFaceTol         = SMESH_MesherHelper::MaxTolerance( face );
       myTree            = triaTree;
-      myNodes           = & tr->Nodes();
-      myPolyTrias       = & tr->Triangles();
+      myNodes           = TColgp_Array1OfPnt( 1, tr->NbNodes() );
+      for (int ii = 1; ii <= tr->NbNodes(); ++ii) {
+        myNodes(ii) = tr->Node(ii);
+      }
       myTriasDeflection = tr->Deflection();
       if ( !loc.IsIdentity() ) // transform nodes if necessary
       {
-        TColgp_Array1OfPnt* trsfNodes = new TColgp_Array1OfPnt( myNodes->Lower(), myNodes->Upper() );
-        trsfNodes->Assign( *myNodes );
-        myNodes    = trsfNodes;
-        myOwnNodes = true;
         const gp_Trsf& trsf = loc;
-        for ( int i = trsfNodes->Lower(); i <= trsfNodes->Upper(); ++i )
-          trsfNodes->ChangeValue(i).Transform( trsf );
+        for ( int i = myNodes.Lower(); i <= myNodes.Upper(); ++i )
+          myNodes(i).Transform( trsf );
       }
-      for ( int i = myNodes->Lower(); i <= myNodes->Upper(); ++i )
-        myBBox.Add( myNodes->Value(i).XYZ() );
+      for ( int i = myNodes.Lower(); i <= myNodes.Upper(); ++i )
+        myBBox.Add( myNodes.Value(i).XYZ() );
     }
   }
   //================================================================================
@@ -345,14 +342,16 @@ namespace // internal utils
   void TriaTreeData::PrepareToTriaSearch()
   {
     if ( !myTrias.empty() ) return; // already done
-    if ( !myPolyTrias ) return;
+
+    TopLoc_Location loc;
+    Handle(Poly_Triangulation) tr = BRep_Tool::Triangulation( mySurface.Face(), loc );
+
+    if ( tr.IsNull() || !tr->NbTriangles() ) return;
 
     // get all boundary links and nodes on VERTEXes
     map< NLink, Segment* > linkToSegMap;
     map< NLink, Segment* >::iterator l2s;
     set< int > vertexNodes;
-    TopLoc_Location loc;
-    Handle(Poly_Triangulation) tr = BRep_Tool::Triangulation( mySurface.Face(), loc );
     if ( !tr.IsNull() )
     {
       TopTools_IndexedMapOfShape edgeMap;
@@ -377,21 +376,21 @@ namespace // internal utils
       {
         const NLink& link = (*l2s).first;
         (*l2s).second = & mySegments[ iS ];
-        mySegments[ iS ].Init( myNodes->Value( link.N1() ),
-                               myNodes->Value( link.N2() ));
+        mySegments[ iS ].Init( myNodes( link.N1() ),
+                               myNodes( link.N2() ));
       }
     }
 
     // initialize myTrias
-    myTrias.resize( myPolyTrias->Length() );
+    myTrias.resize( tr->NbTriangles() );
     Standard_Integer n1,n2,n3;
-    for ( int i = 1; i <= myPolyTrias->Upper(); ++i )
+    for ( int i = 1; i <= tr->NbTriangles(); ++i )
     {
       Triangle & t = myTrias[ i-1 ];
-      myPolyTrias->Value( i ).Get( n1,n2,n3 );
-      t.Init( myNodes->Value( n1 ),
-              myNodes->Value( n2 ),
-              myNodes->Value( n3 ));
+      tr->Triangle( i ).Get( n1,n2,n3 );
+      t.Init( myNodes.Value( n1 ),
+              myNodes.Value( n2 ),
+              myNodes.Value( n3 ));
       int nbSeg = 0;
       if (( l2s = linkToSegMap.find( NLink( n1, n2 ))) != linkToSegMap.end())
         t.mySegments[ nbSeg++ ] = l2s->second;
@@ -445,15 +444,16 @@ namespace // internal utils
     double size = -1., maxLinkLen;
     int    jLongest = 0;
 
-    //int nbLinks = 0;
-    for ( int i = 1; i <= myPolyTrias->Upper(); ++i )
+    TopLoc_Location loc;
+    Handle(Poly_Triangulation) tr = BRep_Tool::Triangulation( mySurface.Face(), loc );
+    for ( int i = 1; i <= tr->NbTriangles(); ++i )
     {
       // get corners of a triangle
-      myPolyTrias->Value( i ).Get( n[0],n[1],n[2] );
+      tr->Triangle( i ).Get( n[0],n[1],n[2] );
       n[3] = n[0];
-      p[0] = myNodes->Value( n[0] );
-      p[1] = myNodes->Value( n[1] );
-      p[2] = myNodes->Value( n[2] );
+      p[0] = myNodes.Value( n[0] );
+      p[1] = myNodes.Value( n[1] );
+      p[2] = myNodes.Value( n[2] );
       p[3] = p[0];
       // get length of links and find the longest one
       maxLinkLen = 0;
@@ -493,7 +493,7 @@ namespace // internal utils
       }
       //cout << "SetSizeByTrias, i="<< i << " " << sz * factor << endl;
     }
-    // cout << "SetSizeByTrias, nn tria="<< myPolyTrias->Upper()
+    // cout << "SetSizeByTrias, nn tria="<< tr->NbTriangles()
     //      << " nb links" << nbLinks << " isConstSize="<<isConstSize
     //      << " " << size * factor << endl;
   }
@@ -520,6 +520,9 @@ namespace // internal utils
     if ( myFoundTriaIDs.empty() )
       return minDist2;
 
+    TopLoc_Location loc;
+    Handle(Poly_Triangulation) tr = BRep_Tool::Triangulation( mySurface.Face(), loc );
+
     Standard_Integer n[ 3 ];
     for ( size_t i = 0; i < myFoundTriaIDs.size(); ++i )
     {
@@ -529,13 +532,13 @@ namespace // internal utils
       t.myIsChecked = true;
 
       double d, minD2 = minDist2;
-      myPolyTrias->Value( myFoundTriaIDs[i]+1 ).Get( n[0],n[1],n[2] );
+      tr->Triangle( myFoundTriaIDs[i]+1 ).Get( n[0],n[1],n[2] );
       if ( avoidPnt && t.myHasNodeOnVertex )
       {
         bool avoidTria = false;
         for ( int i = 0; i < 3; ++i )
         {
-          const gp_Pnt& pn = myNodes->Value(n[i]);
+          const gp_Pnt& pn = myNodes.Value(n[i]);
           if (( avoidTria = ( pn.SquareDistance( *avoidPnt ) <= tol2 )))
             break;
           if ( !projectedOnly )
@@ -556,7 +559,7 @@ namespace // internal utils
       else
       {
         for ( int i = 0; i < 3; ++i )
-          minD2 = Min( minD2, p.SquareDistance( myNodes->Value(n[i]) ));
+          minD2 = Min( minD2, p.SquareDistance( myNodes.Value(n[i]) ));
         if ( minD2 < t.myMaxSize2  && ( t.DistToProjection( p, d ) || t.DistToSegment( p, d )))
           minD2 = Min( minD2, d*d );
         minDist2 = Min( minDist2, minD2 );
@@ -1317,9 +1320,9 @@ bool AdaptiveAlgo::Compute(SMESH_Mesh &         theMesh,
 
           if ( iLoop > 20 )
           {
-#ifdef _DEBUG_
-            cout << "Infinite loop in AdaptiveAlgo::Compute()" << endl;
-#endif
+            if(SALOME::VerbosityActivated())
+              cout << "Infinite loop in AdaptiveAlgo::Compute()" << endl;
+
             sizeDecreased = false;
             break;
           }
index 3fc573469a67dc9f35c36ff2a9f566a40494bb51..3abfb60253260c0ab5ef3b54d387af1369b6acdf 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 8112c14772d8018abbc1ecc1ac543f86809a9338..fb8769936135c3c8bbbf4da448dd5ee454807efb 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index f6c700c487e8a4229bb68efee1338e4efa68efff..6a021fc3d2cdf1944c7f43c945a3feae09a37815 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index b9964faef8f995cdd834921c819fa4f5757ad386..cbfced1faa68b9d81778c1855d7c8636c61daac2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -365,7 +365,7 @@ bool StdMeshers_AutomaticLength::SetParametersByMesh(const SMESH_Mesh*   theMesh
     SMESHDS_SubMesh * eSubMesh = aMeshDS->MeshElements( edge );
     if ( !eSubMesh )
       return false;
-    int nbSeg = eSubMesh->NbElements();
+    smIdType nbSeg = eSubMesh->NbElements();
     if ( nbSeg < 1 )
       continue;
     double segLen = L / nbSeg;
index 6aec22d49c48728347a08ccf754bfb04d1b5a74d..3d72ee7a9a09ea27d3a527d7b99548bf60277270 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 77889c7c44f1244939481c9d2d249337b5e816da..727a3e2d5bab01b2acf6fa63429386dfda488f01 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 
 #include "StdMeshers_BlockRenumber.hxx"
 
-#include "SMDS_EdgePosition.hxx"
-#include "SMDS_FacePosition.hxx"
-#include "SMESHDS_Mesh.hxx"
-#include "SMESHDS_SubMesh.hxx"
-#include "SMESH_Algo.hxx"
-#include "SMESH_Mesh.hxx"
-#include "SMESH_MesherHelper.hxx"
-#include "SMESH_TryCatch.hxx"
+#include <SMDS_EdgePosition.hxx>
+#include <SMDS_FacePosition.hxx>
+#include <SMESHDS_Mesh.hxx>
+#include <SMESHDS_SubMesh.hxx>
+#include <SMESH_Algo.hxx>
+#include <SMESH_Mesh.hxx>
+#include <SMESH_MesherHelper.hxx>
+#include <SMESH_TryCatch.hxx>
+#include <SMESH_BoostTxtArchive.hxx>
 
 #include <BRep_Tool.hxx>
 #include <TopExp_Explorer.hxx>
@@ -41,7 +42,6 @@
 #include <TopoDS.hxx>
 
 #include <boost/archive/text_oarchive.hpp>
-#include <boost/archive/text_iarchive.hpp>
 
 //=============================================================================
 /*!
@@ -203,11 +203,11 @@ TopoDS_Vertex StdMeshers_RenumberHelper::GetVertex000( const TopTools_MapOfShape
 }
 
 //=======================================================================
-//function : GetVertex000
-//purpose  : Find default vertex at (0,0,0) local position
+//function : GetVertexAtPoint
+//purpose  : Return the VERTEX of solid at given point
 //=======================================================================
 
-TopoDS_Vertex StdMeshers_RenumberHelper::GetVertexAtPoint( const TopoDS_Shape&  solid,
+TopoDS_Vertex StdMeshers_RenumberHelper::GetVertexAtPoint( const TopoDS_Shape& solid,
                                                            const TopoDS_Shape& point )
 {
   if ( !solid.IsNull() && !point.IsNull() && point.ShapeType() == TopAbs_VERTEX )
@@ -296,8 +296,7 @@ istream & StdMeshers_BlockRenumber::LoadFrom(istream & load)
 {
   SMESH_TRY;
 
-  boost::archive::text_iarchive archive( load );
-  archive >> *this;
+  SMESHUtils::BoostTxtArchive( load ) >> *this;
 
   SMESH_CATCH( SMESH::doNothing );
 
index 7a884efe2674178f01400e4243d029cb46c79d3e..7173780c5fe28682d7ca616d5702f77469491b21 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 6b3e24ed40333b95b7fe6402b071c38486e5595d..66256788b7cc1727776f2bccf32f8f2e3c92d129 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -67,7 +67,9 @@ StdMeshers_CartesianParameters3D::StdMeshers_CartesianParameters3D(int         h
     _toAddEdges( false ),
     _toConsiderInternalFaces( false ),
     _toUseThresholdForInternalFaces( false ),
-    _toCreateFaces( false )
+    _toCreateFaces( false ),
+    _toUseQuanta(false),
+    _quanta(0.01)
 {
   _name = "CartesianParameters3D"; // used by "Cartesian_3D"
   _param_algo_dim = 3; // 3D
@@ -331,13 +333,13 @@ void StdMeshers_CartesianParameters3D::ComputeCoordinates(const double    x0,
     const double p1 = x0 * ( 1. - points[i+1]) + x1 * points[i+1];
     const double length = p1 - p0;
 
-    const size_t nbSections = 1000;
+    const int    nbSections = 1000;
     const double sectionLen = ( p1 - p0 ) / nbSections;
     vector< double > nbSegments( nbSections + 1 );
     nbSegments[ 0 ] = 0.;
 
     double t, spacing = 0;
-    for ( size_t i = 1; i <= nbSections; ++i )
+    for ( int i = 1; i <= nbSections; ++i )
     {
       t = double( i ) / nbSections;
       if ( !fun.value( t, spacing ) || spacing < std::numeric_limits<double>::min() )
@@ -350,11 +352,11 @@ void StdMeshers_CartesianParameters3D::ComputeCoordinates(const double    x0,
 
     if ( coords.empty() ) coords.push_back( p0 );
 
-    for ( size_t iCell = 1, i = 1; i <= nbSections; ++i )
+    for ( int iCell = 1, j = 1; j <= nbSections; ++j )
     {
-      if ( nbSegments[i]*corr >= iCell )
+      if ( nbSegments[j]*corr >= iCell )
       {
-        t = (i - ( nbSegments[i] - iCell/corr )/( nbSegments[i] - nbSegments[i-1] )) / nbSections;
+        t = (j - ( nbSegments[j] - iCell/corr )/( nbSegments[j] - nbSegments[j-1] )) / nbSections;
         coords.push_back( p0 + t * length );
         ++iCell;
       }
@@ -379,9 +381,9 @@ void StdMeshers_CartesianParameters3D::ComputeCoordinates(const double    x0,
     const double tol = minLen * 1e-3;
     int iRem = -1;
     if (( iF > 1 ) && ( coords[iF] - coords[iF-1] < tol ))
-      iRem = iF-1;
+      iRem = (int) iF-1;
     else if (( iF < coords.size()-2 ) && ( coords[iF+1] - coords[iF] < tol ))
-      iRem = iF+1;
+      iRem = (int) iF+1;
     if ( iRem > 0 )
       coords.erase( coords.begin() + iRem );
   }
@@ -774,6 +776,37 @@ void StdMeshers_CartesianParameters3D::SetToCreateFaces(bool toCreate)
   }
 }
 
+//=======================================================================
+//function : SetToUseQuanta
+//purpose  : Enables use of quanta
+//=======================================================================
+
+void StdMeshers_CartesianParameters3D::SetToUseQuanta(bool toUseQuanta)
+{
+  if ( _toUseQuanta != toUseQuanta )
+  {
+    _toUseQuanta = toUseQuanta;
+    NotifySubMeshesHypothesisModification();
+  }
+}
+
+//=======================================================================
+//function : SetQuanta
+//purpose  : Set size quanta value
+//=======================================================================
+
+void StdMeshers_CartesianParameters3D::SetQuanta(const double quanta)
+{
+  if ( quanta < 1e-6 || quanta > 1.0 )
+    throw SALOME_Exception(LOCALIZED("Quanta must be in the range [0.01,1] "));
+
+  bool changed = (_quanta != quanta); 
+  _quanta = quanta;
+  
+  if ( changed )
+    NotifySubMeshesHypothesisModification();
+}
+
 //=======================================================================
 //function : IsDefined
 //purpose  : Return true if parameters are well defined
@@ -823,7 +856,9 @@ std::ostream & StdMeshers_CartesianParameters3D::SaveTo(std::ostream & save)
 
   save << " " << _toConsiderInternalFaces
        << " " << _toUseThresholdForInternalFaces
-       << " " << _toCreateFaces;
+       << " " << _toCreateFaces
+       << " " << _toUseQuanta
+       << " " << _quanta;
 
   return save;
 }
@@ -889,6 +924,9 @@ std::istream & StdMeshers_CartesianParameters3D::LoadFrom(std::istream & load)
     load >> _toCreateFaces;
   }
 
+  if ( load >> _toUseQuanta )
+    load >> _quanta;
+
   return load;
 }
 
index 466d9598498355d383c9dffb6e8fd0438232ad0a..a913e830cd4e8c1712a8c2533ced5e21ac9c3cf5 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -157,6 +157,19 @@ public:
   void SetToCreateFaces(bool toCreate);
   bool GetToCreateFaces() const { return _toCreateFaces; }
 
+  /*!
+   * \brief Enables use of quanta for hexahedrons at the solid external boundary
+   */
+  void SetToUseQuanta(bool toUseQuanta);
+  bool GetToUseQuanta() const { return _toUseQuanta; }
+
+  /*!
+   * \brief Value of the quanta (volPolyhedron/volHexahedron) to use
+   * \remark value [0.1, 1.0]
+   */
+  void SetQuanta(const double quanta );
+  double GetQuanta() const { return _quanta; }
+
 
   /*!
    * \brief Return true if parameters are well defined
@@ -193,6 +206,8 @@ public:
   bool   _toConsiderInternalFaces;
   bool   _toUseThresholdForInternalFaces;
   bool   _toCreateFaces;
+  bool   _toUseQuanta;
+  double _quanta;
 };
 
 #endif
index a741b0f01dd05eea4373e46a9fda216558bc47b0..afd8d1866941b37db9fb61ada70824daec634315 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //
 #include "StdMeshers_Cartesian_3D.hxx"
 #include "StdMeshers_CartesianParameters3D.hxx"
-
-#include "ObjectPool.hxx"
-#include "SMDS_MeshNode.hxx"
-#include "SMDS_VolumeTool.hxx"
-#include "SMESHDS_Mesh.hxx"
-#include "SMESH_Block.hxx"
-#include "SMESH_Comment.hxx"
-#include "SMESH_ControlsDef.hxx"
-#include "SMESH_Mesh.hxx"
-#include "SMESH_MeshAlgos.hxx"
-#include "SMESH_MeshEditor.hxx"
-#include "SMESH_MesherHelper.hxx"
-#include "SMESH_subMesh.hxx"
-#include "SMESH_subMeshEventListener.hxx"
+#include "StdMeshers_Cartesian_VL.hxx"
 #include "StdMeshers_FaceSide.hxx"
+#include "StdMeshers_ViscousLayers.hxx"
+
+#include <ObjectPool.hxx>
+#include <SMDS_LinearEdge.hxx>
+#include <SMDS_MeshNode.hxx>
+#include <SMDS_VolumeOfNodes.hxx>
+#include <SMDS_VolumeTool.hxx>
+#include <SMESHDS_Mesh.hxx>
+#include <SMESH_Block.hxx>
+#include <SMESH_Comment.hxx>
+#include <SMESH_ControlsDef.hxx>
+#include <SMESH_Mesh.hxx>
+#include <SMESH_MeshAlgos.hxx>
+#include <SMESH_MeshEditor.hxx>
+#include <SMESH_MesherHelper.hxx>
+#include <SMESH_subMesh.hxx>
+#include <SMESH_subMeshEventListener.hxx>
 
 #include <utilities.h>
 #include <Utils_ExceptHandlers.hxx>
@@ -79,6 +83,7 @@
 #include <TopExp.hxx>
 #include <TopExp_Explorer.hxx>
 #include <TopLoc_Location.hxx>
+#include <TopTools_DataMapOfShapeInteger.hxx>
 #include <TopTools_IndexedMapOfShape.hxx>
 #include <TopTools_MapOfShape.hxx>
 #include <TopoDS.hxx>
 
 #include <boost/container/flat_map.hpp>
 
-//#undef WITH_TBB
+#ifdef _DEBUG_
+//  #define _MY_DEBUG_
+//  #undef WITH_TBB
+#endif
+
 #ifdef WITH_TBB
 
 #ifdef WIN32
 using namespace std;
 using namespace SMESH;
 
-#ifdef _DEBUG_
-//#define _MY_DEBUG_
-#endif
-
 //=============================================================================
 /*!
  * Constructor
@@ -129,7 +134,8 @@ StdMeshers_Cartesian_3D::StdMeshers_Cartesian_3D(int hypId, SMESH_Gen * gen)
 {
   _name = "Cartesian_3D";
   _shapeType = (1 << TopAbs_SOLID);       // 1 bit /shape type
-  _compatibleHypothesis.push_back("CartesianParameters3D");
+  _compatibleHypothesis.push_back( "CartesianParameters3D" );
+  _compatibleHypothesis.push_back( StdMeshers_ViscousLayers::GetHypType() );
 
   _onlyUnaryInput = false;          // to mesh all SOLIDs at once
   _requireDiscreteBoundary = false; // 2D mesh not needed
@@ -148,19 +154,26 @@ bool StdMeshers_Cartesian_3D::CheckHypothesis (SMESH_Mesh&          aMesh,
 {
   aStatus = SMESH_Hypothesis::HYP_MISSING;
 
-  const list<const SMESHDS_Hypothesis*>& hyps = GetUsedHypothesis(aMesh, aShape);
+  const list<const SMESHDS_Hypothesis*>& hyps = GetUsedHypothesis(aMesh, aShape, /*skipAux=*/false);
   list <const SMESHDS_Hypothesis* >::const_iterator h = hyps.begin();
   if ( h == hyps.end())
   {
     return false;
   }
 
+  _hyp = nullptr;
+  _hypViscousLayers = nullptr;
+  _isComputeOffset = false;
+
   for ( ; h != hyps.end(); ++h )
   {
-    if (( _hyp = dynamic_cast<const StdMeshers_CartesianParameters3D*>( *h )))
+    if ( !_hyp && ( _hyp = dynamic_cast<const StdMeshers_CartesianParameters3D*>( *h )))
     {
       aStatus = _hyp->IsDefined() ? HYP_OK : HYP_BAD_PARAMETER;
-      break;
+    }
+    else
+    {
+      _hypViscousLayers = dynamic_cast<const StdMeshers_ViscousLayers*>( *h );
     }
   }
 
@@ -169,7 +182,22 @@ bool StdMeshers_Cartesian_3D::CheckHypothesis (SMESH_Mesh&          aMesh,
 
 namespace
 {
-  typedef int TGeomID; // IDs of sub-shapes
+  /*!
+   * \brief Temporary mesh to hold 
+   */
+  struct TmpMesh: public SMESH_Mesh
+  {
+    TmpMesh() {
+      _isShapeToMesh = (_id = 0);
+      _meshDS  = new SMESHDS_Mesh( _id, true );
+    }
+  };
+
+  typedef int                     TGeomID; // IDs of sub-shapes
+  typedef TopTools_ShapeMapHasher TShapeHasher; // non-oriented shape hasher
+  typedef std::array< int, 3 >    TIJK;
+
+  const TGeomID theUndefID = 1e+9;
 
   //=============================================================================
   // Definitions of internal utils
@@ -182,13 +210,33 @@ namespace
     Trans_INTERNAL // for INTERNAL FACE
   };
   // --------------------------------------------------------------------------
+  /*!
+   * \brief Sub-entities of a FACE neighboring its concave VERTEX.
+   *        Help to avoid linking nodes on EDGEs that seem connected
+   *        by the concave FACE but the link actually lies outside the FACE
+   */
+  struct ConcaveFace
+  {
+    TGeomID _concaveFace;
+    TGeomID _edge1, _edge2;
+    TGeomID _v1,    _v2;
+    ConcaveFace( int f=0, int e1=0, int e2=0, int v1=0, int v2=0 )
+      : _concaveFace(f), _edge1(e1), _edge2(e2), _v1(v1), _v2(v2) {}
+    bool HasEdge( TGeomID edge ) const { return edge == _edge1 || edge == _edge2; }
+    bool HasVertex( TGeomID v  ) const { return v == _v1 || v == _v2; }
+    void SetEdge( TGeomID edge ) { ( _edge1 ? _edge2 : _edge1 ) = edge; }
+    void SetVertex( TGeomID v  ) { ( _v1 ? _v2 : _v1 ) = v; }
+  };
+  typedef NCollection_DataMap< TGeomID, ConcaveFace > TConcaveVertex2Face;
+  // --------------------------------------------------------------------------
   /*!
    * \brief Container of IDs of SOLID sub-shapes
    */
   class Solid // sole SOLID contains all sub-shapes
   {
-    TGeomID _id; // SOLID id
-    bool    _hasInternalFaces;
+    TGeomID             _id; // SOLID id
+    bool                _hasInternalFaces;
+    TConcaveVertex2Face _concaveVertex; // concave VERTEX -> ConcaveFace
   public:
     virtual ~Solid() {}
     virtual bool Contains( TGeomID /*subID*/ ) const { return true; }
@@ -199,6 +247,10 @@ namespace
     TGeomID ID() const { return _id; }
     void SetHasInternalFaces( bool has ) { _hasInternalFaces = has; }
     bool HasInternalFaces() const { return _hasInternalFaces; }
+    void SetConcave( TGeomID V, TGeomID F, TGeomID E1, TGeomID E2, TGeomID V1, TGeomID V2  )
+    { _concaveVertex.Bind( V, ConcaveFace{ F, E1, E2, V1, V2 }); }
+    bool HasConcaveVertex() const { return !_concaveVertex.IsEmpty(); }
+    const ConcaveFace* GetConcave( TGeomID V ) const { return _concaveVertex.Seek( V ); }
   };
   // --------------------------------------------------------------------------
   class OneOfSolids : public Solid
@@ -227,6 +279,47 @@ namespace
     }
   };
   // --------------------------------------------------------------------------
+  /*!
+   * \brief Hold a vector of TGeomID and clear it at destruction
+   */
+  class GeomIDVecHelder
+  {
+    typedef std::vector< TGeomID > TVector;
+    const TVector& myVec;
+    bool           myOwn;
+
+  public:
+    GeomIDVecHelder( const TVector& idVec, bool isOwner ): myVec( idVec ), myOwn( isOwner ) {}
+    GeomIDVecHelder( const GeomIDVecHelder& holder ): myVec( holder.myVec ), myOwn( holder.myOwn )
+    {
+      const_cast< bool& >( holder.myOwn ) = false;
+    }
+    ~GeomIDVecHelder() { if ( myOwn ) const_cast<TVector&>( myVec ).clear(); }
+    size_t size() const { return myVec.size(); }
+    TGeomID operator[]( size_t i ) const { return i < size() ? myVec[i] : theUndefID; }
+    bool operator==( const GeomIDVecHelder& other ) const { return myVec == other.myVec; }
+    bool contain( const TGeomID& id ) const {
+      return std::find( myVec.begin(), myVec.end(), id ) != myVec.end();
+    }
+    TGeomID otherThan( const TGeomID& id ) const {
+      for ( const TGeomID& id2 : myVec )
+        if ( id != id2 )
+          return id2;
+      return theUndefID;
+    }
+    TGeomID oneCommon( const GeomIDVecHelder& other ) const {
+      TGeomID common = theUndefID;
+      for ( const TGeomID& id : myVec )
+        if ( other.contain( id ))
+        {
+          if ( common != theUndefID )
+            return theUndefID;
+          common = id;
+        }
+      return common;
+    }
+  };
+  // --------------------------------------------------------------------------
   /*!
    * \brief Geom data
    */
@@ -240,10 +333,13 @@ namespace
     TColStd_MapOfInteger        _strangeEdges; // EDGEs shared by strange FACEs
     TGeomID                     _extIntFaceID; // pseudo FACE - extension of INTERNAL FACE
 
+    TopTools_DataMapOfShapeInteger _shape2NbNodes; // nb of pre-existing nodes on shapes
+
     Controls::ElementsOnShape _edgeClassifier;
     Controls::ElementsOnShape _vertexClassifier;
 
     bool IsOneSolid() const { return _solidByID.size() < 2; }
+    GeomIDVecHelder GetSolidIDsByShapeID( const vector< TGeomID >& shapeIDs ) const;
   };
   // --------------------------------------------------------------------------
   /*!
@@ -255,9 +351,10 @@ namespace
     mutable vector< TGeomID >    _faceIDs;
 
     B_IntersectPoint(): _node(NULL) {}
-    void Add( const vector< TGeomID >& fIDs, const SMDS_MeshNode* n=0 ) const;
-    int HasCommonFace( const B_IntersectPoint * other, int avoidFace=-1 ) const;
-    bool IsOnFace( int faceID ) const;
+    bool Add( const vector< TGeomID >& fIDs, const SMDS_MeshNode* n=0 ) const;
+    TGeomID HasCommonFace( const B_IntersectPoint * other, TGeomID avoidFace=-1 ) const;
+    size_t GetCommonFaces( const B_IntersectPoint * other, TGeomID * commonFaces ) const;
+    bool IsOnFace( TGeomID faceID ) const;
     virtual ~B_IntersectPoint() {}
   };
   // --------------------------------------------------------------------------
@@ -336,6 +433,11 @@ namespace
     {
       _curInd[0] = i; _curInd[1] = j; _curInd[2] = k;
     }
+    void SetLineIndex(size_t i)
+    {
+      _curInd[_iVar2] = i / _size[_iVar1];
+      _curInd[_iVar1] = i % _size[_iVar1];
+    }
     void operator++()
     {
       if ( ++_curInd[_iVar1] == _size[_iVar1] )
@@ -347,8 +449,10 @@ namespace
     size_t LineIndex01 () const { return _curInd[_iVar1] + (_curInd[_iVar2] + 1 )* _size[_iVar1]; }
     size_t LineIndex11 () const { return (_curInd[_iVar1] + 1 ) + (_curInd[_iVar2] + 1 )* _size[_iVar1]; }
     void SetIndexOnLine (size_t i)  { _curInd[ _iConst ] = i; }
+    bool IsValidIndexOnLine (size_t i) const { return  i < _size[ _iConst ]; }
     size_t NbLines() const { return _size[_iVar1] * _size[_iVar2]; }
   };
+  struct FaceGridIntersector;
   // --------------------------------------------------------------------------
   /*!
    * \brief Container of GridLine's
@@ -365,7 +469,9 @@ namespace
     // index shift within _nodes of nodes of a cell from the 1st node
     int                _nodeShift[8];
 
-    vector< const SMDS_MeshNode* >    _nodes; // mesh nodes at grid nodes
+    vector< const SMDS_MeshNode* >    _nodes;          // mesh nodes at grid nodes
+    vector< const SMDS_MeshNode* >    _allBorderNodes; // mesh nodes between the bounding box and the geometry boundary
+
     vector< const F_IntersectPoint* > _gridIntP; // grid node intersection with geometry
     ObjectPool< E_IntersectPoint >    _edgeIntPool; // intersections with EDGEs
     ObjectPool< F_IntersectPoint >    _extIntPool; // intersections with extended INTERNAL FACEs
@@ -377,6 +483,8 @@ namespace
     bool                              _toConsiderInternalFaces;
     bool                              _toUseThresholdForInternalFaces;
     double                            _sizeThreshold;
+    bool                              _toUseQuanta;
+    double                            _quanta;
 
     SMESH_MesherHelper*               _helper;
 
@@ -388,11 +496,16 @@ namespace
     {
       return i + j*_coords[0].size() + k*_coords[0].size()*_coords[1].size();
     }
+    size_t NodeIndex( const TIJK& ijk ) const
+    {
+      return NodeIndex( ijk[0], ijk[1], ijk[2] );
+    }
     size_t NodeIndexDX() const { return 1; }
     size_t NodeIndexDY() const { return _coords[0].size(); }
     size_t NodeIndexDZ() const { return _coords[0].size() * _coords[1].size(); }
 
     LineIndexer GetLineIndexer(size_t iDir) const;
+    size_t GetLineDir( const GridLine* line, size_t & index ) const;
 
     E_IntersectPoint* Add( const E_IntersectPoint& ip )
     {
@@ -428,7 +541,9 @@ namespace
     const vector< TGeomID > & GetSolidIDs( TGeomID subShapeID ) const;
     bool IsCorrectTransition( TGeomID faceID, const Solid* solid );
     bool IsBoundaryFace( TGeomID face ) const { return _geometry._boundaryFaces.Contains( face ); }
-    void SetOnShape( const SMDS_MeshNode* n, const F_IntersectPoint& ip, bool unset=false );
+    void SetOnShape( const SMDS_MeshNode* n, const F_IntersectPoint& ip,
+                     TopoDS_Vertex* vertex = nullptr, bool unset = false );
+    void UpdateFacesOfVertex( const B_IntersectPoint& ip, const TopoDS_Vertex& vertex );
     bool IsToCheckNodePos() const { return !_toAddEdges && _toCreateFaces; }
     bool IsToRemoveExcessEntities() const { return !_toAddEdges; }
 
@@ -580,7 +695,8 @@ namespace
     // --------------------------------------------------------------------------------
     struct _Node //!< node either at a hexahedron corner or at intersection
     {
-      const SMDS_MeshNode*    _node; // mesh node at hexahedron corner
+      const SMDS_MeshNode*    _node;        // mesh node at hexahedron corner
+      const SMDS_MeshNode*    _boundaryCornerNode; // missing mesh node due to hex truncation on the boundary
       const B_IntersectPoint* _intPoint;
       const _Face*            _usedInFace;
       char                    _isInternalFlags;
@@ -589,6 +705,8 @@ namespace
         :_node(n), _intPoint(ip), _usedInFace(0), _isInternalFlags(0) {} 
       const SMDS_MeshNode*    Node() const
       { return ( _intPoint && _intPoint->_node ) ? _intPoint->_node : _node; }
+      const SMDS_MeshNode*    BoundaryNode() const
+      { return _node ? _node : _boundaryCornerNode; }
       const E_IntersectPoint* EdgeIntPnt() const
       { return static_cast< const E_IntersectPoint* >( _intPoint ); }
       const F_IntersectPoint* FaceIntPnt() const
@@ -610,6 +728,10 @@ namespace
       {
         return _intPoint ? _intPoint->IsOnFace( faceID ) : false;
       }
+      size_t GetCommonFaces( const B_IntersectPoint * other, TGeomID* common ) const
+      {
+        return _intPoint && other ? _intPoint->GetCommonFaces( other, common ) : 0;
+      }
       gp_Pnt Point() const
       {
         if ( const SMDS_MeshNode* n = Node() )
@@ -664,7 +786,7 @@ namespace
       bool   _reverse;
       _OrientedLink( _Link* link=0, bool reverse=false ): _link(link), _reverse(reverse) {}
       void Reverse() { _reverse = !_reverse; }
-      int NbResultLinks() const { return _link->_splits.size(); }
+      size_t NbResultLinks() const { return _link->_splits.size(); }
       _OrientedLink ResultLink(int i) const
       {
         return _OrientedLink(&_link->_splits[_reverse ? NbResultLinks()-i-1 : i],_reverse);
@@ -821,18 +943,20 @@ namespace
       vector< int >           _quantities;
       _volumeDef*             _next; // to store several _volumeDefs in a chain
       TGeomID                 _solidID;
+      double                  _size;
       const SMDS_MeshElement* _volume; // new volume
+      std::vector<const SMDS_MeshElement*> _brotherVolume; // produced due to poly split 
 
       vector< SMESH_Block::TShapeID > _names; // name of side a polygon originates from
 
-      _volumeDef(): _next(0), _solidID(0), _volume(0) {}
+      _volumeDef(): _next(0), _solidID(0), _size(0), _volume(0) {}
       ~_volumeDef() { delete _next; }
       _volumeDef( _volumeDef& other ):
-        _next(0), _solidID( other._solidID ), _volume( other._volume )
+        _next(0), _solidID( other._solidID ), _size( other._size ), _volume( other._volume )
       { _nodes.swap( other._nodes ); _quantities.swap( other._quantities ); other._volume = 0;
         _names.swap( other._names ); }
 
-      size_t size() const { return 1 + ( _next ? _next->size() : 0 ); }
+      size_t size() const { return 1 + ( _next ? _next->size() : 0 ); } // nb _volumeDef in a chain
       _volumeDef* at(int index)
       { return index == 0 ? this : ( _next ? _next->at(index-1) : _next ); }
 
@@ -898,10 +1022,7 @@ namespace
     int         _origNodeInd; // index of _hexNodes[0] node within the _grid
     size_t      _i,_j,_k;
     bool        _hasTooSmall;
-
-#ifdef _DEBUG_
     int         _cellID;
-#endif
 
   public:
     Hexahedron(Grid* grid);
@@ -927,11 +1048,13 @@ namespace
     bool addIntersection( const E_IntersectPoint* ip,
                           vector< Hexahedron* >&  hexes,
                           int ijk[], int dIJK[] );
+    bool isQuadOnFace( const size_t iQuad );
     bool findChain( _Node* n1, _Node* n2, _Face& quad, vector<_Node*>& chainNodes );
     bool closePolygon( _Face* polygon, vector<_Node*>& chainNodes ) const;
     bool findChainOnEdge( const vector< _OrientedLink >& splits,
                           const _OrientedLink&           prevSplit,
                           const _OrientedLink&           avoidSplit,
+                          const std::set< TGeomID > &    concaveFaces,
                           size_t &                       iS,
                           _Face&                         quad,
                           vector<_Node*>&                chn);
@@ -953,7 +1076,11 @@ namespace
     void sortVertexNodes(vector<_Node*>& nodes, _Node* curNode, TGeomID face);
     bool isInHole() const;
     bool hasStrangeEdge() const;
-    bool checkPolyhedronSize( bool isCutByInternalFace ) const;
+    bool checkPolyhedronSize( bool isCutByInternalFace, double & volSize ) const;
+    int checkPolyhedronValidity( _volumeDef* volDef, std::vector<std::vector<int>>& splitQuantities, 
+                                  std::vector<std::vector<const SMDS_MeshNode*>>& splitNodes );
+    const SMDS_MeshElement* addPolyhedronToMesh( _volumeDef* volDef,  SMESH_MesherHelper& helper, const std::vector<const SMDS_MeshNode*>& nodes, 
+                                                const std::vector<int>& quantities );
     bool addHexa ();
     bool addTetra();
     bool addPenta();
@@ -969,6 +1096,9 @@ namespace
           return nodes[i];
       return 0;
     }
+    bool isCorner( const _Node* node ) const { return ( node >= &_hexNodes[0] &&
+                                                        node -  &_hexNodes[0] < 8 ); }
+    bool hasEdgesAround( const ConcaveFace* cf ) const;
     bool isImplementEdges() const { return _grid->_edgeIntPool.nbElements(); }
     bool isOutParam(const double uvw[3]) const;
 
@@ -1039,6 +1169,32 @@ namespace
       di = 0;
   }
   //=============================================================================
+  /*
+   * Return a vector of SOLIDS sharing given shapes
+   */
+  GeomIDVecHelder Geometry::GetSolidIDsByShapeID( const vector< TGeomID >& theShapeIDs ) const
+  {
+    if ( theShapeIDs.size() == 1 )
+      return GeomIDVecHelder( _solidIDsByShapeID[ theShapeIDs[ 0 ]], /*owner=*/false );
+
+    // look for an empty slot in _solidIDsByShapeID
+    vector< TGeomID > * resultIDs = 0;
+    for ( const vector< TGeomID >& vec : _solidIDsByShapeID )
+      if ( vec.empty() )
+      {
+        resultIDs = const_cast< vector< TGeomID > * >( & vec );
+        break;
+      }
+    // fill in resultIDs
+    for ( const TGeomID& id : theShapeIDs )
+      for ( const TGeomID& solid : _solidIDsByShapeID[ id ])
+      {
+        if ( std::find( resultIDs->begin(), resultIDs->end(), solid ) == resultIDs->end() )
+          resultIDs->push_back( solid );
+      }
+    return GeomIDVecHelder( *resultIDs, /*owner=*/true );
+  }
+  //=============================================================================
   /*
    * Remove coincident intersection points
    */
@@ -1111,42 +1267,47 @@ namespace
       return isOut ? 0 : geom._soleSolid.ID();
     }
 
-    const vector< TGeomID >& solids = geom._solidIDsByShapeID[ ip->_faceIDs[ 0 ]];
+    GeomIDVecHelder solids = geom.GetSolidIDsByShapeID( ip->_faceIDs );
 
     --ip;
     if ( ip->_transition == Trans_INTERNAL )
       return prevID;
 
-    const vector< TGeomID >& solidsBef = geom._solidIDsByShapeID[ ip->_faceIDs[ 0 ]];
+    GeomIDVecHelder solidsBef = geom.GetSolidIDsByShapeID( ip->_faceIDs );
 
     if ( ip->_transition == Trans_IN ||
          ip->_transition == Trans_OUT )
     {
       if ( solidsBef.size() == 1 )
-        return ( solidsBef[0] == prevID ) ? 0 : solidsBef[0];
+      {
+        if ( solidsBef[0] == prevID )
+          return ip->_transition == Trans_OUT ? 0 : solidsBef[0];
+        else
+          return solidsBef[0];
+      }
 
-      return solidsBef[ solidsBef[0] == prevID ];
+      if ( solids.size() == 2 )
+      {
+        if ( solids == solidsBef )
+          return solids.contain( prevID ) ? solids.otherThan( prevID ) : theUndefID; // bos #29212
+      }
+      return solids.oneCommon( solidsBef );
     }
 
     if ( solidsBef.size() == 1 )
       return solidsBef[0];
 
-    for ( size_t i = 0; i < solids.size(); ++i )
-    {
-      vector< TGeomID >::const_iterator it =
-        std::find( solidsBef.begin(), solidsBef.end(), solids[i] );
-      if ( it != solidsBef.end() )
-        return solids[i];
-    }
-    return 0;
+    return solids.oneCommon( solidsBef );
   }
   //================================================================================
   /*
    * Adds face IDs
    */
-  void B_IntersectPoint::Add( const vector< TGeomID >& fIDs,
+  bool B_IntersectPoint::Add( const vector< TGeomID >& fIDs,
                               const SMDS_MeshNode*     n) const
   {
+    size_t prevNbF = _faceIDs.size();
+
     if ( _faceIDs.empty() )
       _faceIDs = fIDs;
     else
@@ -1159,12 +1320,14 @@ namespace
       }
     if ( !_node )
       _node = n;
+
+    return prevNbF < _faceIDs.size();
   }
   //================================================================================
   /*
-   * Returns index of a common face if any, else zero
+   * Return ID of a common face if any, else zero
    */
-  int B_IntersectPoint::HasCommonFace( const B_IntersectPoint * other, int avoidFace ) const
+  TGeomID B_IntersectPoint::HasCommonFace( const B_IntersectPoint * other, TGeomID avoidFace ) const
   {
     if ( other )
       for ( size_t i = 0; i < other->_faceIDs.size(); ++i )
@@ -1175,9 +1338,25 @@ namespace
   }
   //================================================================================
   /*
-   * Returns \c true if \a faceID in in this->_faceIDs
+   * Return faces common with other point
    */
-  bool B_IntersectPoint::IsOnFace( int faceID ) const // returns true if faceID is found
+  size_t B_IntersectPoint::GetCommonFaces( const B_IntersectPoint * other, TGeomID* common ) const
+  {
+    size_t nbComm = 0;
+    if ( !other )
+      return nbComm;
+    if ( _faceIDs.size() > other->_faceIDs.size() )
+      return other->GetCommonFaces( this, common );
+    for ( const TGeomID& face : _faceIDs )
+      if ( other->IsOnFace( face ))
+        common[ nbComm++ ] = face;
+    return nbComm;
+  }
+  //================================================================================
+  /*
+   * Return \c true if \a faceID in in this->_faceIDs
+   */
+  bool B_IntersectPoint::IsOnFace( TGeomID faceID ) const // returns true if faceID is found
   {
     vector< TGeomID >::const_iterator it =
       std::find( _faceIDs.begin(), _faceIDs.end(), faceID );
@@ -1225,6 +1404,20 @@ namespace
                     s[indices[iDir*3]], s[indices[iDir*3+1]], s[indices[iDir*3+2]]);
     return li;
   }
+  //================================================================================
+  /*
+   * Return direction [0,1,2] of a GridLine
+   */
+  size_t Grid::GetLineDir( const GridLine* line, size_t & index ) const
+  {
+    for ( size_t iDir = 0; iDir < 3; ++iDir )
+      if ( &_lines[ iDir ][0] <= line && line <= &_lines[ iDir ].back() )
+      {
+        index = line - &_lines[ iDir ][0];
+        return iDir;
+      }
+    return -1;
+  }
   //=============================================================================
   /*
    * Creates GridLine's of the grid
@@ -1392,8 +1585,7 @@ namespace
     }
 
     TopTools_IndexedMapOfShape faces;
-    if ( _toCreateFaces || isSeveralSolids )
-      TopExp::MapShapes( theShapeToMesh, TopAbs_FACE, faces );
+    TopExp::MapShapes( theShapeToMesh, TopAbs_FACE, faces );
 
     // find boundary FACEs on boundary of mesh->ShapeToMesh()
     if ( _toCreateFaces )
@@ -1416,6 +1608,62 @@ namespace
           SetSolidFather( _helper->IthVertex( 1, edge ), theShapeToMesh );
         }
       }
+
+    // fill in _geometry._shape2NbNodes == find already meshed sub-shapes
+    _geometry._shape2NbNodes.Clear();
+    if ( mesh->NbNodes() > 0 )
+    {
+      for ( TopAbs_ShapeEnum type : { TopAbs_FACE, TopAbs_EDGE, TopAbs_VERTEX })
+        for ( TopExp_Explorer exp( theShapeToMesh, type ); exp.More(); exp.Next() )
+        {
+          if ( _geometry._shape2NbNodes.IsBound( exp.Current() ))
+            continue;
+          if ( SMESHDS_SubMesh* sm = mesh->GetMeshDS()->MeshElements( exp.Current() ))
+            if ( sm->NbNodes() > 0 )
+              _geometry._shape2NbNodes.Bind( exp.Current(), sm->NbNodes() );
+        }
+    }
+
+    // fill in Solid::_concaveVertex
+    vector< TGeomID > soleSolidID( 1, _geometry._soleSolid.ID() );
+    for ( int i = 1; i <= faces.Size(); ++i )
+    {
+      const TopoDS_Face& F = TopoDS::Face( faces( i ));
+      TError error;
+      TSideVector wires = StdMeshers_FaceSide::GetFaceWires( F, *mesh, 0, error,
+                                                             nullptr, nullptr, false );
+      for ( StdMeshers_FaceSidePtr& wire : wires )
+      {
+        const int nbEdges = wire->NbEdges();
+        if ( nbEdges < 2 && SMESH_Algo::isDegenerated( wire->Edge(0)))
+          continue;
+        for ( int iE1 = 0; iE1 < nbEdges; ++iE1 )
+        {
+          if ( SMESH_Algo::isDegenerated( wire->Edge( iE1 ))) continue;
+          int iE2 = ( iE1 + 1 ) % nbEdges;
+          while ( SMESH_Algo::isDegenerated( wire->Edge( iE2 )))
+            iE2 = ( iE2 + 1 ) % nbEdges;
+          TopoDS_Vertex V = wire->FirstVertex( iE2 );
+          double angle = _helper->GetAngle( wire->Edge( iE1 ),
+                                            wire->Edge( iE2 ), F, V );
+          if ( angle < -5. * M_PI / 180. )
+          {
+            TGeomID faceID = ShapeID( F );
+            const vector< TGeomID > & solids =
+              _geometry.IsOneSolid() ? soleSolidID : GetSolidIDs( faceID );
+            for ( const TGeomID & solidID : solids )
+            {
+              Solid* solid = GetSolid( solidID );
+              TGeomID   V1 = ShapeID( wire->FirstVertex( iE1 ));
+              TGeomID   V2 = ShapeID( wire->LastVertex ( iE2 ));
+              solid->SetConcave( ShapeID( V ), faceID,
+                                 wire->EdgeID( iE1 ), wire->EdgeID( iE2 ), V1, V2 );
+            }
+          }
+        }
+      }
+    }
+
     return;
   }
   //================================================================================
@@ -1504,8 +1752,10 @@ namespace
   //================================================================================
   /*
    * Assign to geometry a node at FACE intersection
+   * Return a found supporting VERTEX
    */
-  void Grid::SetOnShape( const SMDS_MeshNode* n, const F_IntersectPoint& ip, bool unset )
+  void Grid::SetOnShape( const SMDS_MeshNode* n, const F_IntersectPoint& ip,
+                         TopoDS_Vertex* vertex, bool unset )
   {
     TopoDS_Shape s;
     SMESHDS_Mesh* mesh = _helper->GetMeshDS();
@@ -1517,6 +1767,8 @@ namespace
     {
       if ( unset ) mesh->UnSetNodeOnShape( n );
       mesh->SetNodeOnVertex( n, TopoDS::Vertex( s ));
+      if ( vertex )
+        *vertex = TopoDS::Vertex( s );
     }
     else if ( _geometry._edgeClassifier.IsSatisfy( n, &s ))
     {
@@ -1533,6 +1785,23 @@ namespace
     }
   }
   //================================================================================
+  /*
+   * Fill in B_IntersectPoint::_faceIDs with all FACEs sharing a VERTEX
+   */
+  void Grid::UpdateFacesOfVertex( const B_IntersectPoint& ip, const TopoDS_Vertex& vertex )
+  {
+    if ( vertex.IsNull() )
+      return;
+    std::vector< int > faceID(1);
+    PShapeIteratorPtr fIt = _helper->GetAncestors( vertex, *_helper->GetMesh(),
+                                                   TopAbs_FACE, & _geometry._mainShape );
+    while ( const TopoDS_Shape* face = fIt->next() )
+    {
+      faceID[ 0 ] = ShapeID( *face );
+      ip.Add( faceID );
+    }
+  }
+  //================================================================================
   /*
    * Initialize a classifier
    */
@@ -1618,9 +1887,9 @@ namespace
   {
     // state of each node of the grid relative to the geometry
     const size_t nbGridNodes = _coords[0].size() * _coords[1].size() * _coords[2].size();
-    const TGeomID undefID = 1e+9;
-    vector< TGeomID > shapeIDVec( nbGridNodes, undefID );
+    vector< TGeomID > shapeIDVec( nbGridNodes, theUndefID );
     _nodes.resize( nbGridNodes, 0 );
+    _allBorderNodes.resize( nbGridNodes, 0 );
     _gridIntP.resize( nbGridNodes, NULL );
 
     SMESHDS_Mesh* mesh = helper.GetMeshDS();
@@ -1671,17 +1940,20 @@ namespace
               if ( ++nodeCoord <  coordEnd )
                 nodeParam = *nodeCoord - *coord0;
               else
-                break;
+                break;                
             }
             if ( nodeCoord == coordEnd ) break;
           }
+          
           // create a mesh node on a GridLine at ip if it does not coincide with a grid node
           if ( nodeParam > ip->_paramOnLine + _tol )
           {
             gp_XYZ xyz = lineLoc + ip->_paramOnLine * lineDir;
             ip->_node = mesh->AddNode( xyz.X(), xyz.Y(), xyz.Z() );
             ip->_indexOnLine = nodeCoord-coord0-1;
-            SetOnShape( ip->_node, *ip );
+            TopoDS_Vertex v;
+            SetOnShape( ip->_node, *ip, & v );
+            UpdateFacesOfVertex( *ip, v );
           }
           // create a mesh node at ip coincident with a grid node
           else
@@ -1718,7 +1990,7 @@ namespace
         {
           size_t nodeIndex = NodeIndex( x, y, z );
           if ( !_nodes[ nodeIndex ] &&
-               0 < shapeIDVec[ nodeIndex ] && shapeIDVec[ nodeIndex ] < undefID )
+               0 < shapeIDVec[ nodeIndex ] && shapeIDVec[ nodeIndex ] < theUndefID )
           {
             gp_XYZ xyz = ( _coords[0][x] * _axes[0] +
                            _coords[1][y] * _axes[1] +
@@ -1729,7 +2001,17 @@ namespace
           else if ( _nodes[ nodeIndex ] && _gridIntP[ nodeIndex ] /*&&
                     !_nodes[ nodeIndex]->GetShapeID()*/ )
           {
-            SetOnShape( _nodes[ nodeIndex ], *_gridIntP[ nodeIndex ]);
+            TopoDS_Vertex v;
+            SetOnShape( _nodes[ nodeIndex ], *_gridIntP[ nodeIndex ], & v );
+            UpdateFacesOfVertex( *_gridIntP[ nodeIndex ], v );
+          }
+          else if ( _toUseQuanta && !_allBorderNodes[ nodeIndex ] /*add all nodes outside the body. Used to reconstruct the hexahedrals when polys are not desired!*/)
+          {
+            gp_XYZ xyz = ( _coords[0][x] * _axes[0] +
+                           _coords[1][y] * _axes[1] +
+                           _coords[2][z] * _axes[2] );
+            _allBorderNodes[ nodeIndex ] = mesh->AddNode( xyz.X(), xyz.Y(), xyz.Z() );
+            mesh->SetNodeInVolume( _allBorderNodes[ nodeIndex ], shapeIDVec[ nodeIndex ]);
           }
         }
 
@@ -1747,11 +2029,11 @@ namespace
         {
           if ( intPnts.begin()->_transition != Trans_TANGENT &&
                intPnts.begin()->_transition != Trans_APEX )
-          throw SMESH_ComputeError (COMPERR_ALGO_FAILED,
-                                    SMESH_Comment("Wrong SOLE transition of GridLine (")
-                                    << li._curInd[li._iVar1] << ", " << li._curInd[li._iVar2]
-                                    << ") along " << li._nameConst
-                                    << ": " << trName[ intPnts.begin()->_transition] );
+            throw SMESH_ComputeError (COMPERR_ALGO_FAILED,
+                                      SMESH_Comment("Wrong SOLE transition of GridLine (")
+                                      << li._curInd[li._iVar1] << ", " << li._curInd[li._iVar2]
+                                      << ") along " << li._nameConst
+                                      << ": " << trName[ intPnts.begin()->_transition] );
         }
         else
         {
@@ -1766,11 +2048,13 @@ namespace
                                       SMESH_Comment("Wrong END transition of GridLine (")
                                       << li._curInd[li._iVar1] << ", " << li._curInd[li._iVar2]
                                       << ") along " << li._nameConst
-                                    << ": " << trName[ intPnts.rbegin()->_transition ]);
+                                      << ": " << trName[ intPnts.rbegin()->_transition ]);
         }
       }
     }
 #endif
+
+    return;
   }
 
   //=============================================================================
@@ -2217,11 +2501,9 @@ namespace
         tgtLink._link    = _hexLinks + ( srcLink._link - other._hexLinks );
       }
     }
-#ifdef _DEBUG_
-    _cellID = cellID;
-#else
-    (void)cellID; // unused in release mode
-#endif
+    
+    if (SALOME::VerbosityActivated())
+      _cellID = cellID;
   }
 
   //================================================================================
@@ -2403,11 +2685,16 @@ namespace
     {
       _hexNodes[iN]._isInternalFlags = 0;
 
+      // Grid  node 
       _hexNodes[iN]._node     = _grid->_nodes   [ _origNodeInd + _grid->_nodeShift[iN] ];
       _hexNodes[iN]._intPoint = _grid->_gridIntP[ _origNodeInd + _grid->_nodeShift[iN] ];
 
+      if ( _grid->_allBorderNodes[ _origNodeInd + _grid->_nodeShift[iN] ] ) 
+        _hexNodes[iN]._boundaryCornerNode = _grid->_allBorderNodes [ _origNodeInd + _grid->_nodeShift[iN] ];
+      
       if ( _hexNodes[iN]._node && !solid->Contains( _hexNodes[iN]._node->GetShapeID() ))
         _hexNodes[iN]._node = 0;
+
       if ( _hexNodes[iN]._intPoint && !solid->ContainsAny( _hexNodes[iN]._intPoint->_faceIDs ))
         _hexNodes[iN]._intPoint = 0;
 
@@ -2427,7 +2714,7 @@ namespace
     if ( _nbFaceIntNodes + _eIntPoints.size()                  > 0 &&
          _nbFaceIntNodes + _eIntPoints.size() + _nbCornerNodes > 3)
     {
-      _intNodes.reserve( 3 * _nbBndNodes + _nbFaceIntNodes + _eIntPoints.size() );
+      _intNodes.reserve( 3 * ( _nbBndNodes + _nbFaceIntNodes + _eIntPoints.size() ));
 
       // this method can be called in parallel, so use own helper
       SMESH_MesherHelper helper( *_grid->_helper->GetMesh() );
@@ -2499,7 +2786,7 @@ namespace
       // 1) add this->_eIntPoints to _Face::_eIntNodes
       // 2) fill _intNodes and _vIntNodes
       //
-      const double tol2 = _grid->_tol * _grid->_tol;
+      const double tol2 = _grid->_tol * _grid->_tol * 4;
       int facets[3], nbFacets, subEntity;
 
       for ( int iF = 0; iF < 6; ++iF )
@@ -2635,7 +2922,7 @@ namespace
       solid = _grid->GetSolid();
       if ( !_grid->_geometry.IsOneSolid() )
       {
-        TGeomID solidIDs[20];
+        TGeomID solidIDs[20] = { 0 };
         size_t nbSolids = getSolids( solidIDs );
         if ( nbSolids > 1 )
         {
@@ -2694,6 +2981,26 @@ namespace
     if ( intFlag & IS_CUT_BY_INTERNAL_FACE && !_grid->_toAddEdges ) // Issue #19913
       preventVolumesOverlapping();
 
+    std::set< TGeomID > concaveFaces; // to avoid connecting nodes laying on them
+
+    if ( solid->HasConcaveVertex() )
+    {
+      for ( const E_IntersectPoint* ip : _eIntPoints )
+      {
+        if ( const ConcaveFace* cf = solid->GetConcave( ip->_shapeID ))
+          if ( this->hasEdgesAround( cf ))
+            concaveFaces.insert( cf->_concaveFace );
+      }
+      if ( concaveFaces.empty() || concaveFaces.size() * 3  < _eIntPoints.size() )
+        for ( const _Node& hexNode: _hexNodes )
+        {
+          if ( hexNode._node && hexNode._intPoint && hexNode._intPoint->_faceIDs.size() >= 3 )
+            if ( const ConcaveFace* cf = solid->GetConcave( hexNode._node->GetShapeID() ))
+              if ( this->hasEdgesAround( cf ))
+                concaveFaces.insert( cf->_concaveFace );
+        }
+    }
+
     // Create polygons from quadrangles
     // --------------------------------
 
@@ -2715,9 +3022,16 @@ namespace
 
       splits.clear();
       for ( int iE = 0; iE < 4; ++iE ) // loop on 4 sides of a quadrangle
-        for ( int iS = 0; iS < quad._links[ iE ].NbResultLinks(); ++iS )
+        for ( size_t iS = 0; iS < quad._links[ iE ].NbResultLinks(); ++iS )
           splits.push_back( quad._links[ iE ].ResultLink( iS ));
 
+      if ( splits.size() == 4 &&
+           isQuadOnFace( iF )) // check if a quad on FACE is not split
+      {
+        polygon->_links.swap( splits );
+        continue; // goto the next quad
+      }
+
       // add splits of links to a polygon and add _polyLinks to make
       // polygon's boundary closed
 
@@ -2766,7 +3080,8 @@ namespace
                 ( n1->_isInternalFlags )))
           {
             // n1 is at intersection with EDGE
-            if ( findChainOnEdge( splits, polygon->_links.back(), split, iS, quad, chainNodes ))
+            if ( findChainOnEdge( splits, polygon->_links.back(), split, concaveFaces,
+                                  iS, quad, chainNodes ))
             {
               for ( size_t i = 1; i < chainNodes.size(); ++i )
                 polygon->AddPolyLink( chainNodes[i-1], chainNodes[i], prevPolyg );
@@ -2914,11 +3229,12 @@ namespace
       }
     }
 
-    set<TGeomID> usedFaceIDs;
-    vector< TGeomID > faces;
+    std::set<TGeomID> usedFaceIDs;
+    std::vector< TGeomID > faces;
     TGeomID curFace = 0;
     const size_t nbQuadPolygons = _polygons.size();
     E_IntersectPoint ipTmp;
+    std::map< TGeomID, std::vector< const B_IntersectPoint* > > tmpAddedFace; // face added to _intPoint
 
     // create polygons by making closed chains of free links
     size_t iPolygon = _polygons.size();
@@ -3082,7 +3398,10 @@ namespace
 
       if ( polygon._links.size() < 2 ||
            polygon._links[0].LastNode() != polygon._links.back().FirstNode() )
-        return false; // closed polygon not found -> invalid polyhedron
+      {
+        _polygons.clear();
+        break; // closed polygon not found -> invalid polyhedron
+      }
 
       if ( polygon._links.size() == 2 )
       {
@@ -3177,8 +3496,11 @@ namespace
                     for ( int iN = 0; iN < 2; ++iN )
                     {
                       _Node* n = freeLinks[ iL3 ]->_link->_nodes[ iN ];
-                      if ( n->_intPoint ) n->_intPoint->Add( ipTmp._faceIDs );
-                      else                n->_intPoint = &ipTmp;
+                      bool added = false;
+                      if ( n->_intPoint ) added = n->_intPoint->Add( ipTmp._faceIDs );
+                      else                        n->_intPoint = &ipTmp;
+                      if ( added )
+                        tmpAddedFace[ ipTmp._faceIDs[0] ].push_back( n->_intPoint );
                     }
                     break;
                   }
@@ -3203,8 +3525,23 @@ namespace
       } // end of case ( polygon._links.size() > 2 )
     } // while ( nbFreeLinks > 0 )
 
+    for ( auto & face_ip : tmpAddedFace )
+    {
+      curFace = face_ip.first;
+      for ( const B_IntersectPoint* ip : face_ip.second )
+      {
+        auto it = std::find( ip->_faceIDs.begin(), ip->_faceIDs.end(), curFace );
+        if ( it != ip->_faceIDs.end() )
+          ip->_faceIDs.erase( it );
+      }
+    }
+
+    if ( _polygons.size() < 3 )
+      return false;
+
     // check volume size
-    _hasTooSmall = ! checkPolyhedronSize( intFlag & IS_CUT_BY_INTERNAL_FACE );
+    double volSize = 0;
+    _hasTooSmall = ! checkPolyhedronSize( intFlag & IS_CUT_BY_INTERNAL_FACE, volSize );
 
     for ( size_t i = 0; i < 8; ++i )
       if ( _hexNodes[ i ]._intPoint == &ipTmp )
@@ -3246,12 +3583,11 @@ namespace
     _volumeDefs._nodes.clear();
     _volumeDefs._quantities.clear();
     _volumeDefs._names.clear();
-
     // create a classic cell if possible
 
     int nbPolygons = 0;
     for ( size_t iF = 0; iF < _polygons.size(); ++iF )
-      nbPolygons += (_polygons[ iF ]._links.size() > 0 );
+      nbPolygons += (_polygons[ iF ]._links.size() > 2 );
 
     //const int nbNodes = _nbCornerNodes + nbIntersections;
     int nbNodes = 0;
@@ -3270,7 +3606,7 @@ namespace
       for ( size_t iF = 0; iF < _polygons.size(); ++iF )
       {
         const size_t nbLinks = _polygons[ iF ]._links.size();
-        if ( nbLinks == 0 ) continue;
+        if ( nbLinks < 3 ) continue;
         _volumeDefs._quantities.push_back( nbLinks );
         _volumeDefs._names.push_back( _polygons[ iF ]._name );
         for ( size_t iL = 0; iL < nbLinks; ++iL )
@@ -3278,6 +3614,7 @@ namespace
       }
     }
     _volumeDefs._solidID = solid->ID();
+    _volumeDefs._size    = volSize;
 
     return !_volumeDefs._nodes.empty();
   }
@@ -3386,7 +3723,7 @@ namespace
       }
       else if ( _nbCornerNodes > 3 && !hex )
       {
-        // all intersection of hex with geometry are at grid nodes
+        // all intersections of hex with geometry are at grid nodes
         hex = new Hexahedron( *this, _i, _j, _k, i );
         intHexa.push_back( hex );
       }
@@ -3428,6 +3765,22 @@ namespace
           hex->getBoundaryElems( boundaryVolumes );
     }
 
+    // merge nodes on outer sub-shapes with pre-existing ones
+    TopTools_DataMapIteratorOfDataMapOfShapeInteger s2nIt( _grid->_geometry._shape2NbNodes );
+    for ( ; s2nIt.More(); s2nIt.Next() )
+      if ( s2nIt.Value() > 0 )
+        if ( SMESHDS_SubMesh* sm = mesh->MeshElements( s2nIt.Key() ))
+        {
+          TIDSortedNodeSet smNodes( SMDS_MeshElement::iterator( sm->GetNodes() ),
+                                    SMDS_MeshElement::iterator() );
+          SMESH_MeshEditor::TListOfListOfNodes equalNodes;
+          SMESH_MeshEditor editor( helper.GetMesh() );
+          editor.FindCoincidentNodes( smNodes, 10 * _grid->_tol, equalNodes,
+                                      /*SeparateCornersAndMedium =*/ false);
+          if ((int) equalNodes.size() <= s2nIt.Value() )
+            editor.MergeNodes( equalNodes );
+        }
+
     // create boundary mesh faces
     addFaces( helper, boundaryVolumes );
 
@@ -3541,6 +3894,7 @@ namespace
           ip._point   = p1;
           ip._shapeID = _grid->ShapeID( v1 );
           vip = _grid->Add( ip );
+          _grid->UpdateFacesOfVertex( *vip, v1 );
           if ( isInternal )
             vip->_faceIDs.push_back( _grid->PseudoIntExtFaceID() );
           if ( !addIntersection( vip, hexes, ijk, d000 ))
@@ -3601,9 +3955,12 @@ namespace
           ijk[ iDirZ ] = iZ1;
           bool sameV = ( v1.IsSame( v2 ));
           if ( !sameV )
+          {
             vip = _grid->Add( ip );
-          if ( isInternal && !sameV )
-            vip->_faceIDs.push_back( _grid->PseudoIntExtFaceID() );
+            _grid->UpdateFacesOfVertex( *vip, v2 );
+            if ( isInternal )
+              vip->_faceIDs.push_back( _grid->PseudoIntExtFaceID() );
+          }
           if ( !addIntersection( vip, hexes, ijk, d000 ) && !sameV )
             _grid->Remove( vip );
           ip._shapeID = edgeID;
@@ -3966,16 +4323,64 @@ namespace
         h->_eIntPoints.reserve(2);
         h->_eIntPoints.push_back( ip );
         added = true;
-#ifdef _DEBUG_
+
         // check if ip is really inside the hex
-        if ( h->isOutParam( ip->_uvw ))
+        if (SALOME::VerbosityActivated() && h->isOutParam( ip->_uvw ))
           throw SALOME_Exception("ip outside a hex");
-#endif
       }
     }
     return added;
   }
   //================================================================================
+  /*!
+   * \brief Check if a hexahedron facet lies on a FACE
+   *        Also return true if the facet does not interfere with any FACE
+   */
+  bool Hexahedron::isQuadOnFace( const size_t iQuad )
+  {
+    _Face& quad = _hexQuads[ iQuad ] ;
+
+    int nbGridNodesInt = 0; // nb FACE intersections at grid nodes
+    int nbNoGeomNodes  = 0;
+    for ( int iE = 0; iE < 4; ++iE )
+    {
+      nbNoGeomNodes = ( !quad._links[ iE ].FirstNode()->_intPoint &&
+                        quad._links[ iE ].NbResultLinks() == 1      );
+      nbGridNodesInt +=
+        ( quad._links[ iE ].FirstNode()->_intPoint &&
+          quad._links[ iE ].NbResultLinks() == 1   &&
+          quad._links[ iE ].ResultLink( 0 ).FirstNode() == quad._links[ iE ].FirstNode() &&
+          quad._links[ iE ].ResultLink( 0 ).LastNode()  == quad._links[ iE ].LastNode()   );
+    }
+    if ( nbNoGeomNodes == 4 )
+      return true;
+
+    if ( nbGridNodesInt == 4 ) // all quad nodes are at FACE intersection
+    {
+      size_t iEmin = 0, minNbFaces = 1000;
+      for ( int iE = 0; iE < 4; ++iE ) // look for a node with min nb FACEs
+      {
+        size_t nbFaces = quad._links[ iE ].FirstNode()->faces().size();
+        if ( minNbFaces > nbFaces )
+        {
+          iEmin = iE;
+          minNbFaces = nbFaces;
+        }
+      }
+      // check if there is a FACE passing through all 4 nodes
+      for ( const TGeomID& faceID : quad._links[ iEmin ].FirstNode()->faces() )
+      {
+        bool allNodesAtFace = true;
+        for ( size_t iE = 0; iE < 4 &&  allNodesAtFace; ++iE )
+          allNodesAtFace = ( iE == iEmin ||
+                             quad._links[ iE ].FirstNode()->IsOnFace( faceID ));
+        if ( allNodesAtFace ) // quad if on faceID
+          return true;
+      }
+    }
+    return false;
+  }
+  //================================================================================
   /*!
    * \brief Finds nodes at a path from one node to another via intersections with EDGEs
    */
@@ -4026,8 +4431,8 @@ namespace
       return false;
     vector< _OrientedLink > newLinks;
     // find a node lying on the same FACE as the last one
-    _Node*   node = polygon->_links.back().LastNode();
-    int avoidFace = node->IsLinked( polygon->_links.back().FirstNode()->_intPoint );
+    _Node*       node = polygon->_links.back().LastNode();
+    TGeomID avoidFace = node->IsLinked( polygon->_links.back().FirstNode()->_intPoint );
     for ( i = nbLinks - 2; i >= 0; --i )
       if ( node->IsLinked( polygon->_links[i].FirstNode()->_intPoint, avoidFace ))
         break;
@@ -4070,19 +4475,20 @@ namespace
   bool Hexahedron::findChainOnEdge( const vector< _OrientedLink >& splits,
                                     const _OrientedLink&           prevSplit,
                                     const _OrientedLink&           avoidSplit,
+                                    const std::set< TGeomID > &    concaveFaces,
                                     size_t &                       iS,
                                     _Face&                         quad,
                                     vector<_Node*>&                chn )
   {
     _Node* pn1 = prevSplit.FirstNode();
-    _Node* pn2 = prevSplit.LastNode();
-    int avoidFace = pn1->IsLinked( pn2->_intPoint ); // FACE under the quad
+    _Node* pn2 = prevSplit.LastNode(); // pn2 is on EDGE, if not on INTERNAL FACE
+    _Node* an3 = avoidSplit.LastNode();
+    TGeomID avoidFace = pn1->IsLinked( pn2->_intPoint ); // FACE under the quad
     if ( avoidFace < 1 && pn1->_intPoint )
       return false;
 
-    _Node* n = 0, *stopNode = avoidSplit.LastNode();
-
     chn.clear();
+
     if ( !quad._eIntNodes.empty() ) // connect pn2 with EDGE intersections
     {
       chn.push_back( pn2 );
@@ -4103,28 +4509,82 @@ namespace
       pn2 = chn.back();
     }
 
-    int i;
-    for ( i = splits.size()-1; i >= 0; --i ) // connect new pn2 (at _eIntNodes) with a split
+    _Node* n = 0, *stopNode = avoidSplit.LastNode();
+
+    if ( pn2 == prevSplit.LastNode() && // pn2 is at avoidSplit.FirstNode()
+         !isCorner( stopNode ))         // stopNode is in the middle of a _hexLinks
+    {
+      // move stopNode to a _hexNodes
+      for ( int iE = 0; iE < 4; ++iE ) // loop on 4 sides of a quadrangle
+        for ( size_t iL = 0; iL < quad._links[ iE ].NbResultLinks(); ++iL )
+        {
+          const _Link* sideSplit = & quad._links[ iE ]._link->_splits[ iL ];
+          if ( sideSplit == avoidSplit._link )
+          {
+            if ( quad._links[ iE ].LastNode()->Node() )
+              stopNode = quad._links[ iE ].LastNode();
+            iE = 4;
+            break;
+          }
+        }
+    }
+
+    // connect pn2 (probably new, at _eIntNodes) with a split
+
+    int i, iConn = 0;
+    size_t nbCommon;
+    TGeomID commonFaces[20];
+    _Node* nPrev = nullptr;
+    for ( i = splits.size()-1; i >= 0; --i )
     {
       if ( !splits[i] )
         continue;
 
-      n = splits[i].LastNode();
-      if ( n == stopNode )
-        break;
-      if (( n != pn1 ) &&
-          ( n->IsLinked( pn2->_intPoint, avoidFace )) &&
-          ( !avoidFace || n->IsOnFace( avoidFace )))
-        break;
+      bool stop = false;
+      for ( int is1st = 0; is1st < 2; ++is1st )
+      {
+        _Node* nConn = is1st ? splits[i].FirstNode() : splits[i].LastNode();
+        if ( nConn == nPrev )
+        {
+          if ( n == nConn )
+            iConn = i;
+          continue;
+        }
+        nPrev = nConn;
+        if (( stop = ( nConn == stopNode )))
+          break;
+        // find a FACE connecting nConn with pn2 but not with an3
+        if (( nConn != pn1 ) &&
+            ( nConn->_intPoint && !nConn->_intPoint->_faceIDs.empty() ) &&
+            ( nbCommon = nConn->GetCommonFaces( pn2->_intPoint, commonFaces )))
+        {
+          bool a3Coonect = true;
+          for ( size_t iF = 0; iF < nbCommon &&  a3Coonect; ++iF )
+            a3Coonect = an3->IsOnFace( commonFaces[ iF ]) || concaveFaces.count( commonFaces[ iF ]);
+          if ( a3Coonect )
+            continue;
 
-      n = splits[i].FirstNode();
-      if ( n == stopNode )
-        break;
-      if (( n->IsLinked( pn2->_intPoint, avoidFace )) &&
-          ( !avoidFace || n->IsOnFace( avoidFace )))
+          if ( !n )
+          {
+            n = nConn;
+            iConn = i + !is1st;
+          }
+          if ( nbCommon > 1 ) // nConn is linked with pn2 by an EDGE
+          {
+            n = nConn;
+            iConn = i + !is1st;
+            stop = true;
+            break;
+          }
+        }
+      }
+      if ( stop )
+      {
+        i = iConn;
         break;
-      n = 0;
+      }
     }
+
     if ( n && n != stopNode )
     {
       if ( chn.empty() )
@@ -4136,8 +4596,8 @@ namespace
     else if ( !chn.empty() && chn.back()->_isInternalFlags )
     {
       // INTERNAL FACE partially cuts the quad
-      for ( int i = chn.size() - 2; i >= 0; --i )
-        chn.push_back( chn[ i ]);
+      for ( int ip = chn.size() - 2; ip >= 0; --ip )
+        chn.push_back( chn[ ip ]);
       return true;
     }
     return false;
@@ -4370,6 +4830,7 @@ namespace
   {
     F_IntersectPoint noIntPnt;
     const bool toCheckNodePos = _grid->IsToCheckNodePos();
+    const bool useQuanta      = _grid->_toUseQuanta;
 
     int nbAdded = 0;
     // add elements resulted from hexahedron intersection
@@ -4408,18 +4869,49 @@ namespace
             mesh->SetNodeOnEdge( nodes[iN], shapeID );
         }
         else if ( toCheckNodePos &&
-                  !nodes[iN]->isMarked() && 
+                  !nodes[iN]->isMarked() &&
                   _grid->ShapeType( nodes[iN]->GetShapeID() ) == TopAbs_FACE )
         {
-          _grid->SetOnShape( nodes[iN], noIntPnt, /*unset=*/true );
+          _grid->SetOnShape( nodes[iN], noIntPnt, /*v=*/nullptr,/*unset=*/true );
           nodes[iN]->setIsMarked( true );
         }
-      }
+      } // loop to get nodes
 
-      const SMDS_MeshElement* v = 0;
+      const SMDS_MeshElement* v = 0;      
       if ( !volDef->_quantities.empty() )
-      {
-        v = helper.AddPolyhedralVolume( nodes, volDef->_quantities );
+      {                      
+        if ( !useQuanta )
+        {
+          // split polyhedrons of with disjoint volumes
+          std::vector<std::vector<int>> splitQuantities;
+          std::vector<std::vector< const SMDS_MeshNode* > > splitNodes;
+          if ( checkPolyhedronValidity( volDef, splitQuantities, splitNodes ) == 1 )
+            v = addPolyhedronToMesh( volDef, helper, nodes, volDef->_quantities );
+          else
+          {
+            int counter = -1;
+            for (size_t id = 0; id < splitQuantities.size(); id++)
+            {
+              v = addPolyhedronToMesh( volDef, helper, splitNodes[ id ], splitQuantities[ id ] );
+              if ( id < splitQuantities.size()-1 )
+                volDef->_brotherVolume.push_back( v );
+              counter++;
+            }
+            nbAdded += counter;
+          }
+        }
+        else
+        {
+          const double quanta = _grid->_quanta;
+          double polyVol      = volDef->_size;
+          double hexaVolume   = _sideLength[0] * _sideLength[1] * _sideLength[2];          
+          if ( hexaVolume > 0.0 && polyVol/hexaVolume >= quanta /*set the volume if the relation is satisfied*/)
+            v = helper.AddVolume( _hexNodes[0].BoundaryNode(), _hexNodes[2].BoundaryNode(),
+                                  _hexNodes[3].BoundaryNode(), _hexNodes[1].BoundaryNode(),
+                                  _hexNodes[4].BoundaryNode(), _hexNodes[6].BoundaryNode(),
+                                  _hexNodes[7].BoundaryNode(), _hexNodes[5].BoundaryNode() );
+          
+        }
       }
       else
       {
@@ -4436,10 +4928,50 @@ namespace
           break;
         }
       }
-      if (( volDef->_volume = v ))
+      volDef->_volume = v;
+      nbAdded += bool( v );
+
+    } // loop on _volumeDefs chain
+
+    // avoid creating overlapping volumes (bos #24052)
+    if ( nbAdded > 1 )
+    {
+      double sumSize = 0, maxSize = 0;
+      _volumeDef* maxSizeDef = nullptr;
+      for ( _volumeDef* volDef = &_volumeDefs; volDef; volDef = volDef->_next )
       {
-        helper.GetMeshDS()->SetMeshElementOnShape( v, volDef->_solidID );
-        ++nbAdded;
+        if ( !volDef->_volume )
+          continue;
+        sumSize += volDef->_size;
+        if ( volDef->_size > maxSize )
+        {
+          maxSize    = volDef->_size;
+          maxSizeDef = volDef;
+        }
+      }
+      if ( sumSize > _sideLength[0] * _sideLength[1] * _sideLength[2] * 1.05 )
+      {
+        for ( _volumeDef* volDef = &_volumeDefs; volDef; volDef = volDef->_next )
+          if ( volDef != maxSizeDef && volDef->_volume )
+          {
+            helper.GetMeshDS()->RemoveFreeElement( volDef->_volume, /*sm=*/nullptr,
+                                                   /*fromGroups=*/false );
+            volDef->_volume = nullptr;
+            //volDef->_nodes.clear();
+            --nbAdded;
+          }
+      }
+    }
+
+    for ( _volumeDef* volDef = &_volumeDefs; volDef; volDef = volDef->_next )
+    {
+      if ( volDef->_volume )
+      {
+        helper.GetMeshDS()->SetMeshElementOnShape( volDef->_volume, volDef->_solidID );
+        for (auto broVol : volDef->_brotherVolume )
+        {
+          helper.GetMeshDS()->SetMeshElementOnShape( broVol, volDef->_solidID );
+        }
       }
     }
 
@@ -4448,6 +4980,8 @@ namespace
   //================================================================================
   /*!
    * \brief Return true if the element is in a hole
+   * \remark consider a cell to be in a hole if all links in any direction
+   *          comes OUT of geometry
    */
   bool Hexahedron::isInHole() const
   {
@@ -4542,8 +5076,10 @@ namespace
   /*!
    * \brief Return true if a polyhedron passes _sizeThreshold criterion
    */
-  bool Hexahedron::checkPolyhedronSize( bool cutByInternalFace ) const
+  bool Hexahedron::checkPolyhedronSize( bool cutByInternalFace, double & volume) const
   {
+    volume = 0;
+
     if ( cutByInternalFace && !_grid->_toUseThresholdForInternalFaces )
     {
       // check if any polygon fully lies on shared/internal FACEs
@@ -4563,10 +5099,6 @@ namespace
           return true;
       }
     }
-    if ( this->hasStrangeEdge() )
-      return true;
-
-    double volume = 0;
     for ( size_t iP = 0; iP < _polygons.size(); ++iP )
     {
       const _Face& polygon = _polygons[iP];
@@ -4584,10 +5116,166 @@ namespace
     }
     volume /= 6;
 
+    if ( this->hasStrangeEdge() && volume > 1e-13 )
+      return true;
+
     double initVolume = _sideLength[0] * _sideLength[1] * _sideLength[2];
 
     return volume > initVolume / _grid->_sizeThreshold;
   }
+
+  //================================================================================
+  /*!
+   * \brief Check that all faces in polyhedron are connected so a unique volume is defined.
+   *        We test that it is possible to go from any node to all nodes in the polyhedron.
+   *        The set of nodes that can be visit within then defines a unique element.
+   *        In case more than one polyhedron is detected. The function return the set of quantities and nodes defining separates elements.
+   *        Reference to issue #bos[38521][EDF] Generate polyhedron with separate volume.
+   */
+  int Hexahedron::checkPolyhedronValidity( _volumeDef* volDef, std::vector<std::vector<int>>& splitQuantities, 
+                                           std::vector<std::vector<const SMDS_MeshNode*>>& splitNodes )
+  {  
+    int mySet = 1;
+    std::map<int,int> numberOfSets; // define set id with the number of faces associated!
+    if ( !volDef->_quantities.empty() )
+    {
+      auto connectivity = volDef->_quantities;
+      int accum = 0;
+      std::vector<bool> allFaces( connectivity.size(), false );
+      std::set<int> elementSet;
+      allFaces[ 0 ] = true; // the first node below to the first face
+      size_t connectedFaces = 1;
+      // Start filling the set with the nodes of the first face
+      splitQuantities.push_back( { connectivity[ 0 ] } );
+      splitNodes.push_back( { volDef->_nodes[ 0 ].Node() } );
+      elementSet.insert( volDef->_nodes[ 0 ].Node()->GetID() );
+      for (int n = 1; n < connectivity[ 0 ]; n++)
+      {
+        elementSet.insert( volDef->_nodes[ n ].Node()->GetID() );
+        splitNodes.back().push_back( volDef->_nodes[ n ].Node() );
+      }
+      
+      numberOfSets.insert( std::pair<int,int>(mySet,1) );
+      while ( connectedFaces != allFaces.size() )
+      {
+        for (size_t innerId = 1; innerId < connectivity.size(); innerId++)
+        {
+          if ( innerId == 1 )
+            accum = connectivity[ 0 ];
+
+          if ( !allFaces[ innerId ] )
+          {
+            int faceCounter = 0;
+            for (int n = 0; n < connectivity[ innerId ]; n++)
+            {
+              int nodeId = volDef->_nodes[ accum + n ].Node()->GetID();
+              if ( elementSet.count( nodeId ) != 0 ) 
+                faceCounter++;
+            }
+            if ( faceCounter >= 2 ) // found coincidences nodes
+            {
+              for (int n = 0; n < connectivity[ innerId ]; n++)
+              {
+                int nodeId = volDef->_nodes[ accum + n ].Node()->GetID();
+                // insert new nodes so other faces can be identified as belowing to the element
+                splitNodes.back().push_back( volDef->_nodes[ accum + n ].Node() );
+                elementSet.insert( nodeId );
+              }
+              allFaces[ innerId ] = true;
+              splitQuantities.back().push_back( connectivity[ innerId ] );
+              numberOfSets[ mySet ]++;
+              connectedFaces++;
+              innerId = 0; // to restart searching!
+            }
+          }
+          accum += connectivity[ innerId ];
+        }
+
+        if ( connectedFaces != allFaces.size() )
+        {
+          // empty the set, and fill it with nodes of a unvisited face!
+          elementSet.clear();
+          accum = connectivity[ 0 ];
+          for (size_t faceId = 1; faceId < connectivity.size(); faceId++)
+          {
+            if ( !allFaces[ faceId ] )
+            {
+              splitNodes.push_back( { volDef->_nodes[ accum ].Node() } );
+              elementSet.insert( volDef->_nodes[ accum ].Node()->GetID() );
+              for (int n = 1; n < connectivity[ faceId ]; n++)
+              {
+                elementSet.insert( volDef->_nodes[ accum + n ].Node()->GetID() );
+                splitNodes.back().push_back( volDef->_nodes[ accum + n ].Node() );
+              }
+
+              splitQuantities.push_back( { connectivity[ faceId ] } );
+              allFaces[ faceId ] = true;
+              connectedFaces++;
+              break;
+            }
+            accum += connectivity[ faceId ];
+          }
+          mySet++;
+          numberOfSets.insert( std::pair<int,int>(mySet,1) );
+        }
+      }
+
+      if ( numberOfSets.size() > 1 )
+      {
+        bool allMoreThan2Faces = true;
+        for( auto k : numberOfSets )
+        {
+          if ( k.second <= 2 )
+            allMoreThan2Faces &= false;
+        }
+        
+        if ( allMoreThan2Faces )
+        {        
+          // The separate objects are suspect to be closed
+          return numberOfSets.size();        
+        }
+        else
+        {
+          // Have to index the last face nodes to the final set
+          // contrary case return as it were a valid polyhedron for backward compatibility
+          return 1;  
+        }
+      }
+    }
+    return numberOfSets.size();
+  }
+
+  
+  //================================================================================
+  /*!
+   * \brief add original or separated polyhedrons to the mesh
+   */
+  const SMDS_MeshElement* Hexahedron::addPolyhedronToMesh( _volumeDef* volDef,  SMESH_MesherHelper& helper, const std::vector<const SMDS_MeshNode*>& nodes, 
+                                                            const std::vector<int>& quantities )
+  {
+    const SMDS_MeshElement* v = helper.AddPolyhedralVolume( nodes, quantities );
+
+    volDef->_size = SMDS_VolumeTool( v ).GetSize();
+    if ( volDef->_size < 0 ) // invalid polyhedron
+    {
+      if ( ! SMESH_MeshEditor( helper.GetMesh() ).Reorient( v ) || // try to fix
+          SMDS_VolumeTool( v ).GetSize() < 0 )
+      {
+        helper.GetMeshDS()->RemoveFreeElement( v, /*sm=*/nullptr, /*fromGroups=*/false );
+        v = nullptr;
+        //_hasTooSmall = true;
+
+        if (SALOME::VerbosityActivated())
+        {
+          std::cout << "Remove INVALID polyhedron, _cellID = " << _cellID
+                    << " ijk = ( " << _i << " " << _j << " " << _k << " ) "
+                    << " solid " << volDef->_solidID << std::endl;
+        }
+      }
+    }
+    return v;
+  }
+
   //================================================================================
   /*!
    * \brief Tries to create a hexahedron
@@ -4751,19 +5439,76 @@ namespace
     return false;
   }
   //================================================================================
+  /*!
+   * \brief Return true if there are _eIntPoints at EDGEs forming a  concave corner
+   */
+  bool Hexahedron::hasEdgesAround( const ConcaveFace* cf ) const
+  {
+    int nbEdges = 0;
+    ConcaveFace foundGeomHolder;
+    for ( const E_IntersectPoint* ip : _eIntPoints )
+    {
+      if ( cf->HasEdge( ip->_shapeID ))
+      {
+        if ( ++nbEdges == 2 )
+          return true;
+        foundGeomHolder.SetEdge( ip->_shapeID );
+      }
+      else if ( ip->_faceIDs.size() >= 3 )
+      {
+        const TGeomID & vID = ip->_shapeID;
+        if ( cf->HasVertex( vID ) && !foundGeomHolder.HasVertex( vID ))
+        {
+          if ( ++nbEdges == 2 )
+            return true;
+          foundGeomHolder.SetVertex( vID );
+        }
+      }
+    }
+
+    for ( const _Node& hexNode: _hexNodes )
+    {
+      if ( !hexNode._node || !hexNode._intPoint )
+        continue;
+      const B_IntersectPoint* ip = hexNode._intPoint;
+      if ( ip->_faceIDs.size() == 2 ) // EDGE
+      {
+        TGeomID edgeID = hexNode._node->GetShapeID();
+        if ( cf->HasEdge( edgeID ) && !foundGeomHolder.HasEdge( edgeID ))
+        {
+          foundGeomHolder.SetEdge( edgeID );
+          if ( ++nbEdges == 2 )
+            return true;
+        }
+      }
+      else if ( ip->_faceIDs.size() >= 3 ) // VERTEX
+      {
+        TGeomID vID = hexNode._node->GetShapeID();
+        if ( cf->HasVertex( vID ) && !foundGeomHolder.HasVertex( vID ))
+        {
+          if ( ++nbEdges == 2 )
+            return true;
+          foundGeomHolder.SetVertex( vID );
+        }
+      }
+    }
+
+    return false;
+  }
+  //================================================================================
   /*!
    * \brief Dump a link and return \c false
    */
   bool Hexahedron::debugDumpLink( Hexahedron::_Link* link )
   {
-#ifdef _DEBUG_
-    gp_Pnt p1 = link->_nodes[0]->Point(), p2 = link->_nodes[1]->Point();
-    cout << "BUG: not shared link. IKJ = ( "<< _i << " " << _j << " " << _k << " )" << endl
-         << "n1 (" << p1.X() << ", "<< p1.Y() << ", "<< p1.Z() << " )" << endl
-         << "n2 (" << p2.X() << ", "<< p2.Y() << ", "<< p2.Z() << " )" << endl;
-#else
-    (void)link; // unused in release mode
-#endif
+    if (SALOME::VerbosityActivated())
+    {
+      gp_Pnt p1 = link->_nodes[0]->Point(), p2 = link->_nodes[1]->Point();
+      cout << "BUG: not shared link. IKJ = ( "<< _i << " " << _j << " " << _k << " )" << endl
+          << "n1 (" << p1.X() << ", "<< p1.Y() << ", "<< p1.Z() << " )" << endl
+          << "n2 (" << p2.X() << ", "<< p2.Y() << ", "<< p2.Z() << " )" << endl;
+    }
+
     return false;
   }
   //================================================================================
@@ -4780,6 +5525,89 @@ namespace
             ( _grid->_coords[2][ _k+1 ] + _grid->_tol < uvw[2] ));
   }
   //================================================================================
+  /*!
+   * \brief Find existing triangulation of a polygon
+   */
+  int findExistingTriangulation( const SMDS_MeshElement*              polygon,
+                                 //const SMDS_Mesh*                     mesh,
+                                 std::vector< const SMDS_MeshNode* >& nodes )
+  {
+    int nbSplits = 0;
+    nodes.clear();
+    std::vector<const SMDS_MeshNode *>    twoNodes(2);
+    std::vector<const SMDS_MeshElement *> foundFaces; foundFaces.reserve(10);
+    std::set< const SMDS_MeshElement * >  avoidFaces; avoidFaces.insert( polygon );
+
+    const int nbPolyNodes = polygon->NbCornerNodes();
+    twoNodes[1] = polygon->GetNode( nbPolyNodes - 1 );
+    for ( int iN = 0; iN < nbPolyNodes; ++iN ) // loop on border links of polygon
+    {
+      twoNodes[0] = polygon->GetNode( iN );
+
+      int nbFaces = SMDS_Mesh::GetElementsByNodes( twoNodes, foundFaces, SMDSAbs_Face );
+      int nbOkFaces = 0;
+      for ( int iF = 0; iF < nbFaces; ++iF ) // keep faces lying over polygon
+      {
+        if ( avoidFaces.count( foundFaces[ iF ]))
+          continue;
+        int i, nbFaceNodes = foundFaces[ iF ]->NbCornerNodes();
+        for ( i = 0; i < nbFaceNodes; ++i )
+        {
+          const SMDS_MeshNode* n = foundFaces[ iF ]->GetNode( i );
+          bool isCommonNode = ( n == twoNodes[0] ||
+                                n == twoNodes[1] ||
+                                polygon->GetNodeIndex( n ) >= 0 );
+          if ( !isCommonNode )
+            break;
+        }
+        if ( i == nbFaceNodes ) // all nodes of foundFaces[iF] are shared with polygon
+          if ( nbOkFaces++ != iF )
+            foundFaces[ nbOkFaces-1 ] = foundFaces[ iF ];
+      }
+      if ( nbOkFaces > 0 )
+      {
+        int iFaceSelected = 0;
+        if ( nbOkFaces > 1 ) // select a face with minimal distance from polygon
+        {
+          double minDist = Precision::Infinite();
+          for ( int iF = 0; iF < nbOkFaces; ++iF )
+          {
+            int i, nbFaceNodes = foundFaces[ iF ]->NbCornerNodes();
+            gp_XYZ gc = SMESH_NodeXYZ( foundFaces[ iF ]->GetNode( 0 ));
+            for ( i = 1; i < nbFaceNodes; ++i )
+              gc += SMESH_NodeXYZ( foundFaces[ iF ]->GetNode( i ));
+            gc /= nbFaceNodes;
+
+            double dist = SMESH_MeshAlgos::GetDistance( polygon, gc );
+            if ( dist < minDist )
+            {
+              minDist = dist;
+              iFaceSelected = iF;
+            }
+          }
+        }
+        if ( foundFaces[ iFaceSelected ]->NbCornerNodes() != 3 )
+          return 0;
+        nodes.insert( nodes.end(),
+                      foundFaces[ iFaceSelected ]->begin_nodes(),
+                      foundFaces[ iFaceSelected ]->end_nodes());
+        if ( !SMESH_MeshAlgos::IsRightOrder( foundFaces[ iFaceSelected ],
+                                             twoNodes[0], twoNodes[1] ))
+        {
+          // reverse just added nodes
+          std::reverse( nodes.end() - 3, nodes.end() );
+        }
+        avoidFaces.insert( foundFaces[ iFaceSelected ]);
+        nbSplits++;
+      }
+
+      twoNodes[1] = twoNodes[0];
+
+    } // loop on polygon nodes
+
+    return nbSplits;
+  }
+  //================================================================================
   /*!
    * \brief Divide a polygon into triangles and modify accordingly an adjacent polyhedron
    */
@@ -4793,7 +5621,12 @@ namespace
                      const bool                      reinitVolume)
   {
     SMESH_MeshAlgos::Triangulate divider(/*optimize=*/false);
-    int nbTrias = divider.GetTriangles( polygon, face.myNodes );
+    bool triangulationExist = false;
+    int nbTrias = findExistingTriangulation( polygon, face.myNodes );
+    if ( nbTrias > 0 )
+      triangulationExist = true;
+    else
+      nbTrias = divider.GetTriangles( polygon, face.myNodes );
     face.myNodes.resize( nbTrias * 3 );
 
     SMESH_MeshEditor::ElemFeatures newVolumeDef;
@@ -4814,8 +5647,11 @@ namespace
                                      face.myNodes.begin(),
                                      face.myNodes.begin() + 3 );
         meshDS->RemoveFreeElement( polygon, 0, false );
-        newTriangle = meshDS->AddFace( face.myNodes[0], face.myNodes[1], face.myNodes[2] );
-        meshDS->SetMeshElementOnShape( newTriangle, faceID );
+        if ( !triangulationExist )
+        {
+          newTriangle = meshDS->AddFace( face.myNodes[0], face.myNodes[1], face.myNodes[2] );
+          meshDS->SetMeshElementOnShape( newTriangle, faceID );
+        }
       }
       else
       {
@@ -4832,8 +5668,11 @@ namespace
       newVolumeDef.myNodes.insert( newVolumeDef.myNodes.end(),
                                    face.myNodes.begin() + iN,
                                    face.myNodes.begin() + iN + 3 );
-      newTriangle = meshDS->AddFace( face.myNodes[iN], face.myNodes[iN+1], face.myNodes[iN+2] );
-      meshDS->SetMeshElementOnShape( newTriangle, faceID );
+      if ( !triangulationExist )
+      {
+        newTriangle = meshDS->AddFace( face.myNodes[iN], face.myNodes[iN+1], face.myNodes[iN+2] );
+        meshDS->SetMeshElementOnShape( newTriangle, faceID );
+      }
     }
 
     meshDS->RemoveFreeElement( volume.Element(), 0, false );
@@ -4848,6 +5687,36 @@ namespace
     return;
   }
   //================================================================================
+  /*!
+   * \brief Look for a FACE supporting all given nodes made on EDGEs and VERTEXes
+   */
+  TGeomID findCommonFace( const std::vector< const SMDS_MeshNode* > & nn,
+                          const SMESH_Mesh*                           mesh )
+  {
+    TGeomID faceID = 0;
+    TGeomID shapeIDs[20];
+    for ( size_t iN = 0; iN < nn.size(); ++iN )
+      shapeIDs[ iN ] = nn[ iN ]->GetShapeID();
+
+    SMESH_subMesh* sm = mesh->GetSubMeshContaining( shapeIDs[ 0 ]);
+    for ( const SMESH_subMesh * smFace : sm->GetAncestors() )
+    {
+      if ( smFace->GetSubShape().ShapeType() != TopAbs_FACE )
+        continue;
+
+      faceID = smFace->GetId();
+
+      for ( size_t iN = 1; iN < nn.size() &&  faceID; ++iN )
+      {
+        if ( !smFace->DependsOn( shapeIDs[ iN ]))
+          faceID = 0;
+      }
+      if ( faceID > 0 )
+        break;
+    }
+    return faceID;
+  }
+  //================================================================================
   /*!
    * \brief Create mesh faces at free facets
    */
@@ -4863,29 +5732,30 @@ namespace
     SMESH_MeshEditor::ElemFeatures face( SMDSAbs_Face );
     SMESHDS_Mesh* meshDS = helper.GetMeshDS();
 
+    bool isQuantaSet =  _grid->_toUseQuanta;    
     // check if there are internal or shared FACEs
     bool hasInternal = ( !_grid->_geometry.IsOneSolid() ||
-                         _grid->_geometry._soleSolid.HasInternalFaces() );
+                         _grid->_geometry._soleSolid.HasInternalFaces() );   
 
     for ( size_t iV = 0; iV < boundaryVolumes.size(); ++iV )
     {
       if ( !vTool.Set( boundaryVolumes[ iV ]))
         continue;
-
       TGeomID solidID = vTool.Element()->GetShapeID();
       Solid *   solid = _grid->GetOneOfSolids( solidID );
 
       // find boundary facets
-
       bndFacets.clear();
       for ( int iF = 0, n = vTool.NbFaces(); iF < n; iF++ )
       {
-        bool isBoundary = vTool.IsFreeFace( iF );
+        const SMDS_MeshElement* otherVol;
+        bool isBoundary = isQuantaSet ? vTool.IsFreeFaceCheckAllNodes( iF, &otherVol ) : vTool.IsFreeFace( iF, &otherVol );
         if ( isBoundary )
         {
           bndFacets.push_back( iF );
         }
-        else if ( hasInternal )
+        else if (( hasInternal ) ||
+                 ( !_grid->IsSolid( otherVol->GetShapeID() )))
         {
           // check if all nodes are on internal/shared FACEs
           isBoundary = true;
@@ -4901,7 +5771,6 @@ namespace
         continue;
 
       // create faces
-
       if ( !vTool.IsPoly() )
         vTool.SetExternalNormal();
       for ( size_t i = 0; i < bndFacets.size(); ++i ) // loop on boundary facets
@@ -4929,18 +5798,8 @@ namespace
             if ( nn[ iN ]->GetPosition()->GetDim() == 2 )
               faceID = nn[ iN ]->GetShapeID();
           }
-          for ( size_t iN = 0; iN < nbFaceNodes &&  !faceID; ++iN )
-          {
-            // look for a father FACE of EDGEs and VERTEXes
-            const TopoDS_Shape& s1 = _grid->Shape( nn[ iN   ]->GetShapeID() );
-            const TopoDS_Shape& s2 = _grid->Shape( nn[ iN+1 ]->GetShapeID() );
-            if ( s1 != s2 && s1.ShapeType() == TopAbs_EDGE && s2.ShapeType() == TopAbs_EDGE )
-            {
-              TopoDS_Shape f = helper.GetCommonAncestor( s1, s2, *helper.GetMesh(), TopAbs_FACE );
-              if ( !f.IsNull() )
-                faceID = _grid->ShapeID( f );
-            }
-          }
+          if ( faceID == 0 && !isQuantaSet /*if quanta is set boundary nodes at boundary does not coincide with any geometrical face */ )
+            faceID = findCommonFace( face.myNodes, helper.GetMesh() );
 
           bool toCheckFace = faceID && (( !isBoundary ) ||
                                         ( hasInternal && _grid->_toUseThresholdForInternalFaces ));
@@ -4953,12 +5812,15 @@ namespace
               if ( subID != faceID && !faceSM->DependsOn( subID ))
                 faceID = 0;
             }
-            if ( !faceID && !isBoundary )
-              continue;
+            // if ( !faceID && !isBoundary )
+            //   continue;
           }
+          if ( !faceID && !isBoundary && !isQuantaSet )
+            continue;
         }
+
         // orient a new face according to supporting FACE orientation in shape_to_mesh
-        if ( !solid->IsOutsideOriented( faceID ))
+        if ( !isBoundary && !solid->IsOutsideOriented( faceID ))
         {
           if ( existFace )
             editor.Reorient( existFace );
@@ -4987,14 +5849,15 @@ namespace
             }
         }
 
-        // split a polygon that will be used by other 3D algorithm
         if ( faceID && nbFaceNodes > 4 &&
              !_grid->IsInternal( faceID ) &&
              !_grid->IsShared( faceID ) &&
              !_grid->IsBoundaryFace( faceID ))
         {
-          splitPolygon( newFace, vTool, iFacet, faceID, solidID,
-                        face, editor, i+1 < bndFacets.size() );
+          // split a polygon that will be used by other 3D algorithm
+          if ( !existFace )
+            splitPolygon( newFace, vTool, iFacet, faceID, solidID,
+                          face, editor, i+1 < bndFacets.size() );
         }
         else
         {
@@ -5027,8 +5890,8 @@ namespace
           continue;
 
         gp_Dir direction(1,0,0);
-        const SMDS_MeshElement* anyFace = *facesToOrient.begin();
-        editor.Reorient2D( facesToOrient, direction, anyFace );
+        TIDSortedElemSet refFaces;
+        editor.Reorient2D( facesToOrient, direction, refFaces, /*allowNonManifold=*/true );
       }
     }
     return;
@@ -5061,6 +5924,8 @@ namespace
 
       for ( size_t i = 1; i < nodes.size(); i++ )
       {
+        if ( mesh->FindEdge( nodes[i-1], nodes[i] ))
+          continue;
         SMDS_MeshElement* segment = mesh->AddEdge( nodes[i-1], nodes[i] );
         mesh->SetMeshElementOnShape( segment, e2ff->first );
       }
@@ -5138,7 +6003,9 @@ namespace
     // return created volumes
     for ( _volumeDef* volDef = &_volumeDefs; volDef; volDef = volDef->_next )
     {
-      if ( volDef->_volume && !volDef->_volume->isMarked() )
+      if ( volDef ->_volume &&
+           !volDef->_volume->IsNull() &&
+           !volDef->_volume->isMarked() )
       {
         volDef->_volume->setIsMarked( true );
         boundaryElems.push_back( volDef->_volume );
@@ -5147,6 +6014,14 @@ namespace
           for ( size_t iN = 0; iN < volDef->_nodes.size(); ++iN )
             volDef->_nodes[iN].Node()->setIsMarked( false );
       }
+      if ( volDef->_brotherVolume.size() > 0 )
+      {
+        for (auto _bro : volDef->_brotherVolume )
+        {
+          _bro->setIsMarked( true );
+          boundaryElems.push_back( _bro );
+        }        
+      }
     }
   }
 
@@ -5257,7 +6132,7 @@ namespace
         if ( loopsJoined )
         {
           // set unchanged polygons
-          std::vector< int >                  newQuantities;
+          std::vector< int >             newQuantities;
           std::vector< _volumeDef::_nodeDef > newNodes;
           vector< SMESH_Block::TShapeID >     newNames;
           newQuantities.reserve( volDef->_quantities.size() );
@@ -5735,6 +6610,29 @@ namespace
 bool StdMeshers_Cartesian_3D::Compute(SMESH_Mesh &         theMesh,
                                       const TopoDS_Shape & theShape)
 {
+  if ( _hypViscousLayers )
+  {
+    const StdMeshers_ViscousLayers* hypViscousLayers = _hypViscousLayers;
+    _hypViscousLayers = nullptr;
+
+    StdMeshers_Cartesian_VL::ViscousBuilder builder( hypViscousLayers, theMesh, theShape );
+
+    std::string error;
+    TopoDS_Shape offsetShape = builder.MakeOffsetShape( theShape, theMesh, error );
+    if ( offsetShape.IsNull() )
+      throw SALOME_Exception( error );
+
+    SMESH_Mesh* offsetMesh = new TmpMesh(); 
+    offsetMesh->ShapeToMesh( offsetShape );
+    offsetMesh->GetSubMesh( offsetShape )->DependsOn();
+
+    this->_isComputeOffset = true;
+    if ( ! this->Compute( *offsetMesh, offsetShape ))
+      return false;
+
+    return builder.MakeViscousLayers( *offsetMesh, theMesh, theShape );
+  }
+
   // The algorithm generates the mesh in following steps:
 
   // 1) Intersection of grid lines with the geometry boundary.
@@ -5762,6 +6660,13 @@ bool StdMeshers_Cartesian_3D::Compute(SMESH_Mesh &         theMesh,
     grid._toConsiderInternalFaces        = _hyp->GetToConsiderInternalFaces();
     grid._toUseThresholdForInternalFaces = _hyp->GetToUseThresholdForInternalFaces();
     grid._sizeThreshold                  = _hyp->GetSizeThreshold();
+    grid._toUseQuanta                    = _hyp->GetToUseQuanta();
+    grid._quanta                         = _hyp->GetQuanta();
+    if ( _isComputeOffset )
+    {
+      grid._toAddEdges = true;
+      grid._toCreateFaces = true;
+    }
     grid.InitGeometry( theShape );
 
     vector< TopoDS_Shape > faceVec;
@@ -5874,7 +6779,10 @@ bool StdMeshers_Cartesian_3D::Compute(SMESH_Mesh &         theMesh,
         {
           multiset< F_IntersectPoint >::iterator ip = lines[i]._intPoints.begin();
           for ( ; ip != lines[i]._intPoints.end(); ++ip )
-            if ( ip->_node && ip->_node->NbInverseElements() == 0 && !ip->_node->isMarked() )
+            if ( ip->_node &&
+                 !ip->_node->IsNull() &&
+                 ip->_node->NbInverseElements() == 0 &&
+                 !ip->_node->isMarked() )
             {
               nodesToRemove.push_back( ip->_node );
               ip->_node->setIsMarked( true );
@@ -5883,13 +6791,24 @@ bool StdMeshers_Cartesian_3D::Compute(SMESH_Mesh &         theMesh,
       }
       // get grid nodes
       for ( size_t i = 0; i < grid._nodes.size(); ++i )
-        if ( grid._nodes[i] && grid._nodes[i]->NbInverseElements() == 0 &&
+        if ( grid._nodes[i] &&
+             !grid._nodes[i]->IsNull() &&
+             grid._nodes[i]->NbInverseElements() == 0 &&
              !grid._nodes[i]->isMarked() )
         {
           nodesToRemove.push_back( grid._nodes[i] );
           grid._nodes[i]->setIsMarked( true );
         }
 
+      for ( size_t i = 0; i < grid._allBorderNodes.size(); ++i )
+        if ( grid._allBorderNodes[i] &&
+             !grid._allBorderNodes[i]->IsNull() &&
+             grid._allBorderNodes[i]->NbInverseElements() == 0 )
+        {
+          nodesToRemove.push_back( grid._allBorderNodes[i] );
+          grid._allBorderNodes[i]->setIsMarked( true );
+        }
+
       // do remove
       for ( size_t i = 0; i < nodesToRemove.size(); ++i )
         meshDS->RemoveFreeNode( nodesToRemove[i], /*smD=*/0, /*fromGroups=*/false );
index 611170c80543976d2cc1bfc90b9e1c3467ebbe55..7110b2c05e7fd51097b5398c82cc601523910a4f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
  * Issue 0021336
  * Issue #16523: Treatment of internal faces
  * Issue #17237: Body fitting on sub-mesh
+ * Issue #17015: Body fitting with Viscous Layers
  */
 class StdMeshers_CartesianParameters3D;
+class StdMeshers_ViscousLayers;
 
 class STDMESHERS_EXPORT StdMeshers_Cartesian_3D : public SMESH_3D_Algo
 {
@@ -61,6 +63,8 @@ public:
   void setSubmeshesComputed(SMESH_Mesh& aMesh, const TopoDS_Shape& theShape );
 
   const StdMeshers_CartesianParameters3D* _hyp;
+  const StdMeshers_ViscousLayers*         _hypViscousLayers;
+  bool                                    _isComputeOffset;
 };
 
 #endif
diff --git a/src/StdMeshers/StdMeshers_Cartesian_VL.cxx b/src/StdMeshers/StdMeshers_Cartesian_VL.cxx
new file mode 100644 (file)
index 0000000..bd02b9d
--- /dev/null
@@ -0,0 +1,1313 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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      : StdMeshers_Cartesian_VL.cxx
+// Created   : Tue May 24 13:03:09 2022
+// Author    : Edward AGAPOV (eap)
+
+#include "StdMeshers_Cartesian_VL.hxx"
+#include "StdMeshers_ViscousLayers.hxx"
+
+#include <SMDS_MeshGroup.hxx>
+#include <SMESHDS_Mesh.hxx>
+#include <SMESHDS_SubMesh.hxx>
+#include <SMESH_Algo.hxx>
+#include <SMESH_MeshAlgos.hxx>
+#include <SMESH_Mesh.hxx>
+#include <SMESH_MeshEditor.hxx>
+#include <SMESH_MesherHelper.hxx>
+#include <SMESH_TypeDefs.hxx>
+#include <SMESH_subMesh.hxx>
+
+#include <BRepAdaptor_Curve.hxx>
+#include <BRep_Builder.hxx>
+#include <BRepBuilderAPI_MakeFace.hxx>
+#include <BRepGProp.hxx>
+#include <BRepTopAdaptor_FClass2d.hxx>
+#include <BRep_Tool.hxx>
+#include <GProp_GProps.hxx>
+#include <ShapeAnalysis_Curve.hxx>
+#include <ShapeAnalysis_Surface.hxx>
+#include <TopExp.hxx>
+#include <TopExp_Explorer.hxx>
+#include <TopoDS.hxx>
+
+using namespace StdMeshers_Cartesian_VL;
+
+namespace
+{
+  typedef int                     TGeomID; // IDs of sub-shapes
+
+  /*!
+   * \brief Temporary mesh
+   */
+  struct TmpMesh: public SMESH_Mesh
+  {
+    TmpMesh() {
+      _isShapeToMesh = (_id = 0);
+      _meshDS  = new SMESHDS_Mesh( _id, true );
+    }
+  };
+  // --------------------------------------------------------------------------
+  /*!
+   * \brief Edge of viscous layers; goes from a grid node by normal to boundary
+   */
+  struct VLEdge
+  {
+    std::vector< SMESH_NodeXYZ > _nodes;
+    double                       _uv[2]; // position of TgtNode() on geometry
+    double                       _length; 
+
+    const SMDS_MeshNode* TgtNode() const { return _nodes.back().Node(); }
+  };
+  typedef NCollection_DataMap< const SMDS_MeshNode*, VLEdge* > TNode2VLEdge;
+  // --------------------------------------------------------------------------
+  /*!
+   * \brief VLEdge's of one shape
+   */
+  struct VLEdgesOnShape
+  {
+    std::vector< VLEdge > _edges;
+    TopoDS_Shape          _initShape;
+    TopoDS_Shape          _offsetShape;
+    int                   _initShapeID;
+    bool                  _hasVL;
+    bool                  _toCheckCoinc; // to check if nodes on shape boundary coincide
+  };
+
+  //================================================================================
+  /*!
+   * \brief Project a point on offset FACE to EDGEs of an initial FACE
+   *  \param [in] offP - point to project
+   *  \param [in] initFace - FACE to project on
+   *  \return gp_Pnt - projection point
+   */
+  //================================================================================
+
+  gp_Pnt projectToWire( const gp_Pnt&      offP,
+                        const TopoDS_Face& initFace,
+                        gp_Pnt2d &         uv )
+  {
+    double   minDist = Precision::Infinite();
+    const double tol = Precision::Confusion();
+    gp_Pnt              proj, projction;
+    Standard_Real       param;
+    ShapeAnalysis_Curve projector;
+
+    for ( TopExp_Explorer eExp( initFace, TopAbs_EDGE ); eExp.More(); eExp.Next() )
+    {
+      BRepAdaptor_Curve initCurve( TopoDS::Edge( eExp.Current() ));
+      //const double f = initCurve.FirstParameter(), l = initCurve.LastParameter();
+      double dist = projector.Project( initCurve, offP, tol, proj, param, /*adjustToEnds=*/false );
+      if ( dist < minDist )
+      {
+        projction = proj;
+        minDist = dist;
+      }
+    }
+    uv.SetCoord(0.,0.); // !!!!!!!
+    return projction;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Project nodes from offset FACE to initial FACE
+   *  \param [inout] theEOS - VL edges on a geom FACE
+   *  \param [inout] theOffsetMDS - offset mesh to fill in
+   */
+  //================================================================================
+
+  void projectToFace( VLEdgesOnShape & theEOS,
+                      SMESHDS_Mesh*    theOffsetMDS,
+                      TNode2VLEdge &   theN2E )
+  {
+    SMESHDS_SubMesh* sm = theOffsetMDS->MeshElements( theEOS._offsetShape );
+    if ( !sm || sm->NbElements() == 0 || sm->NbNodes() == 0 )
+      return;
+
+    theEOS._edges.resize( sm->NbNodes() );
+
+    const TopoDS_Face& initFace = TopoDS::Face( theEOS._initShape );
+    ShapeAnalysis_Surface projector( BRep_Tool::Surface( initFace ));
+    const double clsfTol = 1e2 * BRep_Tool::MaxTolerance( initFace, TopAbs_VERTEX );
+    BRepTopAdaptor_FClass2d classifier( initFace, clsfTol );
+
+    const double        tol = Precision::Confusion();
+    //const double f = initCurve.FirstParameter(), l = initCurve.LastParameter();
+    gp_Pnt              proj;
+
+    int iN = 0;
+    for ( SMDS_NodeIteratorPtr nIt = sm->GetNodes(); nIt->more(); ++iN )
+    {
+      SMESH_NodeXYZ offP = nIt->next();
+      gp_Pnt2d uv = projector.ValueOfUV( offP, tol );
+      TopAbs_State st = classifier.Perform( uv );
+      if ( st == TopAbs_IN || st == TopAbs_ON )
+      {
+        proj = projector.Value( uv );
+      }
+      else
+      {
+        proj = projectToWire( offP, initFace, uv );
+      }
+      if ( st == TopAbs_ON || st == TopAbs_OUT )
+        theEOS._toCheckCoinc = true;
+
+      VLEdge & vlEdge = theEOS._edges[ iN ];
+      vlEdge._nodes.push_back( offP.Node() );
+      vlEdge._nodes.push_back( theOffsetMDS->AddNode( proj.X(), proj.Y(), proj.Z() ));
+      vlEdge._uv[0] = uv.X();
+      vlEdge._uv[1] = uv.Y();
+      //vlEdge._length = proj.Distance( offP );
+
+      theN2E.Bind( offP.Node(), &vlEdge );
+    }
+    return;
+    
+  }
+
+  //================================================================================
+  /*!
+   * \brief Project nodes from offset EDGE to initial EDGE
+   *  \param [inout] theEOS - VL edges on a geom EDGE
+   *  \param [inout] theOffsetMDS - offset mesh to add new nodes to
+   */
+  //================================================================================
+
+  void projectToEdge( VLEdgesOnShape & theEOS,
+                      SMESHDS_Mesh*    theOffsetMDS,
+                      TNode2VLEdge &   theN2E,
+                      bool createVertex )
+  {
+    SMESHDS_SubMesh* sm = theOffsetMDS->MeshElements( theEOS._offsetShape );
+    if ( !sm || sm->NbElements() == 0 )
+      return;
+
+    int addVertexNode = createVertex ? 1 : 0;
+    theEOS._edges.resize( sm->NbNodes() + addVertexNode ); // +1 to set the vertex 
+    
+    ShapeAnalysis_Curve projector;
+    BRepAdaptor_Curve   initCurve( TopoDS::Edge( theEOS._initShape ));
+    const double        tol = Precision::Confusion();
+    const double f = initCurve.FirstParameter(), l = initCurve.LastParameter();
+    gp_Pnt              proj;
+    Standard_Real       param;
+
+    int iN = 0;
+    for ( SMDS_NodeIteratorPtr nIt = sm->GetNodes(); nIt->more(); ++iN )
+    {
+      SMESH_NodeXYZ offP = nIt->next();
+      double dist = projector.Project( initCurve, offP, tol, proj, param, /*adjustToEnds=*/false );
+      bool paramOK = ( f < param && param < l );
+      if ( !paramOK )
+      {
+        if ( param < f )
+          param = f;
+        else if ( param > l )
+          param = l;
+        theEOS._toCheckCoinc = true;
+      }
+      proj = initCurve.Value( param );
+
+      VLEdge & vlEdge = theEOS._edges[ iN ];
+      vlEdge._nodes.push_back( offP.Node() );
+      vlEdge._nodes.push_back( theOffsetMDS->AddNode( proj.X(), proj.Y(), proj.Z() ));
+      vlEdge._uv[0] = param;
+      vlEdge._length = paramOK ? dist : proj.Distance( offP );
+
+      theN2E.Bind( offP.Node(), &vlEdge );
+    }
+
+    if ( createVertex )
+    {
+      // It is possible to define the vertex projections from the existing edges
+      // EOS._offsetShape the edge generated from the original edge
+      // Get the first vertex of both edges to define the connecting edges
+      auto offsetEdge = TopoDS::Edge( theEOS._offsetShape );
+      auto initEdge   = TopoDS::Edge( theEOS._initShape );
+      TopoDS_Vertex offsetVertex;
+      TopoDS_Vertex initVertex;
+      
+      if ( offsetEdge.Orientation() == TopAbs_FORWARD )
+      {
+        offsetVertex  = TopExp::FirstVertex ( offsetEdge );
+        initVertex    = TopExp::FirstVertex ( initEdge ); 
+      }
+      else
+      {
+        offsetVertex  = TopExp::LastVertex ( offsetEdge );
+        initVertex    = TopExp::LastVertex ( initEdge ); 
+      }
+
+      VLEdge & vlEdge = theEOS._edges[ iN ];
+      vlEdge._nodes.resize( 2 );
+      vlEdge._nodes[0] = SMESH_Algo::VertexNode( offsetVertex, theOffsetMDS );
+      
+      gp_Pnt offP = BRep_Tool::Pnt( initVertex );
+      
+      vlEdge._nodes[1] = theOffsetMDS->AddNode( offP.X(), offP.Y(), offP.Z() );
+      theN2E.Bind( vlEdge._nodes[0].Node(), &vlEdge );
+    }
+    return;
+  }  
+
+  //================================================================================
+  /*!
+   * \brief Compute heights of viscous layers and finds FACEs with VL
+   *  \param [in] hyp - viscous layers hypothesis
+   *  \param [in] mesh - the main mesh
+   *  \param [in] shape - the main shape
+   *  \param [out] vlH - heights of viscous layers to compute
+   *  \param [out] shapesWVL - IDs of shapes with VL
+   *  \return bool - isOK
+   */
+  //================================================================================
+
+  void computeVLHeight( const StdMeshers_ViscousLayers* hyp,
+                        std::vector< double > &         vlH )
+  {
+    const double  T = hyp->GetTotalThickness();
+    const double  f = hyp->GetStretchFactor();
+    const int     N = hyp->GetNumberLayers();
+    const double h0 = hyp->Get1stLayerThickness( T, f, N );
+
+    vlH.reserve( hyp->GetNumberLayers() );
+    vlH.push_back( h0 );
+    for ( double h = h0 * f; (int)vlH.size() < N-1; h *= f )
+      vlH.push_back( h + vlH.back() );
+    vlH.push_back( T );
+  }
+
+  //================================================================================
+  /*!
+   * \brief Create intermediate nodes on VLEdge
+   *  \param [inout] vlEdge - VLEdge to divide
+   *  \param [in] vlH - thicknesses of layers
+   *  \param [inout] mesh - the mesh no fill in
+   */
+  //================================================================================
+
+  void divideVLEdge( VLEdge*                      vlEdge,
+                     const std::vector< double >& vlH,
+                     SMESHDS_Mesh*                mesh )
+  {
+    SMESH_NodeXYZ lastNode = vlEdge->_nodes.back();
+    SMESH_NodeXYZ frstNode = vlEdge->_nodes[0];
+    gp_XYZ dir = frstNode - lastNode;
+
+    vlEdge->_nodes.resize( vlH.size() + 1 );
+
+    for ( size_t i = 1; i < vlH.size(); ++i )
+    {
+      double r = vlH[ i-1 ] / vlH.back();
+      gp_XYZ p = lastNode + dir * r;
+      vlEdge->_nodes[ vlH.size() - i ] = mesh->AddNode( p.X(), p.Y(), p.Z() );
+    }
+    vlEdge->_nodes.back() = lastNode;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Create a polyhedron from nodes of VLEdge's
+   *  \param [in] edgesVec - the VLEdge's
+   *  \param [in] vNodes - node buffer
+   *  \param [in] editor - editor of offset mesh
+   */
+  //================================================================================
+
+  bool makePolyhedron( const std::vector< VLEdge*> &         edgesVec,
+                       std::vector< const SMDS_MeshNode* > & vNodes,
+                       SMESH_MeshEditor&                     editor,
+                       SMESH_MeshEditor::ElemFeatures        elemType)
+  {
+    elemType.SetPoly( true );
+    elemType.myPolyhedQuantities.clear();
+    elemType.myNodes.clear();
+
+    // add facets of walls
+    size_t nbBaseNodes = edgesVec.size();
+    for ( size_t iN = 0; iN < nbBaseNodes; ++iN )
+    {
+      VLEdge* e0 = edgesVec[ iN ];
+      VLEdge* e1 = edgesVec[( iN + 1 ) % nbBaseNodes ];
+      size_t nbN0 = e0->_nodes.size();
+      size_t nbN1 = e1->_nodes.size();
+      if ( nbN0 == nbN1 )
+      {
+        for ( size_t i = 1; i < nbN0; ++i )
+        {
+          elemType.myNodes.push_back( e1->_nodes[ i - 1 ].Node());
+          elemType.myNodes.push_back( e1->_nodes[ i     ].Node());
+          elemType.myNodes.push_back( e0->_nodes[ i     ].Node());
+          elemType.myNodes.push_back( e0->_nodes[ i - 1 ].Node());
+          elemType.myPolyhedQuantities.push_back( 4 );
+        }
+      }
+      else
+      {
+        for ( size_t i = 0; i < nbN1; ++i )
+          elemType.myNodes.push_back( e1->_nodes[ i ].Node() );
+        for ( size_t i = 0; i < nbN0; ++i )
+          elemType.myNodes.push_back( e0->_nodes[ nbN0 - 1 - i ].Node() );
+        elemType.myPolyhedQuantities.push_back( nbN0 + nbN1 );
+      }
+    }
+
+    // add facets of top
+    vNodes.clear();
+    for ( size_t iN = 0; iN < nbBaseNodes; ++iN )
+    {
+      VLEdge* e0 = edgesVec[ iN ];
+      elemType.myNodes.push_back( e0->_nodes.back().Node() );
+      vNodes.push_back( e0->_nodes[ 0 ].Node());
+    }
+    elemType.myPolyhedQuantities.push_back( nbBaseNodes );
+
+    // add facets of bottom
+    elemType.myNodes.insert( elemType.myNodes.end(), vNodes.rbegin(), vNodes.rend() );
+    elemType.myPolyhedQuantities.push_back( nbBaseNodes );
+
+    const SMDS_MeshElement* vol = editor.AddElement( elemType.myNodes, elemType );
+    vol->setIsMarked( true ); // to add to group
+
+    return vol;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Transform prism nodal connectivity to that of polyhedron
+   *  \param [inout] nodes - nodes of prism, return nodes of polyhedron
+   *  \param [inout] elemType - return quantities of polyhedron,
+   */
+  //================================================================================
+
+  void prism2polyhedron( std::vector< const SMDS_MeshNode* > & nodes,
+                         SMESH_MeshEditor::ElemFeatures &      elemType )
+  {
+    elemType.myPolyhedQuantities.clear();
+    elemType.myNodes.clear();
+
+    // walls
+    size_t nbBaseNodes = nodes.size() / 2;
+    for ( size_t i = 0; i < nbBaseNodes; ++i )
+    {
+      int iNext = ( i + 1 ) % nbBaseNodes;
+      elemType.myNodes.push_back( nodes[ iNext ]);
+      elemType.myNodes.push_back( nodes[ i ]);
+      elemType.myNodes.push_back( nodes[ i + nbBaseNodes ]);
+      elemType.myNodes.push_back( nodes[ iNext + nbBaseNodes ]);
+      elemType.myPolyhedQuantities.push_back( 4 );
+    }
+
+    // base
+    elemType.myNodes.insert( elemType.myNodes.end(), nodes.begin(), nodes.begin() + nbBaseNodes );
+    elemType.myPolyhedQuantities.push_back( nbBaseNodes );
+
+    // top
+    elemType.myNodes.insert( elemType.myNodes.end(), nodes.rbegin(), nodes.rbegin() + nbBaseNodes );
+    elemType.myPolyhedQuantities.push_back( nbBaseNodes );
+
+    nodes.swap( elemType.myNodes );
+  }
+
+  //================================================================================
+  /*!
+   * \brief Create prisms from faces
+   *  \param [in] theEOS - shape to treat
+   *  \param [inout] theMesh - offset mesh to fill in
+   */
+  //================================================================================
+
+  bool makePrisms( VLEdgesOnShape & theEOS,
+                   SMESH_Mesh*      theMesh,
+                   TNode2VLEdge   & theN2E )
+  {
+    SMESHDS_SubMesh* sm = theMesh->GetMeshDS()->MeshElements( theEOS._offsetShape );
+    if ( !sm || sm->NbElements() == 0 )
+      return true;
+
+    SMESH_MeshEditor editor( theMesh );
+    SMESH_MeshEditor::ElemFeatures volumElem( SMDSAbs_Volume );
+
+    std::vector< const SMDS_MeshNode* > vNodes;
+    std::vector< VLEdge*> edgesVec;
+    for ( SMDS_ElemIteratorPtr eIt = sm->GetElements(); eIt->more(); )
+    {
+      const SMDS_MeshElement* face = eIt->next();
+      if ( face->GetType() != SMDSAbs_Face )
+        continue;
+
+      const int nbNodes = face->NbCornerNodes();
+      edgesVec.resize( nbNodes );
+      vNodes.resize( nbNodes * 2 );
+      int maxNbLayer = 0, minNbLayer = IntegerLast();
+      for ( int i = 0; i < nbNodes; ++i )
+      {
+        const SMDS_MeshNode* n = face->GetNode( i );
+        if ( !theN2E.IsBound( n ))
+          return false;
+        edgesVec[ i ] = theN2E( n );
+        maxNbLayer = Max( maxNbLayer, edgesVec[i]->_nodes.size() - 1 );
+        minNbLayer = Min( minNbLayer, edgesVec[i]->_nodes.size() - 1 );
+      }
+      if ( maxNbLayer == minNbLayer )
+      {
+        size_t nbPrism = edgesVec[0]->_nodes.size() - 1;
+        for ( size_t iP = 0; iP < nbPrism; ++iP )
+        {
+          vNodes.resize( nbNodes * 2 );
+          for ( int i = 0; i < nbNodes; ++i )
+          {
+            vNodes[ i           ] = edgesVec[ i ]->_nodes[ iP + 1 ].Node();
+            vNodes[ i + nbNodes ] = edgesVec[ i ]->_nodes[ iP ].Node();
+          }
+          volumElem.SetPoly( nbNodes > 4 );
+          if ( volumElem.myIsPoly )
+            prism2polyhedron( vNodes, volumElem );
+
+          if ( const SMDS_MeshElement* vol = editor.AddElement( vNodes, volumElem ))
+            vol->setIsMarked( true ); // to add to group          
+        }
+      }
+      else // at inlet/outlet
+        makePolyhedron( edgesVec, vNodes, editor, volumElem );
+
+      editor.ClearLastCreated();
+
+      // move the face to the top of prisms, on mesh boundary
+      //theMesh->GetMeshDS()->ChangeElementNodes( face, fNodes.data(), nbNodes );
+    }
+    return true;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Create faces from edges
+   *  \param [inout] theEOS - shape to treat
+   *  \param [inout] theMesh - offset mesh to fill in
+   *  \param [inout] theN2E - map of node to VLEdge
+   *  \param [inout] theFaceID - ID of WOVL FACE for new faces to set on
+   *  \param [in]    isMainShape2D - used to identify the geometry where the new elements are included
+   *  \return bool - ok
+   */
+  //================================================================================
+
+  bool makeFaces( VLEdgesOnShape & theEOS,
+                  SMESH_Mesh*      theMesh,
+                  TNode2VLEdge   & theN2E,
+                  const TGeomID    theFaceID,
+                  bool isMainShape2D = false )
+  {
+    SMESHDS_SubMesh* sm = theMesh->GetMeshDS()->MeshElements( theEOS._offsetShape );
+    if ( !sm || sm->NbElements() == 0 )
+      return true;
+
+    SMESH_MeshEditor editor( theMesh );
+    SMESH_MeshEditor::ElemFeatures elem2D( SMDSAbs_Face );
+
+    std::vector< const SMDS_MeshNode* > fNodes( 4 );
+    std::vector<const SMDS_MeshElement *> foundVolum;
+    std::vector< VLEdge*> edgesVec;
+    TIDSortedElemSet  refSetFace;
+    
+    // Check orientation of face and re
+    gp_XYZ refNormalVector(0.0,0.0,0.0);
+    if ( isMainShape2D )
+    {
+      SMESHDS_Mesh* offsetMDS = theMesh->GetMeshDS();
+      for ( SMDS_ElemIteratorPtr eIt = offsetMDS->elementsIterator(); eIt->more(); )
+      {
+        const SMDS_MeshElement* refFace = eIt->next(); // define the ref
+        if ( refFace->GetType() == SMDSAbs_Face )
+        {
+          SMESH_MeshAlgos::FaceNormal( refFace, refNormalVector, /*normalized=*/true );
+          break;
+        }
+      }
+      if ( refNormalVector.X() == 0.0 && refNormalVector.Y() == 0.0 && refNormalVector.Z() == 0.0 )
+        throw SALOME_Exception("No 2D element found in the mesh!\n");
+
+    }
+    
+    for ( SMDS_ElemIteratorPtr eIt = sm->GetElements(); eIt->more(); )
+    {
+      const SMDS_MeshElement* edge = eIt->next();
+      if ( edge->GetType() != SMDSAbs_Edge )
+        continue;
+
+      const int nbNodes = 2; //edge->NbCornerNodes();
+      edgesVec.resize( nbNodes );
+      fNodes.resize( nbNodes * 2 );
+      for ( int i = 0; i < nbNodes; ++i )
+      {
+        const SMDS_MeshNode* n = edge->GetNode( i );
+        if ( !theN2E.IsBound( n ))
+          return false;
+        edgesVec[ i ] = theN2E( n );
+      }
+      size_t nbFaces = edgesVec[0]->_nodes.size() - 1;
+
+      for ( size_t iF = 0; iF < nbFaces; ++iF )
+      {
+        fNodes[ 0 ] = edgesVec[ 0 ]->_nodes[ iF ].Node();
+        fNodes[ 1 ] = edgesVec[ 1 ]->_nodes[ iF ].Node();
+        fNodes[ 2 ] = edgesVec[ 1 ]->_nodes[ iF + 1 ].Node();
+        fNodes[ 3 ] = edgesVec[ 0 ]->_nodes[ iF + 1 ].Node();
+
+        if ( const SMDS_MeshElement* face = editor.AddElement( fNodes, elem2D ))
+        {
+          theMesh->GetMeshDS()->SetMeshElementOnShape( face, theFaceID );
+
+          if ( SMDS_Mesh::GetElementsByNodes( fNodes, foundVolum, SMDSAbs_Volume ))
+          {
+            TIDSortedElemSet faces = { face }, volumes = { foundVolum[0] };
+            editor.Reorient2DBy3D( faces, volumes, /*outside=*/true );
+          }
+          else if ( isMainShape2D )
+          {
+            gp_XYZ elementNormal;
+            SMESH_MeshAlgos::FaceNormal( face, elementNormal, /*normalized=*/true );
+            if ( elementNormal * refNormalVector < 0.0 /* diff orientation from the ref element */)
+              editor.Reorient( face );
+          }
+        }
+      }
+      editor.ClearLastCreated();
+
+      // move the face to the top of prisms, on mesh boundary
+      //theMesh->GetMeshDS()->ChangeElementNodes( face, fNodes.data(), nbNodes );
+    }    
+    return true;
+  }
+
+  //================================================================================
+  /*!
+   * \brief Append the offset mesh to the initial one
+   */
+  //================================================================================
+
+  void copyMesh( SMESH_Mesh* theFromMesh,
+                 SMESH_Mesh* theToMesh,
+                 int         theSolidID)
+  {
+    SMESHDS_Mesh* offsetMDS = theFromMesh->GetMeshDS();
+    SMESHDS_Mesh*   initMDS = theToMesh->GetMeshDS();
+
+    const smIdType nShift = initMDS->NbNodes();
+
+    for ( SMDS_NodeIteratorPtr nIt = offsetMDS->nodesIterator(); nIt->more(); )
+    {
+      SMESH_NodeXYZ pOff = nIt->next();
+      const SMDS_MeshNode* n = initMDS->AddNodeWithID( pOff.X(), pOff.Y(), pOff.Z(),
+                                                       nShift + pOff.Node()->GetID() );
+      initMDS->SetNodeInVolume( n, theSolidID );
+    }
+
+    SMESH_MeshEditor editor( theToMesh );
+    SMESH_MeshEditor::ElemFeatures elemType;
+    std::vector<smIdType> nIniIDs;
+
+    for ( SMDS_ElemIteratorPtr eIt = offsetMDS->elementsIterator(); eIt->more(); )
+    {
+      const SMDS_MeshElement* offElem = eIt->next();
+      const int nbNodes = offElem->NbNodes();
+      nIniIDs.resize( nbNodes );
+      for ( int i = 0; i < nbNodes; ++i )
+      {
+        const SMDS_MeshNode* offNode = offElem->GetNode( i );
+        nIniIDs[ i ] = offNode->GetID() + nShift;
+      }
+      elemType.Init( offElem, /*basicOnly=*/false );
+      const SMDS_MeshElement* iniElem = editor.AddElement( nIniIDs, elemType );
+      initMDS->SetMeshElementOnShape( iniElem, theSolidID );
+      iniElem->setIsMarked( offElem->isMarked() );
+      editor.ClearLastCreated();
+    }
+    return;
+  }
+
+  //================================================================================
+  /*!
+   * \brief set elements of layers boundary to sub-meshes
+   *  \param [in] theEOS - vlEdges of a sub-shape
+   *  \param [inout] theMesh - the mesh
+   *  \param [in] theN2E - map of node to vlEdge
+   *  \param [in] theNShift - nb of nodes in the mesh before adding the offset mesh
+   */
+  //================================================================================
+
+  void setBnd2Sub( VLEdgesOnShape &     theEOS,
+                   SMESH_Mesh*          theInitMesh,
+                   SMESH_Mesh*          theOffsMesh,
+                   const TNode2VLEdge & theN2E,
+                   const smIdType       theNShift,
+                   TIDSortedNodeSet&    theNodesToCheckCoinc )
+  {
+    SMESHDS_Mesh* offsetMDS = theOffsMesh->GetMeshDS();
+    SMESHDS_Mesh*   initMDS = theInitMesh->GetMeshDS();
+
+    SMESHDS_SubMesh* sm = offsetMDS->MeshElements( theEOS._offsetShape );
+    if ( !sm || ( sm->NbElements() + sm->NbNodes() == 0 ))
+      return;
+
+    for ( SMDS_NodeIteratorPtr nIt = sm->GetNodes(); nIt->more(); )
+    {
+      const SMDS_MeshNode* offNode = nIt->next();
+      VLEdge* vlEd = theN2E( offNode );
+      const SMDS_MeshNode* nOffBnd = vlEd->_nodes.back().Node();
+      const SMDS_MeshNode* nIniBnd = initMDS->FindNode( nOffBnd->GetID() + theNShift );
+      initMDS->UnSetNodeOnShape( nIniBnd );
+
+      switch( theEOS._initShape.ShapeType() ) {
+      case TopAbs_FACE:   initMDS->SetNodeOnFace( nIniBnd, TopoDS::Face( theEOS._initShape ),
+                                                  vlEd->_uv[0], vlEd->_uv[1] );
+        break;
+      case TopAbs_EDGE:   initMDS->SetNodeOnEdge( nIniBnd, TopoDS::Edge( theEOS._initShape ),
+                                                  vlEd->_uv[0]);
+        break;
+      case TopAbs_VERTEX: initMDS->SetNodeOnVertex( nIniBnd, TopoDS::Vertex( theEOS._initShape ));
+        break;
+      default:;
+      }
+    }
+
+    std::vector< const SMDS_MeshNode* > iniNodes, iniNodesBnd;
+    std::vector< VLEdge*> edgesVec;
+    for ( SMDS_ElemIteratorPtr eIt = sm->GetElements(); eIt->more(); )
+    {
+      const SMDS_MeshElement* offElem = eIt->next();
+      if ( offElem->GetType() != SMDSAbs_Face &&
+           offElem->GetType() != SMDSAbs_Edge )
+        continue;
+
+      const int nbNodes = offElem->NbCornerNodes();
+      iniNodes.resize( nbNodes );
+      iniNodesBnd.resize( nbNodes );
+      for ( int i = 0; i < nbNodes; ++i )
+      {
+        const SMDS_MeshNode* nOff = offElem->GetNode( i );
+        const SMDS_MeshNode* nIni = initMDS->FindNode( nOff->GetID() + theNShift );
+        iniNodes[ i ] = nIni;
+        if ( !theN2E.IsBound( nOff ))
+          break;
+        VLEdge* vlEd = theN2E( nOff );
+        const SMDS_MeshNode* nOffBnd = vlEd->_nodes.back().Node();
+        const SMDS_MeshNode* nIniBnd = initMDS->FindNode( nOffBnd->GetID() + theNShift );
+        iniNodesBnd[ i ] = nIniBnd;
+      }
+      if ( const SMDS_MeshElement* iniElem = initMDS->FindElement( iniNodes ))
+      {
+        initMDS->UnSetElementOnShape( iniElem );
+        initMDS->SetMeshElementOnShape( iniElem, theEOS._initShape );
+
+        // move the face to the top of prisms, on init mesh boundary
+        initMDS->ChangeElementNodes( iniElem, iniNodesBnd.data(), nbNodes );
+
+        if ( theEOS._toCheckCoinc )
+          theNodesToCheckCoinc.insert( iniNodesBnd.begin(), iniNodesBnd.end() );
+      }
+    }
+    return;
+  }
+
+  //================================================================================
+  /*!
+   * \brief set elements of WOVL face to sub-meshes
+   *  \param [in] theEOS - vlEdges of a sub-shape
+   *  \param [inout] theMesh - the mesh
+   *  \param [in] theN2E - map of node to vlEdge
+   *  \param [in] theNShift - nb of nodes in the mesh before adding the offset mesh
+   */
+  //================================================================================
+
+  void setBnd2FVWL( VLEdgesOnShape &     theEOS,
+                    SMESH_Mesh*          theInitMesh,
+                    SMESH_Mesh*          theOffsMesh,
+                    //const TNode2VLEdge & theN2E,
+                    const smIdType       theNShift )
+  {
+    SMESHDS_Mesh* offsetMDS = theOffsMesh->GetMeshDS();
+    SMESHDS_Mesh*   initMDS = theInitMesh->GetMeshDS();
+
+    SMESHDS_SubMesh* sm = offsetMDS->MeshElements( theEOS._offsetShape );
+    if ( !sm || ( sm->NbElements() + sm->NbNodes() == 0 ))
+      return;
+
+    for ( SMDS_NodeIteratorPtr nIt = sm->GetNodes(); nIt->more(); )
+    {
+      const SMDS_MeshNode* offNode = nIt->next();
+      const SMDS_MeshNode* iniNode = initMDS->FindNode( offNode->GetID() + theNShift );
+      initMDS->UnSetNodeOnShape( iniNode );
+
+      switch( theEOS._initShape.ShapeType() ) {
+      case TopAbs_FACE:   initMDS->SetNodeOnFace( iniNode, TopoDS::Face( theEOS._initShape ));
+        break;
+      case TopAbs_EDGE:   initMDS->SetNodeOnEdge( iniNode, TopoDS::Edge( theEOS._initShape ));
+        break;
+      case TopAbs_VERTEX: initMDS->SetNodeOnVertex( iniNode, TopoDS::Vertex( theEOS._initShape ));
+        break;
+      default:;
+      }
+    }
+
+    std::vector< const SMDS_MeshNode* > iniNodes;
+    for ( SMDS_ElemIteratorPtr eIt = sm->GetElements(); eIt->more(); )
+    {
+      const SMDS_MeshElement* offElem = eIt->next();
+      // if ( offElem->GetType() != SMDSAbs_Face )
+      //   continue;
+
+      int nbNodes = offElem->NbCornerNodes();
+      iniNodes.resize( nbNodes );
+      for ( int i = 0; i < nbNodes; ++i )
+      {
+        const SMDS_MeshNode* nOff = offElem->GetNode( i );
+        const SMDS_MeshNode* nIni = initMDS->FindNode( nOff->GetID() + theNShift );
+        iniNodes[ i ] = nIni;
+      }
+      if ( const SMDS_MeshElement* iniElem = initMDS->FindElement( iniNodes ))
+      {
+        initMDS->UnSetElementOnShape( iniElem );
+        initMDS->SetMeshElementOnShape( iniElem, theEOS._initShapeID );
+
+        for ( const SMDS_MeshNode* n : iniNodes )
+          if ( n->GetPosition()->GetDim() == 3 )
+          {
+            initMDS->UnSetNodeOnShape( n );
+            if ( theEOS._initShape.ShapeType() == TopAbs_FACE )
+              initMDS->SetNodeOnFace( n, theEOS._initShapeID );
+            else
+              initMDS->SetNodeOnEdge( n, theEOS._initShapeID );
+          }
+      }
+    }
+    return;
+  }
+} // namespace
+
+
+//================================================================================
+/*!
+ * \brief Create a temporary mesh used to hold elements of the offset shape
+ */
+//================================================================================
+
+SMESH_Mesh* StdMeshers_Cartesian_VL::ViscousBuilder::MakeOffsetMesh()
+{
+  return _offsetMesh;
+}
+
+//================================================================================
+/*!
+ * \brief Constructor
+ */
+//================================================================================
+
+StdMeshers_Cartesian_VL::ViscousBuilder::ViscousBuilder( const StdMeshers_ViscousLayers* hyp,
+                                                         const SMESH_Mesh &              mainMesh,
+                                                         const TopoDS_Shape &            mainShape)
+  : _hyp( hyp ), _offsetMesh( new TmpMesh )
+{
+  // find shapes with viscous layers
+  TopTools_IndexedMapOfShape faces;
+  TopExp::MapShapes( mainShape, TopAbs_FACE, faces );
+  const SMESHDS_Mesh* iniMDS = mainMesh.GetMeshDS();
+
+  if ( hyp->IsToIgnoreShapes() )
+  {
+    for ( int i = 1; i <= faces.Size(); ++i )
+      _shapesWVL.insert( iniMDS->ShapeToIndex( faces( i )));
+
+    for ( TGeomID& sID : hyp->GetBndShapes() )
+      _shapesWVL.erase( sID );
+  }
+  else
+  {
+    for ( TGeomID& sID : hyp->GetBndShapes() )
+      _shapesWVL.insert( sID );
+  }
+
+  for ( TGeomID fID : _shapesWVL )
+  {
+    const TopoDS_Shape & face = iniMDS->IndexToShape( fID );
+    for ( TopExp_Explorer exp( face, TopAbs_EDGE ); exp.More(); exp.Next() )
+      _shapesWVL.insert( iniMDS->ShapeToIndex( exp.Current() ));
+    for ( TopExp_Explorer exp( face, TopAbs_VERTEX ); exp.More(); exp.Next() )
+      _shapesWVL.insert( iniMDS->ShapeToIndex( exp.Current() ));
+  }
+
+  // find EDGE and adjacent FACEs w/o VL
+  for ( int i = 1; i <= faces.Size(); ++i )
+  {
+    const TopoDS_Shape& face = faces( i );
+    TGeomID fID = iniMDS->ShapeToIndex( face );
+    bool isMainShape2D = (mainShape.ShapeType() == TopAbs_FACE) ? true : false;
+
+    if ( _shapesWVL.count( fID ) && !isMainShape2D )
+      continue;
+
+    for ( TopExp_Explorer exp( face, TopAbs_EDGE ); exp.More(); exp.Next() )
+      _edge2facesWOVL[ iniMDS->ShapeToIndex( exp.Current() )].push_back( fID );
+  }
+  
+  // When 2D meshing Need to add edges where segments need to be added due to geometry shrink
+  return;
+}
+
+//================================================================================
+/*!
+ * \brief Destructor
+ */
+//================================================================================
+
+StdMeshers_Cartesian_VL::ViscousBuilder::~ViscousBuilder()
+{
+  delete _offsetMesh; //_offsetMesh = 0;
+}
+
+//================================================================================
+/*!
+ * \brief Create an offset solid from a given one
+ *  \param [in] theShape - input shape can be a solid, solidcompound or a compound with solids
+ *  \param [in] theMesh - main mesh
+ *  \param [out] theError - error description
+ *  \return TopoDS_Shape - result offset shape of the same type as the received shape
+ */
+//================================================================================
+
+TopoDS_Shape StdMeshers_Cartesian_VL::ViscousBuilder::MakeOffsetSolid(const TopoDS_Shape & theShape,
+                                                                        SMESH_Mesh &         theMesh,
+                                                                        std::string &        theError )
+{
+  double offset = -_hyp->GetTotalThickness();
+  double    tol = Precision::Confusion();
+  TopAbs_ShapeEnum typeOfShape = theShape.ShapeType();
+
+  TopTools_IndexedMapOfShape shapeList;
+  TopExp::MapShapes( theShape, TopAbs_SOLID, shapeList );
+  std::vector<TopoDS_Shape> shrinkBodies;
+
+  for ( int i = 1; i <= shapeList.Size(); ++i )
+  {
+    auto solid = shapeList( i );
+      // If Shape is solid call direct 
+    BRepOffset_MakeOffset * makeOffset = new BRepOffset_MakeOffset();
+    makeOffset->Initialize( solid, offset, tol, BRepOffset_Skin, /*Intersection=*/false,
+                          /*selfInter=*/false, GeomAbs_Intersection);
+
+    // exclude inlet FACEs
+    SMESHDS_Mesh* meshDS = theMesh.GetMeshDS();
+    for ( TopExp_Explorer fEx( theShape, TopAbs_FACE ); fEx.More(); fEx.Next() )
+    {
+      TGeomID fID = meshDS->ShapeToIndex( fEx.Current() );
+      if ( !_shapesWVL.count( fID ))
+        makeOffset->SetOffsetOnFace( TopoDS::Face( fEx.Current()), 0 );
+    }
+
+    makeOffset->MakeOffsetShape();
+    if ( makeOffset->IsDone() )
+    {
+      shrinkBodies.push_back( makeOffset->Shape() );
+      _makeOffsetCollection.push_back( makeOffset );
+    }
+    else
+    {
+      switch ( makeOffset->Error() )
+      {
+      case BRepOffset_NoError:
+        theError = "OK. Offset performed successfully.";break;
+      case BRepOffset_BadNormalsOnGeometry:
+        theError = "Degenerated normal on input data.";break;
+      case BRepOffset_C0Geometry:
+        theError = "C0 continuity of input data.";break;
+      case BRepOffset_NullOffset:
+        theError = "Null offset of all faces.";break;
+      case BRepOffset_NotConnectedShell:
+        theError = "Incorrect set of faces to remove, the remaining shell is not connected.";break;
+      case BRepOffset_CannotTrimEdges:
+        theError = "Can not trim edges.";break;
+      case BRepOffset_CannotFuseVertices:
+        theError = "Can not fuse vertices.";break;
+      case BRepOffset_CannotExtentEdge:
+        theError = "Can not extent edge.";break;
+      default:
+        theError = "operation not done.";
+      }
+      theError = "BRepOffset_MakeOffset error: " + theError;
+
+      return TopoDS_Shape();
+    }    
+  }
+  
+  if ( typeOfShape == TopAbs_COMPOUND || typeOfShape == TopAbs_COMPSOLID )
+  {
+    _solidCompound.SetGlue( BOPAlgo_GlueFull );
+    _solidCompound.SetToFillHistory( true );
+    for ( auto solid : shrinkBodies )
+      _solidCompound.AddArgument( solid );
+
+    _solidCompound.Perform();
+    return _solidCompound.Shape();
+  }
+  else
+    return shrinkBodies[ 0 ]; // return one solid
+
+}
+
+//================================================================================
+/*!
+ * \brief Create an offset shape from a given one
+ *  \param [in] theShape - input shape
+ *  \param [in] theMesh - main mesh
+ *  \param [out] theError - error description
+ *  \return TopoDS_Shape - result offset shape
+ */
+//================================================================================
+
+TopoDS_Shape
+StdMeshers_Cartesian_VL::ViscousBuilder::MakeOffsetShape(const TopoDS_Shape & theShape,
+                                                         SMESH_Mesh &         theMesh,
+                                                         std::string &        theError )
+{
+  double offset                 = -_hyp->GetTotalThickness();
+  double    tol                 = Precision::Confusion();
+  TopAbs_ShapeEnum typeOfShape  = theShape.ShapeType();
+
+  // Switch here for the treatment of faces
+  if ( typeOfShape == TopAbs_FACE )
+  {
+    TopoDS_Face face = TopoDS::Face( theShape );
+    GProp_GProps gprops;
+    BRepGProp::SurfaceProperties(face, gprops); // Stores results in gprops
+    double faceArea = gprops.Mass();
+
+    _makeFaceOffset = BRepOffsetAPI_MakeOffset( face, GeomAbs_Intersection );
+    _makeFaceOffset.Perform( offset );
+    TopoDS_Wire wireFrame   = TopoDS::Wire( _makeFaceOffset.Shape() );
+    TopoDS_Face shrinkFace  = TopoDS::Face( BRepBuilderAPI_MakeFace( wireFrame, false ) );
+    BRepGProp::SurfaceProperties(shrinkFace, gprops); // Stores results in gprops
+    double sArea = gprops.Mass();
+
+    if ( sArea > faceArea /*recompute the shrink face because offset was done in the contrary direction as expected*/)
+    {
+      _makeFaceOffset.Perform( -offset );
+      wireFrame  = TopoDS::Wire( _makeFaceOffset.Shape() );
+      shrinkFace = TopoDS::Face( BRepBuilderAPI_MakeFace( wireFrame, false ) );
+    }
+    _offsetShape = shrinkFace;
+    return _offsetShape;
+  }
+  else
+  {
+    _offsetShape = MakeOffsetSolid( theShape, theMesh, theError );
+    return _offsetShape;
+  }  
+}
+
+//================================================================================
+/*!
+ * \brief Return the list of sub-shape of the same type of the offset shape generated from a given initial sub-shape
+ */
+//================================================================================
+
+void StdMeshers_Cartesian_VL::ViscousBuilder::getOffsetSubShape( const TopoDS_Shape& S, std::vector<TopoDS_Shape>& subShapeList )
+{  
+  for( auto offset : _makeOffsetCollection )
+  {
+    const TopTools_ListOfShape& newShapes = offset->Generated( S );
+    if ( newShapes.Size() == 0 )
+      continue; // keep searching
+
+    for ( const TopoDS_Shape& ns : newShapes )
+    {
+      if ( ns.ShapeType() == S.ShapeType() )
+      {
+        if  ( _solidCompound.Arguments().Size() == 0 /* only one solid shrank*/ )
+        {
+          subShapeList.push_back( ns );
+        }
+        else
+        {
+          // In boolean operations the shapes are modified or deleted
+          const TopTools_ListOfShape& newGlueShapes = _solidCompound.Modified( ns );
+          for ( TopoDS_Shape& ngs : newGlueShapes )
+            if ( ngs.ShapeType() == ns.ShapeType() /*&& !ngs.Checked()*/  )
+              subShapeList.push_back( ngs );
+          
+          if ( newGlueShapes.Size() == 0 && !_solidCompound.IsDeleted( ns ) )
+            subShapeList.push_back( ns );
+        }
+      }            
+    }      
+  }     
+
+  // check for _makeFaceOffset in face shrink
+  if ( _makeOffsetCollection.size()  == 0 )
+  {
+    const TopTools_ListOfShape& newShapes = _makeFaceOffset.Generated( S );
+    for ( const TopoDS_Shape& ns : newShapes )
+    {
+      if ( ns.ShapeType() == S.ShapeType() )
+        return subShapeList.push_back( ns );
+    }
+  }
+}
+
+bool StdMeshers_Cartesian_VL::ViscousBuilder::CheckGeometryMaps( SMESH_Mesh &        offsetMesh,
+                                                                  const TopoDS_Shape & theShape  )
+{
+  SMESHDS_Mesh* offsetMDS       = offsetMesh.GetMeshDS();
+  TopoDS_Shape shrinkGeomToMesh = offsetMDS->ShapeToMesh();  
+
+  TopTools_IndexedMapOfShape shrinkGeomMap;
+  TopExp::MapShapes( shrinkGeomToMesh, shrinkGeomMap );
+  TopTools_IndexedMapOfShape offsetGeomMap;
+  TopExp::MapShapes( _offsetShape, offsetGeomMap );
+
+  // loop on sub-shapes to project nodes from offset boundary to initial boundary
+  TopAbs_ShapeEnum types[3] = { TopAbs_VERTEX, TopAbs_EDGE, TopAbs_FACE };
+  for ( TopAbs_ShapeEnum shType : types )
+  {
+    TopTools_IndexedMapOfShape shapes;
+    TopExp::MapShapes( theShape, shType, shapes );
+    for ( int i = 1; i <= shapes.Size(); ++i )
+    {
+      // For each type of geometry check the existence of one or more equivalents
+      std::vector<TopoDS_Shape> listOfShapes;
+      getOffsetSubShape( shapes(i), listOfShapes );
+      if ( listOfShapes.size() == 0 ) return false;
+    }
+  }
+  return true;
+}
+
+//================================================================================
+/*!
+ * \brief Create prismatic mesh between _offsetShape and theShape
+ *  \remark Build the viscous layer from the iteration of shrink geometry
+ *  \param [out] theMesh - mesh to fill in
+ *  \param [in] theShape - initial shape
+ *  \return bool - is Ok
+ */
+//================================================================================
+
+bool StdMeshers_Cartesian_VL::ViscousBuilder::MakeViscousLayers( SMESH_Mesh &        offsetMesh,
+                                                                 SMESH_Mesh &         theMesh,
+                                                                 const TopoDS_Shape & theShape )
+{
+  SMESHDS_Mesh* offsetMDS       = offsetMesh.GetMeshDS();
+  SMESHDS_Mesh*   initMDS       = theMesh.GetMeshDS();
+  TopoDS_Shape shrinkGeomToMesh = offsetMDS->ShapeToMesh();  
+  bool isMainShape2D = (theShape.ShapeType() == TopAbs_FACE) ? true : false;
+
+  // Validate map of shrink+joint geometry elements
+  if ( !CheckGeometryMaps(offsetMesh, theShape ) && !isMainShape2D )
+    throw SALOME_Exception("The shrink geometry does not match or respect the original topology.The viscous layer can't be build");
+
+  
+  initMDS->ClearMesh(); // avoid mesh superposition on multiple calls of addLayers
+  offsetMDS->SetAllCellsNotMarked();
+
+  TopTools_IndexedMapOfShape shrinkGeomMap;
+  TopExp::MapShapes( shrinkGeomToMesh, shrinkGeomMap );
+
+  TopTools_IndexedMapOfShape offsetGeomMap;
+  TopExp::MapShapes( _offsetShape, offsetGeomMap );
+
+  // Compute heights of viscous layers
+  std::vector< double > vlH;
+  computeVLHeight( _hyp, vlH );
+  
+  std::vector< VLEdgesOnShape > edgesOnShape;
+  edgesOnShape.reserve( offsetMDS->MaxShapeIndex() + 1 );
+  TNode2VLEdge n2e;
+
+  // loop on sub-shapes to project nodes from offset boundary to initial boundary
+  TopAbs_ShapeEnum types[3] = { TopAbs_VERTEX, TopAbs_EDGE, TopAbs_FACE };
+  for ( TopAbs_ShapeEnum shType : types )
+  {
+    TopTools_IndexedMapOfShape shapes;
+    TopExp::MapShapes( theShape, shType, shapes );
+    for ( int i = 1; i <= shapes.Size(); ++i )
+    {
+      edgesOnShape.resize( edgesOnShape.size() + 1 );
+      VLEdgesOnShape& EOS = edgesOnShape.back();
+      std::vector<TopoDS_Shape> listOfShapes;
+      EOS._initShape    = shapes( i );
+      
+      // Get a list of subShapes of the same type generated from the same face
+      // It is the case with split objects.
+      getOffsetSubShape( EOS._initShape, listOfShapes );
+      for ( TopoDS_Shape& shrinkShape : listOfShapes )
+      {
+        int shapeId       = offsetGeomMap.FindIndex( shrinkShape );        
+        EOS._offsetShape  = shrinkGeomMap.FindKey( shapeId );     
+        EOS._initShapeID  = initMDS->ShapeToIndex( EOS._initShape );
+        EOS._hasVL        = _shapesWVL.count( EOS._initShapeID );
+
+        EOS._toCheckCoinc = false;
+        if ( !EOS._hasVL )
+          continue;
+
+        // project boundary nodes of offset mesh to boundary of init mesh
+        // (new nodes are created in the offset mesh)
+        switch( EOS._offsetShape.ShapeType() ) {
+        case TopAbs_VERTEX:
+        {
+          EOS._edges.resize( 1 );
+          EOS._edges[0]._nodes.resize( 2 );
+          EOS._edges[0]._nodes[0] = SMESH_Algo::VertexNode( TopoDS::Vertex( EOS._offsetShape ),
+                                                            offsetMDS );
+          gp_Pnt offP = BRep_Tool::Pnt( TopoDS::Vertex( EOS._initShape ));
+          EOS._edges[0]._nodes[1] = offsetMDS->AddNode( offP.X(), offP.Y(), offP.Z() );
+          //EOS._edges[0]._length   = offP.Distance( EOS._edges[0]._nodes[0] );
+          n2e.Bind( EOS._edges[0]._nodes[0].Node(), & EOS._edges[0] );
+          break;
+        }
+        case TopAbs_EDGE:
+        {
+          projectToEdge( EOS, offsetMDS, n2e, isMainShape2D /* add vertex from edges*/ );
+          break;
+        }
+        case TopAbs_FACE:
+        {
+          projectToFace( EOS, offsetMDS, n2e );
+          break;
+        }
+        default:;
+        }
+
+        // create nodes of layers
+        if ( _hyp->GetNumberLayers() > 1 )
+        {
+          //if ( _shapesWVL.count( EOS._initShapeID ))
+          for ( size_t i = 0; i < EOS._edges.size(); ++i )
+          {
+            divideVLEdge( &EOS._edges[ i ], vlH, offsetMDS );
+          }
+        }
+      } // loop on generated shrink shape
+    }//loop on original shape
+  } // loop on shape types
+  
+  // create prisms
+  bool prismsOk = true;
+  for ( size_t i = 0; i < edgesOnShape.size(); ++i )
+  {
+    VLEdgesOnShape& EOS = edgesOnShape[ i ];
+    if ( EOS._initShape.ShapeType() == TopAbs_FACE && EOS._hasVL )
+    {
+      if ( !makePrisms( EOS, &offsetMesh, n2e ))
+        prismsOk = false;
+    }
+  }
+
+  if ( prismsOk )
+  {
+    // create faces on FACEs WOVL
+    for ( size_t i = 0; i < edgesOnShape.size(); ++i )
+    {
+      VLEdgesOnShape& EOS = edgesOnShape[ i ];
+      if ( EOS._initShape.ShapeType() == TopAbs_EDGE && EOS._hasVL )
+      {
+        auto e2f = _edge2facesWOVL.find( EOS._initShapeID );
+        if ( e2f != _edge2facesWOVL.end() && !e2f->second.empty() )
+        {
+          TopoDS_Shape  f = initMDS->IndexToShape( e2f->second[0] );
+          std::vector<TopoDS_Shape> listOfShapes;
+          getOffsetSubShape( f, listOfShapes );
+          for( TopoDS_Shape& subShape : listOfShapes )
+          {
+            int shapeId   = offsetGeomMap.FindIndex( subShape );
+            TopoDS_Shape f2 = shrinkGeomMap.FindKey( shapeId );     
+            makeFaces( EOS, & offsetMesh, n2e, offsetMDS->ShapeToIndex( f2 ) );
+          }        
+        }
+      }
+    }
+  }
+
+  if ( isMainShape2D )
+  {
+     // create faces on FACEs of the inflate viscous layer in 2D faces
+    for ( size_t i = 0; i < edgesOnShape.size(); ++i )
+    {
+      VLEdgesOnShape& EOS = edgesOnShape[ i ];
+      if ( EOS._initShape.ShapeType() == TopAbs_EDGE && EOS._hasVL /* iterate in market edges with viscous layer*/)
+      {
+        int shapeId = offsetMDS->ShapeToIndex( shrinkGeomToMesh );
+        makeFaces( EOS, & offsetMesh, n2e, shapeId, isMainShape2D ); // pass face Id of shrink geometry
+      }
+    }
+  }
+
+   // copy offset mesh to the main one
+  initMDS->Modified();
+  initMDS->CompactMesh();
+  smIdType nShift = initMDS->NbNodes();
+  TGeomID solidID = initMDS->ShapeToIndex( theShape );
+  copyMesh( & offsetMesh, & theMesh, solidID );
+
+  if ( !prismsOk )
+  {
+    if ( SMESH_subMesh * sm = theMesh.GetSubMesh( theShape ))
+    {
+      sm->GetComputeError() =
+        SMESH_ComputeError::New( COMPERR_ALGO_FAILED,
+                                 "Viscous layers construction error: bad mesh on offset geometry" );
+    }
+    return prismsOk;
+  }
+
+  // set elements of layers boundary to sub-meshes
+  TIDSortedNodeSet nodesToCheckCoinc;
+  for ( size_t i = 0; i < edgesOnShape.size(); ++i )
+  {
+    VLEdgesOnShape& EOS = edgesOnShape[ i ];
+    if ( EOS._hasVL )
+      setBnd2Sub( EOS, &theMesh, &offsetMesh, n2e, nShift, nodesToCheckCoinc );
+    else
+      setBnd2FVWL( EOS, &theMesh, &offsetMesh, nShift );
+  }
+
+  // merge coincident nodes
+  SMESH_MeshEditor editor( &theMesh );
+  SMESH_MeshEditor::TListOfListOfNodes nodesToMerge;
+  editor.FindCoincidentNodes( nodesToCheckCoinc, vlH[0]/50., nodesToMerge, false );
+  editor.MergeNodes( nodesToMerge );
+
+  // create a group
+  if ( !_hyp->GetGroupName().empty() )
+  {
+    SMDS_MeshGroup* group = _hyp->CreateGroup( _hyp->GetGroupName(), theMesh, SMDSAbs_Volume );
+
+    for ( SMDS_ElemIteratorPtr it = initMDS->elementsIterator(); it->more(); )
+    {
+      const SMDS_MeshElement* el = it->next();
+      if ( el->isMarked() )
+        group->Add( el );
+    }
+  }
+
+
+  return prismsOk;
+}
\ No newline at end of file
diff --git a/src/StdMeshers/StdMeshers_Cartesian_VL.hxx b/src/StdMeshers/StdMeshers_Cartesian_VL.hxx
new file mode 100644 (file)
index 0000000..9f7298e
--- /dev/null
@@ -0,0 +1,85 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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      : StdMeshers_Cartesian_VL.hxx
+// Created   : Tue May 24 12:32:01 2022
+// Author    : Edward AGAPOV (eap)
+
+#ifndef __StdMeshers_Cartesian_VL_HXX__
+#define __StdMeshers_Cartesian_VL_HXX__
+
+#include <BOPAlgo_Builder.hxx>
+#include <BRepOffset_MakeOffset.hxx>
+#include <BRepOffsetAPI_MakeOffset.hxx>
+
+#include <set>
+#include <map>
+#include <vector>
+
+class TopoDS_Face;
+class StdMeshers_ViscousLayers;
+class SMESH_Mesh;
+
+namespace StdMeshers_Cartesian_VL
+{
+  class ViscousBuilder
+  {
+  public:
+
+    ViscousBuilder( const StdMeshers_ViscousLayers* hypViscousLayers,
+                    const SMESH_Mesh &              theMesh,
+                    const TopoDS_Shape &            theShape);
+    ~ViscousBuilder();
+
+    TopoDS_Shape MakeOffsetShape(const TopoDS_Shape & theShape,
+                                 SMESH_Mesh &         theMesh,
+                                 std::string &        theError );                              
+
+    SMESH_Mesh*  MakeOffsetMesh();
+
+    bool         MakeViscousLayers( SMESH_Mesh &         offsetMesh,
+                                    SMESH_Mesh &         theMesh,
+                                    const TopoDS_Shape & theShape );                 
+    
+  private:
+    
+    TopoDS_Shape MakeOffsetSolid(const TopoDS_Shape & theShape,
+                                 SMESH_Mesh &         theMesh,
+                                 std::string &        theError );   
+
+    bool         CheckGeometryMaps( SMESH_Mesh &         offsetMesh,
+                                    const TopoDS_Shape & theShape );             
+
+    void getOffsetSubShape( const TopoDS_Shape& S, std::vector<TopoDS_Shape>& listOfShapes );
+
+    const StdMeshers_ViscousLayers* _hyp;
+    BRepOffset_MakeOffset           _makeOffset;
+    std::vector<BRepOffset_MakeOffset*> _makeOffsetCollection;  // collection to  
+    BRepOffsetAPI_MakeOffset        _makeFaceOffset;            // to define shrink of planar faces. The face is shrink in all 
+    BOPAlgo_Builder                 _solidCompound;             // to glue solids with common faces after shrinking then with BRepOffset_MakeOffset
+    SMESH_Mesh*                     _offsetMesh;
+    TopoDS_Shape                    _offsetShape;
+    std::set< int >                 _shapesWVL;                 // shapes with viscous layers
+    std::map< int, std::vector< int > > _edge2facesWOVL;        // EDGE 2 FACEs w/o VL
+  };
+}
+
+#endif
index 0324fc92a792bbb4fa8c051284b5f46305203519..e50d288dd1b52c75ad50d4be9e47dd0dfd74db92 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -124,7 +124,7 @@ public:
   bool Contain( const TopoDS_Vertex& vertex ) const;
   void AppendSide( const _FaceSide& side );
   void SetBottomSide( int i );
-  int GetNbSegments(SMESH_ProxyMesh& mesh, const SMESHDS_SubMesh* smToCheckEdges=0) const;
+  smIdType GetNbSegments(SMESH_ProxyMesh& mesh, const SMESHDS_SubMesh* smToCheckEdges=0) const;
   bool StoreNodes(SMESH_ProxyMesh& mesh, vector<const SMDS_MeshNode*>& myGrid,
                   bool reverse, bool isProxy, const SMESHDS_SubMesh* smToCheckEdges=0 );
   void SetID(EQuadSides id) { myID = id; }
@@ -1121,32 +1121,32 @@ bool StdMeshers_CompositeHexa_3D::Evaluate(SMESH_Mesh&         theMesh,
       lessComplexSide = & *face;
 
   // Get an 1D size of lessComplexSide
-  int nbSeg1 = 0;
+  smIdType nbSeg1 = 0;
   vector<TopoDS_Edge> edges;
   if ( !lessComplexSide->GetHoriEdges(edges) )
     return false;
   for ( size_t i = 0; i < edges.size(); ++i )
   {
-    const vector<int>& nbElems = aResMap[ theMesh.GetSubMesh( edges[i] )];
+    const vector<smIdType>& nbElems = aResMap[ theMesh.GetSubMesh( edges[i] )];
     if ( !nbElems.empty() )
-      nbSeg1 += Max( nbElems[ SMDSEntity_Edge ], nbElems[ SMDSEntity_Quad_Edge ]);
+      nbSeg1 += std::max( nbElems[ SMDSEntity_Edge ], nbElems[ SMDSEntity_Quad_Edge ]);
   }
 
   // Get an 1D size of a box side orthogonal to lessComplexSide
-  int nbSeg2 = 0;
+  smIdType nbSeg2 = 0;
   _QuadFaceGrid* ortoSide =
     lessComplexSide->FindAdjacentForSide( Q_LEFT, boxFaceContainer, B_UNDEFINED );
   edges.clear();
   if ( !ortoSide || !ortoSide->GetHoriEdges(edges) ) return false;
   for ( size_t i = 0; i < edges.size(); ++i )
   {
-    const vector<int>& nbElems = aResMap[ theMesh.GetSubMesh( edges[i] )];
+    const vector<smIdType>& nbElems = aResMap[ theMesh.GetSubMesh( edges[i] )];
     if ( !nbElems.empty() )
-      nbSeg2 += Max( nbElems[ SMDSEntity_Edge ], nbElems[ SMDSEntity_Quad_Edge ]);
+      nbSeg2 += std::max( nbElems[ SMDSEntity_Edge ], nbElems[ SMDSEntity_Quad_Edge ]);
   }
 
   // Get an 2D size of a box side orthogonal to lessComplexSide
-  int nbFaces = 0, nbQuadFace = 0;
+  smIdType nbFaces = 0, nbQuadFace = 0;
   list< TopoDS_Face > sideFaces;
   if ( ortoSide->IsComplex() )
     for ( _QuadFaceGrid::TChildIterator child = ortoSide->GetChildren(); child.more(); )
@@ -1157,7 +1157,7 @@ bool StdMeshers_CompositeHexa_3D::Evaluate(SMESH_Mesh&         theMesh,
   list< TopoDS_Face >::iterator f = sideFaces.begin();
   for ( ; f != sideFaces.end(); ++f )
   {
-    const vector<int>& nbElems = aResMap[ theMesh.GetSubMesh( *f )];
+    const vector<smIdType>& nbElems = aResMap[ theMesh.GetSubMesh( *f )];
     if ( !nbElems.empty() )
     {
       nbFaces    = nbElems[ SMDSEntity_Quadrangle ];
@@ -1166,8 +1166,8 @@ bool StdMeshers_CompositeHexa_3D::Evaluate(SMESH_Mesh&         theMesh,
   }
 
   // Fill nb of elements
-  vector<int> aResVec(SMDSEntity_Last,0);
-  int nbSeg3 = ( nbFaces + nbQuadFace ) / nbSeg2;
+  vector<smIdType> aResVec(SMDSEntity_Last,0);
+  smIdType nbSeg3 = ( nbFaces + nbQuadFace ) / nbSeg2;
   aResVec[SMDSEntity_Node]       = (nbSeg1-1) * (nbSeg2-1) * (nbSeg3-1);
   aResVec[SMDSEntity_Hexa]       = nbSeg1 * nbFaces;
   aResVec[SMDSEntity_Quad_Hexa]  = nbSeg1 * nbQuadFace;
@@ -1242,12 +1242,13 @@ bool _QuadFaceGrid::Init(const TopoDS_Face& f, SMESH_ProxyMesh& mesh)
   if (mySides.size() != 4)
     return false;
 
-#ifdef _DEBUG_
+if (SALOME::VerbosityActivated())
+{
   mySides.GetSide( Q_BOTTOM )->SetID( Q_BOTTOM );
   mySides.GetSide( Q_RIGHT  )->SetID( Q_RIGHT );
   mySides.GetSide( Q_TOP    )->SetID( Q_TOP );
   mySides.GetSide( Q_LEFT   )->SetID( Q_LEFT );
-#endif
+}
 
   return true;
 }
@@ -2229,9 +2230,9 @@ void _FaceSide::SetBottomSide( int i )
 //purpose  : 
 //=======================================================================
 
-int _FaceSide::GetNbSegments(SMESH_ProxyMesh& mesh, const SMESHDS_SubMesh* smToCheckEdges) const
+smIdType _FaceSide::GetNbSegments(SMESH_ProxyMesh& mesh, const SMESHDS_SubMesh* smToCheckEdges) const
 {
-  int nb = 0;
+  smIdType nb = 0;
   if ( myChildren.empty() )
   {
     nb = mesh.GetSubMesh(myEdge)->NbElements();
index 0d8c0a443d299c566157df21bdedb43a90b72a9b..327456f7b06537409fccc4b1c385819b8370870d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index e89f4895d25499ebf9eb2e232f357e96a9946f1f..9e470c6f0f3d2456ab5cdd02f18509548a26e84b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index c7f60c4ba90d53de7226b545bbdc13e57b63fe7e..8cd35a9ceca09de9b88500ec2a4904e32dee17e8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index bbf47cb2133c5f6b9e2a36a29947f020a230e0ee..0ed983507f66a7cca00c594162a1ff2911bd7228 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 2497a4e70ad98a9f4bd84644b0f15a0d44facc12..a775817424c6accd67fa652f0bb64ef65e5b22a3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 51907cd9de1ec41c1828ea05a19acb62120055d8..1b8fbc1713f0b4618a7202366f988ecbf6da0267 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -156,7 +156,7 @@ double FunctionTable::integral( const double a, const double b ) const
 
 bool FunctionTable::findBounds( const double x, int& x_ind_1, int& x_ind_2 ) const
 {
-  int n = myData.size() / 2;
+  int n = (int) myData.size() / 2;
   if( n==0 || x<myData[0] )
   {
     x_ind_1 = x_ind_2 = 0;
@@ -289,35 +289,35 @@ double dihotomySolve( Function& f, const double val, const double _start, const
 }
 
 bool buildDistribution( const TCollection_AsciiString& f, const int conv, const double start, const double end,
-                        const int nbSeg, vector<double>& data, const double eps )
+                        const smIdType nbSeg, vector<double>& data, const double eps )
 {
   FunctionExpr F( f.ToCString(), conv );
   return buildDistribution( F, start, end, nbSeg, data, eps );
 }
 
 bool buildDistribution( const std::vector<double>& f, const int conv, const double start, const double end,
-                        const int nbSeg, vector<double>& data, const double eps )
+                        const smIdType nbSeg, vector<double>& data, const double eps )
 {
   FunctionTable F( f, conv );
   return buildDistribution( F, start, end, nbSeg, data, eps );
 }
 
-bool buildDistribution( const Function& func, const double start, const double end, const int nbSeg,
-                        vector<double>& data, const double eps )
+bool buildDistribution( const Function& func, const double start, const double end,
+                        const smIdType nbSeg, vector<double>& data, const double eps )
 {
   if( nbSeg<=0 )
     return false;
 
   data.resize( nbSeg+1 );
   data[0] = start;
-  double J = func.integral( start, end ) / nbSeg;
+  double J = func.integral( start, end ) / double( nbSeg );
   if( J<1E-10 )
     return false;
 
   bool ok;
   //MESSAGE( "distribution:" );
   //char buf[1024];
-  for( int i=1; i<nbSeg; i++ )
+  for( smIdType i = 1; i < nbSeg; i++ )
   {
     FunctionIntegral f_int( &func, data[i-1] );
     data[i] = dihotomySolve( f_int, J, data[i-1], end, eps, ok );
index cc7593c4f35d132e65b45336a6cd1a683c63be4c..40a384924c12e033646362ea444089cfd95cec18 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -37,6 +37,8 @@
 #include <Expr_Array1OfNamedUnknown.hxx>
 #include <TColStd_Array1OfReal.hxx>
 
+#include <smIdType.hxx>
+
 namespace StdMeshers
 {
 class STDMESHERS_EXPORT Function 
@@ -105,15 +107,15 @@ private:
 STDMESHERS_EXPORT
 bool buildDistribution( const Function& f,
                         const double start, const double end,
-                        const int nbSeg,
+                        const smIdType nbSeg,
                         std::vector<double>& data,
                         const double eps );
 
 STDMESHERS_EXPORT
 bool buildDistribution( const TCollection_AsciiString& f, const int conv, const double start, const double end,
-                        const int nbSeg, std::vector<double>& data, const double eps );
+                        const smIdType nbSeg, std::vector<double>& data, const double eps );
 STDMESHERS_EXPORT
 bool buildDistribution( const std::vector<double>& f, const int conv, const double start, const double end,
-                        const int nbSeg, std::vector<double>& data, const double eps );
+                        const smIdType nbSeg, std::vector<double>& data, const double eps );
 }
 #endif
index 0ebea37408a71c5d3e62c1036016a2f96b5a8b5e..51a09cc99a9fa4fb34f35a01104bd13d370aef5f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -835,7 +835,7 @@ bool StdMeshers_FaceSide::GetEdgeNodes(size_t                        i,
     if ( mesh->HasModificationsToDiscard() ) // check nb of nodes on the EDGE sub-mesh
     {
       int iQuad    = sm->NbElements() ? sm->GetElements()->next()->IsQuadratic() : 0;
-      int nbExpect = sm->NbElements() - 1 + iQuad * sm->NbElements();
+      smIdType nbExpect = sm->NbElements() - 1 + iQuad * sm->NbElements();
       if ( nbExpect != sm->NbNodes() ) // some nodes are moved from the EDGE by MergeNodes()
       {
         // add nodes of all segments
@@ -1045,7 +1045,7 @@ void StdMeshers_FaceSide::SetIgnoreMediumNodes(bool toIgnore)
 //           since creation of this side
 //=======================================================================
 
-int StdMeshers_FaceSide::NbPoints(const bool update) const
+smIdType StdMeshers_FaceSide::NbPoints(const bool update) const
 {
   if ( !myPoints.empty() )
     return myPoints.size();
@@ -1112,7 +1112,7 @@ int StdMeshers_FaceSide::NbPoints(const bool update) const
 //           since creation of this side
 //=======================================================================
 
-int StdMeshers_FaceSide::NbSegments(const bool update) const
+smIdType StdMeshers_FaceSide::NbSegments(const bool update) const
 {
   return NbPoints( update ), myNbSegments;
 }
@@ -1148,7 +1148,9 @@ void StdMeshers_FaceSide::reverseProxySubmesh( const TopoDS_Edge& E )
 
 void StdMeshers_FaceSide::dump(const char* msg) const
 {
-#ifdef _DEBUG_
+  if (!SALOME::VerbosityActivated())
+    return;
+
   if (msg) MESSAGE ( std::endl << msg );
   MESSAGE_BEGIN ("NB EDGES: "<< myEdge.size() );
   MESSAGE_ADD ( "nbPoints: "<<myNbPonits<<" vecSize: " << myPoints.size()<<" "<<myFalsePoints.size() );
@@ -1176,9 +1178,6 @@ void StdMeshers_FaceSide::dump(const char* msg) const
     MESSAGE_ADD ( "\tF: "<<myFirst[i]<< " L: "<< myLast[i] );
     MESSAGE_END ( "\tnormPar: "<<myNormPar[i]<<endl );
   }
-#else
-  (void)msg; // unused in release mode
-#endif
 }
 
 //================================================================================
index 6f08cc57d40984446df510b6acd0b57f07ed1aee..50cbff2dfd1533b2cd47299ad38b8e57f2ddfcf0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -172,13 +172,13 @@ public:
    *        Call it with update == true if mesh of this side can be recomputed
    *        since creation of this side
    */
-  int NbPoints(const bool update = false) const;
+  smIdType NbPoints(const bool update = false) const;
   /*!
    * \brief Return nb edges
    *        Call it with update == true if mesh of this side can be recomputed
    *        since creation of this side
    */
-  int NbSegments(const bool update = false) const;
+  smIdType NbSegments(const bool update = false) const;
   /*!
    * \brief Return mesh
    */
@@ -255,7 +255,7 @@ public:
   /*!
    * \brief Return nb of wrapped edges
    */
-  int NbEdges() const { return myEdge.size(); }
+  int NbEdges() const { return (int)myEdge.size(); }
   /*!
    * \brief Return i-th edge (count starts from zero)
    */
@@ -346,7 +346,7 @@ protected:
   std::vector<double>               myEdgeLength;
   std::vector<int>                  myIsUniform;
   double                            myLength;
-  int                               myNbPonits, myNbSegments;
+  smIdType                          myNbPonits, myNbSegments;
   SMESH_ProxyMesh::Ptr              myProxyMesh;
   bool                              myMissingVertexNodes, myIgnoreMediumNodes;
   gp_Pnt2d                          myDefaultPnt2d;
@@ -364,7 +364,7 @@ protected:
 
 inline int StdMeshers_FaceSide::EdgeIndex( double U ) const
 {
-  int i = myNormPar.size() - 1;
+  int i = (int)myNormPar.size() - 1;
   while ( i > 0 && U < myNormPar[ i-1 ] ) --i;
   return i;
 }
index 9a1343e5f0d02f77ec048de0109e7aa99deee629..f75bceac366c7d91b3a9b3b11de11e5f5128942e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -62,20 +62,26 @@ StdMeshers_FixedPoints1D::~StdMeshers_FixedPoints1D()
 
 void StdMeshers_FixedPoints1D::SetPoints(const std::vector<double>& listParams)
 {
-  _params = listParams;
-  NotifySubMeshesHypothesisModification();
+  if ( _params != listParams )
+  {
+    _params = listParams;
+    NotifySubMeshesHypothesisModification();
+  }
 }
 
 //=============================================================================
 /*!
- *  
+ *
  */
 //=============================================================================
 
-void StdMeshers_FixedPoints1D::SetNbSegments(const std::vector<int>& listNbSeg) 
+void StdMeshers_FixedPoints1D::SetNbSegments(const std::vector<smIdType>& listNbSeg)
 {
-  _nbsegs = listNbSeg;
-  NotifySubMeshesHypothesisModification();
+  if ( _nbsegs != listNbSeg )
+  {
+    _nbsegs = listNbSeg;
+    NotifySubMeshesHypothesisModification();
+  }
 }
 
 ostream & StdMeshers_FixedPoints1D::SaveTo(ostream & save)
@@ -113,7 +119,7 @@ ostream & StdMeshers_FixedPoints1D::SaveTo(ostream & save)
 istream & StdMeshers_FixedPoints1D::LoadFrom(istream & load)
 {
   bool isOK = true;
-  int intVal;
+  smIdType intVal;
   double dblVal;
 
   isOK = static_cast<bool>(load >> intVal);
index 431ef1e9e47c1fc2dd27de05e678b608524ec579..0dc5ef57166fea4c747cf4da37b2e24645548fff 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 #ifndef _SMESH_FIXEDPOINTS1D_HXX_
 #define _SMESH_FIXEDPOINTS1D_HXX_
 
-
-
 #include "SMESH_StdMeshers.hxx"
 
 #include "StdMeshers_Reversible1D.hxx"
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
+#include <smIdType.hxx>
 
 #include <vector>
 
@@ -43,11 +42,11 @@ public:
 
   void SetPoints(const std::vector<double>& listParams);
 
-  void SetNbSegments(const std::vector<int>& listNbSeg) ;
+  void SetNbSegments(const std::vector<smIdType>& listNbSeg) ;
 
   const std::vector<double>& GetPoints() const { return _params; }
 
-  const std::vector<int>& GetNbSegments() const { return _nbsegs; }
+  const std::vector<smIdType>& GetNbSegments() const { return _nbsegs; }
 
   virtual std::ostream & SaveTo(std::ostream & save);
   virtual std::istream & LoadFrom(std::istream & load);
@@ -66,9 +65,9 @@ public:
    */
   virtual bool SetParametersByDefaults(const TDefaults& dflts, const SMESH_Mesh* theMesh=0);
 
-protected:
-  std::vector<double> _params;
-  std::vector<int>    _nbsegs;
+ protected:
+  std::vector<double>   _params;
+  std::vector<smIdType> _nbsegs;
 };
 
 #endif
index 25dd996ed233e84361402f8b4988cb900a1c3566..ec6c36241ae2258281d4a47088cee3cb8252cb6e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 1e3d86ac10fa5eebab103fb9ab8f8c9e6a5cfafa..5ab5c2f3f3b9d739c7ca582b273eb0a021194e98 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index bc1a2c98efdbb7b85d8db424ad5a0f189bafbd0c..d1617f3003d3f8cdaf7d5217950a536c01aca019 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 
 using namespace std;
 
-// Define error message and _MYDEBUG_ if needed
-#ifdef _DEBUG_
+// Define error message
 #define BAD_MESH_ERR \
   error(SMESH_Comment("Can't detect block-wise structure of the input 2D mesh.\n" \
                       __FILE__ ":" )<<__LINE__)
-//#define _MYDEBUG_
-#else
-#define BAD_MESH_ERR \
-  error(SMESH_Comment("Can't detect block-wise structure of the input 2D mesh"))
-#endif
-
 
 // Debug output
-#ifdef _MYDEBUG_
 #define _DUMP_(msg) cout << msg << endl
-#else
-#define _DUMP_(msg)
-#endif
-
 
 namespace
 {
@@ -68,12 +56,12 @@ namespace
     {
       B_BOTTOM=0, B_RIGHT, B_TOP, B_LEFT, B_FRONT, B_BACK, NB_BLOCK_SIDES
     };
-#ifdef _MYDEBUG_
+
   const char* SBoxSides[] = //!< names of block sides -- needed for DEBUG only
     {
       "BOTTOM", "RIGHT", "TOP", "LEFT", "FRONT", "BACK", "UNDEFINED"
     };
-#endif
+
   enum EQuadEdge //!< edges of quadrangle side
     {
       Q_BOTTOM = 0, Q_RIGHT, Q_TOP, Q_LEFT, NB_QUAD_SIDES
@@ -349,7 +337,7 @@ namespace
     // Find all block sides starting from mesh faces sharing the corner node
     // --------------------------------------------------------------------
 
-    int nbFacesOnSides = 0;
+    smIdType nbFacesOnSides = 0;
     TIDSortedElemSet cornerFaces; // corner faces of found _BlockSide's
     list< const SMDS_MeshNode* > corners( 1, nCorner );
     list< const SMDS_MeshNode* >::iterator corner = corners.begin();
@@ -1200,7 +1188,7 @@ bool StdMeshers_HexaFromSkin_3D::Evaluate(SMESH_Mesh &         aMesh,
   bool secondOrder = aMesh.NbFaces( ORDER_QUADRATIC );
 
   int entity = secondOrder ? SMDSEntity_Quad_Hexa : SMDSEntity_Hexa;
-  vector<int>& nbByType = aResMap[ aMesh.GetSubMesh( aShape )];
+  vector<smIdType>& nbByType = aResMap[ aMesh.GetSubMesh( aShape )];
   if ( entity >= (int) nbByType.size() )
     nbByType.resize( SMDSEntity_Last, 0 );
 
index 0b1e22442175d1ee0a26595a94feefb92b68c23d..b80f5ecce990038eb0221e096841e3481bdd0eba 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 43e013377c282e2439566abdbb369e15b03f5d1f..f7e43837fee49291a3d4f4181f3df7282cdd4491 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -689,7 +689,7 @@ bool StdMeshers_Hexa_3D::Compute(SMESH_Mesh &         aMesh,
       // check if the loaded grid corresponds to nb of quadrangles on the FACE
       const SMESHDS_SubMesh* faceSubMesh =
         proxymesh ? proxymesh->GetSubMesh( F ) : meshDS->MeshElements( F );
-      const int nbQuads = faceSubMesh->NbElements();
+      const smIdType nbQuads = faceSubMesh->NbElements();
       const int nbHor = aCubeSide[i]._u2nodesMap.size() - 1;
       const int nbVer = aCubeSide[i]._u2nodesMap.begin()->second.size() - 1;
       ok = ( nbQuads == nbHor * nbVer );
@@ -988,7 +988,7 @@ bool StdMeshers_Hexa_3D::Evaluate(SMESH_Mesh & aMesh,
     TopoDS_Shape aFace = aFaces.Value(i+1);
     SMESH_Algo *algo = _gen->GetAlgo(aMesh, aFace);
     if( !algo ) {
-      std::vector<int> aResVec(SMDSEntity_Last);
+      std::vector<smIdType> aResVec(SMDSEntity_Last);
       for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aResVec[i] = 0;
       SMESH_subMesh * sm = aMesh.GetSubMesh(aShape);
       aResMap.insert(std::make_pair(sm,aResVec));
@@ -1001,8 +1001,8 @@ bool StdMeshers_Hexa_3D::Evaluate(SMESH_Mesh & aMesh,
     if (algoName == "Quadrangle_2D") {
       MapShapeNbElemsItr anIt = aResMap.find(meshFaces[i]);
       if( anIt == aResMap.end() ) continue;
-      std::vector<int> aVec = (*anIt).second;
-      int nbtri = Max(aVec[SMDSEntity_Triangle],aVec[SMDSEntity_Quad_Triangle]);
+      std::vector<smIdType> aVec = (*anIt).second;
+      smIdType nbtri = std::max(aVec[SMDSEntity_Triangle],aVec[SMDSEntity_Quad_Triangle]);
       if( nbtri == 0 )
         isAllQuad = true;
     }
@@ -1022,8 +1022,8 @@ bool StdMeshers_Hexa_3D::Evaluate(SMESH_Mesh & aMesh,
     if( sm ) {
       MapShapeNbElemsItr anIt = aResMap.find(sm);
       if( anIt == aResMap.end() ) continue;
-      std::vector<int> aVec = (*anIt).second;
-      nb1d += Max(aVec[SMDSEntity_Edge],aVec[SMDSEntity_Quad_Edge]);
+      std::vector<smIdType> aVec = (*anIt).second;
+      nb1d += std::max(aVec[SMDSEntity_Edge],aVec[SMDSEntity_Quad_Edge]);
       if(IsFirst) {
         IsQuadratic = (aVec[SMDSEntity_Quad_Edge] > aVec[SMDSEntity_Edge]);
         IsFirst = false;
@@ -1051,20 +1051,20 @@ bool StdMeshers_Hexa_3D::Evaluate(SMESH_Mesh & aMesh,
     if( i == OppNum ) continue;
     MapShapeNbElemsItr anIt = aResMap.find( meshFaces[i-1] );
     if( anIt == aResMap.end() ) continue;
-    std::vector<int> aVec = (*anIt).second;
-    nb2d += Max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
+    std::vector<smIdType> aVec = (*anIt).second;
+    nb2d += std::max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
   }
   
   MapShapeNbElemsItr anIt = aResMap.find( meshFaces[0] );
-  std::vector<int> aVec = (*anIt).second;
-  int nb2d_face0 = Max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
-  int nb0d_face0 = aVec[SMDSEntity_Node];
+  std::vector<smIdType> aVec = (*anIt).second;
+  smIdType nb2d_face0 = std::max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
+  smIdType nb0d_face0 = aVec[SMDSEntity_Node];
 
-  std::vector<int> aResVec(SMDSEntity_Last);
+  std::vector<smIdType> aResVec(SMDSEntity_Last);
   for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aResVec[i] = 0;
   if(IsQuadratic) {
     aResVec[SMDSEntity_Quad_Hexa] = nb2d_face0 * ( nb2d/nb1d );
-    int nb1d_face0_int = ( nb2d_face0*4 - nb1d ) / 2;
+    smIdType nb1d_face0_int = ( nb2d_face0*4 - nb1d ) / 2;
     aResVec[SMDSEntity_Node] = nb0d_face0 * ( 2*nb2d/nb1d - 1 ) - nb1d_face0_int * nb2d/nb1d;
   }
   else {
@@ -1118,7 +1118,7 @@ bool StdMeshers_Hexa_3D::IsApplicable( const TopoDS_Shape & aShape, bool toCheck
     if ( nbFoundShells != 1 ) {
       if ( toCheckAll ) return false;
       continue;
-    }   
+    }
     exp1.Init( exp0.Current(), TopAbs_FACE );
     int nbEdges = SMESH_MesherHelper::Count( exp1.Current(), TopAbs_EDGE, /*ignoreSame=*/true );
     bool ok = ( nbEdges > 3 );
@@ -1130,7 +1130,7 @@ bool StdMeshers_Hexa_3D::IsApplicable( const TopoDS_Shape & aShape, bool toCheck
 
 //=======================================================================
 //function : ComputePentahedralMesh
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 SMESH_ComputeErrorPtr ComputePentahedralMesh(SMESH_Mesh &          aMesh,
@@ -1138,12 +1138,7 @@ SMESH_ComputeErrorPtr ComputePentahedralMesh(SMESH_Mesh &          aMesh,
                                              SMESH_ProxyMesh*      proxyMesh)
 {
   SMESH_ComputeErrorPtr err = SMESH_ComputeError::New();
-  if ( proxyMesh )
-  {
-    err->myName = COMPERR_BAD_INPUT_MESH;
-    err->myComment = "Can't build pentahedral mesh on viscous layers";
-    return err;
-  }
+
   bool bOK;
   StdMeshers_Penta_3D anAlgo;
   //
@@ -1165,13 +1160,31 @@ SMESH_ComputeErrorPtr ComputePentahedralMesh(SMESH_Mesh &          aMesh,
       err = aPrism3D->GetComputeError();
     }
   }
+  if ( !bOK && proxyMesh )
+  {
+    // check if VL elements are present on block FACEs
+    bool hasVLonFace = false;
+    for ( TopExp_Explorer exp( aShape, TopAbs_FACE ); exp.More(); exp.Next() )
+    {
+      const SMESHDS_SubMesh* sm1 = aMesh.GetSubMesh( exp.Current() )->GetSubMeshDS();
+      const SMESHDS_SubMesh* sm2 = proxyMesh->GetSubMesh( exp.Current() );
+      if (( hasVLonFace = ( sm2 && sm1->NbElements() != sm2->NbElements() )))
+        break;
+    }
+    if ( hasVLonFace )
+    {
+      err->myName = COMPERR_BAD_INPUT_MESH;
+      err->myComment = "Can't build pentahedral mesh on viscous layers";
+    }
+  }
+
   return err;
 }
 
 
 //=======================================================================
 //function : EvaluatePentahedralMesh
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 bool EvaluatePentahedralMesh(SMESH_Mesh & aMesh,
index 16315e0d745e47f667016af46da2ab5997f81a3c..e7df853dfed53b9963a2eac69c46f6d90bc43fb1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 1332432803809fe8f968b4c1e73bf9ff348b7720..4d34b5cd85c86a1e45d3ad39334d9f33f9028c60 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 11ba5df0829f0a61813f97afeb644f424ac74720..19860b82c2369e14750231faff59988ddaeb2536 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 5a9880cd8f4a62aea7dbd6ba35fa866063a5fb63..f27e74dca17ce9b863ff66d61e493962ad0b918f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -253,6 +253,7 @@ namespace // INTERNAL STUFF
     _chord2  = Max( _line.     SquareDistance( curve->Value( uf + 0.25 * ( ul - uf ))),
                     Max( _line.SquareDistance( curve->Value( uf + 0.5  * ( ul - uf ))),
                          _line.SquareDistance( curve->Value( uf + 0.75 * ( ul - uf )))));
+    _chord2 *= ( 1.05 * 1.05 ); // +5%
     _chord2  = Max( tol, _chord2 );
     _chord   = Sqrt( _chord2 );
 
@@ -944,23 +945,23 @@ bool StdMeshers_Import_1D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape & th
   SMESHDS_Mesh* tgtMesh = theMesh.GetMeshDS();
 
   const TopoDS_Edge& geomEdge = TopoDS::Edge( theShape );
-  const double edgeTol = BRep_Tool::Tolerance( geomEdge );
-  const int shapeID = tgtMesh->ShapeToIndex( geomEdge );
-
+  const double        edgeTol = helper.MaxTolerance( geomEdge );
+  const int           shapeID = tgtMesh->ShapeToIndex( geomEdge );
 
   double geomTol = Precision::Confusion();
+  double minGeomTol = std::numeric_limits<double>::max();
+
   for ( size_t iG = 0; iG < srcGroups.size(); ++iG )
   {
     const SMESHDS_GroupBase* srcGroup = srcGroups[iG]->GetGroupDS();
     for ( SMDS_ElemIteratorPtr srcElems = srcGroup->GetElements(); srcElems->more(); )
     {
       const SMDS_MeshElement* edge = srcElems->next();
-      geomTol = Sqrt( 0.5 * ( getMinEdgeLength2( edge->GetNode(0) ) +
-                              getMinEdgeLength2( edge->GetNode(1) ))) / 25;
-      iG = srcGroups.size();
-      break;
+      minGeomTol = std::min( Sqrt( getMinEdgeLength2( edge->GetNode(0) )) / 25, minGeomTol );
+      geomTol = minGeomTol;
     }
   }
+
   CurveProjector curveProjector( geomEdge, geomTol );
 
   // get nodes on vertices
@@ -1083,7 +1084,7 @@ bool StdMeshers_Import_1D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape & th
   } // loop on groups
 
   if ( n2n->empty())
-    return error("Empty source groups");
+    return error("Source groups are empty or mismatching geometry");
 
   // check if the whole geom edge is covered by imported segments;
   // the check consist in passing by segments from one vetrex node to another
@@ -1310,7 +1311,7 @@ bool StdMeshers_Import_1D::Evaluate(SMESH_Mesh &         theMesh,
   if ( srcGroups.empty() )
     return error("Invalid source groups");
 
-  vector<int> aVec(SMDSEntity_Last,0);
+  vector<smIdType> aVec(SMDSEntity_Last,0);
 
   bool toCopyMesh, toCopyGroups;
   _sourceHyp->GetCopySourceMesh(toCopyMesh, toCopyGroups);
index 5ae246c7ec35e4ac9f40bbeba837609ca1db0308..1f1cc71999f8a02cf4b9e76eb172018c8ef9011b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 30f3d163ca3d6453f67e0e9e21dbd720f83b3a9e..c39526b4502d2978e2a03606ea30ba61ec6f37b7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -201,8 +201,12 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
   gp_Pnt p; gp_Vec du, dv;
 
   // BRepClass_FaceClassifier is most time consuming, so minimize its usage
-  const double clsfTol = 10 * BRep_Tool::Tolerance( geomFace );
+  const double clsfTol = 1e2 * BRep_Tool::MaxTolerance( geomFace, TopAbs_VERTEX );
   BRepTopAdaptor_FClass2d classifier( geomFace, clsfTol ); //Brimless_FaceClassifier classifier;
+
+  const double clsfTolEdge = BRep_Tool::MaxTolerance( geomFace, TopAbs_EDGE );
+  BRepTopAdaptor_FClass2d classifierEdge( geomFace, clsfTolEdge ); //Define specific classifier for edges based on TopAbs_EDGE. Solve issue bos #36783
+
   Bnd_B2d bndBox2d;
   Bnd_Box bndBox3d;
   {
@@ -274,7 +278,6 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
   double minGroupTol = Precision::Infinite();
 
   SMESH::Controls::ElementsOnShape onEdgeClassifier;
-  if ( helper.HasSeam() )
   {
     TopoDS_Compound edgesCompound;
     BRep_Builder    builder;
@@ -316,8 +319,9 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
     // another idea: try to use max tol of all edges
     //const double clsfTol = 10 * BRep_Tool::Tolerance( geomFace ); // 0.1 * groupTol;
 
-    if ( helper.HasSeam() )
-      onEdgeClassifier.SetMesh( srcMesh->GetMeshDS() );
+    onEdgeClassifier.SetMesh( srcMesh->GetMeshDS() );
+    onEdgeClassifier.SetTolerance( groupTol / 10 );
+
 
     SMDS_ElemIteratorPtr srcElems = srcGroup->GetElements();
     while ( srcElems->more() ) // loop on group contents
@@ -373,15 +377,18 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
         {
           // find out if node lies on the surface of theShape
           gp_XY uv( Precision::Infinite(), 0 );
-          isOut = ( !helper.CheckNodeUV( geomFace, node, uv, groupTol, /*force=*/true ) ||
-                    bndBox2d.IsOut( uv ));
+          bool isOutBox = true;
+          isOut = (! helper.CheckNodeUV( geomFace, node, uv, groupTol, /*force=*/true ) ||
+                   ( isOutBox = bndBox2d.IsOut( uv )));
           //int iCoo;
           if ( !isOut && !isIn ) // classify
           {
             nodeState[i] = classifier.Perform( uv ); //classifier.Perform( geomFace, uv, clsfTol );
             //nodeState[i] = classifier.State();
             isOut = ( nodeState[i] == TopAbs_OUT );
-            if ( isOut && helper.IsOnSeam( uv ) && onEdgeClassifier.IsSatisfy( node->GetID() ))
+            if (( isOut ) &&
+                ( !isOutBox || helper.IsOnSeam( uv )) &&
+                onEdgeClassifier.IsSatisfy( node ))
             {
               // uv.SetCoord( iCoo, helper.GetOtherParam( uv.Coord( iCoo )));
               // classifier.Perform( geomFace, uv, clsfTol );
@@ -396,7 +403,7 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
             newNode = tgtMesh->AddNode( nXYZ.X(), nXYZ.Y(), nXYZ.Z());
             tgtMesh->SetNodeOnFace( newNode, shapeID, uv.X(), uv.Y() );
             nbCreatedNodes++;
-            if ( newNode->GetID() >= (int) isNodeIn.size() )
+            if ( newNode->GetID() >= (smIdType) isNodeIn.size() )
             {
               isNodeIn.push_back( false ); // allow allocate more than newNode->GetID()
               isNodeIn.resize( newNode->GetID() + 1, false );
@@ -422,7 +429,7 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
         {
           if ( nodeState[i] != TopAbs_UNKNOWN ) continue;
           gp_XY uv = helper.GetNodeUV( geomFace, newNodes[i] );
-          nodeState[i] = classifier.Perform( uv ); //geomFace, uv, clsfTol );
+          nodeState[i] = classifierEdge.Perform( uv ); //geomFace, uv, clsfTolEdge );
           //nodeState[i] = classifier.State();
           isIn = ( nodeState[i] == TopAbs_IN );
         }
@@ -444,8 +451,8 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
           Standard_Real U,V;
           proj.LowerDistanceParameters(U,V);
           gp_XY uv( U,V );
-          //classifier.Perform( geomFace, uv, clsfTol );
-          TopAbs_State state = classifier.Perform( uv );
+          //classifier.Perform( geomFace, uv, clsfTolEdge );
+          TopAbs_State state = classifierEdge.Perform( uv );
           if ( state != TopAbs_IN )
             continue;
         }
@@ -565,7 +572,6 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
     // the imported mesh is valid if all external links (encountered once)
     // lie on geom edges
     subShapeIDs.erase( shapeID ); // to contain edges and vertices only
-    double u, f, l;
     for ( link2Nb = linkCount.begin(); link2Nb != linkCount.end(); ++link2Nb)
     {
       const TLink& link = (*link2Nb).first;
@@ -580,17 +586,14 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
           const SMDS_MeshNode* n = is1stN ? link.node1() : link.node2();
           if ( !subShapeIDs.count( n->getshapeId() )) // n is assigned to FACE
           {
-            for ( size_t iE = 0; iE < edges.size(); ++iE )
-              if ( helper.CheckNodeU( edges[iE], n, u=0, projTol, /*force=*/true ))
-              {
-                BRep_Tool::Range(edges[iE],f,l);
-                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 );
-                tgtMesh->SetNodeOnEdge( n, edges[iE], u );
-                break;
-              }
+            TopoDS_Shape edge;
+            if ( onEdgeClassifier.IsSatisfy( n, &edge ))
+            {
+              tgtFaceSM->RemoveNode( n );
+              double u, v;
+              onEdgeClassifier.GetParams( u, v );
+              tgtMesh->SetNodeOnEdge( n, TopoDS::Edge(edge), u );
+            }
             nodesOnBoundary = subShapeIDs.count( n->getshapeId());
           }
           if ( nodesOnBoundary )
@@ -638,6 +641,7 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
         {
           edge = tgtMesh->AddEdge( newNodes[0], newNodes[1], link._medium );
 
+          double u;
           TopoDS_Edge geomEdge = TopoDS::Edge(bndShapes.back());
           helper.CheckNodeU( geomEdge, link._medium, u, projTol, /*force=*/true );
           tgtFaceSM->RemoveNode( link._medium );
@@ -710,6 +714,7 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
       TUNodeList nodesOnSeam;
       double u = helper.GetNodeU( seamEdge, vertNode );
       nodesOnSeam.push_back( make_pair( u, vertNode ));
+      size_t nbNodesOnSeam = 1;
       TUNodeList::iterator u2nIt = nodesOnSeam.begin();
       for ( ; u2nIt != nodesOnSeam.end(); ++u2nIt )
       {
@@ -723,8 +728,9 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
           {
             const SMDS_MeshNode* n = face->GetNode( i );
             if ( n == startNode || !checkedNodes.insert( n ).second ) continue;
-            if ( helper.CheckNodeU( seamEdge, n, u=0, projTol, /*force=*/true ))
-              nodesOnSeam.push_back( make_pair( u, n ));
+            helper.CheckNodeU( seamEdge, n, u=0, projTol, /*force=*/true );
+            nodesOnSeam.push_back( make_pair( u, n ));
+            ++nbNodesOnSeam;
           }
         }
       }
@@ -733,6 +739,15 @@ bool StdMeshers_Import_1D2D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape &
       map< double, const SMDS_MeshNode* > u2nodeMap;
       for ( u2nIt = nodesOnSeam.begin(); u2nIt != nodesOnSeam.end(); ++u2nIt )
         u2nodeMap.insert( u2nodeMap.end(), *u2nIt );
+      if ( u2nodeMap.size() != nbNodesOnSeam ) // problem with parameters on EDGE
+      {
+        // sort nodes by distance from seamVertex
+        gp_Pnt vertPnt = SMESH_NodeXYZ( vertNode );
+        u2nodeMap.clear();
+        for ( u2nIt = nodesOnSeam.begin(); u2nIt != nodesOnSeam.end(); ++u2nIt )
+          u2nodeMap.insert
+            ({ vertPnt.SquareDistance( SMESH_NodeXYZ( u2nIt->second )), u2nIt->second });
+      }
 
       // create edges
       {
@@ -823,7 +838,7 @@ bool StdMeshers_Import_1D2D::Evaluate(SMESH_Mesh &         theMesh,
   if ( srcGroups.empty() )
     return error("Invalid source groups");
 
-  vector<int> aVec(SMDSEntity_Last,0);
+  vector<smIdType> aVec(SMDSEntity_Last,0);
 
   bool toCopyMesh, toCopyGroups;
   _sourceHyp->GetCopySourceMesh(toCopyMesh, toCopyGroups);
@@ -913,7 +928,7 @@ bool StdMeshers_Import_1D2D::Evaluate(SMESH_Mesh &         theMesh,
     {
       TopoDS_Edge geomEdge = TopoDS::Edge( exp.Current() );
       SMESH_subMesh* sm = theMesh.GetSubMesh( geomEdge );
-      vector<int>& edgeVec = aResMap[sm];
+      vector<smIdType>& edgeVec = aResMap[sm];
       if ( edgeVec.empty() )
       {
         edgeVec.resize(SMDSEntity_Last,0);
index 7768baa87be6ba33c1b3ad6a417994676d30c491..b43750cabe8ebb9fbddf2a6019e9e2479bdcbe1a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 8758b0fcbd4f73bea8783bd6b763c047f5bab6fd..057a5299effe9ef30411d0c9dc111d4e71a4ca8e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 1a51e9919620e5a37a1d189194908f9cfbd2944d..0cd88daaf45862d2b650fe7190b7c64320c15d34 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index d3365e407fb32b6c873302539e57d5518e163894..636defcbca1af38348974fd4882cf230707a384e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 2a460273ea961bddb173329c67482af27f70598d..b06756bcc84570e1a135272fb862add8c7f62f01 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 5399982a36a9d5cf72ae9730f033e82e2fa3e76c..6de2c0e4b635f47ccb9682fed4b6dee542f28cb1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -43,7 +43,7 @@ StdMeshers_LengthFromEdges::StdMeshers_LengthFromEdges(int hypId, SMESH_Gen* gen
 {
   _mode =1;
   _name = "LengthFromEdges";
-  _param_algo_dim = 2; // is used by SMESH_MEFISTO_2D
+  _param_algo_dim = 2;
 }
 
 //=============================================================================
index 0e11d1aa1d60707d2401df1ca4722be317201354..13a99b975b2de7458e8ff404b0d3f07234aba977 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 70b04d10829a686cec6b88d3735af47a5a6d8669..1f3fabe8132b3878cea003068fa56f7442954335 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 55140e47ca571a74e0b29e4fee18446b411be738..933efa4c3a45e7e835c07daaff8f6cd2fb88ad5e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
diff --git a/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx b/src/StdMeshers/StdMeshers_MEFISTO_2D.cxx
deleted file mode 100644 (file)
index 0e0c0be..0000000
+++ /dev/null
@@ -1,856 +0,0 @@
-// Copyright (C) 2007-2020  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 SMESH : implementation of SMESH idl descriptions
-//  File   : StdMeshers_MEFISTO_2D.cxx
-//           Moved here from SMESH_MEFISTO_2D.cxx
-//  Author : Paul RASCLE, EDF
-//  Module : SMESH
-//
-#include "StdMeshers_MEFISTO_2D.hxx"
-
-#include "SMDS_EdgePosition.hxx"
-#include "SMDS_MeshElement.hxx"
-#include "SMDS_MeshNode.hxx"
-#include "SMESHDS_Mesh.hxx"
-#include "SMESH_Comment.hxx"
-#include "SMESH_Gen.hxx"
-#include "SMESH_Mesh.hxx"
-#include "SMESH_MesherHelper.hxx"
-#include "SMESH_subMesh.hxx"
-#include "StdMeshers_FaceSide.hxx"
-#include "StdMeshers_LengthFromEdges.hxx"
-#include "StdMeshers_MaxElementArea.hxx"
-#include "StdMeshers_ViscousLayers2D.hxx"
-
-#include "utilities.h"
-
-#include "Rn.h"
-#include "aptrte.h"
-
-#include <BRepGProp.hxx>
-#include <BRepTools.hxx>
-#include <BRep_Tool.hxx>
-#include <GProp_GProps.hxx>
-#include <Geom2d_Curve.hxx>
-#include <Geom_Curve.hxx>
-#include <Geom_Surface.hxx>
-#include <Precision.hxx>
-#include <TopExp.hxx>
-#include <TopExp_Explorer.hxx>
-#include <TopTools_ListIteratorOfListOfShape.hxx>
-#include <TopTools_ListOfShape.hxx>
-#include <TopTools_MapOfShape.hxx>
-#include <TopoDS.hxx>
-#include <TopoDS_Edge.hxx>
-#include <TopoDS_Face.hxx>
-#include <TopoDS_Iterator.hxx>
-#include <TopoDS_Wire.hxx>
-#include <gp_Pnt2d.hxx>
-
-using namespace std;
-
-#ifdef _DEBUG_
-//#define DUMP_POINTS // to print coordinates of MEFISTO input
-#endif
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-StdMeshers_MEFISTO_2D::StdMeshers_MEFISTO_2D(int hypId, SMESH_Gen * gen):
-  SMESH_2D_Algo(hypId, gen)
-{
-  _name = "MEFISTO_2D";
-  _shapeType = (1 << TopAbs_FACE);
-  _compatibleHypothesis.push_back("MaxElementArea");
-  _compatibleHypothesis.push_back("LengthFromEdges");
-  _compatibleHypothesis.push_back("ViscousLayers2D");
-
-  _edgeLength = 0;
-  _maxElementArea = 0;
-  _hypMaxElementArea = NULL;
-  _hypLengthFromEdges = NULL;
-  _helper = 0;
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-StdMeshers_MEFISTO_2D::~StdMeshers_MEFISTO_2D()
-{
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-bool StdMeshers_MEFISTO_2D::CheckHypothesis
-                         (SMESH_Mesh&                          aMesh,
-                          const TopoDS_Shape&                  aShape,
-                          SMESH_Hypothesis::Hypothesis_Status& aStatus)
-{
-  _hypMaxElementArea = NULL;
-  _hypLengthFromEdges = NULL;
-  _edgeLength = 0;
-  _maxElementArea = 0;
-
-  if ( !error( StdMeshers_ViscousLayers2D::CheckHypothesis( aMesh, aShape, aStatus )))
-    return false;
-
-  list <const SMESHDS_Hypothesis * >::const_iterator itl;
-  const SMESHDS_Hypothesis *theHyp;
-
-  const list <const SMESHDS_Hypothesis * >&hyps = GetUsedHypothesis(aMesh, aShape);
-  int nbHyp = hyps.size();
-  if (!nbHyp)
-  {
-    aStatus = SMESH_Hypothesis::HYP_OK; //SMESH_Hypothesis::HYP_MISSING;
-    return true;  // (PAL13464) can work with no hypothesis, LengthFromEdges is default one
-  }
-
-  itl = hyps.begin();
-  theHyp = (*itl); // use only the first hypothesis
-
-  string hypName = theHyp->GetName();
-
-  bool isOk = false;
-
-  if (hypName == "MaxElementArea")
-  {
-    _hypMaxElementArea = static_cast<const StdMeshers_MaxElementArea *>(theHyp);
-    ASSERT(_hypMaxElementArea);
-    _maxElementArea = _hypMaxElementArea->GetMaxArea();
-    isOk = true;
-    aStatus = SMESH_Hypothesis::HYP_OK;
-  }
-
-  else if (hypName == "LengthFromEdges")
-  {
-    _hypLengthFromEdges = static_cast<const StdMeshers_LengthFromEdges *>(theHyp);
-    ASSERT(_hypLengthFromEdges);
-    isOk = true;
-    aStatus = SMESH_Hypothesis::HYP_OK;
-  }
-  else
-    aStatus = SMESH_Hypothesis::HYP_INCOMPATIBLE;
-
-  if (isOk)
-  {
-    isOk = false;
-    if (_maxElementArea > 0)
-    {
-      //_edgeLength = 2 * sqrt(_maxElementArea);        // triangles : minorant
-      _edgeLength = sqrt(2. * _maxElementArea/sqrt(3.0));
-      isOk = true;
-    }
-    else
-      isOk = (_hypLengthFromEdges != NULL);     // **** check mode
-    if (!isOk)
-      aStatus = SMESH_Hypothesis::HYP_BAD_PARAMETER;
-  }
-
-  return isOk;
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-bool StdMeshers_MEFISTO_2D::Compute(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape)
-{
-  TopoDS_Face F = TopoDS::Face(aShape.Oriented(TopAbs_FORWARD));
-
-  // helper builds quadratic mesh if necessary
-  SMESH_MesherHelper helper(aMesh);
-  _helper = &helper;
-  _quadraticMesh = _helper->IsQuadraticSubMesh(aShape);
-  const bool skipMediumNodes = _quadraticMesh;
-
-  // build viscous layers if required
-  SMESH_ProxyMesh::Ptr proxyMesh = StdMeshers_ViscousLayers2D::Compute( aMesh, F );
-  if ( !proxyMesh )
-    return false;
-
-  // get all edges of a face
-  TError problem;
-  TWireVector wires =
-    StdMeshers_FaceSide::GetFaceWires( F, aMesh, skipMediumNodes, problem, _helper, proxyMesh );
-  int nbWires = wires.size();
-  if ( problem && !problem->IsOK() ) return error( problem );
-  if ( nbWires == 0 ) return error( "Problem in StdMeshers_FaceSide::GetFaceWires()");
-  if ( wires[0]->NbSegments() < 3 ) // ex: a circle with 2 segments
-    return error(COMPERR_BAD_INPUT_MESH,
-                 SMESH_Comment("Too few segments: ")<<wires[0]->NbSegments());
-
-  // compute average edge length
-  if (!_hypMaxElementArea)
-  {
-    _edgeLength = 0;
-    int nbSegments = 0;
-    for ( int iW = 0; iW < nbWires; ++iW )
-    {
-      StdMeshers_FaceSidePtr wire = wires[ iW ];
-      _edgeLength += wire->Length();
-      nbSegments  += wire->NbSegments();
-    }
-    if ( nbSegments )
-      _edgeLength /= nbSegments;
-  }
-
-  if (/*_hypLengthFromEdges &&*/ _edgeLength < DBL_MIN )
-    _edgeLength = 100;
-
-  Z nblf;                 //nombre de lignes fermees (enveloppe en tete)
-  Z *nudslf = NULL;       //numero du dernier sommet de chaque ligne fermee
-  R2 *uvslf = NULL;       
-  Z nbpti = 0;            //nombre points internes futurs sommets de la triangulation
-  R2 *uvpti = NULL;
-  
-  Z nbst;
-  R2 *uvst = NULL;
-  Z nbt;
-  Z *nust = NULL;
-  Z ierr = 0;
-
-  Z nutysu = 1;           // 1: il existe un fonction areteideale_()
-  // Z  nutysu=0;         // 0: on utilise aretmx
-  R aretmx = _edgeLength; // longueur max aretes future triangulation
-  if ( _hypMaxElementArea )
-    aretmx *= 1.5;
-  
-  nblf = nbWires;
-  
-  nudslf = new Z[1 + nblf];
-  nudslf[0] = 0;
-  int iw = 1;
-  int nbpnt = 0;
-
-  // count nb of input points
-  for ( int iW = 0; iW < nbWires; ++iW )
-  {
-    nbpnt += wires[iW]->NbPoints() - 1;
-    nudslf[iw++] = nbpnt;
-  }
-
-  uvslf = new R2[nudslf[nblf]];
-
-  double scalex, scaley;
-  ComputeScaleOnFace(aMesh, F, scalex, scaley);
-
-  // correspondence mefisto index --> Nodes
-  vector< const SMDS_MeshNode*> mefistoToDS(nbpnt, (const SMDS_MeshNode*)0);
-
-  bool isOk = false;
-
-  // fill input points UV
-  if ( LoadPoints(wires, uvslf, mefistoToDS, scalex, scaley) )
-  {
-    // Compute
-    aptrte(nutysu, aretmx,
-           nblf, nudslf, uvslf, nbpti, uvpti, nbst, uvst, nbt, nust, ierr);
-
-    if (ierr == 0)
-    {
-      StoreResult(nbst, uvst, nbt, nust, mefistoToDS, scalex, scaley);
-      isOk = true;
-    }
-    else
-    {
-      error(ierr,"Error in Triangulation (aptrte())");
-    }
-  }
-  if (nudslf != NULL) delete[]nudslf;
-  if (uvslf != NULL)  delete[]uvslf;
-  if (uvst != NULL)   delete[]uvst;
-  if (nust != NULL)   delete[]nust;
-
-  return isOk;
-}
-
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-bool StdMeshers_MEFISTO_2D::Evaluate(SMESH_Mesh & aMesh,
-                                     const TopoDS_Shape & aShape,
-                                     MapShapeNbElems& aResMap)
-{
-  TopoDS_Face F = TopoDS::Face(aShape.Oriented(TopAbs_FORWARD));
-
-  double aLen = 0.0;
-  int NbSeg = 0;
-  bool IsQuadratic = false;
-  bool IsFirst = true;
-  TopExp_Explorer exp(F,TopAbs_EDGE);
-  for(; exp.More(); exp.Next()) {
-    TopoDS_Edge E = TopoDS::Edge(exp.Current());
-    MapShapeNbElemsItr anIt = aResMap.find( aMesh.GetSubMesh(E) );
-    if( anIt == aResMap.end() ) continue;
-    std::vector<int> aVec = (*anIt).second;
-    int nbe = Max(aVec[SMDSEntity_Edge],aVec[SMDSEntity_Quad_Edge]);
-    NbSeg += nbe;
-    if(IsFirst) {
-      IsQuadratic = ( aVec[SMDSEntity_Quad_Edge] > aVec[SMDSEntity_Edge] );
-      IsFirst = false;
-    }
-    double a,b;
-    TopLoc_Location L;
-    Handle(Geom_Curve) C = BRep_Tool::Curve(E,L,a,b);
-    gp_Pnt P1;
-    C->D0(a,P1);
-    double dp = (b-a)/nbe;
-    for(int i=1; i<=nbe; i++) {
-      gp_Pnt P2;
-      C->D0(a+i*dp,P2);
-      aLen += P1.Distance(P2);
-      P1 = P2;
-    }
-  }
-  if(NbSeg<1) {
-    std::vector<int> aResVec(SMDSEntity_Last);
-    for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aResVec[i] = 0;
-    SMESH_subMesh * sm = aMesh.GetSubMesh(aShape);
-    aResMap.insert(std::make_pair(sm,aResVec));
-    SMESH_ComputeErrorPtr& smError = sm->GetComputeError();
-    smError.reset( new SMESH_ComputeError(COMPERR_ALGO_FAILED,
-                                          "Submesh can not be evaluated",this));
-    return false;
-  }
-  aLen = aLen/NbSeg; // middle length
-
-  _edgeLength = Precision::Infinite();
-  double tmpLength = Min( _edgeLength, aLen );
-
-  GProp_GProps G;
-  BRepGProp::SurfaceProperties(aShape,G);
-  double anArea = G.Mass();
-
-  int nbFaces = Precision::IsInfinite( tmpLength ) ? 0 :
-    (int)( anArea/(tmpLength*tmpLength*sqrt(3.)/4) );
-  int nbNodes = (int) ( nbFaces*3 - (NbSeg-1)*2 ) / 6;
-
-  std::vector<int> aVec(SMDSEntity_Last);
-  for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aVec[i] = 0;
-  if(IsQuadratic) {
-    aVec[SMDSEntity_Quad_Triangle] = nbFaces;
-    aVec[SMDSEntity_Node] = (int)( nbNodes + nbFaces*3 - (NbSeg-1) );
-  }
-  else {
-    aVec[SMDSEntity_Node] = nbNodes;
-    aVec[SMDSEntity_Triangle] = nbFaces;
-  }
-  SMESH_subMesh * sm = aMesh.GetSubMesh(aShape);
-  aResMap.insert(std::make_pair(sm,aVec));
-
-  return true;
-}
-
-
-//=======================================================================
-//function : fixOverlappedLinkUV
-//purpose  : prevent failure due to overlapped adjacent links
-//=======================================================================
-
-static bool fixOverlappedLinkUV( R2& uv0, const R2& uv1, const R2& uv2 )
-{
-  gp_XY v1( uv0.x - uv1.x, uv0.y - uv1.y );
-  gp_XY v2( uv2.x - uv1.x, uv2.y - uv1.y );
-
-  double tol2 = DBL_MIN * DBL_MIN;
-  double sqMod1 = v1.SquareModulus();
-  if ( sqMod1 <= tol2 ) return false;
-  double sqMod2 = v2.SquareModulus();
-  if ( sqMod2 <= tol2 ) return false;
-
-  double dot = v1*v2;
-
-  // check sinus >= 1.e-3
-  const double minSin = 1.e-3;
-  if ( dot > 0 && 1 - dot * dot / ( sqMod1 * sqMod2 ) < minSin * minSin ) {
-    MESSAGE(" ___ FIX UV ____" << uv0.x << " " << uv0.y);
-    v1.SetCoord( -v1.Y(), v1.X() );
-    double delta = sqrt( sqMod1 ) * minSin;
-    if ( v1.X() < 0 )
-      uv0.x -= delta;
-    else
-      uv0.x += delta;
-    if ( v1.Y() < 0 )
-      uv0.y -= delta;
-    else
-      uv0.y += delta;
-// #ifdef _DEBUG_
-//     MESSAGE(" -> " << uv0.x << " " << uv0.y << " ");
-//     MESSAGE("v1( " << v1.X() << " " << v1.Y() << " ) " <<
-//       "v2( " << v2.X() << " " << v2.Y() << " ) ");
-//    MESSAGE("SIN: " << sqrt(1 - dot * dot / (sqMod1 * sqMod2)));
-//     v1.SetCoord( uv0.x - uv1.x, uv0.y - uv1.y );
-//     v2.SetCoord( uv2.x - uv1.x, uv2.y - uv1.y );
-//     gp_XY v3( uv2.x - uv0.x, uv2.y - uv0.y );
-//     sqMod1 = v1.SquareModulus();
-//     sqMod2 = v2.SquareModulus();
-//     dot = v1*v2;
-//     double sin = sqrt(1 - dot * dot / (sqMod1 * sqMod2));
-//     MESSAGE("NEW SIN: " << sin);
-// #endif
-    return true;
-  }
-  return false;
-}
-
-//=======================================================================
-//function : fixCommonVertexUV
-//purpose  : 
-//=======================================================================
-
-static bool fixCommonVertexUV (R2 &                 theUV,
-                               const TopoDS_Vertex& theV,
-                               const TopoDS_Face&   theF,
-                               const TopTools_IndexedDataMapOfShapeListOfShape & theVWMap,
-                               SMESH_Mesh &         theMesh,
-                               const double         theScaleX,
-                               const double         theScaleY,
-                               const bool           theCreateQuadratic)
-{
-  if( !theVWMap.Contains( theV )) return false;
-
-  // check if there is another wire sharing theV
-  const TopTools_ListOfShape& WList = theVWMap.FindFromKey( theV );
-  TopTools_ListIteratorOfListOfShape aWIt;
-  TopTools_MapOfShape aWires;
-  for ( aWIt.Initialize( WList ); aWIt.More(); aWIt.Next() )
-    aWires.Add( aWIt.Value() );
-  if ( aWires.Extent() < 2 ) return false;
-
-  TopoDS_Shape anOuterWire = BRepTools::OuterWire(theF);
-  TopoDS_Shape anInnerWire;
-  for ( aWIt.Initialize( WList ); aWIt.More() && anInnerWire.IsNull(); aWIt.Next() )
-    if ( !anOuterWire.IsSame( aWIt.Value() ))
-      anInnerWire = aWIt.Value();
-
-  TopTools_ListOfShape EList;
-  list< double >       UList;
-
-  // find edges of theW sharing theV
-  // and find 2d normal to them at theV
-  gp_Vec2d N(0.,0.);
-  TopoDS_Iterator itE( anInnerWire );
-  for (  ; itE.More(); itE.Next() )
-  {
-    const TopoDS_Edge& E = TopoDS::Edge( itE.Value() );
-    TopoDS_Iterator itV( E );
-    for ( ; itV.More(); itV.Next() )
-    {
-      const TopoDS_Vertex & V = TopoDS::Vertex( itV.Value() );
-      if ( !V.IsSame( theV ))
-        continue;
-      EList.Append( E );
-      Standard_Real u = BRep_Tool::Parameter( V, E );
-      UList.push_back( u );
-      double f, l;
-      Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(E, theF, f, l);
-      gp_Vec2d d1;
-      gp_Pnt2d p;
-      C2d->D1( u, p, d1 );
-      gp_Vec2d n( d1.Y() * theScaleX, -d1.X() * theScaleY);
-      if ( E.Orientation() == TopAbs_REVERSED )
-        n.Reverse();
-      N += n.Normalized();
-    }
-  }
-
-  // define step size by which to move theUV
-
-  gp_Pnt2d nextUV; // uv of next node on edge, most distant of the four
-  gp_Pnt2d thisUV( theUV.x, theUV.y );
-  double maxDist = -DBL_MAX;
-  TopTools_ListIteratorOfListOfShape aEIt (EList);
-  list< double >::iterator aUIt = UList.begin();
-  for ( ; aEIt.More(); aEIt.Next(), aUIt++ )
-  {
-    const TopoDS_Edge& E = TopoDS::Edge( aEIt.Value() );
-    double f, l;
-    Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(E, theF, f, l);
-
-    double umin = DBL_MAX, umax = -DBL_MAX;
-    SMDS_NodeIteratorPtr nIt = theMesh.GetSubMesh(E)->GetSubMeshDS()->GetNodes();
-    if ( !nIt->more() ) // no nodes on edge, only on vertices
-    {
-      umin = l;
-      umax = f;
-    }
-    else {
-      while ( nIt->more() ) {
-        const SMDS_MeshNode* node = nIt->next();
-        // check if node is medium
-        if ( theCreateQuadratic && SMESH_MesherHelper::IsMedium( node, SMDSAbs_Edge ))
-          continue;
-        SMDS_EdgePositionPtr epos = node->GetPosition();
-        double u = epos->GetUParameter();
-        if ( u < umin )
-          umin = u;
-        if ( u > umax )
-          umax = u;
-      }
-    }
-    bool isFirstCommon = ( *aUIt == f );
-    gp_Pnt2d uv = C2d->Value( isFirstCommon ? umin : umax );
-    double dist = thisUV.SquareDistance( uv );
-    if ( dist > maxDist ) {
-      maxDist = dist;
-      nextUV  = uv;
-    }
-  }
-  R2 uv0, uv1, uv2;
-  uv0.x = thisUV.X();   uv0.y = thisUV.Y();
-  uv1.x = nextUV.X();   uv1.y = nextUV.Y();
-  uv2.x = thisUV.X();   uv2.y = thisUV.Y();
-
-  uv1.x *= theScaleX;   uv1.y *= theScaleY;
-
-  if ( fixOverlappedLinkUV( uv0, uv1, uv2 ))
-  {
-    double step = thisUV.Distance( gp_Pnt2d( uv0.x, uv0.y ));
-
-    // move theUV along the normal by the step
-
-    N *= step;
-
-    MESSAGE("--fixCommonVertexUV move(" << theUV.x << " " << theUV.x
-            << ") by (" << N.X() << " " << N.Y() << ")" 
-            << endl << "--- MAX DIST " << maxDist);
-
-    theUV.x += N.X();
-    theUV.y += N.Y();
-
-    return true;
-  }
-  return false;
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-bool StdMeshers_MEFISTO_2D::LoadPoints(TWireVector &                 wires,
-                                       R2 *                          uvslf,
-                                       vector<const SMDS_MeshNode*>& mefistoToDS,
-                                       double                        scalex,
-                                       double                        scaley)
-{
-  // to avoid passing same uv points for a vertex common to 2 wires
-  TopoDS_Face F;
-  TopTools_IndexedDataMapOfShapeListOfShape VWMap;
-  if ( wires.size() > 1 )
-  {
-    F = TopoDS::Face( _helper->GetSubShape() );
-    TopExp::MapShapesAndAncestors( F, TopAbs_VERTEX, TopAbs_WIRE, VWMap );
-    int nbVertices = 0;
-    for ( size_t iW = 0; iW < wires.size(); ++iW )
-      nbVertices += wires[ iW ]->NbEdges();
-    if ( nbVertices == VWMap.Extent() )
-      VWMap.Clear(); // wires have no common vertices
-  }
-
-  int m = 0;
-
-  for ( size_t iW = 0; iW < wires.size(); ++iW )
-  {
-    const vector<UVPtStruct>& uvPtVec = wires[ iW ]->GetUVPtStruct();
-    if ((int) uvPtVec.size() != wires[ iW ]->NbPoints() ) {
-      return error(COMPERR_BAD_INPUT_MESH,SMESH_Comment("Unexpected nb of points on wire ")
-                   << iW << ": " << uvPtVec.size()<<" != "<<wires[ iW ]->NbPoints()
-                   << ", probably because of invalid node parameters on geom edges");
-    }
-    if ( m + uvPtVec.size()-1 > mefistoToDS.size() ) {
-      MESSAGE("Wrong mefistoToDS.size: "<<mefistoToDS.size()<<" < "<<m + uvPtVec.size()-1);
-      return error("Internal error");
-    }
-
-    list< int > mOnVertex;
-    vector<UVPtStruct>::const_iterator uvPt = uvPtVec.begin();
-    for ( ++uvPt; uvPt != uvPtVec.end(); ++uvPt )
-    {
-      // bind mefisto ID to node
-      mefistoToDS[m] = uvPt->node;
-      // set UV
-      uvslf[m].x = uvPt->u * scalex;
-      uvslf[m].y = uvPt->v * scaley;
-      switch ( uvPt->node->GetPosition()->GetTypeOfPosition())
-      {
-      case SMDS_TOP_VERTEX:
-        mOnVertex.push_back( m );
-        break;
-      case SMDS_TOP_EDGE:
-        // In order to detect degenerated faces easily, we replace
-        // nodes on a degenerated edge by node on the vertex of that edge
-        if ( _helper->IsDegenShape( uvPt->node->getshapeId() ))
-        {
-          int edgeID = uvPt->node->getshapeId();
-          SMESH_subMesh* edgeSM = _helper->GetMesh()->GetSubMeshContaining( edgeID );
-          SMESH_subMeshIteratorPtr smIt = edgeSM->getDependsOnIterator( /*includeSelf=*/0,
-                                                                        /*complexShapeFirst=*/0);
-          if ( smIt->more() )
-          {
-            SMESH_subMesh* vertexSM = smIt->next();
-            SMDS_NodeIteratorPtr nIt = vertexSM->GetSubMeshDS()->GetNodes();
-            if ( nIt->more() )
-              mefistoToDS[m] = nIt->next();
-          }
-        }
-        break;
-      default:;
-      }
-      m++;
-    }
-
-    int mFirst = mOnVertex.front(), mLast = m - 1;
-    list< int >::iterator mIt = mOnVertex.begin();
-    for ( ; mIt != mOnVertex.end(); ++mIt)
-    {
-      int m = *mIt;
-      if ( iW && !VWMap.IsEmpty()) { // except outer wire
-        // avoid passing same uv point for a vertex common to 2 wires
-        int vID = mefistoToDS[m]->getshapeId();
-        TopoDS_Vertex V = TopoDS::Vertex( _helper->GetMeshDS()->IndexToShape( vID ));
-        if ( fixCommonVertexUV( uvslf[m], V, F, VWMap, *_helper->GetMesh(),
-                                scalex, scaley, _quadraticMesh )) {
-          myNodesOnCommonV.push_back( mefistoToDS[m] );
-          continue;
-        }
-      }
-      // prevent failure on overlapped adjacent links,
-      // check only links ending in vertex nodes
-      int mB = m - 1, mA = m + 1; // indices Before and After
-      if ( mB < mFirst ) mB = mLast;
-      if ( mA > mLast )  mA = mFirst;
-      fixOverlappedLinkUV (uvslf[ mB ], uvslf[ m ], uvslf[ mA ]);
-    }
-  }
-
-#ifdef DUMP_POINTS
-  cout << "MEFISTO INPUT************" << endl;
-  for ( int i =0; i < m; ++i )
-    cout << i << ": \t" << uvslf[i].x << ", " << uvslf[i].y
-         << " Node " << mefistoToDS[i]->GetID()<< endl;
-#endif
-
-  return true;
-}
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-void StdMeshers_MEFISTO_2D::ComputeScaleOnFace(SMESH_Mesh &        /*aMesh*/,
-                                               const TopoDS_Face & aFace,
-                                               double &            scalex,
-                                               double &            scaley)
-{
-  TopoDS_Wire W = BRepTools::OuterWire(aFace);
-
-  double xmin = 1.e300;         // min & max of face 2D parametric coord.
-  double xmax = -1.e300;
-  double ymin = 1.e300;
-  double ymax = -1.e300;
-  const int nbp = 23;
-  scalex = 1;
-  scaley = 1;
-
-  TopExp_Explorer wexp(W, TopAbs_EDGE);
-  for ( ; wexp.More(); wexp.Next())
-  {
-    const TopoDS_Edge & E = TopoDS::Edge( wexp.Current() );
-    double f, l;
-    Handle(Geom2d_Curve) C2d = BRep_Tool::CurveOnSurface(E, aFace, f, l);
-    if ( C2d.IsNull() ) continue;
-    double du = (l - f) / double (nbp);
-    for (int i = 0; i <= nbp; i++)
-    {
-      double param = f + double (i) * du;
-      gp_Pnt2d p = C2d->Value(param);
-      if (p.X() < xmin)
-        xmin = p.X();
-      if (p.X() > xmax)
-        xmax = p.X();
-      if (p.Y() < ymin)
-        ymin = p.Y();
-      if (p.Y() > ymax)
-        ymax = p.Y();
-    }
-  }
-  double xmoy = (xmax + xmin) / 2.;
-  double ymoy = (ymax + ymin) / 2.;
-  double xsize = xmax - xmin;
-  double ysize = ymax - ymin;
-
-  TopLoc_Location L;
-  Handle(Geom_Surface) S = BRep_Tool::Surface(aFace,L);       // 3D surface
-
-  double length_x = 0;
-  double length_y = 0;
-  gp_Pnt PX0 = S->Value(xmin, ymoy);
-  gp_Pnt PY0 = S->Value(xmoy, ymin);
-  double dx = xsize / double (nbp);
-  double dy = ysize / double (nbp);
-  for (int i = 1; i <= nbp; i++)
-  {
-    double x = xmin + double (i) * dx;
-    gp_Pnt PX = S->Value(x, ymoy);
-    double y = ymin + double (i) * dy;
-    gp_Pnt PY = S->Value(xmoy, y);
-    length_x += PX.Distance(PX0);
-    length_y += PY.Distance(PY0);
-    PX0 = PX;
-    PY0 = PY;
-  }
-  scalex = length_x / xsize;
-  scaley = length_y / ysize;
-  double xyratio = xsize*scalex/(ysize*scaley);
-  const double maxratio = 1.e2;
-  if (xyratio > maxratio) {
-    scaley *= xyratio / maxratio;
-  }
-  else if (xyratio < 1./maxratio) {
-    scalex *= 1 / xyratio / maxratio;
-  }
-}
-
-// namespace
-// {
-//   bool isDegenTria( const SMDS_MeshNode * nn[3] )
-//   {
-//     SMESH_TNodeXYZ p1( nn[0] );
-//     SMESH_TNodeXYZ p2( nn[1] );
-//     SMESH_TNodeXYZ p3( nn[2] );
-//     gp_XYZ vec1 = p2 - p1;
-//     gp_XYZ vec2 = p3 - p1;
-//     gp_XYZ cross = vec1 ^ vec2;
-//     const double eps = 1e-100;
-//     return ( fabs( cross.X() ) < eps &&
-//              fabs( cross.Y() ) < eps &&
-//              fabs( cross.Z() ) < eps );
-//   }
-// }
-
-//=============================================================================
-/*!
- *  
- */
-//=============================================================================
-
-void StdMeshers_MEFISTO_2D::StoreResult(Z nbst, R2 * uvst, Z nbt, Z * nust,
-                                        vector< const SMDS_MeshNode*>&mefistoToDS,
-                                        double scalex, double scaley)
-{
-  _helper->SetElementsOnShape( true );
-
-  TopoDS_Face F = TopoDS::Face( _helper->GetSubShape() );
-  Handle(Geom_Surface) S = BRep_Tool::Surface( F );
-
-  //const size_t nbInputNodes = mefistoToDS.size();
-
-  Z n = mefistoToDS.size(); // nb input points
-  mefistoToDS.resize( nbst );
-  for ( ; n < nbst; n++)
-  {
-    if (!mefistoToDS[n])
-    {
-      double u = uvst[n][0] / scalex;
-      double v = uvst[n][1] / scaley;
-      gp_Pnt P = S->Value(u, v);
-
-      mefistoToDS[n] = _helper->AddNode( P.X(), P.Y(), P.Z(), 0, u, v );
-    }
-  }
-
-  Z m = 0;
-
-  // triangle points must be in trigonometric order if face is Forward
-  // else they must be put clockwise
-
-  int i1 = 1, i2 = 2;
-  if ( F.Orientation() != TopAbs_FORWARD )
-    std::swap( i1, i2 );
-
-  const SMDS_MeshNode * nn[3];
-  for (n = 1; n <= nbt; n++)
-  {
-    // const bool allNodesAreOld = ( nust[m + 0] <= nbInputNodes &&
-    //                               nust[m + 1] <= nbInputNodes &&
-    //                               nust[m + 2] <= nbInputNodes );
-    nn[ 0 ] = mefistoToDS[ nust[m++] - 1 ];
-    nn[ 1 ] = mefistoToDS[ nust[m++] - 1 ];
-    nn[ 2 ] = mefistoToDS[ nust[m++] - 1 ];
-    m++;
-
-    // avoid creating degenetrated faces
-    bool isDegen = ( _helper->HasDegeneratedEdges() &&
-                     ( nn[0] == nn[1] || nn[1] == nn[2] || nn[2] == nn[0] ));
-
-    // It was an attempt to fix a problem of a zero area face whose all nodes
-    // are on one staight EDGE. But omitting this face makes a hole in the mesh :(
-    // if ( !isDegen && allNodesAreOld )
-    //   isDegen = isDegenTria( nn );
-
-    if ( !isDegen )
-      _helper->AddFace( nn[0], nn[i1], nn[i2] );
-  }
-
-  // remove bad elements built on vertices shared by wires
-
-  list<const SMDS_MeshNode*>::iterator itN = myNodesOnCommonV.begin();
-  for ( ; itN != myNodesOnCommonV.end(); itN++ )
-  {
-    const SMDS_MeshNode* node = *itN;
-    SMDS_ElemIteratorPtr invElemIt = node->GetInverseElementIterator();
-    while ( invElemIt->more() )
-    {
-      const SMDS_MeshElement* elem = invElemIt->next();
-      SMDS_ElemIteratorPtr itN = elem->nodesIterator();
-      int nbSame = 0;
-      while ( itN->more() )
-        if ( itN->next() == node)
-          nbSame++;
-      if (nbSame > 1) {
-        MESSAGE( "RM bad element " << elem->GetID());
-        _helper->GetMeshDS()->RemoveElement( elem );
-      }
-    }
-  }
-}
diff --git a/src/StdMeshers/StdMeshers_MEFISTO_2D.hxx b/src/StdMeshers/StdMeshers_MEFISTO_2D.hxx
deleted file mode 100644 (file)
index fca6c2f..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-// Copyright (C) 2007-2020  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 SMESH : implementation of SMESH idl descriptions
-//  File   : StdMeshers_MEFISTO_2D.hxx
-//           Moved here from SMESH_MEFISTO_2D.hxx
-//  Author : Paul RASCLE, EDF
-//  Module : SMESH
-//
-#ifndef _StdMeshers_MEFISTO_2D_HXX_
-#define _StdMeshers_MEFISTO_2D_HXX_
-
-#include "SMESH_StdMeshers.hxx"
-
-#include "SMESH_Algo.hxx"
-
-class TopoDS_Face;
-class StdMeshers_MaxElementArea;
-class StdMeshers_LengthFromEdges;
-class SMDS_MeshNode;
-class SMESH_MesherHelper;
-class StdMeshers_FaceSide;
-
-#include <vector>
-#include <list>
-#include "Rn.h"
-
-class STDMESHERS_EXPORT StdMeshers_MEFISTO_2D: public SMESH_2D_Algo
-{
-public:
-  StdMeshers_MEFISTO_2D(int hypId, SMESH_Gen* gen);
-  virtual ~StdMeshers_MEFISTO_2D();
-
-  virtual bool CheckHypothesis(SMESH_Mesh& aMesh,
-                               const TopoDS_Shape& aShape,
-                               SMESH_Hypothesis::Hypothesis_Status& aStatus);
-
-  virtual bool Compute(SMESH_Mesh& aMesh,
-                       const TopoDS_Shape& aShape);
-
-  virtual bool Evaluate(SMESH_Mesh & aMesh, const TopoDS_Shape & aShape,
-                        MapShapeNbElems& aResMap);
-
-  typedef boost::shared_ptr< StdMeshers_FaceSide> StdMeshers_FaceSidePtr;
-  typedef std::vector< StdMeshers_FaceSidePtr > TWireVector;
-
-  bool LoadPoints(TWireVector &                       wires,
-                  R2*                                 uvslf, 
-                  std::vector< const SMDS_MeshNode*>& mefistoToDS,
-                  double scalex, double               scaley);
-
-  void ComputeScaleOnFace(SMESH_Mesh& aMesh,
-                          const TopoDS_Face& aFace,
-                          double& scalex,
-                          double& scaley);
-
-  void StoreResult (Z nbst, R2* uvst, Z nbt, Z* nust, 
-                    std::vector< const SMDS_MeshNode*>& mefistoToDS,
-                    double scalex, double scaley);
-                                          
-protected:
-  double                            _edgeLength;
-  double                            _maxElementArea;
-  const StdMeshers_MaxElementArea*  _hypMaxElementArea;
-  const StdMeshers_LengthFromEdges* _hypLengthFromEdges;
-
-  std::list<const SMDS_MeshNode*> myNodesOnCommonV;
-
-  SMESH_MesherHelper* _helper; // tool for working with quadratic elements
-};
-
-#endif
index 286b6198c243258359104c846b3b5551c615eaf8..d0d178201bb9d15f2beb90e7f58b65b6ac388f5d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 8f952e8907f3b1a41f0cb66712a383f39ad697ae..06bdcc2c2250bba68982ebd39b91fbc5e0161d6a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index d20454d63c55e9f0fdbb06ca7be5978da4613476..586b8aa72052393cc16fd9fde1ddd9fcb7663ace 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 70dd30c8745ef12ebaba6da0b389d54e86db6f78..6f41a7263de5205995e80e3e8f30943bc2f18612 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 637f7dc0b29b5602952e798427f86b293822f603..03c611ec475fc171af5661e00a54e1db6848b161 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index ba345adafa01efc1d7fea84bf12c1fcae51478db..ccc99286505768c7c4c6a7d4f1ad0665942a864f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 0de1cd9e60cdf4db6a8d40fb07b34266b111342d..e1616b7614f3d1ca366593924420a6defdab5973 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index de129efe10949c2274955dfc74156a74c1267a16..d1e8bc2fb983bfa9ced7b25a7c47215c035fde3c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 67aac1d2419d6c78669708589a3edf9e4389cfe7..baad46e11bebbe715b5a70bf83195c1885311afd 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 5b26622bc1f975185d321177a091c19581d9795b..ae5dcdddf20c91272e977266fbb6e5cea9a94022 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index f58aedb6e110a4e6923590e1ac7dc5d0df7df3e5..beaa5aae1989f79d8eb3c3ca45b42954dece124e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index c0ddb809ccf31908267129b13d9405d41c9a5e48..5857418abdf26a7f9e0083c5b51959cb66bf8a21 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 08f1210b95afdf341dde29e47aba0f5bf0d90ca2..c2a89b38c7960a699b53551721b323c020882847 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -109,9 +109,9 @@ StdMeshers_NumberOfSegments::BuildDistributionTab( const vector<double>& tab,
  */
 //=============================================================================
 
-void StdMeshers_NumberOfSegments::SetNumberOfSegments(int segmentsNumber)
+void StdMeshers_NumberOfSegments::SetNumberOfSegments(smIdType segmentsNumber)
 {
-  int oldNumberOfSegments = _numberOfSegments;
+  smIdType oldNumberOfSegments = _numberOfSegments;
   if (segmentsNumber <= 0)
     throw SALOME_Exception(LOCALIZED("number of segments must be positive"));
   _numberOfSegments = segmentsNumber;
@@ -126,7 +126,7 @@ void StdMeshers_NumberOfSegments::SetNumberOfSegments(int segmentsNumber)
  */
 //=============================================================================
 
-int StdMeshers_NumberOfSegments::GetNumberOfSegments() const
+smIdType StdMeshers_NumberOfSegments::GetNumberOfSegments() const
 {
   return _numberOfSegments;
 }
@@ -477,7 +477,7 @@ int StdMeshers_NumberOfSegments::ConversionMode() const
 
 ostream & StdMeshers_NumberOfSegments::SaveTo(ostream & save)
 {
-  int listSize = _edgeIDs.size();
+  size_t listSize = _edgeIDs.size();
   save << _numberOfSegments << " " << (int)_distrType;
   switch (_distrType)
   {
@@ -502,7 +502,7 @@ ostream & StdMeshers_NumberOfSegments::SaveTo(ostream & save)
 
   if ( _distrType != DT_Regular && listSize > 0 ) {
     save << " " << listSize;
-    for ( int i = 0; i < listSize; i++ )
+    for ( size_t i = 0; i < listSize; i++ )
       save << " " << _edgeIDs[i];
     save << " " << _objEntry;
   }
index c726488ea083c1f2cde2a7b1080074dfcf4c3e01..4e637ba44122b4bcab6fd618e748abe9a325a7b9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -33,6 +33,8 @@
 #include "SMESH_Hypothesis.hxx"
 #include "Utils_SALOME_Exception.hxx"
 
+#include <smIdType.hxx>
+
 #include <vector>
 
 /*!
@@ -55,12 +57,12 @@ public:
    * \brief Set the number of segments
     * \param segmentsNumber - must be greater than zero
    */
-  void SetNumberOfSegments(int segmentsNumber);
+  void SetNumberOfSegments(smIdType segmentsNumber);
 
   /*!
    * \brief Get the number of segments
    */
-  int GetNumberOfSegments() const;
+  smIdType GetNumberOfSegments() const;
 
   /*!
    * \brief This enumeration presents available types of distribution
@@ -179,7 +181,7 @@ public:
   friend std::istream& operator >> (std::istream & load, StdMeshers_NumberOfSegments & hyp);
 
 protected:
-  int                 _numberOfSegments; //!< an edge will be split on to this number of segments
+  smIdType            _numberOfSegments; //!< an edge will be split on to this number of segments
   DistrType           _distrType;        //!< the type of distribution of density function
   double              _scaleFactor;      //!< the scale parameter for DT_Scale
   std::vector<double> _table, _distr;    //!< the table for DT_TabFunc, a sequence of pairs of numbers
index 7dd933b0d2ef922232edc1d1deff0da07664f248..5216451aff99cbfbb625422f301461c4f92f2d54 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -147,7 +147,8 @@ bool StdMeshers_Penta_3D::Compute(SMESH_Mesh& aMesh,
 void StdMeshers_Penta_3D::MakeNodes()
 {
   const int aNbSIDs=9;
-  int i, j, k, ij, iNbN, aNodeID, aSize, iErr;
+  int i, j, k, ij, aSize, iErr;
+  smIdType iNbN, aNodeID;
   double aX, aY, aZ;
   SMESH_Block::TShapeID aSID, aSIDs[aNbSIDs]={
     SMESH_Block::ID_V000, SMESH_Block::ID_V100, 
@@ -655,7 +656,8 @@ void StdMeshers_Penta_3D::MakeVolumeMesh()
   }
   //
   // 2. Make pentahedrons
-  int aID0, k , aJ[4];
+  smIdType aID0;
+  int k , aJ[4];
   vector<const SMDS_MeshNode*> aN;
   //
   SMDS_ElemIteratorPtr itf, aItNodes;
@@ -766,7 +768,8 @@ void StdMeshers_Penta_3D::MakeVolumeMesh()
 //=======================================================================
 void StdMeshers_Penta_3D::MakeMeshOnFxy1()
 {
-  int aID0, aJ, aLevel, ij, aNbNodes, k;
+  int aJ, aLevel, ij, k;
+  smIdType aID0, aNbNodes;
   //
   SMDS_NodeIteratorPtr itn;
   SMDS_ElemIteratorPtr itf, aItNodes;
@@ -1109,12 +1112,12 @@ void StdMeshers_Penta_3D::MakeBlock()
     int iNbF = aM.Extent();
     if (iNbF == 6) {
       //
-      int nb_f1 = pMesh->GetSubMeshContaining(aM(1))->GetSubMeshDS()->NbElements();
-      int nb_f2 = pMesh->GetSubMeshContaining(aM(2))->GetSubMeshDS()->NbElements();
-      int nb_f3 = pMesh->GetSubMeshContaining(aM(3))->GetSubMeshDS()->NbElements();
-      int nb_f4 = pMesh->GetSubMeshContaining(aM(4))->GetSubMeshDS()->NbElements();
-      int nb_f5 = pMesh->GetSubMeshContaining(aM(5))->GetSubMeshDS()->NbElements();
-      int nb_f6 = pMesh->GetSubMeshContaining(aM(6))->GetSubMeshDS()->NbElements();
+      smIdType nb_f1 = pMesh->GetSubMeshContaining(aM(1))->GetSubMeshDS()->NbElements();
+      smIdType nb_f2 = pMesh->GetSubMeshContaining(aM(2))->GetSubMeshDS()->NbElements();
+      smIdType nb_f3 = pMesh->GetSubMeshContaining(aM(3))->GetSubMeshDS()->NbElements();
+      smIdType nb_f4 = pMesh->GetSubMeshContaining(aM(4))->GetSubMeshDS()->NbElements();
+      smIdType nb_f5 = pMesh->GetSubMeshContaining(aM(5))->GetSubMeshDS()->NbElements();
+      smIdType nb_f6 = pMesh->GetSubMeshContaining(aM(6))->GetSubMeshDS()->NbElements();
       //
       int has_only_quad_f1 = 1;
       int has_only_quad_f2 = 1;
@@ -1153,18 +1156,18 @@ void StdMeshers_Penta_3D::MakeBlock()
       int iNbE = aE.Extent();
       if (iNbE == 12) {
         //
-        int nb_e01 = pMesh->GetSubMeshContaining(aE(1))->GetSubMeshDS()->NbElements();
-        int nb_e02 = pMesh->GetSubMeshContaining(aE(2))->GetSubMeshDS()->NbElements();
-        int nb_e03 = pMesh->GetSubMeshContaining(aE(3))->GetSubMeshDS()->NbElements();
-        int nb_e04 = pMesh->GetSubMeshContaining(aE(4))->GetSubMeshDS()->NbElements();
-        int nb_e05 = pMesh->GetSubMeshContaining(aE(5))->GetSubMeshDS()->NbElements();
-        int nb_e06 = pMesh->GetSubMeshContaining(aE(6))->GetSubMeshDS()->NbElements();
-        int nb_e07 = pMesh->GetSubMeshContaining(aE(7))->GetSubMeshDS()->NbElements();
-        int nb_e08 = pMesh->GetSubMeshContaining(aE(8))->GetSubMeshDS()->NbElements();
-        int nb_e09 = pMesh->GetSubMeshContaining(aE(9))->GetSubMeshDS()->NbElements();
-        int nb_e10 = pMesh->GetSubMeshContaining(aE(10))->GetSubMeshDS()->NbElements();
-        int nb_e11 = pMesh->GetSubMeshContaining(aE(11))->GetSubMeshDS()->NbElements();
-        int nb_e12 = pMesh->GetSubMeshContaining(aE(12))->GetSubMeshDS()->NbElements();
+        smIdType nb_e01 = pMesh->GetSubMeshContaining(aE(1))->GetSubMeshDS()->NbElements();
+        smIdType nb_e02 = pMesh->GetSubMeshContaining(aE(2))->GetSubMeshDS()->NbElements();
+        smIdType nb_e03 = pMesh->GetSubMeshContaining(aE(3))->GetSubMeshDS()->NbElements();
+        smIdType nb_e04 = pMesh->GetSubMeshContaining(aE(4))->GetSubMeshDS()->NbElements();
+        smIdType nb_e05 = pMesh->GetSubMeshContaining(aE(5))->GetSubMeshDS()->NbElements();
+        smIdType nb_e06 = pMesh->GetSubMeshContaining(aE(6))->GetSubMeshDS()->NbElements();
+        smIdType nb_e07 = pMesh->GetSubMeshContaining(aE(7))->GetSubMeshDS()->NbElements();
+        smIdType nb_e08 = pMesh->GetSubMeshContaining(aE(8))->GetSubMeshDS()->NbElements();
+        smIdType nb_e09 = pMesh->GetSubMeshContaining(aE(9))->GetSubMeshDS()->NbElements();
+        smIdType nb_e10 = pMesh->GetSubMeshContaining(aE(10))->GetSubMeshDS()->NbElements();
+        smIdType nb_e11 = pMesh->GetSubMeshContaining(aE(11))->GetSubMeshDS()->NbElements();
+        smIdType nb_e12 = pMesh->GetSubMeshContaining(aE(12))->GetSubMeshDS()->NbElements();
         //
         int nb_ok = 0 ;
         //
@@ -1417,11 +1420,11 @@ bool StdMeshers_Penta_3D::LoadIJNodes(StdMeshers_IJNodeMap & theIJNodes,
   if ( sm1->NbNodes() * smb->NbNodes() != smFace->NbNodes() ) {
     // check quadratic case
     if ( myCreateQuadratic ) {
-      int n1 = sm1->NbNodes()/2;
-      int n2 = smb->NbNodes()/2;
-      int n3 = sm1->NbNodes() - n1;
-      int n4 = smb->NbNodes() - n2;
-      int nf = sm1->NbNodes()*smb->NbNodes() - n3*n4;
+      smIdType n1 = sm1->NbNodes()/2;
+      smIdType n2 = smb->NbNodes()/2;
+      smIdType n3 = sm1->NbNodes() - n1;
+      smIdType n4 = smb->NbNodes() - n2;
+      smIdType nf = sm1->NbNodes()*smb->NbNodes() - n3*n4;
       if( nf != smFace->NbNodes() ) {
         MESSAGE( "Wrong nb face nodes: " <<
                  sm1->NbNodes()<<" "<<smb->NbNodes()<<" "<<smFace->NbNodes());
@@ -1435,8 +1438,8 @@ bool StdMeshers_Penta_3D::LoadIJNodes(StdMeshers_IJNodeMap & theIJNodes,
     }
   }
   // IJ size
-  int vsize = sm1->NbNodes() + 2;
-  int hsize = smb->NbNodes() + 2;
+  smIdType vsize = sm1->NbNodes() + 2;
+  smIdType hsize = smb->NbNodes() + 2;
   if(myCreateQuadratic) {
     vsize = vsize - sm1->NbNodes()/2 -1;
     hsize = hsize - smb->NbNodes()/2 -1;
@@ -1870,16 +1873,16 @@ bool StdMeshers_Penta_3D::Evaluate(SMESH_Mesh& aMesh,
       NumBase = 0;
       break;
     }
-    std::vector<int> aVec = (*anIt).second;
-    int nbtri = Max(aVec[SMDSEntity_Triangle],aVec[SMDSEntity_Quad_Triangle]);
-    int nbqua = Max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
+    std::vector<smIdType> aVec = (*anIt).second;
+    smIdType nbtri = std::max(aVec[SMDSEntity_Triangle],aVec[SMDSEntity_Quad_Triangle]);
+    smIdType nbqua = std::max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
     if( nbtri>0 && nbqua==0 ) {
       NumBase = i;
     }
   }
 
   if(NumBase==0) {
-    std::vector<int> aResVec(SMDSEntity_Last);
+    std::vector<smIdType> aResVec(SMDSEntity_Last);
     for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aResVec[i] = 0;
     SMESH_subMesh * sm = aMesh.GetSubMesh(aShape);
     aResMap.insert(std::make_pair(sm,aResVec));
@@ -1897,8 +1900,8 @@ bool StdMeshers_Penta_3D::Evaluate(SMESH_Mesh& aMesh,
     if( sm ) {
       MapShapeNbElemsItr anIt = aResMap.find(sm);
       if( anIt == aResMap.end() ) continue;
-      std::vector<int> aVec = (*anIt).second;
-      nb1d += Max(aVec[SMDSEntity_Edge],aVec[SMDSEntity_Quad_Edge]);
+      std::vector<smIdType> aVec = (*anIt).second;
+      nb1d += std::max(aVec[SMDSEntity_Edge],aVec[SMDSEntity_Quad_Edge]);
     }
   }
   // find face opposite to base face
@@ -1923,14 +1926,14 @@ bool StdMeshers_Penta_3D::Evaluate(SMESH_Mesh& aMesh,
     if( i==OppNum || i==NumBase ) continue;
     MapShapeNbElemsItr anIt = aResMap.find( meshFaces[i-1] );
     if( anIt == aResMap.end() ) continue;
-    std::vector<int> aVec = (*anIt).second;
-    nb2d += Max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
+    std::vector<smIdType> aVec = (*anIt).second;
+    nb2d += std::max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
   }
 
   MapShapeNbElemsItr anIt = aResMap.find( meshFaces[NumBase-1] );
-  std::vector<int> aVec = (*anIt).second;
-  int nb2d_face0 = Max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
-  int nb0d_face0 = aVec[SMDSEntity_Node];
+  std::vector<smIdType> aVec = (*anIt).second;
+  smIdType nb2d_face0 = std::max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
+  smIdType nb0d_face0 = aVec[SMDSEntity_Node];
 
   anIt = aResMap.find( meshFaces[OppNum-1] );
   for(i=SMDSEntity_Node; i<SMDSEntity_Last; i++)
@@ -1939,7 +1942,7 @@ bool StdMeshers_Penta_3D::Evaluate(SMESH_Mesh& aMesh,
   SMESH_MesherHelper aTool (aMesh);
   bool _quadraticMesh = aTool.IsQuadraticSubMesh(aShape);
 
-  std::vector<int> aResVec(SMDSEntity_Last);
+  std::vector<smIdType> aResVec(SMDSEntity_Last);
   for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aResVec[i] = 0;
   if(_quadraticMesh) {
     aResVec[SMDSEntity_Quad_Penta] = nb2d_face0 * ( nb2d/nb1d );
index 1ea79ed87d8e65f4ec131a299d7ca0bbc6a8f080..c8e8b2bf297ae9390e427b7d292457d714160f28 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 586ec1e9cbf10d02f58bd2fe8eba6e0fab2075f9..3e59c3b28342b1c27cb83e299a0bc3090dc1bbd0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -136,7 +136,7 @@ bool StdMeshers_PolygonPerFace_2D::Evaluate(SMESH_Mesh&         theMesh,
     nbQuadSegs += sm2vec->second.at( SMDSEntity_Quad_Edge );
   }
 
-  std::vector<int> aVec( SMDSEntity_Last, 0 );
+  std::vector<smIdType> aVec( SMDSEntity_Last, 0 );
   switch ( nbLinSegs + nbQuadSegs ) {
   case 3:
     aVec[ nbQuadSegs ? SMDSEntity_Quad_Triangle : SMDSEntity_Triangle ] = 1;
index d2486b56d624f78d54c60ea9830d2610d7c76fe6..0213e8232209ff81229f21cbe6d0a9d57c16193b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index eeb19d48e5bbef330b1219af904a5d8c753a972b..ea8889e33e1f7f398e8b60a7e4f3cdbd8c64622d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -196,6 +196,9 @@ namespace
     int iSide = trias[0] + 1;
     if ( iSide == trias[1] )
       ++iSide;
+    if (iSide == 5)
+      // use first side (otherwise, out of bounds)
+      iSide = 0;
 
     const SMDS_MeshElement* botFace  = faces[ trias[0]];
     const SMDS_MeshElement* topFace  = faces[ trias[1]];
@@ -296,10 +299,6 @@ namespace
     if ( hexa[1] == -1 )
       return newHexPrism;
 
-    int iSide = hexa[0] + 1;
-    if ( iSide == hexa[1] )
-      ++iSide;
-
     const SMDS_MeshElement* botFace = faces[ hexa[ 0 ]];
     const SMDS_MeshElement* topFace = faces[ hexa[ 1 ]];
     std::vector< const SMDS_MeshNode* > nodes( 24 ); // last 12 is a working buffer
@@ -577,7 +576,7 @@ bool StdMeshers_PolyhedronPerSolid_3D::Evaluate(SMESH_Mesh&         theMesh,
     case TopAbs_FACE:
     {
       myFaceMesher->Evaluate( theMesh, shape, theResMap );
-      std::vector<int> & quantities = theResMap[ sm ];
+      std::vector<smIdType> & quantities = theResMap[ sm ];
       _quadraticMesh = ( !quantities.empty() &&
                          ( quantities[ SMDSEntity_Quad_Triangle   ] +
                            quantities[ SMDSEntity_Quad_Quadrangle ] +
@@ -587,7 +586,7 @@ bool StdMeshers_PolyhedronPerSolid_3D::Evaluate(SMESH_Mesh&         theMesh,
 
     case TopAbs_SOLID:
     {
-      std::vector<int> & quantities = theResMap[ sm ];
+      std::vector<smIdType> & quantities = theResMap[ sm ];
       quantities.resize( SMDSEntity_Last, 0 );
 
       SMESH_MesherHelper helper( theMesh );
index f639f2bf527b0431b6f1266fee9b95fb68fd8c7b..885964f50cb93de8b7e301c31975b2bb892cfd10 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 4217105111ebc833b4ff908ae274490a8209ce8e..db0bca48782d57e85541ab388cf617c0ebeae3af 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -95,11 +95,11 @@ namespace
   /*!
    * \brief Auxiliary mesh
    */
-  struct TmpMesh: public SMESH_Mesh
+  struct TmpMesh: public SMESH_SequentialMesh
   {
     TmpMesh() {
       _isShapeToMesh = (_id = 0);
-      _myMeshDS  = new SMESHDS_Mesh( _id, true );
+      _meshDS  = new SMESHDS_Mesh( _id, true );
     }
   };
   //=======================================================================
@@ -554,7 +554,7 @@ namespace
     {
       SMESH_subMesh* faceSm = *smIt;
       SMESHDS_SubMesh* faceSmDS = faceSm->GetSubMeshDS();
-      int nbQuads = faceSmDS ? faceSmDS->NbElements() : 0;
+      smIdType nbQuads = faceSmDS ? faceSmDS->NbElements() : 0;
       bool toRemove;
       if ( nbQuads > 0 )
         toRemove = helper->IsStructured( faceSm );
@@ -712,15 +712,14 @@ namespace
 
   void pointsToPython(const std::vector<gp_XYZ>& p)
   {
-#ifdef _DEBUG_
-    for ( size_t i = SMESH_Block::ID_V000; i < p.size(); ++i )
+    if (SALOME::VerbosityActivated())
     {
-      cout << "mesh.AddNode( " << p[i].X() << ", "<< p[i].Y() << ", "<< p[i].Z() << ") # " << i <<" " ;
-      SMESH_Block::DumpShapeID( i, cout ) << endl;
+      for ( size_t i = SMESH_Block::ID_V000; i < p.size(); ++i )
+      {
+        cout << "mesh.AddNode( " << p[i].X() << ", "<< p[i].Y() << ", "<< p[i].Z() << ") # " << i <<" " ;
+        SMESH_Block::DumpShapeID( i, cout ) << endl;
+      }
     }
-#else
-    (void)p; // unused in release mode
-#endif
   }
 
 } // namespace
@@ -1025,7 +1024,7 @@ bool StdMeshers_Prism_3D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape& theSh
         SMESH_subMesh*                 faceSM = theMesh.GetSubMesh( face );
         if ( !faceSM->IsEmpty() )
         {
-          int nbFaces = faceSM->GetSubMeshDS()->NbElements();
+          smIdType nbFaces = faceSM->GetSubMeshDS()->NbElements();
           if ( prevNbFaces < nbFaces )
           {
             if ( !meshedFaces.empty() ) meshedFaces.pop_back();
@@ -1153,7 +1152,7 @@ bool StdMeshers_Prism_3D::getWallFaces( Prism_3D::TPrismTopo & thePrism,
           if ( !quadList.back() )
             return toSM( error(TCom("Side face #") << shapeID( face )
                                << " not meshable with quadrangles"));
-          bool isCompositeBase = ! setBottomEdge( *edge, quadList.back(), face );
+          bool isCompositeBase = ! setBottomEdge( *edge, quadList.back(), face ); // -> orient CCW
           if ( isCompositeBase )
           {
             // it's OK if all EDGEs of the bottom side belongs to the bottom FACE
@@ -1749,7 +1748,7 @@ bool StdMeshers_Prism_3D::computeWalls(const Prism_3D::TPrismTopo& thePrism)
       }
 
       // assure that all the source (left) EDGEs are meshed
-      int nbSrcSegments = 0;
+      smIdType nbSrcSegments = 0;
       for ( int i = 0; i < lftSide->NbEdges(); ++i )
       {
         if ( isArtificialQuad )
@@ -2146,9 +2145,9 @@ bool StdMeshers_Prism_3D::Evaluate(SMESH_Mesh&         theMesh,
     if( anIt==aResMap.end() )
       return toSM( error( "Submesh can not be evaluated"));
 
-    std::vector<int> aVec = (*anIt).second;
-    int nbtri = Max(aVec[SMDSEntity_Triangle],aVec[SMDSEntity_Quad_Triangle]);
-    int nbqua = Max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
+    std::vector<smIdType> aVec = (*anIt).second;
+    smIdType nbtri = std::max(aVec[SMDSEntity_Triangle],aVec[SMDSEntity_Quad_Triangle]);
+    smIdType nbqua = std::max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
     if( nbtri==0 && nbqua>0 ) {
       NbQFs++;
     }
@@ -2158,7 +2157,7 @@ bool StdMeshers_Prism_3D::Evaluate(SMESH_Mesh&         theMesh,
   }
 
   if(NbQFs<4) {
-    std::vector<int> aResVec(SMDSEntity_Last);
+    std::vector<smIdType> aResVec(SMDSEntity_Last);
     for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aResVec[i] = 0;
     SMESH_subMesh * sm = theMesh.GetSubMesh(theShape);
     aResMap.insert(std::make_pair(sm,aResVec));
@@ -2168,7 +2167,7 @@ bool StdMeshers_Prism_3D::Evaluate(SMESH_Mesh&         theMesh,
   if(NumBase==0) NumBase = 1; // only quads => set 1 faces as base
 
   // find number of 1d elems for base face
-  int nb1d = 0;
+  smIdType nb1d = 0;
   TopTools_MapOfShape Edges1;
   for (TopExp_Explorer exp(aFaces.Value(NumBase), TopAbs_EDGE); exp.More(); exp.Next()) {
     Edges1.Add(exp.Current());
@@ -2176,8 +2175,8 @@ bool StdMeshers_Prism_3D::Evaluate(SMESH_Mesh&         theMesh,
     if( sm ) {
       MapShapeNbElemsItr anIt = aResMap.find(sm);
       if( anIt == aResMap.end() ) continue;
-      std::vector<int> aVec = (*anIt).second;
-      nb1d += Max(aVec[SMDSEntity_Edge],aVec[SMDSEntity_Quad_Edge]);
+      std::vector<smIdType> aVec = (*anIt).second;
+      nb1d += std::max(aVec[SMDSEntity_Edge],aVec[SMDSEntity_Quad_Edge]);
     }
   }
   // find face opposite to base face
@@ -2197,25 +2196,25 @@ bool StdMeshers_Prism_3D::Evaluate(SMESH_Mesh&         theMesh,
     }
   }
   // find number of 2d elems on side faces
-  int nb2d = 0;
+  smIdType nb2d = 0;
   for(i=1; i<=6; i++) {
     if( i==OppNum || i==NumBase ) continue;
     MapShapeNbElemsItr anIt = aResMap.find( meshFaces[i-1] );
     if( anIt == aResMap.end() ) continue;
-    std::vector<int> aVec = (*anIt).second;
-    nb2d += Max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
+    std::vector<smIdType> aVec = (*anIt).second;
+    nb2d += std::max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
   }
 
   MapShapeNbElemsItr anIt = aResMap.find( meshFaces[NumBase-1] );
-  std::vector<int> aVec = (*anIt).second;
+  std::vector<smIdType> aVec = (*anIt).second;
   bool IsQuadratic = (aVec[SMDSEntity_Quad_Triangle]>aVec[SMDSEntity_Triangle]) ||
                      (aVec[SMDSEntity_Quad_Quadrangle]>aVec[SMDSEntity_Quadrangle]);
-  int nb2d_face0_3 = Max(aVec[SMDSEntity_Triangle],aVec[SMDSEntity_Quad_Triangle]);
-  int nb2d_face0_4 = Max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
-  int nb0d_face0 = aVec[SMDSEntity_Node];
-  int nb1d_face0_int = ( nb2d_face0_3*3 + nb2d_face0_4*4 - nb1d ) / 2;
+  smIdType nb2d_face0_3 = std::max(aVec[SMDSEntity_Triangle],aVec[SMDSEntity_Quad_Triangle]);
+  smIdType nb2d_face0_4 = std::max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
+  smIdType nb0d_face0 = aVec[SMDSEntity_Node];
+  smIdType nb1d_face0_int = ( nb2d_face0_3*3 + nb2d_face0_4*4 - nb1d ) / 2;
 
-  std::vector<int> aResVec(SMDSEntity_Last);
+  std::vector<smIdType> aResVec(SMDSEntity_Last);
   for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aResVec[i] = 0;
   if(IsQuadratic) {
     aResVec[SMDSEntity_Quad_Penta] = nb2d_face0_3 * ( nb2d/nb1d );
@@ -2429,10 +2428,11 @@ bool StdMeshers_Prism_3D::assocOrProjBottom2Top( const gp_Trsf & bottomToTopTrsf
         {
           for ( int iE = 0; iE < botSide->NbEdges(); ++iE )
           {
+            // sides are CWW oriented
             NSProjUtils::InsertAssociation( botSide->Edge( iE ),
                                             topSide->Edge( iE ), shape2ShapeMap );
-            NSProjUtils::InsertAssociation( myHelper->IthVertex( 0, botSide->Edge( iE )),
-                                            myHelper->IthVertex( 0, topSide->Edge( iE )),
+            NSProjUtils::InsertAssociation( botSide->FirstVertex( iE ),
+                                            topSide->LastVertex ( iE ),
                                             shape2ShapeMap );
           }
         }
@@ -2483,7 +2483,7 @@ bool StdMeshers_Prism_3D::assocOrProjBottom2Top( const gp_Trsf & bottomToTopTrsf
 
   // Fill myBotToColumnMap
 
-  int zSize = myBlock.VerticalSize();
+  size_t zSize = myBlock.VerticalSize();
   TNodeNodeMap::const_iterator bN_tN = n2nMapPtr->begin();
   for ( ; bN_tN != n2nMapPtr->end(); ++bN_tN )
   {
@@ -2555,7 +2555,7 @@ bool StdMeshers_Prism_3D::projectBottomToTop( const gp_Trsf &             bottom
 
   // Fill myBotToColumnMap
 
-  int zSize = myBlock.VerticalSize();
+  size_t zSize = myBlock.VerticalSize();
   Prism_3D::TNode prevTNode;
   SMDS_NodeIteratorPtr nIt = botSMDS->GetNodes();
   while ( nIt->more() )
@@ -3282,10 +3282,12 @@ bool StdMeshers_Prism_3D::IsApplicable(const TopoDS_Shape & shape, bool toCheckA
         continue;
       }
     }
-#ifdef _DEBUG_
-    TopTools_IndexedMapOfShape allShapes; // usage: allShapes.FindIndex( s )
-    TopExp::MapShapes( shape, allShapes );
-#endif
+
+    if (SALOME::VerbosityActivated())
+    {
+      TopTools_IndexedMapOfShape allShapes; // usage: allShapes.FindIndex( s )
+      TopExp::MapShapes( shape, allShapes );
+    }
 
     TopTools_IndexedDataMapOfShapeListOfShape facesOfEdge;
     TopTools_ListIteratorOfListOfShape faceIt;
@@ -3474,9 +3476,11 @@ bool StdMeshers_Prism_3D::IsApplicable(const TopoDS_Shape & shape, bool toCheckA
         if ( iLoop > allFaces.Extent() * 10 )
         {
           isOK = false;
-#ifdef _DEBUG_
-          cerr << "BUG: infinite loop in StdMeshers_Prism_3D::IsApplicable()" << endl;
-#endif
+
+          if(SALOME::VerbosityActivated())
+          {
+            cerr << "BUG: infinite loop in StdMeshers_Prism_3D::IsApplicable()" << endl;
+          }
         }
       } // while hasAdvanced
 
@@ -3910,7 +3914,7 @@ bool StdMeshers_PrismAsBlock::Init(SMESH_MesherHelper*         helper,
         return error(COMPERR_BAD_INPUT_MESH, TCom("Can't find regular quadrangle mesh ")
                      << "on a side face #" << MeshDS()->ShapeToIndex( (*quad)->face ));
     }
-    if ( !faceColumns.empty() && (int)faceColumns.begin()->second.size() != VerticalSize() )
+    if ( !faceColumns.empty() && faceColumns.begin()->second.size() != VerticalSize() )
       return error(COMPERR_BAD_INPUT_MESH, "Different 'vertical' discretization");
 
     // edge columns
@@ -4226,7 +4230,7 @@ bool StdMeshers_PrismAsBlock::GetLayersTransformation(vector<gp_Trsf> &
                                                       const Prism_3D::TPrismTopo& prism) const
 {
   const bool itTopMeshed = !SubMesh( ID_BOT_FACE )->IsEmpty();
-  const int zSize = VerticalSize();
+  const size_t zSize = VerticalSize();
   if ( zSize < 3 && !itTopMeshed ) return true;
   trsf.resize( zSize - 1 );
 
@@ -4273,7 +4277,7 @@ bool StdMeshers_PrismAsBlock::GetLayersTransformation(vector<gp_Trsf> &
   gp_Ax3 cs0 = getLayerCoordSys(0, columns, xCol );
   //double dist0 = cs0.Location().Distance( gpXYZ( (*columns[0])[0]));
   toCs0.SetTransformation( cs0 );
-  for ( int z = 1; z < zSize; ++z )
+  for ( size_t z = 1; z < zSize; ++z )
   {
     gp_Ax3 csZ = getLayerCoordSys(z, columns, xCol );
     //double distZ = csZ.Location().Distance( gpXYZ( (*columns[0])[z]));
@@ -4341,7 +4345,9 @@ bool StdMeshers_PrismAsBlock::IsForwardEdge(SMESHDS_Mesh*           meshDS,
 void StdMeshers_PrismAsBlock::faceGridToPythonDump(const SMESH_Block::TShapeID face,
                                                    const int                   nb)
 {
-#ifdef _DEBUG_
+  if(!SALOME::VerbosityActivated())
+    return;
+
   gp_XYZ pOnF[6] = { gp_XYZ(0,0,0), gp_XYZ(0,0,1),
                      gp_XYZ(0,0,0), gp_XYZ(0,1,0),
                      gp_XYZ(0,0,0), gp_XYZ(1,0,0) };
@@ -4377,10 +4383,6 @@ void StdMeshers_PrismAsBlock::faceGridToPythonDump(const SMESH_Block::TShapeID f
            << n << ", " << n+1 << ", "
            << n+nb+2 << ", " << n+nb+1 << "]) " << endl;
     }
-#else
-  (void)face; // unused in release mode
-  (void)nb;   // unused in release mode
-#endif
 }
 
 //================================================================================
@@ -4988,7 +4990,9 @@ int StdMeshers_PrismAsBlock::TSideFace::InsertSubShapes(TBlockShapes& shapeMap)
 
 void StdMeshers_PrismAsBlock::TSideFace::dumpNodes(int nbNodes) const
 {
-#ifdef _DEBUG_
+  if (!SALOME::VerbosityActivated())
+    return;
+
   cout << endl << "NODES OF FACE "; SMESH_Block::DumpShapeID( myID, cout ) << endl;
   THorizontalEdgeAdaptor* hSize0 = (THorizontalEdgeAdaptor*) HorizCurve(0);
   cout << "Horiz side 0: "; hSize0->dumpNodes(nbNodes); cout << endl;
@@ -4999,9 +5003,6 @@ void StdMeshers_PrismAsBlock::TSideFace::dumpNodes(int nbNodes) const
   TVerticalEdgeAdaptor* vSide1 = (TVerticalEdgeAdaptor*) VertiCurve(1);
   cout << "Verti side 1: "; vSide1->dumpNodes(nbNodes); cout << endl;
   delete hSize0; delete hSize1; delete vSide0; delete vSide1;
-#else
-  (void)nbNodes; // unused in release mode
-#endif
 }
 
 //================================================================================
@@ -5042,14 +5043,13 @@ gp_Pnt StdMeshers_PrismAsBlock::TVerticalEdgeAdaptor::Value(const Standard_Real
 
 void StdMeshers_PrismAsBlock::TVerticalEdgeAdaptor::dumpNodes(int nbNodes) const
 {
-#ifdef _DEBUG_
+  if (!SALOME::VerbosityActivated())
+    return;
+
   for ( int i = 0; i < nbNodes && i < (int)myNodeColumn->size(); ++i )
     cout << (*myNodeColumn)[i]->GetID() << " ";
   if ( nbNodes < (int) myNodeColumn->size() )
     cout << myNodeColumn->back()->GetID();
-#else
-  (void)nbNodes; // unused in release mode
-#endif
 }
 
 //================================================================================
@@ -5073,7 +5073,9 @@ gp_Pnt StdMeshers_PrismAsBlock::THorizontalEdgeAdaptor::Value(const Standard_Rea
 
 void StdMeshers_PrismAsBlock::THorizontalEdgeAdaptor::dumpNodes(int nbNodes) const
 {
-#ifdef _DEBUG_
+  if (!SALOME::VerbosityActivated())
+    return;
+
   // Not bedugged code. Last node is sometimes incorrect
   const TSideFace* side = mySide;
   double u = 0;
@@ -5107,9 +5109,6 @@ void StdMeshers_PrismAsBlock::THorizontalEdgeAdaptor::dumpNodes(int nbNodes) con
   side->GetColumns( u , col, col2 );
   if ( n != col->second[ i ] )
     cout << col->second[ i ]->GetID();
-#else
-  (void)nbNodes; // unused in release mode
-#endif
 }
 
 //================================================================================
@@ -5614,7 +5613,7 @@ bool StdMeshers_Sweeper::ComputeNodesOnStraight()
   int    botTriaNodes[3], topTriaNodes[3];
   bool   checkUV = true;
 
-  int nbInternalNodes = myIntColumns.size();
+  size_t nbInternalNodes = myIntColumns.size();
   myBotDelaunay->InitTraversal( nbInternalNodes );
 
   while (( botNode = myBotDelaunay->NextNode( botBC, botTriaNodes )))
@@ -5763,7 +5762,7 @@ bool StdMeshers_Sweeper::findDelaunayTriangles()
   TopBotTriangles          tbTrias;
   bool  checkUV = true;
 
-  int nbInternalNodes = myIntColumns.size();
+  size_t nbInternalNodes = myIntColumns.size();
   myTopBotTriangles.resize( nbInternalNodes );
 
   myBotDelaunay->InitTraversal( nbInternalNodes );
index 850e01ee0b21c162648bd532d54947c300d40bf5..57a23407cab97bc990e965d11c5f44a903ccfeb7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -33,6 +33,7 @@
 #include "SMESH_Block.hxx"
 #include "SMESH_Comment.hxx"
 #include "SMESH_Mesh.hxx"
+#include "SMESH_SequentialMesh.hxx"
 #include "SMESH_MesherHelper.hxx"
 #include "SMESH_TypeDefs.hxx"
 #include "SMESH_subMesh.hxx"
@@ -117,7 +118,7 @@ namespace Prism_3D
 
 // ===============================================================
 /*!
- * \brief Tool analyzing and giving access to a prism geometry 
+ * \brief Tool analyzing and giving access to a prism geometry
  *  treating it like a block, i.e. the four side faces are
  *  emulated by division/uniting of missing/excess faces.
  *  It also manage associations between block sub-shapes and a mesh.
@@ -154,7 +155,7 @@ class STDMESHERS_EXPORT StdMeshers_PrismAsBlock: public SMESH_Block
    * \brief Return number of nodes on every vertical edge
     * \retval int - number of nodes including end nodes
    */
-  int VerticalSize() const { return myParam2ColumnMaps[0].begin()->second.size(); }
+  size_t VerticalSize() const { return myParam2ColumnMaps[0].begin()->second.size(); }
 
   bool HasNotQuadElemOnTop() const { return myNotQuadOnTop; }
 
@@ -200,7 +201,7 @@ class STDMESHERS_EXPORT StdMeshers_PrismAsBlock: public SMESH_Block
    */
   bool GetLayersTransformation(std::vector<gp_Trsf> &      trsf,
                                const Prism_3D::TPrismTopo& prism) const;
-  
+
   /*!
    * \brief Return pointer to mesh
     * \retval SMESH_Mesh - mesh
@@ -389,7 +390,7 @@ private:
   SMESH_ComputeErrorPtr myError;
 
   // container of 4 side faces
-  TSideFace*            mySide; 
+  TSideFace*            mySide;
   // node columns for each base edge
   std::vector< TParam2ColumnMap >                       myParam2ColumnMaps;
   // to find a column for a node by edge SMESHDS Index
index d89e3c6c528ed08d03327051ea9b449ec65c90a5..5b04588926e2380a03afd1620a49bcfc83e22136 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index c1d5a4999667c087a22e9a23cec912c13f121a7e..b1a10b3d78c4b932f4e1d3839713bab0746462ef 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index d3334e295ad367f9ed0f496078f59a8e03c885d1..2e9de0d42b3c0ff9d9417eefd9fa526d7304a123 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index ae8bd395e45d19b0c3f5eaad787ccee89637a341..1dc507cf34e3e1de6117ddf92de98dcac3f9492e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index cf6d35ebf5dad6b41eadb5378bada701e91c695c..fb0a5df7b987a7dfb285dd354637f986d216328b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 799a0ec49d673625581a02ce5280b902c34bc7e3..bdc6cca97f892d62e24f565c0d804190addab22e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 7760791b5ca38d67a8d1f14b6c5455c8796e595b..9284c91adad61a57fdf3a6567d6a44c2dc6ce0c4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -124,14 +124,19 @@ namespace {
   bool storeShapeForDebug(const TopoDS_Shape& shape)
   {
     bool toShow;
-#ifdef _DEBUG_
-    const char* type[] ={"COMPOUND","COMPSOLID","SOLID","SHELL","FACE","WIRE","EDGE","VERTEX"};
-    BRepTools::Write( shape, SMESH_Comment("/tmp/") << type[shape.ShapeType()] << "_"
-                      << shape.TShape().operator->() << ".brep");
-    toShow = !theMeshDS[0]; // no show
-#else
-    toShow = theMeshDS[0]; // no show
-#endif
+
+    if (SALOME::VerbosityActivated())
+    {
+      const char* type[] ={"COMPOUND","COMPSOLID","SOLID","SHELL","FACE","WIRE","EDGE","VERTEX"};
+      BRepTools::Write( shape, SMESH_Comment("/tmp/") << type[shape.ShapeType()] << "_"
+                        << shape.TShape().operator->() << ".brep");
+      toShow = !theMeshDS[0]; // no show
+    }
+    else
+    {
+      toShow = theMeshDS[0]; // no show
+    }
+
     if ( toShow ) {
       show_shape( shape, "avoid warning: show_shape() defined but not used");
       show_list( "avoid warning: show_list() defined but not used", list< TopoDS_Edge >() );
@@ -542,10 +547,11 @@ bool StdMeshers_ProjectionUtils::FindSubShapeAssociation(const TopoDS_Shape& the
   //       b) find association of a couple of vertices and recall self.
   //
 
-#ifdef _DEBUG_
-  theMeshDS[0] = theMesh1->GetMeshDS(); // debug
-  theMeshDS[1] = theMesh2->GetMeshDS();
-#endif
+  if (SALOME::VerbosityActivated())
+  {
+    theMeshDS[0] = theMesh1->GetMeshDS(); // debug
+    theMeshDS[1] = theMesh2->GetMeshDS();
+  }
 
   // =================================================================================
   // 1) Is it the case of associating a group member -> another group? (PAL16202, 16203)
@@ -2803,10 +2809,10 @@ namespace StdMeshers_ProjectionUtils
       const double D = M.Determinant();
       if ( D < 1e-3 * ( newSrcOrig - _srcOrig ).Modulus() )
       {
-#ifdef _DEBUG_
-        cerr << "TrsfFinder3D::Invert()"
+        if (SALOME::VerbosityActivated())
+          cerr << "TrsfFinder3D::Invert()"
              << "D " << M.Determinant() << " IsSingular " << M.IsSingular() << endl;
-#endif
+
         return false;
       }
       gp_Mat Minv = M.Inverted();
@@ -2873,7 +2879,7 @@ namespace StdMeshers_ProjectionUtils
     const SMDS_MeshNode *srcNode, *tgtNode;
 
     // un-mark internal src nodes in order iterate them using _delaunay
-    int nbSrcNodes = 0;
+    smIdType nbSrcNodes = 0;
     SMDS_NodeIteratorPtr nIt = _srcSubMesh->GetSubMeshDS()->GetNodes();
     if ( !nIt || !nIt->more() ) return true;
     if ( moveAll )
index 32509f6266cac068889d3a25f1da1c5cae94370a..e4078dc4ec265b6196a8dadf0b5c9d6042e72347 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -326,9 +326,9 @@ namespace StdMeshers_ProjectionUtils
    * \param srcShape - source shape
    * \param srcMesh - source mesh
    */
-  void SetEventListener(SMESH_subMesh* subMesh,
-                        TopoDS_Shape   srcShape,
-                        SMESH_Mesh*    srcMesh);
+  STDMESHERS_EXPORT void SetEventListener(SMESH_subMesh* subMesh,
+                                          TopoDS_Shape   srcShape,
+                                          SMESH_Mesh*    srcMesh);
 
   /*!
    * \brief Return a boundary EDGE (or all boundary EDGEs) of edgeContainer
index 143820ee64fc254fc90488ac8fd6edf295b9235e..cf181f9e6bdeb87a105428e7383c57f59341f0c7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -448,7 +448,7 @@ bool StdMeshers_Projection_1D::Evaluate(SMESH_Mesh& theMesh,
 
   int nbNodes = params.size();
 
-  std::vector<int> aVec(SMDSEntity_Last);
+  std::vector<smIdType> aVec(SMDSEntity_Last);
   for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aVec[i] = 0;
 
   aVec[SMDSEntity_Node] = nbNodes;
index 3b27092f61e99639a85c23bb7f371ffbc5796031..98a155574491af336cc5bd46a3b6e164c09d9335 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 308c151b80bc1df2e6a7bc5c5c42b69a0e8cbb1b..10fac944cb6e75937c141854974aa230df52d900 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -251,7 +251,7 @@ bool StdMeshers_Projection_1D2D::Evaluate(SMESH_Mesh&         theMesh,
     TopAbs_ShapeEnum shapeType = srcSM->GetSubShape().ShapeType();
     if ( shapeType == TopAbs_EDGE )
     {
-      std::vector<int> aVec;
+      std::vector<smIdType> aVec;
       SMESHDS_SubMesh* srcSubMeshDS = srcSM->GetSubMeshDS();
       if ( srcSubMeshDS && srcSubMeshDS->NbElements() )
       {
index c99e0c073f2f2f5ea9055fd019d49ddab8f346fb..4945e4ffcc0edf6b3a4512a64395a13d8943525e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 4ef3b3f671d6ed10964de5512a9f23231ff6bfe3..b73b3a0fe54d44ddd80eb78a98058443f5cef85b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 //
 #include "StdMeshers_Projection_2D.hxx"
 
+#include "StdMeshers_FaceSide.hxx"
+#include "StdMeshers_NumberOfSegments.hxx"
 #include "StdMeshers_ProjectionSource2D.hxx"
 #include "StdMeshers_ProjectionUtils.hxx"
-#include "StdMeshers_FaceSide.hxx"
-
-#include "SMDS_EdgePosition.hxx"
-#include "SMDS_FacePosition.hxx"
-#include "SMESHDS_Hypothesis.hxx"
-#include "SMESHDS_Mesh.hxx"
-#include "SMESHDS_SubMesh.hxx"
-#include "SMESH_Block.hxx"
-#include "SMESH_Comment.hxx"
-#include "SMESH_Gen.hxx"
-#include "SMESH_Mesh.hxx"
-#include "SMESH_MeshAlgos.hxx"
-#include "SMESH_MeshEditor.hxx"
-#include "SMESH_MesherHelper.hxx"
-#include "SMESH_Pattern.hxx"
-#include "SMESH_subMesh.hxx"
-#include "SMESH_subMeshEventListener.hxx"
+#include "StdMeshers_Quadrangle_2D.hxx"
+#include "StdMeshers_Regular_1D.hxx"
+
+#include <ObjectPool.hxx>
+#include <SMDS_EdgePosition.hxx>
+#include <SMDS_FacePosition.hxx>
+#include <SMESHDS_Hypothesis.hxx>
+#include <SMESHDS_Mesh.hxx>
+#include <SMESHDS_SubMesh.hxx>
+#include <SMESH_Block.hxx>
+#include <SMESH_Comment.hxx>
+#include <SMESH_Gen.hxx>
+#include <SMESH_Mesh.hxx>
+#include <SMESH_SequentialMesh.hxx>
+#include <SMESH_MeshAlgos.hxx>
+#include <SMESH_MeshEditor.hxx>
+#include <SMESH_MesherHelper.hxx>
+#include <SMESH_Pattern.hxx>
+#include <SMESH_subMesh.hxx>
+#include <SMESH_subMeshEventListener.hxx>
 
 #include <utilities.h>
 
 #include <BRepMesh_Delaun.hxx>
 #include <BRep_Tool.hxx>
 #include <Bnd_B2d.hxx>
+#include <GeomAPI_ExtremaCurveCurve.hxx>
 #include <GeomAPI_ProjectPointOnSurf.hxx>
+#include <GeomAdaptor_Curve.hxx>
+#include <GeomAdaptor_Surface.hxx>
+
+#include <Basics_OCCTVersion.hxx>
+
+#if OCC_VERSION_LARGE < 0x07070000
+#include <GeomAdaptor_HCurve.hxx>
+#include <GeomAdaptor_HSurface.hxx>
+#endif
+
 #include <GeomLib_IsPlanarSurface.hxx>
+#include <Geom_Line.hxx>
+#include <IntCurveSurface_HInter.hxx>
 #include <Precision.hxx>
 #include <TopExp.hxx>
 #include <TopExp_Explorer.hxx>
@@ -81,9 +99,15 @@ using namespace std;
 namespace TAssocTool = StdMeshers_ProjectionUtils;
 //typedef StdMeshers_ProjectionUtils TAssocTool;
 
+// allow range iteration on NCollection_IndexedMap
+template < class IMAP >
+typename IMAP::const_iterator begin( const IMAP &  m ) { return m.cbegin(); }
+template < class IMAP >
+typename IMAP::const_iterator end( const IMAP &  m ) { return m.cend(); }
+
 //=======================================================================
 //function : StdMeshers_Projection_2D
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 StdMeshers_Projection_2D::StdMeshers_Projection_2D(int hypId, SMESH_Gen* gen)
@@ -105,7 +129,7 @@ StdMeshers_Projection_2D::~StdMeshers_Projection_2D()
 
 //=======================================================================
 //function : CheckHypothesis
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 bool StdMeshers_Projection_2D::CheckHypothesis(SMESH_Mesh&                          theMesh,
@@ -301,7 +325,7 @@ namespace {
       break;
     }
     case TopAbs_EDGE: {
-      
+
       // Get submeshes of sub-vertices
       const map< int, SMESH_subMesh * >& subSM = sm->DependsOn();
       if ( subSM.size() != 2 )
@@ -688,7 +712,7 @@ namespace {
     while ( elemIt->more() ) // loop on all mesh faces on srcFace
     {
       const SMDS_MeshElement* elem = elemIt->next();
-      const int nbN = elem->NbCornerNodes(); 
+      const int nbN = elem->NbCornerNodes();
       tgtNodes.resize( nbN );
       helper->SetElementsOnShape( false );
       for ( int i = 0; i < nbN; ++i ) // loop on nodes of the source element
@@ -762,7 +786,7 @@ namespace {
 
     // check node positions
 
-    if ( !tgtFace.IsPartner( srcFace ) )
+    // if ( !tgtFace.IsPartner( srcFace ) ) for NETGEN 6 which sets wrong UV
     {
       helper->ToFixNodeParameters( true );
 
@@ -967,29 +991,382 @@ namespace {
     }  // loop on all mesh faces on srcFace
 
     return true;
+
+  } // projectBy2DSimilarity()
+
+  //================================================================================
+  /*!
+   * \brief Quadrangle algorithm computing structured triangle mesh
+   */
+  //================================================================================
+
+  struct QuadAlgo : public StdMeshers_Quadrangle_2D
+  {
+    QuadAlgo( int hypId, SMESH_Gen* gen ): StdMeshers_Quadrangle_2D( hypId, gen ) {}
+
+    bool Compute( SMESH_MesherHelper & theHelper, const StdMeshers_FaceSidePtr& theWire )
+    {
+      SMESH_Mesh& theMesh = *theHelper.GetMesh();
+
+      // set sides of a quad FACE
+      FaceQuadStruct::Ptr quad( new FaceQuadStruct );
+      quad->side.reserve( 4 );
+      quad->face = theWire->Face();
+      for ( int i = 0; i < 4; ++i )
+        quad->side.push_back
+          ( StdMeshers_FaceSide::New( quad->face, theWire->Edge(i), &theMesh, i < QUAD_TOP_SIDE,
+                                      /*skipMedium=*/true, theWire->FaceHelper() ));
+      if ( !setNormalizedGrid( quad ))
+        return false;
+
+      // make internal nodes
+      SMESHDS_Mesh *  meshDS = theMesh.GetMeshDS();
+      int         geomFaceID = meshDS->ShapeToIndex( quad->face );
+      Handle(Geom_Surface) S = BRep_Tool::Surface( quad->face );
+      for (   int i = 1; i < quad->iSize - 1; i++)
+        for ( int j = 1; j < quad->jSize - 1; j++)
+        {
+          UVPtStruct& uvPnt = quad->UVPt( i, j );
+          gp_Pnt P          = S->Value( uvPnt.u, uvPnt.v );
+          uvPnt.node        = meshDS->AddNode(P.X(), P.Y(), P.Z());
+          meshDS->SetNodeOnFace( uvPnt.node, geomFaceID, uvPnt.u, uvPnt.v );
+        }
+
+      // make triangles
+      for (   int i = 0; i < quad->iSize-1; i++) {
+        for ( int j = 0; j < quad->jSize-1; j++)
+        {
+          const SMDS_MeshNode* a = quad->uv_grid[ j      * quad->iSize + i    ].node;
+          const SMDS_MeshNode* b = quad->uv_grid[ j      * quad->iSize + i + 1].node;
+          const SMDS_MeshNode* c = quad->uv_grid[(j + 1) * quad->iSize + i + 1].node;
+          const SMDS_MeshNode* d = quad->uv_grid[(j + 1) * quad->iSize + i    ].node;
+          theHelper.AddFace(a, b, c);
+          theHelper.AddFace(a, c, d);
+        }
+      }
+      return true;
+    }
+  };
+
+  //================================================================================
+  /*!
+   * \brief Local coordinate system of a triangle. Return barycentric coordinates of a point
+   */
+  //================================================================================
+
+  struct TriaCoordSys
+  {
+    gp_Pnt myO;   //!< origin
+    gp_Vec myX;   //!< X axis
+    gp_Vec myY;   //!< Y axis
+    gp_XY  myUV1; //!< UV of 2nd node in this CS
+    gp_XY  myUV2; //!< UV of 3d  node in this CS
+
+    void Init( const gp_Pnt p1, const gp_Pnt p2, const gp_Pnt p3 )
+    {
+      myO = p1;
+
+      myX = gp_Vec( p1, p2 );
+      myUV1.SetCoord( myX.Magnitude(), 0 );
+      myX /= myUV1.X();
+
+      gp_Vec v13( p1, p3 );
+      myY = myX.CrossCrossed( myX, v13 );
+      myY.Normalize();
+      myUV2.SetCoord( v13 * myX, v13 * myY );
+
+      return;
+    }
+
+    void GetBaryCoords( const gp_Pnt p, double& bc1, double& bc2, double& bc3 ) const
+    {
+      gp_Vec op( myO, p );
+      gp_XY uv( op * myX, op * myY );
+
+      SMESH_MeshAlgos::GetBarycentricCoords( uv,
+                                             gp::Origin2d().XY(), myUV1, myUV2,
+                                             bc1, bc2 );
+      bc3 = 1 - bc1 - bc2;
+    }
+  };
+
+
+  //================================================================================
+  /*!
+   * \brief Structured 2D mesh of a quadrilateral FACE; is used in projectQuads()
+   */
+  //================================================================================
+
+  struct QuadMesh : public SMESH_SequentialMesh
+  {
+    ObjectPool< TriaCoordSys > _traiLCSPool;
+    SMESH_ElementSearcher*     _elemSearcher;
+    SMESH_Gen                  _sgen;
+    SMESH_MesherHelper         _helper;
+
+    QuadMesh(const TopoDS_Face& face):
+      _elemSearcher( nullptr ), _helper( *this )
+    {
+      _meshDS = new SMESHDS_Mesh( 0, true );
+      _gen = &_sgen;
+      ShapeToMesh( face );
+    }
+    ~QuadMesh() { delete _elemSearcher; }
+
+    // --------------------------------------------------------------------------------
+    /*!
+     * \brief Compute quadrangle mesh and prepare for face search
+     */
+    bool Compute( const TSideVector& wires, int nbSeg1, int nbSeg2, bool isSourceMesh )
+    {
+      if ( wires.size() > 1 || wires[0]->NbEdges() != 4 )
+        return false;
+
+      // compute quadrangle mesh
+
+      SMESH_Hypothesis* algo1D = new StdMeshers_Regular_1D( _sgen.GetANewId(), &_sgen );
+      AddHypothesis( GetShapeToMesh(), algo1D->GetID() );
+
+      StdMeshers_NumberOfSegments * nbHyp1, *nbHyp2;
+      nbHyp1 = new StdMeshers_NumberOfSegments( _sgen.GetANewId(), &_sgen );
+      nbHyp1->SetNumberOfSegments( nbSeg1 );
+      AddHypothesis( wires[0]->Edge(0), nbHyp1->GetID() );
+      AddHypothesis( wires[0]->Edge(2), nbHyp1->GetID() );
+
+      nbHyp2 = new StdMeshers_NumberOfSegments( _sgen.GetANewId(), &_sgen );
+      nbHyp2->SetNumberOfSegments( nbSeg2 );
+      AddHypothesis( wires[0]->Edge(1), nbHyp2->GetID() );
+      AddHypothesis( wires[0]->Edge(3), nbHyp2->GetID() );
+
+      if ( !_sgen.Compute( *this, GetShapeToMesh(), SMESH_Gen::SHAPE_ONLY_UPWARD ))
+        return false;
+
+      QuadAlgo algo2D( _sgen.GetANewId(), &_sgen );
+      if ( !algo2D.Compute( _helper, wires[0] ))
+        return false;
+
+      // remove edges
+      // for ( SMDS_ElemIteratorPtr eIt = _meshDS->elementsIterator( SMDSAbs_Edge ); eIt->more(); )
+      //   _meshDS->RemoveFreeElement( eIt->next(), /*sm=*/0, /*groups=*/false );
+
+      // _meshDS->Modified(); // setMyModified();
+      // _meshDS->CompactMesh();
+
+      // create TriaCoordSys for every triangle
+      if ( isSourceMesh )
+      {
+        for ( SMDS_ElemIteratorPtr fIt = _meshDS->elementsIterator( SMDSAbs_Face ); fIt->more(); )
+        {
+          const SMDS_MeshElement* tria = fIt->next();
+          TriaCoordSys* triaLCS = _traiLCSPool.getNew();
+          triaLCS->Init( SMESH_NodeXYZ( tria->GetNode( 0 )),
+                         SMESH_NodeXYZ( tria->GetNode( 1 )),
+                         SMESH_NodeXYZ( tria->GetNode( 2 )));
+          // int i= tria->GetID() - NbEdges() - 1;
+          // cout << "ID from TRIA " << i << " - poolSize " << _traiLCSPool.nbElements() <<
+          //   ( _traiLCSPool[i]!= triaLCS ? " KO" : "" )  << endl;
+        }
+        _elemSearcher = SMESH_MeshAlgos::GetElementSearcher( *_meshDS );
+      }
+      return true;
+    }
+    // --------------------------------------------------------------------------------
+    /*!
+     * \brief Find a source triangle including a point and return its barycentric coordinates
+     */
+    const SMDS_MeshElement* FindFaceByPoint( const gp_Pnt p,
+                                             double & bc1, double & bc2, double & bc3 )
+    {
+      const SMDS_MeshElement* tria = nullptr;
+      gp_XYZ projPnt = _elemSearcher->Project( p, SMDSAbs_Face, &tria );
+
+      int lcsID = tria->GetID() - NbEdges() - 1;
+      const TriaCoordSys* triaLCS = _traiLCSPool[ lcsID ];
+      triaLCS->GetBaryCoords( projPnt, bc1, bc2, bc3 );
+
+      return tria;
+    }
+    // --------------------------------------------------------------------------------
+    /*!
+     * \brief Return a point lying on a corresponding target triangle
+     */
+    gp_Pnt GetPoint( const SMDS_MeshElement* srcTria, double & bc1, double & bc2, double & bc3 )
+    {
+      const SMDS_MeshElement* tgtTria = _meshDS->FindElement( srcTria->GetID() );
+      gp_Pnt p = ( bc1 * SMESH_NodeXYZ( tgtTria->GetNode(0) ) +
+                   bc2 * SMESH_NodeXYZ( tgtTria->GetNode(1) ) +
+                   bc3 * SMESH_NodeXYZ( tgtTria->GetNode(2) ) );
+      return p;
+    }
+    // --------------------------------------------------------------------------------
+    /*!
+     * \brief Return an UV of point lying on a corresponding target triangle
+     */
+    gp_XY GetUV( const SMDS_MeshElement* srcTria,
+                 double & bc1, double & bc2, double & bc3 )
+    {
+      const SMDS_MeshElement* tgtTria = _meshDS->FindElement( srcTria->GetID() );
+      TopoDS_Shape tgtShape = GetShapeToMesh();
+      const TopoDS_Face& face = TopoDS::Face( tgtShape );
+
+      gp_XY p = ( bc1 * _helper.GetNodeUV( face, tgtTria->GetNode(0) ) +
+                  bc2 * _helper.GetNodeUV( face, tgtTria->GetNode(1) ) +
+                  bc3 * _helper.GetNodeUV( face, tgtTria->GetNode(2) ) );
+      return p;
+    }
+  };
+
+  //================================================================================
+  /*!
+   * \brief Calculate average size of faces
+   *         Actually calculate average of min and max face size
+   */
+  //================================================================================
+
+  double calcAverageFaceSize( SMESHDS_SubMesh* sm )
+  {
+    double minLen = Precision::Infinite(), maxLen = 0;
+    for ( SMDS_ElemIteratorPtr fIt = sm->GetElements(); fIt->more(); )
+    {
+      const SMDS_MeshElement* face = fIt->next();
+      int nbNodes = face->NbCornerNodes();
+      gp_XYZ pPrev = SMESH_NodeXYZ( face->GetNode( nbNodes - 1 ));
+      for ( int i = 0; i < nbNodes; ++i )
+      {
+        SMESH_NodeXYZ p( face->GetNode( i ));
+        double len = ( p - pPrev ).SquareModulus();
+        minLen = Min( len, minLen );
+        maxLen = Max( len, maxLen );
+        pPrev = p;
+      }
+    }
+    return 0.5 * ( Sqrt( minLen ) + Sqrt( maxLen ));
   }
 
   //================================================================================
   /*!
-   * \brief Perform projection in case of quadrilateral faces
+   * \brief Perform projection from a quadrilateral FACE to another quadrilateral one
    */
   //================================================================================
 
-  bool projectQuads(const TopoDS_Face&                 /*tgtFace*/,
-                    const TopoDS_Face&                 /*srcFace*/,
-                    const TSideVector&                 /*tgtWires*/,
-                    const TSideVector&                 /*srcWires*/,
-                    const TAssocTool::TShapeShapeMap&  /*shape2ShapeMap*/,
-                    TAssocTool::TNodeNodeMap&          /*src2tgtNodes*/,
-                    const bool                         /*is1DComputed*/)
+  bool projectQuads(const TopoDS_Face&                 tgtFace,
+                    const TopoDS_Face&                 srcFace,
+                    const TSideVector&                 tgtWires,
+                    const TSideVector&                 srcWires,
+                    const TAssocTool::TShapeShapeMap&  shape2ShapeMap,
+                    TAssocTool::TNodeNodeMap&          src2tgtNodes,
+                    const bool                         is1DComputed)
   {
-    // SMESH_Mesh * tgtMesh = tgtWires[0]->GetMesh();
-    // SMESH_Mesh * srcMesh = srcWires[0]->GetMesh();
-    // //SMESHDS_Mesh * tgtMeshDS = tgtMesh->GetMeshDS();
-    // SMESHDS_Mesh * srcMeshDS = srcMesh->GetMeshDS();
+    SMESH_Mesh * tgtMesh = tgtWires[0]->GetMesh();
+    SMESH_Mesh * srcMesh = srcWires[0]->GetMesh();
+    SMESHDS_Mesh * tgtMeshDS = tgtMesh->GetMeshDS();
+    SMESHDS_Mesh * srcMeshDS = srcMesh->GetMeshDS();
+
+    if ( srcWires.size() != 1 || // requirements below can be weaken
+         SMESH_MesherHelper::Count( tgtFace, TopAbs_EDGE, /*ignoreSame=*/true) != 4 ||
+         SMESH_MesherHelper::Count( srcFace, TopAbs_EDGE, /*ignoreSame=*/true) != 4 )
+      return false;
+
+    // make auxiliary structured meshes that will be used to get corresponding
+    // points on the target FACE
+    QuadMesh srcQuadMesh( srcFace ), tgtQuadMesh( tgtFace );
+    double avgSize = calcAverageFaceSize( srcMeshDS->MeshElements( srcFace ));
+    int nbSeg1 = (int) Max( 2., Max( srcWires[0]->EdgeLength(0),
+                                     srcWires[0]->EdgeLength(2)) / avgSize );
+    int nbSeg2 = (int) Max( 2., Max( srcWires[0]->EdgeLength(1),
+                                     srcWires[0]->EdgeLength(3)) / avgSize );
+    if ( !srcQuadMesh.Compute( srcWires, nbSeg1, nbSeg2, /*isSrc=*/true ) ||
+         !tgtQuadMesh.Compute( tgtWires, nbSeg1, nbSeg2, /*isSrc=*/false ))
+      return false;
+
+    // Make new faces
+
+    // prepare the helper to adding quadratic elements if necessary
+    SMESH_MesherHelper* helper = tgtWires[0]->FaceHelper();
+    helper->IsQuadraticSubMesh( tgtFace );
+
+    SMESHDS_SubMesh* srcSubDS = srcMeshDS->MeshElements( srcFace );
+    if ( !is1DComputed && srcSubDS->NbElements() )
+      helper->SetIsQuadratic( srcSubDS->GetElements()->next()->IsQuadratic() );
+
+    SMESH_MesherHelper* srcHelper = srcWires[0]->FaceHelper();
+    SMESH_MesherHelper  edgeHelper( *tgtMesh );
+    edgeHelper.ToFixNodeParameters( true );
+
+    const SMDS_MeshNode* nullNode = 0;
+    TAssocTool::TNodeNodeMap::iterator srcN_tgtN;
+
+    SMDS_ElemIteratorPtr elemIt = srcSubDS->GetElements();
+    vector< const SMDS_MeshNode* > tgtNodes;
+    while ( elemIt->more() ) // loop on all mesh faces on srcFace
+    {
+      const SMDS_MeshElement* elem = elemIt->next();
+      const int nbN = elem->NbCornerNodes();
+      tgtNodes.resize( nbN );
+      helper->SetElementsOnShape( false );
+      for ( int i = 0; i < nbN; ++i ) // loop on nodes of the source element
+      {
+        const SMDS_MeshNode* srcNode = elem->GetNode(i);
+        srcN_tgtN = src2tgtNodes.insert( make_pair( srcNode, nullNode )).first;
+        if ( srcN_tgtN->second == nullNode )
+        {
+          // create a new node
+          gp_Pnt srcP = SMESH_TNodeXYZ( srcNode );
+          double bc[3];
+          const SMDS_MeshElement* auxF = srcQuadMesh.FindFaceByPoint( srcP, bc[0], bc[1], bc[2] );
+          gp_Pnt                  tgtP = tgtQuadMesh.GetPoint( auxF, bc[0], bc[1], bc[2] );
+          SMDS_MeshNode* n = helper->AddNode( tgtP.X(), tgtP.Y(), tgtP.Z() );
+          srcN_tgtN->second = n;
+          switch ( srcNode->GetPosition()->GetTypeOfPosition() )
+          {
+          case SMDS_TOP_FACE:
+          {
+            gp_XY tgtUV = tgtQuadMesh.GetUV( auxF, bc[0], bc[1], bc[2] );
+            tgtMeshDS->SetNodeOnFace( n, helper->GetSubShapeID(), tgtUV.X(), tgtUV.Y() );
+            break;
+          }
+          case SMDS_TOP_EDGE:
+          {
+            const TopoDS_Edge& srcE = TopoDS::Edge( srcMeshDS->IndexToShape( srcNode->GetShapeID()));
+            const TopoDS_Edge& tgtE = TopoDS::Edge( shape2ShapeMap( srcE, /*isSrc=*/true ));
+            double srcU = srcHelper->GetNodeU( srcE, srcNode );
+            tgtMeshDS->SetNodeOnEdge( n, tgtE, srcU );
+            edgeHelper.SetSubShape( tgtE );
+            double tol = BRep_Tool::MaxTolerance( tgtE, TopAbs_VERTEX ), distXYZ[4];
+            /*isOk = */edgeHelper.CheckNodeU( tgtE, n, srcU, 2 * tol, /*force=*/true, distXYZ );
+            //if ( isOk )
+            tgtMeshDS->MoveNode( n, distXYZ[1], distXYZ[2], distXYZ[3] );
+            SMDS_EdgePositionPtr( n->GetPosition() )->SetUParameter( srcU );
+            break;
+          }
+          case SMDS_TOP_VERTEX:
+          {
+            const TopoDS_Shape & srcV = srcMeshDS->IndexToShape( srcNode->getshapeId() );
+            const TopoDS_Shape & tgtV = shape2ShapeMap( srcV, /*isSrc=*/true );
+            tgtP = BRep_Tool::Pnt( TopoDS::Vertex( tgtV ));
+            tgtMeshDS->MoveNode( n, tgtP.X(), tgtP.Y(), tgtP.Z() );
+            tgtMeshDS->SetNodeOnVertex( n, TopoDS::Vertex( tgtV ));
+            break;
+          }
+          default:;
+          }
+        }
+        tgtNodes[i] = srcN_tgtN->second;
+      }
+      // create a new face
+      helper->SetElementsOnShape( true );
+      switch ( nbN )
+      {
+      case 3: helper->AddFace(tgtNodes[0], tgtNodes[1], tgtNodes[2]); break;
+      case 4: helper->AddFace(tgtNodes[0], tgtNodes[1], tgtNodes[2], tgtNodes[3]); break;
+      default: helper->AddPolygonalFace( tgtNodes );
+      }
+    } //  // loop on all mesh faces on srcFace
+
+    return true;
+
+    // below is projection of a structured source mesh
 
-    // if ( srcWires[0]->NbEdges() != 4 )
-    //   return false;
     // if ( !is1DComputed )
     //   return false;
     // for ( int iE = 0; iE < 4; ++iE )
@@ -1052,7 +1429,7 @@ namespace {
     //   const SMDS_MeshElement* elem = elemIt->next();
     //   TFaceConn& tgtNodes = newFacesVec[ iFaceSrc++ ];
 
-    //   const int nbN = elem->NbCornerNodes(); 
+    //   const int nbN = elem->NbCornerNodes();
     //   tgtNodes.resize( nbN );
     //   for ( int i = 0; i < nbN; ++i ) // loop on nodes of the source element
     //   {
@@ -1066,7 +1443,7 @@ namespace {
     //       {
     //         tgtNodeOrXY.first = srcN_tgtN->second; // tgt node exists
     //       }
-    //       else 
+    //       else
     //       {
     //         // find XY of src node within the quadrilateral srcFace
     //         if ( !block.ComputeParameters( SMESH_TNodeXYZ( srcNode ),
@@ -1203,7 +1580,7 @@ namespace {
          tgtNbEW.front() != 4 || srcNbEW.front() != 4 )
       return; // not quads
 
-    int srcNbSeg[4];
+    smIdType srcNbSeg[4];
     list< TopoDS_Edge >::iterator edgeS = srcEdges.begin(), edgeT = tgtEdges.begin();
     for ( int i = 0; edgeS != srcEdges.end(); ++i, ++edgeS )
       if ( SMESHDS_SubMesh* sm = srcMesh->GetMeshDS()->MeshElements( *edgeS ))
@@ -1224,6 +1601,423 @@ namespace {
                                    tgtHelper.IthVertex( 1,*edgeS ), assocMap );
   }
 
+  //================================================================================
+  /*!
+   * \brief Find sub-shape association such that corresponding VERTEXes of
+   *        two corresponding FACEs lie on lines parallel to thePiercingLine
+   */
+  //================================================================================
+
+  bool findSubShapeAssociationByPiercing( const TopoDS_Face&          theTgtFace,
+                                          SMESH_Mesh *                /*theTgtMesh*/,
+                                          const TopoDS_Shape&         theSrcShape,
+                                          SMESH_Mesh*                 theSrcMesh,
+                                          TAssocTool::TShapeShapeMap& theShape2ShapeMap,
+                                          Handle(Geom_Line) &         thePiercingLine )
+  {
+    list< TopoDS_Edge > tgtEdges, srcEdges;
+    list< int > tgtNbEW, srcNbEW;
+    int tgtNbW = SMESH_Block::GetOrderedEdges( TopoDS::Face( theTgtFace ), tgtEdges, tgtNbEW );
+
+    TopTools_IndexedMapOfShape tgtVV, srcVV;
+    for ( const TopoDS_Edge& tgtEdge : tgtEdges )
+      tgtVV.Add( SMESH_MesherHelper::IthVertex( 0, tgtEdge ));
+    // if ( tgtVV.Size() < 2 )
+    //   return false;
+
+    const int       nbVV = tgtVV.Size();
+    const gp_Pnt   tgtP0 = BRep_Tool::Pnt( TopoDS::Vertex( tgtVV( 1 )));
+    double minVertexDist = Precision::Infinite(), assocTol;
+    gp_Lin      piercingLine;
+    TopoDS_Face assocSrcFace;
+    double      tol;
+
+    for ( TopExp_Explorer faceExp( theSrcShape, TopAbs_FACE ); faceExp.More(); faceExp.Next())
+    {
+      const TopoDS_Face& srcFace = TopoDS::Face( faceExp.Current() );
+
+      int srcNbW = SMESH_Block::GetOrderedEdges( srcFace, srcEdges, srcNbEW );
+      if ( tgtNbW != srcNbW )
+        continue;
+
+      srcVV.Clear( false );
+      for ( const TopoDS_Edge& srcEdge : srcEdges )
+        srcVV.Add( SMESH_MesherHelper::IthVertex( 0, srcEdge ));
+      if ( srcVV.Extent() != tgtVV.Extent() )
+        continue;
+
+      // make srcFace computed
+      SMESH_subMesh* srcFaceSM = theSrcMesh->GetSubMesh( srcFace );
+      if ( !TAssocTool::MakeComputed( srcFaceSM ))
+        continue;
+
+      // compute tolerance
+      double sumLen = 0, nbEdges = 0;
+      for ( const TopoDS_Edge& srcEdge : srcEdges )
+      {
+        SMESH_subMesh* srcSM = theSrcMesh->GetSubMesh( srcEdge );
+        if ( !srcSM->GetSubMeshDS() )
+          continue;
+        SMDS_ElemIteratorPtr edgeIt = srcSM->GetSubMeshDS()->GetElements();
+        while ( edgeIt->more() )
+        {
+          const SMDS_MeshElement* edge = edgeIt->next();
+          sumLen += SMESH_NodeXYZ( edge->GetNode( 0 )).Distance( edge->GetNode( 1 ));
+          nbEdges += 1;
+        }
+      }
+      if ( nbEdges == 0 )
+        continue;
+
+      tol = 0.1 * sumLen / nbEdges;
+
+      // try to find corresponding VERTEXes
+
+      gp_Lin line;
+      double vertexDist;
+      for ( int iSrcV0 = 1; iSrcV0 <= srcVV.Size(); ++iSrcV0 )
+      {
+        const gp_Pnt srcP0 = BRep_Tool::Pnt( TopoDS::Vertex( srcVV( iSrcV0 )));
+        try {
+          line.SetDirection( gp_Vec( srcP0, tgtP0 ));
+        }
+        catch (...) {
+          continue;
+        }
+        bool correspond;
+        for ( int iDir : { -1, 1 }) // move connected VERTEX forward and backward
+        {
+          correspond = true;
+          vertexDist = 0;
+          int iTgtV = 0, iSrcV = iSrcV0 - 1;
+          for ( int i = 1; i < tgtVV.Size() &&   correspond; ++i )
+          {
+            iTgtV = ( iTgtV + 1           ) % nbVV;
+            iSrcV = ( iSrcV + iDir + nbVV ) % nbVV;
+            gp_Pnt tgtP = BRep_Tool::Pnt( TopoDS::Vertex( tgtVV( iTgtV + 1 )));
+            gp_Pnt srcP = BRep_Tool::Pnt( TopoDS::Vertex( srcVV( iSrcV + 1 )));
+            line.SetLocation( tgtP );
+            correspond = ( line.SquareDistance( srcP ) < tol * tol );
+            vertexDist += tgtP.SquareDistance( srcP );
+          }
+          if ( correspond )
+            break;
+        }
+        if ( correspond )
+        {
+          if ( vertexDist < minVertexDist )
+          {
+            minVertexDist = vertexDist;
+            piercingLine    = line;
+            assocSrcFace  = srcFace;
+            assocTol      = tol;
+          }
+          break;
+        }
+      }
+      continue;
+
+    } // loop on src FACEs
+
+    if ( Precision::IsInfinite( minVertexDist ))
+      return false; // no correspondence found
+
+    thePiercingLine = new Geom_Line( piercingLine );
+
+    // fill theShape2ShapeMap
+
+    TAssocTool::InsertAssociation( theTgtFace, assocSrcFace, theShape2ShapeMap );
+
+    for ( const TopoDS_Shape& tgtV : tgtVV ) // fill theShape2ShapeMap with VERTEXes
+    {
+      gp_Pnt tgtP = BRep_Tool::Pnt( TopoDS::Vertex( tgtV ));
+      piercingLine.SetLocation( tgtP );
+      bool found = false;
+      for ( const TopoDS_Shape& srcV : srcVV )
+      {
+        gp_Pnt srcP = BRep_Tool::Pnt( TopoDS::Vertex( srcV ));
+        if ( piercingLine.SquareDistance( srcP ) < assocTol * assocTol )
+        {
+          TAssocTool::InsertAssociation( tgtV, srcV, theShape2ShapeMap );
+          found = true;
+          break;
+        }
+      }
+      if ( !found )
+        return false;
+    }
+
+    TopoDS_Vertex vvT[2], vvS[2], vvMapped[2];
+    for ( const TopoDS_Edge& tgtEdge : tgtEdges ) // fill theShape2ShapeMap with EDGEs
+    {
+      if ( SMESH_Algo::isDegenerated( tgtEdge ))
+        continue;
+
+      TopExp::Vertices( tgtEdge, vvT[0], vvT[1], true );
+      if ( !theShape2ShapeMap.IsBound( vvT[0] ) ||
+           !theShape2ShapeMap.IsBound( vvT[1] ))
+        return false;
+
+      vvMapped[0] = TopoDS::Vertex( theShape2ShapeMap( vvT[0] ));
+      vvMapped[1] = TopoDS::Vertex( theShape2ShapeMap( vvT[1] ));
+
+      bool found = false;
+      for ( TopExp_Explorer eExp( assocSrcFace, TopAbs_EDGE ); eExp.More(); eExp.Next())
+      {
+        TopoDS_Edge srcEdge = TopoDS::Edge( eExp.Current() );
+        TopExp::Vertices( srcEdge, vvS[0], vvS[1], true );
+        found = (( vvMapped[0].IsSame( vvS[0] ) && vvMapped[1].IsSame( vvS[1] )) ||
+                 ( vvMapped[0].IsSame( vvS[1] ) && vvMapped[1].IsSame( vvS[0] )));
+
+        if ( found && nbVV < 3 )
+        {
+          BRepAdaptor_Curve tgtCurve( tgtEdge );
+          gp_Pnt tgtP = tgtCurve.Value( 0.5 * ( tgtCurve.FirstParameter() +
+                                                tgtCurve.LastParameter() ));
+          thePiercingLine->SetLocation( tgtP );
+
+          double f,l;
+          Handle(Geom_Curve) srcCurve = BRep_Tool::Curve( srcEdge, f,l );
+          if ( srcCurve.IsNull() )
+          {
+            found = false;
+            continue;
+          }
+          GeomAPI_ExtremaCurveCurve extrema( thePiercingLine, srcCurve );
+          if ( !extrema.Extrema().IsDone() ||
+               extrema.Extrema().IsParallel() ||
+               extrema.NbExtrema() == 0 ||
+               extrema.LowerDistance() > tol )
+            found = false;
+        }
+        if ( found )
+        {
+          if ( !vvMapped[0].IsSame( vvS[0] ))
+            srcEdge.Reverse();
+          TAssocTool::InsertAssociation( tgtEdge, srcEdge, theShape2ShapeMap );
+          break;
+        }
+      }
+      if ( !found )
+        return false;
+    }
+
+    return true;
+
+  } // findSubShapeAssociationByPiercing()
+
+    //================================================================================
+  /*!
+   * \brief Project by piercing theTgtFace by lines parallel to thePiercingLine
+   */
+  //================================================================================
+
+  bool projectByPiercing(Handle(Geom_Line)                  thePiercingLine,
+                         const TopoDS_Face&                 theTgtFace,
+                         const TopoDS_Face&                 theSrcFace,
+                         const TSideVector&                 theTgtWires,
+                         const TSideVector&                 theSrcWires,
+                         const TAssocTool::TShapeShapeMap&  theShape2ShapeMap,
+                         TAssocTool::TNodeNodeMap&          theSrc2tgtNodes,
+                         const bool                         theIs1DComputed)
+  {
+    SMESH_Mesh * tgtMesh = theTgtWires[0]->GetMesh();
+    SMESH_Mesh * srcMesh = theSrcWires[0]->GetMesh();
+
+    if ( thePiercingLine.IsNull() )
+    {
+      // try to set thePiercingLine by VERTEX association of theShape2ShapeMap
+
+      const double tol = 0.1 * theSrcWires[0]->Length() / theSrcWires[0]->NbSegments();
+
+      for ( TopExp_Explorer vExp( theTgtFace, TopAbs_VERTEX ); vExp.More(); vExp.Next() )
+      {
+        const TopoDS_Vertex & tgtV = TopoDS::Vertex( vExp.Current() );
+        const TopoDS_Vertex & srcV = TopoDS::Vertex( theShape2ShapeMap( tgtV ));
+        gp_Pnt tgtP = BRep_Tool::Pnt( tgtV );
+        gp_Pnt srcP = BRep_Tool::Pnt( srcV );
+        if ( thePiercingLine.IsNull() ) // set thePiercingLine
+        {
+          gp_Lin line;
+          try {
+            line.SetDirection( gp_Vec( srcP, tgtP ));
+            line.SetLocation( tgtP );
+            thePiercingLine = new Geom_Line( line );
+          }
+          catch ( ... )
+          {
+            continue;
+          }
+        }
+        else // check thePiercingLine
+        {
+          thePiercingLine->SetLocation( tgtP );
+          if ( thePiercingLine->Lin().SquareDistance( srcP ) > tol * tol )
+            return false;
+        }
+      }
+
+      for ( TopExp_Explorer eExp( theTgtFace, TopAbs_EDGE ); eExp.More(); eExp.Next() )
+      {
+        BRepAdaptor_Curve tgtCurve( TopoDS::Edge( eExp.Current() ));
+        gp_Pnt tgtP = tgtCurve.Value( 0.5 * ( tgtCurve.FirstParameter() +
+                                              tgtCurve.LastParameter() ));
+        thePiercingLine->SetLocation( tgtP );
+
+        double f,l;
+        TopoDS_Edge srcEdge = TopoDS::Edge( theShape2ShapeMap( eExp.Current() ));
+        Handle(Geom_Curve) srcCurve = BRep_Tool::Curve( srcEdge, f,l );
+        if ( srcCurve.IsNull() )
+          continue;
+        GeomAPI_ExtremaCurveCurve extrema( thePiercingLine, srcCurve,
+                                           -Precision::Infinite(), Precision::Infinite(), f, l );
+        if ( !extrema.Extrema().IsDone() ||
+             extrema.Extrema().IsParallel() ||
+             extrema.NbExtrema() == 0 ||
+             extrema.LowerDistance() > tol )
+          return false;
+      }
+    } // if ( thePiercingLine.IsNull() )
+
+    SMESHDS_SubMesh* srcSubDS = srcMesh->GetMeshDS()->MeshElements( theSrcFace );
+
+    SMESH_MesherHelper* helper = theTgtWires[0]->FaceHelper();
+    if ( theIs1DComputed )
+      helper->IsQuadraticSubMesh( theTgtFace );
+    else
+      helper->SetIsQuadratic( srcSubDS->GetElements()->next()->IsQuadratic() );
+    helper->SetElementsOnShape( true );
+    SMESHDS_Mesh* tgtMeshDS = tgtMesh->GetMeshDS();
+
+    Handle(Geom_Surface)             tgtSurface = BRep_Tool::Surface( theTgtFace );
+#if OCC_VERSION_LARGE < 0x07070000
+    Handle(GeomAdaptor_HSurface) tgtSurfAdaptor = new GeomAdaptor_HSurface( tgtSurface );
+    Handle(GeomAdaptor_HCurve)    piercingCurve = new GeomAdaptor_HCurve( thePiercingLine );
+#else
+    Handle(GeomAdaptor_Surface) tgtSurfAdaptor = new GeomAdaptor_Surface( tgtSurface );
+    Handle(GeomAdaptor_Curve)    piercingCurve = new GeomAdaptor_Curve( thePiercingLine );
+#endif
+    IntCurveSurface_HInter intersect;
+
+    SMESH_MesherHelper* srcHelper = theSrcWires[0]->FaceHelper();
+
+    const SMDS_MeshNode* nullNode = 0;
+    TAssocTool::TNodeNodeMap::iterator srcN_tgtN;
+    vector< const SMDS_MeshNode* > tgtNodes;
+
+    SMDS_ElemIteratorPtr elemIt = srcSubDS->GetElements();
+    while ( elemIt->more() ) // loop on all mesh faces on srcFace
+    {
+      const SMDS_MeshElement* elem = elemIt->next();
+      const int nbN = elem->NbCornerNodes();
+      tgtNodes.resize( nbN );
+      for ( int i = 0; i < nbN; ++i ) // loop on nodes of the source element
+      {
+        const SMDS_MeshNode* srcNode = elem->GetNode(i);
+        srcN_tgtN = theSrc2tgtNodes.insert( make_pair( srcNode, nullNode )).first;
+        if ( srcN_tgtN->second == nullNode )
+        {
+          // create a new node
+          thePiercingLine->SetLocation( SMESH_NodeXYZ( srcNode ));
+          intersect.Perform( piercingCurve, tgtSurfAdaptor );
+          bool pierced = ( intersect.IsDone() && intersect.NbPoints() > 0 );
+          double U, V;
+          const SMDS_MeshNode* n = nullNode;
+          if ( pierced )
+          {
+            double W, minW = Precision::Infinite();
+            gp_Pnt tgtP;
+            for ( int iInt = 1; iInt <= intersect.NbPoints(); ++iInt )
+            {
+              W = intersect.Point( iInt ).W();
+              if ( 0 < W && W < minW )
+              {
+                U    = intersect.Point( iInt ).U();
+                V    = intersect.Point( iInt ).V();
+                tgtP = intersect.Point( iInt ).Pnt();
+                minW = W;
+              }
+            }
+            n = tgtMeshDS->AddNode( tgtP.X(), tgtP.Y(), tgtP.Z() );
+          }
+
+          SMDS_TypeOfPosition shapeType = srcNode->GetPosition()->GetTypeOfPosition();
+          TopoDS_Shape        srcShape;
+          if ( shapeType != SMDS_TOP_FACE )
+          {
+            srcShape = srcHelper->GetSubShapeByNode( srcNode, srcHelper->GetMeshDS() );
+            if ( !theShape2ShapeMap.IsBound( srcShape, /*isSrc=*/true ))
+            {
+              if ( n )  // INTERNAL shape w/o corresponding target shape (3D_mesh_Extrusion_02/E0)
+                shapeType = SMDS_TOP_FACE;
+              else
+                return false;
+            }
+          }
+
+          switch ( shapeType )
+          {
+          case SMDS_TOP_FACE: {
+            if ( !n )
+              return false;
+            tgtMeshDS->SetNodeOnFace( n, helper->GetSubShapeID(), U, V );
+            break;
+          }
+          case SMDS_TOP_EDGE: {
+            TopoDS_Edge  tgtEdge = TopoDS::Edge( theShape2ShapeMap( srcShape, /*isSrc=*/true ));
+            if ( n )
+            {
+              U = Precision::Infinite();
+              helper->CheckNodeU( tgtEdge, n, U, Precision::PConfusion());
+            }
+            else
+            {
+              Handle(Geom_Curve) tgtCurve = BRep_Tool::Curve( tgtEdge, U,V );
+              if ( tgtCurve.IsNull() )
+                return false;
+              GeomAPI_ExtremaCurveCurve extrema( thePiercingLine, tgtCurve );
+              if ( !extrema.Extrema().IsDone() ||
+                   extrema.Extrema().IsParallel() ||
+                   extrema.NbExtrema() == 0 )
+                return false;
+              gp_Pnt pOnLine, pOnEdge;
+              extrema.NearestPoints( pOnLine, pOnEdge );
+              extrema.LowerDistanceParameters( V, U );
+              n = tgtMeshDS->AddNode( pOnEdge.X(), pOnEdge.Y(), pOnEdge.Z() );
+            }
+            tgtMeshDS->SetNodeOnEdge( n, tgtEdge, U );
+            break;
+          }
+          case SMDS_TOP_VERTEX: {
+            TopoDS_Shape tgtV = theShape2ShapeMap( srcShape, /*isSrc=*/true );
+            if ( !n )
+            {
+              gp_Pnt tgtP = BRep_Tool::Pnt( TopoDS::Vertex( tgtV ));
+              n = tgtMeshDS->AddNode( tgtP.X(), tgtP.Y(), tgtP.Z() );
+            }
+            tgtMeshDS->SetNodeOnVertex( n, TopoDS::Vertex( tgtV ));
+            break;
+          }
+          default:;
+          }
+          srcN_tgtN->second = n;
+        }
+        tgtNodes[i] = srcN_tgtN->second;
+      }
+      // create a new face (with reversed orientation)
+      switch ( nbN )
+      {
+      case 3: helper->AddFace(tgtNodes[0], tgtNodes[2], tgtNodes[1]); break;
+      case 4: helper->AddFace(tgtNodes[0], tgtNodes[3], tgtNodes[2], tgtNodes[1]); break;
+      }
+    }  // loop on all mesh faces on srcFace
+
+    return true;
+
+  } // projectByPiercing()
+
+
+
 } // namespace
 
 
@@ -1260,20 +2054,29 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape&
   TAssocTool::InitVertexAssociation( _sourceHypo, shape2ShapeMap );
   if ( shape2ShapeMap.IsEmpty() )
     initAssoc4Quad2Closed( tgtFace, helper, srcShape, srcMesh, shape2ShapeMap );
+
+  Handle(Geom_Line) piercingLine;
+  bool piercingTried = false;
+
   if ( !TAssocTool::FindSubShapeAssociation( tgtFace, tgtMesh, srcShape, srcMesh,
                                              shape2ShapeMap)  ||
        !shape2ShapeMap.IsBound( tgtFace ))
   {
-    if ( srcShape.ShapeType() == TopAbs_FACE )
+    piercingTried = true;
+    if ( !findSubShapeAssociationByPiercing( tgtFace, tgtMesh, srcShape, srcMesh,
+                                             shape2ShapeMap, piercingLine ))
     {
-      int nbE1 = helper.Count( tgtFace, TopAbs_EDGE, /*ignoreSame=*/true );
-      int nbE2 = helper.Count( srcShape, TopAbs_EDGE, /*ignoreSame=*/true );
-      if ( nbE1 != nbE2 )
-        return error(COMPERR_BAD_SHAPE,
-                     SMESH_Comment("Different number of edges in source and target faces: ")
-                     << nbE2 << " and " << nbE1 );
+      if ( srcShape.ShapeType() == TopAbs_FACE )
+      {
+        int nbE1 = helper.Count( tgtFace, TopAbs_EDGE, /*ignoreSame=*/true );
+        int nbE2 = helper.Count( srcShape, TopAbs_EDGE, /*ignoreSame=*/true );
+        if ( nbE1 != nbE2 )
+          return error(COMPERR_BAD_SHAPE,
+                       SMESH_Comment("Different number of edges in source and target faces: ")
+                       << nbE2 << " and " << nbE1 );
+      }
+      return error(COMPERR_BAD_SHAPE,"Topology of source and target faces seems different" );
     }
-    return error(COMPERR_BAD_SHAPE,"Topology of source and target faces seems different" );
   }
   TopoDS_Face srcFace = TopoDS::Face( shape2ShapeMap( tgtFace ).Oriented(TopAbs_FORWARD));
 
@@ -1310,6 +2113,13 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape&
 
   bool projDone = false;
 
+  if ( !projDone && !piercingLine.IsNull() )
+  {
+    // project by piercing tgtFace by lines parallel to piercingLine
+    projDone = projectByPiercing( piercingLine, tgtFace, srcFace, tgtWires, srcWires,
+                                  shape2ShapeMap, _src2tgtNodes, is1DComputed );
+    piercingTried = true;
+  }
   if ( !projDone )
   {
     // try to project from the same face with different location
@@ -1325,10 +2135,15 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape&
   if ( !projDone )
   {
     // projection in case of quadrilateral faces
-    // NOT IMPLEMENTED, returns false
     projDone = projectQuads( tgtFace, srcFace, tgtWires, srcWires,
                              shape2ShapeMap, _src2tgtNodes, is1DComputed);
   }
+  if ( !projDone && !piercingTried )
+  {
+    // project by piercing tgtFace by lines parallel to piercingLine
+    projDone = projectByPiercing( piercingLine, tgtFace, srcFace, tgtWires, srcWires,
+                                  shape2ShapeMap, _src2tgtNodes, is1DComputed );
+  }
 
   // it will remove mesh built on edges and vertices in failure case
   MeshCleaner cleaner( tgtSubMesh );
@@ -1337,7 +2152,7 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape&
   {
     _src2tgtNodes.clear();
     // --------------------
-    // Prepare to mapping 
+    // Prepare to mapping
     // --------------------
 
     // Check if node projection to a face is needed
@@ -1444,7 +2259,7 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape&
           // compare nb nodes on srcEdge1 and srcEdge2
           if ( srcEdge2 != srcEdges.end() )
           {
-            int nbN1 = 0, nbN2 = 0;
+            smIdType nbN1 = 0, nbN2 = 0;
             if ( SMESHDS_SubMesh* sm = srcMesh->GetMeshDS()->MeshElements( srcEdge1 ))
               nbN1 = sm->NbNodes();
             if ( SMESHDS_SubMesh* sm = srcMesh->GetMeshDS()->MeshElements( *srcEdge2 ))
@@ -1607,7 +2422,7 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape&
         if ( u2nodesMaps[ NEW_NODES ].size() > 0 &&
              u2nodesMaps[ OLD_NODES ].size() > 0 )
         {
-          u_oldNode = u2nodesMaps[ OLD_NODES ].begin(); 
+          u_oldNode = u2nodesMaps[ OLD_NODES ].begin();
           newEnd    = u2nodesMaps[ OLD_NODES ].end();
           for ( ; u_oldNode != newEnd; ++u_oldNode )
             SMESH_Algo::addBadInputElement( u_oldNode->second );
@@ -1640,7 +2455,7 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape&
 
       // Make groups of nodes to merge
 
-      u_oldNode = u2nodesMaps[ OLD_NODES ].begin(); 
+      u_oldNode = u2nodesMaps[ OLD_NODES ].begin();
       u_newNode = u2nodesMaps[ NEW_NODES ].begin();
       newEnd    = u2nodesMaps[ NEW_NODES ].end();
       u_newOnSeam = u2nodesOnSeam.begin();
@@ -1666,9 +2481,9 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape&
     // Merge
 
     SMESH_MeshEditor editor( tgtMesh );
-    int nbFaceBeforeMerge = tgtSubMesh->GetSubMeshDS()->NbElements();
+    smIdType nbFaceBeforeMerge = tgtSubMesh->GetSubMeshDS()->NbElements();
     editor.MergeNodes( groupsOfNodes );
-    int nbFaceAtferMerge = tgtSubMesh->GetSubMeshDS()->NbElements();
+    smIdType nbFaceAtferMerge = tgtSubMesh->GetSubMeshDS()->NbElements();
     if ( nbFaceBeforeMerge != nbFaceAtferMerge && !helper.HasDegeneratedEdges() )
       return error(COMPERR_BAD_INPUT_MESH, "Probably invalid node parameters on geom faces");
 
@@ -1704,8 +2519,10 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape&
       TAssocTool::Morph morph( srcWires );
       morph.Perform( helper, tgtWires, helper.GetSurface( tgtFace ),
                      _src2tgtNodes, /*moveAll=*/true );
+      if(SALOME::VerbosityActivated())
+        cout << "StdMeshers_Projection_2D: Projection mesh IsDistorted2D() ==> do morph" << endl;
 
-      if ( !fixDistortedFaces( helper, tgtWires ))
+      if ( !fixDistortedFaces( helper, tgtWires )) // smooth and check
         return error("Invalid mesh generated");
     }
   // ---------------------------
@@ -1761,7 +2578,7 @@ bool StdMeshers_Projection_2D::Compute(SMESH_Mesh& theMesh, const TopoDS_Shape&
 
 //=======================================================================
 //function : Evaluate
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 bool StdMeshers_Projection_2D::Evaluate(SMESH_Mesh&         theMesh,
@@ -1796,7 +2613,7 @@ bool StdMeshers_Projection_2D::Evaluate(SMESH_Mesh&         theMesh,
   // Assure that mesh on a source Face is computed/evaluated
   // -------------------------------------------------------
 
-  std::vector<int> aVec;
+  std::vector<smIdType> aVec;
 
   SMESH_subMesh* srcSubMesh = srcMesh->GetSubMesh( srcFace );
   if ( srcSubMesh->IsMeshComputed() )
index 843c13691ba2bf96546dc4609a932e15973a45f4..a73f64ae16e46150d6c56aac73dde6c9de03cdfc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 7ba244c2b69116f4f55803f918db2beb51f55878..5c6e5d01492c890e9b36f7cee05962cdea51c2f6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -475,7 +475,7 @@ bool StdMeshers_Projection_3D::Evaluate(SMESH_Mesh& aMesh,
     return error(COMPERR_BAD_INPUT_MESH,"Source mesh not computed");
 
 
-  std::vector<int> aVec(SMDSEntity_Last);
+  std::vector<smIdType> aVec(SMDSEntity_Last);
   for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aVec[i] = 0;
 
   aVec[SMDSEntity_Node] = srcSubMesh->GetSubMeshDS()->NbNodes();
index 3e22969b5ac09b9f2d1d57639e2ad70978700d67..b1c6a422eee7f066f6e416b7ec048a997cc858c5 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 3ecd623b17edf92679503df8ec7be26787a741ba..d8fc7522cfbed7a655c08ea49c66ace651168447 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 10ea89b5a09fbd3b614e3121c36accf106e85ed8..1d9c2632be2e47b166b5b9f9be259580deb33672 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index fe4fc5c35f83264a68efb7f35aced4896579778b..88f79d159bac305c7872ba678f7b5f6a4d3e547c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -30,6 +30,7 @@
 #include "SMESH_Gen.hxx"
 #include "SMESH_MAT2d.hxx"
 #include "SMESH_Mesh.hxx"
+#include "SMESH_SequentialMesh.hxx"
 #include "SMESH_MeshEditor.hxx"
 #include "SMESH_MesherHelper.hxx"
 #include "SMESH_ProxyMesh.hxx"
@@ -144,7 +145,7 @@ public:
     return true;
   }
 };
+
 //================================================================================
 /*!
  * \brief Constructor sets algo features
@@ -203,7 +204,7 @@ bool StdMeshers_QuadFromMedialAxis_1D2D::CheckHypothesis(SMESH_Mesh&         aMe
 namespace
 {
   typedef map< const SMDS_MeshNode*, list< const SMDS_MeshNode* > > TMergeMap;
-  
+
   //================================================================================
   /*!
    * \brief Sinuous face
@@ -236,11 +237,11 @@ namespace
   /*!
    * \brief Temporary mesh
    */
-  struct TmpMesh : public SMESH_Mesh
+  struct TmpMesh : public SMESH_SequentialMesh
   {
     TmpMesh()
     {
-      _myMeshDS = new SMESHDS_Mesh(/*id=*/0, /*isEmbeddedMode=*/true);
+      _meshDS = new SMESHDS_Mesh(/*id=*/0, /*isEmbeddedMode=*/true);
     }
   };
 
@@ -506,7 +507,7 @@ namespace
     theSinuEdges[1].clear();
     theShortEdges[0].clear();
     theShortEdges[1].clear();
-   
+
     vector<TopoDS_Edge> & allEdges = theSinuFace._edges;
     const size_t nbEdges = allEdges.size();
     if ( nbEdges < 4 && theSinuFace._nbWires == 1 )
@@ -841,7 +842,7 @@ namespace
 
 
     // Find 1D algo to mesh branchEdge
-  
+
     // look for a most local 1D hyp assigned to the FACE
     int mostSimpleShape = -1, maxShape = TopAbs_EDGE;
     TopoDS_Edge edge;
@@ -1185,6 +1186,8 @@ namespace
         if ( !npCloseV._node || npCloseV._node == npVert._node )
         {
           npProj = npCloseN;
+          if ( i+1 < projToMerge.size() && u2NPClose == projToMerge[ i+1 ])
+            ++i;
           thePointsOnE.erase( u2NPClose );
           continue;
         }
@@ -1448,7 +1451,7 @@ namespace
       nIn = nodeParams.rbegin()->second;
     else
       nIn = u2n->second;
-    
+
     // find position of distant nodes in uvsOut and uvsIn
     size_t iDistOut, iDistIn;
     for ( iDistOut = 0; iDistOut < uvsOut.size(); ++iDistOut )
@@ -1720,8 +1723,8 @@ namespace
         if ( isComputed[ edgeIDs1[i]] &&
              isComputed[ edgeIDs2[i]] )
         {
-          int nbNodes1 = meshDS->MeshElements(edgeIDs[ edgeIDs1[i]] )->NbNodes();
-          int nbNodes2 = meshDS->MeshElements(edgeIDs[ edgeIDs2[i]] )->NbNodes();
+          smIdType nbNodes1 = meshDS->MeshElements(edgeIDs[ edgeIDs1[i]] )->NbNodes();
+          smIdType nbNodes2 = meshDS->MeshElements(edgeIDs[ edgeIDs2[i]] )->NbNodes();
           if ( nbNodes1 != nbNodes2 )
             return false;
           if (( int(i)-1 >= 0 ) &&
@@ -2149,6 +2152,7 @@ bool StdMeshers_QuadFromMedialAxis_1D2D::computeQuads( SMESH_MesherHelper& theHe
 bool StdMeshers_QuadFromMedialAxis_1D2D::Compute(SMESH_Mesh&         theMesh,
                                                  const TopoDS_Shape& theShape)
 {
+  std::cout << "helper_quad " << theMesh.IsParallel() << std::endl;
   SMESH_MesherHelper helper( theMesh );
   helper.SetSubShape( theShape );
 
index 6fea7bdcac13160a7888716445bf78c70feb09b3..6141a186f5798776f8dd4dde8f444a514294f4e9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 7eb798d0de3f6de77c941f579cf9bd77217d16d8..dd9db00fb92acac885cb3ae43701c23b208257e3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -26,6 +26,7 @@
 
 #include "SMDS_IteratorOnIterators.hxx"
 #include "SMDS_SetIterator.hxx"
+#include "SMDS_VolumeTool.hxx"
 #include "SMESHDS_GroupBase.hxx"
 #include "SMESHDS_Mesh.hxx"
 #include "SMESH_Algo.hxx"
@@ -59,6 +60,23 @@ enum EQuadNature { NOT_QUAD, QUAD, DEGEN_QUAD, PYRAM_APEX = 4, TRIA_APEX = 0 };
 // std-like iterator used to get coordinates of nodes of mesh element
 typedef SMDS_StdIterator< SMESH_TNodeXYZ, SMDS_ElemIteratorPtr > TXyzIterator;
 
+//================================================================================
+/*!
+ * \brief Return ID of pyramid base face, for debug
+ */
+//================================================================================
+
+int getFaceID(const SMDS_MeshElement* pyram)
+{
+  if ( pyram )
+    if ( const SMDS_MeshElement* f = SMDS_Mesh::FindFace( pyram->GetNode(0),
+                                                          pyram->GetNode(1),
+                                                          pyram->GetNode(2),
+                                                          pyram->GetNode(3)))
+      return f->GetID();
+  return -1;
+}
+
 namespace
 {
   //================================================================================
@@ -350,8 +368,6 @@ void StdMeshers_QuadToTriaAdaptor::MergePiramids( const SMDS_MeshElement*     Pr
                                                   const SMDS_MeshElement*     PrmJ,
                                                   set<const SMDS_MeshNode*> & nodesToMove)
 {
-  // cout << endl << "Merge " << PrmI->GetID() << " " << PrmJ->GetID() << " "
-  //      << PrmI->GetNode(4)->GetID() << " " << PrmJ->GetNode(4)->GetID() << endl;
   const SMDS_MeshNode* Nrem = PrmJ->GetNode(4); // node to remove
   //int nbJ = Nrem->NbInverseElements( SMDSAbs_Volume );
   SMESH_TNodeXYZ Pj( Nrem );
@@ -361,12 +377,51 @@ void StdMeshers_QuadToTriaAdaptor::MergePiramids( const SMDS_MeshElement*     Pr
   if ( CommonNode == Nrem ) return; // already merged
   //int nbI = CommonNode->NbInverseElements( SMDSAbs_Volume );
   SMESH_TNodeXYZ Pi( CommonNode );
-  gp_XYZ Pnew = /*( nbI*Pi + nbJ*Pj ) / (nbI+nbJ);*/ 0.5 * ( Pi + Pj );
+  // gp_XYZ Pnew = /*( nbI*Pi + nbJ*Pj ) / (nbI+nbJ);*/ 0.5 * ( Pi + Pj );
+  
+  SMDS_VolumeTool volumeTool;
+  double pyrad1Vol = 0.0; 
+  double pyrad2Vol = 0.0;
+  // To get the pyramids vols
+  if ( volumeTool.Set( PrmI ) )
+    pyrad1Vol = volumeTool.GetSize();
+  if ( volumeTool.Set( PrmJ ) )
+    pyrad2Vol = volumeTool.GetSize();
+
+  typedef SMDS_StdIterator< const SMDS_MeshElement*, SMDS_ElemIteratorPtr > elemIterator;
+  elemIterator iteratorsEnd;
+
+  vector< const SMDS_MeshElement* > associatedElementsI ( elemIterator( CommonNode->GetInverseElementIterator(SMDSAbs_Volume)), iteratorsEnd);
+  if ( associatedElementsI.size() > 1 )
+    for ( size_t i = 0; i < associatedElementsI.size(); ++i )
+    {
+      const SMDS_MeshElement* element = associatedElementsI[i];
+      if ( element != PrmI && volumeTool.Set( element ) )
+        pyrad1Vol += volumeTool.GetSize();    
+    }  
+  vector< const SMDS_MeshElement* > associatedElementsJ ( elemIterator( Nrem->GetInverseElementIterator(SMDSAbs_Volume)), iteratorsEnd);
+  if ( associatedElementsJ.size() > 1 )
+    for ( size_t i = 0; i < associatedElementsJ.size(); ++i )
+    {
+      const SMDS_MeshElement* element = associatedElementsJ[i];
+      if ( element != PrmJ && volumeTool.Set( element )  )
+        pyrad2Vol += volumeTool.GetSize(); //associatedVolPyramid->GetSize();        
+   }
+
+  double totalVol = pyrad1Vol + pyrad2Vol;
+  // The new Apex can't be computed based in an arithmetic median, 
+  // Geometric mediam is considered to be better
+  // gp_XYZ Pnew = /*( nbI*Pi + nbJ*Pj ) / (nbI+nbJ);*/ 0.5 * ( Pi + Pj );
+  ASSERT( totalVol > 0. );
+  gp_XYZ Pnew = Pi * pyrad1Vol/totalVol + Pj * pyrad2Vol/totalVol;
+
   CommonNode->setXYZ( Pnew.X(), Pnew.Y(), Pnew.Z() );
 
   nodesToMove.insert( CommonNode );
   nodesToMove.erase ( Nrem );
 
+  //cout << "MergePiramids F" << getFaceID( PrmI ) << " - F" << getFaceID( PrmJ ) << endl;
+
   typedef SMDS_StdIterator< const SMDS_MeshElement*, SMDS_ElemIteratorPtr > TStdElemIterator;
   TStdElemIterator itEnd;
 
@@ -472,6 +527,61 @@ void StdMeshers_QuadToTriaAdaptor::MergeAdjacent(const SMDS_MeshElement*    PrmI
   return;
 }
 
+//================================================================================
+/*!
+ * \brief Decrease height of a given or adjacent pyramids if height difference
+ *        is too large
+ *  \param [in] pyram - a pyramid to treat
+ *  \param [inout] h2 - pyramid's square height
+ *  \return bool - true if the height changes
+ */
+//================================================================================
+
+bool StdMeshers_QuadToTriaAdaptor::DecreaseHeightDifference( const SMDS_MeshElement* thePyram,
+                                                             const double            theH2 )
+{
+  const double allowedFactor2 = 2. * 2.;
+
+  bool modif = false;
+  myNodes[0] = thePyram->GetNode( 3 );
+  for ( int i = 0; i < 4; ++i )
+  {
+    myNodes[1] = thePyram->GetNode( i );
+    SMDS_Mesh::GetElementsByNodes( myNodes, myAdjPyrams, SMDSAbs_Volume );
+    myNodes[0] = myNodes[1];
+
+    for ( const SMDS_MeshElement* pyramAdj : myAdjPyrams )
+    {
+      if ( pyramAdj == thePyram )
+        continue;
+      if ( !myPyramHeight2.IsBound( pyramAdj ))
+        continue;
+      double h2Adj = Abs( myPyramHeight2( pyramAdj ));
+      double h2    = Abs( theH2 );
+      if ( h2Adj > h2 )
+      {
+        if ( h2 * allowedFactor2 < h2Adj )
+        {
+          // bind negative value to allow finding pyramids whose height must change
+          myPyramHeight2.Bind( pyramAdj, - h2 * allowedFactor2 );
+          modif = true;
+        }
+      }
+      else
+      {
+        if ( h2Adj * allowedFactor2 < h2 )
+        {
+          // bind negative value to allow finding pyramids whose height must change
+          myPyramHeight2.Bind( thePyram, - h2Adj * allowedFactor2 );
+          modif = true;
+        }
+      }
+    }
+  }
+  return modif;
+}
+
+
 //================================================================================
 /*!
  * \brief Constructor
@@ -504,9 +614,11 @@ StdMeshers_QuadToTriaAdaptor::~StdMeshers_QuadToTriaAdaptor()
 //=======================================================================
 
 static gp_Pnt FindBestPoint(const gp_Pnt& P1, const gp_Pnt& P2,
-                            const gp_Pnt& PC, const gp_Vec& V)
+                            const gp_Pnt& PC, const gp_Vec& V,
+                            double & shift)
 {
   gp_Pnt Pbest = PC;
+  shift = 0;
   const double a2 = P1.SquareDistance(P2);
   const double b2 = P1.SquareDistance(PC);
   const double c2 = P2.SquareDistance(PC);
@@ -517,7 +629,7 @@ static gp_Pnt FindBestPoint(const gp_Pnt& P1, const gp_Pnt& P2,
     const double Vsize = V.Magnitude();
     if ( fabs( Vsize ) > std::numeric_limits<double>::min() )
     {
-      const double shift = sqrt( a2 + (b2-c2)*(b2-c2)/16/a2 - (b2+c2)/2 );
+      shift = sqrt( a2 + (b2-c2)*(b2-c2)/16/a2 - (b2+c2)/2 );
       Pbest.ChangeCoord() += shift * V.XYZ() / Vsize;
     }
   }
@@ -603,7 +715,7 @@ static bool HasIntersection3(const gp_Pnt& P,  const gp_Pnt& PC, gp_Pnt&       P
 
 //=======================================================================
 //function : HasIntersection
-//purpose  : Auxilare for CheckIntersection()
+//purpose  : Auxiliary for CheckIntersection()
 //=======================================================================
 
 static bool HasIntersection(const gp_Pnt& P, const gp_Pnt& PC, gp_Pnt& Pint,
@@ -991,19 +1103,23 @@ bool StdMeshers_QuadToTriaAdaptor::Compute(SMESH_Mesh&         aMesh,
         case QUAD:
           {
             if(!isRev) VNorm.Reverse();
-            double xc = 0., yc = 0., zc = 0.;
+            //double xc = 0., yc = 0., zc = 0.;
+            double h, hMin = Precision::Infinite();
+            gp_Pnt PCbest = PC;
             int i = 1;
             for(; i<=4; i++) {
               gp_Pnt Pbest;
               if(!isRev)
-                Pbest = FindBestPoint(PN(i), PN(i+1), PC, VN(i).Reversed());
+                Pbest = FindBestPoint(PN(i), PN(i+1), PC, VN(i).Reversed(), h);
               else
-                Pbest = FindBestPoint(PN(i), PN(i+1), PC, VN(i));
-              xc += Pbest.X();
-              yc += Pbest.Y();
-              zc += Pbest.Z();
+                Pbest = FindBestPoint(PN(i), PN(i+1), PC, VN(i), h);
+              if ( 0 < h && h < hMin )
+              {
+                PCbest = Pbest;
+                hMin = h;
+              }
             }
-            gp_Pnt PCbest(xc/4., yc/4., zc/4.);
+            //gp_Pnt PCbest(xc/4., yc/4., zc/4.);
 
             // check PCbest
             double height = PCbest.Distance(PC);
@@ -1027,6 +1143,9 @@ bool StdMeshers_QuadToTriaAdaptor::Compute(SMESH_Mesh&         aMesh,
             else
               aPyram = helper->AddVolume( FNodes[0], FNodes[1], FNodes[2], FNodes[3], NewNode );
             myPyramids.push_back(aPyram);
+            //cout << "F" << face->GetID() << " - V" << aPyram->GetID() << endl;
+
+            myPyramHeight2.Bind( aPyram, PCbest.SquareDistance( PC ));
 
             // add triangles to result map
             helper->SetElementsOnShape( false );
@@ -1236,13 +1355,19 @@ bool StdMeshers_QuadToTriaAdaptor::Compute(SMESH_Mesh& aMesh)
 
     // Find pyramid peak
 
-    gp_XYZ PCbest(0., 0., 0.); // pyramid peak
+    gp_XYZ PCbest = PC.XYZ();//(0., 0., 0.); // pyramid peak
+    double h, hMin = Precision::Infinite();
     int i = 1;
     for ( ; i <= 4; i++ ) {
-      gp_Pnt Pbest = FindBestPoint(PN(i), PN(i+1), PC, VN(i));
-      PCbest += Pbest.XYZ();
+      gp_Pnt Pbest = FindBestPoint(PN(i), PN(i+1), PC, VN(i), h);
+      if ( 0 < h && h < hMin )
+      {
+        PCbest = Pbest.XYZ();
+        h = hMin;
+      }
+      //PCbest += Pbest.XYZ();
     }
-    PCbest /= 4;
+    //PCbest /= 4;
 
     double height = PC.Distance(PCbest); // pyramid height to precise
     if ( height < 1.e-6 ) {
@@ -1354,6 +1479,8 @@ bool StdMeshers_QuadToTriaAdaptor::Compute(SMESH_Mesh& aMesh)
         aPyram = helper.AddVolume( FNodes[0], FNodes[3], FNodes[2], FNodes[1], NewNode );
       myPyramids.push_back(aPyram);
 
+      //myPyramHeight2.Bind( aPyram, Papex.SquareDistance( PC ));
+
       // add triangles to result map
       helper.SetElementsOnShape( false );
       for ( i = 0; i < 4; i++) {
@@ -1398,10 +1525,37 @@ bool StdMeshers_QuadToTriaAdaptor::Compute2ndPart(SMESH_Mesh&
 
   // check adjacent pyramids
 
-  for ( i = 0; i <  myPyramids.size(); ++i )
+  // for ( i = 0; i <  myPyramids.size(); ++i )
+  // {
+  //   const SMDS_MeshElement* PrmI = myPyramids[i];
+  //   MergeAdjacent( PrmI, nodesToMove );
+  // }
+
+  // Fix adjacent pyramids whose heights differ too much
+
+  myNodes.resize(2);
+  bool modifHeight = true;
+  typedef NCollection_DataMap< const SMDS_MeshElement*, double >::Iterator TPyramToH2Iter;
+  while ( modifHeight )
   {
-    const SMDS_MeshElement* PrmI = myPyramids[i];
-    MergeAdjacent( PrmI, nodesToMove );
+    modifHeight = false;
+    for ( TPyramToH2Iter pyramToH2( myPyramHeight2 ); pyramToH2.More(); pyramToH2.Next() )
+      modifHeight |= DecreaseHeightDifference( pyramToH2.Key(), pyramToH2.Value() );
+  }
+  for ( TPyramToH2Iter pyramToH2( myPyramHeight2 ); pyramToH2.More(); pyramToH2.Next() )
+  {
+    if ( pyramToH2.Value() > 0 )
+      continue; // not changed
+    const double                h = Sqrt( - pyramToH2.Value() );
+    const SMDS_MeshElement* pyram = pyramToH2.Key();
+    SMESH_NodeXYZ Papex = pyram->GetNode( PYRAM_APEX );
+    gp_XYZ PC( 0,0,0 );
+    for ( int i = 0; i < 4; ++i )
+      PC += SMESH_NodeXYZ( pyram->GetNode( i ));
+    PC /= 4;
+    gp_Vec V( PC, Papex );
+    gp_Pnt newApex = gp_Pnt( PC ).Translated( h * V.Normalized() );
+    meshDS->MoveNode( Papex.Node(), newApex.X(), newApex.Y(), newApex.Z() );
   }
 
   // iterate on all new pyramids
@@ -1464,10 +1618,10 @@ bool StdMeshers_QuadToTriaAdaptor::Compute2ndPart(SMESH_Mesh&
           gp_Vec Vtmp( PsI[k], PsI[ PYRAM_APEX ]);
           gp_Pnt Pshift = PsI[k].XYZ() + Vtmp.XYZ() * 0.01; // base node moved a bit to apex
           hasInt =
-          ( HasIntersection3( Pshift, PsI[4], Pint, PsJ[0], PsJ[1], PsJ[PYRAM_APEX]) ||
-            HasIntersection3( Pshift, PsI[4], Pint, PsJ[1], PsJ[2], PsJ[PYRAM_APEX]) ||
-            HasIntersection3( Pshift, PsI[4], Pint, PsJ[2], PsJ[3], PsJ[PYRAM_APEX]) ||
-            HasIntersection3( Pshift, PsI[4], Pint, PsJ[3], PsJ[0], PsJ[PYRAM_APEX]) );
+            ( HasIntersection3( Pshift, PsI[4], Pint, PsJ[0], PsJ[1], PsJ[PYRAM_APEX]) ||
+              HasIntersection3( Pshift, PsI[4], Pint, PsJ[1], PsJ[2], PsJ[PYRAM_APEX]) ||
+              HasIntersection3( Pshift, PsI[4], Pint, PsJ[2], PsJ[3], PsJ[PYRAM_APEX]) ||
+              HasIntersection3( Pshift, PsI[4], Pint, PsJ[3], PsJ[0], PsJ[PYRAM_APEX]) );
         }
         for ( k = 0; k < 4  &&  !hasInt; k++ )
         {
@@ -1490,7 +1644,7 @@ bool StdMeshers_QuadToTriaAdaptor::Compute2ndPart(SMESH_Mesh&
           if ( nbc == 4 )
             continue; // pyrams have a common base face
 
-          if ( nbc > 0 )
+          if ( nbc > 1 )
           {
             // Merge the two pyramids and others already merged with them
             MergePiramids( PrmI, PrmJ, nodesToMove );
@@ -1512,9 +1666,9 @@ bool StdMeshers_QuadToTriaAdaptor::Compute2ndPart(SMESH_Mesh&
             double ang2 = fabs(VN2.Angle(VI2));
             double coef1 = 0.5 - (( ang1 < M_PI/3. ) ? cos(ang1)*0.25 : 0 );
             double coef2 = 0.5 - (( ang2 < M_PI/3. ) ? cos(ang2)*0.25 : 0 ); // cos(ang2) ?
-//             double coef2 = 0.5;
-//             if(ang2<PI/3)
-//               coef2 -= cos(ang1)*0.25;
+            //             double coef2 = 0.5;
+            //             if(ang2<PI/3)
+            //               coef2 -= cos(ang1)*0.25;
 
             VN1.Scale(coef1);
             VN2.Scale(coef2);
@@ -1524,17 +1678,27 @@ bool StdMeshers_QuadToTriaAdaptor::Compute2ndPart(SMESH_Mesh&
             aNode2->setXYZ( PCj.X()+VN2.X(), PCj.Y()+VN2.Y(), PCj.Z()+VN2.Z() );
             nodesToMove.insert( aNode1 );
             nodesToMove.insert( aNode2 );
+            //cout << "Limit H  F" << getFaceID( PrmI ) << " - F" << getFaceID( PrmJ ) << endl;
           }
           // fix intersections that can appear after apex movement
-          MergeAdjacent( PrmI, nodesToMove );
-          MergeAdjacent( PrmJ, nodesToMove );
+          //MergeAdjacent( PrmI, nodesToMove );
+          //MergeAdjacent( PrmJ, nodesToMove );
+
+          apexI = PrmI->GetNode( PYRAM_APEX ); // apexI can be removed by merge
 
         } // end if(hasInt)
-      } // loop on suspectPyrams
-    }  // loop on 4 base nodes of PrmI
+      } // loop on 4 base nodes of PrmI
+    }  // loop on suspectPyrams
 
   } // loop on all pyramids
 
+  //smIdType nbNodes = aMesh.NbNodes();
+  for ( i = 0; i <  myPyramids.size(); ++i )
+  {
+    const SMDS_MeshElement* PrmI = myPyramids[i];
+    MergeAdjacent( PrmI, nodesToMove );
+  }
+
   if( !nodesToMove.empty() && !meshDS->IsEmbeddedMode() )
   {
     set<const SMDS_MeshNode*>::iterator n = nodesToMove.begin();
index a53a01addee1c90b91fa3f368a6dc45bc0b3be7a..9c194355198a7508719bef50c3cbb1aa78361cad 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -44,6 +44,7 @@ class gp_Vec;
 #include <vector>
 
 #include <TopoDS_Shape.hxx>
+#include <NCollection_DataMap.hxx>
 
 /*!
  * \brief "Transforms" quadrilateral faces into triangular ones by creation of pyramids
@@ -93,11 +94,19 @@ protected:
                      std::set<const SMDS_MeshNode*>& nodesToMove,
                      const bool                      isRecursion = false);
 
+  bool DecreaseHeightDifference( const SMDS_MeshElement* pyram,
+                                 const double            h2 );
 
   TopoDS_Shape                      myShape;
   std::set<const SMDS_MeshElement*> myRemovedTrias;
   std::list< const SMDS_MeshNode* > myDegNodes;
   const SMESH_ElementSearcher*      myElemSearcher;
+
+  NCollection_DataMap< const SMDS_MeshElement*, double > myPyramHeight2;
+
+  // work buffers of DecreaseHeightDifference()
+  std::vector< const SMDS_MeshElement* > myAdjPyrams;
+  std::vector<const SMDS_MeshNode *>     myNodes;
 };
 
 #endif
index d3b5935d619c99f1b7a80cf6c71a06712f129414..888b370836d6303b0b588664dba1bfdc34bc7daa 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 0ee269b853ca4061c47696847f6169538b93df86..fe6d61f96f96afcc81681cccf67e2e7a781f86f6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 4dc39c50166764b4bde9a1bab3447ebd97f1a315..8c815d370b3be4f3078a071a95602bacdf14b21e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index bba010e4330dc59a132e5b65a3281fd89a1f0713..7bdc2dc804eb0079678187ed2625460cb644c4a4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 5f4796266bac5fe007d35c442b307c96a5cf9066..e05279c3598008534aabff0fae37bece57051c9f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -917,7 +917,7 @@ bool StdMeshers_Quadrangle_2D::Evaluate(SMESH_Mesh&         aMesh,
   std::vector<int> aNbNodes(4);
   bool IsQuadratic = false;
   if (!checkNbEdgesForEvaluate(aMesh, aFace, aResMap, aNbNodes, IsQuadratic)) {
-    std::vector<int> aResVec(SMDSEntity_Last);
+    std::vector<smIdType> aResVec(SMDSEntity_Last);
     for (int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aResVec[i] = 0;
     SMESH_subMesh * sm = aMesh.GetSubMesh(aFace);
     aResMap.insert(std::make_pair(sm,aResVec));
@@ -966,7 +966,7 @@ bool StdMeshers_Quadrangle_2D::Evaluate(SMESH_Mesh&         aMesh,
   //int nbFaces4 = (nbhoriz-1-kdh)*(nbvertic-1-kdv);
   int nbFaces4 = (nbhoriz-1)*(nbvertic-1);
 
-  std::vector<int> aVec(SMDSEntity_Last,0);
+  std::vector<smIdType> aVec(SMDSEntity_Last,0);
   if (IsQuadratic) {
     aVec[SMDSEntity_Quad_Triangle] = nbFaces3;
     aVec[SMDSEntity_Quad_Quadrangle] = nbFaces4;
@@ -1194,10 +1194,8 @@ namespace
 
       theVariants.insert( *this );
 
-#ifndef _DEBUG_
-      if ( theVariants.size() > 1 ) // erase a worse variant
+      if (SALOME::VerbosityActivated() && theVariants.size() > 1 ) // erase a worse variant
         theVariants.erase( ++theVariants.begin() );
-#endif
     };
 
     // first criterion - equality of nbSeg of opposite sides
@@ -1531,7 +1529,7 @@ int StdMeshers_Quadrangle_2D::getCorners(const TopoDS_Face&          theFace,
 
   if ( theConsiderMesh )
   {
-    const int nbSegments = Max( faceSide.NbPoints()-1, faceSide.NbSegments() );
+    const smIdType nbSegments = std::max( faceSide.NbPoints()-1, faceSide.NbSegments() );
     if ( nbSegments < nbCorners )
       return error(COMPERR_BAD_INPUT_MESH, TComm("Too few boundary nodes: ") << nbSegments);
   }
@@ -1768,7 +1766,7 @@ bool StdMeshers_Quadrangle_2D::checkNbEdgesForEvaluate(SMESH_Mesh&          aMes
   if (anIt==aResMap.end()) {
     return false;
   }
-  std::vector<int> aVec = (*anIt).second;
+  std::vector<smIdType> aVec = (*anIt).second;
   IsQuadratic = (aVec[SMDSEntity_Quad_Edge] > aVec[SMDSEntity_Edge]);
   if (nbEdgesInWire.front() == 3) { // exactly 3 edges
     if (myTriaVertexID>0) {
@@ -1790,7 +1788,7 @@ bool StdMeshers_Quadrangle_2D::checkNbEdgesForEvaluate(SMESH_Mesh&          aMes
         SMESH_subMesh * sm = aMesh.GetSubMesh(E1);
         MapShapeNbElemsItr anIt = aResMap.find(sm);
         if (anIt==aResMap.end()) return false;
-        std::vector<int> aVec = (*anIt).second;
+        std::vector<smIdType> aVec = (*anIt).second;
         if (IsQuadratic)
           aNbNodes[0] = (aVec[SMDSEntity_Node]-1)/2 + 2;
         else
@@ -1824,7 +1822,7 @@ bool StdMeshers_Quadrangle_2D::checkNbEdgesForEvaluate(SMESH_Mesh&          aMes
       if (anIt==aResMap.end()) {
         return false;
       }
-      std::vector<int> aVec = (*anIt).second;
+      std::vector<smIdType> aVec = (*anIt).second;
       if (IsQuadratic)
         aNbNodes[nbSides] = (aVec[SMDSEntity_Node]-1)/2 + 2;
       else
@@ -1861,7 +1859,7 @@ bool StdMeshers_Quadrangle_2D::checkNbEdgesForEvaluate(SMESH_Mesh&          aMes
         if (anIt==aResMap.end()) {
           return false;
         }
-        std::vector<int> aVec = (*anIt).second;
+        std::vector<smIdType> aVec = (*anIt).second;
         if (IsQuadratic)
           aNbNodes[nbSides] += (aVec[SMDSEntity_Node]-1)/2 + 1;
         else
@@ -1902,7 +1900,7 @@ bool StdMeshers_Quadrangle_2D::checkNbEdgesForEvaluate(SMESH_Mesh&          aMes
           if (anIt==aResMap.end()) {
             return false;
           }
-          std::vector<int> aVec = (*anIt).second;
+          std::vector<smIdType> aVec = (*anIt).second;
           if (IsQuadratic)
             aNbNodes[nbSides] += (aVec[SMDSEntity_Node]-1)/2 + 1;
           else
@@ -3179,7 +3177,7 @@ bool StdMeshers_Quadrangle_2D::evaluateQuadPref(SMESH_Mesh &        aMesh,
     nbFaces += (drl+addv)*(nb-1) + (nt-1);
   } // end new version implementation
 
-  std::vector<int> aVec(SMDSEntity_Last);
+  std::vector<smIdType> aVec(SMDSEntity_Last);
   for (int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aVec[i] = 0;
   if (IsQuadratic) {
     aVec[SMDSEntity_Quad_Quadrangle] = nbFaces;
index caec612922820b29a027d2a76452e0baeb14b10e..07c33882fe99d5f274bf876095269280d2ea1da7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -46,11 +46,11 @@ struct uvPtStruct;
 enum TSideID { QUAD_BOTTOM_SIDE=0, QUAD_RIGHT_SIDE, QUAD_TOP_SIDE, QUAD_LEFT_SIDE, NB_QUAD_SIDES };
 
 typedef uvPtStruct UVPtStruct;
-struct FaceQuadStruct
+struct STDMESHERS_EXPORT FaceQuadStruct
 {
-  struct Side // a side of FaceQuadStruct
+  struct STDMESHERS_EXPORT Side // a side of FaceQuadStruct
   {
-    struct Contact // contact of two sides
+    struct STDMESHERS_EXPORT Contact // contact of two sides
     {
       int   point; // index of a grid point of this side where two sides meat
       Side* other_side;
index 1cc299a27ac6c7c69a951c67136b2fbd3a41f162..64e5debdc3c0913aae9b628c922ed214f641ed40 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 1df83aaa65fefe5bdef2f1c0a871c5781ff3699d..4113d4c9701a32a8528d33201dcd24abfa9fc141 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index f2d2970afd48e095143ec341a08a9167a21d68d6..2898427010b561c4288c8a1ed633e7bea92c84f8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -436,7 +436,7 @@ bool StdMeshers_RadialPrism_3D::Evaluate(SMESH_Mesh& aMesh,
     if ( !outerShell.IsSame( It.Value() ))
       innerShell = It.Value();
   if ( nbShells != 2 ) {
-    std::vector<int> aResVec(SMDSEntity_Last);
+    std::vector<smIdType> aResVec(SMDSEntity_Last);
     for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aResVec[i] = 0;
     SMESH_subMesh * sm = aMesh.GetSubMesh(aShape);
     aResMap.insert(std::make_pair(sm,aResVec));
@@ -450,7 +450,7 @@ bool StdMeshers_RadialPrism_3D::Evaluate(SMESH_Mesh& aMesh,
   if ( !ProjectionUtils::FindSubShapeAssociation( outerShell, &aMesh,
                                                   innerShell, &aMesh,
                                                   shape2ShapeMap) ) {
-    std::vector<int> aResVec(SMDSEntity_Last);
+    std::vector<smIdType> aResVec(SMDSEntity_Last);
     for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aResVec[i] = 0;
     SMESH_subMesh * sm = aMesh.GetSubMesh(aShape);
     aResMap.insert(std::make_pair(sm,aResVec));
@@ -466,12 +466,12 @@ bool StdMeshers_RadialPrism_3D::Evaluate(SMESH_Mesh& aMesh,
     //FacesOut.Append(exp.Current());
     SMESH_subMesh *aSubMesh = aMesh.GetSubMesh(exp.Current());
     MapShapeNbElemsItr anIt = aResMap.find(aSubMesh);
-    std::vector<int> aVec = (*anIt).second;
+    std::vector<smIdType> aVec = (*anIt).second;
     nb0d_Out += aVec[SMDSEntity_Node];
-    nb2d_3_Out += Max(aVec[SMDSEntity_Triangle],aVec[SMDSEntity_Quad_Triangle]);
-    nb2d_4_Out += Max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
+    nb2d_3_Out += std::max(aVec[SMDSEntity_Triangle],aVec[SMDSEntity_Quad_Triangle]);
+    nb2d_4_Out += std::max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
   }
-  int nb1d_Out = 0;
+  smIdType nb1d_Out = 0;
   TopTools_MapOfShape tmpMap;
   for (TopExp_Explorer exp(outerShell, TopAbs_EDGE); exp.More(); exp.Next()) {
     if( tmpMap.Contains( exp.Current() ) )
@@ -479,9 +479,9 @@ bool StdMeshers_RadialPrism_3D::Evaluate(SMESH_Mesh& aMesh,
     tmpMap.Add( exp.Current() );
     SMESH_subMesh *aSubMesh = aMesh.GetSubMesh(exp.Current());
     MapShapeNbElemsItr anIt = aResMap.find(aSubMesh);
-    std::vector<int> aVec = (*anIt).second;
+    std::vector<smIdType> aVec = (*anIt).second;
     nb0d_Out += aVec[SMDSEntity_Node];
-    nb1d_Out += Max(aVec[SMDSEntity_Edge],aVec[SMDSEntity_Quad_Edge]);
+    nb1d_Out += std::max(aVec[SMDSEntity_Edge],aVec[SMDSEntity_Quad_Edge]);
   }
   tmpMap.Clear();
   for (TopExp_Explorer exp(outerShell, TopAbs_VERTEX); exp.More(); exp.Next()) {
@@ -492,18 +492,18 @@ bool StdMeshers_RadialPrism_3D::Evaluate(SMESH_Mesh& aMesh,
   }
 
   // get info for inner shell
-  int nb0d_In=0, nb2d_3_In=0, nb2d_4_In=0;
+  smIdType nb0d_In=0, nb2d_3_In=0, nb2d_4_In=0;
   //TopTools_SequenceOfShape FacesIn;
   for (TopExp_Explorer exp(innerShell, TopAbs_FACE); exp.More(); exp.Next()) {
     //FacesIn.Append(exp.Current());
     SMESH_subMesh *aSubMesh = aMesh.GetSubMesh(exp.Current());
     MapShapeNbElemsItr anIt = aResMap.find(aSubMesh);
-    std::vector<int> aVec = (*anIt).second;
+    std::vector<smIdType> aVec = (*anIt).second;
     nb0d_In += aVec[SMDSEntity_Node];
-    nb2d_3_In += Max(aVec[SMDSEntity_Triangle],aVec[SMDSEntity_Quad_Triangle]);
-    nb2d_4_In += Max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
+    nb2d_3_In += std::max(aVec[SMDSEntity_Triangle],aVec[SMDSEntity_Quad_Triangle]);
+    nb2d_4_In += std::max(aVec[SMDSEntity_Quadrangle],aVec[SMDSEntity_Quad_Quadrangle]);
   }
-  int nb1d_In = 0;
+  smIdType nb1d_In = 0;
   tmpMap.Clear();
   bool IsQuadratic = false;
   bool IsFirst = true;
@@ -513,9 +513,9 @@ bool StdMeshers_RadialPrism_3D::Evaluate(SMESH_Mesh& aMesh,
     tmpMap.Add( exp.Current() );
     SMESH_subMesh *aSubMesh = aMesh.GetSubMesh(exp.Current());
     MapShapeNbElemsItr anIt = aResMap.find(aSubMesh);
-    std::vector<int> aVec = (*anIt).second;
+    std::vector<smIdType> aVec = (*anIt).second;
     nb0d_In += aVec[SMDSEntity_Node];
-    nb1d_In += Max(aVec[SMDSEntity_Edge],aVec[SMDSEntity_Quad_Edge]);
+    nb1d_In += std::max(aVec[SMDSEntity_Edge],aVec[SMDSEntity_Quad_Edge]);
     if(IsFirst) {
       IsQuadratic = (aVec[SMDSEntity_Quad_Edge] > aVec[SMDSEntity_Edge]);
       IsFirst = false;
@@ -532,7 +532,7 @@ bool StdMeshers_RadialPrism_3D::Evaluate(SMESH_Mesh& aMesh,
   bool IsOK = (nb0d_Out==nb0d_In) && (nb1d_Out==nb1d_In) && 
               (nb2d_3_Out==nb2d_3_In) && (nb2d_4_Out==nb2d_4_In);
   if(!IsOK) {
-    std::vector<int> aResVec(SMDSEntity_Last);
+    std::vector<smIdType> aResVec(SMDSEntity_Last);
     for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aResVec[i] = 0;
     SMESH_subMesh * sm = aMesh.GetSubMesh(aShape);
     aResMap.insert(std::make_pair(sm,aResVec));
@@ -547,7 +547,7 @@ bool StdMeshers_RadialPrism_3D::Evaluate(SMESH_Mesh& aMesh,
   }
   if ( myDistributionHypo ) {
     if ( !myDistributionHypo->GetLayerDistribution() ) {
-      std::vector<int> aResVec(SMDSEntity_Last);
+      std::vector<smIdType> aResVec(SMDSEntity_Last);
       for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aResVec[i] = 0;
       SMESH_subMesh * sm = aMesh.GetSubMesh(aShape);
       aResMap.insert(std::make_pair(sm,aResVec));
@@ -566,12 +566,12 @@ bool StdMeshers_RadialPrism_3D::Evaluate(SMESH_Mesh& aMesh,
     nbLayers = myLayerPositions.size() + 1;
   }
 
-  std::vector<int> aResVec(SMDSEntity_Last);
+  std::vector<smIdType> aResVec(SMDSEntity_Last);
   for(int i=SMDSEntity_Node; i<SMDSEntity_Last; i++) aResVec[i] = 0;
   if(IsQuadratic) {
     aResVec[SMDSEntity_Quad_Penta] = nb2d_3_Out * nbLayers;
     aResVec[SMDSEntity_Quad_Hexa] = nb2d_4_Out * nbLayers;
-    int nb1d = ( nb2d_3_Out*3 + nb2d_4_Out*4 ) / 2;
+    smIdType nb1d = ( nb2d_3_Out*3 + nb2d_4_Out*4 ) / 2;
     aResVec[SMDSEntity_Node] = nb0d_Out * ( 2*nbLayers - 1 ) - nb1d * nbLayers;
   }
   else {
index f549a54ad8e4700ad6b0501e0b41ae7ae4b594e4..fb413b77c230aa70adb7ac19bd588a86ddf0f205 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 4ecfb7dd8576fcf1464a111058c00570f0c3f0e8..7fc877861db6986d36fb67b41c0cb6b94a89b257 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -70,7 +70,7 @@ using namespace std;
 
 //=======================================================================
 //function : StdMeshers_RadialQuadrangle_1D2D
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 StdMeshers_RadialQuadrangle_1D2D::StdMeshers_RadialQuadrangle_1D2D(int        hypId,
@@ -103,7 +103,7 @@ StdMeshers_RadialQuadrangle_1D2D::~StdMeshers_RadialQuadrangle_1D2D()
 
 //=======================================================================
 //function : CheckHypothesis
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 bool StdMeshers_RadialQuadrangle_1D2D::CheckHypothesis
@@ -111,7 +111,7 @@ bool StdMeshers_RadialQuadrangle_1D2D::CheckHypothesis
                             const TopoDS_Shape&                  aShape,
                             SMESH_Hypothesis::Hypothesis_Status& aStatus)
 {
-  // check aShape 
+  // check aShape
   myNbLayerHypo = 0;
   myDistributionHypo = 0;
 
@@ -271,7 +271,7 @@ namespace
         sideEdges.splice( sideEdges.end(), edges, edges.begin() );
 
       StdMeshers_FaceSidePtr side;
-      if ( aMesh ) 
+      if ( aMesh )
         side = StdMeshers_FaceSide::New( face, sideEdges, aMesh,
                                          /*isFwd=*/true, /*skipMedium=*/ true, helper );
       sides.push_back( side );
@@ -355,7 +355,7 @@ namespace
         }
     }
 
-    int iCirc = deviation2sideInd.rbegin()->second; 
+    int iCirc = deviation2sideInd.rbegin()->second;
     aCircSide = sides[ iCirc ];
     aLinSide1 = sides[( iCirc + 1 ) % sides.size() ];
     if ( sides.size() > 2 )
@@ -958,7 +958,7 @@ bool StdMeshers_RadialQuadrangle_1D2D::Compute(SMESH_Mesh&         aMesh,
     centerUV   = nodes.back().UV();
   }
   // ------------------------------------------------------------------------------------------
-  else // nbSides == 3 
+  else // nbSides == 3
   {
     // one curve must be a part of ellipse and 2 other curves must be segments of line
 
@@ -1082,7 +1082,7 @@ int StdMeshers_RadialQuadrangle_1D2D::computeLayerPositions(StdMeshers_FaceSideP
     if ( !TNodeDistributor::GetDistributor(*mesh)->Compute( positions, linSide->Edge(0),
                                                             *curve, f, l, *mesh, hyp1D ))
     {
-      if ( myDistributionHypo ) { // bad hyp assigned 
+      if ( myDistributionHypo ) { // bad hyp assigned
         return error( TNodeDistributor::GetDistributor(*mesh)->GetComputeError() );
       }
       else {
@@ -1090,7 +1090,7 @@ int StdMeshers_RadialQuadrangle_1D2D::computeLayerPositions(StdMeshers_FaceSideP
       }
     }
   }
-  
+
   if ( positions.empty() ) // try to use nb of layers
   {
     if ( !nbLayers )
@@ -1132,7 +1132,7 @@ int StdMeshers_RadialQuadrangle_1D2D::computeLayerPositions(StdMeshers_FaceSideP
 
 //=======================================================================
 //function : Evaluate
-//purpose  : 
+//purpose  :
 //=======================================================================
 
 bool StdMeshers_RadialQuadrangle_1D2D::Evaluate(SMESH_Mesh&         aMesh,
@@ -1146,8 +1146,8 @@ bool StdMeshers_RadialQuadrangle_1D2D::Evaluate(SMESH_Mesh&         aMesh,
   if( aResMap.count(sm) )
     return false;
 
-  vector<int>& aResVec =
-    aResMap.insert( make_pair(sm, vector<int>(SMDSEntity_Last,0))).first->second;
+  vector<smIdType>& aResVec =
+    aResMap.insert( make_pair(sm, vector<smIdType>(SMDSEntity_Last,0))).first->second;
 
   myHelper = new SMESH_MesherHelper( aMesh );
   myHelper->SetSubShape( aShape );
@@ -1193,7 +1193,7 @@ bool StdMeshers_RadialQuadrangle_1D2D::Evaluate(SMESH_Mesh&         aMesh,
       return false;
   }
   // ------------------------------------------------------------------------------------------
-  else // nbSides == 3 
+  else // nbSides == 3
   {
     if ( !computeLayerPositions(( linSide1->Length() > linSide2->Length() ) ? linSide1 : linSide2,
                                  layerPositions ))
@@ -1204,23 +1204,23 @@ bool StdMeshers_RadialQuadrangle_1D2D::Evaluate(SMESH_Mesh&         aMesh,
   for ( TopExp_Explorer edge( aShape, TopAbs_EDGE ); edge.More() &&  !isQuadratic ; edge.Next() )
   {
     sm = aMesh.GetSubMesh( edge.Current() );
-    vector<int>& nbElems = aResMap[ sm ];
+    vector<smIdType>& nbElems = aResMap[ sm ];
     if ( SMDSEntity_Quad_Edge < (int) nbElems.size() )
       isQuadratic = nbElems[ SMDSEntity_Quad_Edge ];
   }
 
-  int nbCircSegments = 0;
+  smIdType nbCircSegments = 0;
   for ( int iE = 0; iE < circSide->NbEdges(); ++iE )
   {
     sm = aMesh.GetSubMesh( circSide->Edge( iE ));
-    vector<int>& nbElems = aResMap[ sm ];
+    vector<smIdType>& nbElems = aResMap[ sm ];
     if ( SMDSEntity_Quad_Edge < (int) nbElems.size() )
       nbCircSegments += ( nbElems[ SMDSEntity_Edge ] + nbElems[ SMDSEntity_Quad_Edge ]);
   }
-  
-  int nbQuads = nbCircSegments * ( layerPositions.size() - 1 );
-  int nbTria  = nbCircSegments;
-  int nbNodes = ( nbCircSegments - 1 ) * ( layerPositions.size() - 2 );
+
+  smIdType nbQuads = nbCircSegments * ( layerPositions.size() - 1 );
+  smIdType nbTria  = nbCircSegments;
+  smIdType nbNodes = ( nbCircSegments - 1 ) * ( layerPositions.size() - 2 );
   if ( isQuadratic )
   {
     nbNodes += (( nbCircSegments - 1 ) * ( layerPositions.size() - 1 ) + // radial
@@ -1238,7 +1238,7 @@ bool StdMeshers_RadialQuadrangle_1D2D::Evaluate(SMESH_Mesh&         aMesh,
   if ( linSide1 )
   {
     // evaluation for linSides
-    vector<int> aResVec(SMDSEntity_Last, 0);
+    vector<smIdType> aResVec(SMDSEntity_Last, 0);
     if ( isQuadratic ) {
       aResVec[SMDSEntity_Node     ] = 2 * ( layerPositions.size() - 1 ) + 1;
       aResVec[SMDSEntity_Quad_Edge] = layerPositions.size() - 1;
index 2c52ffacd25291d3f8b57f8f0b3358af42220e02..9aca7e70b73b495cc62b7d8b7241a00c039180cd 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index c6e41cbb2b48aea869f7ffb67f042a73745e6e0f..44c7c1a7541851ee354de44b0322faf6ef7f0ce1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -350,7 +350,7 @@ bool StdMeshers_Regular_1D::CheckHypothesis( SMESH_Mesh&         aMesh,
 
 static bool computeParamByFunc(Adaptor3d_Curve& C3d,
                                double first, double last, double length,
-                               bool theReverse, int nbSeg, Function& func,
+                               bool theReverse, smIdType nbSeg, Function& func,
                                list<double>& theParams)
 {
   // never do this way
@@ -359,11 +359,11 @@ static bool computeParamByFunc(Adaptor3d_Curve& C3d,
   if ( nbSeg <= 0 )
     return false;
 
-  int nbPnt = 1 + nbSeg;
+  smIdType nbPnt = 1 + nbSeg;
   vector<double> x( nbPnt, 0. );
 
 
-  const double eps = Min( 1E-4, 1./nbSeg/100. );
+  const double eps = Min( 1E-4, 0.01 / double( nbSeg ));
 
   if ( !buildDistribution( func, 0.0, 1.0, nbSeg, x, eps ))
      return false;
@@ -377,7 +377,7 @@ static bool computeParamByFunc(Adaptor3d_Curve& C3d,
     sign  = -1.;
   }
 
-  for ( int i = 1; i < nbSeg; i++ )
+  for ( smIdType i = 1; i < nbSeg; i++ )
   {
     double curvLength = length * (x[i] - x[i-1]) * sign;
     double tol        = Min( Precision::Confusion(), curvLength / 100. );
@@ -420,7 +420,7 @@ static void compensateError(double a1, double an,
                             list<double> &    theParams,
                             bool              adjustNeighbors2an = false)
 {
-  int i, nPar = theParams.size();
+  smIdType i, nPar = theParams.size();
   if ( a1 + an <= length && nPar > 1 )
   {
     bool reverse = ( U1 > Un );
@@ -459,7 +459,7 @@ static void compensateError(double a1, double an,
     }
     else
     {
-      double q  = dUn / ( nPar - 1 );
+      double q  =  dUn / double( nPar - 1 );
       theParams.back() += dUn;
       double sign = reverse ? -1 : 1;
       double prevU = theParams.back();
@@ -565,14 +565,68 @@ StdMeshers_Regular_1D::getVertexHyp(SMESH_Mesh &          theMesh,
   return 0;
 }
 
+//================================================================================
+/*!
+ * \brief Divide a curve into equal segments
+ */
+//================================================================================
+
+bool StdMeshers_Regular_1D::divideIntoEqualSegments( SMESH_Mesh &        theMesh,
+                                                     Adaptor3d_Curve &   theC3d,
+                                                     smIdType            theNbPoints,
+                                                     double              theTol,
+                                                     double              theLength,
+                                                     double              theFirstU,
+                                                     double              theLastU,
+                                                     std::list<double> & theParameters )
+{
+  bool ok = false;
+  if ( theNbPoints < IntegerLast() )
+  {
+    int nbPnt = FromSmIdType<int>( theNbPoints );
+    GCPnts_UniformAbscissa discret(theC3d, nbPnt, theFirstU, theLastU, theTol );
+    if ( !discret.IsDone() )
+      return error( "GCPnts_UniformAbscissa failed");
+    if ( discret.NbPoints() < nbPnt )
+      discret.Initialize(theC3d, nbPnt + 1, theFirstU, theLastU, theTol );
+
+    int nbPoints = Min( discret.NbPoints(), nbPnt );
+    for ( int i = 2; i < nbPoints; i++ ) // skip 1st and last points
+    {
+      double param = discret.Parameter(i);
+      theParameters.push_back( param );
+    }
+    ok = true;
+  }
+  else // huge nb segments
+  {
+    // use FIXED_POINTS_1D method
+    StdMeshers_FixedPoints1D fixedPointsHyp( GetGen()->GetANewId(), GetGen() );
+    _fpHyp = &fixedPointsHyp;
+    std::vector<double>   params = { 0., 1. };
+    std::vector<smIdType> nbSegs = { theNbPoints - 1 };
+    fixedPointsHyp.SetPoints( params );
+    fixedPointsHyp.SetNbSegments( nbSegs );
+
+    HypothesisType curType = _hypType;
+    _hypType = FIXED_POINTS_1D;
+
+    ok = computeInternalParameters( theMesh, theC3d, theLength, theFirstU, theLastU,
+                                    theParameters, /*reverse=*/false );
+    _hypType = curType;
+    _fpHyp = 0;
+  }
+  return ok;
+}
+
 //================================================================================
 /*!
  * \brief Tune parameters to fit "SegmentLengthAroundVertex" hypothesis
 * \param theC3d - wire curve
 * \param theLength - curve length
 * \param theParameters - internal nodes parameters to modify
 * \param theVf - 1st vertex
 * \param theVl - 2nd vertex
 \param theC3d - wire curve
 \param theLength - curve length
 \param theParameters - internal nodes parameters to modify
 \param theVf - 1st vertex
 \param theVl - 2nd vertex
  */
 //================================================================================
 
@@ -584,7 +638,7 @@ void StdMeshers_Regular_1D::redistributeNearVertices (SMESH_Mesh &          theM
                                                       const TopoDS_Vertex & theVl)
 {
   double f = theC3d.FirstParameter(), l = theC3d.LastParameter();
-  int nPar = theParameters.size();
+  size_t nPar = theParameters.size();
   for ( int isEnd1 = 0; isEnd1 < 2; ++isEnd1 )
   {
     const TopoDS_Vertex & V = isEnd1 ? theVf : theVl;
@@ -623,7 +677,7 @@ void StdMeshers_Regular_1D::redistributeNearVertices (SMESH_Mesh &          theM
       {
         // recompute params between the last segment and a middle one.
         // find size of a middle segment
-        int nHalf = ( nPar-1 ) / 2;
+        smIdType nHalf = ( nPar-1 ) / 2;
         list< double >::reverse_iterator itU = theParameters.rbegin();
         std::advance( itU, nHalf );
         double Um = *itU++;
@@ -662,7 +716,7 @@ void StdMeshers_Regular_1D::redistributeNearVertices (SMESH_Mesh &          theM
 
 //=============================================================================
 /*!
- *  
+ *
  */
 //=============================================================================
 bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh &     theMesh,
@@ -714,7 +768,7 @@ bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh &     theMesh,
     size_t  dSeg = theReverse ? -1 : +1;
     double param = theFirstU;
     size_t nbParams = 0;
-    for ( int i = 0, nb = segLen.size()-1; i < nb; ++i, iSeg += dSeg )
+    for ( size_t i = 1; i < segLen.size(); ++i, iSeg += dSeg )
     {
       double tol = Min( Precision::Confusion(), 0.01 * segLen[ iSeg ]);
       GCPnts_AbscissaPoint Discret( tol, theC3d, segLen[ iSeg ], param );
@@ -740,14 +794,14 @@ bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh &     theMesh,
   case NB_SEGMENTS:
   {
     double eltSize = 1;
-    int nbSegments;
+    smIdType nbSegments;
     if ( _hypType == MAX_LENGTH )
     {
       double nbseg = ceil(theLength / _value[ BEG_LENGTH_IND ]); // integer sup
       if (nbseg <= 0)
         nbseg = 1; // degenerated edge
       eltSize = theLength / nbseg * ( 1. - 1e-9 );
-      nbSegments = (int) nbseg;
+      nbSegments = ToSmIdType( nbseg );
     }
     else if ( _hypType == LOCAL_LENGTH )
     {
@@ -770,10 +824,10 @@ bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh &     theMesh,
           }
           if (computed) {
             SMESHDS_SubMesh* smds = sm->GetSubMeshDS();
-            int       nb_segments = smds->NbElements();
+            smIdType  nb_segments = smds->NbElements();
             if (nbseg - 1 <= nb_segments && nb_segments <= nbseg + 1) {
               isFound = true;
-              nbseg = nb_segments;
+              nbseg = FromSmIdType<double>( nb_segments );
             }
           }
         }
@@ -788,7 +842,7 @@ bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh &     theMesh,
       if (nbseg <= 0)
         nbseg = 1;                        // degenerated edge
       eltSize = theLength / nbseg;
-      nbSegments = (int) nbseg;
+      nbSegments = ToSmIdType( nbseg );
     }
     else
     {
@@ -805,19 +859,19 @@ bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh &     theMesh,
 
           if (fabs(scale - 1.0) < Precision::Confusion()) {
             // special case to avoid division by zero
-            for (int i = 1; i < nbSegments; i++) {
-              double param = f + (l - f) * i / nbSegments;
+            for ( smIdType i = 1; i < nbSegments; i++) {
+              double param = f + (l - f) * double( i ) / double( nbSegments );
               theParams.push_back( param );
             }
-          } else {
-            // general case of scale distribution
+          }
+          else { // general case of scale distribution
             if ( theReverse )
               scale = 1.0 / scale;
 
-            double  alpha = pow(scale, 1.0 / (nbSegments - 1));
+            double  alpha = pow(scale, 1.0 / double( nbSegments - 1 ));
             double factor = (l - f) / (1.0 - pow(alpha, nbSegments));
 
-            for (int i = 1; i < nbSegments; i++) {
+            for ( smIdType i = 1; i < nbSegments; i++) {
               double param = f + factor * (1.0 - pow(alpha, i));
               theParams.push_back( param );
             }
@@ -837,7 +891,7 @@ bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh &     theMesh,
         break;
       case StdMeshers_NumberOfSegments::DT_TabFunc:
         {
-          FunctionTable func(_vvalue[ TAB_FUNC_IND ], _ivalue[ CONV_MODE_IND ]);
+          FunctionTable func(_vvalue[ TAB_FUNC_IND ], FromSmIdType<int>( _ivalue[ CONV_MODE_IND ]));
           return computeParamByFunc(theC3d, f, l, theLength, theReverse,
                                     _ivalue[ NB_SEGMENTS_IND ], func,
                                     theParams);
@@ -845,14 +899,15 @@ bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh &     theMesh,
         break;
       case StdMeshers_NumberOfSegments::DT_ExprFunc:
         {
-          FunctionExpr func(_svalue[ EXPR_FUNC_IND ].c_str(), _ivalue[ CONV_MODE_IND ]);
+          FunctionExpr func(_svalue[ EXPR_FUNC_IND ].c_str(),
+                            FromSmIdType<int>( _ivalue[ CONV_MODE_IND ]));
           return computeParamByFunc(theC3d, f, l, theLength, theReverse,
                                     _ivalue[ NB_SEGMENTS_IND ], func,
                                     theParams);
         }
         break;
       case StdMeshers_NumberOfSegments::DT_Regular:
-        eltSize = theLength / nbSegments;
+        eltSize = theLength / double( nbSegments );
         break;
       default:
         return false;
@@ -860,18 +915,9 @@ bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh &     theMesh,
     }
 
     double tol = Min( Precision::Confusion(), 0.01 * eltSize );
-    GCPnts_UniformAbscissa Discret(theC3d, nbSegments + 1, f, l, tol );
-    if ( !Discret.IsDone() )
-      return error( "GCPnts_UniformAbscissa failed");
-    if ( Discret.NbPoints() < nbSegments + 1 )
-      Discret.Initialize(theC3d, nbSegments + 2, f, l, tol );
+    divideIntoEqualSegments( theMesh, theC3d, nbSegments + 1, tol,
+                             theLength, theFirstU, theLastU, theParams );
 
-    int NbPoints = Min( Discret.NbPoints(), nbSegments + 1 );
-    for ( int i = 2; i < NbPoints; i++ ) // skip 1st and last points
-    {
-      double param = Discret.Parameter(i);
-      theParams.push_back( param );
-    }
     compensateError( eltSize, eltSize, f, l, theLength, theC3d, theParams, true ); // for PAL9899
     return true;
   }
@@ -1001,11 +1047,11 @@ bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh &     theMesh,
   case FIXED_POINTS_1D:
   {
     const std::vector<double>& aPnts = _fpHyp->GetPoints();
-    std::vector<int>          nbsegs = _fpHyp->GetNbSegments();
+    std::vector<smIdType>     nbsegs = _fpHyp->GetNbSegments();
 
     // sort normalized params, taking into account theReverse
     TColStd_SequenceOfReal Params;
-    double tol = 1e-7 / theLength; // GCPnts_UniformAbscissa allows u2-u1 > 1e-7
+    double tol = 1e-7;
     for ( size_t i = 0; i < aPnts.size(); i++ )
     {
       if( aPnts[i] < tol || aPnts[i] > 1 - tol )
@@ -1013,72 +1059,82 @@ bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh &     theMesh,
       double u = theReverse ? ( 1 - aPnts[i] ) : aPnts[i];
       int    j = 1;
       bool IsExist = false;
-      for ( ; j <= Params.Length(); j++ ) {
-        if ( Abs( u - Params.Value(j) ) < tol ) {
-          IsExist = true;
-          break;
-        }
+      for ( ; j <= Params.Length() &&  !IsExist; j++ )
+      {
+        IsExist = ( Abs( u - Params.Value(j) ) < tol );
         if ( u < Params.Value(j) ) break;
       }
       if ( !IsExist ) Params.InsertBefore( j, u );
     }
+    Params.InsertBefore( 1, 0.0 );
+    Params.Append( 1.0 );
+
+    if ( theReverse )
+    {
+      if ((int) nbsegs.size() > Params.Length() - 1 )
+        nbsegs.resize( Params.Length() - 1 );
+      std::reverse( nbsegs.begin(), nbsegs.end() );
+    }
+    if ( nbsegs.empty() )
+    {
+      nbsegs.push_back( 1 );
+    }
+    if ((int) nbsegs.size() < Params.Length() - 1 )
+      nbsegs.resize( Params.Length() - 1, nbsegs[0] );
+
+    // care of huge nbsegs - additionally divide diapasons
+    for ( int i = 2; i <= Params.Length(); i++ )
+    {
+      smIdType nbTot = nbsegs[ i-2 ];
+      if ( nbTot <= IntegerLast() )
+        continue;
+      smIdType   nbDiapason = nbTot / IntegerLast() + 1;
+      smIdType nbSegPerDiap = nbTot / nbDiapason;
+      double           par0 = Params( i - 1 ), par1 = Params( i );
+      for ( smIdType iDiap = 0; iDiap < nbDiapason - 1; ++iDiap )
+      {
+        double    r = double( nbSegPerDiap * ( iDiap + 1 )) / double( nbTot );
+        double parI = par0 + ( par1 - par0 ) * r;
+        Params.InsertBefore( i, parI );
+        auto it = nbsegs.begin();
+        smIdType incr_it = i - 2 + iDiap;
+        nbsegs.insert( it + incr_it, nbSegPerDiap );
+      }
+      nbsegs[ i-2 + nbDiapason - 1 ] = nbSegPerDiap + nbTot % nbDiapason;
+    }
 
     // transform normalized Params into real ones
-    std::vector< double > uVec( Params.Length() + 2 );
+    std::vector< double > uVec( Params.Length() );
     uVec[ 0 ] = theFirstU;
     double abscissa;
-    for ( int i = 1; i <= Params.Length(); i++ )
+    for ( int i = 2; i < Params.Length(); i++ )
     {
       abscissa = Params( i ) * theLength;
       tol      = Min( Precision::Confusion(), 0.01 * abscissa );
       GCPnts_AbscissaPoint APnt( tol, theC3d, abscissa, theFirstU );
       if ( !APnt.IsDone() )
         return error( "GCPnts_AbscissaPoint failed");
-      uVec[ i ] = APnt.Parameter();
+      uVec[ i-1 ] = APnt.Parameter();
     }
     uVec.back() = theLastU;
 
     // divide segments
-    if ( theReverse )
-    {
-      if ((int) nbsegs.size() > Params.Length() + 1 )
-        nbsegs.resize( Params.Length() + 1 );
-      std::reverse( nbsegs.begin(), nbsegs.end() );
-    }
-    if ( nbsegs.empty() )
-    {
-      nbsegs.push_back( 1 );
-    }
-    Params.InsertBefore( 1, 0.0 );
-    Params.Append( 1.0 );
     double eltSize, segmentSize, par1, par2;
-    for ( size_t i = 0; i < uVec.size()-1; i++ )
+    for ( int i = 0; i < (int)uVec.size()-1; i++ )
     {
       par1 = uVec[ i   ];
       par2 = uVec[ i+1 ];
-      int nbseg = ( i < nbsegs.size() ) ? nbsegs[i] : nbsegs[0];
-      if ( nbseg == 1 )
-      {
-        theParams.push_back( par2 );
-      }
-      else
+      smIdType nbseg = ( i < (int) nbsegs.size() ) ? nbsegs[i] : nbsegs[0];
+      if ( nbseg > 1 )
       {
         segmentSize = ( Params( i+2 ) - Params( i+1 )) * theLength;
-        eltSize     = segmentSize / nbseg;
+        eltSize     = segmentSize / double( nbseg );
         tol         = Min( Precision::Confusion(), 0.01 * eltSize );
-        GCPnts_UniformAbscissa Discret( theC3d, eltSize, par1, par2, tol );
-        if ( !Discret.IsDone() )
-          return error( "GCPnts_UniformAbscissa failed");
-        if ( Discret.NbPoints() < nbseg + 1 ) {
-          eltSize = segmentSize / ( nbseg + 0.5 );
-          Discret.Initialize( theC3d, eltSize, par1, par2, tol );
-        }
-        int NbPoints = Discret.NbPoints();
-        for ( int i = 2; i <= NbPoints; i++ ) {
-          double param = Discret.Parameter(i);
-          theParams.push_back( param );
-        }
+        if ( !divideIntoEqualSegments( theMesh, theC3d, nbseg + 1, tol,
+                                       segmentSize, par1, par2, theParams ))
+          return false;
       }
+      theParams.push_back( par2 );
     }
     theParams.pop_back();
 
@@ -1108,7 +1164,7 @@ bool StdMeshers_Regular_1D::computeInternalParameters(SMESH_Mesh &     theMesh,
 
 //=============================================================================
 /*!
- *  
+ *
  */
 //=============================================================================
 
@@ -1282,7 +1338,7 @@ bool StdMeshers_Regular_1D::Compute(SMESH_Mesh & theMesh, const TopoDS_Shape & t
 
 //=============================================================================
 /*!
- *  
+ *
  */
 //=============================================================================
 
@@ -1312,7 +1368,7 @@ bool StdMeshers_Regular_1D::Evaluate(SMESH_Mesh &         theMesh,
   ASSERT(!VFirst.IsNull());
   ASSERT(!VLast.IsNull());
 
-  std::vector<int> aVec(SMDSEntity_Last,0);
+  std::vector<smIdType> aVec(SMDSEntity_Last,0);
 
   double length = EdgeLength( E );
   if ( !Curve.IsNull() && length > 0 )
@@ -1396,7 +1452,7 @@ StdMeshers_Regular_1D::GetUsedHypothesis(SMESH_Mesh &         aMesh,
   if (nbHyp == 0) // nothing propagated nor assigned to aShape
   {
     SMESH_Algo::GetUsedHypothesis( aMesh, aShape, ignoreAuxiliary );
-    nbHyp = _usedHypList.size();
+    nbHyp = (int)_usedHypList.size();
   }
   else
   {
index af6921ebcb7e494dd122235f6951e4cbe8651230..b19e81ec507b1c8c1163f0ee97542789e467dbcb 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -95,7 +95,16 @@ protected:
                                          double                theLength,
                                          std::list< double > & theParameters,
                                          const TopoDS_Vertex & theVf,
-                                         const TopoDS_Vertex & theVl);
+                                         const TopoDS_Vertex & thieve);
+
+  bool divideIntoEqualSegments( SMESH_Mesh &        theMesh,
+                                Adaptor3d_Curve &   theC3d,
+                                smIdType            theNbPoints,
+                                double              theTol,
+                                double              theLength,
+                                double              theFirstU,
+                                double              theLastU,
+                                std::list<double> & theParameters );
 
   /*!
    * \brief Return StdMeshers_SegmentLengthAroundVertex assigned to vertex
@@ -133,8 +142,8 @@ protected:
   const StdMeshers_FixedPoints1D* _fpHyp;
   const StdMeshers_Adaptive1D*    _adaptiveHyp;
 
-  double _value[2];
-  int    _ivalue[3];
+  double              _value [2];
+  smIdType            _ivalue[3];
   std::vector<double> _vvalue[1];
   std::string         _svalue[1];
   std::vector<int>    _revEdgesIDs;
index aac83b862f314c5ab56ac5ab8bb15700d71c7132..d057ad6ff9886d080c8f327744280a1e12f3219d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index b0cddd29d3fc682ed80a331d72a884976f3a0328..fc4ddd96f949a49bc403fcaa7c5b30ebafcf7034 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 9f01a76afdf6badc7b7607b72e72988ae301b599..bde74c60747e90ab4d2b99da6db3b78f71fd83d4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index a83681c3c5b6b89e2804a28cdf9d0c7f83212203..d76c8edbd25fe5dcd3091aa89d5a1292b3cc1b71 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 1333b47e02e7f9497e871bbc73b7b8e7e460be67..0ef91faa4e809f352bc01b8e2b17abff713ff19d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 60f00dcc7eda57e11134d20edfb8d01539cbbfd5..6fb9a32a4e7b10a04c830eba9cbd8d7988644bf4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 58a5584ad3ec08e1f6d46275fcc24573db88d2cb..ab07c6fca70c02322c130ba502dddfcc6a9fa894 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index d07d1e17d3dc23893e827ba6b56e38db7eb60eaa..3e6ffd086284698581f7e2f36a68676bd5f24882 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index a40add112f4207acf7f7cbc0e756f3ba2ab9b1fa..d6a8e1f375614a8bc97cbd65d20127625370e8aa 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index f8d6ba8c522ccf0bf36bc8de01554b82f5a2c273..157e9f60c80c05968d32007bc82e2fd94a38f380 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
diff --git a/src/StdMeshers/StdMeshers_ViscousLayerBuilder.cxx b/src/StdMeshers/StdMeshers_ViscousLayerBuilder.cxx
new file mode 100644 (file)
index 0000000..4404cf5
--- /dev/null
@@ -0,0 +1,134 @@
+// Copyright (C) 2007-2024  CEA, EDF, 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      : StdMeshers_ViscousLayerBuilder.cxx
+// Module    : SMESH
+// Author    : Cesar Conopoima (cce)
+//
+
+#include "SMESHDS_Mesh.hxx"
+#include "SMESH_ControlsDef.hxx"
+#include "SMESH_Gen.hxx"
+#include "SMESH_Mesh.hxx"
+#include "SMESH_MeshAlgos.hxx"
+#include "SMESH_MeshEditor.hxx"
+#include "SMESH_MesherHelper.hxx"
+#include "StdMeshers_ViscousLayerBuilder.hxx"
+
+#include <TopoDS.hxx>
+
+#include <vector>
+
+//=======================================================================
+//function : StdMeshers_ViscousLayerBuilder
+//purpose  : Implements 
+//=======================================================================
+
+StdMeshers_ViscousLayerBuilder::StdMeshers_ViscousLayerBuilder(int        hypId,
+                                                                SMESH_Gen* gen)
+  : SMESH_2D_Algo(hypId, gen)
+{
+  _name = "StdMeshers_ViscousLayerBuilder";
+  _hyp    = new StdMeshers_ViscousLayers2D( hypId, gen );  
+}
+
+bool StdMeshers_ViscousLayerBuilder::CheckHypothesis(SMESH_Mesh&                          aMesh,
+                                                      const TopoDS_Shape&                  aShape,
+                                                      SMESH_Hypothesis::Hypothesis_Status& aStatus)
+{
+  (void) aMesh;
+  (void) aShape;
+  (void) aStatus;
+  return true;
+}
+
+bool StdMeshers_ViscousLayerBuilder::Compute(SMESH_Mesh& /*aMesh*/, const TopoDS_Shape& /*aShape*/)
+{
+  return true;
+}
+
+bool StdMeshers_ViscousLayerBuilder::Evaluate(SMESH_Mesh & /*aMesh*/, const TopoDS_Shape & /*aShape*/,
+                                                MapShapeNbElems& /*aResMap*/ )
+{
+  return true;
+}
+
+bool StdMeshers_ViscousLayerBuilder::IsApplicable( const TopoDS_Shape &S, bool /*toCheckAll*/, int algoDim )
+{
+  if ( S.ShapeType() > TopAbs_FACE )
+    return false;
+
+  return ( std::abs( algoDim ) == 3 || std::abs( algoDim ) == 2 ) ? true : false;
+}
+
+void StdMeshers_ViscousLayerBuilder::SetBndShapes(const std::vector<int>& faceIds, bool toIgnore)
+{
+  _hyp->SetBndShapes( faceIds, toIgnore );  
+} // --------------------------------------------------------------------------------
+void StdMeshers_ViscousLayerBuilder::SetTotalThickness(double thickness)
+{
+  _hyp->SetTotalThickness( thickness );
+} // --------------------------------------------------------------------------------
+void StdMeshers_ViscousLayerBuilder::SetNumberLayers(int nb)
+{
+  _hyp->SetNumberLayers( nb );
+} // --------------------------------------------------------------------------------
+void StdMeshers_ViscousLayerBuilder::SetStretchFactor(double factor)
+{
+  _hyp->SetStretchFactor( factor );
+} // --------------------------------------------------------------------------------
+void StdMeshers_ViscousLayerBuilder::SetMethod( StdMeshers_ViscousLayers::ExtrusionMethod method )
+{
+  _hyp->SetMethod( method );
+} // --------------------------------------------------------------------------------
+void StdMeshers_ViscousLayerBuilder::SetGroupName(const std::string& name)
+{
+  _hyp->SetGroupName( name );
+} 
+
+//=======================================================================
+//function : ~StdMeshers_ViscousLayerBuilder
+//purpose  :
+//=======================================================================
+
+StdMeshers_ViscousLayerBuilder::~StdMeshers_ViscousLayerBuilder()
+{
+}
+
+TopoDS_Shape StdMeshers_ViscousLayerBuilder::GetShrinkGeometry( SMESH_Mesh & theMesh, const TopoDS_Shape& theShape )
+{
+  _vlBuilder  = new StdMeshers_Cartesian_VL::ViscousBuilder( _hyp, theMesh, theShape );
+
+  std::string error = "";
+  _offsetShape = _vlBuilder->MakeOffsetShape( theShape, theMesh, error );
+  if ( error != "" )
+    throw SALOME_Exception( error );
+  
+  return _offsetShape;
+}
+
+bool StdMeshers_ViscousLayerBuilder::AddLayers( SMESH_Mesh & shrinkMesh, SMESH_Mesh & theMesh, const TopoDS_Shape& theShape )
+{
+  bool success = _vlBuilder->MakeViscousLayers( shrinkMesh, theMesh, theShape );
+  
+  if ( !success )
+    throw SALOME_Exception( "Error building viscous layer from shrink geometry." );
+
+  return success;
+}
diff --git a/src/StdMeshers/StdMeshers_ViscousLayerBuilder.hxx b/src/StdMeshers/StdMeshers_ViscousLayerBuilder.hxx
new file mode 100644 (file)
index 0000000..dc3aaba
--- /dev/null
@@ -0,0 +1,107 @@
+// Copyright (C) 2007-2024  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   : StdMeshers_ViscousLayersBuilder.hxx
+//  Module : SMESH
+//
+#ifndef _SMESH_ViscourLayerBuilder_HXX_
+#define _SMESH_ViscourLayerBuilder_HXX_
+
+#include <BRepOffset_MakeOffset.hxx>
+#include <BRepOffset_Offset.hxx>
+
+#include "SMESH_StdMeshers.hxx"
+#include "SMESH_Hypothesis.hxx"
+#include "StdMeshers_Cartesian_VL.hxx"
+#include "StdMeshers_ViscousLayers.hxx"
+#include "StdMeshers_ViscousLayers2D.hxx"
+
+
+class STDMESHERS_EXPORT StdMeshers_ViscousLayerBuilder: public SMESH_2D_Algo
+{
+ public:
+  StdMeshers_ViscousLayerBuilder(int hypId, SMESH_Gen* gen);
+  ~StdMeshers_ViscousLayerBuilder();
+
+  virtual bool CheckHypothesis(SMESH_Mesh&                          aMesh,
+                               const TopoDS_Shape&                  aShape,
+                               SMESH_Hypothesis::Hypothesis_Status& aStatus);
+
+  virtual bool Compute(SMESH_Mesh& /*aMesh*/, const TopoDS_Shape& /*aShape*/ );
+
+  virtual bool Evaluate(SMESH_Mesh & /*aMesh*/, const TopoDS_Shape & /*aShape*/,
+                        MapShapeNbElems& /*aResMap*/ );
+
+  /*!
+   * \brief Check if the algo is applicable to the geometry and dimension
+  */
+  virtual bool IsApplicable( const TopoDS_Shape &S, bool /*toCheckAll*/, int algoDim );  
+
+  void   SetBndShapes(const std::vector<int>& shapeIds, bool toIgnore);
+  // std::vector<int> GetBndShapes() const { return _shapeIds; }
+  // bool   IsToIgnoreShapes() const { return _isToIgnoreShapes; }
+
+  void   SetTotalThickness(double thickness);
+  // double GetTotalThickness() const { return _thickness; }
+
+  void   SetNumberLayers(int nb);
+  // int    GetNumberLayers() const { return _nbLayers; }
+
+  void   SetStretchFactor(double factor);
+  // double GetStretchFactor() const { return _stretchFactor; }
+
+  void   SetMethod( StdMeshers_ViscousLayers::ExtrusionMethod how );
+  // StdMeshers_ViscousLayers::ExtrusionMethod GetMethod() const { return _method; }
+
+  // name of a group to create
+  void SetGroupName(const std::string& name);
+  // const std::string& GetGroupName() const { return _groupName; }
+
+   /*!
+   * \brief Compute a shrink version of the geometry. 
+   *        Use the BRepOffset_MakeOffset to perfom the operations for Solids. 
+   *        Use BRepBuilderAPI_MakeFace to perform the operation for planar faces.
+   * \remark For possitive offsets, planar faces are shrink in all directions BRepBuilderAPI_MakeFace does not support coarse grained edge selection.
+    * \param theMesh - the built mesh
+    * \param theShape - the geometry to be shrink
+    * \retval TopoDS_Shape - a new shape of the shrink geometry
+   */
+  TopoDS_Shape GetShrinkGeometry( SMESH_Mesh & theMesh, const TopoDS_Shape & theShape );
+
+    /*!
+   * \brief Build the elements of the viscous layer based on the shrinkMesh and copied to theMesh 
+    * \param shrinkMesh - the mesh defined on the shrink geometry
+    * \param theMesh - the final mesh with the combination of the shrink mesh and the viscous layer
+    * \param theShape - the original geometry
+    * \retval bool - Ok if success in the operation
+   */
+  bool AddLayers( SMESH_Mesh & shrinkMesh, SMESH_Mesh & theMesh, const TopoDS_Shape & theShape );
+
+  private:
+    
+    
+    StdMeshers_ViscousLayers2D*                     _hyp;
+    StdMeshers_Cartesian_VL::ViscousBuilder*  _vlBuilder;
+
+    BRepOffset_MakeOffset                     _makeOffset;
+    BRepOffset_Offset                     _makeFaceOffset;
+    TopoDS_Shape                             _offsetShape;
+};
+
+#endif
index 822f1742c1910d5998d54c606851e10b965bc5aa..c3f22bc5f32bad198fecd779ca3db3351e584814 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
 #include "SMESH_subMeshEventListener.hxx"
 #include "StdMeshers_FaceSide.hxx"
 #include "StdMeshers_ProjectionUtils.hxx"
+#include "StdMeshers_Quadrangle_2D.hxx"
 #include "StdMeshers_ViscousLayers2D.hxx"
 
+#include <Basics_OCCTVersion.hxx>
+
+#if OCC_VERSION_LARGE < 0x07070000
 #include <Adaptor3d_HSurface.hxx>
+#else
+#include <Adaptor3d_Surface.hxx>
+#endif
+
 #include <BRepAdaptor_Curve.hxx>
 #include <BRepAdaptor_Curve2d.hxx>
 #include <BRepAdaptor_Surface.hxx>
-//#include <BRepLProp_CLProps.hxx>
 #include <BRepLProp_SLProps.hxx>
 #include <BRepOffsetAPI_MakeOffsetShape.hxx>
 #include <BRep_Tool.hxx>
 #include <unordered_map>
 
 #ifdef _DEBUG_
-//#define __myDEBUG
+#ifndef WIN32
+#define __myDEBUG
+#endif
 //#define __NOT_INVALIDATE_BAD_SMOOTH
 //#define __NODES_AT_POS
 #endif
@@ -385,6 +394,7 @@ namespace VISCOUS_3D
   struct _LayerEdge;
   struct _EdgesOnShape;
   struct _Smoother1D;
+  struct _Mapper2D;
   typedef map< const SMDS_MeshNode*, _LayerEdge*, TIDCompare > TNode2Edge;
 
   //--------------------------------------------------------------------------------
@@ -444,6 +454,10 @@ namespace VISCOUS_3D
                          const TopoDS_Face&    F,
                          _EdgesOnShape&        eos,
                          SMESH_MesherHelper&   helper );
+    bool UpdatePositionOnSWOL( SMDS_MeshNode*      n,
+                               double              tol,
+                               _EdgesOnShape&      eos,
+                               SMESH_MesherHelper& helper );
     void SetDataByNeighbors( const SMDS_MeshNode* n1,
                              const SMDS_MeshNode* n2,
                              const _EdgesOnShape& eos,
@@ -494,7 +508,7 @@ namespace VISCOUS_3D
     bool   IsOnFace() const { return ( _nodes[0]->GetPosition()->GetDim() == 2 ); }
     int    BaseShapeDim() const { return _nodes[0]->GetPosition()->GetDim(); }
     gp_XYZ Copy( _LayerEdge& other, _EdgesOnShape& eos, SMESH_MesherHelper& helper );
-    void   SetCosin( double cosin );
+    double SetCosin( double cosin );
     void   SetNormal( const gp_XYZ& n ) { _normal = n; }
     void   SetMaxLen( double l ) { _maxLen = l; }
     int    NbSteps() const { return _pos.size() - 1; } // nb inlation steps
@@ -623,6 +637,14 @@ namespace VISCOUS_3D
     bool   ToCreateGroup()     const { return !_groupName.empty(); }
     const std::string& GetGroupName() const { return _groupName; }
 
+    double Get1stLayerThickness( double realThickness = 0.) const
+    {
+      const double T = ( realThickness > 0 ) ? realThickness : GetTotalThickness();
+      const double f = GetStretchFactor();
+      const int    N = GetNumberLayers();
+      return StdMeshers_ViscousLayers::Get1stLayerThickness( T, f, N );
+    }
+
     bool   UseSurfaceNormal()  const
     { return _method == StdMeshers_ViscousLayers::SURF_OFFSET_SMOOTH; }
     bool   ToSmooth()          const
@@ -672,6 +694,8 @@ namespace VISCOUS_3D
 
     Handle(ShapeAnalysis_Surface) _offsetSurf;
     _LayerEdge*                   _edgeForOffset;
+    double                        _offsetValue;
+    _Mapper2D*                    _mapper2D;
 
     _SolidData*            _data; // parent SOLID
 
@@ -685,8 +709,11 @@ namespace VISCOUS_3D
     { return std::find( _eosC1.begin(), _eosC1.end(), other ) != _eosC1.end(); }
     bool             GetNormal( const SMDS_MeshElement* face, gp_Vec& norm );
     _SolidData&      GetData() const { return *_data; }
+    char             ShapeTypeLetter() const
+    { switch ( ShapeType() ) { case TopAbs_FACE: return 'F'; case TopAbs_EDGE: return 'E';
+      case TopAbs_VERTEX: return 'V'; default: return 'S'; }}
 
-    _EdgesOnShape(): _shapeID(-1), _subMesh(0), _toSmooth(false), _edgeSmoother(0) {}
+    _EdgesOnShape(): _shapeID(-1), _subMesh(0), _toSmooth(false), _edgeSmoother(0), _mapper2D(0) {}
     ~_EdgesOnShape();
   };
 
@@ -925,7 +952,7 @@ namespace VISCOUS_3D
                         const StdMeshers_ViscousLayers* hyp,
                         const TopoDS_Shape&             hypShape,
                         set<TGeomID>&                   ignoreFaces);
-    void makeEdgesOnShape();
+    int makeEdgesOnShape();
     bool makeLayer(_SolidData& data);
     void setShapeData( _EdgesOnShape& eos, SMESH_subMesh* sm, _SolidData& data );
     bool setEdgeData( _LayerEdge& edge, _EdgesOnShape& eos,
@@ -1105,6 +1132,22 @@ namespace VISCOUS_3D
 
     void offPointsToPython() const; // debug
   };
+
+  //--------------------------------------------------------------------------------
+  /*!
+   * \brief Compute positions of nodes of 2D structured mesh using TFI
+   */
+  class _Mapper2D
+  {
+    FaceQuadStruct _quadPoints;
+
+    UVPtStruct& uvPnt( size_t i, size_t j ) { return _quadPoints.UVPt( i, j ); }
+
+  public:
+    _Mapper2D( const TParam2ColumnMap & param2ColumnMap, const TNode2Edge& n2eMap );
+    bool ComputeNodePositions();
+  };
+
   //--------------------------------------------------------------------------------
   /*!
    * \brief Class of temporary mesh face.
@@ -1403,7 +1446,17 @@ bool StdMeshers_ViscousLayers::IsShapeWithLayers(int shapeIndex) const
     ( std::find( _shapeIds.begin(), _shapeIds.end(), shapeIndex ) != _shapeIds.end() );
   return IsToIgnoreShapes() ? !isIn : isIn;
 }
-
+// --------------------------------------------------------------------------------
+double StdMeshers_ViscousLayers::Get1stLayerThickness( double T, double f, int N )
+{
+  const double fPowN = pow( f, N );
+  double h0;
+  if ( fPowN - 1 <= numeric_limits<double>::min() )
+    h0 = T / N;
+  else
+    h0 = T * ( f - 1 )/( fPowN - 1 );
+  return h0;
+}
 // --------------------------------------------------------------------------------
 SMDS_MeshGroup* StdMeshers_ViscousLayers::CreateGroup( const std::string&  theName,
                                                        SMESH_Mesh&         theMesh,
@@ -1438,17 +1491,42 @@ SMDS_MeshGroup* StdMeshers_ViscousLayers::CreateGroup( const std::string&  theNa
 
 namespace VISCOUS_3D
 {
-  gp_XYZ getEdgeDir( const TopoDS_Edge& E, const TopoDS_Vertex& fromV )
+  gp_XYZ getEdgeDir( const TopoDS_Edge& E, const TopoDS_Vertex& fromV,
+                     const double h0, bool* isRegularEdge = nullptr )
   {
     gp_Vec dir;
     double f,l;
     Handle(Geom_Curve) c = BRep_Tool::Curve( E, f, l );
     if ( c.IsNull() ) return gp_XYZ( Precision::Infinite(), 1e100, 1e100 );
-    gp_Pnt p = BRep_Tool::Pnt( fromV );
-    double distF = p.SquareDistance( c->Value( f ));
-    double distL = p.SquareDistance( c->Value( l ));
+    gp_Pnt  p = BRep_Tool::Pnt( fromV );
+    gp_Pnt pf = c->Value( f ), pl = c->Value( l );
+    double distF = p.SquareDistance( pf );
+    double distL = p.SquareDistance( pl );
     c->D1(( distF < distL ? f : l), p, dir );
     if ( distL < distF ) dir.Reverse();
+    bool isDifficult = false;
+    if ( dir.SquareMagnitude() < h0 * h0 ) // check dir orientation
+    {
+      gp_Pnt& pClose = distF < distL ? pf : pl;
+      gp_Pnt&   pFar = distF < distL ? pl : pf;
+      gp_Pnt    pMid = 0.9 * pClose.XYZ() + 0.1 * pFar.XYZ();
+      gp_Vec vMid( p, pMid );
+      double     dot = vMid * dir;
+      double    cos2 = dot * dot / dir.SquareMagnitude() / vMid.SquareMagnitude();
+      if ( cos2 < 0.7 * 0.7 || dot < 0 ) // large angle between dir and vMid
+      {
+        double uClose = distF < distL ? f : l;
+        double   uFar = distF < distL ? l : f;
+        double      r = h0 / SMESH_Algo::EdgeLength( E );
+        double   uMid = ( 1 - r ) * uClose + r * uFar;
+        pMid = c->Value( uMid );
+        dir = gp_Vec( p, pMid );
+        isDifficult = true;
+      }
+    }
+    if ( isRegularEdge )
+      *isRegularEdge = !isDifficult;
+
     return dir.XYZ();
   }
   //--------------------------------------------------------------------------------
@@ -1465,8 +1543,8 @@ namespace VISCOUS_3D
   }
   //--------------------------------------------------------------------------------
   gp_XYZ getFaceDir( const TopoDS_Face& F, const TopoDS_Vertex& fromV,
-                     const SMDS_MeshNode* node, SMESH_MesherHelper& helper, bool& ok,
-                     double* cosin=0);
+                     const SMDS_MeshNode* node, SMESH_MesherHelper& helper, bool& ok/*,
+                     double* cosin=0*/);
   //--------------------------------------------------------------------------------
   gp_XYZ getFaceDir( const TopoDS_Face& F, const TopoDS_Edge& fromE,
                      const SMDS_MeshNode* node, SMESH_MesherHelper& helper, bool& ok)
@@ -1507,7 +1585,7 @@ namespace VISCOUS_3D
   //--------------------------------------------------------------------------------
   gp_XYZ getFaceDir( const TopoDS_Face& F, const TopoDS_Vertex& fromV,
                      const SMDS_MeshNode* node, SMESH_MesherHelper& helper,
-                     bool& ok, double* cosin)
+                     bool& ok/*, double* cosin*/)
   {
     TopoDS_Face faceFrw = F;
     faceFrw.Orientation( TopAbs_FORWARD );
@@ -1539,7 +1617,7 @@ namespace VISCOUS_3D
       ok = true;
       for ( size_t i = 0; i < nbEdges && ok; ++i )
       {
-        edgeDir[i] = getEdgeDir( edges[i], fromV );
+        edgeDir[i] = getEdgeDir( edges[i], fromV, 0.1 * SMESH_Algo::EdgeLength( edges[i] ));
         double size2 = edgeDir[i].SquareModulus();
         if (( ok = size2 > numeric_limits<double>::min() ))
           edgeDir[i] /= sqrt( size2 );
@@ -1559,15 +1637,15 @@ namespace VISCOUS_3D
         if ( angle < 0 )
           dir.Reverse();
       }
-      if ( cosin ) {
-        double angle = gp_Vec( edgeDir[0] ).Angle( dir );
-        *cosin = Cos( angle );
-      }
+      // if ( cosin ) {
+      //   double angle = faceNormal.Angle( dir );
+      //   *cosin = Cos( angle );
+      // }
     }
     else if ( nbEdges == 1 )
     {
       dir = getFaceDir( faceFrw, edges[ edges[0].IsNull() ], node, helper, ok );
-      if ( cosin ) *cosin = 1.;
+      //if ( cosin ) *cosin = 1.;
     }
     else
     {
@@ -1751,8 +1829,13 @@ namespace VISCOUS_3D
     //case GeomAbs_SurfaceOfExtrusion:
     case GeomAbs_OffsetSurface:
     {
+#if OCC_VERSION_LARGE < 0x07070000
       Handle(Adaptor3d_HSurface) base = surface.BasisSurface();
       return getRovolutionAxis( base->Surface(), axis );
+#else
+      Handle(Adaptor3d_Surface) base = surface.BasisSurface();
+      return getRovolutionAxis( *base, axis );
+#endif
     }
     default: return false;
     }
@@ -1761,8 +1844,8 @@ namespace VISCOUS_3D
 
   //--------------------------------------------------------------------------------
   // DEBUG. Dump intermediate node positions into a python script
-  // HOWTO use: run python commands written in a console to see
-  //  construction steps of viscous layers
+  // HOWTO use: run python commands written in a console and defined in /tmp/viscous.py
+  // to see construction steps of viscous layers
 #ifdef __myDEBUG
   ostream* py;
   int      theNbPyFunc;
@@ -1963,9 +2046,6 @@ SMESH_ComputeErrorPtr _ViscousBuilder::Compute(SMESH_Mesh&         theMesh,
   if ( _ViscousListener::GetSolidMesh( _mesh, exp.Current(), /*toCreate=*/false))
     return SMESH_ComputeErrorPtr(); // everything already computed
 
-  PyDump debugDump( theMesh );
-  _pyDump = &debugDump;
-
   // TODO: ignore already computed SOLIDs
   if ( !findSolidsWithLayers())
     return _error;
@@ -1973,16 +2053,15 @@ SMESH_ComputeErrorPtr _ViscousBuilder::Compute(SMESH_Mesh&         theMesh,
   if ( !findFacesWithLayers() )
     return _error;
 
-  // for ( size_t i = 0; i < _sdVec.size(); ++i )
-  // {
-  //   if ( ! makeLayer( _sdVec[ i ]))   // create _LayerEdge's
-  //     return _error;
-  // }
-
-  makeEdgesOnShape();
+  if ( !makeEdgesOnShape() )
+    return _error;
 
   findPeriodicFaces();
 
+  PyDump debugDump( theMesh );
+  _pyDump = &debugDump;
+
+
   for ( size_t i = 0; i < _sdVec.size(); ++i )
   {
     size_t iSD = 0;
@@ -1991,6 +2070,8 @@ SMESH_ComputeErrorPtr _ViscousBuilder::Compute(SMESH_Mesh&         theMesh,
            !_sdVec[iSD]._solid.IsNull() &&
            !_sdVec[iSD]._done )
         break;
+    if ( iSD == _sdVec.size() )
+      break; // all done
 
     if ( ! makeLayer(_sdVec[iSD]) )   // create _LayerEdge's
       return _error;
@@ -2366,7 +2447,14 @@ bool _ViscousBuilder::findFacesWithLayers(const bool onlyWith)
         break;
       }
       default:
-        return error("Not yet supported case", _sdVec[i]._index);
+        std::ostringstream msg;
+        msg << "Not yet supported case: vertex bounded by ";
+        msg << facesWOL.size();
+        msg << " faces without layer at coordinates (";
+        TopoDS_Vertex v = TopoDS::Vertex(vertex);
+        gp_Pnt p = BRep_Tool::Pnt(v);
+        msg << p.X() << ", " << p.Y() << ", " << p.Z() << ")";
+        return error(msg.str().c_str(), _sdVec[i]._index);
       }
     }
   }
@@ -2617,6 +2705,7 @@ bool _ViscousBuilder::makeLayer(_SolidData& data)
 
   // Create temporary faces and _LayerEdge's
 
+  debugMsg( "######################" );
   dumpFunction(SMESH_Comment("makeLayers_")<<data._index);
 
   vector< _EdgesOnShape >& edgesByGeom = data._edgesOnShape;
@@ -2677,7 +2766,7 @@ bool _ViscousBuilder::makeLayer(_SolidData& data)
             nbDegenNodes++;
           }
         }
-        TNode2Edge::iterator n2e = data._n2eMap.insert( make_pair( n, (_LayerEdge*)0 )).first;
+        TNode2Edge::iterator n2e = data._n2eMap.insert({ n, nullptr }).first;
         if ( !(*n2e).second )
         {
           // add a _LayerEdge
@@ -2711,13 +2800,12 @@ bool _ViscousBuilder::makeLayer(_SolidData& data)
             if ( !setEdgeData( *edge, edgesByGeom[ shapeID ], helper, data ))
               return false;
 
-            if ( edge->_nodes.size() < 2 )
-              edge->Block( data );
-              //data._noShrinkShapes.insert( shapeID );
+            if ( edge->_nodes.size() < 2 && !noShrink )
+              edge->Block( data ); // a sole node is moved only if noShrink
           }
           dumpMove(edge->_nodes.back());
 
-          if ( edge->_cosin > faceMaxCosin )
+          if ( edge->_cosin > faceMaxCosin && edge->_nodes.size() > 1 )
           {
             faceMaxCosin = edge->_cosin;
             maxCosinEdge = edge;
@@ -2767,6 +2855,42 @@ bool _ViscousBuilder::makeLayer(_SolidData& data)
         if (( n2e = data._n2eMap.find( *node )) != data._n2eMap.end() )
           edge->_neibors.push_back( n2e->second );
     }
+
+    // Fix uv of nodes on periodic FACEs (bos #20643)
+
+    if ( eos.ShapeType() != TopAbs_EDGE ||
+         eos.SWOLType()  != TopAbs_FACE ||
+         eos.size() == 0 )
+      continue;
+
+    const TopoDS_Face& F = TopoDS::Face( eos._sWOL );
+    SMESH_MesherHelper faceHelper( *_mesh );
+    faceHelper.SetSubShape( F );
+    faceHelper.ToFixNodeParameters( true );
+    if ( faceHelper.GetPeriodicIndex() == 0 )
+      continue;
+
+    SMESHDS_SubMesh* smDS = getMeshDS()->MeshElements( F );
+    if ( !smDS || smDS->GetNodes() == 0 )
+      continue;
+
+    bool toCheck = true;
+    const double tol = 2 * helper.MaxTolerance( F );
+    for ( SMDS_NodeIteratorPtr nIt = smDS->GetNodes(); nIt->more(); )
+    {
+      const SMDS_MeshNode* node = nIt->next();
+      gp_XY uvNew( Precision::Infinite(), 0 );
+      if ( toCheck )
+      {
+        toCheck = false;
+        gp_XY uv = faceHelper.GetNodeUV( F, node );
+        if ( ! faceHelper.CheckNodeUV( F, node, uvNew, tol, /*force=*/true ))
+          break; // projection on F failed
+        if (( uv - uvNew ).Modulus() < Precision::Confusion() )
+          break; // current uv is OK
+      }
+      faceHelper.CheckNodeUV( F, node, uvNew, tol, /*force=*/true );
+    }
   }
 
   data._epsilon = 1e-7;
@@ -2937,6 +3061,7 @@ void _ViscousBuilder::limitStepSizeByCurvature( _SolidData& data )
     cnvFace._face = F;
     cnvFace._normalsFixed = false;
     cnvFace._isTooCurved = false;
+    cnvFace._normalsFixedOnBorders = false;
 
     double maxCurvature = cnvFace.GetMaxCurvature( data, eof, surfProp, helper );
     if ( maxCurvature > 0 )
@@ -3120,13 +3245,13 @@ bool _ViscousBuilder::findShapesToSmooth( _SolidData& data )
     if ( SMESH_Algo::isDegenerated( E ) || !edgesOfSmooFaces.Contains( E ))
       continue;
 
-    double tgtThick = eos._hyp.GetTotalThickness();
+    double tgtThick = eos._hyp.GetTotalThickness(), h0 = eos._hyp.Get1stLayerThickness();
     for ( TopoDS_Iterator vIt( E ); vIt.More() && !eos._toSmooth; vIt.Next() )
     {
       TGeomID iV = getMeshDS()->ShapeToIndex( vIt.Value() );
       vector<_LayerEdge*>& eV = edgesByGeom[ iV ]._edges;
       if ( eV.empty() || eV[0]->Is( _LayerEdge::MULTI_NORMAL )) continue;
-      gp_Vec  eDir    = getEdgeDir( E, TopoDS::Vertex( vIt.Value() ));
+      gp_Vec  eDir    = getEdgeDir( E, TopoDS::Vertex( vIt.Value() ), h0 );
       double angle    = eDir.Angle( eV[0]->_normal );
       double cosin    = Cos( angle );
       double cosinAbs = Abs( cosin );
@@ -3304,7 +3429,7 @@ bool _ViscousBuilder::findShapesToSmooth( _SolidData& data )
     {
       _EdgesOnShape* eoe = data.GetShapeEdges( *e );
       if ( !eoe ) continue; // other solid
-      gp_XYZ eDir = getEdgeDir( TopoDS::Edge( *e ), V );
+      gp_XYZ eDir = getEdgeDir( TopoDS::Edge( *e ), V, eoe->_hyp.Get1stLayerThickness() );
       if ( !Precision::IsInfinite( eDir.X() ))
         dirOfEdges.push_back( make_pair( eoe, eDir.Normalized() ));
     }
@@ -3350,9 +3475,10 @@ bool _ViscousBuilder::findShapesToSmooth( _SolidData& data )
  */
 //================================================================================
 
-void _ViscousBuilder::makeEdgesOnShape()
+int _ViscousBuilder::makeEdgesOnShape()
 {
   const int nbShapes = getMeshDS()->MaxShapeIndex();
+  int nbSolidsWL = 0;
 
   for ( size_t i = 0; i < _sdVec.size(); ++i )
   {
@@ -3361,6 +3487,7 @@ void _ViscousBuilder::makeEdgesOnShape()
     edgesByGeom.resize( nbShapes+1 );
 
     // set data of _EdgesOnShape's
+    int nbShapesWL = 0;
     if ( SMESH_subMesh* sm = _mesh->GetSubMesh( data._solid ))
     {
       SMESH_subMeshIteratorPtr smIt = sm->getDependsOnIterator(/*includeSelf=*/false);
@@ -3372,9 +3499,21 @@ void _ViscousBuilder::makeEdgesOnShape()
           continue;
 
         setShapeData( edgesByGeom[ sm->GetId() ], sm, data );
+
+        nbShapesWL += ( sm->GetSubShape().ShapeType() == TopAbs_FACE );
       }
     }
+    if ( nbShapesWL == 0 ) // no shapes with layers in a SOLID
+    {
+      data._done = true;
+      SMESHUtils::FreeVector( edgesByGeom );
+    }
+    else
+    {
+      ++nbSolidsWL;
+    }
   }
+  return nbSolidsWL;
 }
 
 //================================================================================
@@ -3400,6 +3539,7 @@ void _ViscousBuilder::setShapeData( _EdgesOnShape& eos,
     eos._shape.Orientation( helper.GetSubShapeOri( data._solid, eos._shape ));
   eos._toSmooth = false;
   eos._data = &data;
+  eos._mapper2D = nullptr;
 
   // set _SWOL
   map< TGeomID, TopoDS_Shape >::const_iterator s2s =
@@ -3520,6 +3660,7 @@ bool _EdgesOnShape::GetNormal( const SMDS_MeshElement* face, gp_Vec& norm )
 _EdgesOnShape::~_EdgesOnShape()
 {
   delete _edgeSmoother;
+  delete _mapper2D;
 }
 
 //================================================================================
@@ -3601,13 +3742,14 @@ bool _ViscousBuilder::setEdgeData(_LayerEdge&         edge,
       if ( eos.SWOLType() == TopAbs_EDGE )
       {
         // inflate from VERTEX along EDGE
-        edge._normal = getEdgeDir( TopoDS::Edge( eos._sWOL ), TopoDS::Vertex( eos._shape ));
+        edge._normal = getEdgeDir( TopoDS::Edge( eos._sWOL ), TopoDS::Vertex( eos._shape ),
+                                   eos._hyp.Get1stLayerThickness(), &eos._isRegularSWOL );
       }
       else if ( eos.ShapeType() == TopAbs_VERTEX )
       {
         // inflate from VERTEX along FACE
         edge._normal = getFaceDir( TopoDS::Face( eos._sWOL ), TopoDS::Vertex( eos._shape ),
-                                   node, helper, normOK, &edge._cosin);
+                                   node, helper, normOK/*, &edge._cosin*/);
       }
       else
       {
@@ -3696,30 +3838,37 @@ bool _ViscousBuilder::setEdgeData(_LayerEdge&         edge,
       break;
     }
     case TopAbs_VERTEX: {
+      TopoDS_Vertex V  = TopoDS::Vertex( eos._shape );
+      gp_Vec inFaceDir = getFaceDir( face2Norm[0].first , V, node, helper, normOK );
+      double angle     = inFaceDir.Angle( edge._normal ); // [0,PI]
+      edge._cosin      = Cos( angle );
       if ( fromVonF )
-      {
-        getFaceDir( TopoDS::Face( eos._sWOL ), TopoDS::Vertex( eos._shape ),
-                    node, helper, normOK, &edge._cosin );
-      }
-      else if ( eos.SWOLType() != TopAbs_FACE ) // else _cosin is set by getFaceDir()
-      {
-        TopoDS_Vertex V  = TopoDS::Vertex( eos._shape );
-        gp_Vec inFaceDir = getFaceDir( F, V, node, helper, normOK );
-        double angle     = inFaceDir.Angle( edge._normal ); // [0,PI]
-        edge._cosin      = Cos( angle );
-        if ( totalNbFaces > 2 || helper.IsSeamShape( node->getshapeId() ))
-          for ( int iF = 1; iF < totalNbFaces; ++iF )
-          {
-            F = face2Norm[ iF ].first;
-            inFaceDir = getFaceDir( F, V, node, helper, normOK=true );
-            if ( normOK ) {
-              double angle = inFaceDir.Angle( edge._normal );
-              double cosin = Cos( angle );
-              if ( Abs( cosin ) > Abs( edge._cosin ))
-                edge._cosin = cosin;
+        totalNbFaces--;
+      if ( totalNbFaces > 1 || helper.IsSeamShape( node->getshapeId() ))
+        for ( int iF = 1; iF < totalNbFaces; ++iF )
+        {
+          F = face2Norm[ iF ].first;
+          inFaceDir = getFaceDir( F, V, node, helper, normOK=true );
+          if ( normOK ) {
+            if ( onShrinkShape )
+            {
+              gp_Vec faceNorm = getFaceNormal( node, F, helper, normOK );
+              if ( !normOK ) continue;
+              if ( helper.GetSubShapeOri( data._solid, F ) != TopAbs_REVERSED )
+                faceNorm.Reverse();
+              angle = 0.5 * M_PI - faceNorm.Angle( edge._normal );
+              if ( inFaceDir * edge._normal < 0 )
+                angle = M_PI - angle;
+            }
+            else
+            {
+              angle = inFaceDir.Angle( edge._normal );
             }
+            double cosin = Cos( angle );
+            if ( Abs( cosin ) > Abs( edge._cosin ))
+              edge._cosin = cosin;
           }
-      }
+        }
       break;
     }
     default:
@@ -3744,7 +3893,20 @@ bool _ViscousBuilder::setEdgeData(_LayerEdge&         edge,
   // Set the rest data
   // --------------------
 
-  edge.SetCosin( edge._cosin ); // to update edge._lenFactor
+  double realLenFactor = edge.SetCosin( edge._cosin ); // to update edge._lenFactor
+  // if ( realLenFactor > 3 )
+  // {
+  //   edge._cosin = 1;
+  //   if ( onShrinkShape )
+  //   {
+  //     edge.Set( _LayerEdge::RISKY_SWOL );
+  //     edge._lenFactor = 2;
+  //   }
+  //   else
+  //   {
+  //     edge._lenFactor = 1;
+  //   }
+  // }
 
   if ( onShrinkShape )
   {
@@ -3768,7 +3930,7 @@ bool _ViscousBuilder::setEdgeData(_LayerEdge&         edge,
         getMeshDS()->SetNodeOnFace( tgtNode, TopoDS::Face( eos._sWOL ), uv.X(), uv.Y() );
     }
 
-    if ( edge._nodes.size() > 1 )
+    //if ( edge._nodes.size() > 1 ) -- allow RISKY_SWOL on noShrink shape
     {
       // check if an angle between a FACE with layers and SWOL is sharp,
       // else the edge should not inflate
@@ -3783,10 +3945,14 @@ bool _ViscousBuilder::setEdgeData(_LayerEdge&         edge,
           geomNorm.Reverse(); // inside the SOLID
         if ( geomNorm * edge._normal < -0.001 )
         {
-          getMeshDS()->RemoveFreeNode( tgtNode, 0, /*fromGroups=*/false );
-          edge._nodes.resize( 1 );
+          if ( edge._nodes.size() > 1 )
+          {
+            getMeshDS()->RemoveFreeNode( tgtNode, 0, /*fromGroups=*/false );
+            edge._nodes.resize( 1 );
+          }
         }
-        else if ( edge._lenFactor > 3 )
+        else if ( realLenFactor > 3 ) ///  -- moved to SetCosin()
+          //else if ( edge._lenFactor > 3 )
         {
           edge._lenFactor = 2;
           edge.Set( _LayerEdge::RISKY_SWOL );
@@ -4153,7 +4319,7 @@ void _OffsetPlane::ComputeIntersectionLine( _OffsetPlane&        pln,
     // parallel planes - intersection is an offset of the common EDGE
     gp_Pnt p = BRep_Tool::Pnt( V );
     linePos  = 0.5 * (( p.XYZ() + n1 ) + ( p.XYZ() + n2 ));
-    lineDir  = getEdgeDir( E, V );
+    lineDir  = getEdgeDir( E, V, 0.1 * SMESH_Algo::EdgeLength( E ));
   }
   else
   {
@@ -4404,12 +4570,23 @@ gp_XYZ _LayerEdge::Copy( _LayerEdge&         other,
  */
 //================================================================================
 
-void _LayerEdge::SetCosin( double cosin )
+double _LayerEdge::SetCosin( double cosin )
 {
   _cosin = cosin;
   cosin = Abs( _cosin );
-  //_lenFactor = ( cosin < 1.-1e-12 ) ?  Min( 2., 1./sqrt(1-cosin*cosin )) : 1.0;
-  _lenFactor = ( cosin < 1.-1e-12 ) ?  1./sqrt(1-cosin*cosin ) : 1.0;
+  //_lenFactor = ( cosin < 1.-1e-12 ) ?  1./sqrt(1-cosin*cosin ) : 1.0;
+  double realLenFactor;
+  if ( cosin < 1.-1e-12 )
+  {
+    _lenFactor = realLenFactor = 1./sqrt(1-cosin*cosin );
+  }
+  else
+  {
+    _lenFactor = 1;
+    realLenFactor = Precision::Infinite();
+  }
+
+  return realLenFactor;
 }
 
 //================================================================================
@@ -4490,7 +4667,9 @@ void _Simplex::SortSimplices(vector<_Simplex>& simplices)
 
 void _ViscousBuilder::makeGroupOfLE()
 {
-#ifdef _DEBUG_
+  if (!SALOME::VerbosityActivated())
+    return;
+
   for ( size_t i = 0 ; i < _sdVec.size(); ++i )
   {
     if ( _sdVec[i]._n2eMap.empty() ) continue;
@@ -4546,7 +4725,6 @@ void _ViscousBuilder::makeGroupOfLE()
              << "'%s-%s' % (faceId1+1, faceId2))");
     dumpFunctionEnd();
   }
-#endif
 }
 
 //================================================================================
@@ -4590,7 +4768,7 @@ void _ViscousBuilder::computeGeomSize( _SolidData& data )
     double thinkness = eos._hyp.GetTotalThickness();
     for ( size_t i = 0; i < eos._edges.size(); ++i )
     {
-      if ( eos._edges[i]->Is( _LayerEdge::BLOCKED )) continue;
+      if ( eos._edges[i]->_nodes.size() < 2 ) continue;
       eos._edges[i]->SetMaxLen( thinkness );
       eos._edges[i]->FindIntersection( *searcher, intersecDist, data._epsilon, eos, &face );
       if ( intersecDist > 0 && face )
@@ -4781,7 +4959,7 @@ bool _ViscousBuilder::inflate(_SolidData& data)
         if ( eos._edges[i]->_nodes.size() > 1 )
           avgThick    += Min( 1., eos._edges[i]->_len / shapeTgtThick );
         else
-          avgThick    += shapeTgtThick;
+          avgThick    += 1;
         nbActiveEdges += ( ! eos._edges[i]->Is( _LayerEdge::BLOCKED ));
       }
     }
@@ -4962,24 +5140,41 @@ bool _ViscousBuilder::smoothAndCheck(_SolidData& data,
         for ( size_t iEOS = 0; iEOS < eosC1.size(); ++iEOS )
         {
           isConcaveFace[ iEOS ] = data._concaveFaces.count( eosC1[ iEOS ]->_shapeID  );
-          vector< _LayerEdge* > & edges = eosC1[ iEOS ]->_edges;
-          for ( size_t i = 0; i < edges.size(); ++i )
-            if ( edges[i]->Is( _LayerEdge::MOVED ) ||
-                 edges[i]->Is( _LayerEdge::NEAR_BOUNDARY ))
-              movedEdges.push_back( edges[i] );
 
+          if ( eosC1[ iEOS ]->_mapper2D )
+          {
+            // compute node position by boundary node position in structured mesh
+            dumpFunction(SMESH_Comment("map2dS")<<data._index<<"_Fa"<<eos._shapeID
+                         <<"_InfStep"<<infStep);
+
+            eosC1[ iEOS ]->_mapper2D->ComputeNodePositions();
+
+            for ( _LayerEdge* le : eosC1[ iEOS ]->_edges )
+              le->_pos.back() = SMESH_NodeXYZ( le->_nodes.back() );
+
+            dumpFunctionEnd();
+          }
+          else
+          {
+            for ( _LayerEdge* le : eosC1[ iEOS ]->_edges )
+              if ( le->Is( _LayerEdge::MOVED ) ||
+                   le->Is( _LayerEdge::NEAR_BOUNDARY ))
+                movedEdges.push_back( le );
+          }
           makeOffsetSurface( *eosC1[ iEOS ], helper );
         }
 
         int step = 0, stepLimit = 5, nbBad = 0;
         while (( ++step <= stepLimit ) || improved )
         {
-          dumpFunction(SMESH_Comment("smooth")<<data._index<<"_Fa"<<sInd
-                       <<"_InfStep"<<infStep<<"_"<<step); // debug
           int oldBadNb = nbBad;
           badEdges.clear();
 
 #ifdef INCREMENTAL_SMOOTH
+          // smooth moved only
+          if ( !movedEdges.empty() )
+            dumpFunction(SMESH_Comment("smooth")<<data._index<<"_Fa"<<sInd
+                         <<"_InfStep"<<infStep<<"_"<<step); // debug
           bool findBest = false; // ( step == stepLimit );
           for ( size_t i = 0; i < movedEdges.size(); ++i )
           {
@@ -4988,9 +5183,14 @@ bool _ViscousBuilder::smoothAndCheck(_SolidData& data,
               badEdges.push_back( movedEdges[i] );
           }
 #else
+          // smooth all
+          dumpFunction(SMESH_Comment("smooth")<<data._index<<"_Fa"<<sInd
+                       <<"_InfStep"<<infStep<<"_"<<step); // debug
           bool findBest = ( step == stepLimit || isConcaveFace[ iEOS ]);
           for ( size_t iEOS = 0; iEOS < eosC1.size(); ++iEOS )
           {
+            if ( eosC1[ iEOS ]->_mapper2D )
+              continue;
             vector< _LayerEdge* > & edges = eosC1[ iEOS ]->_edges;
             for ( size_t i = 0; i < edges.size(); ++i )
             {
@@ -5061,11 +5261,11 @@ bool _ViscousBuilder::smoothAndCheck(_SolidData& data,
 
         } // smoothing steps
 
-        // project -- to prevent intersections or fix bad simplices
+        // project -- to prevent intersections or to fix bad simplices
         for ( size_t iEOS = 0; iEOS < eosC1.size(); ++iEOS )
         {
           if ( ! eosC1[ iEOS ]->_eosConcaVer.empty() || nbBad > 0 )
-            putOnOffsetSurface( *eosC1[ iEOS ], infStep, eosC1 );
+            putOnOffsetSurface( *eosC1[ iEOS ], -infStep, eosC1 );
         }
 
         //if ( !badEdges.empty() )
@@ -5237,7 +5437,7 @@ bool _ViscousBuilder::smoothAndCheck(_SolidData& data,
           continue;
 
         // ignore intersection with intFace of an adjacent FACE
-        if ( dist > 0.1 * eos._edges[i]->_len )
+        if ( dist > 0.01 * eos._edges[i]->_len )
         {
           bool toIgnore = false;
           if (  eos._toSmooth )
@@ -5273,8 +5473,11 @@ bool _ViscousBuilder::smoothAndCheck(_SolidData& data,
 
         // intersection not ignored
 
-        if ( toBlockInfaltion &&
-             dist < ( eos._edges[i]->_len * theThickToIntersection ))
+        double minDist = 0;
+        if ( eos._edges[i]->_maxLen < 0.99 * eos._hyp.GetTotalThickness() ) // limited length
+          minDist = eos._edges[i]->_len * theThickToIntersection;
+
+        if ( toBlockInfaltion && dist < minDist  )
         {
           if ( is1stBlocked ) { is1stBlocked = false; // debug
             dumpFunction(SMESH_Comment("blockIntersected") <<data._index<<"_InfStep"<<infStep);
@@ -5508,14 +5711,14 @@ void _ViscousBuilder::makeOffsetSurface( _EdgesOnShape& eos, SMESH_MesherHelper&
   // find offset
   gp_Pnt   tgtP = SMESH_TNodeXYZ( eos._edgeForOffset->_nodes.back() );
   /*gp_Pnt2d uv=*/baseSurface->ValueOfUV( tgtP, Precision::Confusion() );
-  double offset = baseSurface->Gap();
+  eos._offsetValue = baseSurface->Gap();
 
   eos._offsetSurf.Nullify();
 
   try
   {
     BRepOffsetAPI_MakeOffsetShape offsetMaker;
-    offsetMaker.PerformByJoin( eos._shape, -offset, Precision::Confusion() );
+    offsetMaker.PerformByJoin( eos._shape, -eos._offsetValue, Precision::Confusion() );
     if ( !offsetMaker.IsDone() ) return;
 
     TopExp_Explorer fExp( offsetMaker.Shape(), TopAbs_FACE );
@@ -5567,6 +5770,7 @@ void _ViscousBuilder::putOnOffsetSurface( _EdgesOnShape&            eos,
     return;
 
   double preci = BRep_Tool::Tolerance( TopoDS::Face( eof->_shape )), vol;
+  bool neighborHasRiskySWOL = false;
   for ( size_t i = 0; i < eos._edges.size(); ++i )
   {
     _LayerEdge* edge = eos._edges[i];
@@ -5578,12 +5782,23 @@ void _ViscousBuilder::putOnOffsetSurface( _EdgesOnShape&            eos,
       if ( !edge->Is( _LayerEdge::UPD_NORMAL_CONV ))
         continue;
     }
+    else if ( moveAll == _LayerEdge::RISKY_SWOL )
+    {
+      if ( !edge->Is( _LayerEdge::RISKY_SWOL ) ||
+           edge->_cosin < 0 )
+        continue;
+    }
     else if ( !moveAll && !edge->Is( _LayerEdge::MOVED ))
       continue;
 
     int nbBlockedAround = 0;
     for ( size_t iN = 0; iN < edge->_neibors.size(); ++iN )
+    {
       nbBlockedAround += edge->_neibors[iN]->Is( _LayerEdge::BLOCKED );
+      if ( edge->_neibors[iN]->Is( _LayerEdge::RISKY_SWOL ) &&
+           edge->_neibors[iN]->_cosin > 0 )
+        neighborHasRiskySWOL = true;
+    }
     if ( nbBlockedAround > 1 )
       continue;
 
@@ -5612,30 +5827,58 @@ void _ViscousBuilder::putOnOffsetSurface( _EdgesOnShape&            eos,
       {
         edge->_normal = ( newP - prevP ).Normalized();
       }
+      // if ( edge->_len < eof->_offsetValue )
+      //   edge->_len = eof->_offsetValue;
+
+      if ( !eos._sWOL.IsNull() ) // RISKY_SWOL
+      {
+        double change = eof->_offsetSurf->Gap() / eof->_offsetValue;
+        if (( newP - tgtP.XYZ() ) * edge->_normal < 0 )
+          change = 1 - change;
+        else
+          change = 1 + change;
+        gp_XYZ shitfVec    = tgtP.XYZ() - SMESH_NodeXYZ( edge->_nodes[0] );
+        gp_XYZ newShiftVec = shitfVec * change;
+        double shift       = edge->_normal * shitfVec;
+        double newShift    = edge->_normal * newShiftVec;
+        newP = tgtP.XYZ() + edge->_normal * ( newShift - shift );
+
+        uv = eof->_offsetSurf->NextValueOfUV( edge->_curvature->_uv, newP, preci );
+        if ( eof->_offsetSurf->Gap() < edge->_len )
+        {
+          edge->_curvature->_uv = uv;
+          newP = eof->_offsetSurf->Value( uv ).XYZ();
+        }
+        n->setXYZ( newP.X(), newP.Y(), newP.Z());
+        if ( !edge->UpdatePositionOnSWOL( n, /*tol=*/10 * edge->_len / ( edge->NbSteps() + 1 ),
+                                          eos, eos.GetData().GetHelper() ))
+        {
+          debugMsg("UpdatePositionOnSWOL fails in putOnOffsetSurface()" );
+        }
+      }
     }
   }
 
-
-
-#ifdef _DEBUG_
-  // dumpMove() for debug
-  size_t i = 0;
-  for ( ; i < eos._edges.size(); ++i )
-    if ( eos._edges[i]->Is( _LayerEdge::MARKED ))
-      break;
-  if ( i < eos._edges.size() )
+  if (SALOME::VerbosityActivated())
   {
-    dumpFunction(SMESH_Comment("putOnOffsetSurface_S") << eos._shapeID
-                 << "_InfStep" << infStep << "_" << smooStep );
+    // dumpMove() for debug
+    size_t i = 0;
     for ( ; i < eos._edges.size(); ++i )
+      if ( eos._edges[i]->Is( _LayerEdge::MARKED ))
+        break;
+    if ( i < eos._edges.size() )
     {
-      if ( eos._edges[i]->Is( _LayerEdge::MARKED )) {
-        dumpMove( eos._edges[i]->_nodes.back() );
+      dumpFunction(SMESH_Comment("putOnOffsetSurface_") << eos.ShapeTypeLetter() << eos._shapeID
+                  << "_InfStep" << infStep << "_" << Abs( smooStep ));
+      for ( ; i < eos._edges.size(); ++i )
+      {
+        if ( eos._edges[i]->Is( _LayerEdge::MARKED )) {
+          dumpMove( eos._edges[i]->_nodes.back() );
+        }
       }
+      dumpFunctionEnd();
     }
-    dumpFunctionEnd();
   }
-#endif
 
   _ConvexFace* cnvFace;
   if ( moveAll != _LayerEdge::UPD_NORMAL_CONV &&
@@ -5647,7 +5890,7 @@ void _ViscousBuilder::putOnOffsetSurface( _EdgesOnShape&            eos,
     SMESH_subMeshIteratorPtr smIt = eos._subMesh->getDependsOnIterator(/*includeSelf=*/false);
     while ( smIt->more() )
     {
-      SMESH_subMesh* sm = smIt->next();
+      SMESH_subMesh*     sm = smIt->next();
       _EdgesOnShape* subEOS = eos.GetData().GetShapeEdges( sm->GetId() );
       if ( !subEOS->_sWOL.IsNull() ) continue;
       if ( std::find( eosC1.begin(), eosC1.end(), subEOS ) != eosC1.end() ) continue;
@@ -5656,6 +5899,28 @@ void _ViscousBuilder::putOnOffsetSurface( _EdgesOnShape&            eos,
     }
     cnvFace->_normalsFixedOnBorders = true;
   }
+
+
+  // bos #20643
+  // negative smooStep means "final step", where we don't treat RISKY_SWOL edges
+  // as edges based on FACE are a bit late comparing with them
+  if ( smooStep >= 0 &&
+       neighborHasRiskySWOL &&
+       moveAll != _LayerEdge::RISKY_SWOL &&
+       eos.ShapeType() == TopAbs_FACE )
+  {
+    // put on the surface nodes built on FACE boundaries
+    SMESH_subMeshIteratorPtr smIt = eos._subMesh->getDependsOnIterator(/*includeSelf=*/false);
+    while ( smIt->more() )
+    {
+      SMESH_subMesh*     sm = smIt->next();
+      _EdgesOnShape* subEOS = eos.GetData().GetShapeEdges( sm->GetId() );
+      if ( subEOS->_sWOL.IsNull() ) continue;
+      if ( std::find( eosC1.begin(), eosC1.end(), subEOS ) != eosC1.end() ) continue;
+
+      putOnOffsetSurface( *subEOS, infStep, eosC1, smooStep, _LayerEdge::RISKY_SWOL );
+    }
+  }
 }
 
 //================================================================================
@@ -5958,9 +6223,11 @@ bool _Smoother1D::smoothAnalyticEdge( _SolidData&                    data,
           tgtNode->setXYZ( newPos.X(), newPos.Y(), newPos.Z() );
           dumpMove( tgtNode );
 
-          SMDS_FacePositionPtr pos = tgtNode->GetPosition();
-          pos->SetUParameter( newUV.X() );
-          pos->SetVParameter( newUV.Y() );
+          if ( SMDS_FacePositionPtr pos = tgtNode->GetPosition() ) // NULL if F is noShrink
+          {
+            pos->SetUParameter( newUV.X() );
+            pos->SetVParameter( newUV.Y() );
+          }
 
           gp_XYZ newUV0( newUV.X(), newUV.Y(), 0 );
 
@@ -6070,10 +6337,11 @@ bool _Smoother1D::smoothAnalyticEdge( _SolidData&                    data,
         tgtNode->setXYZ( newPos.X(), newPos.Y(), newPos.Z() );
         dumpMove( tgtNode );
 
-        SMDS_FacePositionPtr pos = tgtNode->GetPosition();
-        pos->SetUParameter( newUV.X() );
-        pos->SetVParameter( newUV.Y() );
-
+        if ( SMDS_FacePositionPtr pos = tgtNode->GetPosition() ) // NULL if F is noShrink
+        {
+          pos->SetUParameter( newUV.X() );
+          pos->SetVParameter( newUV.Y() );
+        }
         _eos[i]->Set( _LayerEdge::SMOOTHED ); // to check in refine() (IPAL54237)
       }
     }
@@ -6321,6 +6589,7 @@ void _Smoother1D::prepare(_SolidData& data)
   _edgeDir[1] = getEdgeDir( E, leOnV[1]->_nodes[0], data.GetHelper() );
   _leOnV[0]._cosin = Abs( leOnV[0]->_cosin );
   _leOnV[1]._cosin = Abs( leOnV[1]->_cosin );
+  _leOnV[0]._flags = _leOnV[1]._flags = 0;
   if ( _eos._sWOL.IsNull() ) // 3D
     for ( int iEnd = 0; iEnd < 2; ++iEnd )
       _leOnV[iEnd]._cosin = Abs( _edgeDir[iEnd].Normalized() * leOnV[iEnd]->_normal );
@@ -6330,7 +6599,7 @@ void _Smoother1D::prepare(_SolidData& data)
 
   // divide E to have offset segments with low deflection
   BRepAdaptor_Curve c3dAdaptor( E );
-  const double curDeflect = 0.1; //0.01; // Curvature deflection == |p1p2]*sin(p1p2,p1pM)
+  const double curDeflect = 0.1; //0.01; // Curvature deflection == |p1p2|*sin(p1p2,p1pM)
   const double angDeflect = 0.1; //0.09; // Angular deflection == sin(p1pM,pMp2)
   GCPnts_TangentialDeflection discret(c3dAdaptor, angDeflect, curDeflect);
   if ( discret.NbPoints() <= 2 )
@@ -6468,6 +6737,16 @@ gp_XYZ _Smoother1D::getNormalNormal( const gp_XYZ & normal,
   // if ( size == 0 ) // MULTI_NORMAL _LayerEdge
   //   return gp_XYZ( 1e-100, 1e-100, 1e-100 );
 
+  if ( size < 1e-5 ) // normal || edgeDir (almost) at inflation along EDGE (bos #20643)
+  {
+    const _LayerEdge* le = _eos._edges[ _eos._edges.size() / 2 ];
+    const gp_XYZ& leNorm = le->_normal;
+
+    cross = leNorm ^ edgeDir;
+    norm = edgeDir ^ cross;
+    size = norm.Modulus();
+  }
+
   return norm / size;
 }
 
@@ -6695,20 +6974,98 @@ void _SolidData::PrepareEdgesToSmoothOnFace( _EdgesOnShape* eos, bool substitute
     eos->_edgeForOffset = 0;
 
     double maxCosin = -1;
+    //bool hasNoShrink = false;
     for ( TopExp_Explorer eExp( eos->_shape, TopAbs_EDGE ); eExp.More(); eExp.Next() )
     {
       _EdgesOnShape* eoe = GetShapeEdges( eExp.Current() );
       if ( !eoe || eoe->_edges.empty() ) continue;
 
+      // if ( eos->GetData()._noShrinkShapes.count( eoe->_shapeID ))
+      //   hasNoShrink = true;
+
       vector<_LayerEdge*>& eE = eoe->_edges;
       _LayerEdge* e = eE[ eE.size() / 2 ];
-      if ( e->_cosin > maxCosin )
+      if ( !e->Is( _LayerEdge::RISKY_SWOL ) && e->_cosin > maxCosin )
       {
         eos->_edgeForOffset = e;
         maxCosin = e->_cosin;
       }
+
+      if ( !eoe->_sWOL.IsNull() )
+        for ( _LayerEdge* le : eoe->_edges )
+          if ( le->Is( _LayerEdge::RISKY_SWOL ) && e->_cosin > 0 )
+          {
+            // make _neibors on FACE be smoothed after le->Is( BLOCKED )
+            for ( _LayerEdge* neibor : le->_neibors )
+            {
+              int shapeDim =  neibor->BaseShapeDim();
+              if ( shapeDim == 2 )
+                neibor->Set( _LayerEdge::NEAR_BOUNDARY ); // on FACE
+              else if ( shapeDim == 0 )
+                neibor->Set( _LayerEdge::RISKY_SWOL );    // on VERTEX
+
+              if ( !neibor->_curvature )
+              {
+                gp_XY uv = helper.GetNodeUV( F, neibor->_nodes[0] );
+                neibor->_curvature = _Factory::NewCurvature();
+                neibor->_curvature->_r = 0;
+                neibor->_curvature->_k = 0;
+                neibor->_curvature->_h2lenRatio = 0;
+                neibor->_curvature->_uv = uv;
+              }
+            }
+          }
+    } // loop on EDGEs
+
+    // Try to initialize _Mapper2D
+
+    // if ( hasNoShrink )
+    //   return;
+
+    SMDS_ElemIteratorPtr fIt = eos->_subMesh->GetSubMeshDS()->GetElements();
+    if ( !fIt->more() || fIt->next()->NbCornerNodes() != 4 )
+      return;
+
+    // get EDGEs of quadrangle bottom
+    std::list< TopoDS_Edge > edges;
+    std::list< int > nbEdgesInWire;
+    int nbWire = SMESH_Block::GetOrderedEdges( F, edges, nbEdgesInWire );
+    if ( nbWire != 1 || nbEdgesInWire.front() < 4 )
+      return;
+    const SMDS_MeshNode* node;
+    while ( true ) // make edges start at a corner VERTEX
+    {
+      node = SMESH_Algo::VertexNode( helper.IthVertex( 0, edges.front() ), helper.GetMeshDS() );
+      if ( node && helper.IsCornerOfStructure( node, eos->_subMesh->GetSubMeshDS(), helper ))
+        break;
+      edges.pop_front();
+      if ( edges.empty() )
+        return;
+    }
+    std::list< TopoDS_Edge >::iterator edgeIt = edges.begin();
+    while ( true ) // make edges finish at a corner VERTEX
+    {
+      node = SMESH_Algo::VertexNode( helper.IthVertex( 1, *edgeIt ), helper.GetMeshDS() );
+      ++edgeIt;
+      if ( node && helper.IsCornerOfStructure( node, eos->_subMesh->GetSubMeshDS(), helper ))
+      {
+        edges.erase( edgeIt, edges.end() );
+        break;
+      }
+      if ( edgeIt == edges.end() )
+        return;
     }
-  }
+
+    // get structure of nodes
+    TParam2ColumnMap param2ColumnMap;
+    if ( !helper.LoadNodeColumns( param2ColumnMap, F, edges, helper.GetMeshDS() ))
+      return;
+
+    eos->_mapper2D = new _Mapper2D( param2ColumnMap, eos->GetData()._n2eMap );
+
+  } // if eos is of curved FACE
+
+  return;
 }
 
 //================================================================================
@@ -7320,7 +7677,8 @@ bool _ViscousBuilder::updateNormals( _SolidData&         data,
           PShapeIteratorPtr eIt = helper.GetAncestors( V, *_mesh, TopAbs_EDGE, &eos->_sWOL );
           while ( const TopoDS_Shape* E = eIt->next() )
           {
-            gp_Vec edgeDir = getEdgeDir( TopoDS::Edge( *E ), TopoDS::Vertex( V ));
+            gp_Vec edgeDir = getEdgeDir( TopoDS::Edge( *E ), TopoDS::Vertex( V ),
+                                         eos->_hyp.Get1stLayerThickness() );
             double   angle = edgeDir.Angle( newEdge._normal ); // [0,PI]
             if ( angle < M_PI / 2 )
               shapesToSmooth.insert( data.GetShapeEdges( *E ));
@@ -9606,6 +9964,8 @@ void _LayerEdge::SetNewLength( double len, _EdgesOnShape& eos, SMESH_MesherHelpe
     Block( eos.GetData() );
   }
   const double lenDelta = len - _len;
+  // if ( lenDelta < 0 )
+  //   return;
   if ( lenDelta < len * 1e-3  )
   {
     Block( eos.GetData() );
@@ -9649,46 +10009,13 @@ void _LayerEdge::SetNewLength( double len, _EdgesOnShape& eos, SMESH_MesherHelpe
   _pos.push_back( newXYZ );
 
   if ( !eos._sWOL.IsNull() )
-  {
-    double distXYZ[4];
-    bool uvOK = false;
-    if ( eos.SWOLType() == TopAbs_EDGE )
-    {
-      double u = Precision::Infinite(); // to force projection w/o distance check
-      uvOK = helper.CheckNodeU( TopoDS::Edge( eos._sWOL ), n, u,
-                                /*tol=*/2*lenDelta, /*force=*/true, distXYZ );
-      _pos.back().SetCoord( u, 0, 0 );
-      if ( _nodes.size() > 1 && uvOK )
-      {
-        SMDS_EdgePositionPtr pos = n->GetPosition();
-        pos->SetUParameter( u );
-      }
-    }
-    else //  TopAbs_FACE
-    {
-      gp_XY uv( Precision::Infinite(), 0 );
-      uvOK = helper.CheckNodeUV( TopoDS::Face( eos._sWOL ), n, uv,
-                                 /*tol=*/2*lenDelta, /*force=*/true, distXYZ );
-      _pos.back().SetCoord( uv.X(), uv.Y(), 0 );
-      if ( _nodes.size() > 1 && uvOK )
-      {
-        SMDS_FacePositionPtr pos = n->GetPosition();
-        pos->SetUParameter( uv.X() );
-        pos->SetVParameter( uv.Y() );
-      }
-    }
-    if ( uvOK )
-    {
-      n->setXYZ( distXYZ[1], distXYZ[2], distXYZ[3]);
-    }
-    else
+    if ( !UpdatePositionOnSWOL( n, 2*lenDelta, eos, helper ))
     {
       n->setXYZ( oldXYZ.X(), oldXYZ.Y(), oldXYZ.Z() );
       _pos.pop_back();
       Block( eos.GetData() );
       return;
     }
-  }
 
   _len = len;
 
@@ -9697,13 +10024,57 @@ void _LayerEdge::SetNewLength( double len, _EdgesOnShape& eos, SMESH_MesherHelpe
   {
     for ( size_t i = 0; i < _neibors.size(); ++i )
       //if (  _len > _neibors[i]->GetSmooLen() )
-        _neibors[i]->Set( MOVED );
+      _neibors[i]->Set( MOVED );
 
     Set( MOVED );
   }
   dumpMove( n ); //debug
 }
 
+
+//================================================================================
+/*!
+ * \brief Update last position on SWOL by projecting node on SWOL
+*/
+//================================================================================
+
+bool _LayerEdge::UpdatePositionOnSWOL( SMDS_MeshNode*      n,
+                                       double              tol,
+                                       _EdgesOnShape&      eos,
+                                       SMESH_MesherHelper& helper )
+{
+  double distXYZ[4];
+  bool uvOK = false;
+  if ( eos.SWOLType() == TopAbs_EDGE )
+  {
+    double u = Precision::Infinite(); // to force projection w/o distance check
+    uvOK = helper.CheckNodeU( TopoDS::Edge( eos._sWOL ), n, u, tol, /*force=*/true, distXYZ );
+    _pos.back().SetCoord( u, 0, 0 );
+    if ( _nodes.size() > 1 && uvOK )
+    {
+      SMDS_EdgePositionPtr pos = n->GetPosition();
+      pos->SetUParameter( u );
+    }
+  }
+  else //  TopAbs_FACE
+  {
+    gp_XY uv( Precision::Infinite(), 0 );
+    uvOK = helper.CheckNodeUV( TopoDS::Face( eos._sWOL ), n, uv, tol, /*force=*/true, distXYZ );
+    _pos.back().SetCoord( uv.X(), uv.Y(), 0 );
+    if ( _nodes.size() > 1 && uvOK )
+    {
+      SMDS_FacePositionPtr pos = n->GetPosition();
+      pos->SetUParameter( uv.X() );
+      pos->SetVParameter( uv.Y() );
+    }
+  }
+  if ( uvOK )
+  {
+    n->setXYZ( distXYZ[1], distXYZ[2], distXYZ[3]);
+  }
+  return uvOK;
+}
+
 //================================================================================
 /*!
  * \brief Set BLOCKED flag and propagate limited _maxLen to _neibors
@@ -10120,11 +10491,16 @@ bool _ViscousBuilder::refine(_SolidData& data)
             segLen[j] = segLen[j-1] + (edge._pos[j-1] - edge._pos[j] ).Modulus();
         }
       }
-      else if ( !surface.IsNull() ) // SWOL surface with singularities
+      else // SWOL is surface with singularities or irregularly parametrized curve
       {
         pos3D.resize( edge._pos.size() );
-        for ( size_t j = 0; j < edge._pos.size(); ++j )
-          pos3D[j] = surface->Value( edge._pos[j].X(), edge._pos[j].Y() ).XYZ();
+
+        if ( !surface.IsNull() )
+          for ( size_t j = 0; j < edge._pos.size(); ++j )
+            pos3D[j] = surface->Value( edge._pos[j].X(), edge._pos[j].Y() ).XYZ();
+        else if ( !curve.IsNull() )
+          for ( size_t j = 0; j < edge._pos.size(); ++j )
+            pos3D[j] = curve->Value( edge._pos[j].X() ).XYZ();
 
         for ( size_t j = 1; j < edge._pos.size(); ++j )
           segLen[j] = segLen[j-1] + ( pos3D[j-1] - pos3D[j] ).Modulus();
@@ -10156,7 +10532,8 @@ bool _ViscousBuilder::refine(_SolidData& data)
       if ( n2eMap && (( n2e = n2eMap->find( edge._nodes[0] )) != n2eMap->end() ))
       {
         edgeOnSameNode = n2e->second;
-        useExistingPos = ( edgeOnSameNode->_len < edge._len );
+        useExistingPos = ( edgeOnSameNode->_len < edge._len ||
+                           segLen[0] == segLen.back() ); // too short inflation step (bos #20643)
         const gp_XYZ& otherTgtPos = edgeOnSameNode->_pos.back();
         SMDS_PositionPtr  lastPos = tgtNode->GetPosition();
         if ( isOnEdge )
@@ -10171,26 +10548,16 @@ bool _ViscousBuilder::refine(_SolidData& data)
           fpos->SetVParameter( otherTgtPos.Y() );
         }
       }
-      // calculate height of the first layer
-      double h0;
-      const double T = segLen.back(); //data._hyp.GetTotalThickness();
-      const double f = eos._hyp.GetStretchFactor();
-      const int    N = eos._hyp.GetNumberLayers();
-      const double fPowN = pow( f, N );
-      if ( fPowN - 1 <= numeric_limits<double>::min() )
-        h0 = T / N;
-      else
-        h0 = T * ( f - 1 )/( fPowN - 1 );
-
-      const double zeroLen = std::numeric_limits<double>::min();
 
       // create intermediate nodes
-      double hSum = 0, hi = h0/f;
+      const double      h0 = eos._hyp.Get1stLayerThickness( segLen.back() );
+      const double zeroLen = std::numeric_limits<double>::min();
+      double hSum = 0, hi = h0/eos._hyp.GetStretchFactor();
       size_t iSeg = 1;
       for ( size_t iStep = 1; iStep < edge._nodes.size(); ++iStep )
       {
         // compute an intermediate position
-        hi *= f;
+        hi *= eos._hyp.GetStretchFactor();
         hSum += hi;
         while ( hSum > segLen[iSeg] && iSeg < segLen.size()-1 )
           ++iSeg;
@@ -10509,12 +10876,20 @@ namespace VISCOUS_3D
       std::vector< SMESH_NodeXYZ > _nodes;
       TopAbs_ShapeEnum             _vertSWOLType[2]; // shrink part includes VERTEXes
       AverageHyp*                  _vertHyp[2];
+      double                       _edgeWOLLen[2]; // length of wol EDGE
+      double                       _tol; // to compare _edgeWOLLen's
 
       BndPart():
         _isShrink(0), _isReverse(0), _nbSegments(0), _hyp(0),
-        _vertSWOLType{ TopAbs_WIRE, TopAbs_WIRE }, _vertHyp{ 0, 0 }
+        _vertSWOLType{ TopAbs_WIRE, TopAbs_WIRE }, _vertHyp{ 0, 0 }, _edgeWOLLen{ 0., 0.}
       {}
 
+      bool IsEqualLengthEWOL( const BndPart& other ) const
+      {
+        return ( std::abs( _edgeWOLLen[0] - other._edgeWOLLen[0] ) < _tol &&
+                 std::abs( _edgeWOLLen[1] - other._edgeWOLLen[1] ) < _tol );
+      }
+
       bool operator==( const BndPart& other ) const
       {
         return ( _isShrink       == other._isShrink &&
@@ -10525,7 +10900,8 @@ namespace VISCOUS_3D
                  (( !_isShrink ) ||
                   ( *_hyp        == *other._hyp &&
                     vertHyp1()   == other.vertHyp1() &&
-                    vertHyp2()   == other.vertHyp2() ))
+                    vertHyp2()   == other.vertHyp2() &&
+                    IsEqualLengthEWOL( other )))
                  );
       }
       bool CanAppend( const BndPart& other )
@@ -10543,10 +10919,12 @@ namespace VISCOUS_3D
         bool hasCommonNode = ( _nodes.back()->GetID() == other._nodes.front()->GetID() );
         _nodes.insert( _nodes.end(), other._nodes.begin() + hasCommonNode, other._nodes.end() );
         _vertSWOLType[1] = other._vertSWOLType[1];
-        if ( _isShrink )
-          _vertHyp[1] = other._vertHyp[1];
+        if ( _isShrink ) {
+          _vertHyp[1]    = other._vertHyp[1];
+          _edgeWOLLen[1] = other._edgeWOLLen[1];
+        }
       }
-      const SMDS_MeshNode*    Node(size_t i)  const
+      const SMDS_MeshNode* Node(size_t i)  const
       {
         return _nodes[ _isReverse ? ( _nodes.size() - 1 - i ) : i ]._node;
       }
@@ -10561,14 +10939,13 @@ namespace VISCOUS_3D
     SMESH_subMesh*       _subMesh;
     _SolidData*          _data1;
     _SolidData*          _data2;
-    //bool                 _isPeriodic;
 
     std::list< BndPart > _boundary;
     int                  _boundarySize, _nbBoundaryParts;
 
     void Init( SMESH_subMesh* sm, _SolidData* sd1, _SolidData* sd2 )
     {
-      _subMesh = sm; _data1 = sd1; _data2 = sd2; //_isPeriodic = false;
+      _subMesh = sm; _data1 = sd1; _data2 = sd2;
     }
     bool IsSame( const TopoDS_Face& face ) const
     {
@@ -10631,11 +11008,15 @@ namespace VISCOUS_3D
         if ( !periodic._trsf.Solve( srcPnts, tgtPnts )) {
           continue;
         }
-        double tol = std::numeric_limits<double>::max();
+        double tol = std::numeric_limits<double>::max(); // tolerance by segment size
         for ( size_t i = 1; i < srcPnts.size(); ++i ) {
           tol = Min( tol, ( srcPnts[i-1] - srcPnts[i] ).SquareModulus() );
         }
         tol = 0.01 * Sqrt( tol );
+        for ( BndPart& boundary : _boundary ) { // tolerance by VL thickness
+          if ( boundary._isShrink )
+            tol = Min( tol, boundary._hyp->Get1stLayerThickness() / 50. );
+        }
         bool nodeCoincide = true;
         TNodeNodeMap::iterator n2n = periodic._nnMap.begin();
         for ( ; n2n != periodic._nnMap.end() &&  nodeCoincide; ++n2n )
@@ -10643,7 +11024,7 @@ namespace VISCOUS_3D
           SMESH_NodeXYZ nSrc = n2n->first;
           SMESH_NodeXYZ nTgt = n2n->second;
           gp_XYZ pTgt = periodic._trsf.Transform( nSrc );
-          nodeCoincide = (( pTgt - nTgt ).SquareModulus() < tol );
+          nodeCoincide = (( pTgt - nTgt ).SquareModulus() < tol * tol );
         }
         if ( nodeCoincide )
           return true;
@@ -10691,6 +11072,11 @@ namespace VISCOUS_3D
       for ( int iE = 0; iE < nbEdgesInWire.front(); ++iE )
       {
         BndPart bndPart;
+
+        std::vector<const SMDS_MeshNode*> nodes = fSide.GetOrderedNodes( iE );
+        bndPart._nodes.assign( nodes.begin(), nodes.end() );
+        bndPart._nbSegments = bndPart._nodes.size() - 1;
+
         _EdgesOnShape*  eos = _data1->GetShapeEdges( fSide.EdgeID( iE ));
 
         bndPart._isShrink = ( eos->SWOLType() == TopAbs_FACE );
@@ -10719,10 +11105,14 @@ namespace VISCOUS_3D
                 bndPart._vertSWOLType[iV] = eov[iV]->SWOLType();
             }
           }
+          bndPart._edgeWOLLen[0] = fSide.EdgeLength( iE - 1 );
+          bndPart._edgeWOLLen[1] = fSide.EdgeLength( iE + 1 );
+
+          bndPart._tol = std::numeric_limits<double>::max(); // tolerance by segment size
+          for ( size_t i = 1; i < bndPart._nodes.size(); ++i )
+            bndPart._tol = Min( bndPart._tol,
+                                ( bndPart._nodes[i-1] - bndPart._nodes[i] ).SquareModulus() );
         }
-        std::vector<const SMDS_MeshNode*> nodes = fSide.GetOrderedNodes( iE );
-        bndPart._nodes.assign( nodes.begin(), nodes.end() );
-        bndPart._nbSegments = bndPart._nodes.size() - 1;
 
         if ( _boundary.empty() || ! _boundary.back().CanAppend( bndPart ))
           _boundary.push_back( bndPart );
@@ -10752,7 +11142,7 @@ namespace VISCOUS_3D
     {
       points.reserve( _boundarySize );
       size_t  nb = _boundary.rbegin()->_nodes.size();
-      int lastID = _boundary.rbegin()->Node( nb - 1 )->GetID();
+      smIdType lastID = _boundary.rbegin()->Node( nb - 1 )->GetID();
       std::list< BndPart >::const_iterator part = _boundary.begin();
       for ( ; part != _boundary.end(); ++part )
       {
@@ -10829,6 +11219,9 @@ namespace VISCOUS_3D
     }
     SMESHDS_Mesh* meshDS = dataSrc->GetHelper().GetMeshDS();
 
+    dumpFunction(SMESH_Comment("periodicMoveNodes_F")
+                               << _shriFace[iSrc]->_subMesh->GetId() << "_F"
+                               << _shriFace[iTgt]->_subMesh->GetId() );
     TNode2Edge::iterator n2e;
     TNodeNodeMap::iterator n2n = _nnMap.begin();
     for ( ; n2n != _nnMap.end(); ++n2n )
@@ -10858,6 +11251,8 @@ namespace VISCOUS_3D
           SMESH_NodeXYZ pSrc = leSrc->_nodes[ iN ];
           gp_XYZ pTgt = trsf->Transform( pSrc );
           meshDS->MoveNode( leTgt->_nodes[ iN ], pTgt.X(), pTgt.Y(), pTgt.Z() );
+
+          dumpMove( leTgt->_nodes[ iN ]);
         }
       }
     }
@@ -10866,6 +11261,7 @@ namespace VISCOUS_3D
               << _shriFace[iSrc]->_subMesh->GetId() << " -> "
               << _shriFace[iTgt]->_subMesh->GetId() << " -- "
               << ( done ? "DONE" : "FAIL"));
+    dumpFunctionEnd();
 
     return done;
   }
@@ -11400,6 +11796,8 @@ bool _ViscousBuilder::shrink(_SolidData& theData)
       {
         _EdgesOnShape& eos = * subEOS[ iS ];
         if ( eos.ShapeType() != TopAbs_EDGE ) continue;
+        if ( eos.size() == 0 )
+          continue;
 
         const TopoDS_Edge& E = TopoDS::Edge( eos._shape );
         data.SortOnEdge( E, eos._edges );
@@ -11422,6 +11820,19 @@ bool _ViscousBuilder::shrink(_SolidData& theData)
           uvPtVec[ i ].param = helper.GetNodeU( E, edges[i]->_nodes[0] );
           uvPtVec[ i ].SetUV( helper.GetNodeUV( F, edges[i]->_nodes.back() ));
         }
+        if ( uvPtVec[ 0 ].node == uvPtVec.back().node &&            // closed
+             helper.IsSeamShape( uvPtVec[ 0 ].node->GetShapeID() ))
+        {
+          uvPtVec[ 0 ].SetUV( helper.GetNodeUV( F,
+                                                edges[0]->_nodes.back(),
+                                                edges[1]->_nodes.back() ));
+          size_t i = edges.size() - 1;
+          uvPtVec[ i ].SetUV( helper.GetNodeUV( F,
+                                                edges[i  ]->_nodes.back(),
+                                                edges[i-1]->_nodes.back() ));
+        }
+        // if ( edges.empty() )
+        //   continue;
         BRep_Tool::Range( E, uvPtVec[0].param, uvPtVec.back().param );
         StdMeshers_FaceSide fSide( uvPtVec, F, E, _mesh );
         StdMeshers_ViscousLayers2D::SetProxyMeshOfEdge( fSide );
@@ -11436,8 +11847,12 @@ bool _ViscousBuilder::shrink(_SolidData& theData)
       smDS->Clear();
 
       // compute the mesh on the FACE
+      TopTools_IndexedMapOfShape allowed(1);
+      allowed.Add( sm->GetSubShape() );
+      sm->SetAllowedSubShapes( &allowed );
       sm->ComputeStateEngine( SMESH_subMesh::CHECK_COMPUTE_STATE );
       sm->ComputeStateEngine( SMESH_subMesh::COMPUTE_SUBMESH );
+      sm->SetAllowedSubShapes( nullptr );
 
       // re-fill proxy sub-meshes of the FACE
       for ( size_t i = 0 ; i < _sdVec.size(); ++i )
@@ -11569,7 +11984,8 @@ bool _ViscousBuilder::prepareEdgeToShrink( _LayerEdge&            edge,
     if ( !n2 )
       return error(SMESH_Comment("Wrongly meshed EDGE ") << getMeshDS()->ShapeToIndex( E ));
 
-    if ( n2 == tgtNode ) // for 3D_mesh_GHS3D_01/B1
+    if ( n2 == tgtNode       || // for 3D_mesh_GHS3D_01/B1
+         n2 == edge._nodes[1] ) // bos #20643
     {
       // shrunk by other SOLID
       edge.Set( _LayerEdge::SHRUNK ); // ???
@@ -11804,7 +12220,7 @@ void _ViscousBuilder::fixBadFaces(const TopoDS_Face&          F,
  */
 //================================================================================
 
-bool _LayerEdge::SetNewLength2d( Handle(Geom_Surface)& /*surface*/,
+bool _LayerEdge::SetNewLength2d( Handle(Geom_Surface)& surface,
                                  const TopoDS_Face&    F,
                                  _EdgesOnShape&        eos,
                                  SMESH_MesherHelper&   helper )
@@ -11831,8 +12247,8 @@ bool _LayerEdge::SetNewLength2d( Handle(Geom_Surface)& /*surface*/,
         continue; // simplex of quadrangle created by addBoundaryElements()
 
       // find intersection of 2 lines: curUV-tgtUV and that connecting simplex nodes
-      gp_XY uvN1 = helper.GetNodeUV( F, _simplices[i]._nPrev );
-      gp_XY uvN2 = helper.GetNodeUV( F, _simplices[i]._nNext );
+      gp_XY uvN1 = helper.GetNodeUV( F, _simplices[i]._nPrev, tgtNode );
+      gp_XY uvN2 = helper.GetNodeUV( F, _simplices[i]._nNext, tgtNode );
       gp_XY dirN = uvN2 - uvN1;
       double det = uvDir.Crossed( dirN );
       if ( Abs( det )  < std::numeric_limits<double>::min() ) continue;
@@ -11864,6 +12280,8 @@ bool _LayerEdge::SetNewLength2d( Handle(Geom_Surface)& /*surface*/,
     gp_Pnt p = surface->Value( newUV.X(), newUV.Y() );
     tgtNode->setXYZ( p.X(), p.Y(), p.Z() );
     dumpMove( tgtNode );
+#else
+    if ( surface.IsNull() ) {}
 #endif
   }
   else // _sWOL is TopAbs_EDGE
@@ -12035,17 +12453,16 @@ gp_XY _SmoothNode::computeAngularPos(vector<gp_XY>& uv,
   edgeSize.back() = edgeSize.front();
 
   gp_XY  newPos(0,0);
-  //int    nbEdges = 0;
-  double sumSize = 0;
+  double sumWgt = 0;
   for ( size_t i = 1; i < edgeDir.size(); ++i )
   {
-    if ( edgeDir[i-1].X() > 1. ) continue;
-    int i1 = i-1;
+    const int i1 = i-1;
+    if ( edgeDir[i1].X() > 1. ) continue;
     while ( edgeDir[i].X() > 1. && ++i < edgeDir.size() );
     if ( i == edgeDir.size() ) break;
     gp_XY p = uv[i];
     gp_XY norm1( -edgeDir[i1].Y(), edgeDir[i1].X() );
-    gp_XY norm2( -edgeDir[i].Y(),  edgeDir[i].X() );
+    gp_XY norm2( -edgeDir[i ].Y(), edgeDir[i ].X() );
     gp_XY bisec = norm1 + norm2;
     double bisecSize = bisec.Modulus();
     if ( bisecSize < numeric_limits<double>::min() )
@@ -12055,16 +12472,16 @@ gp_XY _SmoothNode::computeAngularPos(vector<gp_XY>& uv,
     }
     bisec /= bisecSize;
 
-    gp_XY  dirToN  = uvToFix - p;
-    double distToN = dirToN.Modulus();
+    gp_XY   dirToN = uvToFix - p;
+    double distToN = bisec * dirToN;
     if ( bisec * dirToN < 0 )
       distToN = -distToN;
 
-    newPos += ( p + bisec * distToN ) * ( edgeSize[i1] + edgeSize[i] );
-    //++nbEdges;
-    sumSize += edgeSize[i1] + edgeSize[i];
+    double wgt = edgeSize[i1] + edgeSize[i];
+    newPos += ( p + bisec * distToN ) * wgt;
+    sumWgt += wgt;
   }
-  newPos /= /*nbEdges * */sumSize;
+  newPos /= sumWgt;
   return newPos;
 }
 
@@ -12099,11 +12516,18 @@ void _Shrinker1D::AddEdge( const _LayerEdge*   e,
   double u = helper.GetNodeU( _geomEdge, e->_nodes[0], e->_nodes.back());
   _edges[ u < 0.5*(f+l) ? 0 : 1 ] = e;
 
-  // Update _nodes
+  // Check if the nodes are already shrunk by another SOLID
 
   const SMDS_MeshNode* tgtNode0 = TgtNode( 0 );
   const SMDS_MeshNode* tgtNode1 = TgtNode( 1 );
 
+  _done = (( tgtNode0 && tgtNode0->NbInverseElements( SMDSAbs_Edge ) == 2 ) ||
+           ( tgtNode1 && tgtNode1->NbInverseElements( SMDSAbs_Edge ) == 2 ));
+  if ( _done )
+    _nodes.resize( 1, nullptr );
+
+  // Update _nodes
+
   if ( _nodes.empty() )
   {
     SMESHDS_SubMesh * eSubMesh = helper.GetMeshDS()->MeshElements( _geomEdge );
@@ -12114,7 +12538,7 @@ void _Shrinker1D::AddEdge( const _LayerEdge*   e,
     GeomAdaptor_Curve aCurve(C, f,l);
     const double totLen = GCPnts_AbscissaPoint::Length(aCurve, f, l);
 
-    int nbExpectNodes = eSubMesh->NbNodes();
+    smIdType nbExpectNodes = eSubMesh->NbNodes();
     _initU  .reserve( nbExpectNodes );
     _normPar.reserve( nbExpectNodes );
     _nodes  .reserve( nbExpectNodes );
@@ -12172,6 +12596,8 @@ void _Shrinker1D::Compute(bool set3D, SMESH_MesherHelper& helper)
   double f,l;
   if ( set3D || _done )
   {
+    dumpFunction(SMESH_Comment("shrink1D_E") << helper.GetMeshDS()->ShapeToIndex( _geomEdge )<<
+                 "_F" << helper.GetSubShapeID() );
     Handle(Geom_Curve) C = BRep_Tool::Curve(_geomEdge, f,l);
     GeomAdaptor_Curve aCurve(C, f,l);
 
@@ -12193,7 +12619,9 @@ void _Shrinker1D::Compute(bool set3D, SMESH_MesherHelper& helper)
       pos->SetUParameter( u );
       gp_Pnt p = C->Value( u );
       const_cast< SMDS_MeshNode*>( _nodes[i] )->setXYZ( p.X(), p.Y(), p.Z() );
+      dumpMove( _nodes[i] );
     }
+    dumpFunctionEnd();
   }
   else
   {
@@ -12266,6 +12694,140 @@ void _Shrinker1D::SwapSrcTgtNodes( SMESHDS_Mesh* mesh )
   }
 }
 
+//================================================================================
+/*!
+ * \brief Setup quadPoints
+ */
+//================================================================================
+
+_Mapper2D::_Mapper2D( const TParam2ColumnMap & param2ColumnMap, const TNode2Edge& n2eMap )
+{
+  size_t i, iSize = _quadPoints.iSize = param2ColumnMap.size();
+  size_t j, jSize = _quadPoints.jSize = param2ColumnMap.begin()->second.size();
+  if ( _quadPoints.iSize < 3 ||
+       _quadPoints.jSize < 3 )
+    return;
+  _quadPoints.uv_grid.resize( iSize * jSize );
+
+  // set nodes
+  i = 0;
+  for ( auto & u_columnNodes : param2ColumnMap )
+  {
+    for ( j = 0; j < u_columnNodes.second.size(); ++j )
+      _quadPoints.UVPt( i, j ).node = u_columnNodes.second[ j ];
+    ++i;
+  }
+
+  // compute x parameter on borders
+  uvPnt( 0, 0       ).x = 0;
+  uvPnt( 0, jSize-1 ).x = 0;
+  gp_Pnt p0, pPrev0 = SMESH_NodeXYZ( uvPnt( 0, 0       ).node );
+  gp_Pnt p1, pPrev1 = SMESH_NodeXYZ( uvPnt( 0, jSize-1 ).node );
+  for ( i = 1; i < iSize; ++i )
+  {
+    p0 = SMESH_NodeXYZ( uvPnt( i, 0       ).node );
+    p1 = SMESH_NodeXYZ( uvPnt( i, jSize-1 ).node );
+    uvPnt( i, 0       ).x = uvPnt( i-1, 0       ).x + p0.Distance( pPrev0 );
+    uvPnt( i, jSize-1 ).x = uvPnt( i-1, jSize-1 ).x + p1.Distance( pPrev1 );
+    pPrev0 = p0;
+    pPrev1 = p1;
+  }
+  for ( i = 1; i < iSize-1; ++i )
+  {
+    uvPnt( i, 0       ).x /= uvPnt( iSize-1, 0       ).x;
+    uvPnt( i, jSize-1 ).x /= uvPnt( iSize-1, jSize-1 ).x;
+    uvPnt( i, 0       ).y = 0;
+    uvPnt( i, jSize-1 ).y = 1;
+  }
+
+  // compute y parameter on borders
+  uvPnt( 0,       0 ).y = 0;
+  uvPnt( iSize-1, 0 ).y = 0;
+  pPrev0 = SMESH_NodeXYZ( uvPnt( 0,       0 ).node );
+  pPrev1 = SMESH_NodeXYZ( uvPnt( iSize-1, 0 ).node );
+  for ( j = 1; j < jSize; ++j )
+  {
+    p0 = SMESH_NodeXYZ( uvPnt( 0,       j ).node );
+    p1 = SMESH_NodeXYZ( uvPnt( iSize-1, j ).node );
+    uvPnt( 0,       j ).y = uvPnt( 0,       j-1 ).y + p0.Distance( pPrev0 );
+    uvPnt( iSize-1, j ).y = uvPnt( iSize-1, j-1 ).y + p1.Distance( pPrev1 );
+    pPrev0 = p0;
+    pPrev1 = p1;
+  }
+  for ( j = 1; j < jSize-1; ++j )
+  {
+    uvPnt( 0,       j ).y /= uvPnt( 0,       jSize-1 ).y;
+    uvPnt( iSize-1, j ).y /= uvPnt( iSize-1, jSize-1 ).y;
+    uvPnt( 0,       j ).x = 0;
+    uvPnt( iSize-1, j ).x = 1;
+  }
+
+  // compute xy of internal nodes
+  for ( i = 1; i < iSize-1; ++i )
+  {
+    const double x0 = uvPnt( i, 0       ).x;
+    const double x1 = uvPnt( i, jSize-1 ).x;
+    for ( j = 1; j < jSize-1; ++j )
+    {
+      const double y0 = uvPnt( 0,       j ).y;
+      const double y1 = uvPnt( iSize-1, j ).y;
+      double x = (x0 + y0 * (x1 - x0)) / (1 - (y1 - y0) * (x1 - x0));
+      double y = y0 + x * (y1 - y0);
+      uvPnt( i, j ).x = x;
+      uvPnt( i, j ).y = y;
+    }
+  }
+
+  // replace base nodes with target ones
+  for ( i = 0; i < iSize; ++i )
+    for ( j = 0; j < jSize; ++j )
+    {
+      auto n2e = n2eMap.find( uvPnt( i, j ).node );
+      uvPnt( i, j ).node = n2e->second->_nodes.back();
+    }
+
+  return;
+}
+
+//================================================================================
+/*!
+ * \brief Compute positions of nodes of 2D structured mesh using TFI
+ */
+//================================================================================
+
+bool _Mapper2D::ComputeNodePositions()
+{
+  if ( _quadPoints.uv_grid.empty() )
+    return true;
+
+  size_t i, iSize = _quadPoints.iSize;
+  size_t j, jSize = _quadPoints.jSize;
+
+  SMESH_NodeXYZ a0 ( uvPnt( 0,       0       ).node );
+  SMESH_NodeXYZ a1 ( uvPnt( iSize-1, 0       ).node );
+  SMESH_NodeXYZ a2 ( uvPnt( iSize-1, jSize-1 ).node );
+  SMESH_NodeXYZ a3 ( uvPnt( 0,       jSize-1 ).node );
+
+  for ( i = 1; i < iSize-1; ++i )
+  {
+    SMESH_NodeXYZ p0 ( uvPnt( i, 0       ).node );
+    SMESH_NodeXYZ p2 ( uvPnt( i, jSize-1 ).node );
+    for ( j = 1; j < jSize-1; ++j )
+    {
+      SMESH_NodeXYZ p1 ( uvPnt( iSize-1, j ).node );
+      SMESH_NodeXYZ p3 ( uvPnt( 0,       j ).node );
+      double x = uvPnt( i, j ).x;
+      double y = uvPnt( i, j ).y;
+
+      gp_XYZ p = SMESH_MesherHelper::calcTFI( x, y, a0,a1,a2,a3, p0,p1,p2,p3 );
+      const_cast< SMDS_MeshNode* >( uvPnt( i, j ).node )->setXYZ( p.X(), p.Y(), p.Z() );
+
+      dumpMove( uvPnt( i, j ).node );
+    }
+  }
+  return true;
+}
+
 //================================================================================
 /*!
  * \brief Creates 2D and 1D elements on boundaries of new prisms
index 426257946e3b1458632d5d051a437b2885580f8f..d673bde471b1dde23771d6adabd99f7982b5211c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -94,6 +94,11 @@ public:
                     const TopoDS_Shape&                  aShape,
                     SMESH_Hypothesis::Hypothesis_Status& aStatus);
 
+  // Compute thickness of the 1st layer
+  static double Get1stLayerThickness( double thickTotal,
+                                      double factor,
+                                      int    nbLayers );
+
   // Checks if viscous layers should be constructed on a shape
   bool IsShapeWithLayers(int shapeIndex) const;
 
index 4b4294cd5b7ec5bc25c7681f0b3b07a5d4cbae8a..b89a42c2d2cb385ce1264b424a71d5c2b1cec7fe 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -83,6 +83,7 @@
 #include <gp_Ax1.hxx>
 #include <gp_Vec.hxx>
 #include <gp_XY.hxx>
+#include <smIdType.hxx>
 
 #include <list>
 #include <string>
@@ -113,7 +114,7 @@ namespace VISCOUS_2D
     {
       _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 ); }
+      virtual smIdType NbNodes() const { return Max( 0, _uvPtStructVec.size()-2 ); }
       void SetUVPtStructVec(UVPtStructVec& vec) { _uvPtStructVec.swap( vec ); }
       UVPtStructVec& GetUVPtStructVec() { return _uvPtStructVec; }
     };
@@ -239,9 +240,7 @@ namespace VISCOUS_2D
 
     bool SetNewLength( const double length );
 
-#ifdef _DEBUG_
-    int           _ID;
-#endif
+    int           _ID; // debug
   };
   //--------------------------------------------------------------------------------
   /*!
@@ -673,9 +672,10 @@ bool _ViscousBuilder2D::error(const string& text )
       _error->myAlgo = smError->myAlgo;
     smError = _error;
   }
-#ifdef _DEBUG_
-  cout << "_ViscousBuilder2D::error " << text << endl;
-#endif
+
+  if (SALOME::VerbosityActivated())
+    cout << "_ViscousBuilder2D::error " << text << endl;
+
   return false;
 }
 
@@ -1338,9 +1338,9 @@ void _ViscousBuilder2D::setLayerEdgeData( _LayerEdge&                 lEdge,
   lEdge._ray.SetDirection( lEdge._normal2D );
   lEdge._isBlocked = false;
   lEdge._length2D  = 0;
-#ifdef _DEBUG_
-  lEdge._ID        = _nbLE++;
-#endif
+
+  if (SALOME::VerbosityActivated())
+    lEdge._ID        = _nbLE++;
 }
 
 //================================================================================
index 9d7262163b4744fc71b3db1295b50715bedca82e..9394483fb0932b9c86a45d199b75438a962decbd 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index d423dd2a3be8a15137fcac80978b2bb1728dd3c6..150f4e38fa1a0dbc163ce6e47b1eb9215de23a01 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -32,6 +32,7 @@ INCLUDE_DIRECTORIES(
   ${Boost_INCLUDE_DIRS}
   ${QWT_INCLUDE_DIR}
   ${OMNIORB_INCLUDE_DIR}
+  ${MEDCOUPLING_INCLUDE_DIRS}
   ${PROJECT_SOURCE_DIR}/src/SMESH
   ${PROJECT_SOURCE_DIR}/src/SMESHUtils
   ${PROJECT_SOURCE_DIR}/src/SMESH_I
index c44ff69602aafe101df171f49f44e40023fc8f4b..6042b076693b4ab3806fc66ecc225c23e9070138 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 406c14de972335ba5e848ba8f8217c1a4245ebe2..d3b93162ab3597419ba3f5d076d97521fbe785c7 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 57b051a45996c22e03e0ebb571f659a9a3d6a0ed..524e5e0745017bf12582ab17a02d548f07a212cc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index f3fe31d4fab6b6f9ee56119d4262f34c7eb200d8..9db64a9b22ca5cbc1cc47a42452ce223bffaeeb1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 3d1c016083e1117857a65b61efdca32eb79c0301..675f377cc33731d1b1272bb541ef1794ce8ffa4f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -830,6 +830,17 @@ QFrame* StdMeshersGUI_CartesianParamCreator::buildFrame()
   myUseThresholdForInternalFaces = new QCheckBox( tr("USE_THRESHOLD_FOR_INTERNAL_FACES"), GroupC1 );
   argGroupLayout->addWidget( myUseThresholdForInternalFaces, row, 0, 1, 2 );
   row++;
+  mySetQuanta = new QCheckBox( tr("SET_QUANTA"), GroupC1 );
+  argGroupLayout->addWidget( mySetQuanta, row, 0, 1, 2 );
+  row++;
+
+  argGroupLayout->addWidget( new QLabel( tr("QUANTA_VALUE"), GroupC1 ), row, 0 );
+  myQuanta = new SMESHGUI_SpinBox( GroupC1 );
+  myQuanta->setAcceptNames( false );
+  myQuanta->RangeStepAndValidator( 1e-6, 1, 0.05, "length_precision" );
+  myQuanta->setEnabled(false);
+  argGroupLayout->addWidget( myQuanta, row, 1 );  
+  row++;
 
   // 3)  Grid definition
   QTabWidget* tabWdg = new QTabWidget( fr );
@@ -935,6 +946,7 @@ QFrame* StdMeshersGUI_CartesianParamCreator::buildFrame()
   connect( resetBtn,        SIGNAL( clicked(bool)),             SLOT( onResetAxes(bool)));
   connect( myConsiderInternalFaces,      SIGNAL( toggled(bool)),
            myUseThresholdForInternalFaces, SLOT( setEnabled(bool)));
+  connect( mySetQuanta,     SIGNAL( clicked(bool)), SLOT( onSetQuanta(bool)) );
   for ( int i = 0; i < 3; ++i )
   {
     connect( myXDirSpin[i], SIGNAL(valueChanged   (const QString&)),
@@ -1011,6 +1023,10 @@ void StdMeshersGUI_CartesianParamCreator::retrieveParams() const
   myCreateFaces->setChecked( h->GetToCreateFaces() );
   myConsiderInternalFaces->setChecked( h->GetToConsiderInternalFaces() );
   myUseThresholdForInternalFaces->setChecked( h->GetToUseThresholdForInternalFaces() );
+  mySetQuanta->setChecked( h->GetToUseQuanta() );
+  myQuanta->setValue( h->GetQuanta() );
+  if (h->GetToUseQuanta())
+    myQuanta->setEnabled(true);
 
   // grid definition
   for ( int ax = 0; ax < 3; ++ax )
@@ -1101,6 +1117,8 @@ QString StdMeshersGUI_CartesianParamCreator::storeParams() const
     h->SetToCreateFaces( myCreateFaces->isChecked() );
     h->SetToConsiderInternalFaces( myConsiderInternalFaces->isChecked() );
     h->SetToUseThresholdForInternalFaces( myUseThresholdForInternalFaces->isChecked() );
+    h->SetToUseQuanta( mySetQuanta->isChecked() );
+    h->SetQuanta( myQuanta->text().toDouble() );
 
     // grid
     for ( int ax = 0; ax < 3; ++ax )
@@ -1453,3 +1471,19 @@ void StdMeshersGUI_CartesianParamCreator::onGridModeChanged(int)
 
   myFixedPointGrp->setEnabled( haveSpacing );
 }
+
+//================================================================================
+/*!
+ * \brief Enable and disable quanta value combo box 
+ */
+//================================================================================
+
+void StdMeshersGUI_CartesianParamCreator::onSetQuanta(bool)
+{
+  StdMeshers::StdMeshers_CartesianParameters3D_var h =
+    StdMeshers::StdMeshers_CartesianParameters3D::_narrow( hypothesis() );
+  if ( h->_is_nil() )
+    return;
+
+  myQuanta->setEnabled( mySetQuanta->isChecked() );
+}
index 6cac9638d025594d065bfd1295644e91898ff4b4..ae2d934764ae985aeceb247b4d1110ddaa49a119 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -147,6 +147,7 @@ private slots:
   void             onOptimalAxes(bool);
   void             onResetAxes(bool);
   void             onGridModeChanged(int);
+  void             onSetQuanta(bool);
 
 private:
   QLineEdit*                  myName;
@@ -155,6 +156,8 @@ private:
   QCheckBox*                  myCreateFaces;
   QCheckBox*                  myConsiderInternalFaces;
   QCheckBox*                  myUseThresholdForInternalFaces;
+  QCheckBox*                  mySetQuanta;
+  SMESHGUI_SpinBox*           myQuanta;
 
   StdMeshersGUI::GridAxisTab* myAxisTabs[3];
   QGroupBox*                  myFixedPointGrp;
index e4699906c08976786e76121d30bb3a6bdae0b84b..79e9d929a80e4e7441cd12237110df5dba6c2c2f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -320,13 +320,8 @@ void StdMeshersGUI_DistrPreview::update()
 
   setAxisScale( myDensity->xAxis(), min_x, max_x );
   setAxisScale( myDensity->yAxis(),
-#ifdef WIN32
-    min( 0.0, min_y ),
-    max( 0.0, max_y )
-#else
     std::min( 0.0, min_y ),
     std::max( 0.0, max_y )
-#endif
     );
   myDensity->setSamples( x, y, size );
   if( x )
index c06841884d20a103023afa225270e9d0428f5b99..05b87aef5ba62c08dbeee0a9bd371ae04c970bee 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 13ac2f74d009517a5600f532ccbc90933df0462c..1380b981c2bba0e9d25c4c8cb6b45694bd13fdce 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 9598835596abb823ac060282d1fd79d3bc5fb9eb..e1a89704025187e27c9abb0d69b82db2938f1cf2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index e61e5d3690bd790864fcbe28624f6f9e79240854..4ca59f9711f6fa8a06bb083aa27aa41e87c2b046 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -301,17 +301,18 @@ double StdMeshersGUI_FixedPointsParamWdg::point( int idx ) const
   return idx >= 0 && idx < myListWidget->count() ? myListWidget->item( idx )->data( Qt::UserRole ).toDouble() : 0.;
 }
 
-void StdMeshersGUI_FixedPointsParamWdg::setNbSegments( int idx, int val )
+void StdMeshersGUI_FixedPointsParamWdg::setNbSegments( int idx, SMESH::smIdType val )
 {
-  if ( idx >= 0 && idx < myTreeWidget->topLevelItemCount() ) {
-    myTreeWidget->topLevelItem( idx )->setData( 1, Qt::UserRole, val );
+  if ( idx >= 0 && idx < myTreeWidget->topLevelItemCount() )
+  {
+    myTreeWidget->topLevelItem( idx )->setData( 1, Qt::UserRole, qlonglong( val ));
     myTreeWidget->topLevelItem( idx )->setText( 1, idx > 0 && mySameValues->isChecked() ? QString( SAME_TEXT ) : QString::number( val ) );
   }
 }
 
-int StdMeshersGUI_FixedPointsParamWdg::nbSegments( int idx ) const
+smIdType StdMeshersGUI_FixedPointsParamWdg::nbSegments( int idx ) const
 {
-  return idx >= 0 && idx < myTreeWidget->topLevelItemCount() ? myTreeWidget->topLevelItem( idx )->data( 1, Qt::UserRole ).toInt() : 1;
+  return idx >= 0 && idx < myTreeWidget->topLevelItemCount() ? myTreeWidget->topLevelItem( idx )->data( 1, Qt::UserRole ).toLongLong() : 1;
 }
 
 //=================================================================================
@@ -369,9 +370,9 @@ void StdMeshersGUI_FixedPointsParamWdg::SetListOfPoints( SMESH::double_array_var
 // function : GetListOfSegments
 // purpose  : Called to get the list Number of Segments
 //=================================================================================
-SMESH::long_array_var StdMeshersGUI_FixedPointsParamWdg::GetListOfSegments()
+SMESH::smIdType_array_var StdMeshersGUI_FixedPointsParamWdg::GetListOfSegments()
 {
-  SMESH::long_array_var anArray = new SMESH::long_array;
+  SMESH::smIdType_array_var anArray = new SMESH::smIdType_array;
   int size = mySameValues->isChecked() ? 1 : myTreeWidget->topLevelItemCount();
   anArray->length( size );
   for (int i = 0; i < size; i++) {
@@ -384,7 +385,7 @@ SMESH::long_array_var StdMeshersGUI_FixedPointsParamWdg::GetListOfSegments()
 // function : SetListOfPoints
 // purpose  : Called to set the list of Points
 //=================================================================================
-void StdMeshersGUI_FixedPointsParamWdg::SetListOfSegments( SMESH::long_array_var theSegments)
+void StdMeshersGUI_FixedPointsParamWdg::SetListOfSegments( SMESH::smIdType_array_var theSegments)
 {
   if ( myListWidget->count() > 0 && theSegments->length() == 1)
     mySameValues->setChecked(true);
index 2fabeb02d04c8be3c5f3ae04882acd93e32b5215..93b7e79264cf3c839313aab7c54ee60591ee010a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -27,6 +27,8 @@
 #include <SMESHGUI.h>
 #include "SMESH_StdMeshersGUI.hxx"
 
+#include <smIdType.hxx>
+
 // Qt includes
 #include <QWidget>
 #include <QStringList>
@@ -56,8 +58,8 @@ public:
   SMESH::double_array_var        GetListOfPoints();
   void                           SetListOfPoints( SMESH::double_array_var );
 
-  SMESH::long_array_var          GetListOfSegments();
-  void                           SetListOfSegments( SMESH::long_array_var );
+  SMESH::smIdType_array_var      GetListOfSegments();
+  void                           SetListOfSegments( SMESH::smIdType_array_var );
 
   QString                        GetValue() const { return myParamValue; }
 
@@ -72,8 +74,8 @@ private:
   void                           addPoint( double ); 
   void                           removePoints(); 
   double                         point( int ) const;
-  void                           setNbSegments( int, int );
-  int                            nbSegments( int ) const;
+  void                           setNbSegments( int, SMESH::smIdType );
+  smIdType                       nbSegments( int ) const;
 
   static QTreeWidgetItem*        newTreeItem( double v1, double v2 );
   static QListWidgetItem*        newListItem( double v1 );
index acf1f2a856650168630660fe003de1e5135f64d6..5973928a76efe48328ff53b53a5ba938e9d50456 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 88cde6d6ef91568ce25ee4abb4082d579e1bbb78..6c1c8e75e5953efd6311664706c473e1bee778ce 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index deb4ee99a4bfc0d4a719fbd43e512e39854c2b0a..0724898f1b50de336425b335cd0b4ea3b90aab79 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 01ecbff0d32a17499f82c1281d60efba3db2d02f..be60066b5ee6702cab69d88b1c8ad57428f7448a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index fa7a41b5ceda0e4e86ae18f3b61d5b7390d54349..116df94bcd65268c0549f7b3ab262495fb58944a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 53c4dbb3fd800f16e3fe0dcb45380a564962d332..d873fdae13fe9d015a8be89f34c71586c745d99f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 896e964e6bd078d003d908a1925d5fca3b1d62d2..e07aa7e3009254511190fc4938c5584beff68244 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 2400dd8ab07f75fea64a5af39ffd35e5a12854f8..192ad51d350b0960f0f7e46a26adb27276a33dcb 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -53,8 +53,8 @@ class STDMESHERSGUI_EXPORT StdMeshersGUI_ObjectReferenceParamWdg : public QWidge
 {
   Q_OBJECT
 
-public:
-  StdMeshersGUI_ObjectReferenceParamWdg( SUIT_SelectionFilter* filter, 
+ public:
+  StdMeshersGUI_ObjectReferenceParamWdg( SUIT_SelectionFilter* filter,
                                          QWidget*              parent,
                                          bool                  multiSelection=false
                                          /* ,bool                  stretch=true*/);
@@ -67,75 +67,76 @@ public:
 
   void SetObjects(SMESH::string_array_var& objEntries);
 
-  template<class TInterface> 
-    typename TInterface::_var_type GetObject(unsigned i=0) const {
+  template<class TInterface>
+    typename TInterface::_var_type GetObject(size_t i=0) const {
     if ( IsObjectSelected(i) ) return TInterface::_narrow(myObjects[i]);
     return TInterface::_nil();
   }
 
-  int NbObjects() const { return myObjects.size(); }
+  size_t NbObjects() const { return myObjects.size(); }
 
+  // Return object entries
   QString GetValue() const { return myParamValue; }
 
-  bool IsObjectSelected(unsigned i=0) const
+  bool IsObjectSelected(size_t i=0) const
   { return i < myObjects.size() && !CORBA::is_nil(myObjects[i]); }
 
   /*!
    * \brief Get the selection status
-    *
-    * Useful to know which Object Reference param widget is activated
-    * to be able to activate the next one when the content of this
-    * one has been modified
+   *
+   * Useful to know which Object Reference param widget is activated
+   * to be able to activate the next one when the content of this
+   * one has been modified
    */
   bool IsSelectionActivated() const { return mySelectionActivated; }
 
   void AvoidSimultaneousSelection( StdMeshersGUI_ObjectReferenceParamWdg* other);
-  
+
   void SetDefaultText(QString defaultText="", QString styleSheet="");
 
-public slots:
+ public slots:
   /*!
    * \brief Activates selection (if not yet done), emits selectionActivated()
-    *
-    * Useful to deactivate one Object Reference param widget when an other
-    * one is activated
+   *
+   * Useful to deactivate one Object Reference param widget when an other
+   * one is activated
    */
   void activateSelection();
   void deactivateSelection();
 
-signals:
+ signals:
   /*!
    * \brief Emitted when selection is activated
-    *
-    * Useful to deactivate one Object Reference param widget when an other
-    * one is activated
+   *
+   * Useful to deactivate one Object Reference param widget when an other
+   * one is activated
    */
   void selectionActivated();
   void contentModified();
-  
-private slots:
-  void onSelectionDone(); 
 
-private:
+ private slots:
+  void onSelectionDone();
+
+ private:
   void init();
-  
-private:
+
+ private:
 
   bool                                myMultiSelection;
   std::vector<CORBA::Object_var>      myObjects;
 
- SUIT_SelectionFilter*  myFilter;
- bool                   mySelectionActivated;
- bool                   myStretchActivated;
 SUIT_SelectionFilter*  myFilter;
 bool                   mySelectionActivated;
 bool                   myStretchActivated;
 
- SMESHGUI*              mySMESHGUI;
- LightApp_SelectionMgr* mySelectionMgr;
 SMESHGUI*              mySMESHGUI;
 LightApp_SelectionMgr* mySelectionMgr;
 
- QLineEdit*             myObjNameLineEdit;
- QPushButton*           mySelButton;
- QString                myParamValue;
- QString                myEmptyText;
- QString                myEmptyStyleSheet;
 QLineEdit*             myObjNameLineEdit;
 QPushButton*           mySelButton;
 QString                myParamValue;
 QString                myEmptyText;
 QString                myEmptyStyleSheet;
 };
 
 #endif // STDMESHERSGUI_OBJECTREFERENCEPARAMWDG_H
index 8a5b35c7a0b35f428ba75fca74918fc24c007fc5..37832e25754977ea28eae8de07cc4b1677c225a0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index b0e344275e38c56bd34e1d59f5c187844566ecd5..accbd6c4760f6113fad3db7d6df012d85f2ebd39 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 90d92443b689618a6d6648072158c01f1b9c6eb4..fc5dffeaf578ceb3a2eeba7c2cf38ec1aa9cf2d1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -226,7 +226,7 @@ void StdMeshersGUI_QuadrangleParamCreator::retrieveParams() const
     GEOM::ListOfGO_var     shapes;
     SMESH::nodes_array_var points;
     h->GetEnforcedNodes( shapes, points );
-    for ( size_t i = 0; i < shapes->length(); ++i )
+    for ( CORBA::ULong i = 0; i < shapes->length(); ++i )
     {
       CORBA::String_var name  = shapes[i]->GetName();
       CORBA::String_var entry = shapes[i]->GetStudyEntry();
@@ -234,7 +234,7 @@ void StdMeshersGUI_QuadrangleParamCreator::retrieveParams() const
       item->setData( Qt::UserRole, entry.in() );
       myShapesList->addItem( item );
     }
-    for ( size_t i = 0; i < points->length(); ++i )
+    for ( CORBA::ULong i = 0; i < points->length(); ++i )
     {
       QTreeWidgetItem* item = new QTreeWidgetItem
         ( QStringList()
index 9348aac059eebbe7684d07d902027fba323bedaf..44afe5faee7002d04a0f17da2493556173abd1ab 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 10abd45b028ba8aca908787b481322a7602aa273..e0fb405dbbb9e02af57cd664d2a39545bc33d953 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index ed6efb60f1d1dd9322da04a3714d347a5a41bf70..1e230923b000c31f72126302dfe369e666c693c4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index b8d2c886392e1b25e5ef0be9c4864b489feda5ec..cc20acacade46f59d609d2d0c31e3278ebd67504 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 59febb6c6690aa1145e7ac4ac35e249dc0cb9f86..f1e0f84d22070653cb96654c7c58419e63b36527 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 31db0a7be7f4e5add339605081fde9fe0cf9eb0a..5033645c556ca4512e82ee7fb9e048e3f629dc37 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -596,7 +596,7 @@ void StdMeshersGUI_SubShapeSelectorWdg::updateState()
 GEOM::GEOM_Object_var StdMeshersGUI_SubShapeSelectorWdg::GetGeomObjectByEntry( const QString& theEntry )
 {
   GEOM::GEOM_Object_var aGeomObj;
-  SALOMEDS::SObject_var aSObj = SMESH_Gen_i::getStudyServant()->FindObjectID( theEntry.toUtf8().data() );
+  SALOMEDS::SObject_var aSObj = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindObjectID( theEntry.toUtf8().data() );
   if (!aSObj->_is_nil() )
   {
     CORBA::Object_var obj = aSObj->GetObject();
index 9c4f14b359d40eb4714b4d6fe99c1b6d1a3e07b5..504649641e5abb6c564fa67ceb36371490ad9593 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 3b41151ac3e9007a479c355a8dcb94709d02f92a..19e60b261dca74e9a0a85a4663aa772d023196c2 100644 (file)
             <source>ICON_SMESH_TREE_ALGO_Hexa_3D</source>
             <translation>mesh_tree_algo_hexa.png</translation>
         </message>
-        <message>
-            <source>ICON_SMESH_TREE_ALGO_MEFISTO_2D</source>
-            <translation>mesh_tree_algo_mefisto.png</translation>
-        </message>
         <message>
             <source>ICON_SMESH_TREE_ALGO_PolygonPerFace_2D</source>
             <translation>mesh_tree_algo_polygon.png</translation>
         </message>
         <message>
             <source>ICON_SMESH_TREE_HYPO_TrianglePreference</source>
-            <translation>mesh_tree_algo_mefisto.png</translation>
+            <translation>mesh_tree_algo_tri.png</translation>
         </message>
         <message>
             <source>ICON_SMESH_TREE_HYPO_QuadraticMesh</source>
index b0df747b1588a62662ff0b259135cfcfb9935342..85a684bc6ea978614d8fe4e35aded752610a456b 100644 (file)
@@ -354,6 +354,22 @@ Consider creating another hypothesis instead of using this one for this mesh/sub
         <source>SMESH_IMPORT_SOURCE_2D_TITLE</source>
         <translation>Hypothesis Construction</translation>
     </message>
+    <message>
+        <source>SMESH_PROJECTION_SOURCE_2D_HYPOTHESIS</source>
+        <translation>Source faces</translation>
+    </message>
+    <message>
+        <source>SMESH_PROJECTION_SOURCE_2D_TITLE</source>
+        <translation>Hypothesis Construction</translation>
+    </message>
+    <message>
+        <source>SMESH_PROJECTION_SOURCE_1D_HYPOTHESIS</source>
+        <translation>Source edges</translation>
+    </message>
+    <message>
+        <source>SMESH_PROJECTION_SOURCE_1D_TITLE</source>
+        <translation>Hypothesis Construction</translation>
+    </message>
     <message>
         <source>SMESH_REMOVE_ROW</source>
         <translation>Remove row</translation>
@@ -570,6 +586,14 @@ Consider creating another hypothesis instead of using this one for this mesh/sub
         <source>USE_THRESHOLD_FOR_INTERNAL_FACES</source>
         <translation>Apply Threshold to Shared / Internal Faces</translation>
     </message>
+    <message>
+        <source>SET_QUANTA</source>
+        <translation>Set Quanta</translation>
+    </message>
+    <message>
+        <source>QUANTA_VALUE</source>
+        <translation>Quanta Value</translation>
+    </message>
     <message>
         <source>AXIS_X</source>
         <translation>Axis X</translation>
index 7f958397d7b596bc5af37845146472b20fc5287d..1558c5476399904b9b793279d976c09afc98a556 100644 (file)
@@ -562,6 +562,14 @@ Veuillez plutôt créer une autre hypothèse à la place de celle-ci pour ce mai
         <source>USE_THRESHOLD_FOR_INTERNAL_FACES</source>
         <translation>Appliquer le seuil aux faces partagées/internes</translation>
     </message>
+    <message>
+        <source>SET_QUANTA</source>
+        <translation>Utiliser Quanta</translation>
+    </message>
+    <message>
+        <source>QUANTA_VALUE</source>
+        <translation>Valeur Quanta</translation>
+    </message>
     <message>
         <source>AXIS_X</source>
         <translation>Axe X</translation>
index 8dbfc245d102d70e10b42685768b8963958a8d58..3f0b1a1ba09324e8a5277cc9289d224d681b6574 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2012-2024  CEA, EDF, OPEN CASCADE
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -27,6 +27,7 @@ INCLUDE_DIRECTORIES(
   ${MEDFILE_INCLUDE_DIRS}
   ${Boost_INCLUDE_DIRS}
   ${OMNIORB_INCLUDE_DIR}
+  ${MEDCOUPLING_INCLUDE_DIRS}
   ${PROJECT_SOURCE_DIR}/src/SMESHImpl
   ${PROJECT_SOURCE_DIR}/src/SMESH
   ${PROJECT_SOURCE_DIR}/src/SMESHUtils
@@ -38,12 +39,6 @@ INCLUDE_DIRECTORIES(
   ${PROJECT_BINARY_DIR}/idl
 )
 
-IF(SALOME_SMESH_ENABLE_MEFISTO)
-  INCLUDE_DIRECTORIES(
-      ${PROJECT_SOURCE_DIR}/src/MEFISTO2
-  )
-ENDIF(SALOME_SMESH_ENABLE_MEFISTO)
-
 # additional preprocessor / compiler flags
 ADD_DEFINITIONS(
   ${OpenCASCADE_DEFINITIONS}
@@ -120,10 +115,8 @@ SET(StdMeshersEngine_HEADERS
   StdMeshers_PolygonPerFace_2D_i.hxx
   StdMeshers_PolyhedronPerSolid_3D_i.hxx
   StdMeshers_BlockRenumber_i.hxx
+  StdMeshers_ViscousLayerBuilder_i.hxx
 )
-IF(SALOME_SMESH_ENABLE_MEFISTO)
-  SET(StdMeshersEngine_HEADERS ${StdMeshersEngine_HEADERS} StdMeshers_MEFISTO_2D_i.hxx)
-ENDIF(SALOME_SMESH_ENABLE_MEFISTO)
 # --- sources ---
 
 # sources / static
@@ -177,12 +170,9 @@ SET(StdMeshersEngine_SOURCES
   StdMeshers_PolygonPerFace_2D_i.cxx
   StdMeshers_PolyhedronPerSolid_3D_i.cxx
   StdMeshers_BlockRenumber_i.cxx
+  StdMeshers_ViscousLayerBuilder_i.cxx
 )
 
-IF(SALOME_SMESH_ENABLE_MEFISTO)
-  SET(StdMeshersEngine_SOURCES ${StdMeshersEngine_SOURCES} StdMeshers_MEFISTO_2D_i.cxx)
-ENDIF(SALOME_SMESH_ENABLE_MEFISTO)
-
 # --- rules ---
 
 ADD_LIBRARY(StdMeshersEngine ${StdMeshersEngine_SOURCES})
index c29775dbef6a8422560290f6b7ad00cb84f06ee0..8513b49a853972b6005ca18baa6df7452af1d412 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index dd0b1a4a211c951d58a84c454a0954e5f38d0762..882090a5b69341dd638d00d097c28257004f3177 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index c9c2da4cbbdd750481e72277c506128b3be94921..788c1116457503e504d9cec22da42182fa7610bd 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 88e0d8160b16a6ec4f1675cea67e0ebeab7aba49..3c868860cf7cb929231d5a69b234e597870468e0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 0a295715049767ac545e58b98a7eadc7ada9391d..b8677dcf076b9b53169e686f6e4371c67ecbe34a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 31777735e5283208925b187ccf85e89962091d79..f7a298212140c9ba3e85082c21ff625ad5be028e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index d434b00b719aa01141bc42f7db57d9699327c677..02f506a46948860770a893c2e4b9f78d2b42e452 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 45a29436aa07996755c095b02993dcbf18d2a2d0..5ebbac57ee8e5656ba6c7f8c8e2dfc0db6586ec3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 42291fd049242012e8a8875634cf03ef7ecd4151..eea682f30c898139cb5d02e9e3d08eea61c04c6a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 52e16e8438f8d52d6fb5823b48473e7c492c9eaf..040b39d88e26205680682c7dc06e5ee441e66844 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -418,6 +418,63 @@ CORBA::Boolean StdMeshers_CartesianParameters3D_i::GetToCreateFaces()
   return GetImpl()->GetToCreateFaces();
 }
 
+
+//=======================================================================
+//function : SetToUseQuanta
+//purpose  : Enables use of quanta value.
+//=======================================================================
+
+void  StdMeshers_CartesianParameters3D_i::SetToUseQuanta(CORBA::Boolean toUseQuanta)
+{
+  if ( GetToUseQuanta() == toUseQuanta )
+    return;
+  GetImpl()->SetToUseQuanta( toUseQuanta );
+  SMESH::TPythonDump() << _this() << ".SetToUseQuanta( " << toUseQuanta << " )";
+}
+
+//=======================================================================
+//function : GetToUseQuanta
+//purpose  : Check the value of toUseQuanta option
+//=======================================================================
+
+CORBA::Boolean StdMeshers_CartesianParameters3D_i::GetToUseQuanta()
+{
+  return GetImpl()->GetToUseQuanta();
+}
+
+//=============================================================================
+/*!
+ *  SetQuanta
+ */
+//=============================================================================
+
+void StdMeshers_CartesianParameters3D_i::SetQuanta(CORBA::Double quanta)
+  
+{
+  ASSERT( myBaseImpl );
+  try {
+    this->GetImpl()->SetQuanta(quanta);
+  }
+  catch ( SALOME_Exception& S_ex ) {
+    THROW_SALOME_CORBA_EXCEPTION( S_ex.what(), SALOME::BAD_PARAM );
+  }
+
+  if ( GetToUseQuanta() )
+    // Update Python script
+    SMESH::TPythonDump() << _this() << ".SetQuanta( " << SMESH::TVar(quanta) << " )";
+}
+
+//=============================================================================
+/*!
+ *  GetQuanta
+ */
+//=============================================================================
+
+CORBA::Double StdMeshers_CartesianParameters3D_i::GetQuanta()
+{
+  return this->GetImpl()->GetQuanta();
+}
+
 //=======================================================================
 //function : IsGridBySpacing
 //purpose  : Return true if the grid is defined by spacing functions and
index 8b264fe3dfe89b3519362ca60861360f292c6fb4..7d439d537c31c2b4cb91539daabd2cf00484bfea 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -125,6 +125,17 @@ class STDMESHERS_I_EXPORT StdMeshers_CartesianParameters3D_i:
   void SetToCreateFaces(CORBA::Boolean toCreate);
   CORBA::Boolean GetToCreateFaces();
 
+  /*!
+   * Set quanta option to allow replace polyhedrons by hexahedrons
+   */
+  void SetToUseQuanta(CORBA::Boolean toUseQuanta);
+  CORBA::Boolean GetToUseQuanta();
+
+  /*!
+   * Define the quanta value
+   */
+  void SetQuanta(CORBA::Double quanta);
+  CORBA::Double GetQuanta();
 
   /*!
    * \brief Return true if the grid is defined by spacing functions and
index 37f4545331e0b38ab1d68146b422eb24943ccdb3..2a8cb69840e4a34e216463f58bc65da82394127a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 2680d38730bc0a99924fad8217cf96f79c68e378..336d8eb8bda8c01b9dacf1a8d55f3efcb738a80c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 3818caa086f19a4aa7db14d61f34aca9e2481f73..0f20b23b91f59c886da5a8d93b05a0c9210f088f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 0ec74ae5cb12173e915277b26271d90f4eb1e4ff..7d252fb639ada758f9518d293ba97ea5894c8de6 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 137371b1685c4787c5a582337062a6f542d1c394..c7c58691a61d7c9d914bcd08f011aabfc63419b1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index e7b1983a439ff2e7ed810c0c04c51eaf608bfe69..8e6ff93e098c99cc74a9fd777495861a025c95cb 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 7829c7ec0d29dfacac2f659c7c29a9a3c1e492c9..efbf0b714248befd4d3622b6909b742854ba3aad 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -71,14 +71,14 @@ StdMeshers_FixedPoints1D_i::~StdMeshers_FixedPoints1D_i()
  */
 //=============================================================================
 
-void StdMeshers_FixedPoints1D_i::SetNbSegments(const SMESH::long_array& listNbSeg) 
-     
+void StdMeshers_FixedPoints1D_i::SetNbSegments(const SMESH::smIdType_array& listNbSeg)
+
 {
   ASSERT( myBaseImpl );
   try {
-    std::vector<int> nbsegs( listNbSeg.length() );
-    CORBA::Long iEnd = listNbSeg.length();
-    for ( CORBA::Long i = 0; i < iEnd; i++ )
+    std::vector<smIdType> nbsegs( listNbSeg.length() );
+    CORBA::ULong iEnd = listNbSeg.length();
+    for ( CORBA::ULong i = 0; i < iEnd; i++ )
       nbsegs[ i ] = listNbSeg[ i ];
     this->GetImpl()->SetNbSegments( nbsegs );
   }
@@ -130,7 +130,7 @@ SMESH::double_array* StdMeshers_FixedPoints1D_i::GetPoints()
   ASSERT( myBaseImpl );
   SMESH::double_array_var anArray = new SMESH::double_array;
   std::vector<double> params = this->GetImpl()->GetPoints();
-  anArray->length( params.size() );
+  anArray->length( static_cast<CORBA::ULong>( params.size() ));
   for ( CORBA::ULong i = 0; i < params.size(); i++)
     anArray [ i ] = params [ i ];
 
@@ -145,12 +145,12 @@ SMESH::double_array* StdMeshers_FixedPoints1D_i::GetPoints()
  */
 //=============================================================================
 
-SMESH::long_array* StdMeshers_FixedPoints1D_i::GetNbSegments()
+SMESH::smIdType_array* StdMeshers_FixedPoints1D_i::GetNbSegments()
 {
   ASSERT( myBaseImpl );
-  SMESH::long_array_var anArray = new SMESH::long_array;
-  std::vector<int> nbsegs = this->GetImpl()->GetNbSegments();
-  anArray->length( nbsegs.size() );
+  SMESH::smIdType_array_var anArray = new SMESH::smIdType_array;
+  std::vector<smIdType> nbsegs = this->GetImpl()->GetNbSegments();
+  anArray->length( static_cast<CORBA::ULong>( nbsegs.size() ));
   for ( CORBA::ULong i = 0; i < nbsegs.size(); i++)
     anArray [ i ] = nbsegs [ i ];
 
index 92a8245684f9b74d9bb7436fd02e5ffca38ef270..da6b8a441d3638842523a31663949d697b399734 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -53,13 +53,13 @@ public:
   // create list of reversed edges if it is needed) and sets numbers
   // of segments between given points (default values are equals 1)
   void SetPoints(const SMESH::double_array& listParams);
-  void SetNbSegments(const SMESH::long_array& listNbSeg);
+  void SetNbSegments(const SMESH::smIdType_array& listNbSeg);
 
   // Returns list of point's parameters
   SMESH::double_array* GetPoints();
   
   // Returns list of numbers of segments
-  SMESH::long_array* GetNbSegments();
+  SMESH::smIdType_array* GetNbSegments();
     
   // Get implementation
   ::StdMeshers_FixedPoints1D* GetImpl();
index 7954948f8c81d6398915d25cef2f34d9cc12a223..d2bfb8b7f47a303e54ca1c0989547787d3fe0a4a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 225c353456b0bba51d0b96d0142c9005fa2feca7..ba6958917a4ac9b592411ac99595688973fd042e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index b406c24bd74c7758a5f32127fed75c9185e01789..74a378dd14489d7eb7cc8c9d7dea46e3b789f18b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 06a283ef02a7e197369d4ba9b2f196ada25f0c4f..73866ff4152ab9fb8391fc06017d5ee8c4982ccd 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 17da16dd89751e32ccc2135fa3e9d4d51a02d6dd..cc5d699aa82fcfda4f892aa2343112921e663cc2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -92,7 +92,7 @@ void StdMeshers_ImportSource1D_i::SetSourceEdges(const SMESH::ListOfGroups& grou
           THROW_SALOME_CORBA_EXCEPTION("Wrong group type", SALOME::BAD_PARAM);
         smesh_groups.push_back( gp_i->GetSmeshGroup() );
 
-        SALOMEDS::SObject_wrap so = SMESH_Gen_i::ObjectToSObject(groups[i]);
+        SALOMEDS::SObject_wrap so = SMESH_Gen_i::GetSMESHGen()->ObjectToSObject(groups[i]);
         if ( !so->_is_nil())
         {
           CORBA::String_var entry = so->GetID();
@@ -171,7 +171,7 @@ char* StdMeshers_ImportSource1D_i::SaveTo()
     os << " " << _groupEntries[i];
 
     // id
-    SALOMEDS::SObject_wrap groupSO = SMESH_Gen_i::getStudyServant()->FindObjectID( _groupEntries[i] );
+    SALOMEDS::SObject_wrap groupSO = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindObjectID( _groupEntries[i] );
     CORBA::Object_var     groupObj;
     if ( !groupSO->_is_nil() )
       groupObj = groupSO->GetObject();
index 8d137c6af81784cd672f208fe7ef59c03514700f..34ea9547939e4741d05a358fb72314cd26f2ea94 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 6297b20ebc17336197cac05bb054ae7a1f226d94..932a85906da1623f0158492ca7bff3daeb2a1e50 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -91,7 +91,7 @@ void StdMeshers_ImportSource2D_i::SetSourceFaces(const SMESH::ListOfGroups& grou
           THROW_SALOME_CORBA_EXCEPTION("Wrong group type", SALOME::BAD_PARAM);
         smesh_groups.push_back( gp_i->GetSmeshGroup() );
 
-        SALOMEDS::SObject_var so = SMESH_Gen_i::ObjectToSObject(groups[i]);
+        SALOMEDS::SObject_var so = SMESH_Gen_i::GetSMESHGen()->ObjectToSObject(groups[i]);
         if ( !so->_is_nil())
         {
           CORBA::String_var entry = so->GetID();
@@ -171,7 +171,7 @@ char* StdMeshers_ImportSource2D_i::SaveTo()
     os << " " << _groupEntries[i];
 
     // id
-    SALOMEDS::SObject_var groupSO = SMESH_Gen_i::getStudyServant()->FindObjectID( _groupEntries[i] );
+    SALOMEDS::SObject_var groupSO = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindObjectID( _groupEntries[i] );
     CORBA::Object_var    groupObj;
     if ( !groupSO->_is_nil() ) {
       groupObj = groupSO->GetObject();
index 4a71f0479586fcc426903c78ab67eda17240836c..0ffa2b15a9bad1b79c30ad3bda929fc08eec685f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index d5592cea6d4ba7d7608c0de7edae25aac2810df1..3637b5b7988c10afb6f42de19c3a06421740e450 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index da9f0c6cd6f69ce60dca9d3ca8438a929cd8426a..b7782e9d7659ff4492a0dc2179e0b06f7582e98e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 9c89ae1a4dd98e0df5e2dd8e27ca5951fb046388..4c254658c5f080be6b3cf3c413e378e81e3c64d2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index a5bc7c5491a5e04b5813a192fbe31e1ba39c9d93..420f8986115b662113dc37aaa3b21f5fc816fe2e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 810c5aae45163d3ef9681e5d5f96ab672e16021f..509ee37f03e5cd88b2610d314a33f7b6efeac3e1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 2f8a1a1a2e0a24ad4996ff975994b25d0aba6afb..06e33d43933f2b3117139ebbbba19511798921fd 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 7f9b2e5919ba2e268a181e816119fdd93f9ee375..74571da5cfa44840850edba43cb34f61dc12670e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -90,7 +90,7 @@ void StdMeshers_LayerDistribution_i::SetLayerDistribution(SMESH::SMESH_Hypothesi
       SALOMEDS::SObject_var  SO = gen->ObjectToSObject( hyp1D );
       if ( ! SO->_is_nil() )
       {
-        SALOMEDS::StudyBuilder_var builder = SMESH_Gen_i::getStudyServant()->NewBuilder();
+        SALOMEDS::StudyBuilder_var builder = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->NewBuilder();
         builder->RemoveObjectWithChildren( SO );
         SO->UnRegister();
       }
index 70832f48442b709f8200d9204cc642ece0620193..e2d3bc37f989fce9388a246295f01d2553651b12 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 2b2c1edf5e62964243a0b07ec0875571af580c9b..7108aa40cd2e8be62fb5c093b87499f4ec73ca33 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 404e95e209c16e97ad193aebc60066290e8225a4..60079e34aca7db121412b8a9e743885707da70fe 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 045dfa8ada9971adcf167700e523749ab0ff80b7..7bbe80da5303cfd439c3f492bbe6fcee33d30c03 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index b98f696f39a9a139400f1eceeb41e7625d869383..c4bb326d5e22e3332b603bb4b891077bc9a42f31 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
diff --git a/src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.cxx b/src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.cxx
deleted file mode 100644 (file)
index 5230544..0000000
+++ /dev/null
@@ -1,81 +0,0 @@
-// Copyright (C) 2007-2020  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 SMESH_I : idl implementation based on 'SMESH' unit's classes
-//  File   : StdMeshers_MEFISTO_2D_i.cxx
-//           Moved here from SMESH_MEFISTO_2D_i.cxx
-//  Author : Paul RASCLE, EDF
-//  Module : SMESH
-//  $Header$
-//
-#include "StdMeshers_MEFISTO_2D_i.hxx"
-#include "SMESH_Gen.hxx"
-
-#include "Utils_CorbaException.hxx"
-#include "utilities.h"
-
-using namespace std;
-
-//=============================================================================
-/*!
- *  StdMeshers_MEFISTO_2D_i::StdMeshers_MEFISTO_2D_i
- *
- *  Constructor
- */
-//=============================================================================
-
-StdMeshers_MEFISTO_2D_i::StdMeshers_MEFISTO_2D_i( PortableServer::POA_ptr thePOA,
-                                                  ::SMESH_Gen*            theGenImpl )
-     : SALOME::GenericObj_i( thePOA ), 
-       SMESH_Hypothesis_i( thePOA ), 
-       SMESH_Algo_i( thePOA ),
-       SMESH_2D_Algo_i( thePOA )
-{
-  myBaseImpl = new ::StdMeshers_MEFISTO_2D( theGenImpl->GetANewId(),
-                                            theGenImpl );
-}
-
-//=============================================================================
-/*!
- *  StdMeshers_MEFISTO_2D_i::~StdMeshers_MEFISTO_2D_i
- *
- *  Destructor
- */
-//=============================================================================
-
-StdMeshers_MEFISTO_2D_i::~StdMeshers_MEFISTO_2D_i()
-{
-}
-
-//=============================================================================
-/*!
- *  StdMeshers_MEFISTO_2D_i::GetImpl
- *
- *  Get implementation
- */
-//=============================================================================
-
-::StdMeshers_MEFISTO_2D* StdMeshers_MEFISTO_2D_i::GetImpl()
-{
-  return ( ::StdMeshers_MEFISTO_2D* )myBaseImpl;
-}
-
diff --git a/src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.hxx b/src/StdMeshers_I/StdMeshers_MEFISTO_2D_i.hxx
deleted file mode 100644 (file)
index cfea6bd..0000000
+++ /dev/null
@@ -1,62 +0,0 @@
-// Copyright (C) 2007-2020  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 SMESH_I : idl implementation based on 'SMESH' unit's classes
-//  File   : StdMeshers_MEFISTO_2D_i.hxx
-//           Moved here from SMESH_MEFISTO_2D_i.hxx
-//  Author : Paul RASCLE, EDF
-//  Module : SMESH
-//  $Header$
-//
-#ifndef _StdMeshers_MEFISTO_2D_I_HXX_
-#define _StdMeshers_MEFISTO_2D_I_HXX_
-
-#include "SMESH_StdMeshers_I.hxx"
-
-#include <SALOMEconfig.h>
-#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
-
-#include "SMESH_2D_Algo_i.hxx"
-#include "StdMeshers_MEFISTO_2D.hxx"
-
-class SMESH_Gen;
-
-// ======================================================
-// Triangle (MEFISTO) 2d algorithm
-// ======================================================
-class STDMESHERS_I_EXPORT StdMeshers_MEFISTO_2D_i:
-  public virtual POA_StdMeshers::StdMeshers_MEFISTO_2D,
-  public virtual SMESH_2D_Algo_i
-{
-public:
-  // Constructor
-  StdMeshers_MEFISTO_2D_i( PortableServer::POA_ptr thePOA,
-                           ::SMESH_Gen*            theGenImpl );
-
-  // Destructor
-  virtual ~StdMeshers_MEFISTO_2D_i();
-
-  // Get implementation
-  ::StdMeshers_MEFISTO_2D* GetImpl();
-};
-
-#endif
index 7d2433a41ea433ff89d389ff44b7ea686b11b3aa..d9379c95fd9752e8b34b09bb3448c68c0fc44949 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 1a54e5d517aa9e70f8708b2f61aa0e4cc8369e80..d8238d314f56bf90ec2a63f9bf5564d6e1ea6b56 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index e0ee663dd7ce37be7aa2d46a9cacb53498f42d9a..b4d26e66b7a08e7868a559354233ba345daf90d2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 598f6e67b5474b96be6c249069cb0a986ca18bcb..deb3b0c3612a75a95c43a1110b7d44d758bdbfe3 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index e6615ab46190c18db092812664041cdd05b22fc5..6220bd97672f7602ef6094bfe44cad5c888a9524 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index a271b8e73e983e0fe6af5b965f12b256c112ba75..3499fa03a5aa1ed1d904ce5a0b880725e6e7507b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index a41e2c70826501862f83dbbb30659ff7ddd55b9f..c1753451978c1cf0259e43d216c0856c500a7fc0 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 730b93ac69da1bb7532654cefc8f77b14046ad06..a36c3980f1329806f0c93bd5e039729b2aa9c0c8 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index cd4ce2e6a2f422795d4732e8c338042676e68511..e1a951d52594323681a5c62e5f53b0c72045a572 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index df014dd2471210d9fffa6928940adff6ee7e42c0..5d57549e804a514a5fd66f67e12db05660a05120 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index c959e0804df87c3fc5b80ea3feaedd5a54aa5768..19884176006d9c803507eba5ab0fa854b77a9c8e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 09955fdea42ebc45e477964ba82e18d9000f64c3..b1b88de5ef3c53f9fe1d75ba5cd00b6ab17ba9ba 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 1d16872538092239afd80ae3f367531775755b99..5a3a0af40feaf950bf7c27a738a43454adfc4a99 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -127,7 +127,7 @@ StdMeshers_NumberOfSegments_i::BuildDistributionTab( const SMESH::double_array&
  */
 //=============================================================================
 
-void StdMeshers_NumberOfSegments_i::SetNumberOfSegments( CORBA::Long theSegmentsNumber )
+void StdMeshers_NumberOfSegments_i::SetNumberOfSegments( SMESH::smIdType theSegmentsNumber )
 {
   ASSERT( myBaseImpl );
   try {
index 5f00a8fb9cc328b71bf212845866b75df33e5d90..28e94d0e6ff23471df0e784b6098a952d3c1c454 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -58,7 +58,7 @@ public:
   SMESH::double_array* BuildDistributionTab( const SMESH::double_array&, CORBA::Long, CORBA::Long );
 
   // Set number of segments
-  void SetNumberOfSegments( CORBA::Long theSegmentsNumber );
+  void SetNumberOfSegments( SMESH::smIdType theSegmentsNumber );
   // Get number of segments
   CORBA::Long GetNumberOfSegments();
 
index 363e3132111ccc917d994780bed10ea36973f729..2a0c4bed9ad47203ebcbb2c395ad0a6d8d861b51 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -60,7 +60,7 @@ StdMeshers_ObjRefUlils::EntryOrShapeToGeomObject (const std::string&  theEntry,
   // try by entry
   if (SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen()) {
     if ( ! theEntry.empty() ) {
-      SALOMEDS::SObject_wrap sobj = SMESH_Gen_i::getStudyServant()->FindObjectID( theEntry.c_str() );
+      SALOMEDS::SObject_wrap sobj = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindObjectID( theEntry.c_str() );
       CORBA::Object_var       obj = gen->SObjectToObject( sobj );
       geom = GEOM::GEOM_Object::_narrow( obj );
     }
@@ -116,7 +116,7 @@ TopoDS_Shape StdMeshers_ObjRefUlils::LoadFromStream( istream &    stream,
     if ( entry )
       * entry = str;
     if (SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen()) {
-      SALOMEDS::SObject_wrap sobj = SMESH_Gen_i::getStudyServant()->FindObjectID( str.c_str() );
+      SALOMEDS::SObject_wrap sobj = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindObjectID( str.c_str() );
       CORBA::Object_var       obj = gen->SObjectToObject( sobj );
       GEOM::GEOM_Object_var  geom = GEOM::GEOM_Object::_narrow( obj );
       return gen->GeomObjectToShape( geom.in() );
@@ -173,7 +173,7 @@ TopoDS_Shape StdMeshers_ObjRefUlils::EntryToShape(const std::string theEntry)
   TopoDS_Shape shape;
 
   if (SMESH_Gen_i* gen = SMESH_Gen_i::GetSMESHGen()) {
-    SALOMEDS::SObject_wrap sobj = SMESH_Gen_i::getStudyServant()->FindObjectID( theEntry.c_str() );
+    SALOMEDS::SObject_wrap sobj = SMESH_Gen_i::GetSMESHGen()->getStudyServant()->FindObjectID( theEntry.c_str() );
     CORBA::Object_var       obj = gen->SObjectToObject( sobj );
     GEOM::GEOM_Object_var  geom = GEOM::GEOM_Object::_narrow( obj );
     shape = gen->GeomObjectToShape( geom.in() );
index fcaa16460b7a280b641a90dabe852208f613a0e0..1f2c0ac578623665154aae7ec7fbf1d62a1c33fc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -29,6 +29,7 @@
 #define StdMeshers_ObjRefUlils_HeaderFile
 
 #include "SMESH_Gen_i.hxx"
+#include "SMESH_StdMeshers_I.hxx"
 
 /*!
  * \brief Class encapsulates methods
@@ -70,7 +71,7 @@ public:
    *  \param theEntry - study entry
    *  \retval TopoDS_Shape - result TopoDS_Shape
    */
-  static TopoDS_Shape EntryToShape(const std::string theEntry);
+  STDMESHERS_I_EXPORT static TopoDS_Shape EntryToShape(const std::string theEntry);
 
   /*!
    * \brief Return study entry of GEOM Object
index 5eab7a7baa2c0db6672f96f9df6e353ca0b764c9..42b55da7868d81572a03c634b1833ed5b69bb41a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 480eeb928acf7bea764bf5a1da5eaecc873aee35..5097fcdea1ccc30d07a890d0445ee5bda3c8e401 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 62bceebf7cb45e5a5e39cc89fac1672d867ab30c..39c7144f714915e17103d85960cb72e731d0baee 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 6d7b9726c8310477107239177d1a9d6153e51199..65fd843d13e3f4f2594e1011b776a16c4cb4b447 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 07d58cb6eb9a08763c9606e8c0318c9c3defe943..bbeaa32cb4167cff0ac7d99ecbd96686181e4144 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 0ffd21f1abe3d6273b1de0970c60f7fd6e0e9872..c3290c45ee85809544ea252270d610e282b2caeb 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index fba7197de9c5e4b34638b50dbe2651ed2f473117..8abfe06deb8fd608616094b5fbca742343455339 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 19e426be299f51d201922246b5237a3f880dd37d..ea0dbe56dde9d621c091b1918c7fa473abfdd166 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 4cfe2739cd2d07d1cc2211bebed98ddbdb52606b..28f2c31d43561a23c598603075a335a1b08672d1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 7dcb90f74b4810d6bf906ce14a68e260ff17addc..05225ae76e331b574c2a81602f00f8faee04df11 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 112330e6b4340d956dcaf699bcc40b7821e833de..d7648ac99df030b50fa624aea69646b456a0ac8f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 4f3b3c9c5425dbeac6b221a435abb0a698723a33..826cebf5b85808afabd38834a078e0d10f80c72b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 5a9b0cb97130a82dc21ac29da0c33e49e4945679..6da05f056b7341085e18a2cab819b279937d6254 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 0fc97c809ff63afdbe486c3249cd3b3be216291d..1af5422ba25870d287d6e226b2a5a39068290906 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 3d246e5c8617a22f2724a4d2c5e09588b00f465e..632a4831e20764094f906eaa07f0b8292ffeb55b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 3cb292d4e85ca264b5d0bdd8bcabf7ef454e6b72..1513864264dce0a3705f6753a0c9e4d807527d9e 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 45f26349b4f2eda07ac2532613a7dad084d8018a..2946d20d404a18bd8ad64863f64d3fa424e78d1a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 2a2c63dba102cdca125bb6e91cdba7619d1f0135..b7009583dcb35f99c8e20cee1d93ce49cc7203fc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 9f3b0b490b17afa810078aa08181fec945d9dbfa..e972d757ab7693cef901dacfae86d45db29a0c2a 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 66e1a2332f65b496eff69a0266adc496b566281d..fd7e01c6e630191b3e440352adc5c1b941c24e78 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index cd6b9b66cad2d6ad6fcafd48eb39f403f4866cdd..ae37b5491b0ad1496f32a501fbcc02adf3f41721 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index f1242a866a5f9196389c27fe8058b06b0c279a99..b676b62fb5b277e12a4ed8793055454f7345e615 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 5986c9f0de32e18cac547a959b88cfec2f4f07f3..c6ff2e190d7f9a90dfcf3ea4da2adab2283ef0aa 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 84d7c4a4a479f3403fa08200859eb671b8072a17..4d183730e0a9fac8047b3f9c37e31e2902e06382 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 955dff0f6f6910330510e2eaac4bb97dcca20dd6..41480c288c44a0abac835f39086f2079a43acf35 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index c7fd09c1173750ec341775d8f53e2daa7a0d7226..8d9cbc23f1bcd9602b4188977fed4e66cc1d5e22 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index aac1f6eba7e185a2ce522c88aeae0ef9a8ab1144..4da7267db0549ac92fa63d7377d0844fc55c79bc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 390c923a80a0716c6d00efef2ca11a401be50f37..56da8fefb9c329580e88140462ce5361e9b4e92f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 99f70048b8b3ae48da388902dc2e49dbb21f4fe1..4045fe7dd80427100f14f02cf4bf23f73bdd1c35 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index c42f94f3fb04c9c942b28ac35d73e3e21b9f8999..5544dc6f24771ccddcc0ad9a1f1bf94b352a2d49 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 43dbb00420426dce77be0de879f6436b52db2b3f..5fd63883a96483db9631789121eb9b3e5bdaeebb 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index da082662cfea2fe5e7c65b0c14580cedd9eda174..247a6690184ab7b3b12e53d287a0c1cd6a851a82 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 6d346c39a08d552385b78760f359b84b17ad512d..d60257a2a9ac12503790400de70e306bc4ba5f63 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 3be789de4736ff340e191e52e660c596e6cefcc6..f53618d9eb47537e6319fe3d5faabe734671a9ed 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 6f4af0dbebb15dee9556d0d2adf65d438d4e6449..89a9e8c018f8fd1d69dff6493affa7a4ba8c1fd5 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 784eebe1c9b4a57d932c2b7d81f8de95753ace7b..0736ee2c467d8e9bfcb817899efcaa326c2067e2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 59a1cd3908a9091763e9c4d844b98ea60589c212..02601f70abf88e20fa8362147e731388dcda7ea4 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index b56f1844783698659245b2056323535b03b62bb5..69b8d28b2d980dcff0b3a0b26fa64a37c3474de9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
diff --git a/src/StdMeshers_I/StdMeshers_ViscousLayerBuilder_i.cxx b/src/StdMeshers_I/StdMeshers_ViscousLayerBuilder_i.cxx
new file mode 100644 (file)
index 0000000..61328ba
--- /dev/null
@@ -0,0 +1,213 @@
+// Copyright (C) 2007-2024  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 SMESH_I : idl implementation based on 'SMESH' unit's classes
+//  File   : StdMeshers_ViscousLayers_i.cxx
+//  Module : SMESH
+//
+#include "StdMeshers_ViscousLayerBuilder_i.hxx"
+
+#include "SMESH_Gen.hxx"
+#include "SMESH_Gen_i.hxx"
+#include "SMESH_Group.hxx"
+#include "SMESH_Group_i.hxx"
+#include "SMESH_PythonDump.hxx"
+
+#include "BRepTools.hxx"
+#include "Utils_CorbaException.hxx"
+#include "utilities.h"
+
+#include <TCollection_AsciiString.hxx>
+
+#include CORBA_SERVER_HEADER(SMESH_Group)
+
+using namespace std;
+
+//=============================================================================
+/*!
+ *  StdMeshers_ViscousLayerBuilder_i::StdMeshers_ViscousLayerBuilder_i
+ *
+ *  Constructor
+ */
+//=============================================================================
+
+StdMeshers_ViscousLayerBuilder_i::StdMeshers_ViscousLayerBuilder_i( PortableServer::POA_ptr thePOA,
+                                                                      ::SMESH_Gen*            theGenImpl )
+  : SALOME::GenericObj_i( thePOA ), 
+      SMESH_Hypothesis_i( thePOA ),
+      SMESH_Algo_i( thePOA ),
+      SMESH_2D_Algo_i( thePOA )
+{
+  myBaseImpl = new ::StdMeshers_ViscousLayerBuilder( theGenImpl->GetANewId(),
+                                                      theGenImpl );
+}
+
+::StdMeshers_ViscousLayerBuilder* StdMeshers_ViscousLayerBuilder_i::GetImpl()
+{
+  return ( ::StdMeshers_ViscousLayerBuilder* )myBaseImpl;
+}
+
+//================================================================================
+/*!
+ * \brief Verify whether hypothesis supports given entity type 
+  * \param type - dimension (see SMESH::Dimension enumeration)
+  * \retval CORBA::Boolean - TRUE if dimension is supported, FALSE otherwise
+ * 
+ * Verify whether hypothesis supports given entity type (see SMESH::Dimension enumeration)
+ */
+//================================================================================  
+CORBA::Boolean StdMeshers_ViscousLayerBuilder_i::IsDimSupported( SMESH::Dimension type )
+{
+  return type == SMESH::DIM_3D || type == SMESH::DIM_2D;
+}
+
+void StdMeshers_ViscousLayerBuilder_i::SetFaces(const ::SMESH::long_array& faceIDs,
+                                                  CORBA::Boolean             toIgnore)
+{
+  vector<int> ids( faceIDs.length() );
+  for ( unsigned i = 0; i < ids.size(); ++i )
+    if (( ids[i] = faceIDs[i] ) < 1 )
+      THROW_SALOME_CORBA_EXCEPTION( "Invalid face id", SALOME::BAD_PARAM );
+
+  GetImpl()->SetBndShapes( ids, toIgnore );
+
+  SMESH::TPythonDump() << _this() << ".SetFaces( " << faceIDs << ", " << toIgnore << " )";
+}
+
+
+void StdMeshers_ViscousLayerBuilder_i::SetIgnoreFaces(const ::SMESH::long_array& faceIDs)
+{
+  vector<int> ids( faceIDs.length() );
+  for ( unsigned i = 0; i < ids.size(); ++i )
+    if (( ids[i] = faceIDs[i] ) < 1 )
+      THROW_SALOME_CORBA_EXCEPTION( "Invalid face id", SALOME::BAD_PARAM );
+  GetImpl()->SetBndShapes( ids, /*toIgnore=*/true );
+  SMESH::TPythonDump() << _this() << ".SetIgnoreFaces( " << faceIDs << " )";
+}
+
+void StdMeshers_ViscousLayerBuilder_i::SetTotalThickness(::CORBA::Double thickness)
+{
+  if ( thickness < 1e-100 )
+    THROW_SALOME_CORBA_EXCEPTION( "Invalid thickness", SALOME::BAD_PARAM );
+  GetImpl()->SetTotalThickness(thickness);
+  SMESH::TPythonDump() << _this() << ".SetTotalThickness( " << SMESH::TVar(thickness) << " )";
+}
+
+void StdMeshers_ViscousLayerBuilder_i::SetNumberLayers(::CORBA::Short nb)
+{
+  if ( nb < 1 )
+    THROW_SALOME_CORBA_EXCEPTION( "Invalid number of layers", SALOME::BAD_PARAM );
+  GetImpl()->SetNumberLayers( nb );
+  SMESH::TPythonDump() << _this() << ".SetNumberLayers( " << SMESH::TVar(nb) << " )";
+}
+
+void StdMeshers_ViscousLayerBuilder_i::SetStretchFactor(::CORBA::Double factor)
+{
+  if ( factor < 1 )
+    THROW_SALOME_CORBA_EXCEPTION( "Invalid stretch factor, it must be >= 1.0", SALOME::BAD_PARAM );
+  GetImpl()->SetStretchFactor(factor);
+  SMESH::TPythonDump() << _this() << ".SetStretchFactor( " << SMESH::TVar(factor) << " )";
+}
+
+void StdMeshers_ViscousLayerBuilder_i::SetMethod( ::StdMeshers::VLExtrusionMethod how )
+{
+  GetImpl()->SetMethod( ::StdMeshers_ViscousLayers::ExtrusionMethod( how ));
+  const char* methNames[3] = { "SURF_OFFSET_SMOOTH",
+                               "FACE_OFFSET",
+                               "NODE_OFFSET" };
+  if ( how >= 0 && how < 3 )
+    SMESH::TPythonDump() << _this() << ".SetMethod( StdMeshers." << methNames[ how ]<< " )";
+}
+
+void StdMeshers_ViscousLayerBuilder_i::SetGroupName(const char* name)
+{
+  GetImpl()->SetGroupName( name );
+  SMESH::TPythonDump() << _this() << ".SetGroupName( '" << name << "' )";
+}
+
+GEOM::GEOM_Object_ptr StdMeshers_ViscousLayerBuilder_i::GetShrinkGeometry( SMESH::SMESH_Mesh_ptr finalMesh, GEOM::GEOM_Object_ptr theShapeObject )
+{
+  
+  GEOM::GEOM_Object_var aShapeObj;
+  TopoDS_Shape theShape        = StdMeshers_ObjRefUlils::GeomObjectToShape( theShapeObject );
+  SMESH_Mesh_i* theFinalMesh_i = SMESH::DownCast< SMESH_Mesh_i* >( finalMesh );
+  TopoDS_Shape shrinkGeometry;
+  
+  try 
+  {
+    shrinkGeometry = GetImpl()->GetShrinkGeometry( theFinalMesh_i->GetImpl(), theShape );
+  }
+  catch ( std::exception& exc )
+  {
+    std::cout << exc.what() << "\n";
+    THROW_SALOME_CORBA_EXCEPTION( exc.what(), SALOME::INTERNAL_ERROR  );
+    return aShapeObj; // Maybe better to return a init and empty object(?)
+  }
+
+  if ( !shrinkGeometry.IsNull() )
+  {     
+    std::ostringstream streamShape;
+    //Write TopoDS_Shape in ASCII format to the stream
+    BRepTools::Write(shrinkGeometry, streamShape);
+    //Returns the number of bytes that have been stored in the stream's buffer.
+    int size = streamShape.str().size();
+    //Allocate octect buffer of required size
+    CORBA::Octet* OctetBuf = SALOMEDS::TMPFile::allocbuf(size);
+    //Copy ostrstream content to the octect buffer
+    memcpy(OctetBuf, streamShape.str().c_str(), size);
+    //Create and return TMPFile
+    SALOMEDS::TMPFile_var SeqFile = new SALOMEDS::TMPFile(size,size,OctetBuf,1);
+    // Get the geom engine
+    GEOM::GEOM_Gen_var geomEngine = theShapeObject->GetGen();
+    auto iOp                      = geomEngine->GetIInsertOperations();
+    aShapeObj                     = iOp->RestoreShape( SeqFile );
+    geomEngine->AddInStudy( aShapeObj, "Shrink", GEOM::GEOM_Object::_nil());        
+  }
+
+  return aShapeObj;
+}
+
+CORBA::Boolean StdMeshers_ViscousLayerBuilder_i::AddLayers( SMESH::SMESH_Mesh_ptr shrinkMesh, SMESH::SMESH_Mesh_ptr finalMesh, GEOM::GEOM_Object_ptr theShapeObject )
+{
+  TopoDS_Shape theShape         = StdMeshers_ObjRefUlils::GeomObjectToShape( theShapeObject );
+  SMESH_Mesh_i* shrinkMesh_i    = SMESH::DownCast< SMESH_Mesh_i* >( shrinkMesh );
+  SMESH_Mesh_i* theFinalMesh_i  = SMESH::DownCast< SMESH_Mesh_i* >( finalMesh );
+  bool success = false;
+
+  try 
+  {
+    success = GetImpl()->AddLayers( shrinkMesh_i->GetImpl(), theFinalMesh_i->GetImpl(), theShape );  
+  }
+  catch ( std::exception& exc )
+  {
+    THROW_SALOME_CORBA_EXCEPTION( exc.what(), SALOME::INTERNAL_ERROR  );
+  }
+  
+  return success;
+}
+//=============================================================================
+/*!
+ *  StdMeshers_ViscousLayerBuilder_i::~StdMeshers_ViscousLayerBuilder_i
+ *
+ *  Destructor
+ */
+//=============================================================================
+StdMeshers_ViscousLayerBuilder_i::~StdMeshers_ViscousLayerBuilder_i()
+{
+}
\ No newline at end of file
diff --git a/src/StdMeshers_I/StdMeshers_ViscousLayerBuilder_i.hxx b/src/StdMeshers_I/StdMeshers_ViscousLayerBuilder_i.hxx
new file mode 100644 (file)
index 0000000..94c8d2b
--- /dev/null
@@ -0,0 +1,73 @@
+// Copyright (C) 2007-2024  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   : StdMeshers_ViscousLayerBuilder_i.hxx
+//  Module : SMESH
+//
+#ifndef _SMESH_ViscousLayersBuilder_I_HXX_
+#define _SMESH_ViscousLayersBuilder_I_HXX_
+
+#include "SMESH_StdMeshers_I.hxx"
+
+#include <SALOMEconfig.h>
+#include CORBA_SERVER_HEADER(SMESH_BasicHypothesis)
+
+#include "SMESH_2D_Algo_i.hxx"
+#include "SMESH_Hypothesis_i.hxx"
+#include "SMESH_Mesh_i.hxx"
+#include "StdMeshers_ViscousLayerBuilder.hxx"
+#include "StdMeshers_ObjRefUlils.hxx"
+
+class SMESH_Gen;
+
+class STDMESHERS_I_EXPORT StdMeshers_ViscousLayerBuilder_i: 
+  public virtual POA_StdMeshers::StdMeshers_ViscousLayerBuilder,
+  public virtual SMESH_2D_Algo_i
+{
+ public:
+  // Constructor
+  StdMeshers_ViscousLayerBuilder_i( PortableServer::POA_ptr thePOA,
+                                      ::SMESH_Gen*            theGenImpl );
+  // Destructor
+  virtual ~StdMeshers_ViscousLayerBuilder_i();
+
+  // Verify whether algorithm supports given entity type 
+  CORBA::Boolean IsDimSupported( SMESH::Dimension type );
+
+  // Get implementation
+  ::StdMeshers_ViscousLayerBuilder* GetImpl();  
+
+  void SetIgnoreFaces(const ::SMESH::long_array& faceIDs);
+  void SetFaces(const SMESH::long_array& faceIDs,
+                CORBA::Boolean           toIgnore);
+  void SetTotalThickness(::CORBA::Double thickness);
+  void SetNumberLayers(::CORBA::Short nb);
+  void SetStretchFactor(::CORBA::Double factor);
+  void SetMethod( ::StdMeshers::VLExtrusionMethod how );
+  void SetGroupName(const char* name);
+
+  // Compute and return the shrink geometry 
+  GEOM::GEOM_Object_ptr GetShrinkGeometry( SMESH::SMESH_Mesh_ptr finalMesh, GEOM::GEOM_Object_ptr theShapeObject );
+
+  // Build the viscous layer on the specified faces/edges available in the sourceMesh and consolidate the result in the finalMesh
+  CORBA::Boolean AddLayers( SMESH::SMESH_Mesh_ptr sourceMesh, SMESH::SMESH_Mesh_ptr finalMesh, GEOM::GEOM_Object_ptr theShapeObject );
+  
+};
+
+#endif
index eaeb970ab643cb5f4524f4a0e23eb4bca02c8ef2..eec5588f16e2b0f9eb00cd38221c1d178d7828a9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index b7d5a2afe1a5e5ddc1680d4a83ad5fdac9fe237f..1ed9b78d0cb8289d9918bab0dcf27be134ed9fce 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 7f967dcb2d2d3c8a8fbaf627818cdbc77b68b276..671eb03fd9e6924c322baef34e975c53e7776ee1 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index 0b9affd4185c9a3594e464d574a41c807cbb0a99..e453d60f52c3c9b957ea580bd44335ae6b59983f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
index b9782affa09c1f3e4e288e56ad823b091e364bc2..f0c973cdf46d8ab0690549b84117d170dd0a545f 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+// Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 //
 // Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 // CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
@@ -77,9 +77,7 @@
 #include "StdMeshers_UseExisting_1D2D_i.hxx"
 #include "StdMeshers_ViscousLayers2D_i.hxx"
 #include "StdMeshers_ViscousLayers_i.hxx"
-#ifdef ENABLE_MEFISTO
- #include "StdMeshers_MEFISTO_2D_i.hxx"
-#endif
+#include "StdMeshers_ViscousLayerBuilder_i.hxx"
 
 namespace SMESH {
   class ApplicableToAny
@@ -209,15 +207,11 @@ STDMESHERS_I_EXPORT
     else if (strcmp(aHypName, "CartesianParameters3D") == 0)
       aCreator = new StdHypothesisCreator_i<StdMeshers_CartesianParameters3D_i>;
     else if (strcmp(aHypName, "BlockRenumber") == 0)
-      aCreator = new StdHypothesisCreator_i<StdMeshers_BlockRenumber_i>;
+      aCreator = new StdHypothesisCreator_i<StdMeshers_BlockRenumber_i>;    
 
     // Algorithms
     else if (strcmp(aHypName, "Regular_1D") == 0)
       aCreator = new StdHypothesisCreator_i<StdMeshers_Regular_1D_i>;
-#ifdef ENABLE_MEFISTO
-    else if (strcmp(aHypName, "MEFISTO_2D") == 0)
-      aCreator = new StdHypothesisCreator_i<StdMeshers_MEFISTO_2D_i>;
-#endif
     else if (strcmp(aHypName, "Quadrangle_2D") == 0)
       aCreator = new StdHypothesisCreator_i<StdMeshers_Quadrangle_2D_i, StdMeshers_Quadrangle_2D_i>;
     else if (strcmp(aHypName, "QuadFromMedialAxis_1D2D") == 0)
@@ -255,7 +249,9 @@ STDMESHERS_I_EXPORT
     else if (strcmp(aHypName, "PolygonPerFace_2D") == 0)
       aCreator = new StdHypothesisCreator_i<StdMeshers_PolygonPerFace_2D_i>;
     else if (strcmp(aHypName, "PolyhedronPerSolid_3D") == 0)
-      aCreator = new StdHypothesisCreator_i<StdMeshers_PolyhedronPerSolid_3D_i>;
+      aCreator = new StdHypothesisCreator_i<StdMeshers_PolyhedronPerSolid_3D_i>;    
+    else if (strcmp(aHypName, "ViscousLayerBuilder") == 0)
+      aCreator = new StdHypothesisCreator_i<StdMeshers_ViscousLayerBuilder_i>;
 
     return aCreator;
   }
index de8baf90abb525ce1fe07bd259f45f2a95274331..b5f70d310d6959caf88acde2816c5d7cd026fb13 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -26,6 +26,7 @@ ADD_SUBDIRECTORY(MacMesh)
 IF(SALOME_BUILD_GUI)
   ADD_SUBDIRECTORY(MGCleanerPlug)
   ADD_SUBDIRECTORY(YamsPlug)
+  ADD_SUBDIRECTORY(TopIIVolMeshPlug)
 #  ADD_SUBDIRECTORY(ZCracksPlug)
 ENDIF(SALOME_BUILD_GUI)
 
index 7e145316bfdc7b6ded0a94c3d9f69ef8b6404390..37ac7b030c249502010113a57227ef7b8040433c 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 553c192dc8b733f789b98c8f7357879216234730..2a6db8594d7179a569da22ac672dccdcd663c67a 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -525,18 +525,6 @@ class MGCleanerMonPlugDialog(Ui_MGCleanerPlugDialog,QWidget):
 
   def PrepareLigneCommande(self):
     """
-    #use doc examples of mg-cleaner:
-    ls -al /data/tmplgls/salome/prerequis/install/COMMON_64/MeshGems-1.0/bin
-    source /data/tmplgls/salome/prerequis/install/LICENSE/dlim8.var.sh
-    export PATH=/data/tmplgls/salome/prerequis/install/COMMON_64/MeshGems-1.0/bin/Linux_64:$PATH
-    cp -r /data/tmplgls/salome/prerequis/install/COMMON_64/MeshGems-1.0/examples .
-    cd examples
-    mg-cleaner.exe --help
-    mg-cleaner.exe --in case7.mesh --out case7-test.mesh --check
-    mg-cleaner.exe case7.mesh case7-fix.mesh --fix
-    mg-cleaner.exe --in Porsche.mesh --out Porsche-test.mesh --check
-    mg-cleaner.exe --in Porsche.mesh --out Porschefix.mesh --fix
-    mg-cleaner.exe --in Porsche.mesh --out PorscheNewfix.mesh --fix --resolution_length 0.03
     """
     
     #self.commande="mg-cleaner.exe --in " + self.fichierIn + " --out " + self.fichierOut + " --fix2pass" 
@@ -577,7 +565,13 @@ class MGCleanerMonPlugDialog(Ui_MGCleanerPlugDialog,QWidget):
     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())
-    if verbose: print(("INFO: MGCCleaner command:\n  %s" % self.commande))
+
+    import SMeshHelper
+    key = SMeshHelper.GetMGLicenseKey( self.fichierIn )
+    if key != "0":
+      self.commande+=' --key ' + key
+
+    if verbose: print("INFO: MG-Cleaner command:\n  %s" % self.commande)
     return True
 
   def clean(self):
index d9a909318772efe19d41361fdeab944e6bae464c..16471834c4dcf605d3485044c8e2c2126ecf6b87 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -35,11 +35,6 @@ from MGCleanerViewText_ui import Ui_ViewExe
 
 verbose = True
 
-force = os.getenv("FORCE_DISTENE_LICENSE_FILE")
-if force != None:
-    os.environ["DISTENE_LICENSE_FILE"] = force
-    os.environ["DLIM8VAR"] = "NOTHING"
-
 class MGCleanerMonViewText(Ui_ViewExe, QDialog):
     """
     Classe permettant la visualisation de texte
index 99deb778bd2dbff88b8f2f19d445ff127b6bd739..88b24e61d05998ce1f1dd850f05d446aa4c2526e 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -31,15 +31,6 @@ def MGCleanerLct(context):
   import tempfile
   from qtsalome import QFileDialog, QMessageBox
   
-  #prior test to avoid unnecessary user GUI work with ending crash
-  try :
-      os.environ['DISTENE_LICENSE_FILE']
-  except:
-      QMessageBox.warning(None, "Products", """\
-Distene's product MeshGem Cleaner is not installed.
-required environment variable:
-DISTENE_LICENSE_FILE='.../dlim8.var.sh'""")
-      return
   import MGCleanerMonPlugDialog
   window = MGCleanerMonPlugDialog.getDialog()
   window.show()
index 4fbcab885106a0540c1d0c1c203480e881f89433..cb2802a59a14725507da134527258d142d9a89a9 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 45fba350117c529c1db42b07935f7a2e2f179856..fbd2801a21252ed078e33c5429324f262e9cea7f 100644 (file)
@@ -43,7 +43,7 @@ master_doc = 'index'
 
 # General substitutions.
 project = 'MGCleaner Plug-in'
-copyright = '2013-2020, EDF R&D'
+copyright = '2013-2024, EDF'
 
 # The default replacements for |version| and |release|, also used in various
 # other places throughout the built documents.
index eb6b82fcbb39dde219b2b2dbd4b0abb4965c8751..2efbb3d963e153f5d9def787f872e66a14a9e00f 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -57,10 +57,10 @@ SET(sample_SCRIPT
 SALOME_INSTALL_SCRIPTS("${plugin_SCRIPTS}" ${MACMESH_INSTALL_PY})
 SALOME_INSTALL_SCRIPTS("${sample_SCRIPT}" ${SALOME_INSTALL_SCRIPT_PYTHON} DEF_PERMS)
 
-SET(testname MacMesh_Example_PressureValve)
-SALOME_GENERATE_TESTS_ENVIRONMENT(tests_env)
-ADD_TEST(
-  NAME ${testname}
-  COMMAND ${PYTHON_EXECUTABLE} -B ${CMAKE_SOURCE_DIR}/doc/salome/examples/testme.py ${sample_SCRIPT})
-SET_TESTS_PROPERTIES(${testname} PROPERTIES ENVIRONMENT "${tests_env}")
-
+IF(SALOME_BUILD_TESTS)
+  SET(testname MacMesh_Example_PressureValve)
+  SALOME_GENERATE_TESTS_ENVIRONMENT(tests_env)
+  ADD_TEST(NAME ${testname}
+           COMMAND ${PYTHON_EXECUTABLE} -B ${CMAKE_SOURCE_DIR}/test/test_helper.py ${sample_SCRIPT})
+  SET_TESTS_PROPERTIES(${testname} PROPERTIES ENVIRONMENT "${tests_env}" LABELS "macmesh")
+ENDIF()
index 83df178fc6966a9f54316c48474232d2496e3371..b7a11ab78e7c1fd0b36acebefc3848fbfb5c4cbe 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index b1522b1e096a15313ba8c1669f5a32aa8980dc37..8f64de530e950f166d32fcd8ed9edc8cc46edce8 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 43b9c3460c439828d1faad3cdf748042a179dce8..82379077aee016d0ee8964f44046aa11e139e837 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index cc7c07b0dd152be90fa955b11f2bf6da18fa0d37..449823556bc3721fc93a9d1fc44b5f9fcb786925 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index d7e17d729f98e813888cc4aa31fb217a23ac48d2..997a9573e568e8997736df253537f288402970fb 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 2219c57c54c2122f568eda1bfb120a52bfb58c5e..78bee1d7af7922e8c127d278a305c6e155946c98 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 95fb0c25fc299bd16e134ad48c97abf59fd41791..3d41b61d1f6bd5ff0ee4a543bed703b59dbddd1d 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index e66bf92bcacd46b6cc9ac50214b6a88b796a12ca..ce817af0db69ab228444608232f6c1331f291e97 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 3a7a6ea0170e2f7ae9e4bf0c065e76ece2183a3e..61ee45e8685d36d7990a91eadab822b091098015 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 935d4fe4333bdfc3d045abfb54b60bd71b150e19..ef0c88a6cc9fc8ba0e10fe5e4832b43fde143032 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 9f2f55fc1c79fe6f0e479ac298f92f50b0e9738a..6f64866b6125e31fa36dc886f29d387e243ec109 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 872788363311b7a95dfbb69c06fbf6a285ff049f..adb373ff00eaf0de26ecad81c5996b33dbd4c4d0 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index ca40e303ed6ed9f53be9fd58af287c9b6b25d2f5..b30de18d4c64eebf7889eeee9ced4202203c4216 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2020  EDF R&D
+// Copyright (C) 2006-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index d510b472a4055ffeb312caa8f08993b3dbdcdaea..d728cd8bca198ffcb8f70852090db38cacc59bc2 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index cb951b98e280a0e13b9f27da8b5401691ccf5133..9d11cec0e66bcae3e9135caeec1b18ae2322c5da 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2020  EDF R&D
+// Copyright (C) 2006-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index b6c2c6d3c1cb35bea9e70c9662fd9b5dd5fbb266..7debbbe0f4c972b1c4467aeae79110de9ac845ec 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2020  EDF R&D
+// Copyright (C) 2006-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index e3a2003f8e36445430040e8d0b0be2afc7c010c3..d04be5378ca24dd8d420154c3b7ad273eca4aeed 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2020  EDF R&D
+// Copyright (C) 2006-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 0e129d6586dd235b1306549a142865a45063dd4b..7ac0b2b4982fa314473117d15b3a5124d377f71d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2020  EDF R&D
+// Copyright (C) 2006-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index f6fb083f544cbe083e2082fc2a93ea1a2281ac7d..bb9620a3985bace1d0446ef1e4852eede8c8f8eb 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2020  EDF R&D
+// Copyright (C) 2006-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 0fd7fef6967a00692837dde7e6838bf9f361cfc1..1a8d4cdd4f2170926cbcb1a5812d8f413318db09 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2020  EDF R&D
+// Copyright (C) 2006-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index d5c056691735497035ff332a5a008f9faeab88b3..89f912fbae02bb23842a6fb57a11e7da06215a3b 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2020  EDF R&D
+// Copyright (C) 2006-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 4b54b99e6b1b105ee3a58041101d04f4dcbf1517..4f765641cd3464d766755c63bba5899cf3755157 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2020  EDF R&D
+// Copyright (C) 2006-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index f3d8a51d47f7ba7b8b34b81c36543348c0110930..cef8c363fcc542dfb76c2c2065aff0aad2e54aa9 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2020  EDF R&D
+// Copyright (C) 2006-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 97def3c42e8cf36753e10c51a2cd00585303413f..fabf253ccbd18ba3246a9354fb638a7bc0daf485 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2020  EDF R&D
+// Copyright (C) 2006-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index e71a29677b0fc6f549bf57756685b6231d7638d9..9c3200e668ef1d0a568647f304a6072533993b75 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2020  EDF R&D
+// Copyright (C) 2006-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index a383db29be3b6b02cefe9415ce8f48818bff2688..4187a1a728243756c70cae193f8d479f9a3f3dbc 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2020  EDF R&D
+// Copyright (C) 2006-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 07438154946b3d915462793a637954e91097f886..e04ea5f61ebc9b99eabd6c9fc4fc2537d102549d 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2020  EDF R&D
+// Copyright (C) 2006-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index aa88c52c37e31dedde092ad771cb1261f70c347e..3ab3292e1c5373d4eaf06da1dec1703e3e839af2 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2006-2020  EDF R&D
+// Copyright (C) 2006-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 7a4f5dfdd303907a738101172e02bb5db177263e..5bb7476e769def35c44871030332c81d47f1e891 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2006-2020  EDF R&D
+# Copyright (C) 2006-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
diff --git a/src/Tools/TopIIVolMeshPlug/CMakeLists.txt b/src/Tools/TopIIVolMeshPlug/CMakeLists.txt
new file mode 100644 (file)
index 0000000..ba22220
--- /dev/null
@@ -0,0 +1,59 @@
+# Copyright (C) 2013-2024  EDF
+#
+# 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
+#
+
+IF(SALOME_BUILD_DOC)
+  ADD_SUBDIRECTORY(doc)
+ENDIF(SALOME_BUILD_DOC)
+
+IF(SALOME_BUILD_GUI)
+  INCLUDE(UsePyQt)
+ENDIF(SALOME_BUILD_GUI)
+
+# --- scripts ---
+
+# scripts / static
+SET(_plugin_SCRIPTS
+  TopIIVolMeshPluginDialog.py
+  TopIIVolMeshPlugin.py
+  TopIIVolMeshPlugin_plugin.py
+  TopIIVolMeshMonitor.py
+  README
+)
+
+IF(SALOME_BUILD_GUI)
+  # uic files / to be processed by pyuic
+  SET(_pyuic_FILES
+    TopIIVolMeshPluginDialog.ui
+    TopIIVolMeshMonitor.ui
+  )
+  # scripts / pyuic wrappings
+  PYQT_WRAP_UIC(_pyuic_SCRIPTS ${_pyuic_FILES} TARGET_NAME _target_name_pyuic)
+ENDIF(SALOME_BUILD_GUI)
+
+# --- rules ---
+
+SALOME_INSTALL_SCRIPTS("${_plugin_SCRIPTS}" ${SALOME_SMESH_INSTALL_PLUGINS})
+IF(SALOME_BUILD_GUI)
+  SALOME_INSTALL_SCRIPTS("${_pyuic_SCRIPTS}" ${SALOME_SMESH_INSTALL_PLUGINS} TARGET_NAME _target_name_pyuic_py)
+  # add dependency of compiled py files on uic files in order
+  # to avoid races problems when compiling in parallel
+  ADD_DEPENDENCIES(${_target_name_pyuic_py} ${_target_name_pyuic})
+  # Install the CMake configuration files:
+  INSTALL(FILES "${PROJECT_SOURCE_DIR}/README" DESTINATION "${SALOME_INSTALL_CMAKE_LOCAL}")
+ENDIF(SALOME_BUILD_GUI)
diff --git a/src/Tools/TopIIVolMeshPlug/README b/src/Tools/TopIIVolMeshPlug/README
new file mode 100644 (file)
index 0000000..c4d66d4
--- /dev/null
@@ -0,0 +1,33 @@
+******************************
+About SALOME TopIIVolMesh plug-in
+******************************
+
+SALOME TopIIVolMesh plug-in implements an interface to the topIIvol meshing tool.
+
+SALOME TopIIVolMesh plug-in is integrated into SALOME platform via the SALOME Mesh
+module.
+
+For more information please visit the SALOME platform web site:
+
+  <https://www.salome-platform.org/>
+
+=======
+License
+=======
+
+SALOME platform is distributed under the GNU Lesser General Public License.
+See COPYING file for more details.
+
+============
+Installation
+============
+
+=============
+Documentation
+=============
+
+===============
+Troubleshooting
+===============
+
+Please, send a mail to webmaster.salome@opencascade.com.
diff --git a/src/Tools/TopIIVolMeshPlug/TopIIVolMeshMonitor.py b/src/Tools/TopIIVolMeshPlug/TopIIVolMeshMonitor.py
new file mode 100644 (file)
index 0000000..d0f2664
--- /dev/null
@@ -0,0 +1,97 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2013-2024 CEA/DES, EDF
+#
+# 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
+#
+
+import os
+import sys
+import string
+import types
+import tempfile
+import traceback
+import pprint as PP #pretty print
+
+from qtsalome import *
+
+# Import des panels
+
+from TopIIVolMeshMonitor_ui import Ui_qdLogger
+
+verbose = True
+
+class TopIIVolMeshMonitor(Ui_qdLogger, QDialog):
+  def __init__(self, parent, txt):
+    QDialog.__init__(self,parent)
+    self.setupUi(self)
+    self.resize( QSize(1000,600).expandedTo(self.minimumSizeHint()) )
+    self.qpbOK.clicked.connect( self.OnQpbOKClicked )
+    # Button OK is disabled until computation is finished
+    self.qpbOK.setEnabled(False)
+    self.qpbSave.clicked.connect( self.OnQpbSaveClicked )
+    self.qpbSave.setToolTip("Save trace in log file")
+    self.qpbOK.setToolTip("Close view")
+    self.myExecutable=QProcess(self)
+    self.myExecutable.readyReadStandardOutput.connect( self.readFromStdOut )
+    self.myExecutable.readyReadStandardError.connect( self.readFromStdErr )
+    self.myExecutable.finished.connect( self.computationFinished )
+    self.myExecutable.errorOccurred.connect( self.computationOnError )
+    if os.path.exists(self.parent().outputMesh):
+       os.remove(self.parent().outputMesh)
+    self.myExecutable.start(txt)
+    self.myExecutable.closeWriteChannel()
+    self.show()
+
+  def OnQpbOKClicked(self):
+    self.close()
+
+  def OnQpbSaveClicked(self):
+    outputDirectory=os.path.expanduser("~")
+    fn, mask = QFileDialog.getSaveFileName(None,"Save File",outputDirectory)
+    if not fn:
+      return
+    ulfile = os.path.abspath(str(fn))
+    try:
+      f = open(fn, 'wb')
+      f.write(self.qtbLogWindow.toPlainText().encode("utf-8"))
+      f.close()
+    except IOError as why:
+      QMessageBox.critical(self, 'Save File',
+                                 'The file <b>%s</b> could not be saved.<br>Reason: %s'%(str(fn), str(why)))
+
+  def readFromStdErr(self):
+    a=self.myExecutable.readAllStandardError()
+    aa=a.data().decode(errors='ignore')
+    self.qtbLogWindow.append(aa)
+
+  def readFromStdOut(self) :
+    a=self.myExecutable.readAllStandardOutput()
+    aa=a.data().decode(errors='ignore')
+    self.qtbLogWindow.append(aa)
+
+  def computationFinished(self):
+    self.qpbOK.setEnabled(True)
+    if self.myExecutable.exitCode() == 0:
+      self.parent().saveOutputMesh()
+    else:
+      QMessageBox.critical(self, 'Computation failed',
+                                 'The computation has failed.<br>Please, check the log message.')
+
+  def computationOnError(self):
+    self.qpbOK.setEnabled(True)
+    QMessageBox.critical(self, 'Computation failed',
+                               'The computation has failed.<br>Please, check the log message.')
diff --git a/src/Tools/TopIIVolMeshPlug/TopIIVolMeshMonitor.ui b/src/Tools/TopIIVolMeshPlug/TopIIVolMeshMonitor.ui
new file mode 100644 (file)
index 0000000..5bded34
--- /dev/null
@@ -0,0 +1,38 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>qdLogger</class>
+ <widget class="QDialog" name="qdLogger">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>469</width>
+    <height>489</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Run TopIIVolMesh</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="1" column="1">
+    <widget class="QPushButton" name="qpbSave">
+     <property name="text">
+      <string>Save log</string>
+     </property>
+    </widget>
+   </item>
+   <item row="0" column="0" colspan="2">
+    <widget class="QTextBrowser" name="qtbLogWindow"/>
+   </item>
+   <item row="1" column="0">
+    <widget class="QPushButton" name="qpbOK">
+     <property name="text">
+      <string>Ok</string>
+     </property>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/Tools/TopIIVolMeshPlug/TopIIVolMeshPlugin.py b/src/Tools/TopIIVolMeshPlug/TopIIVolMeshPlugin.py
new file mode 100644 (file)
index 0000000..6a66a93
--- /dev/null
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2013-2024  EDF
+#
+# 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
+#
+
+# if you already have plugins defined in a salome_plugins.py file, add this file at the end.
+# if not, copy this file as ${HOME}/Plugins/smesh_plugins.py or ${APPLI}/Plugins/smesh_plugins.py
+
+def TopIIVolMeshLct(context):
+  # get context study, salomeGui
+  study = context.study
+  sg = context.sg
+
+  import os
+  import subprocess
+  import tempfile
+  from qtsalome import QFileDialog, QMessageBox
+
+  import TopIIVolMeshPluginDialog
+  window = TopIIVolMeshPluginDialog.getInstance()
+  window.show()
diff --git a/src/Tools/TopIIVolMeshPlug/TopIIVolMeshPluginDialog.py b/src/Tools/TopIIVolMeshPlug/TopIIVolMeshPluginDialog.py
new file mode 100644 (file)
index 0000000..031df17
--- /dev/null
@@ -0,0 +1,171 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2013-2024 CEA/DES, EDF
+#
+# 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
+#
+
+
+import os, subprocess
+import random
+import getpass
+import time
+import pathlib
+
+# set seed
+from datetime import datetime
+random.seed(datetime.now())
+
+import platform
+import tempfile
+from TopIIVolMeshPluginDialog_ui import Ui_TopIIVolMeshMainFrame
+from TopIIVolMeshMonitor import TopIIVolMeshMonitor
+from qtsalome import *
+
+verbose = True
+
+class TopIIVolMeshPluginDialog(Ui_TopIIVolMeshMainFrame,QWidget):
+  """
+  """
+  def __init__(self):
+    QWidget.__init__(self)
+    self.setupUi(self)
+    self.qpbHelp.clicked.connect(self.OnQpbHelpClicked)
+    self.qpbCompute.clicked.connect(self.OnQpbComputeClicked)
+    self.qpbMeshFile.clicked.connect(self.OnQpbMeshFileClicked)
+    self.qpbMeshFile.setToolTip("Select input DEM file")
+    self.qpbClose.clicked.connect(self.OnQpbCloseClicked)
+    self.qrbDist.clicked.connect(self.OnqrbDistClicked)
+    self.qrbPar.clicked.connect(self.OnqrbParClicked)
+    self.qrbSeq.clicked.connect(self.OnqrbSeqClicked)
+    self.SALOME_TMP_DIR = None
+    try:
+      self.qleTmpDir.setText(os.path.join('/tmp',getpass.getuser(),'top-ii-vol'))
+    except:
+      self.qleTmpDir.setText('/tmp')
+    self.outputMesh = ''
+
+  def OnQpbHelpClicked(self):
+    import SalomePyQt
+    sgPyQt = SalomePyQt.SalomePyQt()
+    try:
+      mydir=os.environ["SMESH_ROOT_DIR"]
+    except Exception:
+      QMessageBox.warning(self, "Help", "Help unavailable $SMESH_ROOT_DIR not found")
+      return
+
+    myDoc=mydir + "/share/doc/salome/gui/SMESH/TopIIVolMesh/index.html"
+    sgPyQt.helpContext(myDoc,"")
+
+  def OnQpbMeshFileClicked(self):
+    fd = QFileDialog(self, "select an existing Mesh file", self.qleMeshFile.text(), "Mesh-Files (*.xyz);;All Files (*)")
+    if fd.exec_():
+      infile = fd.selectedFiles()[0]
+      self.qleMeshFile.setText(infile)
+
+  def OnQpbComputeClicked(self):
+    if self.qleMeshFile.text() == '':
+      QMessageBox.critical(self, "Mesh", "select an input mesh")
+      return
+    inputMesh = self.qleMeshFile.text()
+    # retrieve x,y,z and depth parameters
+    xPoints = self.qsbXPoints.value()
+    yPoints = self.qsbYPoints.value()
+    zPoints = self.qsbZPoints.value()
+    depth   = self.qsbDepth.value()
+    nProcs  = self.qsbNBprocs.value()
+    if not self.qrbDist.isChecked():
+      if nProcs == 1:
+        shellCmd = "topIIvol_Mesher"
+      else:
+        shellCmd = "mpirun -np {} topIIvol_ParMesher".format(nProcs)
+      shellCmd+= " --xpoints " + str(xPoints)
+      shellCmd+= " --ypoints " + str(yPoints)
+      shellCmd+= " --zpoints " + str(zPoints)
+      shellCmd+= " --depth   " + str(depth)
+      shellCmd+= " --in " + inputMesh
+    else:
+      xParts = self.qsbXParts.value()
+      yParts = self.qsbYParts.value()
+      zParts = self.qsbZParts.value()
+      shellCmd = "mpirun -np {} topIIvol_DistMesher".format(nProcs)
+      shellCmd+= " --xpoints " + str(xPoints)
+      shellCmd+= " --ypoints " + str(yPoints)
+      shellCmd+= " --zpoints " + str(zPoints)
+      shellCmd+= " --depth   " + str(depth)
+      shellCmd+= " --partition_x " + str(xParts)
+      shellCmd+= " --partition_y " + str(yParts)
+      shellCmd+= " --partition_z " + str(zParts)
+      shellCmd+= " --in " + inputMesh
+    if platform.system()=="Windows" :
+      self.SALOME_TMP_DIR = os.getenv("SALOME_TMP_DIR")
+    else:
+      self.SALOME_TMP_DIR = os.path.join(self.qleTmpDir.text(), time.strftime("%Y-%m-%d-%H-%M-%S"))
+      pathlib.Path(self.SALOME_TMP_DIR).mkdir(parents=True, exist_ok=True)
+    self.outputMesh= os.path.join(self.SALOME_TMP_DIR, inputMesh.split('/').pop().replace('.xyz','.mesh'))
+    shellCmd+= " --out " + self.outputMesh
+    os.chdir(self.SALOME_TMP_DIR)
+    print("INFO: ", shellCmd)
+    myMonitorView=TopIIVolMeshMonitor(self, shellCmd)
+
+  def OnqrbDistClicked(self):
+    state = self.qrbDist.isChecked()
+    self.qgbDist.setEnabled(state)
+    self.qsbNBprocs.setEnabled(state)
+    self.qlbNBprocs.setEnabled(state)
+
+  def OnqrbParClicked(self):
+    state = self.qrbPar.isChecked()
+    self.qgbDist.setEnabled(not state)
+    self.qsbNBprocs.setEnabled(state)
+    self.qlbNBprocs.setEnabled(state)
+
+  def OnqrbSeqClicked(self):
+    state = self.qrbSeq.isChecked()
+    if state:
+      self.qsbNBprocs.setValue(1)
+    self.qgbDist.setEnabled(not state)
+    self.qsbNBprocs.setEnabled(not state)
+    self.qlbNBprocs.setEnabled(not state)
+    
+  def OnQpbCloseClicked(self):
+    self.close()
+
+  def saveOutputMesh(self):
+    if not self.qcbDisplayMesh.isChecked():
+      return True
+    import salome
+    import  SMESH, SALOMEDS
+    from salome.smesh import smeshBuilder
+    smesh = smeshBuilder.New()
+    self.outputMesh.split('/')
+    for mesh in pathlib.Path(self.SALOME_TMP_DIR).glob('*.mesh'):
+      (outputMesh, status) = smesh.CreateMeshesFromGMF(os.path.join(self.SALOME_TMP_DIR, mesh))
+    if salome.sg.hasDesktop():
+        salome.sg.updateObjBrowser()
+    return True
+
+__instance = None
+
+def getInstance():
+  """
+  This function returns a singleton instance of the plugin dialog.
+  It is mandatory in order to call show without a parent ...
+  """
+  global __instance
+  if __instance is None:
+    __instance = TopIIVolMeshPluginDialog()
+  return __instance
diff --git a/src/Tools/TopIIVolMeshPlug/TopIIVolMeshPluginDialog.ui b/src/Tools/TopIIVolMeshPlug/TopIIVolMeshPluginDialog.ui
new file mode 100644 (file)
index 0000000..4a449f0
--- /dev/null
@@ -0,0 +1,455 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ui version="4.0">
+ <class>TopIIVolMeshMainFrame</class>
+ <widget class="QWidget" name="TopIIVolMeshMainFrame">
+  <property name="geometry">
+   <rect>
+    <x>0</x>
+    <y>0</y>
+    <width>758</width>
+    <height>400</height>
+   </rect>
+  </property>
+  <property name="windowTitle">
+   <string>Tetrahedral mesh generator for DEM point-clouds</string>
+  </property>
+  <layout class="QGridLayout" name="gridLayout">
+   <item row="1" column="0">
+    <spacer name="verticalSpacer">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="0" column="0">
+    <widget class="QGroupBox" name="groupBox">
+     <property name="font">
+      <font>
+       <pointsize>10</pointsize>
+      </font>
+     </property>
+     <property name="title">
+      <string>Input Mesh</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_2">
+      <item row="0" column="1">
+       <widget class="QLineEdit" name="qleMeshFile">
+        <property name="font">
+         <font>
+          <pointsize>10</pointsize>
+         </font>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="0">
+       <widget class="QPushButton" name="qpbMeshFile">
+        <property name="font">
+         <font>
+          <pointsize>10</pointsize>
+         </font>
+        </property>
+        <property name="text">
+         <string>DEM input file</string>
+        </property>
+        <property name="iconSize">
+         <size>
+          <width>18</width>
+          <height>18</height>
+         </size>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+   <item row="3" column="0">
+    <spacer name="verticalSpacer_2">
+     <property name="orientation">
+      <enum>Qt::Vertical</enum>
+     </property>
+     <property name="sizeHint" stdset="0">
+      <size>
+       <width>20</width>
+       <height>40</height>
+      </size>
+     </property>
+    </spacer>
+   </item>
+   <item row="4" column="0">
+    <layout class="QHBoxLayout" name="horizontalLayout">
+     <item>
+      <widget class="QPushButton" name="qpbCompute">
+       <property name="text">
+        <string>Compute</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <widget class="QPushButton" name="qpbClose">
+       <property name="text">
+        <string>Close</string>
+       </property>
+      </widget>
+     </item>
+     <item>
+      <spacer name="horizontalSpacer">
+       <property name="orientation">
+        <enum>Qt::Horizontal</enum>
+       </property>
+       <property name="sizeHint" stdset="0">
+        <size>
+         <width>40</width>
+         <height>20</height>
+        </size>
+       </property>
+      </spacer>
+     </item>
+     <item>
+      <widget class="QPushButton" name="qpbHelp">
+       <property name="font">
+        <font>
+         <pointsize>10</pointsize>
+        </font>
+       </property>
+       <property name="text">
+        <string>Help</string>
+       </property>
+      </widget>
+     </item>
+    </layout>
+   </item>
+   <item row="2" column="0">
+    <widget class="QGroupBox" name="gbOptions">
+     <property name="title">
+      <string>Options</string>
+     </property>
+     <layout class="QGridLayout" name="gridLayout_6">
+      <item row="0" column="0" rowspan="2" colspan="2">
+       <widget class="QGroupBox" name="qgbNBpoints">
+        <property name="title">
+         <string>Number of points</string>
+        </property>
+        <layout class="QGridLayout" name="gridLayout_4">
+         <item row="0" column="0">
+          <widget class="QSpinBox" name="qsbXPoints">
+           <property name="minimum">
+            <number>0</number>
+           </property>
+           <property name="maximum">
+            <number>999999999</number>
+           </property>
+           <property name="value">
+            <number>10</number>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="1">
+          <widget class="QLabel" name="qlXpoints">
+           <property name="text">
+            <string>X direction</string>
+           </property>
+          </widget>
+         </item>
+         <item row="1" column="0">
+          <widget class="QSpinBox" name="qsbYPoints">
+           <property name="minimum">
+            <number>0</number>
+           </property>
+           <property name="maximum">
+            <number>999999999</number>
+           </property>
+           <property name="value">
+            <number>10</number>
+           </property>
+          </widget>
+         </item>
+         <item row="1" column="1">
+          <widget class="QLabel" name="qlYpoints">
+           <property name="text">
+            <string>Y direction</string>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="0">
+          <widget class="QSpinBox" name="qsbZPoints">
+           <property name="minimum">
+            <number>0</number>
+           </property>
+           <property name="maximum">
+            <number>999999999</number>
+           </property>
+           <property name="value">
+            <number>10</number>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="1">
+          <widget class="QLabel" name="qlZpoints">
+           <property name="text">
+            <string>Z direction</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
+      </item>
+      <item row="0" column="2">
+       <spacer name="horizontalSpacer_3">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>0</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="0" column="3" rowspan="2" colspan="3">
+       <widget class="QGroupBox" name="groupBox_2">
+        <property name="title">
+         <string>Meshing</string>
+        </property>
+        <layout class="QGridLayout" name="gridLayout_5">
+         <item row="0" column="0">
+          <widget class="QRadioButton" name="qrbSeq">
+           <property name="text">
+            <string>Sequential</string>
+           </property>
+           <property name="checked">
+            <bool>true</bool>
+           </property>
+          </widget>
+         </item>
+         <item row="1" column="0">
+          <widget class="QRadioButton" name="qrbPar">
+           <property name="text">
+            <string>Parallel</string>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="0">
+          <widget class="QRadioButton" name="qrbDist">
+           <property name="text">
+            <string>Parallel distributed</string>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
+      </item>
+      <item row="0" column="6">
+       <spacer name="horizontalSpacer_5">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>0</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="0" column="7">
+       <widget class="QSpinBox" name="qsbNBprocs">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <property name="minimum">
+         <number>0</number>
+        </property>
+        <property name="maximum">
+         <number>999999999</number>
+        </property>
+        <property name="value">
+         <number>1</number>
+        </property>
+       </widget>
+      </item>
+      <item row="0" column="8">
+       <widget class="QLabel" name="qlbNBprocs">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <property name="text">
+         <string>Number of  processors</string>
+        </property>
+       </widget>
+      </item>
+      <item row="1" column="7" rowspan="3" colspan="2">
+       <widget class="QGroupBox" name="qgbDist">
+        <property name="enabled">
+         <bool>false</bool>
+        </property>
+        <property name="title">
+         <string>Number of partitions</string>
+        </property>
+        <property name="checkable">
+         <bool>false</bool>
+        </property>
+        <layout class="QGridLayout" name="gridLayout_3">
+         <item row="1" column="0" colspan="2">
+          <widget class="QSpinBox" name="qsbYParts">
+           <property name="minimum">
+            <number>0</number>
+           </property>
+           <property name="maximum">
+            <number>999999999</number>
+           </property>
+           <property name="value">
+            <number>1</number>
+           </property>
+          </widget>
+         </item>
+         <item row="1" column="2" colspan="2">
+          <widget class="QLabel" name="qlbYParts">
+           <property name="text">
+            <string>Y direction</string>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="2" colspan="2">
+          <widget class="QLabel" name="qlbXParts">
+           <property name="text">
+            <string>X direction</string>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="2">
+          <widget class="QLabel" name="qlbZParts">
+           <property name="text">
+            <string>Z direction</string>
+           </property>
+          </widget>
+         </item>
+         <item row="2" column="0" colspan="2">
+          <widget class="QSpinBox" name="qsbZParts">
+           <property name="minimum">
+            <number>0</number>
+           </property>
+           <property name="maximum">
+            <number>999999999</number>
+           </property>
+           <property name="value">
+            <number>1</number>
+           </property>
+          </widget>
+         </item>
+         <item row="0" column="0" colspan="2">
+          <widget class="QSpinBox" name="qsbXParts">
+           <property name="minimum">
+            <number>0</number>
+           </property>
+           <property name="maximum">
+            <number>999999999</number>
+           </property>
+           <property name="value">
+            <number>1</number>
+           </property>
+          </widget>
+         </item>
+        </layout>
+       </widget>
+      </item>
+      <item row="2" column="0">
+       <widget class="QSpinBox" name="qsbDepth">
+        <property name="minimum">
+         <number>-999999999</number>
+        </property>
+        <property name="maximum">
+         <number>999999999</number>
+        </property>
+        <property name="value">
+         <number>0</number>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="1">
+       <widget class="QLabel" name="qlDepth">
+        <property name="text">
+         <string>Depth in Z direction</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="3">
+       <widget class="QCheckBox" name="qcbDisplayMesh">
+        <property name="text">
+         <string/>
+        </property>
+        <property name="checked">
+         <bool>true</bool>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="4">
+       <widget class="QLabel" name="qlDisplayMesh">
+        <property name="text">
+         <string>Display mesh</string>
+        </property>
+       </widget>
+      </item>
+      <item row="2" column="5">
+       <spacer name="horizontalSpacer_2">
+        <property name="orientation">
+         <enum>Qt::Horizontal</enum>
+        </property>
+        <property name="sizeHint" stdset="0">
+         <size>
+          <width>60</width>
+          <height>20</height>
+         </size>
+        </property>
+       </spacer>
+      </item>
+      <item row="3" column="0">
+       <widget class="QLabel" name="qlTmpDir">
+        <property name="text">
+         <string>Workspace</string>
+        </property>
+       </widget>
+      </item>
+      <item row="4" column="0" colspan="9">
+       <widget class="QLineEdit" name="qleTmpDir">
+        <property name="sizePolicy">
+         <sizepolicy hsizetype="Expanding" vsizetype="Fixed">
+          <horstretch>0</horstretch>
+          <verstretch>0</verstretch>
+         </sizepolicy>
+        </property>
+        <property name="text">
+         <string/>
+        </property>
+       </widget>
+      </item>
+     </layout>
+    </widget>
+   </item>
+  </layout>
+ </widget>
+ <tabstops>
+  <tabstop>qpbMeshFile</tabstop>
+  <tabstop>qleMeshFile</tabstop>
+  <tabstop>qsbXPoints</tabstop>
+  <tabstop>qsbYPoints</tabstop>
+  <tabstop>qsbZPoints</tabstop>
+  <tabstop>qsbDepth</tabstop>
+  <tabstop>qsbNBprocs</tabstop>
+  <tabstop>qsbXParts</tabstop>
+  <tabstop>qsbYParts</tabstop>
+  <tabstop>qsbZParts</tabstop>
+  <tabstop>qleTmpDir</tabstop>
+  <tabstop>qpbCompute</tabstop>
+  <tabstop>qpbClose</tabstop>
+  <tabstop>qpbHelp</tabstop>
+ </tabstops>
+ <resources/>
+ <connections/>
+</ui>
diff --git a/src/Tools/TopIIVolMeshPlug/TopIIVolMeshPlugin_plugin.py b/src/Tools/TopIIVolMeshPlug/TopIIVolMeshPlugin_plugin.py
new file mode 100644 (file)
index 0000000..f4ea898
--- /dev/null
@@ -0,0 +1,36 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2013-2024 CEA/DES, EDF
+#
+# 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
+#
+
+# if you already have plugins defined in a salome_plugins.py file, add this file at the end.
+# if not, copy this file as ${HOME}/Plugins/smesh_plugins.py or ${APPLI}/Plugins/smesh_plugins.py
+
+def TopIIVolMeshLct(context):
+  # get context study, salomeGui
+  study = context.study
+  sg = context.sg
+
+  import os
+  import subprocess
+  import tempfile
+  from qtsalome import QFileDialog, QMessageBox
+
+  import TopIIVolMeshPluginDialog
+  window = TopIIVolMeshPluginDialog.getDialog()
+  window.show()
diff --git a/src/Tools/TopIIVolMeshPlug/doc/CMakeLists.txt b/src/Tools/TopIIVolMeshPlug/doc/CMakeLists.txt
new file mode 100644 (file)
index 0000000..d6d7f17
--- /dev/null
@@ -0,0 +1,30 @@
+# Copyright (C) 2012-2024  EDF
+#
+# 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
+#
+
+SALOME_CONFIGURE_FILE(conf.py.in conf.py)
+
+SET(_cmd_options -c ${CMAKE_CURRENT_BINARY_DIR} -b html -d doctrees ${CMAKE_CURRENT_SOURCE_DIR} docutils)
+SALOME_GENERATE_ENVIRONMENT_SCRIPT(_cmd env_script "${SPHINX_EXECUTABLE}" "${_cmd_options}" CONTEXT TopIIVolMeshPlug_DOC)
+ADD_CUSTOM_TARGET(html_docs_TopIIVolMeshPlug COMMAND ${_cmd})
+
+INSTALL(CODE "EXECUTE_PROCESS(COMMAND \"${CMAKE_COMMAND}\" --build ${PROJECT_BINARY_DIR} --target html_docs_TopIIVolMeshPlug)")
+INSTALL(DIRECTORY ${CMAKE_CURRENT_BINARY_DIR}/docutils/ DESTINATION ${SALOME_INSTALL_DOC}/gui/SMESH/TopIIVolMesh)
+
+SET(make_clean_files docutils doctrees)
+SET_DIRECTORY_PROPERTIES(PROPERTIES ADDITIONAL_MAKE_CLEAN_FILES "${make_clean_files}")
diff --git a/src/Tools/TopIIVolMeshPlug/doc/TopIIVolMesh.rst b/src/Tools/TopIIVolMeshPlug/doc/TopIIVolMesh.rst
new file mode 100644 (file)
index 0000000..b9d871d
--- /dev/null
@@ -0,0 +1,68 @@
+Introduction
+============
+
+**topIIvol** meshing tool provides sequential and parallel tools for creating volumetric tetrahedral meshes from a given terrain topology via digital elevation model (DEM point-cloud `*.xyz`). Via this plugin one could produce distributed meshes suitable for domain-decomposition based solvers or simply non distributed meshes (single mesh) suitable for a sequential/parallel solver.
+
+Running topIIvol Plug-in
+========================
+
+**topIIVolMesh** plug-in can be invoked via SMESH Plugin item in Mesh menu bar 
+
+.. image:: images/callTopIIVolMesh.png
+   :align: center
+
+
+**topIIVolMesh** Options
+========================
+
+Users have option of performing meshing via:
+
+- *Sequential* mode: mesh computation in sequential and outputs a single mesh.
+- *Parallel* mode: mesh computation in parallel and outputs a single mesh. 
+- *Parallel distributed* mode: mesh computation in parallel and outputs partitioned meshes.
+
+Sequential mode
+---------------
+By default sequential meshing mode is activated. **topIIvol_Mesher** sequential tool is called for creating volumetric tetrahedral mesh for the given DEM point-cloud. The volumetric mesh can be displayed in SALOME by ticking the "Display mesh" check-box.
+
+The list of input parameters are:
+
+- DEM input file: input point cloud file in .xyz format;
+- Number of X points present in the input point cloud;
+- Number of Y points present in the input point cloud;
+- Number of Z points intended in the Z direction;
+- Depth of the mesh needed;
+- temporary directory for calculation.
+
+Parallel mode
+---------------
+For larger meshes the parallel meshing mode can be activated via the check-box **Parallel**. Additionally, this requires the user to provide the number of processors to be used for parallel meshing. Then, **topIIvol_ParMesher** parallel computing tool is called for creating volumetric tetrahedral mesh for the given DEM point-cloud. The volumetric mesh can be displayed in SALOME by ticking the "Display mesh" check-box.
+
+The list of input parameters are:
+
+- DEM input file: input point cloud file in .xyz format;
+- Number of X points present in the input point cloud;
+- Number of Y points present in the input point cloud;
+- Number of Z points intended in the Z direction;
+- Depth of the mesh needed;
+- Number of MPI ranks
+- temporary directory for calculation.
+
+
+Parallel distributed mode
+-----------------
+For larger meshes suitable for distributed-memory solvers (domain-decomposition) the distributed parallel meshing mode can be activated via the check-box **Parallel distributed**. This requires the user to provide the number of processors to be used for parallel meshing and how to partition the mesh in each direction (X, Y, Z). Then,  **topIIvol_DistMesher** computing tool is called for creating embarassingly parallel distributed meshes for the given DEM point-cloud. These volumetric mesh partitions can be displayed in SALOME by ticking the "Display mesh" check-box.
+
+The list of input parameters are:
+
+- DEM input file: input point cloud file in .xyz format;
+- Number of X points present in the input point cloud;
+- Number of Y points present in the input point cloud;
+- Number of Z points intended in the Z direction;
+- Depth of the mesh needed;
+- Number of partitions in X direction;
+- Number of partitions in Y direction;
+- Number of partitions in Z direction;
+- Number of MPI ranks
+- temporary directory for calculation.
+
diff --git a/src/Tools/TopIIVolMeshPlug/doc/conf.py.in b/src/Tools/TopIIVolMeshPlug/doc/conf.py.in
new file mode 100644 (file)
index 0000000..ea0464b
--- /dev/null
@@ -0,0 +1,187 @@
+# -*- coding: utf-8 -*-
+#
+# TopIIVolMesh PlugIn documentation build configuration file
+#
+
+import sys, os
+import sphinx
+
+# 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('some/directory'))
+
+# 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']
+try:
+  import sphinx_rtd_theme
+  extensions += ['sphinx_rtd_theme']
+  use_rtd_theme = True
+except:
+  use_rtd_theme = False
+
+# Add any paths that contain templates here, relative to this directory.
+templates_path = ['.templates']
+
+# The suffix of source filenames.
+source_suffix = '.rst'
+
+# The master toctree document.
+master_doc = 'index'
+
+# General substitutions.
+project = 'topIIvol Plug-in'
+copyright = '2007-2024 CEA'
+
+# The default replacements 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@'
+
+# 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 directories, that shouldn't be searched
+# for source files.
+#exclude_dirs = []
+
+# 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'.
+if use_rtd_theme:
+  html_theme = 'sphinx_rtd_theme'
+else:
+  html_theme = 'default' if sphinx.version_info[:2] < (1,3) else 'classic'
+
+themes_options = {}
+themes_options['classic'] = {
+  'body_max_width':'none',
+  'body_min_width':0,
+}
+html_theme_options = themes_options.get(html_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 (within the static path) 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 = ['.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 = {}
+
+# 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 = 'TopIIVolMeshPlug-in doc'
+
+
+# Options for LaTeX output
+# ------------------------
+
+# The paper size ('letter' or 'a4').
+#latex_paper_size = 'letter'
+
+# 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', 'TopIIVolMeshPlugIn.tex', 'TopIIVolMesh PlugIn Documentation',
+   'CEA', '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 = ''
+
+# Documents to append as an appendix to all manuals.
+#latex_appendices = []
+
+# If false, no module index is generated.
+#latex_use_modindex = True
diff --git a/src/Tools/TopIIVolMeshPlug/doc/images/callTopIIVolMesh.png b/src/Tools/TopIIVolMeshPlug/doc/images/callTopIIVolMesh.png
new file mode 100644 (file)
index 0000000..867b73a
Binary files /dev/null and b/src/Tools/TopIIVolMeshPlug/doc/images/callTopIIVolMesh.png differ
diff --git a/src/Tools/TopIIVolMeshPlug/doc/index.rst b/src/Tools/TopIIVolMeshPlug/doc/index.rst
new file mode 100644 (file)
index 0000000..a54ffdb
--- /dev/null
@@ -0,0 +1,22 @@
+.. TopIIVolMesh documentation master file, created by sphinx-quickstart.
+   You can adapt this file completely to your liking, but it should at least
+   contain the root `toctree` directive.
+
+topIIvol plugin documentation
+=====================================
+
+This documentation covers the usage of **top-ii-vol** as plug-in in SALOME that can be used within the SALOME
+Mesh module.
+
+TopIIVolMesh plug-in uses CEA **top-ii-Vol** meshing tool, which provides sequential and parallel tools for creating volumetric tetrahedral meshes for a given terrain topology.
+This plug-in offers only the most common functionalities of the tool.
+
+Contents:
+
+.. toctree::
+   :maxdepth: 2
+
+   TopIIVolMesh.rst
+
+
+
index 762d9e78f163df3e3084d66f05464db635c33123..524bf453b924bdbcc6b0a0031bad4cbc8701d7c0 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 62e59a375a156d45d6745fe2de5ba8b26d01dd82..350b317ae172616c44bbb69ec722b2da74d4931d 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2020  EDF R&D
+# Copyright (C) 2007-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index a524ba58a628c3be6eda38a01b8beeb191dbb554..0545a894783188a87473d85ed135747d989e4e65 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index daca4875993648880731792e0e60e4d36924f92c..8e784534835f1be06db200b9d0456e6362e3eaea 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 5712eeccc71987c3bf9778ece33d6fd7985b5989..6b586b462c5284d139028751743f40adad279739 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index f2ccabf7ae69b3674f427e3e21d1d3b2217855f4..305469eb7d6c54acfd1db17f6e0297ecbdb67ecf 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 9cba5ecbadb4c3a1d6d3b2a812942498c1c37517..00a3be6c75f19a9d76e758e1f11b205f7207ba25 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 5202508e2ce06985ca2b73f7d7b611810cb7abe7..44d7856a8c1eb8dce1256e0297173956f65631c6 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index f9e53f0c838010dd3a794ed5b4b9c048174823f1..26d0b62761cb343fb9a401f6982a73e1e8484f76 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 6f9187447f68d09c5f9517acba80a39bf1428fd3..15cc59917a4352d2b1396b851fa0a10eb3d54e3a 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 3e651364471a869adef937bdd7af7c56ae8a8b14..62a98e1c3f05888ca3a21b3436b64e60fc55ab58 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 60d40e43d74e7703e1717d2074e571c284510eaf..9981271f87cd0938bb68e30c8483be9fd1dfaa6d 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 42c0a82eda4da2b8f953a1ae6dd5bf19c75b8fa6..58fbe0d90c5c5dba48b801533aad41dbf1283a4a 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 0dedf0f08b8aab3cc7e7179fdde28425c65a3cff..1b1f02a53b8d601ff883bc37102aff704d197f33 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index f3fcc49103beca4b725e17ef1a89328adab109ea..9fa9fe5e9ce1d4ef78d86c64900c1af22ac26779 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 94e85e71147b460276a8086f629069144c426cc1..8ac4dcc4a60c21a11ca75664466aa276a6707a77 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 519d1a4f90836fd56c70bf939499ce8023ebdca1..445af45685b09e6d5d4676d064269036a6006370 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index ed0b26ab1e96839aade5d690b28139bc511f15a2..171db2e17092f065563192c68855f1b5aa73c957 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 7936dc3eada6c84dac8efcb89bc5108979b4c919..001f6e574423474bcc0199e9abe1f88175c03538 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 2387591db6d6c9140d41a660085a69b5d10b33ad..d370e7dfea0a0c496ce83dec1005803040bd1460 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 0920aee70b9ce6458a8152d8fd310561616e7550..c890c0ff7cbfdffa915e31dc31ff3cd48481af57 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 3a8dacaabf490e400c5b7c08fc13d221a7f4e121..151224383ad2b896ec44fc10160261ad23a89421 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2020  EDF R&D
+# Copyright (C) 2007-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index d34f19c14eefcdd3745a00a5f33f91cc08374114..b5740f5b4f1ba003e575daf249810e939b2467f4 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index ae78cb96118bd47ade9217b477afefc7f4226a29..69a44302cffb7cc55e0dac0251b88511d91126a0 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 2667d79bcc56fc3031c86bd7fff7098c8395e99c..ea702744ab3e490938dfed349cfc45c5b829fce0 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 4619ab7301dbb7e437ce61c5445400331bef8bc2..3a18b057b5a3a717ed5eab031d5a6b3d689278b8 100644 (file)
@@ -43,7 +43,7 @@ master_doc = 'index'
 
 # General substitutions.
 project = 'Verima Plug-in'
-copyright = '2007-2020 EDF R&D'
+copyright = '2007-2024 EDF'
 
 # The default replacements for |version| and |release|, also used in various
 # other places throughout the built documents.
index a1656aa85410aa633584bd2f6f01361d654bf2bc..93206aa72423a9a664f537a8e3a2e57996c49d42 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2011-2020  EDF R&D
+# Copyright (C) 2011-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index b64d4660d8e4d5140426973f987358574ee382d5..7748def30dc69584eb8e7939c73ff46826bb137d 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 6db61a51717ce5d8cb98c18c3cf312b74b3289bd..be036b6fd9270367df1a364f0f4caa6af858272a 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2020  EDF R&D
+# Copyright (C) 2007-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 949c160b6c96ef3dac392d08812bfa76f7fad1d6..a579886b22b9a0b16493f3b639f91e3ef2e3382d 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 5627c043da47f531678556972d15c76ac55c81be..ea49d9c4ce0e80615be5b8473786b1ebbb3efa55 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 637ae4dd7a19b8c6e08529c0f377b0e5c9e0d2c2..e83c76022ef1806c6fb120f1a8e34ba9c8ecfc1d 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 6be09349326d01be7c69565d828d6bb01b12a886..923f9bc0c1636e41aa90924e2e3300840d7bfc83 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 20c26edb269407ea78a75ba616e69dd555fc3c8b..376e2833fcf9055d476677502260d60984f43aa4 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 56bd33ecb8000f527f90f6108293c9e8dc8b4a24..6b32da496f0e70ce634c06d2ed27c6da38e518d5 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index a2b08660ae1da47c3cd01b6d176862444236d94a..2a026626ea9ba0574f6bf92cfd656714917a1bc9 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index a25acf014e2e5ce2dab19a8ac6ed4307c77a5f4c..663e2f0a2e86f5f1cca4af018dc9d0f931a937ea 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 0627af7c0f310d090065987281c746e25230a892..5c66176bd2f90a04b09412f81510fff508dd3c68 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index e98f5aed8f6df86d9fa17afabcfbdc39e3c01eb3..c3d75d45d3ad1ffa5d8d2f2db68c1fb299276333 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 3a8dacaabf490e400c5b7c08fc13d221a7f4e121..151224383ad2b896ec44fc10160261ad23a89421 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2020  EDF R&D
+# Copyright (C) 2007-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 5969572e904f9bbabce9b0bdc1a9b147f43c974c..fa02ac4e52f1ababcb541495d68f7f49940f2acf 100644 (file)
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 518240a9ac63c440b1dfaf7d68a9709d0271d63f..f41ae272c52f4c5814073bda8667c42f19588881 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 837dab49b627d7c4fcd81fafdcea0bf1b67663f2..c454a605f1e357dffc7ec4adceff46caf7ac41dd 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 3ec18cb6ac8271d7e95a9bd8bb8740d7652f511c..b268dd493ed1e3b3e29a84093da8e65a22dad2f6 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 5bb4f74ac5545c1d6d1e95c9cca75aac5a92c52d..ac253ab53cbf839655e222a9309898d4f91472e5 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index f4ca9036838b3f56c3ed18b3a2095dc78c26ea90..3fd7a1675ae79c1747de2f0a4efe1cbaddc1ddc3 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2020  EDF R&D
+# Copyright (C) 2007-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 1bb4c201c076f0e907193dcdc66be7903a9a4e8a..be4216ff64696e4f6c3ddad64ff20305ed15167e 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index c028579a3fe28c6d318c8094139505a157d973dd..2593c4aa2d4b19fc5ee8ca526d75b76c029650d0 100755 (executable)
@@ -1,6 +1,6 @@
 #!/usr/bin/env python3
 # -*- coding: utf-8 -*-
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 8749c97e96a8a8c24b46952b2bc7657c4a4f9e5f..60b694b4420f4cdf4000cb460e1b1fc0cb2bd7b6 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 3f703548483e6d5f4e05efe6edee5effc2a0fdb5..fcf5154e47b12f971a348ff58757fe6576844b51 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 37b46f45cff41d3cc1a7c25c50b3eb23f9a1ff83..c545560cea4d4108bbe291fea5a5585644a4a11c 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 2ecd73b68844cdb296f3d605a89e39efc30720be..0a3780e765750cb5e1484480ca77367bd7ae1155 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-# Copyright (C) 2013-2020  EDF R&D
+# Copyright (C) 2013-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index d0f2235131834fd758102c1c3f5db59cafee008a..26efe0a0536f313c72dcfc3d341faddcebf7acbd 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index ec10b806847824ebdc1c0f62351cf77080879253..52c518373bad76f1aa853558cbe7513421bf6dfe 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 77d5a2814882931a2687b6b163580a901e8c20c3..0d8844bffe110eca474969be6f98f699d4f9c40e 100644 (file)
@@ -43,7 +43,7 @@ master_doc = 'index'
 
 # General substitutions.
 project = 'MeshGems-SurfOpt Plug-in'
-copyright = '2007-2020 EDF R&D'
+copyright = '2007-2024 EDF'
 
 # The default replacements for |version| and |release|, also used in various
 # other places throughout the built documents.
index d53848354b46a6f201ffbd47a61fb3de63d9ceac..73d53aebd0ed9e1d749279f6148b13590afb70a2 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2020  EDF R&D
+# Copyright (C) 2007-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -34,11 +34,6 @@ from ViewText_ui import Ui_ViewExe
 
 verbose = True
 
-force = os.getenv("FORCE_DISTENE_LICENSE_FILE")
-if force != None:
-    os.environ["DISTENE_LICENSE_FILE"] = force
-    os.environ["DLIM8VAR"] = "NOTHING"
-
 class MonViewText(Ui_ViewExe, QDialog):
     """
     Classe permettant la visualisation de texte
index f4713f41ef18e83c198744d9522d568a16196264..5186c0e80d6b63bad1d3cf0f315987ae58eed4d7 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2007-2020  EDF R&D
+# Copyright (C) 2007-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -545,8 +545,13 @@ class MonYamsPlugDialog(Ui_YamsPlugDialog,QWidget):
 
     self.commande+=' --in "'  + self.fichierIn +'"'
     self.commande+=' --out "' + self.fichierOut +'"'
-    
-    print(self.commande)
+
+    import SMeshHelper
+    key = SMeshHelper.GetMGLicenseKey( self.fichierIn )
+    if key != "0":
+      self.commande+=' --key ' + key
+
+    if verbose: print("INFO: MG-SurfOpt command:\n  %s" % self.commande)
     return True
 
   def clean(self):
index 5de8a00f9f3b8e95a3abf8c2a612c20de38a3623..40a5efa4350670b5ec4c12d8c6819acdf5e4b828 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2006-2020  EDF R&D
+# Copyright (C) 2006-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -31,15 +31,6 @@ def YamsLct(context):
   import tempfile
   from qtsalome import QFileDialog, QMessageBox
   
-  #prior test to avoid unnecessary user GUI work with ending crash
-  try :
-      os.environ['DISTENE_LICENSE_FILE']
-  except:
-      QMessageBox.warning(None,"Products","""\
-Distene's product MeshGem SurfOpt is not installed.
-required environment variable:
-DISTENE_LICENSE_FILE='.../dlim8.var.sh'""")
-      return
   import monYamsPlugDialog
   window = monYamsPlugDialog.getDialog()
   window.show()
index 42b66e9c99c5817e125ae5891709791f65195550..cf465962e908d3ad2236ebb955e3d83eab7b72f7 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 10e5dae354baf016014d0b20ffd68ba27e9b2829..d0f569bc113cda8343a5a06a74456221d054ff43 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2016-2020  EDF R&D
+# Copyright (C) 2016-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 19cff73f05006b763f78a49fabcd41b2ca3311fc..8d43baad1625e1b355c35d07f00a7ae3cd451e86 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2016-2020  EDF R&D
+# Copyright (C) 2016-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 4ac021fb730bc86db14d44a13cf9b4e4c894fcf6..13723b33ca105098a923527695310e797e389867 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 5625d6d5c4789ab458eefdef6fdbf714a700d58d..4398da98da5ca99b175101d220021ac0391b376b 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2016-2020  EDF R&D
+# Copyright (C) 2016-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 88c7d4f8153ca841c50f21f8a995aa7c19dfe84a..2b53967c743a8fee5930b0153d51051a441d88ed 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2016-2020  EDF R&D
+# Copyright (C) 2016-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 5ef7d8737a4ca9f5d49558a12a93365aa31db652..f710cab9c01b75b18e723709ca28a6c2ca2bc281 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2016-2020  EDF R&D
+# Copyright (C) 2016-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index ef3dc804d427c6e1a78827a7eea1108a666740d4..23316d3a46400d0f34ee774a345cbacc8a057844 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2016-2020  EDF R&D
+# Copyright (C) 2016-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 60d6206c5a7599013b38e43e65d4e94e0f73a7ff..afee4c8f1cb0f40f4c736d75cb74d4fe55bbbefb 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 53dceba58e8864791e060bc42e7012de29d91fb3..1bd0b458048c4be8e2b58f69563586defd0f1cba 100644 (file)
@@ -43,7 +43,7 @@ master_doc = 'index'
 
 # General substitutions.
 project = 'ZCracks Plug-in'
-copyright = '2007-2020 EDF R&D'
+copyright = '2007-2024 EDF'
 
 # The default replacements for |version| and |release|, also used in various
 # other places throughout the built documents.
index 2249f3f529f0724e92edea257fec47f822d61d96..b1c8f0d1a73b7c28d8f9c4e58bdfafa2c2f9216a 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2016-2020  EDF R&D
+# Copyright (C) 2016-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 0fecf80fe1087f83b119da8d5d244a73446bb873..5d352de58767190a913e8d9e4347fe8110429785 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2016-2020  EDF R&D
+# Copyright (C) 2016-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 66f3a1c4d813599ee7e5ce7ed91bc7b3de3a0a65..9fb40199c69da9a84bb210b96f3f1f7cc45dea58 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2016-2020  EDF R&D
+# Copyright (C) 2016-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 0ca2045a51ac12a7f247064cfd99cd7d4c31bb2a..a1c206b836190c85e2e9c9e85ac9416b9e3b9c38 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2016-2020  EDF R&D
+# Copyright (C) 2016-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index f301c589698ec4822b986dd9c5ed6d07e7057406..f3cbfde27b3d4c3f359b22bf7be684974e40f4a6 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2016-2020  EDF R&D
+# Copyright (C) 2016-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 3d397d52c6d4349a6d03eb736d4f42c79a434256..84387cbb16156966788b0f0f71d42686244a48cb 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2016-2020  EDF R&D
+# Copyright (C) 2016-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 318b2ffb5c5d5ff041593876ba6c6e80e02eddc7..07f8d5278d1850c6ff877078f0966e5824e5020a 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2016-2020  EDF R&D
+# Copyright (C) 2016-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index c1c4d8062c30f47937d23da9864ed494cdc22cf5..c72f20269507518e016502a2b5fb759d5692a99d 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2016-2020  EDF R&D
+# Copyright (C) 2016-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index dee9e034268e1334c83cb85a8ac62ea86938272e..4f9846fc6095c00a186ccaf1c7387d6da78e8289 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-# Copyright (C) 2016-2020  EDF R&D
+# Copyright (C) 2016-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 7e43c43dd5b0b3c479b2b9231492fda446ee7cef..933f9e8a62bb60eaf9361637823c72080acb044f 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2006-2020  EDF R&D
+# Copyright (C) 2006-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 690af3caa5c26ac296700014972185bffd31b51f..cd97e0ba59d4f9ef532f9036f1af9dd64d47f41e 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -38,8 +38,8 @@ crack = 'fissureExtrados.brep'
 
 dicoParams = dict(nomCas            = 'fissTuyau',
                   maillageSain      = '/local00/home/I48174/Documents/soudure/essaiFissure/{0}'.format(mesh),
-                  brepFaceFissure   = '/local00/home/I48174/Documents/soudure/essaiFissure/{0}'.format(crack),
-                  edgeFissIds       = [4],
+                  CAOFaceFissure    = '/local00/home/I48174/Documents/soudure/essaiFissure/{0}'.format(crack),
+                  edgeFiss          = [4],
                   lgInfluence       = 12,
                   meshBrep          = (0.05, 2.0),
                   rayonPipe         = 1.0,
index 9ce8fc07abcd39881e4870d109f7a068346d72b2..f6de9b2586fbe5137aa2af31cee0819f237e30c9 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -38,8 +38,8 @@ crack = 'fissureIntrados.brep'
 
 dicoParams = dict(nomCas            = 'fissTuyau',
                   maillageSain      = '/local00/home/I48174/Documents/soudure/essaiFissure/{0}'.format(mesh),
-                  brepFaceFissure   = '/local00/home/I48174/Documents/soudure/essaiFissure/{0}'.format(crack),
-                  edgeFissIds       = [4],
+                  CAOFaceFissure    = '/local00/home/I48174/Documents/soudure/essaiFissure/{0}'.format(crack),
+                  edgeFiss          = [4],
                   lgInfluence       = 14,
                   meshBrep          = (0.05, 2.0),
                   rayonPipe         = 1.0,
index ed7cc302f50e4c8c22f8b1286dc5454aa54c29d2..cacc7655d8f8a102a93fd1ff0278d815315912c6 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index e6bcd67e5f461f708a92417b053e8a67a83d083e..57ea5bcee78422105b915900658321b4921d8bac 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -22,7 +22,8 @@
 # scripts / static
 SET(plugin_SCRIPTS
   __init__.py
-  cubeAngle2.py
+  blocFissureTest.py
+  cubeAngle_2.py
   cubeAngle.py
   cubeCoin.py
   cubeMilieu.py
@@ -35,7 +36,6 @@ SET(plugin_SCRIPTS
   eprouvetteCourbe.py
   eprouvetteDroite_2.py
   eprouvetteDroite.py
-  execution_Cas.py
   faceGauche_2.py
   faceGauche.py
   fissureCoude_10.py
@@ -51,6 +51,7 @@ SET(plugin_SCRIPTS
   fissureCoude_9.py
   fissure_Coude.py
   vis_1.py
+  tube.py
 )
 
 # --- rules ---
index 741586626e24d0e07970113b7a7b6f822c0ffec7..c3f5ac159573c2f186fcdf2abbe5ec96c8d5c6de 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
diff --git a/src/Tools/blocFissure/CasTests/blocFissureTest.py b/src/Tools/blocFissure/CasTests/blocFissureTest.py
new file mode 100755 (executable)
index 0000000..28f0f57
--- /dev/null
@@ -0,0 +1,522 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+__revision__ = "V03.02"
+
+"""Lancement des cas-tests de blocFissure
+
+Temps par type de matériel :
+. cubeAngle : 24s ["cubeAngle", "cubeAngle_2"])
+. cubeFin : 42s ["cubeCoin", "cubeMilieu", "cubeTransverse"]
+. decoupeCylindre : 8s ["cylindre", "cylindre_2"]
+. disquePerce (+ ellipse_disque) : 9s ["disquePerce"]
+. fissureGauche : 26s ["faceGauche"]
+. fissureGauche_2 (+ ellipse + ellipse_probleme): 22s ["ellipse_1", "ellipse_2", "faceGauche_2"]
+. eprouvetteCourbe : 22s ["eprouvetteCourbe"]
+. eprouvetteDroite : 31s ["eprouvetteDroite", "eprouvetteDroite_2"]
+. vis : 9s ["vis"]
+. tube : ["tube"]
+. sans matériel : 66s ["fissureCoude_1", "fissureCoude_2", "fissureCoude_3", "fissureCoude_4", "fissureCoude_5"]
+. sans matériel : 69s ["fissureCoude_6", "fissureCoude_7", "fissureCoude_8", "fissureCoude_9", "fissureCoude_10"]
+. sans matériel : 28s ["fissure_Coude", "fissure_Coude_4"]
+"""
+
+import logging
+import os
+import sys
+import tempfile
+import traceback
+
+from blocFissure.gmu import initLog
+from blocFissure.gmu.casStandard import casStandard
+
+# -----------------------------------------------------------------------------------------------
+LOGFILE = tempfile.NamedTemporaryFile().name + "_blocFissure.log"
+#initLog.setDebug(LOGFILE)     # debug = 10
+#initLog.setVerbose(LOGFILE)   # info = 20
+#initLog.setRelease(LOGFILE)   # warning = 30
+#initLog.setPerfTests(LOGFILE) # critical = 50
+#initLog.setAlways(LOGFILE)    # critical = 50
+
+# Les cas qui marchent ...
+TORUNOK = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 0 ] # OK 19/04/2021
+#           0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28
+TORUNPB = list()
+for IAUX in TORUNOK:
+  TORUNPB.append((IAUX+1)%2)
+print ("TORUN = {} # OK".format(TORUNOK))
+print ("TORUN = {} # PB".format(TORUNPB))
+
+# Numéro de référence associé à chaque problème défini par le nom de son fichier dans le répertoire CasTests
+NREF_PB = dict()
+NREF_PB["cubeAngle"] = 0
+NREF_PB["cubeAngle_2"] = 1
+NREF_PB["cubeCoin"] = 2
+NREF_PB["cubeMilieu"] = 3
+NREF_PB["cubeTransverse"] = 4
+NREF_PB["cylindre"] = 5
+NREF_PB["cylindre_2"] = 6
+NREF_PB["disquePerce"] = 7
+NREF_PB["ellipse_1"] = 8
+NREF_PB["ellipse_2"] = 9
+NREF_PB["eprouvetteCourbe"] = 10
+NREF_PB["eprouvetteDroite"] = 11
+NREF_PB["eprouvetteDroite_2"] = 12
+NREF_PB["faceGauche"] = 13
+NREF_PB["faceGauche_2"] = 14
+NREF_PB["fissureCoude_1"] = 15
+NREF_PB["fissureCoude_2"] = 16
+NREF_PB["fissureCoude_3"] = 17
+NREF_PB["fissureCoude_4"] = 18
+NREF_PB["fissureCoude_5"] = 19
+NREF_PB["fissureCoude_6"] = 20
+NREF_PB["fissureCoude_7"] = 21
+NREF_PB["fissureCoude_8"] = 22
+NREF_PB["fissureCoude_9"] = 23
+NREF_PB["fissureCoude_10"] = 24
+NREF_PB["fissure_Coude"] = 25
+NREF_PB["fissure_Coude_4"] = 26
+NREF_PB["vis_1"] = 27
+NREF_PB["tube"] = 28
+
+#=========================  Début de la classe ===================================
+
+class blocFissureTest (object):
+
+  """Test de blocFissure
+
+Options facultatives
+********************
+Le(s) numéro/nom du/des tests à passer. Si aucun n'est donné, tous les cas sont passés.
+  """
+
+# A. La base
+
+  message_info = ""
+  _verbose = 0
+  _verbose_max = 0
+  affiche_aide_globale = 0
+
+# B. Les variables
+
+  l_cas = None
+  l_problemes = None
+  d_nom_probleme = None
+  l_materiels = None
+
+#=========================== Début de la méthode =================================
+
+  def __init__ ( self, liste_option ):
+
+    """Le constructeur de la classe blocFissureTest"""
+
+    self.l_cas = list()
+    erreur = False
+
+    for option in liste_option :
+
+      #print (option, type(option))
+      if isinstance(option, str):
+        saux = option.upper()
+      else:
+        saux = option
+      #print (saux)
+      # Options générales de pilotage
+      if saux in ( "-H", "-HELP" ):
+        self.affiche_aide_globale = 1
+      elif saux == "-V" :
+        self._verbose = 1
+      elif saux == "-VMAX" :
+        self._verbose = 1
+        self._verbose_max = 1
+
+      else :
+      # Options du traitement
+        if isinstance(option, int):
+          self.l_cas.append(option)
+        elif ( option in NREF_PB ):
+          self.l_cas.append(NREF_PB[option])
+        else:
+          print ("Option inconnue : {}".format(option))
+          erreur = True
+
+# Si aucun cas n'est donné, on prend tous ceux par défaut
+    if not self.l_cas:
+      for i_aux, valeur in enumerate(TORUNOK):
+        if valeur:
+          self.l_cas.append(i_aux)
+
+    if erreur:
+      self.l_cas = list()
+
+    if self._verbose_max:
+      print ("Liste des cas : {}".format(self.l_cas))
+
+    if self._verbose_max:
+      initLog.setVerbose(LOGFILE)   # info = 20
+
+#===========================  Fin de la méthode ==================================
+
+#=========================== Début de la méthode =================================
+
+  def __del__(self):
+    """A la suppression de l'instance de classe"""
+    if self._verbose_max:
+      print ("Suppression de l'instance de la classe.")
+
+#===========================  Fin de la méthode ==================================
+
+#=========================== Début de la méthode =================================
+
+  def caract_l_problemes (self):
+    """Caractérisation des problèmes"""
+    self.d_nom_probleme = dict()
+    self.l_problemes = list()
+    self.l_materiels = list()
+
+    n_cas = 0
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.cubeAngle import cubeAngle
+      self.l_problemes.append(cubeAngle(n_cas))
+      self.l_materiels.append("cubeAngle")
+
+    n_cas = 1
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.cubeAngle_2 import cubeAngle_2
+      self.l_problemes.append(cubeAngle_2(n_cas))
+      self.l_materiels.append("cubeAngle")
+
+    n_cas = 2
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests import cubeCoin
+      self.l_problemes.append(casStandard(cubeCoin.dicoParams, cubeCoin.referencesMaillageFissure, n_cas))
+      self.d_nom_probleme[n_cas] = "cubeCoin"
+      self.l_materiels.append("cubeFin")
+
+    n_cas = 3
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests import cubeMilieu
+      self.l_problemes.append(casStandard(cubeMilieu.dicoParams, cubeMilieu.referencesMaillageFissure, n_cas))
+      self.d_nom_probleme[n_cas] = "cubeMilieu"
+      self.l_materiels.append("cubeFin")
+
+    n_cas = 4
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests import cubeTransverse
+      self.l_problemes.append(casStandard(cubeTransverse.dicoParams, cubeTransverse.referencesMaillageFissure, n_cas))
+      self.d_nom_probleme[n_cas] = "cubeTransverse"
+      self.l_materiels.append("cubeFin")
+
+    n_cas = 5
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.cylindre import cylindre
+      self.l_problemes.append(cylindre(n_cas))
+      self.l_materiels.append("decoupeCylindre")
+
+    n_cas = 6
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.cylindre_2 import cylindre_2
+      self.l_problemes.append(cylindre_2(n_cas))
+      self.l_materiels.append("decoupeCylindre")
+
+    n_cas = 7
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests import disquePerce
+      self.l_problemes.append(casStandard(disquePerce.dicoParams, disquePerce.referencesMaillageFissure, n_cas))
+      self.d_nom_probleme[n_cas] = "disquePerce"
+      self.l_materiels.append("disquePerce")
+      self.l_materiels.append("ellipse_disque")
+
+    n_cas = 8
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.ellipse_1 import ellipse_1
+      self.l_problemes.append(ellipse_1(n_cas))
+      self.l_materiels.append("ellipse")
+      self.l_materiels.append("fissureGauche_2")
+
+    n_cas = 9
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.ellipse_2 import ellipse_2
+      self.l_problemes.append(ellipse_2(n_cas))
+      self.l_materiels.append("ellipse_probleme")
+      self.l_materiels.append("fissureGauche_2")
+
+    n_cas = 10
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.eprouvetteCourbe import eprouvetteCourbe
+      self.l_problemes.append(eprouvetteCourbe(n_cas))
+      self.l_materiels.append("eprouvetteCourbe")
+
+    n_cas = 11
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.eprouvetteDroite import eprouvetteDroite
+      self.l_problemes.append(eprouvetteDroite(n_cas))
+      self.l_materiels.append("eprouvetteDroite")
+
+    n_cas = 12
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.eprouvetteDroite_2 import eprouvetteDroite_2
+      self.l_problemes.append(eprouvetteDroite_2(n_cas))
+      self.l_materiels.append("eprouvetteDroite")
+
+    n_cas = 13
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.faceGauche import faceGauche
+      self.l_problemes.append(faceGauche(n_cas))
+      self.l_materiels.append("fissureGauche")
+
+    n_cas = 14
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.faceGauche_2 import faceGauche_2
+      self.l_problemes.append(faceGauche_2(n_cas))
+      self.l_materiels.append("fissureGauche_2")
+
+    n_cas = 15
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.fissureCoude_1 import fissureCoude_1
+      self.l_problemes.append(fissureCoude_1(n_cas))
+
+    n_cas = 16
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.fissureCoude_2 import fissureCoude_2
+      self.l_problemes.append(fissureCoude_2(n_cas))
+
+    n_cas = 17
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.fissureCoude_3 import fissureCoude_3
+      self.l_problemes.append(fissureCoude_3(n_cas))
+
+    n_cas = 18
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.fissureCoude_4 import fissureCoude_4
+      self.l_problemes.append(fissureCoude_4(n_cas))
+
+    n_cas = 19
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.fissureCoude_5 import fissureCoude_5
+      self.l_problemes.append(fissureCoude_5(n_cas))
+
+    n_cas = 20
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.fissureCoude_6 import fissureCoude_6
+      self.l_problemes.append(fissureCoude_6(n_cas))
+
+    n_cas = 21
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.fissureCoude_7 import fissureCoude_7
+      self.l_problemes.append(fissureCoude_7(n_cas))
+
+    n_cas = 22
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.fissureCoude_8 import fissureCoude_8
+      self.l_problemes.append(fissureCoude_8(n_cas))
+
+    n_cas = 23
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.fissureCoude_9 import fissureCoude_9
+      self.l_problemes.append(fissureCoude_9(n_cas))
+
+    n_cas = 24
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.fissureCoude_10 import fissureCoude_10
+      self.l_problemes.append(fissureCoude_10(n_cas))
+
+    n_cas = 25
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.fissure_Coude import fissure_Coude
+      self.l_problemes.append(fissure_Coude(n_cas))
+
+    n_cas = 26
+    if n_cas in self.l_cas:
+      from blocFissure.CasTests.fissure_Coude_4 import fissure_Coude_4
+      self.l_problemes.append(fissure_Coude_4(n_cas))
+
+    n_cas = 27
+    if n_cas in self.l_cas:
+      # genereMateriel : vis
+      from blocFissure.CasTests.vis_1 import vis_1
+      self.l_problemes.append(vis_1(n_cas))
+      self.l_materiels.append("vis")
+
+    n_cas = 28
+    if n_cas in self.l_cas:
+      # genereMateriel : tube
+      from blocFissure.CasTests.tube import tube
+      self.l_problemes.append(tube(n_cas))
+      self.l_materiels.append("tube")
+      #"Mesh_13" has not been computed:
+      #-  "algo2d_facePeau_0" failed on "FACE_12 to mesh". Error: Algorithm failed. NgException at Surface meshing: Problem in Surface mesh generation
+      #-  "algo1d_cercle1_0" failed on EDGE #20. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
+      #-  "algo1d_cercle1_0" failed on EDGE #17. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
+      #-  "algo1d_cercle1_0" failed on EDGE #15. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
+      #-  "algo1d_cercle1_0" failed on EDGE #12. Error: Algorithm failed. Source elements don't cover totally the geometrical edge
+
+    return
+
+#===========================  Fin de la méthode ==================================
+
+#=========================== Début de la méthode =================================
+
+  def cree_materiels (self):
+    """Création des matériels"""
+
+    if "cubeAngle" in self.l_materiels:
+      from blocFissure.materielCasTests import cubeAngle
+
+    if "cubeFin" in self.l_materiels:
+      from blocFissure.materielCasTests import cubeFin
+
+    if "decoupeCylindre" in self.l_materiels:
+      from blocFissure.materielCasTests import decoupeCylindre
+
+    if "disquePerce" in self.l_materiels:
+      from blocFissure.materielCasTests import disquePerce
+
+    if "ellipse_disque" in self.l_materiels:
+      from blocFissure.materielCasTests import ellipse_disque
+
+    if "ellipse_probleme" in self.l_materiels:
+      from blocFissure.materielCasTests import ellipse_probleme
+
+    if "ellipse" in self.l_materiels:
+      from blocFissure.materielCasTests import ellipse
+
+    if "fissureGauche" in self.l_materiels:
+      from blocFissure.materielCasTests import fissureGauche
+
+    if "fissureGauche_2" in self.l_materiels:
+      from blocFissure.materielCasTests import fissureGauche_2
+
+    if "eprouvetteCourbe" in self.l_materiels:
+      from blocFissure.materielCasTests import eprouvetteCourbe
+
+    if "eprouvetteDroite" in self.l_materiels:
+      from blocFissure.materielCasTests import eprouvetteDroite
+
+    if "vis" in self.l_materiels:
+      from blocFissure.materielCasTests import vis
+
+    if "tube" in self.l_materiels:
+      from blocFissure.materielCasTests import tube
+
+    return
+
+#===========================  Fin de la méthode ==================================
+
+#=========================== Début de la méthode =================================
+
+  def calcul_cas (self, n_cas, cas, ligne):
+    """Calcul d'un cas"""
+    texte = ""
+    if n_cas in self.d_nom_probleme:
+      nom = self.d_nom_probleme[n_cas]
+    else:
+      nom = cas.nomProbleme
+    texte_a = "\n=== Exécution du cas n° {}, '{}'".format(NREF_PB[nom],nom)
+    logging.critical((ligne+texte_a).encode('utf-8'))
+
+    try:
+      ok_maillage = cas.executeProbleme()
+    except:
+      traceback.print_exc()
+      ok_maillage = False
+    if not ok_maillage:
+      texte = "Problème avec le cas n° {}, '{}'\n".format(NREF_PB[nom],nom)
+    print(ligne)
+
+    return ok_maillage, texte
+
+#===========================  Fin de la méthode ==================================
+
+#=========================== Début de la méthode =================================
+
+  def calcul_tout (self):
+    """Calcul de tous les cas"""
+
+    ligne = "---------------------------------------------------------------------"
+    texte = "\n"
+    nb_cas_ok = 0
+    nb_cas_nook = 0
+    for n_cas, cas in enumerate(self.l_problemes):
+      #print ("Cas n° {}, '{}'".format(n_cas,cas.nomProbleme))
+      ok_maillage, texte_a = self.calcul_cas (n_cas, cas, ligne)
+      texte += texte_a
+      if ok_maillage:
+        nb_cas_ok += 1
+      else:
+        nb_cas_nook += 1
+      print(ligne)
+
+    nb_cas = nb_cas_nook + nb_cas_ok
+    if ( nb_cas > 1):
+      if nb_cas_nook:
+        texte += ". Nombre de cas_tests OK   : {}\n".format(nb_cas_ok)
+        texte += ". Nombre de cas_tests NOOK : {}\n".format(nb_cas_nook)
+      else:
+        texte += "Les {} tests se sont bien passés.\n".format(nb_cas)
+    print ((texte+ligne).encode('utf-8'))
+    logging.critical((ligne+texte).encode('utf-8'))
+
+    return texte
+
+#===========================  Fin de la méthode ==================================
+
+#=========================== Début de la méthode =================================
+
+  def lancement (self):
+    """Lancement général"""
+
+    # Tri des problèmes
+    self.caract_l_problemes ()
+
+    # Création des matériels
+    self.cree_materiels ()
+
+    # Calcul des fissures
+    texte = self.calcul_tout ()
+
+    return texte
+
+#===========================  Fin de la méthode ==================================
+
+#==========================  Fin de la classe ====================================
+
+#==================================================================================
+# Lancement
+#==================================================================================
+
+if __name__ == "__main__" :
+
+# 1. Options
+
+  L_OPTIONS = sys.argv[1:]
+  L_OPTIONS.append("-v")
+
+# 2. Lancement de la classe
+
+  #print ("L_OPTIONS :", L_OPTIONS)
+  BLOCFISSURE_TEST = blocFissureTest(L_OPTIONS)
+
+  if BLOCFISSURE_TEST.affiche_aide_globale:
+    sys.stdout.write(BLOCFISSURE_TEST.__doc__+"\n")
+  else:
+    TEXTE = BLOCFISSURE_TEST.lancement()
+    sys.stdout.write(TEXTE)
+
+  del BLOCFISSURE_TEST
index fc49764aa129737037d445a7787f7e9fd0eae027..693fdd331e2ab820ff285b50436d880ea854706b 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
 
-import os
-from blocFissure import gmu
-from blocFissure.gmu.geomsmesh import geompy, smesh
+"""problème de fissure plane coupant 2 faces (angle), débouches normaux, objet plan"""
 
-import math
-import GEOM
-import SALOMEDS
-import SMESH
-#import StdMeshers
-#import GHS3DPlugin
-#import NETGENPlugin
+import os
 import logging
 
+from blocFissure import gmu
+from blocFissure.gmu.geomsmesh import geompy, smesh
 from blocFissure.gmu.fissureGenerique import fissureGenerique
-
-from blocFissure.gmu.triedreBase import triedreBase
 from blocFissure.gmu.genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
 from blocFissure.gmu.creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
 from blocFissure.gmu.construitFissureGenerale import construitFissureGenerale
-
-O, OX, OY, OZ = triedreBase()
+from blocFissure.gmu.putName import putName
 
 class cubeAngle(fissureGenerique):
-  """
-  problème de fissure plane coupant 2 faces (angle), débouches normaux, objet plan
-  """
+  """problème de fissure plane coupant 2 faces (angle), débouches normaux, objet plan"""
 
   nomProbleme = "cubeAngle"
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
 
   # ---------------------------------------------------------------------------
   def genereMaillageSain(self, geometriesSaines, meshParams):
-    logging.info("genereMaillageSain %s", self.nomCas)
+    texte = "genereMaillageSain pour '{}'".format(self.nomCas)
+    logging.info(texte)
 
-    ([objetSain], status) = smesh.CreateMeshesFromMED(os.path.join(gmu.pathBloc, 'materielCasTests/CubeAngle.med'))
-    smesh.SetName(objetSain.GetMesh(), 'objetSain')
+    ([objetSain], _) = smesh.CreateMeshesFromMED(os.path.join(gmu.pathBloc, "materielCasTests", "CubeAngle.med"))
+    putName(objetSain.GetMesh(), self.nomProbleme, i_pref=self.numeroCas)
 
     return [objetSain, True] # True : maillage hexa
 
@@ -63,59 +56,73 @@ class cubeAngle(fissureGenerique):
     lgInfluence : distance autour de la shape de fissure a remailler (A ajuster selon le maillage)
     rayonPipe   : le rayon du pile maillé en hexa autour du fond de fissure
     """
-    logging.info("setParamShapeFissure %s", self.nomCas)
+    texte = "genereMaillageSain pour '{}'".format(self.nomCas)
+    logging.info(texte)
     self.shapeFissureParams = dict(lgInfluence = 20,
                                    rayonPipe   = 10)
 
   # ---------------------------------------------------------------------------
-  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams):
-    logging.info("genereShapeFissure %s", self.nomCas)
+  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams, \
+                                mailleur="MeshGems"):
+    """Importe la géométrie de la fissure"""
+    texte = "genereShapeFissure pour '{}'".format(self.nomCas)
+    logging.info(texte)
 
     lgInfluence = shapeFissureParams['lgInfluence']
 
-    shellFiss = geompy.ImportFile(os.path.join(gmu.pathBloc, "materielCasTests/CubeAngleFiss.brep"), "BREP")
+    shellFiss = geompy.ImportBREP(os.path.join(gmu.pathBloc, "materielCasTests", "CubeAngleFiss.brep"))
     fondFiss = geompy.CreateGroup(shellFiss, geompy.ShapeType["EDGE"])
     geompy.UnionIDs(fondFiss, [3])
     geompy.addToStudy( shellFiss, 'shellFiss' )
     geompy.addToStudyInFather( shellFiss, fondFiss, 'fondFiss' )
 
-
-    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 5 ,10)
+    mailleur = self.mailleur2d3d()
+    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 5 ,10, mailleur, self.numeroCas)
 
     centre = None
+
     return [shellFiss, centre, lgInfluence, coordsNoeudsFissure, fondFiss]
 
   # ---------------------------------------------------------------------------
   def setParamMaillageFissure(self):
-    self.maillageFissureParams = dict(nomRep           = '.',
-                                      nomFicSain       = self.nomCas,
-                                      nomFicFissure    = 'fissure_' + self.nomCas,
+    texte = "setParamMaillageFissure pour '{}'".format(self.nomCas)
+    logging.info(texte)
+    self.maillageFissureParams = dict(nomRep           = os.curdir,
+                                      nomFicSain       = self.nomProbleme,
+                                      nomFicFissure    = self.nomProbleme + "_fissure",
                                       nbsegRad         = 5,
                                       nbsegCercle      = 8,
                                       areteFaceFissure = 10)
 
   # ---------------------------------------------------------------------------
   def genereZoneDefaut(self, geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams):
-    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams)
+    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams, \
+                                                 self.numeroCas)
     return elementsDefaut
 
   # ---------------------------------------------------------------------------
-  def genereMaillageFissure(self, geometriesSaines, maillagesSains,
-                            shapesFissure, shapeFissureParams,
-                            maillageFissureParams, elementsDefaut, step):
-    maillageFissure = construitFissureGenerale(maillagesSains,
-                                               shapesFissure, shapeFissureParams,
-                                               maillageFissureParams, elementsDefaut, step)
+  def genereMaillageFissure(self, geometriesSaines, maillagesSains, \
+                                  shapesFissure, shapeFissureParams, \
+                                  maillageFissureParams, elementsDefaut, step, \
+                                  mailleur="MeshGems"):
+    texte = "genereMaillageFissure pour '{}'".format(self.nomCas)
+    logging.info(texte)
+
+    mailleur = self.mailleur2d3d()
+    maillageFissure = construitFissureGenerale(shapesFissure, shapeFissureParams, \
+                                               maillageFissureParams, elementsDefaut, \
+                                               mailleur, self.numeroCas)
     return maillageFissure
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Quad_Pyramid    = 204,
-                                          Entity_Quad_Triangle   = 336,
-                                          Entity_Quad_Edge       = 278,
-                                          Entity_Quad_Penta      = 96,
-                                          Entity_Quad_Hexa       = 3651,
-                                          Entity_Node            = 20490,
-                                          Entity_Quad_Tetra      = 1877,
-                                          Entity_Quad_Quadrangle = 1702)
-
+    self.referencesMaillageFissure = dict( \
+                                          Entity_Quad_Quadrangle = 1630, \
+                                          Entity_Quad_Hexa = 3523, \
+                                          Entity_Node = 18874, \
+                                          Entity_Quad_Edge = 261, \
+                                          Entity_Quad_Triangle = 190, \
+                                          Entity_Quad_Tetra = 1322, \
+                                          Entity_Quad_Pyramid = 172, \
+                                          Entity_Quad_Penta = 64 \
+                                         )
diff --git a/src/Tools/blocFissure/CasTests/cubeAngle2.py b/src/Tools/blocFissure/CasTests/cubeAngle2.py
deleted file mode 100644 (file)
index 1e65d9d..0000000
+++ /dev/null
@@ -1,60 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
-#
-# 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
-#
-
-from .cubeAngle import cubeAngle
-
-class cubeAngle2(cubeAngle):
-  """
-  problème de fissure plane coupant 2 faces (angle), débouches normaux, objet plan
-  detection d'un probleme de tolerance sur les edges de jonction pipe et face fissure externe 
-  """
-
-  nomProbleme = "cubeAngle2"
-
-  # ---------------------------------------------------------------------------
-  def setParamShapeFissure(self):
-    """
-    paramètres de la fissure pour méthode construitFissureGenerale
-    lgInfluence : distance autour de la shape de fissure a remailler (A ajuster selon le maillage)
-    rayonPipe   : le rayon du pile maillé en hexa autour du fond de fissure
-    """
-    self.shapeFissureParams = dict(lgInfluence = 20,
-                                   rayonPipe   = 5)
-
-  # ---------------------------------------------------------------------------
-  def setParamMaillageFissure(self):
-    self.maillageFissureParams = dict(nomRep           = '.',
-                                      nomFicSain       = self.nomCas,
-                                      nomFicFissure    = 'fissure_' + self.nomCas,
-                                      nbsegRad         = 5,
-                                      nbsegCercle      = 32,
-                                      areteFaceFissure = 5)
-
-  # ---------------------------------------------------------------------------
-  def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Quad_Pyramid    = 748,
-                                          Entity_Quad_Triangle   = 1228,
-                                          Entity_Quad_Edge       = 351,
-                                          Entity_Quad_Penta      = 640,
-                                          Entity_Quad_Hexa       = 5827,
-                                          Entity_Node            = 42865,
-                                          Entity_Quad_Tetra      = 9216,
-                                          Entity_Quad_Quadrangle = 2518)
-
diff --git a/src/Tools/blocFissure/CasTests/cubeAngle_2.py b/src/Tools/blocFissure/CasTests/cubeAngle_2.py
new file mode 100644 (file)
index 0000000..d12c5e3
--- /dev/null
@@ -0,0 +1,64 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""problème de fissure plane coupant 2 faces (angle)"""
+
+import os
+
+from .cubeAngle import cubeAngle
+
+class cubeAngle_2(cubeAngle):
+  """problème de fissure plane coupant 2 faces (angle), débouches normaux, objet plan
+
+  detection d'un probleme de tolerance sur les edges de jonction pipe et face fissure externe
+  """
+
+  nomProbleme = "cubeAngle_2"
+
+  # ---------------------------------------------------------------------------
+  def setParamShapeFissure(self):
+    """paramètres de la fissure pour méthode construitFissureGenerale
+
+    lgInfluence : distance autour de la shape de fissure a remailler (A ajuster selon le maillage)
+    rayonPipe   : le rayon du pile maillé en hexa autour du fond de fissure
+    """
+    self.shapeFissureParams = dict(lgInfluence = 20,
+                                   rayonPipe   = 5)
+
+  # ---------------------------------------------------------------------------
+  def setParamMaillageFissure(self):
+    self.maillageFissureParams = dict(nomRep           = os.curdir,
+                                      nomFicSain       = self.nomProbleme,
+                                      nomFicFissure    = self.nomProbleme + "_fissure",
+                                      nbsegRad         = 5,
+                                      nbsegCercle      = 32,
+                                      areteFaceFissure = 5)
+
+  # ---------------------------------------------------------------------------
+  def setReferencesMaillageFissure(self):
+    self.referencesMaillageFissure = dict( \
+                                          Entity_Quad_Quadrangle = 2350, \
+                                          Entity_Quad_Hexa = 5315, \
+                                          Entity_Node = 36418, \
+                                          Entity_Quad_Edge = 345, \
+                                          Entity_Quad_Triangle = 1214, \
+                                          Entity_Quad_Tetra = 6430, \
+                                          Entity_Quad_Pyramid = 620, \
+                                          Entity_Quad_Penta = 512 \
+                                         )
index deed87e4e86d098b3c8e9bf94f3ef52918fd8c29..d724912443c30f5fa929829f84a555b60c370a1b 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
 
+"""problème de fissure plane coupant le cube dans un coin"""
+
 import os
 from blocFissure import gmu
 
-dicoParams = dict(nomCas            = 'cubeCoin',
-                  maillageSain      = os.path.join(gmu.pathBloc, 'materielCasTests/cubeFin.med'),
-                  brepFaceFissure   = os.path.join(gmu.pathBloc, "materielCasTests/cubeFin_Coin.brep"),
-                  edgeFissIds       = [6],
+dicoParams = dict(nomCas            = "cubeCoin",
+                  nomProbleme       = "cubeCoin",
+                  maillageSain      = os.path.join(gmu.pathBloc, "materielCasTests", "cubeFin.med"),
+                  CAOFaceFissure    = os.path.join(gmu.pathBloc, "materielCasTests", "cubeFin_Coin.brep"),
+                  edgeFiss          = [3],
                   lgInfluence       = 50,
                   meshBrep          = (5,10),
                   rayonPipe         = 10,
@@ -35,12 +38,13 @@ dicoParams = dict(nomCas            = 'cubeCoin',
 
   # ---------------------------------------------------------------------------
 
-referencesMaillageFissure = dict(Entity_Quad_Pyramid    = 0,
-                                 Entity_Quad_Triangle   = 0,
-                                 Entity_Quad_Edge       = 0,
-                                 Entity_Quad_Penta      = 0,
-                                 Entity_Quad_Hexa       = 0,
-                                 Entity_Node            = 0,
-                                 Entity_Quad_Tetra      = 0,
-                                 Entity_Quad_Quadrangle = 0)
-
+referencesMaillageFissure = dict( \
+                                          Entity_Quad_Quadrangle = 2740, \
+                                          Entity_Quad_Hexa = 7420, \
+                                          Entity_Node = 45191, \
+                                          Entity_Quad_Edge = 323, \
+                                          Entity_Quad_Triangle = 486, \
+                                          Entity_Quad_Tetra = 7601, \
+                                          Entity_Quad_Pyramid = 460, \
+                                          Entity_Quad_Penta = 80 \
+                                )
index f615c8852e6c1404006b95ab4ce25610582b94cd..8b3849fc6eac1863a3d2f010e53529440a94580b 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
 
+"""problème de fissure plane coupant le cube au milieu"""
+
 import os
 from blocFissure import gmu
 
-dicoParams = dict(nomCas            = 'cubeMilieu',
-                  maillageSain      = os.path.join(gmu.pathBloc, 'materielCasTests/cubeFin.med'),
-                  brepFaceFissure   = os.path.join(gmu.pathBloc, "materielCasTests/cubeFin_Milieu.brep"),
-                  edgeFissIds       = [6],
+dicoParams = dict(nomCas            = "cubeMilieu",
+                  nomProbleme       = "cubeMilieu",
+                  maillageSain      = os.path.join(gmu.pathBloc, "materielCasTests", "cubeFin.med"),
+                  CAOFaceFissure    = os.path.join(gmu.pathBloc, "materielCasTests", "cubeFin_Milieu.brep"),
+                  edgeFiss          = [3],
                   lgInfluence       = 50,
                   meshBrep          = (5,10),
                   rayonPipe         = 10,
@@ -35,12 +38,13 @@ dicoParams = dict(nomCas            = 'cubeMilieu',
 
 # ---------------------------------------------------------------------------
 
-referencesMaillageFissure = dict(Entity_Quad_Pyramid    = 0,
-                                 Entity_Quad_Triangle   = 0,
-                                 Entity_Quad_Edge       = 0,
-                                 Entity_Quad_Penta      = 0,
-                                 Entity_Quad_Hexa       = 0,
-                                 Entity_Node            = 0,
-                                 Entity_Quad_Tetra      = 0,
-                                 Entity_Quad_Quadrangle = 0)
-
+referencesMaillageFissure = dict( \
+                                Entity_Quad_Quadrangle = 3140, \
+                                Entity_Quad_Hexa = 7120, \
+                                Entity_Node = 60127, \
+                                Entity_Quad_Edge = 346, \
+                                Entity_Quad_Triangle = 818, \
+                                Entity_Quad_Tetra = 18141, \
+                                Entity_Quad_Pyramid = 990, \
+                                Entity_Quad_Penta = 230 \
+                                )
index 268cc505f6fe8a9dc701d5cab61e51e40f8d90ba..53a7db9ae2c5db7f72bda88f3b8ed65129c51385 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
 
+"""problème de fissure plane coupant le cube au milieu"""
+
 import os
 from blocFissure import gmu
 
-dicoParams = dict(nomCas            = 'cubeTransverse',
-                  maillageSain      = os.path.join(gmu.pathBloc, 'materielCasTests/cubeFin.med'),
-                  brepFaceFissure   = os.path.join(gmu.pathBloc, "materielCasTests/cubeFin_Transverse.brep"),
-                  edgeFissIds       = [6],
+dicoParams = dict(nomCas            = "cubeTransverse",
+                  nomProbleme       = "cubeTransverse",
+                  maillageSain      = os.path.join(gmu.pathBloc, "materielCasTests", "cubeFin.med"),
+                  CAOFaceFissure    = os.path.join(gmu.pathBloc, "materielCasTests", "cubeFin_Transverse.brep"),
+                  edgeFiss          = [6],
                   lgInfluence       = 50,
                   meshBrep          = (5,10),
                   rayonPipe         = 10,
@@ -35,12 +38,13 @@ dicoParams = dict(nomCas            = 'cubeTransverse',
 
 # ---------------------------------------------------------------------------
 
-referencesMaillageFissure = dict(Entity_Quad_Pyramid    = 0,
-                                 Entity_Quad_Triangle   = 0,
-                                 Entity_Quad_Edge       = 0,
-                                 Entity_Quad_Penta      = 0,
-                                 Entity_Quad_Hexa       = 0,
-                                 Entity_Node            = 0,
-                                 Entity_Quad_Tetra      = 0,
-                                 Entity_Quad_Quadrangle = 0)
-
+referencesMaillageFissure = dict( \
+                                          Entity_Quad_Quadrangle = 2900, \
+                                          Entity_Quad_Hexa = 7000, \
+                                          Entity_Node = 61612, \
+                                          Entity_Quad_Edge = 390, \
+                                          Entity_Quad_Triangle = 1228, \
+                                          Entity_Quad_Tetra = 19925, \
+                                          Entity_Quad_Pyramid = 780, \
+                                          Entity_Quad_Penta = 200 \
+                                )
index 6e87f7324b7db72cc11453739fedadfafec8cc5a..baf6246a501dc21a9343281bd157d5d40daa71f0 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
 
-import os
-from blocFissure import gmu
-from blocFissure.gmu.geomsmesh import geompy, smesh
+"""problème de fissure plane sur cylindre, grand fond de fissure en arc de cercle"""
 
-import math
-import GEOM
-import SALOMEDS
-import SMESH
-#import StdMeshers
-#import GHS3DPlugin
-#import NETGENPlugin
+import os
 import logging
 
+from blocFissure import gmu
+from blocFissure.gmu.geomsmesh import geompy, smesh
 from blocFissure.gmu.fissureGenerique import fissureGenerique
-
-from blocFissure.gmu.triedreBase import triedreBase
 from blocFissure.gmu.genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
 from blocFissure.gmu.creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
 from blocFissure.gmu.construitFissureGenerale import construitFissureGenerale
-
-O, OX, OY, OZ = triedreBase()
+from blocFissure.gmu.putName import putName
 
 class cylindre(fissureGenerique):
-  """
-  problème de fissure plane sur cylindre, grand fond de fissure en arc de cercle
-  """
+  """problème de fissure plane sur cylindre, grand fond de fissure en arc de cercle"""
 
   nomProbleme = "cylindre"
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
 
   # ---------------------------------------------------------------------------
   def genereMaillageSain(self, geometriesSaines, meshParams):
@@ -55,8 +47,8 @@ class cylindre(fissureGenerique):
     """
     logging.info("genereMaillageSain %s", self.nomCas)
 
-    ([objetSain], status) = smesh.CreateMeshesFromMED(os.path.join(gmu.pathBloc, "materielCasTests/CylindreSain.med"))
-    smesh.SetName(objetSain.GetMesh(), 'objetSain')
+    ([objetSain], _) = smesh.CreateMeshesFromMED(os.path.join(gmu.pathBloc, "materielCasTests", "CylindreSain.med"))
+    putName(objetSain.GetMesh(), self.nomProbleme, i_pref=self.numeroCas)
 
     return [objetSain, True] # True : maillage hexa
 
@@ -72,54 +64,60 @@ class cylindre(fissureGenerique):
                                    rayonPipe   = 5)
 
   # ---------------------------------------------------------------------------
-  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams):
+  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams, \
+                                mailleur="MeshGems"):
     logging.info("genereShapeFissure %s", self.nomCas)
 
     lgInfluence = shapeFissureParams['lgInfluence']
 
-    shellFiss = geompy.ImportFile(os.path.join(gmu.pathBloc, "materielCasTests/FissInCylindre2.brep"), "BREP")
+    shellFiss = geompy.ImportBREP(os.path.join(gmu.pathBloc, "materielCasTests", "FissInCylindre2.brep"))
     fondFiss = geompy.CreateGroup(shellFiss, geompy.ShapeType["EDGE"])
     geompy.UnionIDs(fondFiss, [6])
     geompy.addToStudy( shellFiss, 'shellFiss' )
     geompy.addToStudyInFather( shellFiss, fondFiss, 'fondFiss' )
 
-
-    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 5 ,15)
+    mailleur = self.mailleur2d3d()
+    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 5 ,15, mailleur, self.numeroCas)
 
     centre = None
     return [shellFiss, centre, lgInfluence, coordsNoeudsFissure, fondFiss]
 
   # ---------------------------------------------------------------------------
   def setParamMaillageFissure(self):
-    self.maillageFissureParams = dict(nomRep           = '.',
-                                      nomFicSain       = self.nomCas,
-                                      nomFicFissure    = 'fissure_' + self.nomCas,
+    self.maillageFissureParams = dict(nomRep           = os.curdir,
+                                      nomFicSain       = self.nomProbleme,
+                                      nomFicFissure    = self.nomProbleme + "_fissure",
                                       nbsegRad         = 5,
                                       nbsegCercle      = 8,
                                       areteFaceFissure = 20)
 
   # ---------------------------------------------------------------------------
   def genereZoneDefaut(self, geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams):
-    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams)
+    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams, \
+                                                 self.numeroCas)
     return elementsDefaut
 
   # ---------------------------------------------------------------------------
-  def genereMaillageFissure(self, geometriesSaines, maillagesSains,
-                            shapesFissure, shapeFissureParams,
-                            maillageFissureParams, elementsDefaut, step):
-    maillageFissure = construitFissureGenerale(maillagesSains,
-                                               shapesFissure, shapeFissureParams,
-                                               maillageFissureParams, elementsDefaut, step)
+  def genereMaillageFissure(self, geometriesSaines, maillagesSains, \
+                                  shapesFissure, shapeFissureParams, \
+                                  maillageFissureParams, elementsDefaut, step, \
+                                  mailleur="MeshGems"):
+
+    mailleur = self.mailleur2d3d()
+    maillageFissure = construitFissureGenerale(shapesFissure, shapeFissureParams, \
+                                               maillageFissureParams, elementsDefaut, \
+                                               mailleur, self.numeroCas)
     return maillageFissure
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Quad_Pyramid    = 1270,
-                                          Entity_Quad_Triangle   = 1260,
-                                          Entity_Quad_Edge       = 758,
-                                          Entity_Quad_Penta      = 496,
-                                          Entity_Quad_Hexa       = 18814,
-                                          Entity_Node            = 113313,
-                                          Entity_Quad_Tetra      = 20469,
-                                          Entity_Quad_Quadrangle = 7280)
-
+    self.referencesMaillageFissure = dict( \
+                                          Entity_Quad_Quadrangle = 6920, \
+                                          Entity_Quad_Hexa = 18174, \
+                                          Entity_Node = 100923, \
+                                          Entity_Quad_Edge = 718, \
+                                          Entity_Quad_Triangle = 952, \
+                                          Entity_Quad_Tetra = 14111, \
+                                          Entity_Quad_Pyramid = 1110, \
+                                          Entity_Quad_Penta = 336 \
+                                         )
index 07350a9cb77968c3a00c0015fb0a5969ab77632b..88aaf40891478d2c4d0f2da8b8727f54aa394d47 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
 
-import os
-from blocFissure import gmu
-from blocFissure.gmu.geomsmesh import geompy, smesh
+"""problème de fissure plane sur cylindre hexa, fond de fissure complexe : polyline"""
 
-import math
-import GEOM
-import SALOMEDS
-import SMESH
+import os
 import logging
 
-from .cylindre import cylindre
+from blocFissure import gmu
+from blocFissure.gmu.geomsmesh import geompy
 
-from blocFissure.gmu.triedreBase import triedreBase
 from blocFissure.gmu.genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
-from blocFissure.gmu.creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
-from blocFissure.gmu.construitFissureGenerale import construitFissureGenerale
 
-O, OX, OY, OZ = triedreBase()
+from .cylindre import cylindre
 
 class cylindre_2(cylindre):
-  """
-  problème de fissure plane sur cylindre hexa, fond de fissure complexe : polyline
-  """
-  nomProbleme = "cylindre2"
+  """problème de fissure plane sur cylindre hexa, fond de fissure complexe : polyline"""
+
+  nomProbleme = "cylindre_2"
 
   # ---------------------------------------------------------------------------
-  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams):
+  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams, \
+                                mailleur="MeshGems"):
     logging.info("genereShapeFissure %s", self.nomCas)
 
     lgInfluence = shapeFissureParams['lgInfluence']
 
-    shellFiss = geompy.ImportFile(os.path.join(gmu.pathBloc, "materielCasTests/FissInCylindre.brep"), "BREP")
+    shellFiss = geompy.ImportBREP(os.path.join(gmu.pathBloc, "materielCasTests", "FissInCylindre.brep"))
     fondFiss = geompy.CreateGroup(shellFiss, geompy.ShapeType["EDGE"])
-    geompy.UnionIDs(fondFiss, [3])
+    geompy.UnionIDs(fondFiss, [6])
     geompy.addToStudy( shellFiss, 'shellFiss' )
     geompy.addToStudyInFather( shellFiss, fondFiss, 'fondFiss' )
 
-
-    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 5 ,15)
+    mailleur = self.mailleur2d3d()
+    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 5 ,15, mailleur, self.numeroCas)
 
     centre = None
     return [shellFiss, centre, lgInfluence, coordsNoeudsFissure, fondFiss]
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Quad_Pyramid    = 1334,
-                                          Entity_Quad_Triangle   = 1432,
-                                          Entity_Quad_Edge       = 785,
-                                          Entity_Quad_Penta      = 560,
-                                          Entity_Quad_Hexa       = 19070,
-                                          Entity_Node            = 114290,
-                                          Entity_Quad_Tetra      = 19978,
-                                          Entity_Quad_Quadrangle = 7424)
-
+    self.referencesMaillageFissure = dict( \
+                                          Entity_Quad_Quadrangle = 7028, \
+                                          Entity_Quad_Hexa = 18366, \
+                                          Entity_Node = 102327, \
+                                          Entity_Quad_Edge = 735, \
+                                          Entity_Quad_Triangle = 1056, \
+                                          Entity_Quad_Tetra = 14255, \
+                                          Entity_Quad_Pyramid = 1158, \
+                                          Entity_Quad_Penta = 384 \
+                                          )
index b0ceb9931ba6adabf94f4003adc54e8d09f9a23e..4a2a0d69ded0b12e3c768bbfb5368159b491d224 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
 
+"""disque percé"""
+
 import os
 from blocFissure import gmu
 
-dicoParams = dict(nomCas            = 'disque',
-                  maillageSain      = os.path.join(gmu.pathBloc, 'materielCasTests/disque.med'),
-                  brepFaceFissure   = os.path.join(gmu.pathBloc, "materielCasTests/ellipse_disque.brep"),
-                  edgeFissIds       = [3],
+dicoParams = dict(nomCas            = 'disquePerce',
+                  nomProbleme       = "disquePerce",
+                  maillageSain      = os.path.join(gmu.pathBloc, "materielCasTests", "disque.med"),
+                  CAOFaceFissure    = os.path.join(gmu.pathBloc, "materielCasTests", "ellipse_disque.brep"),
+                  edgeFiss          = [3],
                   lgInfluence       = 10,
                   meshBrep          = (0.5,2.5),
                   rayonPipe         = 1.0,
@@ -35,12 +38,13 @@ dicoParams = dict(nomCas            = 'disque',
 
   # ---------------------------------------------------------------------------
 
-referencesMaillageFissure = dict(Entity_Quad_Pyramid    = 610,
-                                 Entity_Quad_Triangle   = 1284,
-                                 Entity_Quad_Edge       = 393,
-                                 Entity_Quad_Penta      = 592,
-                                 Entity_Quad_Hexa       = 6952,
-                                 Entity_Node            = 51119,
-                                 Entity_Quad_Tetra      = 11672,
-                                 Entity_Quad_Quadrangle = 3000)
-
+referencesMaillageFissure = dict ( \
+                                  Entity_Quad_Quadrangle = 2748, \
+                                  Entity_Quad_Hexa = 6232, \
+                                  Entity_Node = 41251, \
+                                  Entity_Quad_Edge = 376, \
+                                  Entity_Quad_Triangle = 1354, \
+                                  Entity_Quad_Tetra = 7146, \
+                                  Entity_Quad_Pyramid = 466, \
+                                  Entity_Quad_Penta = 448 \
+                                 )
index 3a0e38127ee29ae8011223d094bc85ecd5031f56..dce4308a5ccfa67a23d3c8414d612dd551c83545 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
 
-import os
-from blocFissure import gmu
-from blocFissure.gmu.geomsmesh import geompy, smesh
+"""problème de fissure non plane, débouchante non normale"""
 
-import math
-import GEOM
-import SALOMEDS
-import SMESH
-#import StdMeshers
-#import GHS3DPlugin
-#import NETGENPlugin
+import os
 import logging
 
+from blocFissure import gmu
+from blocFissure.gmu.geomsmesh import geompy, smesh
 from blocFissure.gmu.fissureGenerique import fissureGenerique
-
-from blocFissure.gmu.triedreBase import triedreBase
 from blocFissure.gmu.genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
 from blocFissure.gmu.creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
 from blocFissure.gmu.construitFissureGenerale import construitFissureGenerale
-
-O, OX, OY, OZ = triedreBase()
+from blocFissure.gmu.putName import putName
 
 class ellipse_1(fissureGenerique):
-  """
-  problème de fissure non plane, débouchante non normale
-  """
+  """problème de fissure non plane, débouchante non normale"""
 
-  nomProbleme = "ellipse1"
+  nomProbleme = "ellipse_1"
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
 
 #  # ---------------------------------------------------------------------------
 #  def genereGeometrieSaine(self, geomParams):
@@ -55,10 +47,11 @@ class ellipse_1(fissureGenerique):
 
   # ---------------------------------------------------------------------------
   def genereMaillageSain(self, geometriesSaines, meshParams):
-    logging.info("genereMaillageSain %s", self.nomCas)
+    texte = "genereMaillageSain pour '{}'".format(self.nomCas)
+    logging.info(texte)
 
-    ([objetSain], status) = smesh.CreateMeshesFromMED(os.path.join(gmu.pathBloc, "materielCasTests/boiteSaine.med"))
-    smesh.SetName(objetSain.GetMesh(), 'objetSain')
+    ([objetSain], _) = smesh.CreateMeshesFromMED(os.path.join(gmu.pathBloc, "materielCasTests", "boiteSaine.med"))
+    putName(objetSain.GetMesh(), self.nomProbleme, i_pref=self.numeroCas)
 
     return [objetSain, True] # True : maillage hexa
 
@@ -71,59 +64,74 @@ class ellipse_1(fissureGenerique):
     convexe     : optionnel, True : la face est convexe (vue de l'exterieur) sert si on ne donne pas de point interne
     pointIn_x   : optionnel, coordonnée x d'un point dans le solide sain (pour orienter la face)
     """
-    logging.info("setParamShapeFissure %s", self.nomCas)
+    texte = "genereMaillageSain pour '{}'".format(self.nomCas)
+    logging.info(texte)
     self.shapeFissureParams = dict(lgInfluence = 50,
                                    rayonPipe   = 20)
 
   # ---------------------------------------------------------------------------
-  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams):
-    logging.info("genereShapeFissure %s", self.nomCas)
+  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams, \
+                                mailleur="MeshGems"):
+    """Importe la géométrie de la fissure"""
+    texte = "genereShapeFissure pour '{}'".format(self.nomCas)
+    logging.info(texte)
 
     lgInfluence = shapeFissureParams['lgInfluence']
 
-    shellFiss = geompy.ImportFile(os.path.join(gmu.pathBloc, "materielCasTests/ellipse1.brep"), "BREP")
+    shellFiss = geompy.ImportBREP(os.path.join(gmu.pathBloc, "materielCasTests", "ellipse_1.brep"))
     fondFiss = geompy.CreateGroup(shellFiss, geompy.ShapeType["EDGE"])
     geompy.UnionIDs(fondFiss, [3])
     geompy.addToStudy( shellFiss, 'shellFiss' )
     geompy.addToStudyInFather( shellFiss, fondFiss, 'fondFiss' )
 
-
-    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 5 ,25)
+    mailleur = self.mailleur2d3d()
+    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 5 ,25, mailleur, self.numeroCas)
 
     centre = None
+
     return [shellFiss, centre, lgInfluence, coordsNoeudsFissure, fondFiss]
 
   # ---------------------------------------------------------------------------
   def setParamMaillageFissure(self):
-    self.maillageFissureParams = dict(nomRep           = '.',
-                                      nomFicSain       = self.nomCas,
-                                      nomFicFissure    = 'fissure_' + self.nomCas,
+    texte = "setParamMaillageFissure pour '{}'".format(self.nomCas)
+    logging.info(texte)
+    self.maillageFissureParams = dict(nomRep           = os.curdir,
+                                      nomFicSain       = self.nomProbleme,
+                                      nomFicFissure    = self.nomProbleme + "_fissure",
                                       nbsegRad         = 5,
                                       nbsegCercle      = 8,
                                       areteFaceFissure = 1000)
 
   # ---------------------------------------------------------------------------
   def genereZoneDefaut(self, geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams):
-    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams)
+    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams, \
+                                                 self.numeroCas)
     return elementsDefaut
 
   # ---------------------------------------------------------------------------
-  def genereMaillageFissure(self, geometriesSaines, maillagesSains,
-                            shapesFissure, shapeFissureParams,
-                            maillageFissureParams, elementsDefaut, step):
-    maillageFissure = construitFissureGenerale(maillagesSains,
-                                               shapesFissure, shapeFissureParams,
-                                               maillageFissureParams, elementsDefaut, step)
+  def genereMaillageFissure(self, geometriesSaines, maillagesSains, \
+                                  shapesFissure, shapeFissureParams, \
+                                  maillageFissureParams, elementsDefaut, step, \
+                                  mailleur="MeshGems"):
+
+    texte = "genereMaillageFissure pour '{}'".format(self.nomCas)
+    logging.info(texte)
+
+    mailleur = self.mailleur2d3d()
+    maillageFissure = construitFissureGenerale(shapesFissure, shapeFissureParams, \
+                                               maillageFissureParams, elementsDefaut, \
+                                               mailleur, self.numeroCas)
     return maillageFissure
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Quad_Pyramid    = 175,
-                                          Entity_Quad_Triangle   = 298,
-                                          Entity_Quad_Edge       = 248,
-                                          Entity_Quad_Penta      = 96,
-                                          Entity_Quad_Hexa       = 3699,
-                                          Entity_Node            = 20741,
-                                          Entity_Quad_Tetra      = 1979,
-                                          Entity_Quad_Quadrangle = 1694)
-
+    self.referencesMaillageFissure = dict( \
+                                          Entity_Quad_Quadrangle = 1748, \
+                                          Entity_Quad_Hexa = 3795, \
+                                          Entity_Node = 21531, \
+                                          Entity_Quad_Edge = 256, \
+                                          Entity_Quad_Triangle = 360, \
+                                          Entity_Quad_Tetra = 2121, \
+                                          Entity_Quad_Pyramid = 199, \
+                                          Entity_Quad_Penta = 120 \
+                                         )
index d4a1a2281c66e2c35acc104d80c3b2ef3d5de104..8ee43740621b497eb3f70b90e8cc56ebcef87769 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
 
-import os
-from blocFissure import gmu
-from blocFissure.gmu.geomsmesh import geompy, smesh
+"""problème de fissure non plane, débouchante non normale"""
 
-import math
-import GEOM
-import SALOMEDS
-import SMESH
-#import StdMeshers
-#import GHS3DPlugin
-#import NETGENPlugin
+import os
 import logging
 
-from .ellipse_1 import ellipse_1
-
-from blocFissure.gmu.triedreBase import triedreBase
+from blocFissure import gmu
+from blocFissure.gmu.geomsmesh import geompy
 from blocFissure.gmu.genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
-from blocFissure.gmu.creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
-from blocFissure.gmu.construitFissureGenerale import construitFissureGenerale
 
-O, OX, OY, OZ = triedreBase()
+from .ellipse_1 import ellipse_1
 
 class ellipse_2(ellipse_1):
-  """
-  problème de fissure non plane, débouchante non normale
-  """
+  """problème de fissure non plane, débouchante non normale"""
 
-  nomProbleme = "ellipse2"
+  nomProbleme = "ellipse_2"
 
   # ---------------------------------------------------------------------------
-  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams):
-    logging.info("genereShapeFissure %s", self.nomCas)
+  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams, \
+                                mailleur="MeshGems"):
+    """Importe la géométrie de la fissure"""
+    texte = "genereShapeFissure pour '{}'".format(self.nomCas)
+    logging.info(texte)
 
     lgInfluence = shapeFissureParams['lgInfluence']
 
-    shellFiss = geompy.ImportFile(os.path.join(gmu.pathBloc, "materielCasTests/ellipse1_pb.brep"), "BREP")
+    shellFiss = geompy.ImportBREP(os.path.join(gmu.pathBloc, "materielCasTests", "ellipse_1_pb.brep"))
     fondFiss = geompy.CreateGroup(shellFiss, geompy.ShapeType["EDGE"])
     geompy.UnionIDs(fondFiss, [3])
     geompy.addToStudy( shellFiss, 'shellFiss' )
     geompy.addToStudyInFather( shellFiss, fondFiss, 'fondFiss' )
 
-
-    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 5 ,25)
+    mailleur = self.mailleur2d3d()
+    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 5 ,25, mailleur, self.numeroCas)
 
     centre = None
+
     return [shellFiss, centre, lgInfluence, coordsNoeudsFissure, fondFiss]
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Quad_Pyramid    = 159,
-                                          Entity_Quad_Triangle   = 438,
-                                          Entity_Quad_Edge       = 249,
-                                          Entity_Quad_Penta      = 80,
-                                          Entity_Quad_Hexa       = 3635,
-                                          Entity_Node            = 20519,
-                                          Entity_Quad_Tetra      = 1973,
-                                          Entity_Quad_Quadrangle = 1658)
+    from salome.smesh import smeshBuilder
+    if smeshBuilder.NETGEN_VERSION_MAJOR < 6:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 1748, \
+                                             Entity_Quad_Hexa = 3795, \
+                                             Entity_Node = 21772, \
+                                             Entity_Quad_Edge = 258, \
+                                             Entity_Quad_Triangle = 434, \
+                                             Entity_Quad_Tetra = 2239, \
+                                             Entity_Quad_Pyramid = 199, \
+                                             Entity_Quad_Penta = 120 \
+      )
+    else:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 1748, \
+                                             Entity_Quad_Hexa = 3795, \
+                                             Entity_Node = 21579, \
+                                             Entity_Quad_Edge = 258, \
+                                             Entity_Quad_Triangle = 412, \
+                                             Entity_Quad_Tetra = 2113, \
+                                             Entity_Quad_Pyramid = 199, \
+                                             Entity_Quad_Penta = 120 \
+      )
+    
index cbde242438dcb90667a4db9296ef6de8b3ae6892..e9d35af0e6fd3b216a3b76a114fea7a2e6212783 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
 
-import os
-from blocFissure import gmu
-from blocFissure.gmu.geomsmesh import geompy, smesh
+"""problème de fissure plane coupant 3 faces (éprouvette), faces au débouché non planes, incidence presque normale"""
 
-import math
-import GEOM
-import SALOMEDS
-import SMESH
-#import StdMeshers
-#import GHS3DPlugin
-#import NETGENPlugin
+import os
 import logging
 
+from blocFissure import gmu
+from blocFissure.gmu.geomsmesh import geompy, smesh
 from blocFissure.gmu.fissureGenerique import fissureGenerique
-
-from blocFissure.gmu.triedreBase import triedreBase
 from blocFissure.gmu.genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
 from blocFissure.gmu.creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
 from blocFissure.gmu.construitFissureGenerale import construitFissureGenerale
-
-O, OX, OY, OZ = triedreBase()
+from blocFissure.gmu.putName import putName
 
 class eprouvetteCourbe(fissureGenerique):
-  """
-  problème de fissure plane coupant 3 faces (éprouvette), faces au débouché non planes, incidence presque normale
-  """
+  """problème de fissure plane coupant 3 faces (éprouvette), faces au débouché non planes, incidence presque normale"""
 
   nomProbleme = "eprouvetteCourbe"
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
 
   # ---------------------------------------------------------------------------
   def genereMaillageSain(self, geometriesSaines, meshParams):
-    logging.info("genereMaillageSain %s", self.nomCas)
+    texte = "genereMaillageSain pour '{}'".format(self.nomCas)
+    logging.info(texte)
 
-    ([objetSain], status) = smesh.CreateMeshesFromMED(os.path.join(gmu.pathBloc, "materielCasTests/EprouvetteCourbe.med"))
-    smesh.SetName(objetSain.GetMesh(), 'objetSain')
+    ([objetSain], _) = smesh.CreateMeshesFromMED(os.path.join(gmu.pathBloc, "materielCasTests", "EprouvetteCourbe.med"))
+    putName(objetSain.GetMesh(), self.nomProbleme, i_pref=self.numeroCas)
 
     return [objetSain, True] # True : maillage hexa
 
@@ -65,59 +58,74 @@ class eprouvetteCourbe(fissureGenerique):
     convexe     : optionnel True : la face est convexe (vue de l'exterieur) sert si on ne donne pas de point interne
     pointIn_x   : optionnel coordonnée x d'un point dans le solide sain (pour orienter la face)
     """
-    logging.info("setParamShapeFissure %s", self.nomCas)
+    texte = "genereMaillageSain pour '{}'".format(self.nomCas)
+    logging.info(texte)
     self.shapeFissureParams = dict(lgInfluence = 30,
                                    rayonPipe   = 10)
 
   # ---------------------------------------------------------------------------
-  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams):
-    logging.info("genereShapeFissure %s", self.nomCas)
+  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams, \
+                                mailleur="MeshGems"):
+    """Importe la géométrie de la fissure"""
+    texte = "genereShapeFissure pour '{}'".format(self.nomCas)
+    logging.info(texte)
 
     lgInfluence = shapeFissureParams['lgInfluence']
 
-    shellFiss = geompy.ImportFile(os.path.join(gmu.pathBloc, "materielCasTests/EprouvetteCourbeFiss.brep"), "BREP")
+    shellFiss = geompy.ImportBREP(os.path.join(gmu.pathBloc, "materielCasTests", "EprouvetteCourbeFiss.brep"))
     fondFiss = geompy.CreateGroup(shellFiss, geompy.ShapeType["EDGE"])
     geompy.UnionIDs(fondFiss, [8])
     geompy.addToStudy( shellFiss, 'shellFiss' )
     geompy.addToStudyInFather( shellFiss, fondFiss, 'fondFiss' )
 
-
-    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 5 ,10)
+    mailleur = self.mailleur2d3d()
+    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 5 ,10, mailleur, self.numeroCas)
 
     centre = None
+
     return [shellFiss, centre, lgInfluence, coordsNoeudsFissure, fondFiss]
 
   # ---------------------------------------------------------------------------
   def setParamMaillageFissure(self):
-    self.maillageFissureParams = dict(nomRep           = '.',
-                                      nomFicSain       = self.nomCas,
-                                      nomFicFissure    = 'fissure_' + self.nomCas,
+    texte = "setParamMaillageFissure pour '{}'".format(self.nomCas)
+    logging.info(texte)
+    self.maillageFissureParams = dict(nomRep           = os.curdir,
+                                      nomFicSain       = self.nomProbleme,
+                                      nomFicFissure    = self.nomProbleme + "_fissure",
                                       nbsegRad         = 5,
                                       nbsegCercle      = 8,
                                       areteFaceFissure = 15)
 
   # ---------------------------------------------------------------------------
   def genereZoneDefaut(self, geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams):
-    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams)
+    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams, \
+                                                 self.numeroCas)
     return elementsDefaut
 
   # ---------------------------------------------------------------------------
-  def genereMaillageFissure(self, geometriesSaines, maillagesSains,
-                            shapesFissure, shapeFissureParams,
-                            maillageFissureParams, elementsDefaut, step):
-    maillageFissure = construitFissureGenerale(maillagesSains,
-                                               shapesFissure, shapeFissureParams,
-                                               maillageFissureParams, elementsDefaut, step)
+  def genereMaillageFissure(self, geometriesSaines, maillagesSains, \
+                                  shapesFissure, shapeFissureParams, \
+                                  maillageFissureParams, elementsDefaut, step, \
+                                  mailleur="MeshGems"):
+
+    texte = "genereMaillageFissure pour '{}'".format(self.nomCas)
+    logging.info(texte)
+
+    mailleur = self.mailleur2d3d()
+    maillageFissure = construitFissureGenerale(shapesFissure, shapeFissureParams, \
+                                               maillageFissureParams, elementsDefaut, \
+                                               mailleur, self.numeroCas)
     return maillageFissure
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Quad_Pyramid    = 618,
-                                          Entity_Quad_Triangle   = 1224,
-                                          Entity_Quad_Edge       = 578,
-                                          Entity_Quad_Penta      = 168,
-                                          Entity_Quad_Hexa       = 18342,
-                                          Entity_Node            = 98170,
-                                          Entity_Quad_Tetra      = 10809,
-                                          Entity_Quad_Quadrangle = 5408)
-
+    self.referencesMaillageFissure = dict( \
+                                          Entity_Quad_Quadrangle = 5318, \
+                                          Entity_Quad_Hexa = 18182, \
+                                          Entity_Node = 92417, \
+                                          Entity_Quad_Edge = 539, \
+                                          Entity_Quad_Triangle = 828, \
+                                          Entity_Quad_Tetra = 7471, \
+                                          Entity_Quad_Pyramid = 578, \
+                                          Entity_Quad_Penta = 128 \
+                                         )
index fb702c9b3102a68ad4a1d72d55877ba68ce7c083..bd6de84845beb1cc5c1deed8774dc9c72cfae288 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""problème de fissure plane coupant 3 faces (éprouvette), débouches normaux, objet plan"""
 
 import os
-from blocFissure import gmu
-from blocFissure.gmu.geomsmesh import geompy, smesh
 
-import os
-import math
-import GEOM
-import SALOMEDS
-import SMESH
-#import StdMeshers
-#import GHS3DPlugin
-#import NETGENPlugin
 import logging
 
+from blocFissure import gmu
+from blocFissure.gmu.geomsmesh import geompy, smesh
+from blocFissure.gmu.putName import putName
+
 from blocFissure.gmu.fissureGenerique import fissureGenerique
 
 from blocFissure.gmu.triedreBase import triedreBase
@@ -42,18 +37,19 @@ from blocFissure.gmu.construitFissureGenerale import construitFissureGenerale
 O, OX, OY, OZ = triedreBase()
 
 class eprouvetteDroite(fissureGenerique):
-  """
-  problème de fissure plane coupant 3 faces (éprouvette), débouches normaux, objet plan
-  """
+  """problème de fissure plane coupant 3 faces (éprouvette), débouches normaux, objet plan"""
 
   nomProbleme = "eprouvetteDroite"
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
 
   # ---------------------------------------------------------------------------
   def genereMaillageSain(self, geometriesSaines, meshParams):
     logging.info("genereMaillageSain %s", self.nomCas)
 
-    ([objetSain], status) = smesh.CreateMeshesFromMED(os.path.join(gmu.pathBloc, "materielCasTests/eprouvetteDroite.med"))
-    smesh.SetName(objetSain.GetMesh(), 'objetSain')
+    ([objetSain], _) = smesh.CreateMeshesFromMED(os.path.join(gmu.pathBloc, "materielCasTests", "eprouvetteDroite.med"))
+    putName(objetSain.GetMesh(), self.nomProbleme, i_pref=self.numeroCas)
 
     return [objetSain, True] # True : maillage hexa
 
@@ -72,54 +68,60 @@ class eprouvetteDroite(fissureGenerique):
                                    lenSegPipe  = 6)
 
   # ---------------------------------------------------------------------------
-  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams):
+  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams, \
+                                mailleur="MeshGems"):
     logging.info("genereShapeFissure %s", self.nomCas)
 
     lgInfluence = shapeFissureParams['lgInfluence']
 
-    shellFiss = geompy.ImportFile(os.path.join(gmu.pathBloc, "materielCasTests/EprouvetteDroiteFiss_1.brep"), "BREP")
+    shellFiss = geompy.ImportBREP(os.path.join(gmu.pathBloc, "materielCasTests", "EprouvetteDroiteFiss_1.brep"))
     fondFiss = geompy.CreateGroup(shellFiss, geompy.ShapeType["EDGE"])
     geompy.UnionIDs(fondFiss, [8])
     geompy.addToStudy( shellFiss, 'shellFiss' )
     geompy.addToStudyInFather( shellFiss, fondFiss, 'fondFiss' )
 
-
-    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 5 ,10)
+    mailleur = self.mailleur2d3d()
+    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 5 ,10, mailleur, self.numeroCas)
 
     centre = None
     return [shellFiss, centre, lgInfluence, coordsNoeudsFissure, fondFiss]
 
   # ---------------------------------------------------------------------------
   def setParamMaillageFissure(self):
-    self.maillageFissureParams = dict(nomRep           = '.',
-                                      nomFicSain       = self.nomCas,
-                                      nomFicFissure    = 'fissure_' + self.nomCas,
+    self.maillageFissureParams = dict(nomRep           = os.curdir,
+                                      nomFicSain       = self.nomProbleme,
+                                      nomFicFissure    = self.nomProbleme + "_fissure",
                                       nbsegRad         = 5,
                                       nbsegCercle      = 8,
                                       areteFaceFissure = 15)
 
   # ---------------------------------------------------------------------------
   def genereZoneDefaut(self, geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams):
-    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams)
+    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams, \
+                                                 self.numeroCas)
     return elementsDefaut
 
   # ---------------------------------------------------------------------------
-  def genereMaillageFissure(self, geometriesSaines, maillagesSains,
-                            shapesFissure, shapeFissureParams,
-                            maillageFissureParams, elementsDefaut, step):
-    maillageFissure = construitFissureGenerale(maillagesSains,
-                                               shapesFissure, shapeFissureParams,
-                                               maillageFissureParams, elementsDefaut, step)
+  def genereMaillageFissure(self, geometriesSaines, maillagesSains, \
+                                  shapesFissure, shapeFissureParams, \
+                                  maillageFissureParams, elementsDefaut, step, \
+                                  mailleur="MeshGems"):
+
+    mailleur = self.mailleur2d3d()
+    maillageFissure = construitFissureGenerale(shapesFissure, shapeFissureParams, \
+                                               maillageFissureParams, elementsDefaut, \
+                                               mailleur, self.numeroCas)
     return maillageFissure
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Quad_Pyramid    = 368,
-                                          Entity_Quad_Triangle   = 798,
-                                          Entity_Quad_Edge       = 491,
-                                          Entity_Quad_Penta      = 88,
-                                          Entity_Quad_Hexa       = 9692,
-                                          Entity_Node            = 52652,
-                                          Entity_Quad_Tetra      = 5093,
-                                          Entity_Quad_Quadrangle = 3750)
-
+    self.referencesMaillageFissure = dict( \
+                                          Entity_Quad_Quadrangle = 3768, \
+                                          Entity_Quad_Hexa = 9724, \
+                                          Entity_Node = 52337, \
+                                          Entity_Quad_Edge = 457, \
+                                          Entity_Quad_Triangle = 570, \
+                                          Entity_Quad_Tetra = 4919, \
+                                          Entity_Quad_Pyramid = 376, \
+                                          Entity_Quad_Penta = 96 \
+                                         )
index 5ad1370dd058599ba143c85bc395a82c6d383e60..9e53c3f6fc0928e37b2043c6155b4bff051b7818 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""problème de fissure plane coupant 3 faces (éprouvette), débouches non normaux, objet plan"""
 
 import os
-from blocFissure import gmu
-from blocFissure.gmu.geomsmesh import geompy, smesh
-
-import math
-import GEOM
-import SALOMEDS
-import SMESH
-#import StdMeshers
-#import GHS3DPlugin
-#import NETGENPlugin
 import logging
 
-from .eprouvetteDroite import eprouvetteDroite
-
-from blocFissure.gmu.triedreBase import triedreBase
+from blocFissure import gmu
+from blocFissure.gmu.geomsmesh import geompy
 from blocFissure.gmu.genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
-from blocFissure.gmu.creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
-from blocFissure.gmu.construitFissureGenerale import construitFissureGenerale
 
-O, OX, OY, OZ = triedreBase()
+from .eprouvetteDroite import eprouvetteDroite
 
 class eprouvetteDroite_2(eprouvetteDroite):
-  """
-  problème de fissure plane coupant 3 faces (éprouvette), débouches non normaux, objet plan
-  """
+  """problème de fissure plane coupant 3 faces (éprouvette), débouches non normaux, objet plan"""
 
-  nomProbleme = "eprouvetteDroite2"
+  nomProbleme = "eprouvetteDroite_2"
 
   # ---------------------------------------------------------------------------
-  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams):
+  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams, \
+                                mailleur="MeshGems"):
     logging.info("genereShapeFissure %s", self.nomCas)
 
     lgInfluence = shapeFissureParams['lgInfluence']
 
-    shellFiss = geompy.ImportFile(os.path.join(gmu.pathBloc, "materielCasTests/EprouvetteDroiteFiss_2.brep"), "BREP")
+    shellFiss = geompy.ImportBREP(os.path.join(gmu.pathBloc, "materielCasTests", "EprouvetteDroiteFiss_2.brep"))
     fondFiss = geompy.CreateGroup(shellFiss, geompy.ShapeType["EDGE"])
     geompy.UnionIDs(fondFiss, [10])
     geompy.addToStudy( shellFiss, 'shellFiss' )
     geompy.addToStudyInFather( shellFiss, fondFiss, 'fondFiss' )
 
-
-    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 5 ,10)
+    mailleur = self.mailleur2d3d()
+    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 5 ,10, mailleur, self.numeroCas)
 
     centre = None
     return [shellFiss, centre, lgInfluence, coordsNoeudsFissure, fondFiss]
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Quad_Pyramid    = 396,
-                                          Entity_Quad_Triangle   = 1084,
-                                          Entity_Quad_Edge       = 510,
-                                          Entity_Quad_Penta      = 96,
-                                          Entity_Quad_Hexa       = 9504,
-                                          Entity_Node            = 55482,
-                                          Entity_Quad_Tetra      = 7545,
-                                          Entity_Quad_Quadrangle = 3724)
-
+    self.referencesMaillageFissure = dict( \
+                                          Entity_Quad_Quadrangle = 3724, \
+                                          Entity_Quad_Hexa = 9504, \
+                                          Entity_Node = 54049, \
+                                          Entity_Quad_Edge = 478, \
+                                          Entity_Quad_Triangle = 724, \
+                                          Entity_Quad_Tetra = 6766, \
+                                          Entity_Quad_Pyramid = 396, \
+                                          Entity_Quad_Penta = 96 \
+                                         )
diff --git a/src/Tools/blocFissure/CasTests/execution_Cas.py b/src/Tools/blocFissure/CasTests/execution_Cas.py
deleted file mode 100644 (file)
index 5944294..0000000
+++ /dev/null
@@ -1,165 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
-#
-# 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
-#
-
-import sys, traceback
-import logging
-from blocFissure import gmu
-from blocFissure.gmu import initLog
-
-# -----------------------------------------------------------------------------------------------
-#initLog.setDebug()
-initLog.setVerbose()
-#initLog.setRelease()
-#initLog.setPerfTests()
-
-# ---tous les cas en sequence, ou les cas selectionnés ...
-runall = True
-if runall:
-  torun = [ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,]
-else: #prob 0, 1, 2, 3, 4, 5, 6, 7, 8, 9,10,11,12,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27   
-  torun = [ 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0,]
-# -----------------------------------------------------------------------------------------------
-
-from blocFissure.gmu import geomsmesh
-from blocFissure.gmu.casStandard import casStandard
-
-problemes = []
-
-cas=0
-from blocFissure.CasTests.fissure_Coude import fissure_Coude
-problemes.append(fissure_Coude(cas))
-
-cas=1
-from blocFissure.CasTests.faceGauche import faceGauche
-problemes.append(faceGauche(cas))
-
-cas=2
-from blocFissure.CasTests.faceGauche_2 import faceGauche_2
-problemes.append(faceGauche_2(cas))
-
-cas=3
-from blocFissure.CasTests.ellipse_1 import ellipse_1
-problemes.append(ellipse_1(cas))
-
-cas=4
-from blocFissure.CasTests.fissure_Coude_4 import fissure_Coude_4
-problemes.append(fissure_Coude_4(cas))
-
-cas=5
-from blocFissure.CasTests.cylindre import cylindre
-problemes.append(cylindre(cas))
-
-cas=6
-from blocFissure.CasTests.cylindre_2 import cylindre_2
-problemes.append(cylindre_2(cas))
-
-cas=7
-from blocFissure.CasTests.eprouvetteCourbe import eprouvetteCourbe
-problemes.append(eprouvetteCourbe(cas))
-
-cas=8
-from blocFissure.CasTests.eprouvetteDroite import eprouvetteDroite
-problemes.append(eprouvetteDroite(cas))
-
-cas=9
-from blocFissure.CasTests.eprouvetteDroite_2 import eprouvetteDroite_2
-problemes.append(eprouvetteDroite_2(cas))
-
-cas=10
-from blocFissure.CasTests.cubeAngle import cubeAngle
-problemes.append(cubeAngle(cas))
-
-cas=11
-from blocFissure.CasTests.fissureCoude_1 import fissureCoude_1
-problemes.append(fissureCoude_1(cas))
-
-cas=12
-from blocFissure.CasTests.fissureCoude_2 import fissureCoude_2
-problemes.append(fissureCoude_2(cas))
-
-cas=13
-from blocFissure.CasTests.fissureCoude_3 import fissureCoude_3
-problemes.append(fissureCoude_3(cas))
-
-cas=14
-from blocFissure.CasTests.fissureCoude_4 import fissureCoude_4
-problemes.append(fissureCoude_4(cas))
-
-cas=15
-from blocFissure.CasTests.fissureCoude_5 import fissureCoude_5
-problemes.append(fissureCoude_5(cas))
-
-cas=16
-from blocFissure.CasTests.ellipse_2 import ellipse_2
-problemes.append(ellipse_2(cas))
-
-cas=17
-from blocFissure.CasTests.cubeAngle2 import cubeAngle2
-problemes.append(cubeAngle2(cas))
-
-cas=18
-from blocFissure.CasTests import disquePerce
-problemes.append(casStandard(disquePerce.dicoParams, disquePerce.referencesMaillageFissure, cas))
-
-cas=19
-from blocFissure.CasTests.fissureCoude_6 import fissureCoude_6
-problemes.append(fissureCoude_6(cas))
-
-cas=20
-from blocFissure.CasTests.fissureCoude_7 import fissureCoude_7
-problemes.append(fissureCoude_7(cas))
-
-cas=21
-from blocFissure.CasTests.fissureCoude_8 import fissureCoude_8
-problemes.append(fissureCoude_8(cas))
-
-cas=22
-from blocFissure.CasTests.fissureCoude_9 import fissureCoude_9
-problemes.append(fissureCoude_9(cas))
-
-cas=23
-from blocFissure.CasTests.fissureCoude_10 import fissureCoude_10
-problemes.append(fissureCoude_10(cas))
-
-cas=24
-from blocFissure.CasTests.vis_1 import vis_1
-problemes.append(vis_1(cas))
-
-cas=25
-from blocFissure.CasTests import cubeCoin
-problemes.append(casStandard(cubeCoin.dicoParams, cubeCoin.referencesMaillageFissure, cas))
-
-cas=26
-from blocFissure.CasTests import cubeMilieu
-problemes.append(casStandard(cubeMilieu.dicoParams, cubeMilieu.referencesMaillageFissure, cas))
-
-cas=27
-from blocFissure.CasTests import cubeTransverse
-problemes.append(casStandard(cubeTransverse.dicoParams, cubeTransverse.referencesMaillageFissure, cas))
-
-  
-for i in range(len(problemes)):
-  if torun[i]:
-    logging.critical("=== Execution cas %s", i)
-    try:
-      problemes[i].executeProbleme()
-    except:
-      traceback.print_exc()
-    print("---------------------------------------------------------------------")
index 44e5d62e9342112a77938a3cd0a8b73116e99f26..2a9e799eabc9c00c141180f758f26313e06deae7 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""problème de fissure non plane, débouchante non normale"""
 
 import os
-from blocFissure import gmu
-from blocFissure.gmu.geomsmesh import geompy, smesh
-
-import math
-import GEOM
-import SALOMEDS
-import SMESH
-#import StdMeshers
-#import GHS3DPlugin
-#import NETGENPlugin
 import logging
 
-from blocFissure.gmu.fissureGenerique import fissureGenerique
+from blocFissure import gmu
+from blocFissure.gmu.geomsmesh import geompy
+from blocFissure.gmu.geomsmesh import smesh
+from blocFissure.gmu.putName import putName
 
+from blocFissure.gmu.fissureGenerique import fissureGenerique
 from blocFissure.gmu.triedreBase import triedreBase
 from blocFissure.gmu.genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
 from blocFissure.gmu.creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
@@ -41,18 +36,19 @@ from blocFissure.gmu.construitFissureGenerale import construitFissureGenerale
 O, OX, OY, OZ = triedreBase()
 
 class faceGauche(fissureGenerique):
-  """
-  problème de fissure non plane, débouchante non normale
-  """
+  """problème de fissure non plane, débouchante non normale"""
 
   nomProbleme = "faceGauche"
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
 
   # ---------------------------------------------------------------------------
   def genereMaillageSain(self, geometriesSaines, meshParams):
     logging.info("genereMaillageSain %s", self.nomCas)
 
-    ([objetSain], status) = smesh.CreateMeshesFromMED(os.path.join(gmu.pathBloc, "materielCasTests/faceGaucheSain.med"))
-    smesh.SetName(objetSain.GetMesh(), 'objetSain')
+    ([objetSain], _) = smesh.CreateMeshesFromMED(os.path.join(gmu.pathBloc, "materielCasTests", "faceGaucheSain.med"))
+    putName(objetSain.GetMesh(), self.nomProbleme, i_pref=self.numeroCas)
 
     return [objetSain, True] # True : maillage hexa
 
@@ -70,54 +66,73 @@ class faceGauche(fissureGenerique):
                                    rayonPipe   = 20)
 
   # ---------------------------------------------------------------------------
-  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams):
+  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams, \
+                                mailleur="MeshGems"):
     logging.info("genereShapeFissure %s", self.nomCas)
 
     lgInfluence = shapeFissureParams['lgInfluence']
 
-    shellFiss = geompy.ImportFile(os.path.join(gmu.pathBloc, "materielCasTests/faceGaucheFiss.brep"), "BREP")
+    shellFiss = geompy.ImportBREP(os.path.join(gmu.pathBloc, "materielCasTests", "faceGaucheFiss.brep"))
     fondFiss = geompy.CreateGroup(shellFiss, geompy.ShapeType["EDGE"])
     geompy.UnionIDs(fondFiss, [6])
     geompy.addToStudy( shellFiss, 'shellFiss' )
     geompy.addToStudyInFather( shellFiss, fondFiss, 'fondFiss' )
 
-
-    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 5 ,50)
+    mailleur = self.mailleur2d3d()
+    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 5 ,50, mailleur, self.numeroCas)
 
     centre = None
     return [shellFiss, centre, lgInfluence, coordsNoeudsFissure, fondFiss]
 
   # ---------------------------------------------------------------------------
   def setParamMaillageFissure(self):
-    self.maillageFissureParams = dict(nomRep           = '.',
-                                      nomFicSain       = self.nomCas,
-                                      nomFicFissure    = 'fissure_' + self.nomCas,
+    self.maillageFissureParams = dict(nomRep           = os.curdir,
+                                      nomFicSain       = self.nomProbleme,
+                                      nomFicFissure    = self.nomProbleme + "_fissure",
                                       nbsegRad         = 5,
                                       nbsegCercle      = 8,
                                       areteFaceFissure = 1000)
 
   # ---------------------------------------------------------------------------
   def genereZoneDefaut(self, geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams):
-    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams)
+    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams, \
+                                                 self.numeroCas)
     return elementsDefaut
 
   # ---------------------------------------------------------------------------
-  def genereMaillageFissure(self, geometriesSaines, maillagesSains,
-                            shapesFissure, shapeFissureParams,
-                            maillageFissureParams, elementsDefaut, step):
-    maillageFissure = construitFissureGenerale(maillagesSains,
-                                               shapesFissure, shapeFissureParams,
-                                               maillageFissureParams, elementsDefaut, step)
+  def genereMaillageFissure(self, geometriesSaines, maillagesSains, \
+                                  shapesFissure, shapeFissureParams, \
+                                  maillageFissureParams, elementsDefaut, step, \
+                                  mailleur="MeshGems"):
+
+    mailleur = self.mailleur2d3d()
+    maillageFissure = construitFissureGenerale(shapesFissure, shapeFissureParams, \
+                                               maillageFissureParams, elementsDefaut, \
+                                               mailleur, self.numeroCas)
     return maillageFissure
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Quad_Pyramid    = 1284,
-                                          Entity_Quad_Triangle   = 2336,
-                                          Entity_Quad_Edge       = 758,
-                                          Entity_Quad_Penta      = 984,
-                                          Entity_Quad_Hexa       = 6416,
-                                          Entity_Node            = 85673,
-                                          Entity_Quad_Tetra      = 35990,
-                                          Entity_Quad_Quadrangle = 4285)
-
+    from salome.smesh import smeshBuilder
+    if smeshBuilder.NETGEN_VERSION_MAJOR < 6:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 4177, \
+                                             Entity_Quad_Hexa = 6224, \
+                                             Entity_Node = 74848, \
+                                             Entity_Quad_Edge = 749, \
+                                             Entity_Quad_Triangle = 2338, \
+                                             Entity_Quad_Tetra = 28628, \
+                                             Entity_Quad_Pyramid = 1236, \
+                                             Entity_Quad_Penta = 936 \
+      )
+    else:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 4177, \
+                                             Entity_Quad_Hexa = 6224, \
+                                             Entity_Node = 76374, \
+                                             Entity_Quad_Edge = 750, \
+                                             Entity_Quad_Triangle = 2434, \
+                                             Entity_Quad_Tetra = 29698, \
+                                             Entity_Quad_Pyramid = 1236, \
+                                             Entity_Quad_Penta = 936 \
+      )
index a1f4e0d3ff30fc2fd4d168f079e0e57b716896a5..18e7f217b664808c11b9406641e122c97c5e01d7 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""problème de fissure non plane, débouchante non normale"""
 
 import os
-from blocFissure import gmu
-from blocFissure.gmu.geomsmesh import geompy, smesh
-
-import math
-import GEOM
-import SALOMEDS
-import SMESH
-#import StdMeshers
-#import GHS3DPlugin
-#import NETGENPlugin
 import logging
 
+from blocFissure import gmu
+from blocFissure.gmu.geomsmesh import geompy, smesh
+from blocFissure.gmu.putName import putName
 from blocFissure.gmu.fissureGenerique import fissureGenerique
-
-
 from blocFissure.gmu.triedreBase import triedreBase
 from blocFissure.gmu.genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
 from blocFissure.gmu.creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
@@ -42,25 +34,26 @@ from blocFissure.gmu.construitFissureGenerale import construitFissureGenerale
 O, OX, OY, OZ = triedreBase()
 
 class faceGauche_2(fissureGenerique):
-  """
-  problème de fissure non plane, débouchante non normale
-  """
+  """problème de fissure non plane, débouchante non normale"""
 
-  nomProbleme = "faceGauche2"
+  nomProbleme = "faceGauche_2"
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
 
   # ---------------------------------------------------------------------------
   def genereMaillageSain(self, geometriesSaines, meshParams):
     logging.info("genereMaillageSain %s", self.nomCas)
 
-    ([objetSain], status) = smesh.CreateMeshesFromMED(os.path.join(gmu.pathBloc, "materielCasTests/boiteSaine.med"))
-    smesh.SetName(objetSain.GetMesh(), 'objetSain')
+    ([objetSain], _) = smesh.CreateMeshesFromMED(os.path.join(gmu.pathBloc, "materielCasTests", "boiteSaine.med"))
+    putName(objetSain.GetMesh(), self.nomProbleme, i_pref=self.numeroCas)
 
     return [objetSain, True] # True : maillage hexa
 
   # ---------------------------------------------------------------------------
   def setParamShapeFissure(self):
-    """
-    paramètres de la fissure pour méthode construitFissureGenerale
+    """paramètres de la fissure pour méthode construitFissureGenerale
+
     lgInfluence : distance autour de la shape de fissure a remailler (A ajuster selon le maillage)
     rayonPipe   : le rayon du pile maillé en hexa autour du fond de fissure
     convexe     : optionnel True : la face est convexe (vue de l'exterieur) sert si on ne donne pas de point interne
@@ -71,54 +64,60 @@ class faceGauche_2(fissureGenerique):
                                    rayonPipe   = 20)
 
   # ---------------------------------------------------------------------------
-  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams):
+  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams, \
+                                mailleur="MeshGems"):
     logging.info("genereShapeFissure %s", self.nomCas)
 
     lgInfluence = shapeFissureParams['lgInfluence']
 
-    shellFiss = geompy.ImportFile(os.path.join(gmu.pathBloc, "materielCasTests/faceGauche2FissCoupe.brep"), "BREP")
+    shellFiss = geompy.ImportBREP(os.path.join(gmu.pathBloc, "materielCasTests", "faceGauche2FissCoupe.brep"))
     fondFiss = geompy.CreateGroup(shellFiss, geompy.ShapeType["EDGE"])
-    geompy.UnionIDs(fondFiss, [14, 9])
+    geompy.UnionIDs(fondFiss, [4, 12])
     geompy.addToStudy( shellFiss, 'shellFiss' )
     geompy.addToStudyInFather( shellFiss, fondFiss, 'fondFiss' )
 
-
-    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 5 ,25)
+    mailleur = self.mailleur2d3d()
+    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 5 ,25, mailleur, self.numeroCas)
 
     centre = None
     return [shellFiss, centre, lgInfluence, coordsNoeudsFissure, fondFiss]
 
   # ---------------------------------------------------------------------------
   def setParamMaillageFissure(self):
-    self.maillageFissureParams = dict(nomRep           = '.',
-                                      nomFicSain       = self.nomCas,
-                                      nomFicFissure    = 'fissure_' + self.nomCas,
+    self.maillageFissureParams = dict(nomRep           = os.curdir,
+                                      nomFicSain       = self.nomProbleme,
+                                      nomFicFissure    = self.nomProbleme + "_fissure",
                                       nbsegRad         = 5,
                                       nbsegCercle      = 8,
                                       areteFaceFissure = 1000)
 
   # ---------------------------------------------------------------------------
   def genereZoneDefaut(self, geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams):
-    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams)
+    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams, \
+                                                 self.numeroCas)
     return elementsDefaut
 
   # ---------------------------------------------------------------------------
-  def genereMaillageFissure(self, geometriesSaines, maillagesSains,
-                            shapesFissure, shapeFissureParams,
-                            maillageFissureParams, elementsDefaut, step):
-    maillageFissure = construitFissureGenerale(maillagesSains,
-                                               shapesFissure, shapeFissureParams,
-                                               maillageFissureParams, elementsDefaut, step)
+  def genereMaillageFissure(self, geometriesSaines, maillagesSains, \
+                                  shapesFissure, shapeFissureParams, \
+                                  maillageFissureParams, elementsDefaut, step, \
+                                  mailleur="MeshGems"):
+
+    mailleur = self.mailleur2d3d()
+    maillageFissure = construitFissureGenerale(shapesFissure, shapeFissureParams, \
+                                               maillageFissureParams, elementsDefaut, \
+                                               mailleur, self.numeroCas)
     return maillageFissure
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Quad_Pyramid    = 859,
-                                          Entity_Quad_Triangle   = 634,
-                                          Entity_Quad_Edge       = 323,
-                                          Entity_Quad_Penta      = 288,
-                                          Entity_Quad_Hexa       = 3435,
-                                          Entity_Node            = 44095,
-                                          Entity_Quad_Tetra      = 18400,
-                                          Entity_Quad_Quadrangle = 2542)
-
+    self.referencesMaillageFissure = dict( \
+                                          Entity_Quad_Quadrangle = 2560, \
+                                          Entity_Quad_Hexa = 3467, \
+                                          Entity_Node = 44442, \
+                                          Entity_Quad_Edge = 328, \
+                                          Entity_Quad_Triangle = 772, \
+                                          Entity_Quad_Tetra = 18414, \
+                                          Entity_Quad_Pyramid = 867, \
+                                          Entity_Quad_Penta = 296 \
+                                         )
index 680da799e6f675823f2adcd9cdb15a33668cae79..ea8a6cbab030bc58f04bcf9b99a55c5e47c0becc 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Fissure dans un coude"""
+
+import os
 
 from blocFissure.gmu.fissureCoude  import fissureCoude
 
 class fissureCoude_1(fissureCoude):
-  """
-  problème de fissure du Coude :
-  adaptation maillage
-  """
+  """problème de fissure du Coude : adaptation maillage"""
+
+  nomProbleme = "fissureCoude_1"
+  geomParams = dict()
+  meshParams = dict()
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
 
 # ---------------------------------------------------------------------------
   def setParamGeometrieSaine(self):
@@ -89,21 +96,35 @@ class fissureCoude_1(fissureCoude):
     nbSegCercle = nombre de secteurs
     areteFaceFissure = taille cible de l'arête des triangles en face de fissure.
     """
-    self.maillageFissureParams = dict(nomRep        = '.',
-                                      nomFicSain    = self.nomCas,
-                                      nomFicFissure = 'fissure_' + self.nomCas,
+    self.maillageFissureParams = dict(nomRep        = os.curdir,
+                                      nomFicSain    = self.nomProbleme,
+                                      nomFicFissure = self.nomProbleme + "_fissure",
                                       nbsegRad      = 5,
                                       nbsegCercle   = 6,
                                       areteFaceFissure = 5)
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Node            = 77917,
-                                          Entity_Quad_Edge       = 975,
-                                          Entity_Quad_Triangle   = 2182,
-                                          Entity_Quad_Quadrangle = 6842,
-                                          Entity_Quad_Tetra      = 20135,
-                                          Entity_Quad_Hexa       = 8994,
-                                          Entity_Quad_Penta      = 972,
-                                          Entity_Quad_Pyramid    = 1038)
-
+    from salome.smesh import smeshBuilder
+    if smeshBuilder.NETGEN_VERSION_MAJOR < 6:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 6042, \
+                                             Entity_Quad_Hexa = 7794, \
+                                             Entity_Node = 63900, \
+                                             Entity_Quad_Edge = 874, \
+                                             Entity_Quad_Triangle = 2058, \
+                                             Entity_Quad_Tetra = 14900, \
+                                             Entity_Quad_Pyramid = 738, \
+                                             Entity_Quad_Penta = 672 \
+      )
+    else:
+      self.referencesMaillageFissure = dict( \
+                                          Entity_Quad_Quadrangle = 6042, \
+                                          Entity_Quad_Hexa = 7794, \
+                                          Entity_Node = 65091, \
+                                          Entity_Quad_Edge = 874, \
+                                          Entity_Quad_Triangle = 2116, \
+                                          Entity_Quad_Tetra = 15734, \
+                                          Entity_Quad_Pyramid = 738, \
+                                          Entity_Quad_Penta = 672 \
+      )
index cfd4626a7b848819c60e90a17f2a24f0bc929ce6..6e9007f3342c59c5dc77adda47c361caea3b7c8e 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Fissure dans un coude - cas test ASCOU17"""
+
+import os
 
 from blocFissure.gmu.fissureCoude  import fissureCoude
 
 class fissureCoude_10(fissureCoude):
-  # cas test ASCOU17
+  """Fissure dans un coude - cas test ASCOU17"""
 
+  nomProbleme = "fissureCoude_10"
+  geomParams = dict()
+  meshParams = dict()
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
 
 # ---------------------------------------------------------------------------
   def setParamGeometrieSaine(self):
     """
-    Paramètres géométriques du tuyau coudé sain:
+    Paramètres géométriques du tuyau coudé sain
     angleCoude
     r_cintr
     l_tube_p1
@@ -80,7 +89,7 @@ class fissureCoude_10(fissureCoude):
                                    externe     = False)
 
   # ---------------------------------------------------------------------------
-                                   
+
   def setParamMaillageFissure(self):
     """
     Paramètres du maillage de la fissure pour le tuyau coudé
@@ -89,21 +98,35 @@ class fissureCoude_10(fissureCoude):
     nbSegCercle = nombre de secteurs
     areteFaceFissure = taille cible de l'arête des triangles en face de fissure.
     """
-    self.maillageFissureParams = dict(nomRep        = '.',
-                                      nomFicSain    = self.nomCas,
-                                      nomFicFissure = 'fissure_' + self.nomCas,
+    self.maillageFissureParams = dict(nomRep        = os.curdir,
+                                      nomFicSain    = self.nomProbleme,
+                                      nomFicFissure = self.nomProbleme + "_fissure",
                                       nbsegRad      = 3,
                                       nbsegCercle   = 8,
                                       areteFaceFissure = 2.5)
-    
+
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Node            = 93352,
-                                          Entity_Quad_Edge       = 1456,
-                                          Entity_Quad_Triangle   = 8934,
-                                          Entity_Quad_Quadrangle = 6978,
-                                          Entity_Quad_Tetra      = 31147,
-                                          Entity_Quad_Hexa       = 6972,
-                                          Entity_Quad_Penta      = 1600,
-                                          Entity_Quad_Pyramid    = 1696)
-
+    from salome.smesh import smeshBuilder
+    if smeshBuilder.NETGEN_VERSION_MAJOR < 6:
+      self.referencesMaillageFissure = dict ( \
+                                              Entity_Quad_Quadrangle = 6160, \
+                                              Entity_Quad_Hexa = 5864, \
+                                              Entity_Node = 73615, \
+                                              Entity_Quad_Edge = 1346, \
+                                              Entity_Quad_Triangle = 9022, \
+                                              Entity_Quad_Tetra = 20920, \
+                                              Entity_Quad_Pyramid = 1232, \
+                                              Entity_Quad_Penta = 1136 \
+      )
+    else:
+      self.referencesMaillageFissure = dict ( \
+                                              Entity_Quad_Quadrangle = 6160, \
+                                              Entity_Quad_Hexa = 5864, \
+                                              Entity_Node = 75969, \
+                                              Entity_Quad_Edge = 1345, \
+                                              Entity_Quad_Triangle = 9726, \
+                                              Entity_Quad_Tetra = 22110, \
+                                              Entity_Quad_Pyramid = 1232, \
+                                              Entity_Quad_Penta = 1136 \
+      )
index e3705589249dfdce3ea6fd78bc811a0b7d577767..4cc25dddbfa0f00210a6cf4b56bb77706f7815d9 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Fissure dans un coude"""
+
+import os
 
 from blocFissure.gmu.fissureCoude  import fissureCoude
 
 class fissureCoude_2(fissureCoude):
-  """
-  problème de fissure du Coude :
-  adaptation maillage
-  """
+  """problème de fissure du Coude : adaptation maillage"""
+
+  nomProbleme = "fissureCoude_2"
+  geomParams = dict()
+  meshParams = dict()
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
 
 # ---------------------------------------------------------------------------
   def setParamGeometrieSaine(self):
@@ -89,21 +96,35 @@ class fissureCoude_2(fissureCoude):
     nbSegCercle = nombre de secteurs
     areteFaceFissure = taille cible de l'arête des triangles en face de fissure.
     """
-    self.maillageFissureParams = dict(nomRep        = '.',
-                                      nomFicSain    = self.nomCas,
-                                      nomFicFissure = 'fissure_' + self.nomCas,
+    self.maillageFissureParams = dict(nomRep        = os.curdir,
+                                      nomFicSain    = self.nomProbleme,
+                                      nomFicFissure = self.nomProbleme + "_fissure",
                                       nbsegRad      = 5,
                                       nbsegCercle   = 6,
                                       areteFaceFissure = 5)
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Node            = 132120,
-                                          Entity_Quad_Edge       = 1411,
-                                          Entity_Quad_Triangle   = 5342,
-                                          Entity_Quad_Quadrangle = 9524,
-                                          Entity_Quad_Tetra      = 40902,
-                                          Entity_Quad_Hexa       = 12981,
-                                          Entity_Quad_Penta      = 1980,
-                                          Entity_Quad_Pyramid    = 2064)
-
+    from salome.smesh import smeshBuilder
+    if smeshBuilder.NETGEN_VERSION_MAJOR < 6:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 7828, \
+                                             Entity_Quad_Hexa = 10437, \
+                                             Entity_Node = 101695, \
+                                             Entity_Quad_Edge = 1199, \
+                                             Entity_Quad_Triangle = 4230, \
+                                             Entity_Quad_Tetra = 30013, \
+                                             Entity_Quad_Pyramid = 1428, \
+                                             Entity_Quad_Penta = 1344 \
+      )
+    else:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 7828, \
+                                             Entity_Quad_Hexa = 10437, \
+                                             Entity_Node = 109737, \
+                                             Entity_Quad_Edge = 1199, \
+                                             Entity_Quad_Triangle = 4702, \
+                                             Entity_Quad_Tetra = 35559, \
+                                             Entity_Quad_Pyramid = 1428, \
+                                             Entity_Quad_Penta = 1344 \
+      )
index 5c91f60653a62158dace5682ffffc6ef9575bf7e..4c61677c3cb84dcea6bff698339051bf3b58f3cc 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Fissure dans un coude"""
+
+import os
 
 from blocFissure.gmu.fissureCoude  import fissureCoude
 
 class fissureCoude_3(fissureCoude):
-  """
-  problème de fissure du Coude
-  adaptation maillage
-  """
+  """problème de fissure du Coude - adaptation maillage"""
+
+  nomProbleme = "fissureCoude_3"
+  geomParams = dict()
+  meshParams = dict()
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
 
 # ---------------------------------------------------------------------------
   def setParamGeometrieSaine(self):
@@ -89,21 +96,22 @@ class fissureCoude_3(fissureCoude):
     nbSegCercle = nombre de secteurs
     areteFaceFissure = taille cible de l'arête des triangles en face de fissure.
     """
-    self.maillageFissureParams = dict(nomRep        = '.',
-                                      nomFicSain    = self.nomCas,
-                                      nomFicFissure = 'fissure_' + self.nomCas,
+    self.maillageFissureParams = dict(nomRep        = os.curdir,
+                                      nomFicSain    = self.nomProbleme,
+                                      nomFicFissure = self.nomProbleme + "_fissure",
                                       nbsegRad      = 5,
                                       nbsegCercle   = 6,
                                       areteFaceFissure = 5)
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Node            = 98643,
-                                          Entity_Quad_Edge       = 1130,
-                                          Entity_Quad_Triangle   = 1476,
-                                          Entity_Quad_Quadrangle = 11100,
-                                          Entity_Quad_Tetra      = 15993,
-                                          Entity_Quad_Hexa       = 14508,
-                                          Entity_Quad_Penta      = 624,
-                                          Entity_Quad_Pyramid    = 788)
-
+    self.referencesMaillageFissure = dict( \
+                                          Entity_Quad_Quadrangle = 10604, \
+                                          Entity_Quad_Hexa = 13764, \
+                                          Entity_Node = 91208, \
+                                          Entity_Quad_Edge = 1065, \
+                                          Entity_Quad_Triangle = 1326, \
+                                          Entity_Quad_Tetra = 13764, \
+                                          Entity_Quad_Pyramid = 602, \
+                                          Entity_Quad_Penta = 438 \
+                                         )
index ba0f7c006e9be9e5c7dcaf88c940267e184dab8d..d0254e4fd8fe941459d6c3dfe726c69d2caa90ca 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Fissure dans un coude - ASCOU09A"""
+
+import os
 
 from blocFissure.gmu.fissureCoude  import fissureCoude
 
 class fissureCoude_4(fissureCoude):
-  """
-  problème de fissure du Coude : ASCOU09A
-  adaptation maillage
-  """
+  """problème de fissure du Coude : ASCOU09A - adaptation maillage"""
+
+  nomProbleme = "fissureCoude_4"
+  geomParams = dict()
+  meshParams = dict()
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
 
 # ---------------------------------------------------------------------------
   def setParamGeometrieSaine(self):
@@ -89,21 +96,22 @@ class fissureCoude_4(fissureCoude):
     nbSegCercle = nombre de secteurs
     areteFaceFissure = taille cible de l'arête des triangles en face de fissure.
     """
-    self.maillageFissureParams = dict(nomRep        = '.',
-                                      nomFicSain    = self.nomCas,
-                                      nomFicFissure = 'fissure_' + self.nomCas,
+    self.maillageFissureParams = dict(nomRep        = os.curdir,
+                                      nomFicSain    = self.nomProbleme,
+                                      nomFicFissure = self.nomProbleme + "_fissure",
                                       nbsegRad      = 5,
                                       nbsegCercle   = 6,
                                       areteFaceFissure = 5)
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Node            = 133832,
-                                          Entity_Quad_Edge       = 1133,
-                                          Entity_Quad_Triangle   = 1498,
-                                          Entity_Quad_Quadrangle = 11892,
-                                          Entity_Quad_Tetra      = 18401,
-                                          Entity_Quad_Hexa       = 22412,
-                                          Entity_Quad_Penta      = 600,
-                                          Entity_Quad_Pyramid    = 816)
-
+    self.referencesMaillageFissure = dict( \
+                                          Entity_Quad_Quadrangle = 11428, \
+                                          Entity_Quad_Hexa = 21716, \
+                                          Entity_Node = 120899, \
+                                          Entity_Quad_Edge = 1073, \
+                                          Entity_Quad_Triangle = 1330, \
+                                          Entity_Quad_Tetra = 11799, \
+                                          Entity_Quad_Pyramid = 642, \
+                                          Entity_Quad_Penta = 426 \
+                                         )
index 404978e3d31cd131f0be34523e5ad3473e51a487..6346a8cbdcbdbda65e062e0794e0c76179eb6b37 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Fissure dans un coude"""
+
+import os
 
 from blocFissure.gmu.fissureCoude  import fissureCoude
 
 class fissureCoude_5(fissureCoude):
-  """
-  problème de fissure du Coude :
-  adaptation maillage
-  """
+  """problème de fissure du Coude : - adaptation maillage"""
+
+  nomProbleme = "fissureCoude_5"
+  geomParams = dict()
+  meshParams = dict()
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
 
 # ---------------------------------------------------------------------------
   def setParamGeometrieSaine(self):
@@ -89,21 +96,35 @@ class fissureCoude_5(fissureCoude):
     nbSegCercle = nombre de secteurs
     areteFaceFissure = taille cible de l'arête des triangles en face de fissure.
     """
-    self.maillageFissureParams = dict(nomRep        = '.',
-                                      nomFicSain    = self.nomCas,
-                                      nomFicFissure = 'fissure_' + self.nomCas,
+    self.maillageFissureParams = dict(nomRep        = os.curdir,
+                                      nomFicSain    = self.nomProbleme,
+                                      nomFicFissure = self.nomProbleme + "_fissure",
                                       nbsegRad      = 5,
                                       nbsegCercle   = 8,
                                       areteFaceFissure = 5)
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Node            = 55217,
-                                          Entity_Quad_Edge       = 762,
-                                          Entity_Quad_Triangle   = 1586,
-                                          Entity_Quad_Quadrangle = 5610,
-                                          Entity_Quad_Tetra      = 11468,
-                                          Entity_Quad_Hexa       = 7200,
-                                          Entity_Quad_Penta      = 516,
-                                          Entity_Quad_Pyramid    = 552)
-
+    from salome.smesh import smeshBuilder
+    if smeshBuilder.NETGEN_VERSION_MAJOR < 6:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 5366, \
+                                             Entity_Quad_Hexa = 7120, \
+                                             Entity_Node = 53544, \
+                                             Entity_Quad_Edge = 722, \
+                                             Entity_Quad_Triangle = 1570, \
+                                             Entity_Quad_Tetra = 10782, \
+                                             Entity_Quad_Pyramid = 532, \
+                                             Entity_Quad_Penta = 496 \
+      )
+    else:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 5366, \
+                                             Entity_Quad_Hexa = 7120, \
+                                             Entity_Node = 53105, \
+                                             Entity_Quad_Edge = 721, \
+                                             Entity_Quad_Triangle = 1482, \
+                                             Entity_Quad_Tetra = 10526, \
+                                             Entity_Quad_Pyramid = 532, \
+                                             Entity_Quad_Penta = 496 \
+      )
index e79483d162d792309d9d8ac7ac4a3378b4e675e1..c1dacebe1cb0aa54ef6c532d243373e9dcb01e9d 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Fissure dans un coude - ASCOU08"""
+
+import os
 
 from blocFissure.gmu.fissureCoude  import fissureCoude
 
 class fissureCoude_6(fissureCoude):
-# --- cas ASCOU08
+  """ASCOU08"""
+
+  nomProbleme = "fissureCoude_6"
+  geomParams = dict()
+  meshParams = dict()
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
 
 # ---------------------------------------------------------------------------
   def setParamGeometrieSaine(self):
@@ -78,7 +88,7 @@ class fissureCoude_6(fissureCoude):
                                    externe     = True)
 
   # ---------------------------------------------------------------------------
-                                   
+
   def setParamMaillageFissure(self):
     """
     Paramètres du maillage de la fissure pour le tuyau coudé
@@ -87,22 +97,35 @@ class fissureCoude_6(fissureCoude):
     nbSegCercle = nombre de secteurs
     areteFaceFissure = taille cible de l'arête des triangles en face de fissure.
     """
-    self.maillageFissureParams = dict(nomRep        = '.',
-                                      nomFicSain    = self.nomCas,
-                                      nomFicFissure = 'fissure_' + self.nomCas,
+    self.maillageFissureParams = dict(nomRep        = os.curdir,
+                                      nomFicSain    = self.nomProbleme,
+                                      nomFicFissure = self.nomProbleme + "_fissure",
                                       nbsegRad      = 5,
                                       nbsegCercle   = 12,
-                                      areteFaceFissure = 5)                                   
+                                      areteFaceFissure = 5)
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Node            = 63783,
-                                          Entity_Quad_Edge       = 831,
-                                          Entity_Quad_Triangle   = 742,
-                                          Entity_Quad_Quadrangle = 7480,
-                                          Entity_Quad_Tetra      = 8084,
-                                          Entity_Quad_Hexa       = 10080,
-                                          Entity_Quad_Penta      = 456,
-                                          Entity_Quad_Pyramid    = 500)
-
-
+    from salome.smesh import smeshBuilder
+    if smeshBuilder.NETGEN_VERSION_MAJOR < 6:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 7392, \
+                                             Entity_Quad_Hexa = 9888, \
+                                             Entity_Node = 61217, \
+                                             Entity_Quad_Edge = 833, \
+                                             Entity_Quad_Triangle = 1024, \
+                                             Entity_Quad_Tetra = 6725, \
+                                             Entity_Quad_Pyramid = 452, \
+                                             Entity_Quad_Penta = 408 \
+                                           )
+    else:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 7392, \
+                                             Entity_Quad_Hexa = 9888, \
+                                             Entity_Node = 61307, \
+                                             Entity_Quad_Edge = 833, \
+                                             Entity_Quad_Triangle = 1014, \
+                                             Entity_Quad_Tetra = 6800, \
+                                             Entity_Quad_Pyramid = 452, \
+                                             Entity_Quad_Penta = 408 \
+      )
index b86495189694b25ef0bca6f1cf13105a4b5a00fa..b2ebf33c7ca6f7378525d027004165a48a206d62 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Fissure dans un coude"""
+
+import os
 
 from blocFissure.gmu.fissureCoude  import fissureCoude
 
 class fissureCoude_7(fissureCoude):
+  """fissure dans un coude"""
 
+  nomProbleme = "fissureCoude_7"
+  geomParams = dict()
+  meshParams = dict()
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
 
 # ---------------------------------------------------------------------------
   def setParamGeometrieSaine(self):
@@ -79,7 +89,7 @@ class fissureCoude_7(fissureCoude):
                                    externe     = True)
 
   # ---------------------------------------------------------------------------
-                                   
+
   def setParamMaillageFissure(self):
     """
     Paramètres du maillage de la fissure pour le tuyau coudé
@@ -88,21 +98,35 @@ class fissureCoude_7(fissureCoude):
     nbSegCercle = nombre de secteurs
     areteFaceFissure = taille cible de l'arête des triangles en face de fissure.
     """
-    self.maillageFissureParams = dict(nomRep        = '.',
-                                      nomFicSain    = self.nomCas,
-                                      nomFicFissure = 'fissure_' + self.nomCas,
+    self.maillageFissureParams = dict(nomRep        = os.curdir,
+                                      nomFicSain    = self.nomProbleme,
+                                      nomFicFissure = self.nomProbleme + "_fissure",
                                       nbsegRad      = 5,
                                       nbsegCercle   = 12,
-                                      areteFaceFissure = 5)                                   
+                                      areteFaceFissure = 5)
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Node            = 75580,
-                                          Entity_Quad_Edge       = 899,
-                                          Entity_Quad_Triangle   = 1158,
-                                          Entity_Quad_Quadrangle = 8022,
-                                          Entity_Quad_Tetra      = 13162,
-                                          Entity_Quad_Hexa       = 11272,
-                                          Entity_Quad_Penta      = 756,
-                                          Entity_Quad_Pyramid    = 812)
-
+    from salome.smesh import smeshBuilder
+    if smeshBuilder.NETGEN_VERSION_MAJOR < 6:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 7758, \
+                                             Entity_Quad_Hexa = 10696, \
+                                             Entity_Node = 69782, \
+                                             Entity_Quad_Edge = 882, \
+                                             Entity_Quad_Triangle = 1378, \
+                                             Entity_Quad_Tetra = 9518, \
+                                             Entity_Quad_Pyramid = 668, \
+                                             Entity_Quad_Penta = 612 \
+      )
+    else:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 7758, \
+                                             Entity_Quad_Hexa = 10696, \
+                                             Entity_Node = 69423, \
+                                             Entity_Quad_Edge = 881, \
+                                             Entity_Quad_Triangle = 1350, \
+                                             Entity_Quad_Tetra = 9271, \
+                                             Entity_Quad_Pyramid = 668, \
+                                             Entity_Quad_Penta = 612 \
+      )
index 05b51fb991dff71a5f9a9425cde366822335052e..d0375e48b54eb871c5cff0919428aa1021a50b3d 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Fissure dans un coude - ASCOU16"""
+
+import os
 
 from blocFissure.gmu.fissureCoude  import fissureCoude
 
 class fissureCoude_8(fissureCoude):
-  # cas test ASCOU15
+  """cas test ASCOU16"""
 
+  nomProbleme = "fissureCoude_8"
+  geomParams = dict()
+  meshParams = dict()
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
 
 # ---------------------------------------------------------------------------
   def setParamGeometrieSaine(self):
@@ -80,7 +89,7 @@ class fissureCoude_8(fissureCoude):
                                    externe     = False)
 
   # ---------------------------------------------------------------------------
-                                   
+
   def setParamMaillageFissure(self):
     """
     Paramètres du maillage de la fissure pour le tuyau coudé
@@ -89,21 +98,35 @@ class fissureCoude_8(fissureCoude):
     nbSegCercle = nombre de secteurs
     areteFaceFissure = taille cible de l'arête des triangles en face de fissure.
     """
-    self.maillageFissureParams = dict(nomRep        = '.',
-                                      nomFicSain    = self.nomCas,
-                                      nomFicFissure = 'fissure_' + self.nomCas,
+    self.maillageFissureParams = dict(nomRep        = os.curdir,
+                                      nomFicSain    = self.nomProbleme,
+                                      nomFicFissure = self.nomProbleme + "_fissure",
                                       nbsegRad      = 4,
                                       nbsegCercle   = 16,
                                       areteFaceFissure = 5)
-    
+
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Node            = 50627,
-                                          Entity_Quad_Edge       = 666,
-                                          Entity_Quad_Triangle   = 1498,
-                                          Entity_Quad_Quadrangle = 4747,
-                                          Entity_Quad_Tetra      = 13225,
-                                          Entity_Quad_Hexa       = 5464,
-                                          Entity_Quad_Penta      = 864,
-                                          Entity_Quad_Pyramid    = 880)
-
+    from salome.smesh import smeshBuilder
+    if smeshBuilder.NETGEN_VERSION_MAJOR < 6:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 4572, \
+                                             Entity_Quad_Hexa = 5128, \
+                                             Entity_Node = 43015, \
+                                             Entity_Quad_Edge = 648, \
+                                             Entity_Quad_Triangle = 1282, \
+                                             Entity_Quad_Tetra = 9146, \
+                                             Entity_Quad_Pyramid = 768, \
+                                             Entity_Quad_Penta = 752 \
+                                           )
+    else:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 4572, \
+                                             Entity_Quad_Hexa = 5128, \
+                                             Entity_Node = 43443, \
+                                             Entity_Quad_Edge = 648, \
+                                             Entity_Quad_Triangle = 1332, \
+                                             Entity_Quad_Tetra = 9431, \
+                                             Entity_Quad_Pyramid = 768, \
+                                             Entity_Quad_Penta = 752 \
+                                           )
index 10701d1da4c23f16b21ff6f12f3b5e738478774d..f315b2d769aefb848c83eabefe9a0980291c2fa5 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Fissure dans un coude - ASCOU19"""
+
+import os
 
 from blocFissure.gmu.fissureCoude  import fissureCoude
 
 class fissureCoude_9(fissureCoude):
-  # cas test ASCOU19
+  """cas test ASCOU19"""
 
+  nomProbleme = "fissureCoude_9"
+  geomParams = dict()
+  meshParams = dict()
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
 
 # ---------------------------------------------------------------------------
   def setParamGeometrieSaine(self):
@@ -87,21 +96,35 @@ class fissureCoude_9(fissureCoude):
     nbSegCercle = nombre de secteurs
     areteFaceFissure = taille cible de l'arête des triangles en face de fissure.
     """
-    self.maillageFissureParams = dict(nomRep        = '.',
-                                      nomFicSain    = self.nomCas,
-                                      nomFicFissure = 'fissure_' + self.nomCas,
+    self.maillageFissureParams = dict(nomRep        = os.curdir,
+                                      nomFicSain    = self.nomProbleme,
+                                      nomFicFissure = self.nomProbleme + "_fissure",
                                       nbsegRad      = 6,
                                       nbsegCercle   = 20,
                                       areteFaceFissure = 2.5)
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Node            = 162936,
-                                          Entity_Quad_Edge       = 1254,
-                                          Entity_Quad_Triangle   = 3238,
-                                          Entity_Quad_Quadrangle = 15088,
-                                          Entity_Quad_Tetra      = 19305,
-                                          Entity_Quad_Hexa       = 27472,
-                                          Entity_Quad_Penta      = 920,
-                                          Entity_Quad_Pyramid    = 1056)
-
+    from salome.smesh import smeshBuilder
+    if smeshBuilder.NETGEN_VERSION_MAJOR < 6:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 14864, \
+                                             Entity_Quad_Hexa = 26772, \
+                                             Entity_Node = 152136, \
+                                             Entity_Quad_Edge = 1237, \
+                                             Entity_Quad_Triangle = 3178, \
+                                             Entity_Quad_Tetra = 13915, \
+                                             Entity_Quad_Pyramid = 916, \
+                                             Entity_Quad_Penta = 780 \
+      )
+    else:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 14864, \
+                                             Entity_Quad_Hexa = 26772, \
+                                             Entity_Node = 153298, \
+                                             Entity_Quad_Edge = 1237, \
+                                             Entity_Quad_Triangle = 3338, \
+                                             Entity_Quad_Tetra = 14643, \
+                                             Entity_Quad_Pyramid = 916, \
+                                             Entity_Quad_Penta = 780 \
+      )
index f510d2a732e7eb23185ac368ed34c1ca96c9518e..4aaaaa02d1fd970247b8f2ac69c0e82d94b93fbe 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Fissure dans un coude"""
 
-from blocFissure import gmu
-from blocFissure.gmu.geomsmesh import geompy, smesh
-
+import logging
+import os
 import math
+
 import GEOM
-import SALOMEDS
 import SMESH
-#import StdMeshers
-#import GHS3DPlugin
-#import NETGENPlugin
-import logging
 
-from blocFissure.gmu.fissureGenerique import fissureGenerique
+from blocFissure.gmu.geomsmesh import geompy
+from blocFissure.gmu.geomsmesh import smesh
+from blocFissure.gmu.geomsmesh import geomPublish
+from blocFissure.gmu.geomsmesh import geomPublishInFather
 
+from blocFissure.gmu import initLog
+from blocFissure.gmu.putName import putName
+from blocFissure.gmu.fissureGenerique import fissureGenerique
 from blocFissure.gmu.triedreBase import triedreBase
 from blocFissure.gmu.genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
 from blocFissure.gmu.creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
@@ -40,12 +42,19 @@ from blocFissure.gmu.insereFissureLongue import insereFissureLongue
 O, OX, OY, OZ = triedreBase()
 
 class fissure_Coude(fissureGenerique):
-  """
-  problème de fissure du Coude : version de base
+  """problème de fissure du Coude : version de base
+
   maillage hexa
   """
 
-  nomProbleme = "tuyau_Coude"
+  nomProbleme = "fissure_Coude"
+  geomParams = dict()
+  meshParams = dict()
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
+  circonferentielle = False
+  longitudinale = False
 
   # ---------------------------------------------------------------------------
   def setParamGeometrieSaine(self):
@@ -67,6 +76,7 @@ class fissure_Coude(fissureGenerique):
 
   # ---------------------------------------------------------------------------
   def genereGeometrieSaine(self, geomParams):
+    """a écrire"""
     logging.info("genereGeometrieSaine %s", self.nomCas)
 
     angleCoude = geomParams['angleCoude']
@@ -87,60 +97,60 @@ class fissure_Coude(fissureGenerique):
     Rotation_2 = geompy.MakeRotation(OZ, OY, angleCoude*math.pi/180.0)
     Extrusion_2 = geompy.MakePrismVecH(Rotation_1, Rotation_2, -l_tube_p2)
     Plane_1 = geompy.MakePlaneLCS(None, 100000, 3)
-    geompy.addToStudy( Plane_1, "Plane_1" )
-    geompy.addToStudy( Extrusion_1, "Extrusion_1" )
-    geompy.addToStudy( Revolution_1, "Revolution_1" )
-    geompy.addToStudy( Extrusion_2, "Extrusion_2" )
+    geomPublish(initLog.debug, Plane_1, "Plane_1" )
+    geomPublish(initLog.debug, Extrusion_1, "Extrusion_1" )
+    geomPublish(initLog.debug, Revolution_1, "Revolution_1" )
+    geomPublish(initLog.debug, Extrusion_2, "Extrusion_2" )
 
     P1 = O
-    geompy.addToStudy( P1, "P1" )
+    geomPublish(initLog.always, P1, "P1", self.numeroCas )
     op2 = geompy.MakeVertex(0, 0, -l_tube_p1)
     P2 = geompy.MakeRotation(op2, axe, angleCoude*math.pi/180.0)
     P2 = geompy.MakeTranslationVectorDistance(P2, Rotation_2, -l_tube_p2)
-    geompy.addToStudy( P2, "P2" )
+    geomPublish(initLog.always, P2, "P2", self.numeroCas )
 
     # --- tube coude sain
 
     geometrieSaine = geompy.MakePartition([Extrusion_1, Revolution_1, Extrusion_2, P1, P2], [Plane_1], [], [], geompy.ShapeType["SOLID"], 0, [], 1)
-    geompy.addToStudy( geometrieSaine, self.nomCas )
+    geomPublish(initLog.always, geometrieSaine, self.nomCas, self.numeroCas )
     [P1, P2] = geompy.RestoreGivenSubShapes(geometrieSaine, [P1, P2], GEOM.FSM_GetInPlaceByHistory, False, True)
 
     [ep, circ_g, circ_d, long_p2, long_coude, long_p1] = geompy.Propagate(geometrieSaine)
-    geompy.addToStudyInFather( geometrieSaine, long_p1, 'long_p1' )
-    geompy.addToStudyInFather( geometrieSaine, ep, 'ep' )
-    geompy.addToStudyInFather( geometrieSaine, long_coude, 'long_coude' )
-    geompy.addToStudyInFather( geometrieSaine, circ_g, 'circ_g' )
-    geompy.addToStudyInFather( geometrieSaine, circ_d, 'circ_d' )
-    geompy.addToStudyInFather( geometrieSaine, long_p2, 'long_p2' )
+    geomPublishInFather(initLog.always, geometrieSaine, long_p1, 'long_p1' )
+    geomPublishInFather(initLog.always, geometrieSaine, ep, 'ep' )
+    geomPublishInFather(initLog.always, geometrieSaine, long_coude, 'long_coude' )
+    geomPublishInFather(initLog.always, geometrieSaine, circ_g, 'circ_g' )
+    geomPublishInFather(initLog.always, geometrieSaine, circ_d, 'circ_d' )
+    geomPublishInFather(initLog.always, geometrieSaine, long_p2, 'long_p2' )
 
     # --- face extremite tube (EXTUBE)
 
     facesIds = geompy.GetShapesOnPlaneIDs(geometrieSaine, geompy.ShapeType["FACE"], OZ, GEOM.ST_ON)
     EXTUBE = geompy.CreateGroup(geometrieSaine, geompy.ShapeType["FACE"])
     geompy.UnionIDs(EXTUBE, facesIds)
-    geompy.addToStudyInFather( geometrieSaine, EXTUBE, 'EXTUBE' )
+    geomPublishInFather(initLog.always, geometrieSaine, EXTUBE, 'EXTUBE' )
 
     # --- edge bord extremite tube (BORDTU)
 
     edge1Ids = geompy.GetShapesOnPlaneIDs(geometrieSaine, geompy.ShapeType["EDGE"], OZ, GEOM.ST_ON)
     edge2Ids = geompy.GetShapesOnCylinderIDs(geometrieSaine, geompy.ShapeType["EDGE"], OZ, de/2., GEOM.ST_ON)
-    edgesIds = []
+    edgesIds = list()
     for edge in edge1Ids:
       if edge in edge2Ids:
         edgesIds.append(edge)
     BORDTU = geompy.CreateGroup(geometrieSaine, geompy.ShapeType["EDGE"])
     geompy.UnionIDs(BORDTU, edgesIds)
-    geompy.addToStudyInFather( geometrieSaine, BORDTU, 'BORDTU' )
+    geomPublishInFather(initLog.always, geometrieSaine, BORDTU, 'BORDTU' )
 
     # --- face origine tube (CLGV)
 
     pp2 = geompy.MakeTranslationVectorDistance(P2, Rotation_2, 10)
     vec2 = geompy.MakeVector(P2, pp2)
-    #geompy.addToStudy(vec2, 'vec2')
+    #geomPublish(initLog.debug, vec2, 'vec2', self.numeroCas)
     facesIds = geompy.GetShapesOnPlaneIDs(geometrieSaine, geompy.ShapeType["FACE"], vec2, GEOM.ST_ON)
     CLGV = geompy.CreateGroup(geometrieSaine, geompy.ShapeType["FACE"])
     geompy.UnionIDs(CLGV, facesIds)
-    geompy.addToStudyInFather( geometrieSaine, CLGV, 'CLGV' )
+    geomPublishInFather(initLog.always, geometrieSaine, CLGV, 'CLGV' )
 
     # --- peau tube interieur (PEAUINT)
 
@@ -150,11 +160,11 @@ class fissure_Coude(fissureGenerique):
     extru2 = geompy.MakePrismVecH(rot1, Rotation_2, -l_tube_p2)
     interne = geompy.MakeFuse(extru1, revol1)
     interne = geompy.MakeFuse(extru2, interne)
-    geompy.addToStudy(interne, 'interne')
+    geomPublish(initLog.debug, interne, 'interne', self.numeroCas)
     facesIds = geompy.GetShapesOnShapeIDs(interne, geometrieSaine, geompy.ShapeType["FACE"], GEOM.ST_ONIN)
     PEAUINT = geompy.CreateGroup(geometrieSaine, geompy.ShapeType["FACE"])
     geompy.UnionIDs(PEAUINT, facesIds)
-    geompy.addToStudyInFather( geometrieSaine, PEAUINT, 'PEAUINT' )
+    geomPublishInFather(initLog.always, geometrieSaine, PEAUINT, 'PEAUINT' )
 
     # --- peau tube exterieur (PEAUEXT)
 
@@ -166,18 +176,18 @@ class fissure_Coude(fissureGenerique):
     extru2 = geompy.MakePrismVecH(rot1, Rotation_2, -l_tube_p2)
     externe = geompy.MakeFuse(extru1, revol1)
     externe = geompy.MakeFuse(extru2, externe)
-    geompy.addToStudy(externe, 'externe')
+    geomPublish(initLog.debug, externe, 'externe', self.numeroCas)
     facesIds = geompy.GetShapesOnShapeIDs(externe, geometrieSaine, geompy.ShapeType["FACE"], GEOM.ST_ON)
     PEAUEXT = geompy.CreateGroup(geometrieSaine, geompy.ShapeType["FACE"])
     geompy.UnionIDs(PEAUEXT, facesIds)
-    geompy.addToStudyInFather( geometrieSaine, PEAUEXT, 'PEAUEXT' )
+    geomPublishInFather(initLog.always, geometrieSaine, PEAUEXT, 'PEAUEXT' )
 
     # --- solide sain
 
     volIds = geompy.SubShapeAllIDs(geometrieSaine, geompy.ShapeType["SOLID"])
     COUDE = geompy.CreateGroup(geometrieSaine, geompy.ShapeType["SOLID"])
     geompy.UnionIDs(COUDE, volIds)
-    geompy.addToStudyInFather( geometrieSaine, COUDE, 'COUDSAIN' )
+    geomPublishInFather(initLog.always, geometrieSaine, COUDE, 'COUDSAIN' )
 
     geometriesSaines = [geometrieSaine, long_p1, ep, long_coude, circ_g, circ_d, long_p2, P1, P2, EXTUBE, BORDTU, CLGV, PEAUINT, PEAUEXT, COUDE]
 
@@ -220,59 +230,59 @@ class fissure_Coude(fissureGenerique):
     n_long_p2    = meshParams['n_long_p2']
 
     maillageSain = smesh.Mesh(geometrieSaine)
+    putName(maillageSain, "maillageSain", i_pref=self.numeroCas)
 
     algo3d = maillageSain.Hexahedron()
     algo2d = maillageSain.Quadrangle()
-    smesh.SetName(algo3d, "algo3d_maillageSain")
-    smesh.SetName(algo2d, "algo2d_maillageSain")
 
     algo1d_long_p1 = maillageSain.Segment(geom=long_p1)
     hypo1d_long_p1 = algo1d_long_p1.NumberOfSegments(n_long_p1)
-    smesh.SetName(algo1d_long_p1, "algo1d_long_p1")
-    smesh.SetName(hypo1d_long_p1, "hypo1d_long_p1")
+    putName(hypo1d_long_p1, "n_long_p1={}".format(n_long_p1), i_pref=self.numeroCas)
 
     algo1d_ep = maillageSain.Segment(geom=ep)
     hypo1d_ep = algo1d_ep.NumberOfSegments(n_ep)
-    smesh.SetName(algo1d_ep, "algo1d_ep")
-    smesh.SetName(hypo1d_ep, "hypo1d_ep")
+    putName(hypo1d_ep, "n_ep={}".format(n_ep), i_pref=self.numeroCas)
 
     algo1d_long_coude = maillageSain.Segment(geom=long_coude)
     hypo1d_long_coude = algo1d_long_coude.NumberOfSegments(n_long_coude)
-    smesh.SetName(algo1d_long_coude, "algo1d_long_coude")
-    smesh.SetName(hypo1d_long_coude, "hypo1d_long_coude")
+    putName(hypo1d_long_coude, "n_long_coude={}".format(n_long_coude), i_pref=self.numeroCas)
 
     algo1d_circ_g = maillageSain.Segment(geom=circ_g)
     hypo1d_circ_g = algo1d_circ_g.NumberOfSegments(n_circ_g)
-    smesh.SetName(algo1d_circ_g, "algo1d_circ_g")
-    smesh.SetName(hypo1d_circ_g, "hypo1d_circ_g")
+    putName(hypo1d_circ_g, "n_circ_g={}".format(n_circ_g), i_pref=self.numeroCas)
 
     algo1d_circ_d = maillageSain.Segment(geom=circ_d)
     hypo1d_circ_d = algo1d_circ_d.NumberOfSegments(n_circ_d)
-    smesh.SetName(algo1d_circ_d, "algo1d_circ_d")
-    smesh.SetName(hypo1d_circ_d, "hypo1d_circ_d")
+    putName(hypo1d_circ_d, "n_circ_d={}".format(n_circ_d), i_pref=self.numeroCas)
 
     algo1d_long_p2 = maillageSain.Segment(geom=long_p2)
     hypo1d_long_p2 = algo1d_long_p2.NumberOfSegments(n_long_p2)
-    smesh.SetName(algo1d_long_p2, "algo1d_long_p2")
-    smesh.SetName(hypo1d_long_p2, "hypo1d_long_p2")
-
-    isDone = maillageSain.Compute()
-
-    mp1 = maillageSain.GroupOnGeom(P1,'P1',SMESH.NODE)
-    mp2 = maillageSain.GroupOnGeom(P2,'P2',SMESH.NODE)
-    ext = maillageSain.GroupOnGeom(EXTUBE,'EXTUBE',SMESH.FACE)
-    btu = maillageSain.GroupOnGeom(BORDTU,'BORDTU',SMESH.EDGE)
-    clg = maillageSain.GroupOnGeom(CLGV,'CLGV',SMESH.FACE)
-    pei = maillageSain.GroupOnGeom(PEAUINT,'PEAUINT',SMESH.FACE)
-    pex = maillageSain.GroupOnGeom(PEAUEXT,'PEAUEXT',SMESH.FACE)
-    cou = maillageSain.GroupOnGeom(COUDE,'COUDSAIN',SMESH.VOLUME)
+    putName(hypo1d_long_p2, "n_long_p2={}".format(n_long_p2), i_pref=self.numeroCas)
+
+    _ = maillageSain.GroupOnGeom(P1,'P1',SMESH.NODE)
+    _ = maillageSain.GroupOnGeom(P2,'P2',SMESH.NODE)
+    _ = maillageSain.GroupOnGeom(EXTUBE,'EXTUBE',SMESH.FACE)
+    _ = maillageSain.GroupOnGeom(BORDTU,'BORDTU',SMESH.EDGE)
+    _ = maillageSain.GroupOnGeom(CLGV,'CLGV',SMESH.FACE)
+    _ = maillageSain.GroupOnGeom(PEAUINT,'PEAUINT',SMESH.FACE)
+    _ = maillageSain.GroupOnGeom(PEAUEXT,'PEAUEXT',SMESH.FACE)
+    _ = maillageSain.GroupOnGeom(COUDE,'COUDSAIN',SMESH.VOLUME)
+
+    is_done = maillageSain.Compute()
+    text = "maillageSain.Compute"
+    if is_done:
+      logging.info(text+" OK")
+    else:
+      text = "Erreur au calcul du maillage.\n" + text
+      logging.info(text)
+      raise Exception(text)
 
     return [maillageSain, True] # True : maillage hexa
 
   # ---------------------------------------------------------------------------
   def setParamShapeFissure(self):
     """
-    paramètres de la fissure
+    paramètres de la fissure pour le tuyau coude
     profondeur  : 0 < profondeur <= épaisseur
     azimut      : entre 0 et 360°
     alpha       : 0 < alpha < angleCoude
@@ -292,14 +302,15 @@ class fissure_Coude(fissureGenerique):
                                    externe     = True)
 
   # ---------------------------------------------------------------------------
-  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams):
+  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams, \
+                                mailleur="MeshGems"):
     logging.info("genereShapeFissure %s", self.nomCas)
     logging.info("shapeFissureParams %s", shapeFissureParams)
 
-    angleCoude = geomParams['angleCoude']
+    #angleCoude = geomParams['angleCoude']
     r_cintr    = geomParams['r_cintr']
     l_tube_p1  = geomParams['l_tube_p1']
-    l_tube_p2  = geomParams['l_tube_p2']
+    #l_tube_p2  = geomParams['l_tube_p2']
     epais      = geomParams['epais']
     de         = geomParams['de']
 
@@ -317,17 +328,14 @@ class fissure_Coude(fissureGenerique):
     if not lgInfluence:
       lgInfluence = profondeur
 
-    if longueur > 2*profondeur:
-      self.fissureLongue=True
-    else:
-      self.fissureLongue=False
+    self.fissureLongue = bool(longueur > 2*profondeur)
 
-    self.circonferentielle = False
-    self.longitudinale = False
-    if self.fissureLongue and (abs(orientation) < 45) :
+    if self.fissureLongue and (abs(orientation) < 45.) :
       self.longitudinale = True
     elif self.fissureLongue:
       self.circonferentielle = True
+    #logging.info("longitudinale %s", self.longitudinale)
+    #logging.info("circonferentielle %s", self.circonferentielle)
 
     if self.circonferentielle:
       if externe:
@@ -364,15 +372,15 @@ class fissure_Coude(fissureGenerique):
       facetuber = geompy.MakeRotation(facetube0, OZ, -angle)
       face0 = geompy.MakeFaceWires([arcl,arci, arce, arcr], 1)
       plan0 = geompy.MakePlane(O, OZ, 10000)
-      geompy.addToStudy( face0, 'facefissOrig' )
+      geomPublish(initLog.debug, face0, 'facefissOrig' )
       face1 = geompy.MakeRotation(face0, OZ, azimut*math.pi/180.)
       face2 = geompy.MakeTranslation(face1, 0, 0, -l_tube_p1)
       facefiss = geompy.MakeRotation(face2, axe, alpha*math.pi/180.)
-      geompy.addToStudy( facefiss, 'facefissPlace' )
+      geomPublish(initLog.always, facefiss, "facefissPlace", self.numeroCas )
       centre = geompy.MakeRotation(pb, OZ, azimut*math.pi/180.)
       centre = geompy.MakeTranslation(centre, 0, 0, -l_tube_p1)
       centre = geompy.MakeRotation(centre, axe, alpha*math.pi/180.)
-      geompy.addToStudy( centre, 'centrefissPlace' )
+      geomPublish(initLog.always, centre, "centrefissPlace", self.numeroCas )
       arcr = geompy.MakeRotation(arcr, OZ, azimut*math.pi/180.)
       arcr = geompy.MakeTranslation(arcr, 0, 0, -l_tube_p1)
       arcr = geompy.MakeRotation(arcr, axe, alpha*math.pi/180.)
@@ -385,24 +393,24 @@ class fissure_Coude(fissureGenerique):
       wiretube = geompy.MakeRotation(wire0, OZ, azimut*math.pi/180.)
       wiretube = geompy.MakeTranslation(wiretube, 0, 0, -l_tube_p1)
       wiretube = geompy.MakeRotation(wiretube, axe, alpha*math.pi/180.)
-      geompy.addToStudy(wiretube, 'wiretubePlace' )
+      geomPublish(initLog.always,wiretube, "wiretubePlace", self.numeroCas )
       facetubel = geompy.MakeRotation(facetubel, OZ, azimut*math.pi/180.)
       facetubel = geompy.MakeTranslation(facetubel, 0, 0, -l_tube_p1)
       facetubel = geompy.MakeRotation(facetubel, axe, alpha*math.pi/180.)
-      geompy.addToStudy(facetubel, 'facetubeGauche' )
+      geomPublish(initLog.debug,facetubel, 'facetubeGauche' )
       facetuber = geompy.MakeRotation(facetuber, OZ, azimut*math.pi/180.)
       facetuber = geompy.MakeTranslation(facetuber, 0, 0, -l_tube_p1)
       facetuber = geompy.MakeRotation(facetuber, axe, alpha*math.pi/180.)
-      geompy.addToStudy(facetuber, 'facetubeDroit' )
+      geomPublish(initLog.debug,facetuber, 'facetubeDroit' )
       planfiss = geompy.MakeRotation(plan0, OZ, azimut*math.pi/180.)
       planfiss = geompy.MakeTranslation(planfiss, 0, 0, -l_tube_p1)
       planfiss = geompy.MakeRotation(planfiss, axe, alpha*math.pi/180.)
-      geompy.addToStudy(planfiss, 'planfissPlace' )
+      geomPublish(initLog.always,planfiss, "planfissPlace", self.numeroCas )
       pipefissl = geompy.MakePipe(facetubel, arcl)
       pipefissi = geompy.MakePipe(facetubel, arci)
       pipefissr = geompy.MakePipe(facetuber, arcr)
       pipefiss = geompy.MakePartition([pipefissl, pipefissi, pipefissr], [planfiss, wiretube], [], [], geompy.ShapeType["SOLID"], 0, [], 0)
-      geompy.addToStudy(pipefiss, 'pipefissPlace' )
+      geomPublish(initLog.always,pipefiss, "pipefissPlace", self.numeroCas )
 
 
     elif self.longitudinale:
@@ -431,55 +439,56 @@ class fissure_Coude(fissureGenerique):
       arcr = geompy.MakeArc(pir, prr, per)
       arci = geompy.MakeArc(pil, pi, pir)
       arce = geompy.MakeArc(pel, pe, per)
-      geompy.addToStudy( arcl, 'arcl' )
-      geompy.addToStudy( arcr, 'arcr' )
-      geompy.addToStudy( arci, 'arci' )
-      geompy.addToStudy( arce, 'arce' )
+      geomPublish(initLog.debug, arcl, 'arcl' )
+      geomPublish(initLog.debug, arcr, 'arcr' )
+      geomPublish(initLog.debug, arci, 'arci' )
+      geomPublish(initLog.debug, arce, 'arce' )
       wire0 = geompy.MakeWire([arcr, arci, arcl])
       cercle0 = geompy.MakeCircle(O, OZ, profondeur/4.0)
       #cercle0 = geompy.MakeRotation(cercle0, OZ, math.pi/2.0)
       cercle0 = geompy.MakeTranslationTwoPoints(cercle0, O, pi)
-      geompy.addToStudy( cercle0, 'cercle0' )
+      geomPublish(initLog.debug, cercle0, 'cercle0' )
       facetube0 = geompy.MakeFaceWires([cercle0], 1)
       facetubel = geompy.MakeRotation(facetube0, OY, -angle)
       facetuber = geompy.MakeRotation(facetube0, OY, angle)
-      geompy.addToStudy(facetubel , 'facetubel' )
-      geompy.addToStudy( facetuber, 'facetuber' )
+      geomPublish(initLog.debug,facetubel , 'facetubel' )
+      geomPublish(initLog.debug, facetuber, 'facetuber' )
       face0 = geompy.MakeFaceWires([arcl,arci, arce, arcr], 1)
       plan0 = geompy.MakePlane(O, OY, 10000)
-      geompy.addToStudy( face0, 'facefissOrig' )
+      geomPublish(initLog.debug, face0, 'facefissOrig' )
       facefiss = geompy.MakeRotation(face0, OY, alpha*math.pi/180.)
-      geompy.addToStudy( facefiss, 'facefissPlace' )
+      geomPublish(initLog.always, facefiss, "facefissPlace", self.numeroCas )
       centre = geompy.MakeRotation(pb, OY, alpha*math.pi/180.)
-      geompy.addToStudy( centre, 'centrefissPlace' )
+      geomPublish(initLog.always, centre, "centrefissPlace", self.numeroCas )
       arcr = geompy.MakeRotation(arcr, OY, alpha*math.pi/180.)
       arci = geompy.MakeRotation(arci, OY, alpha*math.pi/180.)
       arcl = geompy.MakeRotation(arcl, OY, alpha*math.pi/180.)
       wiretube = geompy.MakeRotation(wire0, OY, alpha*math.pi/180.)
-      geompy.addToStudy(wiretube, 'wiretubePlace' )
+      geomPublish(initLog.always,wiretube, "wiretubePlace", self.numeroCas )
       facetubel = geompy.MakeRotation(facetubel, OY, alpha*math.pi/180.)
-      geompy.addToStudy(facetubel, 'facetubeGauche' )
+      geomPublish(initLog.debug,facetubel, 'facetubeGauche' )
       facetuber = geompy.MakeRotation(facetuber, OY, alpha*math.pi/180.)
-      geompy.addToStudy(facetubel, 'facetubeDroit' )
+      geomPublish(initLog.debug,facetubel, 'facetubeDroit' )
       planfiss = geompy.MakeRotation(plan0, OY, alpha*math.pi/180.)
-      geompy.addToStudy(planfiss, 'planfissPlace' )
+      geomPublish(initLog.always,planfiss, "planfissPlace", self.numeroCas )
       pipefissl = geompy.MakePipe(facetubel, arcl)
       pipefissi = geompy.MakePipe(facetubel, arci)
       pipefissr = geompy.MakePipe(facetuber, arcr)
       pipefiss = geompy.MakePartition([pipefissl, pipefissi, pipefissr], [planfiss, wiretube], [], [], geompy.ShapeType["SOLID"], 0, [], 0)
-      geompy.addToStudy(pipefiss, 'pipefissPlace' )
+      geomPublish(initLog.always,pipefiss, "pipefissPlace", self.numeroCas )
     else:
       pass
 
-    coordsNoeudsFissure = genereMeshCalculZoneDefaut(facefiss, 5 ,10)
+    mailleur = self.mailleur2d3d()
+    coordsNoeudsFissure = genereMeshCalculZoneDefaut(facefiss, 5 ,10, mailleur, self.numeroCas)
 
     return [facefiss, centre, lgInfluence, coordsNoeudsFissure, wiretube, facetubel, facetuber, planfiss, pipefiss]
 
   # ---------------------------------------------------------------------------
   def setParamMaillageFissure(self):
-    self.maillageFissureParams = dict(nomRep        = '.',
-                                      nomFicSain    = self.nomCas,
-                                      nomFicFissure = 'fissure_' + self.nomCas,
+    self.maillageFissureParams = dict(nomRep        = os.curdir,
+                                      nomFicSain    = self.nomProbleme,
+                                      nomFicFissure = self.nomProbleme + "_fissure",
                                       nbsegExt      = 5,
                                       nbsegGen      = 25,
                                       nbsegRad      = 5,
@@ -490,26 +499,44 @@ class fissure_Coude(fissureGenerique):
 
   # ---------------------------------------------------------------------------
   def genereZoneDefaut(self, geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams):
-    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams)
+    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams, \
+                                                 self.numeroCas)
     return elementsDefaut
 
   # ---------------------------------------------------------------------------
-  def genereMaillageFissure(self, geometriesSaines, maillagesSains,
-                            shapesFissure, shapeFissureParams,
-                            maillageFissureParams, elementsDefaut, step):
-    maillageFissure = insereFissureLongue(geometriesSaines, maillagesSains,
-                                          shapesFissure, shapeFissureParams,
-                                          maillageFissureParams, elementsDefaut, step)
+  def genereMaillageFissure(self, geometriesSaines, maillagesSains, \
+                                  shapesFissure, shapeFissureParams, \
+                                  maillageFissureParams, elementsDefaut, step, \
+                                  mailleur="MeshGems"):
+
+    mailleur = self.mailleur2d3d()
+    maillageFissure = insereFissureLongue(shapesFissure, shapeFissureParams, \
+                                          maillageFissureParams, elementsDefaut, \
+                                          mailleur, self.numeroCas)
     return maillageFissure
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Node            = 77491,
-                                          Entity_Quad_Edge       = 1006,
-                                          Entity_Quad_Triangle   = 2412,
-                                          Entity_Quad_Quadrangle = 6710,
-                                          Entity_Quad_Tetra      = 20853,
-                                          Entity_Quad_Hexa       = 8656,
-                                          Entity_Quad_Penta      = 1176,
-                                          Entity_Quad_Pyramid    = 1232)
-
+    from salome.smesh import smeshBuilder
+    if smeshBuilder.NETGEN_VERSION_MAJOR < 6:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 6710, \
+                                             Entity_Quad_Hexa = 8656, \
+                                             Entity_Node = 70896, \
+                                             Entity_Quad_Edge = 1006, \
+                                             Entity_Quad_Triangle = 2342, \
+                                             Entity_Quad_Tetra = 15963, \
+                                             Entity_Quad_Pyramid = 1232, \
+                                             Entity_Quad_Penta = 1176 \
+      )
+    else:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 6710, \
+                                             Entity_Quad_Hexa = 8656, \
+                                             Entity_Node = 71784, \
+                                             Entity_Quad_Edge = 1006, \
+                                             Entity_Quad_Triangle = 2496, \
+                                             Entity_Quad_Tetra = 16504, \
+                                             Entity_Quad_Pyramid = 1232, \
+                                             Entity_Quad_Penta = 1176 \
+      )
index 482b5272ed80e14942ee6888d22728b64f811fcb..e2d1a78bb65bd503084b9fdeb532cc0d405b43c0 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Fissure dans un coude - ASCOU09A"""
+
+import os
 
 from .fissure_Coude  import fissure_Coude
 
 class fissure_Coude_4(fissure_Coude):
-  """
-  probleme de fissure du Coude : ASCOU09A
+  """probleme de fissure du Coude : ASCOU09A
+
   adaptation maillage
   """
 
+  nomProbleme = "fissure_Coude_4"
+  geomParams = dict()
+  meshParams = dict()
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
+
 # ---------------------------------------------------------------------------
   def setParamGeometrieSaine(self):
     """
@@ -64,10 +74,9 @@ class fissure_Coude_4(fissure_Coude):
     orientation : 0° : longitudinale, 90° : circonférentielle, autre : uniquement fissures elliptiques
     externe     : True : fissure face externe, False : fissure face interne
     """
-    print("setParamShapeFissure", self.nomCas)
-    self.shapeFissureParams = dict(nomRep        = '.',
+    self.shapeFissureParams = dict(nomRep        = os.curdir,
                                    nomFicSain    = self.nomCas,
-                                   nomFicFissure = 'fissure_' + self.nomCas,
+                                   nomFicFissure = self.nomProbleme + "_fissure",
                                    profondeur  = 10,
                                    azimut      = 90,
                                    alpha       = 20,
@@ -80,12 +89,26 @@ class fissure_Coude_4(fissure_Coude):
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Quad_Pyramid    = 948,
-                                          Entity_Quad_Triangle   = 1562,
-                                          Entity_Quad_Edge       = 1192,
-                                          Entity_Quad_Penta      = 732,
-                                          Entity_Quad_Hexa       = 22208,
-                                          Entity_Node            = 133418,
-                                          Entity_Quad_Tetra      = 18759,
-                                          Entity_Quad_Quadrangle = 11852)
-
+    from salome.smesh import smeshBuilder
+    if smeshBuilder.NETGEN_VERSION_MAJOR < 6:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 11852, \
+                                             Entity_Quad_Hexa = 22208, \
+                                             Entity_Node = 124711, \
+                                             Entity_Quad_Edge = 1192, \
+                                             Entity_Quad_Triangle = 1534, \
+                                             Entity_Quad_Tetra = 12204, \
+                                             Entity_Quad_Pyramid = 948, \
+                                             Entity_Quad_Penta = 732 \
+      )
+    else:
+      self.referencesMaillageFissure = dict( \
+                                             Entity_Quad_Quadrangle = 11852, \
+                                             Entity_Quad_Hexa = 22208, \
+                                             Entity_Node = 124493, \
+                                             Entity_Quad_Edge = 1192, \
+                                             Entity_Quad_Triangle = 1616, \
+                                             Entity_Quad_Tetra = 11977, \
+                                             Entity_Quad_Pyramid = 948, \
+                                             Entity_Quad_Penta = 732 \
+      )
diff --git a/src/Tools/blocFissure/CasTests/tube.py b/src/Tools/blocFissure/CasTests/tube.py
new file mode 100644 (file)
index 0000000..bb38017
--- /dev/null
@@ -0,0 +1,137 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+
+"""problème de fissure plane dans un tube ; passage par fichier xao"""
+
+import os
+import logging
+
+from blocFissure import gmu
+from blocFissure.gmu import initLog
+from blocFissure.gmu.geomsmesh import geompy, smesh
+from blocFissure.gmu.geomsmesh import geomPublish
+from blocFissure.gmu.geomsmesh import geomPublishInFather
+
+from blocFissure.gmu.fissureGenerique import fissureGenerique
+from blocFissure.gmu.genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
+from blocFissure.gmu.creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
+from blocFissure.gmu.construitFissureGenerale import construitFissureGenerale
+from blocFissure.gmu.putName import putName
+
+class tube(fissureGenerique):
+  """problème de fissure plane dans un tube"""
+
+  nomProbleme = "tube"
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
+
+  # ---------------------------------------------------------------------------
+  def genereMaillageSain(self, geometriesSaines, meshParams):
+    texte = "genereMaillageSain pour '{}'".format(self.nomCas)
+    logging.info(texte)
+
+    ([objetSain], _) = smesh.CreateMeshesFromMED(os.path.join(gmu.pathBloc, "materielCasTests", "Tube.med"))
+    putName(objetSain.GetMesh(), self.nomProbleme, i_pref=self.numeroCas)
+
+    return [objetSain, True] # True : maillage hexa
+
+  # ---------------------------------------------------------------------------
+  def setParamShapeFissure(self):
+    """
+    paramètres de la fissure pour méthode construitFissureGenerale
+    lgInfluence : distance autour de la shape de fissure a remailler (A ajuster selon le maillage)
+    rayonPipe   : le rayon du pile maillé en hexa autour du fond de fissure
+    """
+    texte = "genereMaillageSain pour '{}'".format(self.nomCas)
+    logging.info(texte)
+    self.shapeFissureParams = dict(lgInfluence = 0.4,
+                                   rayonPipe   = 0.05)
+
+  # ---------------------------------------------------------------------------
+  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams, \
+                                mailleur="MeshGems"):
+    """Importe la géométrie de la fissure"""
+    texte = "genereShapeFissure pour '{}'".format(self.nomCas)
+    logging.info(texte)
+
+    lgInfluence = shapeFissureParams['lgInfluence']
+
+    (_, shellFiss, _, l_groups, _) = geompy.ImportXAO(os.path.join(gmu.pathBloc, "materielCasTests", "TubeFiss.xao"))
+    l_aux = list()
+    for group in l_groups:
+      if ( group.GetName() in ("Group_1","Group_2","Group_3") ):
+        l_aux.append(group)
+    fondFiss = geompy.CreateGroup(shellFiss, geompy.ShapeType["EDGE"])
+    geompy.UnionList(fondFiss, l_aux )
+    geomPublish(initLog.always, shellFiss, "shellFiss", self.numeroCas)
+    geomPublishInFather(initLog.always, shellFiss, fondFiss, "fondFiss", self.numeroCas)
+
+    mailleur = self.mailleur2d3d()
+    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 0.025, 0.1, mailleur, self.numeroCas)
+
+    centre = None
+
+    return [shellFiss, centre, lgInfluence, coordsNoeudsFissure, fondFiss]
+
+  # ---------------------------------------------------------------------------
+  def setParamMaillageFissure(self):
+    texte = "setParamMaillageFissure pour '{}'".format(self.nomCas)
+    logging.info(texte)
+    self.maillageFissureParams = dict(nomRep           = os.curdir,
+                                      nomFicSain       = self.nomProbleme,
+                                      nomFicFissure    = self.nomProbleme + "_fissure",
+                                      nbsegRad         = 5,
+                                      nbsegCercle      = 8,
+                                      areteFaceFissure = 0.5)
+
+  # ---------------------------------------------------------------------------
+  def genereZoneDefaut(self, geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams):
+    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams, \
+                                                 self.numeroCas)
+    return elementsDefaut
+
+  # ---------------------------------------------------------------------------
+  def genereMaillageFissure(self, geometriesSaines, maillagesSains, \
+                                  shapesFissure, shapeFissureParams, \
+                                  maillageFissureParams, elementsDefaut, step, \
+                                  mailleur="MeshGems"):
+
+    texte = "genereMaillageFissure pour '{}'".format(self.nomCas)
+    logging.info(texte)
+
+    mailleur = self.mailleur2d3d()
+    maillageFissure = construitFissureGenerale(shapesFissure, shapeFissureParams, \
+                                               maillageFissureParams, elementsDefaut, \
+                                               mailleur, self.numeroCas)
+    return maillageFissure
+
+  # ---------------------------------------------------------------------------
+  def setReferencesMaillageFissure(self):
+    self.referencesMaillageFissure = dict( \
+                                          Entity_Quad_Quadrangle = 1630, \
+                                          Entity_Quad_Hexa = 3523, \
+                                          Entity_Node = 18874, \
+                                          Entity_Quad_Edge = 261, \
+                                          Entity_Quad_Triangle = 190, \
+                                          Entity_Quad_Tetra = 1322, \
+                                          Entity_Quad_Pyramid = 172, \
+                                          Entity_Quad_Penta = 64 \
+                                         )
index ad6d90b3c353fb9959d75d7ee1b970530da9a376..2b8b9d08b5ad162ab1de95dcaac6a220fa8c226e 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""problème de fissure non plane, débouchante non normale"""
 
+import logging
 import os
+
 from blocFissure import gmu
+from blocFissure.gmu import initLog
 from blocFissure.gmu.geomsmesh import geompy, smesh
+from blocFissure.gmu.geomsmesh import geomPublish
+from blocFissure.gmu.geomsmesh import geomPublishInFather
 
-import math
-import GEOM
-import SALOMEDS
-import SMESH
-#import StdMeshers
-#import GHS3DPlugin
-#import NETGENPlugin
-import logging
-
+from blocFissure.gmu.putName import putName
 from blocFissure.gmu.fissureGenerique import fissureGenerique
-
 from blocFissure.gmu.triedreBase import triedreBase
 from blocFissure.gmu.genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
 from blocFissure.gmu.creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
@@ -41,83 +38,100 @@ from blocFissure.gmu.construitFissureGenerale import construitFissureGenerale
 O, OX, OY, OZ = triedreBase()
 
 class vis_1(fissureGenerique):
-  """
-  problème de fissure non plane, débouchante non normale
-  """
+  """problème de fissure non plane, débouchante non normale"""
 
   nomProbleme = "vis_1"
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
+  referencesMaillageFissure = dict()
 
   # ---------------------------------------------------------------------------
   def genereMaillageSain(self, geometriesSaines, meshParams):
-    logging.info("genereMaillageSain %s", self.nomCas)
+    texte = "genereMaillageSain pour '{}'".format(self.nomCas)
+    logging.info(texte)
 
-    ([objetSain], status) = smesh.CreateMeshesFromMED(os.path.join(gmu.pathBloc, "materielCasTests/visSain.med"))
-    smesh.SetName(objetSain.GetMesh(), 'objetSain')
+    ([objetSain], _) = smesh.CreateMeshesFromMED(os.path.join(gmu.pathBloc, "materielCasTests", "visSain.med"))
+    putName(objetSain.GetMesh(), self.nomProbleme, i_pref=self.numeroCas)
 
     return [objetSain, True] # True : maillage hexa
 
   # ---------------------------------------------------------------------------
   def setParamShapeFissure(self):
-    """
-    paramètres de la fissure pour méthode construitFissureGenerale
+    """paramètres de la fissure pour méthode construitFissureGenerale
+
     lgInfluence : distance autour de la shape de fissure a remailler (A ajuster selon le maillage)
     rayonPipe   : le rayon du pile maillé en hexa autour du fond de fissure
     convexe     : optionnel True : la face est convexe (vue de l'exterieur) sert si on ne donne pas de point interne
     pointIn_x   : optionnel coordonnée x d'un point dans le solide sain (pour orienter la face)
     """
-    logging.info("setParamShapeFissure %s", self.nomCas)
+    texte = "setParamShapeFissure pour '{}'".format(self.nomCas)
+    logging.info(texte)
     self.shapeFissureParams = dict(lgInfluence = 0.6,
                                    rayonPipe   = 0.1)
 
   # ---------------------------------------------------------------------------
-  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams):
-    logging.info("genereShapeFissure %s", self.nomCas)
+  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams, \
+                                mailleur="MeshGems"):
+    """Importe la géométrie de la fissure et crée le groupe du fond de la fissure"""
+    texte = "genereShapeFissure pour '{}'".format(self.nomCas)
+    logging.info(texte)
 
     lgInfluence = shapeFissureParams['lgInfluence']
 
-    shellFiss = geompy.ImportFile(os.path.join(gmu.pathBloc, "materielCasTests/visFiss.brep"), "BREP")
+    shellFiss = geompy.ImportBREP(os.path.join(gmu.pathBloc, "materielCasTests", "visFiss.brep"))
     fondFiss = geompy.CreateGroup(shellFiss, geompy.ShapeType["EDGE"])
     geompy.UnionIDs(fondFiss, [6, 8])
-    geompy.addToStudy( shellFiss, 'shellFiss' )
-    geompy.addToStudyInFather( shellFiss, fondFiss, 'fondFiss' )
-
+    geomPublish(initLog.always, shellFiss, "shellFiss", self.numeroCas)
+    geomPublishInFather(initLog.always, shellFiss, fondFiss, "fondFiss", self.numeroCas)
 
-    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 0.1 ,0.2)
+    mailleur = self.mailleur2d3d()
+    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, 0.1 ,0.2, mailleur, self.numeroCas)
 
     centre = None
+
     return [shellFiss, centre, lgInfluence, coordsNoeudsFissure, fondFiss]
 
   # ---------------------------------------------------------------------------
   def setParamMaillageFissure(self):
-    self.maillageFissureParams = dict(nomRep           = '.',
-                                      nomFicSain       = self.nomCas,
-                                      nomFicFissure    = 'fissure_' + self.nomCas,
+    texte = "setParamMaillageFissure pour '{}'".format(self.nomCas)
+    logging.info(texte)
+    self.maillageFissureParams = dict(nomRep           = os.curdir,
+                                      nomFicSain       = self.nomProbleme,
+                                      nomFicFissure    = self.nomProbleme + "_fissure",
                                       nbsegRad         = 5,
                                       nbsegCercle      = 32,
                                       areteFaceFissure = 0.1)
 
   # ---------------------------------------------------------------------------
   def genereZoneDefaut(self, geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams):
-    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams)
+    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams, \
+                                                 self.numeroCas)
     return elementsDefaut
 
   # ---------------------------------------------------------------------------
-  def genereMaillageFissure(self, geometriesSaines, maillagesSains,
-                            shapesFissure, shapeFissureParams,
-                            maillageFissureParams, elementsDefaut, step):
-    maillageFissure = construitFissureGenerale(maillagesSains,
-                                               shapesFissure, shapeFissureParams,
-                                               maillageFissureParams, elementsDefaut, step)
+  def genereMaillageFissure(self, geometriesSaines, maillagesSains, \
+                                  shapesFissure, shapeFissureParams, \
+                                  maillageFissureParams, elementsDefaut, step, \
+                                  mailleur="MeshGems"):
+
+    texte = "genereMaillageFissure pour '{}'".format(self.nomCas)
+    logging.info(texte)
+
+    mailleur = self.mailleur2d3d()
+    maillageFissure = construitFissureGenerale(shapesFissure, shapeFissureParams, \
+                                               maillageFissureParams, elementsDefaut, \
+                                               mailleur, self.numeroCas)
     return maillageFissure
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Quad_Pyramid    = 1284,
-                                          Entity_Quad_Triangle   = 2336,
-                                          Entity_Quad_Edge       = 758,
-                                          Entity_Quad_Penta      = 984,
-                                          Entity_Quad_Hexa       = 6416,
-                                          Entity_Node            = 85673,
-                                          Entity_Quad_Tetra      = 35990,
-                                          Entity_Quad_Quadrangle = 4285)
-
+    self.referencesMaillageFissure = dict( \
+                                          Entity_Quad_Quadrangle = 11596, \
+                                          Entity_Quad_Hexa = 37008, \
+                                          Entity_Node = 250929, \
+                                          Entity_Quad_Edge = 30356, \
+                                          Entity_Quad_Triangle = 8088, \
+                                          Entity_Quad_Tetra = 49055, \
+                                          Entity_Quad_Pyramid = 3026, \
+                                          Entity_Quad_Penta = 4392 \
+                                         )
index 97e3d10ac90f8635982dd9e54b8636d3c6fd6ffe..b2f0397053c27a48f0bbdf190340f43db3404641 100644 (file)
@@ -1,4 +1,3 @@
-
 Exécution des exemples et cas tests :
 =====================================
 
@@ -7,7 +6,7 @@ Exécution des exemples et cas tests :
   ou dans une console Python avec l'environnement SALOME (salome shell)
 
   # les shapes et fichiers med nécessaires aux tests sont créés dans
-    ${SMESH_ROOT_DIR}/lib/python2.7/site-packages/salome/blocFissure/CasTests
+    ${SMESH_ROOT_DIR}/lib/python3.6/site-packages/salome/blocFissure/CasTests
 
   # les maillages fissurés sont écrits dans le répertoire d'exécution.
 
@@ -21,18 +20,14 @@ from blocFissure.materielCasTests import genereMateriel
 -------------------
 
 from blocFissure import exemple
+exemple(0).executeProbleme()
 
-# exécution des cas tests (long: 1/2 heure)
--------------------------------------------
+# exécution de tous les cas tests (long : 1/2 heure)
+----------------------------------------------------
 
 from blocFissure.CasTests import execution_Cas
 
 # bug et problèmes des cas tests
 --------------------------------
 
-Mauvaise détection d'arête vive avec GetInPlace : cas 7, 24
-
-Le maillage longitudinal du pipe peut creer des mailles de faible épaisseur
-à une des extrémités : le maillage en triangles des faces de fissure et de peau
-peut être moche au voisinage, de même que les tétraèdres qui s'appuient dessus.
-(2,3,16,26 ?)
+Mauvais maillage : cas 28
index 741586626e24d0e07970113b7a7b6f822c0ffec7..c3f5ac159573c2f186fcdf2abbe5ec96c8d5c6de 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 5f27945bab9f57d3043d194e95163db1d87cf69f..62dc76f30d50fe3c946a309fbe9685cbab3dff8c 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 49256cb1e84e661dff8b5bec6f0824a20fa4c9de..27adb1be70db033f7abe6523d7255d011125ea26 100644 (file)
@@ -43,7 +43,7 @@ master_doc = 'index'
 
 # General substitutions.
 project = 'Plug-in blocFissure'
-copyright = '2010-2020 EDF R&D'
+copyright = '2010-2024 EDF'
 
 # The default replacements for |version| and |release|, also used in various
 # other places throughout the built documents.
index 03e5ff06cfb1f0cef7f25442ac1cb20950e6efbc..96a8694f37397d783fcec8849bd0bffc982e51fc 100644 (file)
@@ -4,16 +4,16 @@
 FAQ\r
 #######################\r
 \r
- - Does Bloc Fissure works on a 2D mesh ?\r
+ - Does Bloc Fissure works on a 2D mesh?\r
 \r
 No, Bloc Fissure works only for 3D meshes. However, the user can extrude the 2D mesh to a 3D mesh, insert a crack and then extract a surface containing the crack.\r
 \r
- - Can I insert a crack in a symmetry plan ?\r
+ - Can I insert a crack in a symmetry plan?\r
 \r
 No, the user must insert the crack without using the symmetry plan passing through the crack lips.\r
 \r
- - I can't have Bloc Fissure working, it raises a pure python error, what can I do ?\r
+ - I can't have Bloc Fissure working, it raises a pure python error, what can I do?\r
 \r
-Bloc Fissure has some error messages for the most commonly encountered misuses. If the program raises a pure python error, it means that this error is rare or has not been encountered by the programmers yet.\r
+Bloc Fissure has some error messages for the most commonly encountered misuses. If the program raises a pure python error, it means that this error is rare or has not been encountered by the programmers yet. Contact the bugtracker.\r
 \r
-Still, either the case can't be treated using Bloc Fissure or the insertion procedure was not fully respected. In the first case, use Zcracks (soon available). In the second case, see the :ref:`tutorial <tutorials>`.
\ No newline at end of file
+Still, either the case can't be treated using Bloc Fissure or the insertion procedure was not fully respected. In the first case, use Zcracks. In the second case, see the :ref:`tutorial <tutorials>`.\r
index af0815088be0e04fd48ef7c2223d7109d100045e..4d633588e6c54e40f4e8928cd1584ff6b482c582 100644 (file)
@@ -6,23 +6,30 @@ With GUI
 To make the use of « Bloc Fissure » easier, a Graphical User Interface (GUI) was developed.\r
 Inputs are similar to those of :ref:`script mode <script>`. GUI is accessible in the SMESH extension *Add a crack in a mesh*\r
 \r
-.. figure:: images/BF_GUI_capture.png\r
-   :width: 700\r
+.. image:: images/BF_GUI_capture.png\r
+   :scale: 100\r
    :align: center\r
+   :alt: Window of the graphical interface\r
 \r
-   Windows of the graphical interface\r
+Window of the graphical interface\r
 \r
 +------------------------------------------------------------------------------------------------------------------+\r
 |       GUI parameters                                                                                             |\r
 +======================+===================================+=======================================================+\r
-| **maillageSain**     | *[string]*                        |  Relative address of the input structure 3D mesh      |\r
+| **Maillage sain**    | *[string]*                        |  Relative address of the input structure 3D mesh      |\r
 |                      | ex: mesh/maillage.med             |  in MED format (base is repertoire de travail)        |\r
 +----------------------+-----------------------------------+-------------------------------------------------------+\r
-| **FaceFissure**      | *[string]*                        |  Relative address of the input crack geometry         |\r
-|                      | ex: mesh/fissure.brep             |  in BREP format (base is repertoire de travail)       |\r
+| **Face fissure**     | *[string]*                        |  Relative address of the input crack geometry in      |\r
+|                      | ex: mesh/fissure.xao              |  BREP or XAO format (base is repertoire de travail)   |\r
 +----------------------+-----------------------------------+-------------------------------------------------------+\r
-| **index edges fond   | *[list of integers]*              |  List of edges number which define the crack front    |\r
-| fissure**            | ex: [1,2]                         |                                                       |\r
+| **Arêtes fond        | *[list of strings]*               |  Definition of the crack front:                       |\r
+| fissure**            | ex: ["F_1", "F_2"]                |  If XAO: list of the names of the edge group(s)       |\r
++----------------------+-----------------------------------+-------------------------------------------------------+\r
+|                      | *[list of integers]*              |  If BREP (or XAO): list of edges number in GEOM       |\r
+|                      | ex: [1,2]                         |                                                       |\r
++----------------------+-----------------------------------+-------------------------------------------------------+\r
+| **Distance           | *[float]*                         |  Length of influence - distance that defines the      |\r
+| d'influence**        | ex: 20.0000                       |  size of the extracted Box around the crack           |\r
 +----------------------+-----------------------------------+-------------------------------------------------------+\r
 | **min**              | *[float]*                         |  Float defining the minimum size of elements          |\r
 |                      | ex: 1.00000                       |  to mesh the crack                                    |\r
@@ -30,40 +37,40 @@ Inputs are similar to those of :ref:`script mode <script>`. GUI is accessible in
 | **max**              | *[float]*                         |  Float defining the maximum size of elements          |\r
 |                      | ex: 10.0000                       |  to mesh the crack                                    |\r
 +----------------------+-----------------------------------+-------------------------------------------------------+\r
-| **distance           | *[float]*                         |  Length of influence - distance that defines the      |\r
-| influence**          | ex: 20.0000                       |  size of the extracted Box around the crack           |\r
-+----------------------+-----------------------------------+-------------------------------------------------------+\r
-| **rayon pipe**       | *[float]*                         |  Radius of the tore around the front                  |\r
+| **Rayon pipe**       | *[float]*                         |  Radius of the tore around the front                  |\r
 |                      | ex: 5.00000                       |                                                       |\r
 +----------------------+-----------------------------------+-------------------------------------------------------+\r
-| **longueur mailles** | *[float]*                         |  Length of the segments of the tore along crack front |\r
+| **Longueur mailles** | *[float]*                         |  Length of the segments of the tore along crack front |\r
 |                      | ex: 5.00000                       |                                                       |\r
 +----------------------+-----------------------------------+-------------------------------------------------------+\r
-|  **couronnes**       | *[integer]*                       |  Number of radial segment of the tore                 |\r
+| **Couronnes**        | *[integer]*                       |  Number of radial segment of the tore                 |\r
 |                      | ex: 5                             |                                                       |\r
 +----------------------+-----------------------------------+-------------------------------------------------------+\r
-| **secteurs**         | *[integer]*                       |  Number of sectors of the tore                        |\r
+| **Secteurs**         | *[integer]*                       |  Number of sectors of the tore                        |\r
 |                      | ex: 16                            |                                                       |\r
 +----------------------+-----------------------------------+-------------------------------------------------------+\r
-| **arete face         | *[float]*                         |  Mesh size of elements for the Box remeshing          |\r
+| **Triangles face     | *[float]*                         |  Mesh size of elements for the Box remeshing          |\r
 | fissure**            | ex: 5.0000                        |                                                       |\r
 +----------------------+-----------------------------------+-------------------------------------------------------+\r
-| **repertoire de      | *[string]*                        |  Absolute address of the directory where files are    |\r
+| **pertoire de      | *[string]*                        |  Absolute address of the directory where files are    |\r
 | travail**            | ex: /home/A123456                 |  saved                                                |\r
 +----------------------+-----------------------------------+-------------------------------------------------------+\r
-| **nom résultat**     | *[string]*                        |  Name of the resulting mesh                           |\r
+| **Nom du résultat**  | *[string]*                        |  Name of the resulting mesh                           |\r
 |                      | ex: maillage_fissure              |                                                       |\r
 +----------------------+-----------------------------------+-------------------------------------------------------+\r
-| **mode**             | *[choice]*                        |  Verbose mode for Salome messages                     |\r
+| **Mode**             | *[choice]*                        |  Verbose mode for Salome messages                     |\r
 |                      | ex: verbose                       |                                                       |\r
 +----------------------+-----------------------------------+-------------------------------------------------------+\r
 \r
-.. figure:: images/parametres_GUI.png\r
+.. image:: images/parametres_GUI.png\r
    :width: 350\r
    :align: center\r
+   :alt: Tore parameters\r
+\r
+Tore parameters\r
 \r
-   Tore parameters\r
 \r
+- **Exemple**: fills the panels with a test-case\r
 \r
 - **Reset**: clears all the parameters\r
 \r
@@ -73,7 +80,7 @@ Inputs are similar to those of :ref:`script mode <script>`. GUI is accessible in
 \r
 - **Sauver**: save a .dic file with the active parameters\r
 \r
-- **Cancel**: exit GUI\r
+- **Fermer**: exit GUI\r
 \r
-- **Sauver**: Launch calculation\r
+- **OK**: Launch calculation\r
 \r
diff --git a/src/Tools/blocFissure/doc/images/01_CubeAngle_2.png b/src/Tools/blocFissure/doc/images/01_CubeAngle_2.png
deleted file mode 100644 (file)
index aa4b00c..0000000
Binary files a/src/Tools/blocFissure/doc/images/01_CubeAngle_2.png and /dev/null differ
diff --git a/src/Tools/blocFissure/doc/images/01_CubeAngle_a.png b/src/Tools/blocFissure/doc/images/01_CubeAngle_a.png
new file mode 100644 (file)
index 0000000..aa4b00c
Binary files /dev/null and b/src/Tools/blocFissure/doc/images/01_CubeAngle_a.png differ
diff --git a/src/Tools/blocFissure/doc/images/02_CubeAngle2.png b/src/Tools/blocFissure/doc/images/02_CubeAngle2.png
deleted file mode 100644 (file)
index 3a01748..0000000
Binary files a/src/Tools/blocFissure/doc/images/02_CubeAngle2.png and /dev/null differ
diff --git a/src/Tools/blocFissure/doc/images/02_CubeAngle2_2.png b/src/Tools/blocFissure/doc/images/02_CubeAngle2_2.png
deleted file mode 100644 (file)
index d590720..0000000
Binary files a/src/Tools/blocFissure/doc/images/02_CubeAngle2_2.png and /dev/null differ
diff --git a/src/Tools/blocFissure/doc/images/02_CubeAngle_2.png b/src/Tools/blocFissure/doc/images/02_CubeAngle_2.png
new file mode 100644 (file)
index 0000000..3a01748
Binary files /dev/null and b/src/Tools/blocFissure/doc/images/02_CubeAngle_2.png differ
diff --git a/src/Tools/blocFissure/doc/images/02_CubeAngle_2_a.png b/src/Tools/blocFissure/doc/images/02_CubeAngle_2_a.png
new file mode 100644 (file)
index 0000000..d590720
Binary files /dev/null and b/src/Tools/blocFissure/doc/images/02_CubeAngle_2_a.png differ
diff --git a/src/Tools/blocFissure/doc/images/03_cylindre_2.png b/src/Tools/blocFissure/doc/images/03_cylindre_2.png
deleted file mode 100644 (file)
index 106d201..0000000
Binary files a/src/Tools/blocFissure/doc/images/03_cylindre_2.png and /dev/null differ
diff --git a/src/Tools/blocFissure/doc/images/03_cylindre_a.png b/src/Tools/blocFissure/doc/images/03_cylindre_a.png
new file mode 100644 (file)
index 0000000..106d201
Binary files /dev/null and b/src/Tools/blocFissure/doc/images/03_cylindre_a.png differ
diff --git a/src/Tools/blocFissure/doc/images/04_cylindre2.png b/src/Tools/blocFissure/doc/images/04_cylindre2.png
deleted file mode 100644 (file)
index 8f06c17..0000000
Binary files a/src/Tools/blocFissure/doc/images/04_cylindre2.png and /dev/null differ
diff --git a/src/Tools/blocFissure/doc/images/04_cylindre2_2.png b/src/Tools/blocFissure/doc/images/04_cylindre2_2.png
deleted file mode 100644 (file)
index a065a41..0000000
Binary files a/src/Tools/blocFissure/doc/images/04_cylindre2_2.png and /dev/null differ
diff --git a/src/Tools/blocFissure/doc/images/04_cylindre_2.png b/src/Tools/blocFissure/doc/images/04_cylindre_2.png
new file mode 100644 (file)
index 0000000..8f06c17
Binary files /dev/null and b/src/Tools/blocFissure/doc/images/04_cylindre_2.png differ
diff --git a/src/Tools/blocFissure/doc/images/04_cylindre_2_a.png b/src/Tools/blocFissure/doc/images/04_cylindre_2_a.png
new file mode 100644 (file)
index 0000000..a065a41
Binary files /dev/null and b/src/Tools/blocFissure/doc/images/04_cylindre_2_a.png differ
diff --git a/src/Tools/blocFissure/doc/images/05_disque_2.png b/src/Tools/blocFissure/doc/images/05_disque_2.png
deleted file mode 100644 (file)
index deda214..0000000
Binary files a/src/Tools/blocFissure/doc/images/05_disque_2.png and /dev/null differ
diff --git a/src/Tools/blocFissure/doc/images/05_disque_a.png b/src/Tools/blocFissure/doc/images/05_disque_a.png
new file mode 100644 (file)
index 0000000..deda214
Binary files /dev/null and b/src/Tools/blocFissure/doc/images/05_disque_a.png differ
diff --git a/src/Tools/blocFissure/doc/images/06_ellipse1.png b/src/Tools/blocFissure/doc/images/06_ellipse1.png
deleted file mode 100644 (file)
index 9ad5911..0000000
Binary files a/src/Tools/blocFissure/doc/images/06_ellipse1.png and /dev/null differ
diff --git a/src/Tools/blocFissure/doc/images/06_ellipse1_2.png b/src/Tools/blocFissure/doc/images/06_ellipse1_2.png
deleted file mode 100644 (file)
index 349ff36..0000000
Binary files a/src/Tools/blocFissure/doc/images/06_ellipse1_2.png and /dev/null differ
diff --git a/src/Tools/blocFissure/doc/images/06_ellipse_1.png b/src/Tools/blocFissure/doc/images/06_ellipse_1.png
new file mode 100644 (file)
index 0000000..9ad5911
Binary files /dev/null and b/src/Tools/blocFissure/doc/images/06_ellipse_1.png differ
diff --git a/src/Tools/blocFissure/doc/images/06_ellipse_1_a.png b/src/Tools/blocFissure/doc/images/06_ellipse_1_a.png
new file mode 100644 (file)
index 0000000..349ff36
Binary files /dev/null and b/src/Tools/blocFissure/doc/images/06_ellipse_1_a.png differ
diff --git a/src/Tools/blocFissure/doc/images/07_ellipse2.png b/src/Tools/blocFissure/doc/images/07_ellipse2.png
deleted file mode 100644 (file)
index 354b93d..0000000
Binary files a/src/Tools/blocFissure/doc/images/07_ellipse2.png and /dev/null differ
diff --git a/src/Tools/blocFissure/doc/images/07_ellipse2_2.png b/src/Tools/blocFissure/doc/images/07_ellipse2_2.png
deleted file mode 100644 (file)
index 0f306a7..0000000
Binary files a/src/Tools/blocFissure/doc/images/07_ellipse2_2.png and /dev/null differ
diff --git a/src/Tools/blocFissure/doc/images/07_ellipse_2.png b/src/Tools/blocFissure/doc/images/07_ellipse_2.png
new file mode 100644 (file)
index 0000000..354b93d
Binary files /dev/null and b/src/Tools/blocFissure/doc/images/07_ellipse_2.png differ
diff --git a/src/Tools/blocFissure/doc/images/07_ellipse_2_a.png b/src/Tools/blocFissure/doc/images/07_ellipse_2_a.png
new file mode 100644 (file)
index 0000000..0f306a7
Binary files /dev/null and b/src/Tools/blocFissure/doc/images/07_ellipse_2_a.png differ
diff --git a/src/Tools/blocFissure/doc/images/08_eprouvetteCourbe_2.png b/src/Tools/blocFissure/doc/images/08_eprouvetteCourbe_2.png
deleted file mode 100644 (file)
index 53e826f..0000000
Binary files a/src/Tools/blocFissure/doc/images/08_eprouvetteCourbe_2.png and /dev/null differ
diff --git a/src/Tools/blocFissure/doc/images/08_eprouvetteCourbe_a.png b/src/Tools/blocFissure/doc/images/08_eprouvetteCourbe_a.png
new file mode 100644 (file)
index 0000000..53e826f
Binary files /dev/null and b/src/Tools/blocFissure/doc/images/08_eprouvetteCourbe_a.png differ
diff --git a/src/Tools/blocFissure/doc/images/09_eprouvetteDroite_2.png b/src/Tools/blocFissure/doc/images/09_eprouvetteDroite_2.png
deleted file mode 100644 (file)
index 9c5c222..0000000
Binary files a/src/Tools/blocFissure/doc/images/09_eprouvetteDroite_2.png and /dev/null differ
diff --git a/src/Tools/blocFissure/doc/images/09_eprouvetteDroite_a.png b/src/Tools/blocFissure/doc/images/09_eprouvetteDroite_a.png
new file mode 100644 (file)
index 0000000..9c5c222
Binary files /dev/null and b/src/Tools/blocFissure/doc/images/09_eprouvetteDroite_a.png differ
diff --git a/src/Tools/blocFissure/doc/images/10_eprouvetteDroite2.png b/src/Tools/blocFissure/doc/images/10_eprouvetteDroite2.png
deleted file mode 100644 (file)
index 3801db3..0000000
Binary files a/src/Tools/blocFissure/doc/images/10_eprouvetteDroite2.png and /dev/null differ
diff --git a/src/Tools/blocFissure/doc/images/10_eprouvetteDroite2_2.png b/src/Tools/blocFissure/doc/images/10_eprouvetteDroite2_2.png
deleted file mode 100644 (file)
index 562865e..0000000
Binary files a/src/Tools/blocFissure/doc/images/10_eprouvetteDroite2_2.png and /dev/null differ
diff --git a/src/Tools/blocFissure/doc/images/10_eprouvetteDroite_2.png b/src/Tools/blocFissure/doc/images/10_eprouvetteDroite_2.png
new file mode 100644 (file)
index 0000000..3801db3
Binary files /dev/null and b/src/Tools/blocFissure/doc/images/10_eprouvetteDroite_2.png differ
diff --git a/src/Tools/blocFissure/doc/images/10_eprouvetteDroite_2_a.png b/src/Tools/blocFissure/doc/images/10_eprouvetteDroite_2_a.png
new file mode 100644 (file)
index 0000000..562865e
Binary files /dev/null and b/src/Tools/blocFissure/doc/images/10_eprouvetteDroite_2_a.png differ
diff --git a/src/Tools/blocFissure/doc/images/12_faceGauche2.png b/src/Tools/blocFissure/doc/images/12_faceGauche2.png
deleted file mode 100644 (file)
index ff0163a..0000000
Binary files a/src/Tools/blocFissure/doc/images/12_faceGauche2.png and /dev/null differ
diff --git a/src/Tools/blocFissure/doc/images/12_faceGauche2_2.png b/src/Tools/blocFissure/doc/images/12_faceGauche2_2.png
deleted file mode 100644 (file)
index 2e4cbe5..0000000
Binary files a/src/Tools/blocFissure/doc/images/12_faceGauche2_2.png and /dev/null differ
diff --git a/src/Tools/blocFissure/doc/images/12_faceGauche_2.png b/src/Tools/blocFissure/doc/images/12_faceGauche_2.png
new file mode 100644 (file)
index 0000000..ff0163a
Binary files /dev/null and b/src/Tools/blocFissure/doc/images/12_faceGauche_2.png differ
diff --git a/src/Tools/blocFissure/doc/images/12_faceGauche_2_a.png b/src/Tools/blocFissure/doc/images/12_faceGauche_2_a.png
new file mode 100644 (file)
index 0000000..2e4cbe5
Binary files /dev/null and b/src/Tools/blocFissure/doc/images/12_faceGauche_2_a.png differ
index d234f6c117ede45a0c18059552dfe61477da815d..c1fb0e072f1cd7d199becc210f69ff0a423ca1b3 100644 (file)
Binary files a/src/Tools/blocFissure/doc/images/BF_GUI_capture.png and b/src/Tools/blocFissure/doc/images/BF_GUI_capture.png differ
index 6b9111be5fcad81f4bf910b8262eec9abfb11142..b1d5ddf0f88c0764ac09f274dda40adf6e35f066 100644 (file)
@@ -9,14 +9,14 @@ Introduction
    :scale: 50\r
    :align: center\r
 \r
-« Bloc Fissure » is a SMESH extension used to insert cracks in existing meshes. It has the advantage of meshing the crack front and the surrounding elements with a tore containing ruled elements. The rest of the crack contains a free mesh. The tore is made of prism elements (extruded triangles connected to the crack front) and hexahedrons elsewhere. The main interests of such type of mesh are:\r
+« Bloc Fissure » is an extension of SMESH used to insert cracks in an existing mesh. It has the advantage of meshing the front of the crack and the surrounding elements with a torus containing ruled elements. The rest of the crack contains a free mesh. The torus consists of prismatic elements (extruded triangles connected to the crack front) and hexahedrons elsewhere. The main interests of this type of mesh are as follows :\r
 \r
 - Having sets of Gauss points in plans perpendicular to the crack front in order to calculate stress field without any interpolation, which would be the case on free mesh. It avoids strong oscillations along the crack front on the energy release rate and stress intensity factors calculated by `extrapolation <http://code-aster.org/doc/default/fr/man_r/r7/r7.02.08.pdf>`_ or `G-theta method <http://code-aster.org/doc/default/fr/man_r/r7/r7.02.01.pdf>`_.\r
 \r
-- Decrease the element number. In fracture mechanics, a fine mesh is necessary radially to the crack front and more rarely along the front axis. Yet hexahedrons and prisms elements can have geometrical aspect ratios up to 20 without major matrix conditioning problems. On the contrary, tetrahedrons of free meshes are generally limited to aspect ratios around 3. The use of very elongated elements is then no longer a limitation and number of elements can be significantly decreased.\r
+- Decrease in the number of elements. In fracture mechanics, a fine mesh is required radially at the fissure front and more rarely in the axis of the front. Hexhedral and prismatic elements can have geometric aspect ratios of up to 20 without major matrix conditioning problems. On the other hand, the tetrahedrons of free meshes are generally limited to aspect ratios of about 3. The use of very elongated elements is then no longer a limitation and the number of elements can be considerably reduced.\r
 \r
-« Bloc Fissure » is not applicable every time. It is highly recommended to read the section on :ref:`general principles <general_principles>` to see how « Bloc Fissure » works. This section also gives the functional scope and the :ref:`limitations <recommendations>` of the tool. Finally, this part deals with cautions that the user must take using « Bloc Fissure ». The user can also refers himself to the :ref:`tutorial <tutorials>` to get some advice on how to make « Bloc Fissure » works.\r
+« Bloc Fissure » is not always usable. It is highly recommended to read the section on :ref:`general principles <general_principles>` to see how « Bloc Fissure » works. This section also gives the functional scope and the :ref:`limitations <recommendations>` of the tool. Finally, this part deals with cautions that the user must take using « Bloc Fissure ». The user can also refers himself to the :ref:`tutorial <tutorials>` to get some advice on how to make « Bloc Fissure » works.\r
 \r
-If « Bloc Fissure » can’t be used on a case, the user may switch to the other FEM insertion tool Zcracks in SALOME (soon available). It’s more robust and has less limitations but the result is a cracked free mesh with tetrahedral elements. Another possibility is the `X-FEM method <http://www.code-aster.org/doc/v11/fr/man_u/u2/u2.05.02.pdf>`_ method in SALOME_MECA.\r
+If « Bloc Fissure » cannot be used on a case, the user can switch to the other Zcracks insertion tool in SALOME. It is more robust and has fewer limitations, but the result is a free mesh of the crack with tetrahedral elements. Another possibility is the `X-FEM method <http://www.code-aster.org/doc/v11/fr/man_u/u2/u2.05.02.pdf>`_ method in SALOME_MECA.\r
 \r
 \r
index 15d369bc44e548339391122f314f17b0abb0ad76..386e418429cb8bc7d1f0af8ea8b9b7e4eb401661 100644 (file)
@@ -6,11 +6,12 @@ For bended pipes
 Cracked bended pipes being a common encountered case, a specific module was developed with a Graphic User Interface (GUI). GUI is accessible in the SMESH extension *Meshed Pipe with a crack*. Compared to the classical use of « Bloc Fissure », this extension also generate the pipe mesh and the crack geometry from geometrical information.\r
 \r
 \r
-.. figure:: images/Capture_GUI_pipes_2.png\r
+.. image:: images/Capture_GUI_pipes_2.png\r
    :width: 800\r
    :align: center\r
+   :alt: Print screen of GUI\r
 \r
-   Print screen of GUI of the extension *Meshed Pipe with a crack*\r
+Print screen of GUI of the extension *Meshed Pipe with a crack*\r
 \r
 The GUI is a window with mandatory and optional parameters. Optional parameters have to be activated by ticking the corresponding check box. Parameters are explained on the following figures and table. Angles are in degrees and lengths dimensions are all the same and shall then be consistent with each other’s.\r
 \r
@@ -100,5 +101,16 @@ The GUI is a window with mandatory and optional parameters. Optional parameters
 \r
 - **Sauver**: save a .dic file with the active parameters\r
 \r
+Example\r
+--------------------\r
+\r
+.. image:: images/coude_0.png\r
+  :align: center\r
+  :alt: Crak in a bended pipe\r
+  :scale: 100\r
+\r
+This example can be computed using this file for the data:\r
+\r
+  * :download:`data for a bended puipe <../ihm/dialogFissureCoude.dic>`\r
 \r
 \r
index 9ccce30f4f8b7b2f12c231c6a9cff59699398756..af6c7a646f7322914973fc72ac438d8136a8c36d 100644 (file)
@@ -4,19 +4,19 @@
 General principles\r
 ###################\r
 \r
-« Bloc Fissure » is based on GEOM module geometrical Boolean operations. The initial structure being a mesh, a conversion from mesh to geometry becomes necessary. This operation is called extraction and reconstruction because it is only applied to a small part of the mesh, which is around the crack. The extracted mesh is called the « Box » and only external faces of this mesh are kept and converted into several geometrical surfaces. This operation implies some limitations on the input mesh. When all the Booleans operations are done, the geometry that contains the crack is meshed again with a ruled mesh in the tore and a free mesh elsewhere.\r
+« Bloc Fissure » is based on GEOM module geometrical Boolean operations. The initial structure being a mesh, a conversion from mesh to geometry becomes necessary. This operation is called extraction and reconstruction because it is only applied to a small part of the mesh, which is around the crack. The extracted mesh is called the « Box » and only external faces of this mesh are kept and converted into several geometrical surfaces. This operation implies some limitations on the input mesh. When all the Boolean operations are done, the geometry that contains the crack is meshed again with a ruled mesh in the torus and a free mesh elsewhere.\r
 \r
 In order to illustrate « Bloc Fissure » principle, the simple case of a crack insertion in a parallelepipedic specimen is detailed step by step:\r
 \r
 1. The first step consists in loading the structure mesh (a) as well as the crack surface geometry (b).\r
 \r
-2. The crack is then meshed (c). A length criterion defines the size of the extracted « Box ». This length is called the length of influence. All elements having a node within this zone is included in the « Box ». A second operation adds elements in the Box in order to have continuous faces (d).\r
+2. The crack is then meshed (c). A length criterion defines the size of the extracted « Box ». This length is called the length of influence. Every element of the structure mesh having a node within this zone is included in the « Box ». A second operation adds those elements in the Box in order to have continuous faces (d).\r
 \r
-3. A geometrical Box is reconstructed from the extracted Box mesh. The reconstruction is limited to faces which intersect the crack (e). A tore is created following the crack front (f).\r
+3. A geometrical Box is reconstructed from the extracted Box mesh. The reconstruction is limited to faces which intersect the crack (e). A torus is created following the crack front (f).\r
 \r
-4. The geometrical Box is then cut by the tore and the crack (g). Several plans are created in order to partition the box and the tore into radiuses for the future mesh (h).\r
+4. The geometrical Box is then cut by the torus and the crack (g). Several plans are created in order to partition the box and the torus into radiuses for the future mesh (h).\r
 \r
-5. The Box, the crack and the tore are meshed on their external surface (i) and then filled with volumetric elements (j). Crack nodes are doubled to « open » crack lips.\r
+5. The Box, the crack and the torus are meshed on their external surface (i) and then filled with volumetric elements (j). Crack nodes are doubled to « open » crack lips.\r
 \r
 6. Finally the cracked box mesh is reinserted in the initial mesh ensuring the connectivity (k).\r
 \r
@@ -63,8 +63,9 @@ The length of influence is important. It defines the size of the extracted Box.
 .. image:: images/longueur_influence.png\r
    :width: 600\r
    :align: center\r
+   :alt: The length of influence\r
 \r
-All elements having a node at a smaller distance to the crack than the length of influence is selected. Then a filling algorithm fulfill the Box with elements to get a Box. The Box is not limited to rectangular shapes. See the section on :ref:`test cases <test_cases>` to see examples.\r
+Every element having a node at a smaller distance to the crack than the length of influence is selected. Then a filling algorithm fulfill the Box with elements to get a Box. The Box is not limited to rectangular shapes. See the section on :ref:`test cases <test_cases>` to see examples.\r
 \r
 .. _recommendations:\r
 \r
@@ -86,10 +87,11 @@ Surface crack geometry shall exceed from the structure mesh. Boolean operation c
 \r
 4) **Crack front edges must exceed from the structure:**\r
 \r
-For similar reasons, crack front edges must exceed from the structure mesh. The user shall be really careful when fusing crack front edges within the structure with edges outside of the structure because junction mustn’t be on the box external face. For example the following figure shows the bad and the good practice. In grew a 2D view of a structure to cut and in red the crack surface. Line 1 is the edge declared as the crack front. On the left case, Line 1 stops on the box boundary. Even if Line 1 is extended with Line 2 and 5, « Bloc Fissure» will fail. The good practice is to extend the Line 1 with the same shape. See how to extend the front edges in the :ref:`tutorials section <tutorials>`\r
+For similar reasons, crack front edges must exceed from the structure mesh. The user shall be really careful when fusing crack front edges within the structure with edges outside of the structure because junction mustn’t be on the box external face. For example the following figure shows the bad and the good practice. In grey a 2D view of a structure to cut and in red the crack surface. Line 1 is the edge declared as the crack front. On the left case, Line 1 stops on the box boundary. Even if Line 1 is extended with Line 2 and 5, « Bloc Fissure» will fail. The good practice is to extend the Line 1 with the same shape. See how to extend the front edges in the :ref:`tutorials section <tutorials>`\r
 \r
 .. image:: images/schema_lignes1.png\r
    :scale: 80\r
+   :alt: Crack front edges\r
 \r
 5) **Loss of element groups:**\r
 \r
index 0808c48bb3d11ffa9d3c9772a9bd6c3bf6ae4fce..d8804c1c3ccc87cff14423b1489245c9ebccb1fe 100644 (file)
@@ -15,10 +15,12 @@ The main command of « Bloc Fissure » is the casStandard function. It has a sin
 | **maillageSain**     | *[string]*                        |  Absolute address of the input structure 3D mesh      |\r
 |                      |                                   |  in MED format                                        |\r
 +----------------------+-----------------------------------+-------------------------------------------------------+\r
-| **BrepFaceFissure**  | *[string]*                        |  Absolute address of the input crack geometry         |\r
-|                      |                                   |  in BREP format                                       |\r
+| **CAOFaceFissure**   | *[string]*                        |  Absolute address of the input crack geometry         |\r
+|                      |                                   |  in XAO or BREP format                                |\r
 +----------------------+-----------------------------------+-------------------------------------------------------+\r
-| **edgeFissIds**      | *[list of integers]*              |  List of edges number which define the crack front    |\r
+| **edgeFiss**         | *[list of strings]*               |  List of edges group which define the crack front     |\r
++----------------------+-----------------------------------+-------------------------------------------------------+\r
+|                      | *[list of integers]*              |  List of edges number which define the crack front    |\r
 +----------------------+-----------------------------------+-------------------------------------------------------+\r
 | **meshBrep**         | *[list of 2 floats]*              |  List of two floats defining respectively minimum and |\r
 |                      |                                   |  maximum size of elements of the crack mesh           |\r
@@ -47,29 +49,30 @@ Geometrical parameters of the tore are illustrated :
 .. image:: images/parametres.png\r
    :width: 350\r
    :align: center\r
+   :alt: Geometrical parameters of the tore\r
 \r
-Different levels of verbose are available. Use one of this 4 optional functions to set verbose type:\r
+Different levels of verbose are available. The prints are located in the file ''LOGFILE''. Use one of this 4 optional functions to set verbose type:\r
 \r
-- / **setDebug()**\r
+- / **setDebug(LOGFILE)**\r
 \r
-- / **setVerbose()**\r
+- / **setVerbose(LOGFILE)**\r
 \r
-- / **setRelease()**\r
+- / **setRelease(LOGFILE)**\r
 \r
-- / **setUnitTests()**\r
+- / **setUnitTests(LOGFILE)**\r
 \r
 **example to run in salome session**::\r
 \r
   from blocFissure import gmu\r
   from blocFissure.gmu import initLog\r
-  initLog.setDebug()\r
+  initLog.setDebug("/tmp/blocFissure.log")\r
 \r
   from blocFissure.casStandard import casStandard\r
 \r
   dicoParams = dict(nomCas            = 'cubeFiss',\r
                     maillageSain      = "/home/A123456/BF/cube.med",\r
-                    brepFaceFissure   = "/home/A123456/BF/fiss.brep",\r
-                    edgeFissIds       = [4],\r
+                    CAOFaceFissure    = "/home/A123456/BF/fiss.xao",\r
+                    edgeFiss          = ["Fond"],\r
                     lgInfluence       = 20.,\r
                     meshBrep          = (5.,10.),\r
                     rayonPipe         = 5.,\r
@@ -80,6 +83,8 @@ Different levels of verbose are available. Use one of this 4 optional functions
 \r
   execInstance = casStandard(dicoParams)\r
 \r
+  newmesh = execInstance.maillageFissure\r
+\r
 \r
 \r
 \r
index 47be3dc5e61833c9cd7f27591b63eda20429fd5d..45eb7809da58d2ee44153ebd4e7983f76215619b 100644 (file)
 Test cases\r
 #######################\r
 \r
-A base of 25 test cases ensures the proper functioning of « Bloc Fissure ». 12 cases are dedicated to :ref:`cracked bended pipes <pipeTC>` and the others 13 are for other :ref:`generic geometries <genericTC>`. They are shown here in order to illustrate cases on which « Bloc Fissure » works.\r
+A base of 28 test cases guarantees the correct functioning of « Bloc Fissure ». 12 cases are dedicated to :ref:`cracked bended pipes <pipeTC>` and the others 16 are for other :ref:`generic geometries <genericTC>`. They are shown here in order to illustrate cases on which « Bloc Fissure » works.\r
 \r
 .. _genericTC:\r
 \r
 Generic cases\r
 ===============================\r
 \r
-All 13 cases are shown Table 2. Two views show the whole cracked structure and a zoom onto the crack with its tore.\r
-\r
-+-------------------------------------------+----------------------------------------------+\r
-| CubeAngle                                                                                |\r
-+-------------------------------------------+----------------------------------------------+\r
-|.. image:: images/01_CubeAngle.png         | .. image:: images/01_CubeAngle_2.png         |\r
-|   :height: 300                            |    :height: 300                              |\r
-|   :align: center                          |    :align: center                            |\r
-+-------------------------------------------+----------------------------------------------+\r
-| CubeAngle2                                                                               |\r
-+-------------------------------------------+----------------------------------------------+\r
-|.. image:: images/02_CubeAngle2.png        | .. image:: images/02_CubeAngle2_2.png        |\r
-|   :height: 300                            |    :height: 300                              |\r
-|   :align: center                          |    :align: center                            |\r
-+-------------------------------------------+----------------------------------------------+\r
-| cylindre                                                                                 |\r
-+-------------------------------------------+----------------------------------------------+\r
-|.. image:: images/03_cylindre.png          | .. image:: images/03_cylindre_2.png          |\r
-|   :height: 300                            |    :height: 300                              |\r
-|   :align: center                          |    :align: center                            |\r
-+-------------------------------------------+----------------------------------------------+\r
-| cylindre2                                                                                |\r
-+-------------------------------------------+----------------------------------------------+\r
-|.. image:: images/04_cylindre2.png         | .. image:: images/04_cylindre2_2.png         |\r
-|   :height: 300                            |    :height: 300                              |\r
-|   :align: center                          |    :align: center                            |\r
-+-------------------------------------------+----------------------------------------------+\r
-| disque                                                                                   |\r
-+-------------------------------------------+----------------------------------------------+\r
-|.. image:: images/05_disque.png            | .. image:: images/05_disque_2.png            |\r
-|   :height: 300                            |    :height: 300                              |\r
-|   :align: center                          |    :align: center                            |\r
-+-------------------------------------------+----------------------------------------------+\r
-| ellipse1                                                                                 |\r
-+-------------------------------------------+----------------------------------------------+\r
-|.. image:: images/06_ellipse1.png          | .. image:: images/06_ellipse1_2.png          |\r
-|   :height: 300                            |    :height: 300                              |\r
-|   :align: center                          |    :align: center                            |\r
-+-------------------------------------------+----------------------------------------------+\r
-| ellipse2 (tilted crack)                                                                  |\r
-+-------------------------------------------+----------------------------------------------+\r
-|.. image:: images/07_ellipse2.png          | .. image:: images/07_ellipse2_2.png          |\r
-|   :height: 300                            |    :height: 300                              |\r
-|   :align: center                          |    :align: center                            |\r
-+-------------------------------------------+----------------------------------------------+\r
-| eprouvetteCourbe                                                                         |\r
-+-------------------------------------------+----------------------------------------------+\r
-|.. image:: images/08_eprouvetteCourbe.png  | .. image:: images/08_eprouvetteCourbe_2.png  |\r
-|   :height: 300                            |    :height: 300                              |\r
-|   :align: center                          |    :align: center                            |\r
-+-------------------------------------------+----------------------------------------------+\r
-| eprouvetteDroite                                                                         |\r
-+-------------------------------------------+----------------------------------------------+\r
-|.. image:: images/09_eprouvetteDroite.png  | .. image:: images/09_eprouvetteDroite_2.png  |\r
-|   :height: 300                            |    :height: 300                              |\r
-|   :align: center                          |    :align: center                            |\r
-+-------------------------------------------+----------------------------------------------+\r
-| eprouvetteDroite2                                                                        |\r
-+-------------------------------------------+----------------------------------------------+\r
-|.. image:: images/10_eprouvetteDroite2.png | .. image:: images/10_eprouvetteDroite2_2.png |\r
-|   :height: 300                            |    :height: 300                              |\r
-|   :align: center                          |    :align: center                            |\r
-+-------------------------------------------+----------------------------------------------+\r
-| faceGauche                                                                               |\r
-+-------------------------------------------+----------------------------------------------+\r
-|.. image:: images/11_faceGauche.png        | .. image:: images/11_faceGauche_2.png        |\r
-|   :height: 300                            |    :height: 300                              |\r
-|   :align: center                          |    :align: center                            |\r
-+-------------------------------------------+----------------------------------------------+\r
-| faceGauche2                                                                              |\r
-+-------------------------------------------+----------------------------------------------+\r
-|.. image:: images/12_faceGauche2.png       | .. image:: images/12_faceGauche2_2.png       |\r
-|   :height: 300                            |    :height: 300                              |\r
-|   :align: center                          |    :align: center                            |\r
-+-------------------------------------------+----------------------------------------------+\r
-| vis (Crack is in the radius filet between the screw head and the screw shank)            |\r
-+-------------------------------------------+----------------------------------------------+\r
-|.. image:: images/13_vis_1.png             | .. image:: images/13_vis_1_2.png             |\r
-|   :width: 400                             |    :width: 400                               |\r
-|   :align: center                          |    :align: center                            |\r
-+-------------------------------------------+----------------------------------------------+\r
+All 16 cases are shown Table 2. Two views show the whole cracked structure and a zoom onto the crack with its tore.\r
+\r
++--------------------------------------------+-----------------------------------------------+\r
+| CubeAngle                                                                                  |\r
++--------------------------------------------+-----------------------------------------------+\r
+|.. image:: images/01_CubeAngle.png          | .. image:: images/01_CubeAngle_a.png          |\r
+|   :height: 300                             |    :height: 300                               |\r
+|   :align: center                           |    :align: center                             |\r
++--------------------------------------------+-----------------------------------------------+\r
+| CubeAngle_2                                                                                |\r
++--------------------------------------------+-----------------------------------------------+\r
+|.. image:: images/02_CubeAngle_2.png        | .. image:: images/02_CubeAngle_2_a.png        |\r
+|   :height: 300                             |    :height: 300                               |\r
+|   :align: center                           |    :align: center                             |\r
++--------------------------------------------+-----------------------------------------------+\r
+| cubeCoin                                                                                   |\r
++--------------------------------------------+-----------------------------------------------+\r
+| cubeMilieu                                                                                 |\r
++--------------------------------------------+-----------------------------------------------+\r
+| cubeTransverse                                                                             |\r
++--------------------------------------------+-----------------------------------------------+\r
+| cylindre                                                                                   |\r
++--------------------------------------------+-----------------------------------------------+\r
+|.. image:: images/03_cylindre.png           | .. image:: images/03_cylindre_a.png           |\r
+|   :height: 300                             |    :height: 300                               |\r
+|   :align: center                           |    :align: center                             |\r
++--------------------------------------------+-----------------------------------------------+\r
+| cylindre_2                                                                                 |\r
++--------------------------------------------+-----------------------------------------------+\r
+|.. image:: images/04_cylindre_2.png         | .. image:: images/04_cylindre_2_a.png         |\r
+|   :height: 300                             |    :height: 300                               |\r
+|   :align: center                           |    :align: center                             |\r
++--------------------------------------------+-----------------------------------------------+\r
+| disquePerce                                                                                |\r
++--------------------------------------------+-----------------------------------------------+\r
+|.. image:: images/05_disque.png             | .. image:: images/05_disque_a.png             |\r
+|   :height: 300                             |    :height: 300                               |\r
+|   :align: center                           |    :align: center                             |\r
++--------------------------------------------+-----------------------------------------------+\r
+| ellipse_1                                                                                  |\r
++--------------------------------------------+-----------------------------------------------+\r
+|.. image:: images/06_ellipse_1.png          | .. image:: images/06_ellipse_1_a.png          |\r
+|   :height: 300                             |    :height: 300                               |\r
+|   :align: center                           |    :align: center                             |\r
++--------------------------------------------+-----------------------------------------------+\r
+| ellipse_2 (tilted crack)                                                                   |\r
++--------------------------------------------+-----------------------------------------------+\r
+|.. image:: images/07_ellipse_2.png          | .. image:: images/07_ellipse_2_a.png          |\r
+|   :height: 300                             |    :height: 300                               |\r
+|   :align: center                           |    :align: center                             |\r
++--------------------------------------------+-----------------------------------------------+\r
+| eprouvetteCourbe                                                                           |\r
++--------------------------------------------+-----------------------------------------------+\r
+|.. image:: images/08_eprouvetteCourbe.png   | .. image:: images/08_eprouvetteCourbe_a.png   |\r
+|   :height: 300                             |    :height: 300                               |\r
+|   :align: center                           |    :align: center                             |\r
++--------------------------------------------+-----------------------------------------------+\r
+| eprouvetteDroite                                                                           |\r
++--------------------------------------------+-----------------------------------------------+\r
+|.. image:: images/09_eprouvetteDroite.png   | .. image:: images/09_eprouvetteDroite_a.png   |\r
+|   :height: 300                             |    :height: 300                               |\r
+|   :align: center                           |    :align: center                             |\r
++--------------------------------------------+-----------------------------------------------+\r
+| eprouvetteDroite_2                                                                         |\r
++--------------------------------------------+-----------------------------------------------+\r
+|.. image:: images/10_eprouvetteDroite_2.png | .. image:: images/10_eprouvetteDroite_2_a.png |\r
+|   :height: 300                             |    :height: 300                               |\r
+|   :align: center                           |    :align: center                             |\r
++--------------------------------------------+-----------------------------------------------+\r
+| faceGauche                                                                                 |\r
++--------------------------------------------+-----------------------------------------------+\r
+|.. image:: images/11_faceGauche.png         | .. image:: images/11_faceGauche_2.png         |\r
+|   :height: 300                             |    :height: 300                               |\r
+|   :align: center                           |    :align: center                             |\r
++--------------------------------------------+-----------------------------------------------+\r
+| faceGauche_2                                                                               |\r
++--------------------------------------------+-----------------------------------------------+\r
+|.. image:: images/12_faceGauche_2.png       | .. image:: images/12_faceGauche_2_a.png       |\r
+|   :height: 300                             |    :height: 300                               |\r
+|   :align: center                           |    :align: center                             |\r
++--------------------------------------------+-----------------------------------------------+\r
+| vis (Crack is in the radius filet between the screw head and the screw shank)              |\r
++--------------------------------------------+-----------------------------------------------+\r
+|.. image:: images/13_vis_1.png              | .. image:: images/13_vis_1_2.png              |\r
+|   :width: 400                              |    :width: 400                                |\r
+|   :align: center                           |    :align: center                             |\r
++--------------------------------------------+-----------------------------------------------+\r
+| tube                                                                                       |\r
++--------------------------------------------+-----------------------------------------------+\r
 \r
 .. _pipeTC:\r
 \r
@@ -115,56 +123,59 @@ All 12 bended pipe test cases are not shown here because they are relatively sim
 | with an external crack         |                                              |\r
 +--------------------------------+----------------------------------------------+\r
 \r
-« Bloc Fissure » is very efficient for the case of bended pipes. The generation of the geometry and the crack insertion takes only around 15s.\r
-\r
-Running test cases\r
-=====================================\r
+coude_0 can be computed using this file for the data:\r
 \r
-In SALOME interface:\r
+  * :download:`data for a bended puipe <../ihm/dialogFissureCoude.dic>`\r
 \r
-0) **Generate med and breps files.** Once the files are generated, they are saved in SALOME source files. There is no need to generate them again::\r
+« Bloc Fissure » is very efficient for the case of bended pipes. The generation of the geometry and the crack insertion takes only around 15s.\r
 \r
-    from blocFissure.materielCasTests import genereMateriel\r
+Data for the test cases\r
+=====================================\r
 \r
-Then the user can either launch all test cases, several at once or just one :\r
+All the files for these test cases are stored in the directory of the installation of SALOME:\r
 \r
-1) **To execute all test cases**::\r
+``Salome-VXXXX_package-YY/modules/SMESH_VXXXX/lib/python3.6/site-packages/salome/blocFissure``\r
 \r
-    from blocFissure.CasTests import execution_Cas\r
+The set of the med, xao and brep files can be created by the following importation:\r
 \r
-2) **To execute only selected test cases**:\r
+    from blocFissure.materielCasTests import genereMateriel\r
 \r
-modify execution_Cas.py file and change::\r
+Once the files are generated, they are saved into the directory of the installation of SALOME:\r
 \r
-    runall = False. #old : True\r
+``Salome-VXXXX_package-YY/modules/SMESH_VXXXX/lib/python3.6/site-packages/salome/blocFissure/materielCasTests``\r
 \r
-And change from 0 to 1 of the number of the test you want to launch::\r
+There is no need to generate them again.\r
 \r
-    torun = [ 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,]\r
+To check the installation of salome, the test cases can be computed by the salome test process::\r
 \r
-then launch the test cases::\r
+    salome -test blocFissure\r
 \r
-    from blocFissure.CasTests import execution_Cas\r
+Running test cases\r
+=====================================\r
 \r
-3) **To execute only one test case**::\r
+The test cases can be runned by the following instructions::\r
 \r
-    from blocFissure.CasTests.[TEST_CASE_NAME] import [TEST_CASE_NAME]\r
+    from blocFissure.CasTests.blocFissureTest import blocFissureTest\r
+    BLOCFISSURE_TEST = blocFissureTest(list_of_cases)\r
+    MESSAGE_ERREUR = BLOCFISSURE_TEST.lancement()\r
+    sys.stdout.write(MESSAGE_ERREUR)\r
+    del BLOCFISSURE_TEST\r
 \r
-    [TEST_CASE_NAME](0).executeProbleme()\r
+If ``list_of_cases`` is an empty list, all the cases are computed.\r
 \r
-[TEST_CASE_NAME] is the name of the test case in the following list. Note that the test cases fissureCoude_4 and fissure_Coude_4 are very similar.\r
+If not, ``list_of_cases`` is made of the list of the numbers and/or the name of the requested case. The index of each test is the position of the test in the following table, from 0 for cubeAngle, 1 for cubeAngle_2, 2 for cubeCoin... from top to bottom, then from left to right.\r
 \r
 +--------------------+--------------------+--------------------+-----------------+-----------------+\r
-| faceGauche         | cylindre_2         | disquePerce        | fissureCoude_3  | fissureCoude_6  |\r
+| cubeAngle          | cylindre_2         | eprouvetteDroite_2 | fissureCoude_3  | fissureCoude_9  |\r
 +--------------------+--------------------+--------------------+-----------------+-----------------+\r
-| faceGauche_2       | eprouvetteCourbe   | vis_1              | fissureCoude_4  | fissureCoude_7  |\r
+| cubeAngle_2        | disquePerce        | faceGauche         | fissureCoude_4  | fissure_Coude   |\r
 +--------------------+--------------------+--------------------+-----------------+-----------------+\r
-| ellipse_1          | eprouvetteDroite   | fissureCoude       | fissure_Coude_4 | fissureCoude_8  |\r
+| cubeCoin           | ellipse_1          | faceGauche_2       | fissureCoude_5  | fissure_Coude_4 |\r
 +--------------------+--------------------+--------------------+-----------------+-----------------+\r
-| ellipse_2          | cubeAngle          | fissureCoude_1     | fissureCoude_5  | fissureCoude_9  |\r
+| cubeMilieu         | ellipse_2          | fissureCoude_1     | fissureCoude_6  | vis_1           |\r
 +--------------------+--------------------+--------------------+-----------------+-----------------+\r
-| cylindre           | cubeAngle2         | fissureCoude_2     | fissureCoude_5  | fissureCoude_10 |\r
+| cubeTransverse     | eprouvetteCourbe   | fissureCoude_10    | fissureCoude_7  |                 |\r
++--------------------+--------------------+--------------------+-----------------+-----------------+\r
+| cylindre           | eprouvetteDroite   | fissureCoude_2     | fissureCoude_8  |                 |\r
 +--------------------+--------------------+--------------------+-----------------+-----------------+\r
-\r
-\r
 \r
index ba279c38bb2d80cacc25bf371fef78f45ed5dbf4..aed307b60966fcba483b23be0027d64dd6085caf 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -26,10 +26,10 @@ initLog.setDebug()
 
 from blocFissure.gmu.casStandard import casStandard
 
-dicoParams = dict(nomCas            = 'angleCube',
-                  maillageSain      = os.path.join(gmu.pathBloc, 'materielCasTests/CubeAngle.med'),
-                  brepFaceFissure   = os.path.join(gmu.pathBloc, "materielCasTests/CubeAngleFiss.brep"),
-                  edgeFissIds       = [4],
+dicoParams = dict(nomCas            = "angleCube",
+                  maillageSain      = os.path.join(gmu.pathBloc, "materielCasTests", "CubeAngle.med"),
+                  CAOFaceFissure    = os.path.join(gmu.pathBloc, "materielCasTests", "CubeAngleFiss.brep"),
+                  edgeFiss          = [4],
                   lgInfluence       = 20,
                   meshBrep          = (5,10),
                   rayonPipe         = 5,
index b6d3886042c7029896c0ee1e0f427035aa6a416c..ee1434223711ea83c415429fc9987460a00e0501 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: iso-8859-1 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -93,8 +93,8 @@ from blocFissure.gmu.casStandard import casStandard
 
 dicoParams = dict(nomCas            = 'angleCube2',
                   maillageSain      = 'boite.med',
-                  brepFaceFissure   = "disk.brep",
-                  edgeFissIds       = [4],
+                  CAOFaceFissure    = "disk.brep",
+                  edgeFiss          = [4],
                   lgInfluence       = 50,
                   meshBrep          = (5,10),
                   rayonPipe         = 15,
index c9cb495c9694cb11afa50b6340ef0e4b85e7ace9..3690b93789736ceb5752cd1048b15938b8ef2584 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -38,8 +38,8 @@ crack = 'fissureQuartEllipse.brep'
 
 dicoParams = dict(nomCas            = 'fissTuyau',
                   maillageSain      = '/local00/home/I48174/Bureau/supportMaillage/{0}'.format(mesh),
-                  brepFaceFissure   = '/local00/home/I48174/Bureau/supportMaillage/{0}'.format(crack),
-                  edgeFissIds       = [9],
+                  CAOFaceFissure    = '/local00/home/I48174/Bureau/supportMaillage/{0}'.format(crack),
+                  edgeFiss          = [9],
                   lgInfluence       = 250,
                   meshBrep          = (10, 50),
                   rayonPipe         = 35,
@@ -51,4 +51,4 @@ dicoParams = dict(nomCas            = 'fissTuyau',
 execInstance = casStandard(dicoParams)
 
 if salome.sg.hasDesktop():
-    salome.sg.updateObjBrowser()
\ No newline at end of file
+    salome.sg.updateObjBrowser()
index b67fe883eb0e7cb58757c98fe364a24735176543..057fb28047d30f821b04491e19d76ab72f5801e8 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -25,12 +25,25 @@ SET(plugin_SCRIPTS
   ajustePointsEdgePipeFissure.py
   blocDefaut.py
   calculePointsAxiauxPipe.py
+  calculePointsAxiauxPipe_a.py
+  calculePointsAxiauxPipe_b.py
+  calculePointsAxiauxPipe_c.py
   casStandard.py
   checkDecoupePartition.py
   commonSubShapes.py
   compoundFromList.py
   construitEdgesRadialesDebouchantes.py
+  construitEdgesRadialesDebouchantes_a.py
+  construitEdgesRadialesDebouchantes_b.py
+  construitEdgesRadialesDebouchantes_c.py
   construitFissureGenerale.py
+  construitFissureGenerale_a.py
+  construitFissureGenerale_b.py
+  construitFissureGenerale_c.py
+  construitMaillagePipe_a.py
+  construitMaillagePipe_b.py
+  construitMaillagePipe_c.py
+  construitMaillagePipe_d.py
   construitMaillagePipe.py
   construitPartitionsPeauFissure.py
   creePointsPipePeau.py
@@ -45,12 +58,14 @@ SET(plugin_SCRIPTS
   enleveDefaut.py
   extractionOrienteeMulti.py
   extractionOrientee.py
+  extractionOrientee_a.py
   facesCirculaires.py
   facesFissure.py
   facesToreInBloc.py
   facesVolumesToriques.py
   findWireEndVertices.py
   findWireIntermediateVertices.py
+  findWireVertices.py
   fissError.py
   fissureCoude.py
   fissureGenerique.py
@@ -61,7 +76,14 @@ SET(plugin_SCRIPTS
   getCentreFondFiss.py
   getStatsMaillageFissure.py
   getSubshapeIds.py
+  identifieEdgesPeau_a.py
+  identifieEdgesPeau_b.py
+  identifieEdgesPeau_c.py
   identifieEdgesPeau.py
+  identifieElementsDebouchants_a.py
+  identifieElementsDebouchants_b.py
+  identifieElementsDebouchants_c.py
+  identifieElementsDebouchants_d.py
   identifieElementsDebouchants.py
   identifieElementsFissure.py
   identifieElementsGeometriquesPeau.py
@@ -70,7 +92,13 @@ SET(plugin_SCRIPTS
   initEtude.py
   initLog.py
   insereFissureElliptique.py
-  insereFissureGenerale.py
+  insereFissureLongue_a.py
+  insereFissureLongue_b.py
+  insereFissureLongue_c.py
+  insereFissureLongue_d.py
+  insereFissureLongue_e.py
+  insereFissureLongue_f.py
+  insereFissureLongue_g.py
   insereFissureLongue.py
   listOfExtraFunctions.py
   mailleAretesEtJonction.py
@@ -101,7 +129,6 @@ SET(plugin_SCRIPTS
   sortGeneratrices.py
   sortSolids.py
   substractSubShapes.py
-  testgmu.py
   toreFissure.py
   triedreBase.py
   trouveEdgesFissPeau.py
index a7803fbb5fd8d8c7b389b151ab8d1bf97c304a0b..748d5e6839b7fd1edb35722b131ab18ef2d2b018 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -17,6 +17,7 @@
 #
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
+"""init de la classe"""
 
 import os
 from . import initLog
index 286ba703cc8c41a95772238e0c1a0d29fd354cce..bc9cdf52ddb3177d78fdecf115b1d5cd9b656cc1 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -17,6 +17,7 @@
 #
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
+"""Ajustement précis des points sur edgesPipeFissureExterneC"""
 
 import logging
 
@@ -25,37 +26,37 @@ from .findWireIntermediateVertices import findWireIntermediateVertices
 from .projettePointSurCourbe import projettePointSurCourbe
 
 def ajustePointsEdgePipeFissure(edgesPipeFissureExterneC, wirePipeFissureExterne, gptsdisks, idisklim):
-  """
-  ajustement precis des points sur edgesPipeFissureExterneC
-  """
+  """Ajustement précis des points sur edgesPipeFissureExterneC"""
   logging.info('start')
-  
+
   edgesPFE = geompy.ExtractShapes(edgesPipeFissureExterneC, geompy.ShapeType["EDGE"], False)
-  verticesPFE = findWireIntermediateVertices(wirePipeFissureExterne)  # vertices intermédiaires (des points en trop dans ptsInWireFissExtPipe)
+  verticesPFE, _ = findWireIntermediateVertices(wirePipeFissureExterne)  # vertices intermédiaires (des points en trop dans ptsInWireFissExtPipe)
   idiskmin = idisklim[0] + 1 # on ne prend pas le disque sur la peau, déjà ajusté
-  idiskmax = idisklim[1]     # on ne prend pas le disque sur la peau, déjà ajusté
-  idiskint = []
+  idiskmax = idisklim[1]
+  idiskint = list()
+
   for vtx in verticesPFE:
-    distPtVt = []
+    distPtVt = list()
     for idisk in range(idiskmin, idiskmax):
       gptdsk = gptsdisks[idisk]
-      pt = gptdsk[0][-1]       # le point sur l'edge de la fissure externe au pipe
-      distPtVt.append((geompy.MinDistance(pt, vtx), idisk))
+      point = gptdsk[0][-1]       # le point sur l'edge de la fissure externe au pipe
+      distPtVt.append((geompy.MinDistance(point, vtx), idisk))
     distPtVt.sort()
     idiskint.append(distPtVt[0][1])
     gptsdisks[idiskint[-1]][0][-1] = vtx
     logging.debug("ajustement point sur edgePipeFissureExterne, vertex: %s %s", idiskint[-1], distPtVt[0][0])
+
   for idisk in range(idiskmin, idiskmax):
     if idisk in idiskint:
       break
     logging.debug("ajustement point sur edgePipeFissureExterne: %s", idisk)
     gptdsk = gptsdisks[idisk]
-    pt = gptdsk[0][-1]       # le point sur l'edge de la fissure externe au pipe
-    distPtEd = [(geompy.MinDistance(pt, edgePFE), k, edgePFE) for k, edgePFE in enumerate(edgesPFE)]
+    point = gptdsk[0][-1]       # le point sur l'edge de la fissure externe au pipe
+    distPtEd = [(geompy.MinDistance(point, edgePFE), k, edgePFE) for k, edgePFE in enumerate(edgesPFE)]
     distPtEd.sort()
     edgePFE = distPtEd[0][2]
-    u = projettePointSurCourbe(pt, edgePFE)
-    ptproj = geompy.MakeVertexOnCurve(edgePFE, u)
+    point_bis = projettePointSurCourbe(point, edgePFE)
+    ptproj = geompy.MakeVertexOnCurve(edgePFE, point_bis)
     gptsdisks[idisk][0][-1] = ptproj
 
-  return gptsdisks
\ No newline at end of file
+  return gptsdisks
index d5aa4eb60f8381064d92fa05ab14741884242f5e..dcb48d1dbee590c44f17ba86525eb4a68ec8a0f7 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""bloc defaut"""
 
 import logging
 from .geomsmesh import geompy
 
-# -----------------------------------------------------------------------------
-# --- bloc defaut
-
 def blocDefaut(blocDim):
-  """
-  Le bloc contenant la fissure est un cube construit centre a l'origine, dont on donne la demi arete.
+  """ Le bloc contenant la fissure est un cube construit centre a l'origine, dont on donne la demi arete.
+
   @param blocdim : demi arete
   @return  cube (geomObject)
   """
   logging.info("start")
-  geomObj_1 = geompy.MakeVertex(-blocDim, -blocDim, -blocDim)
-  geomObj_2 = geompy.MakeVertex( blocDim,  blocDim,  blocDim)
-  Box = geompy.MakeBoxTwoPnt(geomObj_1, geomObj_2)
-  #geompy.addToStudy( Box_1, 'Box_1' )
-  return Box
+  point_1 = geompy.MakeVertex(-blocDim, -blocDim, -blocDim)
+  point_2 = geompy.MakeVertex( blocDim,  blocDim,  blocDim)
+  le_cube = geompy.MakeBoxTwoPnt(point_1, point_2)
+
+  return le_cube
index 2dd1a9fc4d3c61f7416c21e74f470da06255028d..4a84d375a74bc763ebe972cf9a01c695c286cc50 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Préparation maillage du pipe"""
 
 import logging
-import math
 
-from .geomsmesh import geompy
-from .geomsmesh import smesh
-  
-def calculePointsAxiauxPipe(edgesFondFiss, edgesIdByOrientation, facesDefaut, 
-                            centreFondFiss, wireFondFiss, wirePipeFiss,
-                            lenSegPipe, rayonPipe, nbsegCercle, nbsegRad):
-  """
-  preparation maillage du pipe :
-  - détections des points a respecter : jonction des edges/faces constituant
-    la face de fissure externe au pipe
+from .calculePointsAxiauxPipe_a import calculePointsAxiauxPipe_a
+from .calculePointsAxiauxPipe_b import calculePointsAxiauxPipe_b
+from .calculePointsAxiauxPipe_c import calculePointsAxiauxPipe_c
+
+def calculePointsAxiauxPipe(edgesFondFiss, edgesIdByOrientation, facesDefaut, \
+                            centreFondFiss, wireFondFiss, wirePipeFiss, \
+                            lenSegPipe, rayonPipe, nbsegCercle, nbsegRad, \
+                            nro_cas=None):
+  """Préparation maillage du pipe :
+
+  - détections des points a respecter : jonction des edges/faces constituant la face de fissure externe au pipe
   - points sur les edges de fond de fissure et edges pipe/face fissure,
-  - vecteurs tangents au fond de fissure (normal au disque maillé)  
+  - vecteurs tangents au fond de fissure (normal au disque maillé)
   """
-  
-  logging.info('start')
 
-  # --- option de maillage selon le rayon de courbure du fond de fissure 
-  lenEdgeFondExt = 0
-  for edff in edgesFondFiss:
-    lenEdgeFondExt += geompy.BasicProperties(edff)[0]
-  
-  disfond = []
-  for filling in facesDefaut:
-    disfond.append(geompy.MinDistance(centreFondFiss, filling))
-  disfond.sort()
-  rcourb = disfond[0]
-  nbSegQuart = 5 # on veut 5 segments min sur un quart de cercle
-  alpha = math.pi/(4*nbSegQuart)
-  deflexion = rcourb*(1.0 -math.cos(alpha))
-  lgmin = lenSegPipe*0.25
-  lgmax = lenSegPipe*1.5               
-  logging.debug("rcourb: %s, lenFond:%s, deflexion: %s, lgmin: %s, lgmax: %s", rcourb, lenEdgeFondExt, deflexion, lgmin, lgmax)  
+  logging.info('start')
+  logging.info("Pour le cas n°%s", nro_cas)
 
-  meshFondExt = smesh.Mesh(wireFondFiss)
-  algo1d = meshFondExt.Segment()
-  hypo1d = algo1d.Adaptive(lgmin, lgmax, deflexion) # a ajuster selon la profondeur de la fissure
-  isDone = meshFondExt.Compute()
-  
-  ptGSdic = {} # dictionnaire [paramètre sur la courbe] --> point géométrique
-  allNodeIds = meshFondExt.GetNodesId()
-  for nodeId in allNodeIds:
-    xyz = meshFondExt.GetNodeXYZ(nodeId)
-    #logging.debug("nodeId %s, coords %s", nodeId, str(xyz))
-    pt = geompy.MakeVertex(xyz[0], xyz[1], xyz[2])
-    u, PointOnEdge, EdgeInWireIndex = geompy.MakeProjectionOnWire(pt, wireFondFiss) # u compris entre 0 et 1
-    edgeOrder = edgesIdByOrientation[EdgeInWireIndex]
-    ptGSdic[(edgeOrder, EdgeInWireIndex, u)] = pt
-    #logging.debug("nodeId %s, u %s", nodeId, str(u))
-  usort = sorted(ptGSdic)  
-  logging.debug("nombre de points obtenus par deflexion %s",len(usort))
-     
-  centres = []
-  origins = []
-  normals = []      
-  for edu in usort:
-    ied = edu[1]
-    u = edu[2]
-    vertcx = ptGSdic[edu]
-    norm = geompy.MakeTangentOnCurve(edgesFondFiss[ied], u)
-    plan = geompy.MakePlane(vertcx, norm, 3*rayonPipe)
-    part = geompy.MakePartition([plan], [wirePipeFiss], [], [], geompy.ShapeType["VERTEX"], 0, [], 0)
-    liste = geompy.ExtractShapes(part, geompy.ShapeType["VERTEX"], True)
-    if len(liste) == 5: # 4 coins du plan plus intersection recherchée
-      for point in liste:
-        if geompy.MinDistance(point, vertcx) < 1.1*rayonPipe: # les quatre coins sont plus loin
-          vertpx = point
-          break
-      centres.append(vertcx)
-      origins.append(vertpx)
-      normals.append(norm)
-#      name = "vertcx%d"%i
-#      geompy.addToStudyInFather(wireFondFiss, vertcx, name)
-#      name = "vertpx%d"%i
-#      geompy.addToStudyInFather(wireFondFiss, vertpx, name)
-#      name = "plan%d"%i
-#      geompy.addToStudyInFather(wireFondFiss, plan, name)
+  # --- Maillage selon le rayon de courbure du fond de fissure
 
-  # --- maillage du pipe étendu, sans tenir compte de l'intersection avec la face de peau
-      
-  logging.debug("nbsegCercle %s", nbsegCercle)
-  
-  # -----------------------------------------------------------------------
+  meshFondFiss = calculePointsAxiauxPipe_a(facesDefaut, centreFondFiss, wireFondFiss, \
+                                           lenSegPipe, \
+                                           nro_cas)
   # --- points géométriques
-  
-  gptsdisks = [] # vertices géométrie de tous les disques
-  raydisks = [[] for i in range(nbsegCercle)]
-  for i in range(len(centres)): # boucle sur les disques
-    gptdsk = [] # vertices géométrie d'un disque
-    vertcx = centres[i]
-    vertpx = origins[i]
-    normal = normals[i]
-    vec1 = geompy.MakeVector(vertcx, vertpx)
-    
-    points = [vertcx] # les points du rayon de référence
-    for j in range(nbsegRad):
-      pt = geompy.MakeTranslationVectorDistance(vertcx, vec1, (j+1)*float(rayonPipe)/nbsegRad)
-      points.append(pt)
-    gptdsk.append(points)
-    pt = geompy.MakeTranslationVectorDistance(vertcx, vec1, 1.5*rayonPipe)
-    rayon = geompy.MakeLineTwoPnt(vertcx, pt)
-    raydisks[0].append(rayon)
-    
-    for k in range(nbsegCercle-1):
-      angle = (k+1)*2*math.pi/nbsegCercle
-      pts = [vertcx] # les points d'un rayon obtenu par rotation
-      for j in range(nbsegRad):
-        pt = geompy.MakeRotation(points[j+1], normal, angle)
-        pts.append(pt)
-      gptdsk.append(pts)
-      ray = geompy.MakeRotation(rayon, normal, angle)
-      raydisks[k+1].append(ray)
-      
-    gptsdisks.append(gptdsk)
-    
+
+  centres, origins, normals = calculePointsAxiauxPipe_b(meshFondFiss, \
+                                                        edgesFondFiss, edgesIdByOrientation, \
+                                                        wireFondFiss, wirePipeFiss, \
+                                                        rayonPipe)
+
+  gptsdisks, raydisks = calculePointsAxiauxPipe_c(centres, origins, normals, \
+                                                  rayonPipe, nbsegCercle, nbsegRad)
+
   return (centres, gptsdisks, raydisks)
diff --git a/src/Tools/blocFissure/gmu/calculePointsAxiauxPipe_a.py b/src/Tools/blocFissure/gmu/calculePointsAxiauxPipe_a.py
new file mode 100644 (file)
index 0000000..192be37
--- /dev/null
@@ -0,0 +1,72 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Maillage selon le rayon de courbure du fond de fissure"""
+
+import logging
+import math
+
+from .geomsmesh import geompy
+from .geomsmesh import smesh
+
+from .putName import putName
+
+def calculePointsAxiauxPipe_a(facesDefaut, centreFondFiss, wireFondFiss, \
+                              lenSegPipe, \
+                              nro_cas=None):
+  """Maillage selon le rayon de courbure du fond de fissure"""
+
+  logging.info('start')
+
+  # Rayon de courbure maximal
+  disfond = list()
+  for filling in facesDefaut:
+    disfond.append(geompy.MinDistance(centreFondFiss, filling))
+  disfond.sort()
+
+  texte = "rcourb: {}, lenSegPipe: {}".format(disfond[0], lenSegPipe)
+  logging.info(texte)
+
+  # Maillage 1D
+  lgmin = lenSegPipe*0.25
+  lgmax = lenSegPipe*1.5
+  # la déflexion ets la distance maximale entre une arête du maillage et la courbe support
+  nbSegQuart = 5 # on veut 5 segments min sur un quart de cercle
+  alpha = math.pi/(4*nbSegQuart)
+  deflexion = disfond[0]*(1.0 -math.cos(alpha))
+  texte = "==> lgmin: {}, lgmax: {}, deflexion: {}".format(deflexion, lgmin, lgmax)
+  logging.info(texte)
+
+  meshFondFiss = smesh.Mesh(wireFondFiss)
+  putName(meshFondFiss, "wireFondFiss", i_pref=nro_cas)
+  algo1d = meshFondFiss.Segment()
+  putName(algo1d.GetSubMesh(), "wireFondFiss", i_pref=nro_cas)
+  hypo1d = algo1d.Adaptive(lgmin, lgmax, deflexion) # a ajuster selon la profondeur de la fissure
+  putName(hypo1d, "Adaptive_wireFondFiss", i_pref=nro_cas)
+
+  is_done = meshFondFiss.Compute()
+  text = "calculePointsAxiauxPipe meshFondFiss.Compute"
+  if is_done:
+    logging.info(text)
+  else:
+    text = "Erreur au calcul du maillage.\n" + text
+    logging.info(text)
+    raise Exception(text)
+
+  return meshFondFiss
diff --git a/src/Tools/blocFissure/gmu/calculePointsAxiauxPipe_b.py b/src/Tools/blocFissure/gmu/calculePointsAxiauxPipe_b.py
new file mode 100644 (file)
index 0000000..be0cf96
--- /dev/null
@@ -0,0 +1,75 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Préparation maillage du pipe"""
+
+import logging
+
+from .geomsmesh import geompy
+from .geomsmesh import geomPublishInFather
+
+from . import initLog
+
+def calculePointsAxiauxPipe_b(meshFondFiss, \
+                              edgesFondFiss, edgesIdByOrientation, \
+                              wireFondFiss, wirePipeFiss, \
+                              rayonPipe):
+  """Préparation maillage du pipe :
+
+  - détections des points a respecter : jonction des edges/faces constituant la face de fissure externe au pipe
+  - points sur les edges de fond de fissure et edges pipe/face fissure,
+  - vecteurs tangents au fond de fissure (normal au disque maillé)
+  """
+
+  logging.info('start')
+
+  ptGSdic = dict() # dictionnaire [paramètre sur la courbe] --> point géométrique
+  allNodeIds = meshFondFiss.GetNodesId()
+  for nodeId in allNodeIds:
+    xyz = meshFondFiss.GetNodeXYZ(nodeId)
+    #logging.debug("nodeId %s, coords %s", nodeId, str(xyz))
+    point = geompy.MakeVertex(xyz[0], xyz[1], xyz[2])
+    parametre, _, EdgeInWireIndex = geompy.MakeProjectionOnWire(point, wireFondFiss) # parametre compris entre 0 et 1
+    edgeOrder = edgesIdByOrientation[EdgeInWireIndex]
+    ptGSdic[(edgeOrder, EdgeInWireIndex, parametre)] = point
+    #logging.debug("nodeId %s, parametre %s", nodeId, str(parametre))
+  usort = sorted(ptGSdic)
+  logging.debug("nombre de points obtenus par deflexion : %s",len(usort))
+
+  centres = list()
+  origins = list()
+  normals = list()
+  for i_aux, edu in enumerate(usort):
+    vertcx = ptGSdic[edu]
+    geomPublishInFather(initLog.debug, wireFondFiss, vertcx, "vertcx_{}".format(i_aux))
+    norm = geompy.MakeTangentOnCurve(edgesFondFiss[edu[1]], edu[2])
+    plan = geompy.MakePlane(vertcx, norm, 3.*rayonPipe)
+    part = geompy.MakePartition([plan], [wirePipeFiss], list(), list(), geompy.ShapeType["VERTEX"], 0, list(), 0)
+    liste = geompy.ExtractShapes(part, geompy.ShapeType["VERTEX"], True)
+    if ( len(liste) == 5 ): # 4 coins du plan plus intersection recherchée
+      for point in liste:
+        if geompy.MinDistance(point, vertcx) < 1.1*rayonPipe: # les quatre coins sont plus loin
+          vertpx = point
+          geomPublishInFather(initLog.debug, wireFondFiss, vertpx, "vertpx_{}".format(i_aux))
+          break
+      centres.append(vertcx)
+      origins.append(vertpx)
+      normals.append(norm)
+
+  return centres, origins, normals
diff --git a/src/Tools/blocFissure/gmu/calculePointsAxiauxPipe_c.py b/src/Tools/blocFissure/gmu/calculePointsAxiauxPipe_c.py
new file mode 100644 (file)
index 0000000..408800f
--- /dev/null
@@ -0,0 +1,76 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Préparation maillage du pipe"""
+
+import logging
+import math
+
+from .geomsmesh import geompy
+
+def calculePointsAxiauxPipe_c(centres, origins, normals, \
+                              rayonPipe, nbsegCercle, nbsegRad):
+  """Préparation maillage du pipe :
+
+  - détections des points a respecter : jonction des edges/faces constituant la face de fissure externe au pipe
+  - points sur les edges de fond de fissure et edges pipe/face fissure,
+  - vecteurs tangents au fond de fissure (normal au disque maillé)
+  """
+
+  logging.info('start')
+  logging.debug("nbsegCercle = %d, nbsegRad = %d", nbsegCercle, nbsegRad)
+
+  # -----------------------------------------------------------------------
+  # --- points géométriques
+
+  gptsdisks = list() # vertices géométrie de tous les disques
+  raydisks = [list() for _ in range(nbsegCercle)]
+
+# boucle sur les disques
+  for indice, centres_i in enumerate(centres):
+    gptdsk = list() # vertices géométrie d'un disque
+    vertcx = centres_i
+    vertpx = origins[indice]
+    normal = normals[indice]
+    vec1 = geompy.MakeVector(vertcx, vertpx)
+
+    points = [vertcx] # les points du rayon de référence
+    dist_0 = rayonPipe/float(nbsegRad)
+    for j_aux in range(nbsegRad):
+      point = geompy.MakeTranslationVectorDistance(vertcx, vec1, float(j_aux+1)*dist_0)
+      points.append(point)
+    gptdsk.append(points)
+    point = geompy.MakeTranslationVectorDistance(vertcx, vec1, 1.5*rayonPipe)
+    rayon = geompy.MakeLineTwoPnt(vertcx, point)
+    raydisks[0].append(rayon)
+
+    angle_0 = 2.*math.pi/float(nbsegCercle)
+    for k_aux in range(nbsegCercle-1):
+      angle = float(k_aux+1)*angle_0
+      pts = [vertcx] # les points d'un rayon obtenu par rotation
+      for j_aux in range(nbsegRad):
+        point = geompy.MakeRotation(points[j_aux+1], normal, angle)
+        pts.append(point)
+      gptdsk.append(pts)
+      ray = geompy.MakeRotation(rayon, normal, angle)
+      raydisks[k_aux+1].append(ray)
+
+    gptsdisks.append(gptdsk)
+
+  return gptsdisks, raydisks
index 356d7c8bde1df36a78e4008260267b054a38d95f..5a4f15886f0c21cc2f1dcfa7d82aa8a7e9ff507b 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Cas standard"""
 
 import os
+import logging
+
 from .geomsmesh import geompy, smesh
 from .geomsmesh import geomPublish
 from .geomsmesh import geomPublishInFather
-from . import initLog
 
-import math
-import GEOM
-import SALOMEDS
-import SMESH
-#import StdMeshers
-#import GHS3DPlugin
-#import NETGENPlugin
-import logging
+from . import initLog
 
 from .fissureGenerique import fissureGenerique
 
@@ -40,57 +35,67 @@ from .triedreBase import triedreBase
 from .genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
 from .creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
 from .construitFissureGenerale import construitFissureGenerale
+from .putName import putName
 
 O, OX, OY, OZ = triedreBase()
 
 class casStandard(fissureGenerique):
-  """
-  problème de fissure standard, défini par :
+  """problème de fissure standard, défini par :
+
   - un maillage sain (hexaèdres),
   - une face géométrique de fissure, qui doit légèrement dépasser hors du volume maillé
-  - les numéros d'arêtes (edges géométriques) correspondant au fond de fissure
+  - les noms des groupes d'arêtes ou leurs numéros d'arêtes (edges au sens de GEOM) correspondant au fond de fissure
   - les paramètres de maillage de la fissure
   """
+  referencesMaillageFissure = None
 
   # ---------------------------------------------------------------------------
-  def __init__ (self, dicoParams, references = None, numeroCas = 0):
+  def __init__ (self, dicoParams, references = None, numeroCas = None):
     initEtude()
     self.references = references
     self.dicoParams = dicoParams
+    self.numeroCas = numeroCas
+
+    if 'nomProbleme' in self.dicoParams:
+      self.nomProbleme = self.dicoParams['nomProbleme']
+
     if 'nomCas' in self.dicoParams:
       self.nomCas = self.dicoParams['nomCas']
     elif 'nomres' in self.dicoParams:
       self.nomCas = os.path.splitext(os.path.split(self.dicoParams['nomres'])[1])[0]
+    elif ( self.numeroCas is not None ):
+      self.nomCas = self.nomProbleme +"_%d"%(self.numeroCas)
     else:
       self.nomCas = 'casStandard'
+
     if 'reptrav' in self.dicoParams:
       self.reptrav = self.dicoParams['reptrav']
     else:
-      self.reptrav = '.'  
-    self.numeroCas = numeroCas
-    if self.numeroCas != 0:
-      self.nomCas = self.nomProbleme +"_%d"%(self.numeroCas)
-    else:
-      self.nomProbleme = self.nomCas
+      self.reptrav = os.curdir
+
     if 'lenSegPipe' in self.dicoParams:
       self.lenSegPipe = self.dicoParams['lenSegPipe']
     else:
-      self.lenSegPipe =self.dicoParams['rayonPipe']
+      self.lenSegPipe = self.dicoParams['rayonPipe']
+
     if 'step' in self.dicoParams:
       step = self.dicoParams['step']
     else:
       step = -1 # exécuter toutes les étapes
+
     if 'aretesVives' not in self.dicoParams:
       self.dicoParams['aretesVives'] = 0
-    if self.numeroCas == 0: # valeur par défaut : exécution immédiate, sinon execution différée dans le cas d'une liste de problèmes
+
+    # valeur par défaut : exécution immédiate, sinon execution différée dans le cas d'une liste de problèmes
+    if ( self.numeroCas is None ):
       self.executeProbleme(step)
-    
+
   # ---------------------------------------------------------------------------
   def genereMaillageSain(self, geometriesSaines, meshParams):
     logging.info("genereMaillageSain %s", self.nomCas)
 
-    ([objetSain], status) = smesh.CreateMeshesFromMED(self.dicoParams['maillageSain'])
-    smesh.SetName(objetSain.GetMesh(), 'objetSain')
+    ([objetSain], _) = smesh.CreateMeshesFromMED(self.dicoParams['maillageSain'])
+    putName(objetSain.GetMesh(), objetSain.GetName(), i_pref=self.numeroCas)
 
     return [objetSain, True] # True : maillage hexa
 
@@ -117,19 +122,39 @@ class casStandard(fissureGenerique):
                                      lenSegPipe  = self.lenSegPipe)
 
   # ---------------------------------------------------------------------------
-  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams):
-    logging.info("genereShapeFissure %s", self.nomCas)
+  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams, \
+                                mailleur="MeshGems"):
 
     lgInfluence = shapeFissureParams['lgInfluence']
 
-    shellFiss = geompy.ImportFile( self.dicoParams['brepFaceFissure'], "BREP")
+#   Contrôle de 'brepFaceFissure' pour les anciennes versions
+    if ( 'brepFaceFissure' in self.dicoParams ):
+      self.dicoParams['CAOFaceFissure'] = self.dicoParams['brepFaceFissure']
+    cao_file = self.dicoParams['CAOFaceFissure']
+    suffix = os.path.basename(cao_file).split(".")[-1]
+    if ( suffix.upper() == "BREP" ):
+      shellFiss = geompy.ImportBREP(cao_file)
+    elif ( suffix.upper() == "XAO" ):
+      (_, shellFiss, _, l_groups, _) = geompy.ImportXAO(cao_file)
     fondFiss = geompy.CreateGroup(shellFiss, geompy.ShapeType["EDGE"])
-    geompy.UnionIDs(fondFiss, self.dicoParams['edgeFissIds'] )
+#   Contrôle de 'edgeFissIds' pour les anciennes versions
+    if ( 'edgeFissIds' in self.dicoParams ):
+      self.dicoParams['edgeFiss'] = self.dicoParams['edgeFissIds']
+    if isinstance(self.dicoParams['edgeFiss'][0],int):
+      geompy.UnionIDs(fondFiss, self.dicoParams['edgeFiss'] )
+    else:
+      l_groups = geompy.GetGroups(shellFiss)
+      l_aux = list()
+      for group in l_groups:
+        if ( group.GetName() in self.dicoParams['edgeFiss'] ):
+          l_aux.append(group)
+      geompy.UnionList(fondFiss, l_aux )
     geomPublish(initLog.debug, shellFiss, 'shellFiss' )
     geomPublishInFather(initLog.debug, shellFiss, fondFiss, 'fondFiss' )
 
 
-    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, self.dicoParams['meshBrep'][0] ,self.dicoParams['meshBrep'][1])
+    coordsNoeudsFissure = genereMeshCalculZoneDefaut(shellFiss, self.dicoParams['meshBrep'][0] ,self.dicoParams['meshBrep'][1], \
+                                                     mailleur, self.numeroCas)
 
     centre = None
     return [shellFiss, centre, lgInfluence, coordsNoeudsFissure, fondFiss]
@@ -137,8 +162,8 @@ class casStandard(fissureGenerique):
   # ---------------------------------------------------------------------------
   def setParamMaillageFissure(self):
     self.maillageFissureParams = dict(nomRep           = self.reptrav,
-                                      nomFicSain       = self.nomCas +'_sain',
-                                      nomFicFissure    = self.nomCas,
+                                      nomFicSain       = self.nomCas,
+                                      nomFicFissure    = self.nomProbleme + "_fissure",
                                       nbsegRad         = self.dicoParams['nbSegRad'],
                                       nbsegCercle      = self.dicoParams['nbSegCercle'],
                                       areteFaceFissure = self.dicoParams['areteFaceFissure'],
@@ -146,16 +171,18 @@ class casStandard(fissureGenerique):
 
   # ---------------------------------------------------------------------------
   def genereZoneDefaut(self, geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams):
-    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams)
+    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams, \
+                          self.numeroCas)
     return elementsDefaut
 
   # ---------------------------------------------------------------------------
-  def genereMaillageFissure(self, geometriesSaines, maillagesSains,
-                            shapesFissure, shapeFissureParams,
-                            maillageFissureParams, elementsDefaut, step):
-    maillageFissure = construitFissureGenerale(maillagesSains,
-                                              shapesFissure, shapeFissureParams,
-                                              maillageFissureParams, elementsDefaut, step)
+  def genereMaillageFissure(self, geometriesSaines, maillagesSains, \
+                                  shapesFissure, shapeFissureParams, \
+                                  maillageFissureParams, elementsDefaut, step, \
+                                  mailleur="MeshGems"):
+    maillageFissure = construitFissureGenerale(shapesFissure, shapeFissureParams, \
+                                               maillageFissureParams, elementsDefaut, \
+                                               mailleur, self.numeroCas)
     return maillageFissure
 
   # ---------------------------------------------------------------------------
@@ -163,12 +190,13 @@ class casStandard(fissureGenerique):
     if self.references is not None:
       self.referencesMaillageFissure = self.references
     else:
-      self.referencesMaillageFissure = dict(Entity_Quad_Pyramid    = 0,
-                                            Entity_Quad_Triangle   = 0,
-                                            Entity_Quad_Edge       = 0,
-                                            Entity_Quad_Penta      = 0,
-                                            Entity_Quad_Hexa       = 0,
-                                            Entity_Node            = 0,
-                                            Entity_Quad_Tetra      = 0,
-                                            Entity_Quad_Quadrangle = 0)
-
+      self.referencesMaillageFissure = dict( \
+                                            Entity_Quad_Quadrangle = 0, \
+                                            Entity_Quad_Hexa = 0, \
+                                            Entity_Node = 0, \
+                                            Entity_Quad_Edge = 0, \
+                                            Entity_Quad_Triangle = 0, \
+                                            Entity_Quad_Tetra = 0, \
+                                            Entity_Quad_Pyramid = 0, \
+                                            Entity_Quad_Penta = 0 \
+                                           )
index cd1114b6c9ae8750f8c62e22f28b26fb2c4d7f57..49fd91066c60f5e104cde806b619f7298a916ad3 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Teste si l'opération de partition a produit une modification"""
 
 import logging
 from .geomsmesh import geompy
 
-# -----------------------------------------------------------------------------
-# --- teste si l'opération de partition a produit une modification
 
 def checkDecoupePartition(shapes, part):
-  """
-  Teste si l'opération de partition a produit une découpe
-  (plus de shapes dans la partition).
+  """Teste si l'opération de partition a produit une découpe (plus de shapes dans la partition).
+
   Résultat non garanti si recouvrement des shapes d'origine.
   @param shapes : liste des shapes d'origine
   @param part : résultat de la partition
@@ -35,25 +33,25 @@ def checkDecoupePartition(shapes, part):
   """
   logging.info('start')
   # TODO: ShapeInfo donne des résultats faux (deux faces au lieu de une)
-  
-  isPart = False
-  orig = {}
+
+  orig = dict()
   for shape in shapes:
     info = geompy.ShapeInfo(shape)
     logging.debug("shape info %s", info)
-    for k in ['VERTEX', 'EDGE', 'FACE', 'SOLID']:
-      if k in list(orig.keys()):
-        orig[k] += info[k]
+    for type_shape in ['VERTEX', 'EDGE', 'FACE', 'SOLID']:
+      if type_shape in orig:
+        orig[type_shape] += info[type_shape]
       else:
-        orig[k] = info[k]
+        orig[type_shape] = info[type_shape]
   logging.debug("original shapes info %s", orig)
+
   info = geompy.ShapeInfo(part)
   logging.debug("partition info %s", info)
-  for k in ['VERTEX', 'EDGE', 'FACE', 'SOLID']:
-    if orig[k] < info[k]:
-      isPart = True
+  decoupe = False
+  for type_shape in ['VERTEX', 'EDGE', 'FACE', 'SOLID']:
+    if orig[type_shape] < info[type_shape]:
+      decoupe = True
       break
-  logging.debug("partition modifie l'original %s", isPart)
-
-  return isPart
+  logging.debug("partition modifie l'original %s", decoupe)
 
+  return decoupe
index 9ae9819495a14e7335426eabb403d142627121ff..ac0784dac13e381b64f8726c9ec1443bdaf6dc12 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""subShapes communes à deux listes"""
 
 import logging
 from .geomsmesh import geompy
 
-# -----------------------------------------------------------------------------
-# --- subShapes communes à deux listes
-
 def commonSubShapes(obj, sub1, sub2):
-  """
-  liste de subshapes communes
-  """
+  """liste de subshapes communes"""
   logging.info("start")
-  idsub1 = {}
-  subList = []
-  for s in sub1:
-    idsub1[geompy.GetSubShapeID(obj, s)] = s
-  for s in sub2:
-    idsub = geompy.GetSubShapeID(obj, s)
-    if idsub in list(idsub1.keys()):
-      subList.append(s)
-  logging.debug("subList=%s", subList)
-  return subList
+
+  idsub1 = dict()
+  for subshape in sub1:
+    idsub1[geompy.GetSubShapeID(obj, subshape)] = subshape
+
+  l_subshapes = list()
+  for subshape in sub2:
+    idsub = geompy.GetSubShapeID(obj, subshape)
+    if idsub in idsub1:
+      l_subshapes.append(subshape)
+
+  logging.debug("l_subshapes=%s", l_subshapes)
+
+  return l_subshapes
index 35c5fe25a08ec46769c1aa4743bb7223681be716..5ab95e27cbff664935d3211b1c4c7ab15147698a 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""compoundFromList"""
 
 import logging
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
 from . import initLog
 
 def compoundFromList(elements, nom=None):
-  """
-  
-  """
+  """compoundFromList"""
+
   logging.debug('start')
-  
-  shapeList = []
-  for a in elements:
-    if not isinstance(a, list):
-      shapeList.append(a)
+
+  l_shapes = list()
+  for elem in elements:
+    if not isinstance(elem, list):
+      l_shapes.append(elem)
     else:
-      if a[0] is not None:
-        shapeList.append(a[0])
-      
+      if elem[0] is not None:
+        l_shapes.append(elem[0])
+
   if nom is not None:
-    for i,a in enumerate(shapeList):
-      nomi = nom +"%d"%i
+    for indice, elem in enumerate(l_shapes):
+      nomi = nom +"%d"%indice
       logging.debug('nom: %s',nomi)
-      geomPublish(initLog.debug, a, nomi)
+      geomPublish(initLog.debug, elem, nomi)
 
   shapeCompound = None
-  if len(shapeList) > 0:
-    shapeCompound =geompy.MakeCompound(shapeList)
+  if l_shapes:
+    shapeCompound = geompy.MakeCompound(l_shapes)
     nomc = "compound_%s"%nom
     geomPublish(initLog.debug, shapeCompound, nomc)
+
   return shapeCompound
-    
index 57f604975680c048b563a07e2a75d976a80bfd29..ee8f68177d64227a644f6feb2da940f9078a59cc 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Construit les arêtes débouchantes"""
 
 import logging
 
-from .geomsmesh import geompy
-from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
-from . import initLog
-import GEOM
-from .sortEdges import sortEdges
+from .construitEdgesRadialesDebouchantes_a import construitEdgesRadialesDebouchantes_a
+from .construitEdgesRadialesDebouchantes_b import construitEdgesRadialesDebouchantes_b
+from .construitEdgesRadialesDebouchantes_c import construitEdgesRadialesDebouchantes_c
 
 def construitEdgesRadialesDebouchantes(idisklim, idiskout, gptsdisks, raydisks,
                                        facesPipePeau, edgeRadFacePipePeau, nbsegCercle):
-  """
-  construction des listes d'edges radiales sur chaque extrémité débouchante
-  """
+  """construction des listes d'edges radiales sur chaque extrémité débouchante"""
   logging.info('start')
 
   # --- listes de nappes radiales en filling à chaque extrémité débouchante
 
-  facesDebouchantes = [False, False]
-  idFacesDebouchantes = [-1, -1] # contiendra les indices des faces disque débouchantes (facesPipePeau)
-  listNappes =[]
-  for i, idisk in enumerate(idisklim):
-    numout = idiskout[i]
-    logging.debug("extremité %s, indices disques interne %s, externe %s",i, idisk, numout)
-    nappes = []
-    if  (idisk != 0) and (idisk != len(gptsdisks)-1): # si extrémité débouchante
-      for k in range(nbsegCercle):
-        if i == 0:
-          iddeb = max(0, numout)
-          idfin = max(iddeb+3,idisk+1) # il faut 3 rayons pour faire un filling qui suive le fond de fissure
-          #logging.debug("extremité %s, indices retenus interne %s, externe %s",i, idfin, iddeb)
-          comp = geompy.MakeCompound(raydisks[k][iddeb:idfin])
-          name='compoundRay%d'%k
-          geomPublish(initLog.debug, comp, name)
-        else:
-          idfin = min(len(gptsdisks), numout+1)
-          iddeb = min(idfin-3, idisk) # il faut 3 rayons pour faire un filling qui suive le fond de fissure
-          #logging.debug("extremité %s, indices retenus interne %s, externe %s",i, idfin, iddeb)
-          comp = geompy.MakeCompound(raydisks[k][iddeb:idfin])
-          name='compoundRay%d'%k
-          geomPublish(initLog.debug, comp, name)
-        nappe = geompy.MakeFilling(comp, 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default)
-        nappes.append(nappe)
-        name='nappe%d'%k
-        geomPublish(initLog.debug, nappe, name)
-        facesDebouchantes[i] = True
-    listNappes.append(nappes)
+  facesDebouchantes, listNappes = construitEdgesRadialesDebouchantes_a(idisklim, idiskout, gptsdisks, raydisks, nbsegCercle)
 
   # --- mise en correspondance avec les indices des faces disque débouchantes (facesPipePeau)
-  for i, nappes in enumerate(listNappes):
-    if facesDebouchantes[i]:
-      for k, face in enumerate(facesPipePeau):
-        #logging.debug('i, k, face, nappes[0] %s %s %s %s', i, k, face, nappes[0])
-        #geomPublish(initLog.debug, nappes[0], 'lanappe')
-        #geomPublish(initLog.debug, face, 'laface')
-        edge = geompy.MakeSection(face, nappes[0])
-        if geompy.NbShapes(edge, geompy.ShapeType["EDGE"]) > 0:
-          idFacesDebouchantes[i] = k
-          break
-  logging.debug("idFacesDebouchantes: %s", idFacesDebouchantes)
+  idFacesDebouchantes = construitEdgesRadialesDebouchantes_b(facesPipePeau, facesDebouchantes, listNappes)
 
   # --- construction des listes d'edges radiales sur chaque extrémité débouchante
-  listEdges = []
-  for i, nappes in enumerate(listNappes):
-    ifd = idFacesDebouchantes[i] # indice de face débouchante (facesPipePeau)
-    if ifd < 0:
-      listEdges.append([])
-    else:
-      face = facesPipePeau[ifd]
-      edges = [edgeRadFacePipePeau[ifd]]
-      for k, nappe in enumerate(nappes):
-        if k > 0:
-          obj = geompy.MakeSection(face, nappes[k]) # normalement une edge, parfois un compound d'edges dont un tout petit
-          edge = obj
-          vs = geompy.ExtractShapes(obj, geompy.ShapeType["VERTEX"], False)
-          if len(vs) > 2:
-            eds = geompy.ExtractShapes(obj, geompy.ShapeType["EDGE"], False)
-            [edsorted, minl,maxl] = sortEdges(eds)
-            edge = edsorted[-1]
-          else:
-            maxl = geompy.BasicProperties(edge)[0]
-          if maxl < 0.01: # problème MakeSection
-            logging.info("problème MakeSection recherche edge radiale %s, longueur trop faible: %s, utilisation partition", k, maxl)
-            partNappeFace = geompy.MakePartition([face, nappes[k]], [] , [], [], geompy.ShapeType["FACE"], 0, [], 0)
-            edps= geompy.ExtractShapes(partNappeFace, geompy.ShapeType["EDGE"], False)
-            ednouv = []
-            for ii, ed in enumerate(edps):
-              dmax=100.
-              vxs = geompy.ExtractShapes(ed, geompy.ShapeType["VERTEX"], False)
-              distx = [geompy.MinDistance(vx, face) for vx in vxs]
-              distx += [geompy.MinDistance(vx, nappes[k]) for vx in vxs]
-              dmax = max(distx)
-              lgedge = geompy.BasicProperties(ed)[0]
-              logging.debug("  dmax %s, longueur edge %s",dmax, lgedge)
-              if dmax < 0.01 and  lgedge > 0.01:
-                ednouv.append(ed)
-            if (len(ednouv) > 0):
-              logging.debug("  edges issues de la partition: %s", ednouv)
-              for ii, ed in enumerate(ednouv):
-                geomPublish(initLog.debug, ed, "ednouv%d"%ii)
-              [edsorted, minl,maxl] = sortEdges(ednouv)
-              logging.debug("  longueur edge trouvée: %s", maxl)
-              edge = edsorted[-1]
-            else:
-              logging.info("problème partition recherche edge radiale %s", k)
-              vxs = geompy.ExtractShapes(partNappeFace, geompy.ShapeType["VERTEX"], False)
-              vxnouv=[]
-              for ii,vx in enumerate(vxs):
-                distx = geompy.MinDistance(vx, face)
-                distx += geompy.MinDistance(vx, nappes[k])
-                logging.debug("vertex distance: %s", distx)
-                if distx < 0.005:
-                  vxnouv.append(vx)
-              logging.debug("nombre vertex candidats %s", len(vxnouv))
-              if len(vxnouv) >= 2:
-                eds = [geompy.MakeEdge(vxnouv[j],vxnouv[(j+1)%len(vxnouv)]) for j in range(len(vxnouv))]
-                [edsorted2, minl,maxl] = sortEdges(eds)
-                edge = edsorted2[-1]
-                logging.debug("lg edge: %s", maxl)
-              else:
-                logging.debug("problème recherche edge radiale %s non résolu", k)
-          edges.append(edge)
-          name = 'edgeEndPipe%d'%k
-          geomPublish(initLog.debug, edge, name)
-      listEdges.append(edges)
+  listEdges = construitEdgesRadialesDebouchantes_c(facesPipePeau, edgeRadFacePipePeau, \
+                                                   listNappes, idFacesDebouchantes)
 
-  return (listEdges, idFacesDebouchantes)
\ No newline at end of file
+  return (listEdges, idFacesDebouchantes)
diff --git a/src/Tools/blocFissure/gmu/construitEdgesRadialesDebouchantes_a.py b/src/Tools/blocFissure/gmu/construitEdgesRadialesDebouchantes_a.py
new file mode 100644 (file)
index 0000000..30390d8
--- /dev/null
@@ -0,0 +1,62 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""listes de nappes radiales en filling à chaque extrémité débouchante"""
+
+import logging
+import GEOM
+
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from . import initLog
+
+def construitEdgesRadialesDebouchantes_a(idisklim, idiskout, gptsdisks, raydisks, nbsegCercle):
+  """listes de nappes radiales en filling à chaque extrémité débouchante"""
+  logging.info('start')
+
+  facesDebouchantes = [False, False]
+  listNappes = list()
+  for n_extr, idisk in enumerate(idisklim):
+    numout = idiskout[n_extr]
+    logging.debug("extremité %s, indices disques interne %s, externe %s",n_extr, idisk, numout)
+    nappes = list()
+    if  (idisk != 0) and (idisk != len(gptsdisks)-1): # si extrémité débouchante
+      for n_ray in range(nbsegCercle):
+        if n_extr == 0:
+          iddeb = max(0, numout)
+          idfin = max(iddeb+3,idisk+1) # il faut 3 rayons pour faire un filling qui suive le fond de fissure
+          #logging.debug("extremité %s, indices retenus interne %s, externe %s",n_extr, idfin, iddeb)
+          comp = geompy.MakeCompound(raydisks[n_ray][iddeb:idfin])
+          name='compoundRay%d'%n_ray
+          geomPublish(initLog.debug, comp, name)
+        else:
+          idfin = min(len(gptsdisks), numout+1)
+          iddeb = min(idfin-3, idisk) # il faut 3 rayons pour faire un filling qui suive le fond de fissure
+          #logging.debug("extremité %s, indices retenus interne %s, externe %s",n_extr, idfin, iddeb)
+          comp = geompy.MakeCompound(raydisks[n_ray][iddeb:idfin])
+          name='compoundRay%d'%n_ray
+          geomPublish(initLog.debug, comp, name)
+        nappe = geompy.MakeFilling(comp, 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default)
+        nappes.append(nappe)
+        name='nappe%d'%n_ray
+        geomPublish(initLog.debug, nappe, name)
+        facesDebouchantes[n_extr] = True
+    listNappes.append(nappes)
+
+  return facesDebouchantes, listNappes
diff --git a/src/Tools/blocFissure/gmu/construitEdgesRadialesDebouchantes_b.py b/src/Tools/blocFissure/gmu/construitEdgesRadialesDebouchantes_b.py
new file mode 100644 (file)
index 0000000..8d3aa64
--- /dev/null
@@ -0,0 +1,45 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Mise en correspondance avec les indices des faces disque débouchantes (facesPipePeau)"""
+
+import logging
+
+from .geomsmesh import geompy
+#from .geomsmesh import geomPublish
+
+#from . import initLog
+
+def construitEdgesRadialesDebouchantes_b(facesPipePeau, facesDebouchantes, listNappes):
+  """Mise en correspondance avec les indices des faces disque débouchantes (facesPipePeau)"""
+
+  idFacesDebouchantes = [-1, -1] # contiendra les indices des faces disque débouchantes (facesPipePeau)
+  for n_nappe, nappes in enumerate(listNappes):
+    if facesDebouchantes[n_nappe]:
+      for n_face, face in enumerate(facesPipePeau):
+        #logging.debug('n_nappe, n_face, face, nappes[0] %s %s %s %s', n_nappe, n_face, face, nappes[0])
+        #geomPublish(initLog.debug, nappes[0], 'lanappe')
+        #geomPublish(initLog.debug, face, 'laface')
+        edge = geompy.MakeSection(face, nappes[0])
+        if geompy.NbShapes(edge, geompy.ShapeType["EDGE"]) > 0:
+          idFacesDebouchantes[n_nappe] = n_face
+          break
+  logging.debug("idFacesDebouchantes: %s", idFacesDebouchantes)
+
+  return idFacesDebouchantes
diff --git a/src/Tools/blocFissure/gmu/construitEdgesRadialesDebouchantes_c.py b/src/Tools/blocFissure/gmu/construitEdgesRadialesDebouchantes_c.py
new file mode 100644 (file)
index 0000000..b6f9067
--- /dev/null
@@ -0,0 +1,102 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Construction des listes d'edges radiales sur chaque extrémité débouchante"""
+
+import logging
+
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+
+from . import initLog
+
+from .sortEdges import sortEdges
+
+def construitEdgesRadialesDebouchantes_c(facesPipePeau, edgeRadFacePipePeau, \
+                                         listNappes, idFacesDebouchantes):
+  """Construction des listes d'edges radiales sur chaque extrémité débouchante"""
+  logging.info('start')
+  listEdges = list()
+  for n_nappe, nappes in enumerate(listNappes):
+    ifd = idFacesDebouchantes[n_nappe] # indice de face débouchante (facesPipePeau)
+    if ifd < 0:
+      listEdges.append([])
+    else:
+      face = facesPipePeau[ifd]
+      edges = [edgeRadFacePipePeau[ifd]]
+      for n_nappe, nappe in enumerate(nappes):
+        if n_nappe > 0:
+          obj = geompy.MakeSection(face, nappe) # normalement une edge, parfois un compound d'edges dont un tout petit
+          edge = obj
+
+          l_shapes = geompy.ExtractShapes(obj, geompy.ShapeType["VERTEX"], False)
+          if len(l_shapes) > 2:
+            eds = geompy.ExtractShapes(obj, geompy.ShapeType["EDGE"], False)
+            [edsorted, _, maxl] = sortEdges(eds)
+            edge = edsorted[-1]
+          else:
+            maxl = geompy.BasicProperties(edge)[0]
+
+          if maxl < 0.01: # problème MakeSection
+            logging.info("problème MakeSection recherche edge radiale %s, longueur trop faible: %s, utilisation partition", n_nappe, maxl)
+            partNappeFace = geompy.MakePartition([face, nappe], [] , [], [], geompy.ShapeType["FACE"], 0, [], 0)
+            l_shapes= geompy.ExtractShapes(partNappeFace, geompy.ShapeType["EDGE"], False)
+            l_nouv_edges = list()
+            for shape in l_shapes:
+              dmax=100.
+              l_vertex = geompy.ExtractShapes(shape, geompy.ShapeType["VERTEX"], False)
+              distx = [geompy.MinDistance(vertex, face) for vertex in l_vertex]
+              distx += [geompy.MinDistance(vertex, nappe) for vertex in l_vertex]
+              dmax = max(distx)
+              lgedge = geompy.BasicProperties(shape)[0]
+              logging.debug("  dmax %s, longueur edge %s",dmax, lgedge)
+              if dmax < 0.01 and  lgedge > 0.01:
+                l_nouv_edges.append(shape)
+
+            if l_nouv_edges:
+              logging.debug("  edges issues de la partition: %s", l_nouv_edges)
+              for num, edge in enumerate(l_nouv_edges):
+                geomPublish(initLog.debug, edge, "l_nouv_edges%d"%num)
+              [edsorted, _, maxl] = sortEdges(l_nouv_edges)
+              logging.debug("  longueur edge trouvée: %s", maxl)
+              edge = edsorted[-1]
+            else:
+              logging.info("problème partition recherche edge radiale %s", n_nappe)
+              l_vertex = geompy.ExtractShapes(partNappeFace, geompy.ShapeType["VERTEX"], False)
+              l_vertexnouv= list()
+              for vertex in l_vertex:
+                distx = geompy.MinDistance(vertex, face)
+                distx += geompy.MinDistance(vertex, nappe)
+                logging.debug("vertex distance: %s", distx)
+                if distx < 0.005:
+                  l_vertexnouv.append(vertex)
+              logging.debug("nombre vertex candidats %s", len(l_vertexnouv))
+              if len(l_vertexnouv) >= 2:
+                l_edges = [geompy.MakeEdge(l_vertexnouv[j],l_vertexnouv[(j+1)%len(l_vertexnouv)]) for j in range(len(l_vertexnouv))]
+                [edsorted2, _, maxl] = sortEdges(l_edges)
+                edge = edsorted2[-1]
+                logging.debug("lg edge: %s", maxl)
+              else:
+                logging.debug("problème recherche edge radiale %s non résolu", n_nappe)
+          edges.append(edge)
+          name = 'edgeEndPipe%d'%n_nappe
+          geomPublish(initLog.debug, edge, name)
+      listEdges.append(edges)
+
+  return listEdges
index 9637bab8d020ad5d95923c9d107cf7bb1681b1bb..f8afdec9594a652cc581f7cf3c1934b0da64274d 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""procédure complète de construction d'une fissure générale"""
 
 import logging
+
+from . import initLog
+
 import salome
+
 from .geomsmesh import geompy
-from .geomsmesh import geomPublish
 from .geomsmesh import geomPublishInFather
-from . import initLog
-import GEOM
 from .geomsmesh import smesh
-from salome.smesh import smeshBuilder
-import SMESH
-import math
-import bisect
-import traceback
-
-# from extractionOrientee import extractionOrientee
-# from extractionOrienteeMulti import extractionOrienteeMulti
-# from sortFaces import sortFaces
-#from sortEdges import sortEdges
-# from eliminateDoubles import eliminateDoubles
-# from substractSubShapes import substractSubShapes
-# from produitMixte import produitMixte
-# from findWireEndVertices import findWireEndVertices
-#from findWireIntermediateVertices import findWireIntermediateVertices
+
 from .orderEdgesFromWire import orderEdgesFromWire
-# from getSubshapeIds import getSubshapeIds
-from .putName import putName
-# from distance2 import distance2
-from .enleveDefaut import enleveDefaut
-from .shapeSurFissure import shapeSurFissure
-from .regroupeSainEtDefaut import RegroupeSainEtDefaut
-from .triedreBase import triedreBase
-# from checkDecoupePartition import checkDecoupePartition
-# from whichSide import whichSide
-# from whichSideMulti import whichSideMulti
-#from whichSideVertex import whichSideVertex
-#from projettePointSurCourbe import projettePointSurCourbe
-# from prolongeWire import prolongeWire
 from .restreintFaceFissure import restreintFaceFissure
 from .partitionneFissureParPipe import partitionneFissureParPipe
 from .construitPartitionsPeauFissure import construitPartitionsPeauFissure
 from .compoundFromList import compoundFromList
-from .identifieElementsGeometriquesPeau import identifieElementsGeometriquesPeau
 from .identifieFacesEdgesFissureExterne import identifieFacesEdgesFissureExterne
 from .calculePointsAxiauxPipe import calculePointsAxiauxPipe
 from .elimineExtremitesPipe import elimineExtremitesPipe
@@ -70,21 +44,22 @@ from .construitMaillagePipe import construitMaillagePipe
 from .mailleAretesEtJonction import mailleAretesEtJonction
 from .mailleFacesFissure import mailleFacesFissure
 from .mailleFacesPeau import mailleFacesPeau
-from .fissError import fissError
+from .putName import putName
+
+from .construitFissureGenerale_a import construitFissureGenerale_a
+from .construitFissureGenerale_b import construitFissureGenerale_b
+from .construitFissureGenerale_c import construitFissureGenerale_c
 
 # -----------------------------------------------------------------------------
-# --- procédure complète fissure générale
-
-def construitFissureGenerale(maillagesSains,
-                             shapesFissure, shapeFissureParams,
-                             maillageFissureParams, elementsDefaut, step=-1):
-  """
-  TODO: a completer
-  """
+
+def construitFissureGenerale(shapesFissure, shapeFissureParams, \
+                             maillageFissureParams, elementsDefaut, \
+                             mailleur="MeshGems", nro_cas=None):
+  """procédure complète fissure générale"""
   logging.info('start')
-  
+  logging.info("Usage du mailleur %s pour le cas n°%s", mailleur, nro_cas)
+
   shapeDefaut       = shapesFissure[0] # faces de fissure, débordant
-  fondFiss          = shapesFissure[4] # groupe d'edges de fond de fissure
 
   rayonPipe = shapeFissureParams['rayonPipe']
   if 'lenSegPipe' in shapeFissureParams:
@@ -92,10 +67,6 @@ def construitFissureGenerale(maillagesSains,
   else:
     lenSegPipe = rayonPipe
 
-  nomRep            = maillageFissureParams['nomRep']
-  nomFicSain        = maillageFissureParams['nomFicSain']
-  nomFicFissure     = maillageFissureParams['nomFicFissure']
-
   nbsegRad          = maillageFissureParams['nbsegRad']      # nombre de couches selon un rayon du pipe
   nbsegCercle       = maillageFissureParams['nbsegCercle']   # nombre de secteur dans un cercle du pipe
   areteFaceFissure  = maillageFissureParams['areteFaceFissure']
@@ -103,26 +74,8 @@ def construitFissureGenerale(maillagesSains,
   if 'aretesVives' in maillageFissureParams:
     lgAretesVives   = maillageFissureParams['aretesVives']
 
-  pointIn_x = 0.0
-  pointIn_y = 0.0
-  pointIn_z = 0.0
-  isPointInterne = False
-  if 'pointIn_x' in shapeFissureParams:
-    pointIn_x = shapeFissureParams['pointIn_x']
-    isPointInterne = True
-  if 'pointIn_y' in shapeFissureParams:
-    pointIn_y = shapeFissureParams['pointIn_y']
-    isPointInterne = True
-  if 'pointIn_z' in shapeFissureParams:
-    pointIn_z = shapeFissureParams['pointIn_z']
-    isPointInterne = True
-  if isPointInterne:
-    pointInterne = geompy.MakeVertex(pointIn_x, pointIn_y, pointIn_z)
-  else:
-    pointInterne = None
-
-  #fichierMaillageSain = nomRep + '/' + nomFicSain + '.med'
-  fichierMaillageFissure = nomRep + '/' + nomFicFissure + '.med'
+# Point interne
+  pointInterne = construitFissureGenerale_a (geompy, shapeFissureParams)
 
   # fillings des faces en peau
   facesDefaut              = elementsDefaut[0]
@@ -143,24 +96,25 @@ def construitFissureGenerale(maillagesSains,
   centreFondFiss           = elementsDefaut[15]
   #tgtCentre                = elementsDefaut[16]
   if lgAretesVives == 0:
-     lgAretesVives = dmoyen
-
-
-  O, OX, OY, OZ = triedreBase()
+    lgAretesVives = dmoyen
 
   # --- restriction de la face de fissure au domaine solide :
   #     partition face fissure étendue par fillings, on garde la face interne
-  
-  facesPortFissure = restreintFaceFissure(shapeDefaut, facesDefaut, pointInterne)
+
+  facesPortFissure = restreintFaceFissure(shapeDefaut, facesDefaut, pointInterne, \
+                                          nro_cas)
+
   # --- pipe de fond de fissure, prolongé, partition face fissure par pipe
   #     identification des edges communes pipe et face fissure
-  
-  (fissPipe, edgesPipeFiss, edgesFondFiss, wirePipeFiss, wireFondFiss) = partitionneFissureParPipe(shapesFissure, elementsDefaut, rayonPipe)
+
+  (fissPipe, edgesPipeFiss, edgesFondFiss, wirePipeFiss, wireFondFiss) = \
+                          partitionneFissureParPipe(shapesFissure, elementsDefaut, rayonPipe, \
+                                                    nro_cas)
   edgesFondFiss, edgesIdByOrientation = orderEdgesFromWire(wireFondFiss)
-  for i,edge in enumerate(edgesFondFiss):
-    geomPublishInFather(initLog.debug, wireFondFiss, edge, "edgeFondFiss%d"%i)
-  
+
+  for i_aux, edge in enumerate(edgesFondFiss):
+    geomPublishInFather(initLog.debug, wireFondFiss, edge, "edgeFondFiss{}".format(i_aux), nro_cas)
+
   # --- peau et face de fissure
   #
   # --- partition peau défaut - face de fissure prolongée - wire de fond de fissure prolongée
@@ -169,190 +123,109 @@ def construitFissureGenerale(maillagesSains,
   #     liste de partitions face externe - fissure : partitionPeauFissFond (None quand pas d'intersection)
 
   partitionsPeauFissFond = construitPartitionsPeauFissure(facesDefaut, fissPipe)
-    
+
   # --- arêtes vives détectées (dans quadranglesToShapeNoCorner
   #                             et quadranglesToShapeWithCorner)
-    
+
   aretesVivesC = compoundFromList(bordsPartages, "areteVive")
-  aretesVivesCoupees = []  # ensembles des arêtes vives identifiées sur les faces de peau dans l'itération sur partitionsPeauFissFond
-   
+  aretesVivesCoupees = list()  # ensemble des arêtes vives identifiées sur les faces de peau dans l'itération sur partitionsPeauFissFond
+
   # --- inventaire des faces de peau coupées par la fissure
-  #     pour chaque face de peau : 0, 1 ou 2 faces débouchante du fond de fissure
-  #                                0, 1 ou plus edges de la face de fissure externe au pipe
-  
-  nbFacesFilling = len(partitionsPeauFissFond)
-  
-  ptEdgeFond = [ []  for i in range(nbFacesFilling)] # pour chaque face [points edge fond de fissure aux débouchés du pipe]
-  fsPipePeau = [ []  for i in range(nbFacesFilling)] # pour chaque face [faces du pipe débouchantes]
-  edRadFPiPo = [ []  for i in range(nbFacesFilling)] # pour chaque face [edge radiale des faces du pipe débouchantes ]
-  fsFissuExt = [ []  for i in range(nbFacesFilling)] # pour chaque face [faces de fissure externes au pipe]
-  edFisExtPe = [ []  for i in range(nbFacesFilling)] # pour chaque face [edge en peau des faces de fissure externes (pas subshape facePeau)]
-  edFisExtPi = [ []  for i in range(nbFacesFilling)] # pour chaque face [edge commun au pipe des faces de fissure externes]
-  facesPeaux = [None for i in range(nbFacesFilling)] # pour chaque face : la face de peau finale a mailler (percée des faces débouchantes)
-  edCircPeau = [ []  for i in range(nbFacesFilling)] # pour chaque face de peau : [subshape edge circulaire aux débouchés du pipe]
-  ptCircPeau = [ []  for i in range(nbFacesFilling)] # pour chaque face de peau : [subshape point sur edge circulaire aux débouchés du pipe]
-  gpedgeBord = [None for i in range(nbFacesFilling)] # pour chaque face de peau : groupe subshape des edges aux bords liés à la partie saine
-  gpedgeVifs = [None for i in range(nbFacesFilling)] # pour chaque face de peau : groupes subshape des edges aux arêtes vives entre fillings
-  edFissPeau = [ []  for i in range(nbFacesFilling)] # pour chaque face de peau : [subshape edge en peau des faces de fissure externes]
-  ptFisExtPi = [ []  for i in range(nbFacesFilling)] # pour chaque face de peau : [point commun edFissPeau edCircPeau]
-  
-  for ifil, partitionPeauFissFond in enumerate(partitionsPeauFissFond):
-    if partitionPeauFissFond is not None:
-      dataPPFF,aretesVivesCoupees = identifieElementsGeometriquesPeau(ifil, partitionPeauFissFond, edgesPipeFiss,
-                                                                      edgesFondFiss, wireFondFiss, aretesVivesC,
-                                                                      facesDefaut, centreFondFiss, rayonPipe,
-                                                                      aretesVivesCoupees)      
-      ptEdgeFond[ifil] = dataPPFF['endsEdgeFond']
-      fsPipePeau[ifil] = dataPPFF['facesPipePeau']
-      edRadFPiPo[ifil] = dataPPFF['edgeRadFacePipePeau']
-      fsFissuExt[ifil] = dataPPFF['facesFissExt']
-      edFisExtPe[ifil] = dataPPFF['edgesFissExtPeau']
-      edFisExtPi[ifil] = dataPPFF['edgesFissExtPipe']
-      facesPeaux[ifil] = dataPPFF['facePeau']
-      edCircPeau[ifil] = dataPPFF['edgesCircPeau']
-      ptCircPeau[ifil] = dataPPFF['verticesCircPeau']
-      gpedgeBord[ifil] = dataPPFF['groupEdgesBordPeau']
-      gpedgeVifs[ifil] = dataPPFF['bordsVifs']
-      edFissPeau[ifil] = dataPPFF['edgesFissurePeau']
-      ptFisExtPi[ifil] = dataPPFF['verticesPipePeau']
-
-  facesPipePeau = []
-  edgeRadFacePipePeau = []
-  for ifil in range(nbFacesFilling):
-    facesPipePeau += fsPipePeau[ifil]
-    edgeRadFacePipePeau += edRadFPiPo[ifil]
-  
-  for i, avc in enumerate(aretesVivesCoupees):
-    name = "areteViveCoupee%d"%i
-    geomPublish(initLog.debug, avc, name)
-  
+
+  ptEdgeFond, fsFissuExt, edFisExtPe, edFisExtPi, facesPeaux, edCircPeau, \
+    gpedgeBord, gpedgeVifs, edFissPeau, ptFisExtPi, \
+    edgeRadFacePipePeau, facesPipePeau = \
+    construitFissureGenerale_b( partitionsPeauFissFond, \
+                                edgesPipeFiss, edgesFondFiss, wireFondFiss, aretesVivesC, \
+                                facesDefaut, centreFondFiss, rayonPipe, aretesVivesCoupees, \
+                                nro_cas )
+
   # --- identification des faces et edges de fissure externe pour maillage
-  
-  (faceFissureExterne, edgesPipeFissureExterneC,
-    wirePipeFissureExterne, edgesPeauFissureExterneC) = identifieFacesEdgesFissureExterne(fsFissuExt, edFisExtPe,
-                                                                                          edFisExtPi, edgesPipeFiss)
 
-  # --- preparation maillage du pipe :
+  (faceFissureExterne, edgesPipeFissureExterneC, wirePipeFissureExterne, edgesPeauFissureExterneC) = \
+      identifieFacesEdgesFissureExterne(fsFissuExt, edFisExtPe, edFisExtPi, edgesPipeFiss, \
+                                        nro_cas)
+
+  # --- préparation maillage du pipe :
   #     - détections des points a respecter : jonction des edges/faces constituant la face de fissure externe au pipe
   #     - points sur les edges de fond de fissure et edges pipe/face fissure,
   #     - vecteurs tangents au fond de fissure (normal au disque maillé)
-  
-  (centres, gptsdisks, raydisks) = calculePointsAxiauxPipe(edgesFondFiss, edgesIdByOrientation, facesDefaut, 
-                                                           centreFondFiss, wireFondFiss, wirePipeFiss,
-                                                           lenSegPipe, rayonPipe, nbsegCercle, nbsegRad)
-   
+
+  (centres, gptsdisks, raydisks) = calculePointsAxiauxPipe (edgesFondFiss, edgesIdByOrientation, facesDefaut, \
+                                                            centreFondFiss, wireFondFiss, wirePipeFiss, \
+                                                            lenSegPipe, rayonPipe, nbsegCercle, nbsegRad, \
+                                                            nro_cas)
+
   # --- recherche des points en trop (externes au volume à remailler)
-  #     - on associe chaque extrémité du pipe à une face filling 
+  #     - on associe chaque extrémité du pipe à une face filling
   #     - on part des disques aux extrémités du pipe
-  #     - pour chaque disque, on prend les vertices de géométrie,
-  #       on marque leur position relative à la face.
+  #     - pour chaque disque, on prend les vertices de géométrie on marque leur position relative à la face.
   #     - on s'arrete quand tous les noeuds sont dedans
-  
+
   (idFillingFromBout, idisklim, idiskout) = elimineExtremitesPipe(ptEdgeFond, facesDefaut, centres, gptsdisks, nbsegCercle)
 
   # --- construction des listes d'edges radiales sur chaque extrémité débouchante
-  
-  (listEdges, idFacesDebouchantes) = construitEdgesRadialesDebouchantes(idisklim, idiskout, gptsdisks, raydisks,
+
+  (listEdges, idFacesDebouchantes) = construitEdgesRadialesDebouchantes(idisklim, idiskout, gptsdisks, raydisks, \
                                                                         facesPipePeau, edgeRadFacePipePeau, nbsegCercle)
-    
+
   # --- création des points du maillage du pipe sur la face de peau
-  
-  (gptsdisks, idisklim) = creePointsPipePeau(listEdges, idFacesDebouchantes, idFillingFromBout,
-                                             ptEdgeFond, ptFisExtPi, edCircPeau, gptsdisks, idisklim, nbsegRad)
-  
+
+  gptsdisks = creePointsPipePeau(listEdges, idFacesDebouchantes, idFillingFromBout, \
+                                 ptEdgeFond, ptFisExtPi, edCircPeau, gptsdisks, idisklim, nbsegRad)
+
   # --- ajustement precis des points sur edgesPipeFissureExterneC
-  
+
   gptsdisks = ajustePointsEdgePipeFissure(edgesPipeFissureExterneC, wirePipeFissureExterne, gptsdisks, idisklim)
-    
+
    # --- maillage effectif du pipe
 
-  (meshPipe, meshPipeGroups, edgesCircPipeGroup) = construitMaillagePipe(gptsdisks, idisklim, nbsegCercle, nbsegRad)
-  
+  (meshPipe, edgeFaceFissGroup, edgesCircPipeGroup) =  \
+      construitMaillagePipe(gptsdisks, idisklim, nbsegCercle, nbsegRad, \
+                             nro_cas)
+
   # --- edges de bord, faces défaut à respecter
-  
-  (internalBoundary, bordsLibres, grpAretesVives) = mailleAretesEtJonction(internalBoundary, aretesVivesCoupees, lgAretesVives)
+
+  (internalBoundary, bordsLibres, grpAretesVives) =  \
+      mailleAretesEtJonction(internalBoundary, aretesVivesCoupees, lgAretesVives, \
+                             nro_cas)
 
   # --- maillage faces de fissure
-  
-  (meshFaceFiss, grpFaceFissureExterne, 
-   grpEdgesPeauFissureExterne, grpEdgesPipeFissureExterne) = mailleFacesFissure(faceFissureExterne, edgesPipeFissureExterneC, edgesPeauFissureExterneC,
-                                                                                meshPipeGroups, areteFaceFissure, rayonPipe, nbsegRad)
+
+  (meshFaceFiss, _, grpEdgesPeauFissureExterne, _) = \
+      mailleFacesFissure(faceFissureExterne, \
+                         edgesPipeFissureExterneC, edgesPeauFissureExterneC, \
+                         edgeFaceFissGroup, areteFaceFissure, rayonPipe, nbsegRad, \
+                         mailleur, nro_cas)
 
   # --- maillage faces de peau
-  
-  meshesFacesPeau = mailleFacesPeau(partitionsPeauFissFond, idFillingFromBout, facesDefaut,
-                                    facesPeaux, edCircPeau, ptCircPeau, gpedgeBord, gpedgeVifs, edFissPeau, 
-                                    bordsLibres, grpEdgesPeauFissureExterne, grpAretesVives,
-                                    edgesCircPipeGroup, dmoyen, rayonPipe, nbsegRad)
+
+  meshesFacesPeau = mailleFacesPeau(partitionsPeauFissFond, idFillingFromBout, facesDefaut, \
+                                    facesPeaux, edCircPeau, gpedgeBord, gpedgeVifs, edFissPeau, \
+                                    bordsLibres, grpEdgesPeauFissureExterne, grpAretesVives, \
+                                    edgesCircPipeGroup, dmoyen, rayonPipe, nbsegRad, \
+                                    mailleur, nro_cas)
 
   # --- regroupement des maillages du défaut
 
-  listMeshes = [internalBoundary.GetMesh(),
-                meshPipe.GetMesh(),
-                meshFaceFiss.GetMesh()]
-  for mp in meshesFacesPeau:
-    listMeshes.append(mp.GetMesh())
-
-  meshBoiteDefaut = smesh.Concatenate(listMeshes, 1, 1, 1e-05,False)
-  # pour aider l'algo hexa-tetra à ne pas mettre de pyramides à l'exterieur des volumes repliés sur eux-mêmes
-  # on désigne les faces de peau en quadrangles par le groupe "skinFaces"
-  group_faceFissOutPipe = None
-  group_faceFissInPipe = None
-  groups = meshBoiteDefaut.GetGroups()
-  for grp in groups:
-    if grp.GetType() == SMESH.FACE:
-      if grp.GetName() == "fisOutPi":
-        group_faceFissOutPipe = grp
-      elif grp.GetName() == "fisInPi":
-        group_faceFissInPipe = grp
-
-  # le maillage NETGEN ne passe pas toujours ==> utiliser GHS3D
-  distene=True
-  if distene:
-    algo3d = meshBoiteDefaut.Tetrahedron(algo=smeshBuilder.GHS3D)
-  else:
-    algo3d = meshBoiteDefaut.Tetrahedron(algo=smeshBuilder.NETGEN)
-    hypo3d = algo3d.MaxElementVolume(1000.0)
-  putName(algo3d.GetSubMesh(), "boiteDefaut")
-  putName(algo3d, "algo3d_boiteDefaut")
-  isDone = meshBoiteDefaut.Compute()
-  putName(meshBoiteDefaut, "boiteDefaut")
-  logging.info("meshBoiteDefaut fini")
-  
-  faceFissure = meshBoiteDefaut.GetMesh().UnionListOfGroups( [ group_faceFissOutPipe, group_faceFissInPipe ], 'FACE1' )
-  maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin,
-                              zoneDefaut_internalFaces, zoneDefaut_internalEdges)
-  putName(maillageSain, nomFicSain+"_coupe")
-  extrusionFaceFissure, normfiss = shapeSurFissure(facesPortFissure)
-  maillageComplet = RegroupeSainEtDefaut(maillageSain, meshBoiteDefaut,
-                                         None, None, 'COMPLET', normfiss)
-
-  logging.info("conversion quadratique")
-  maillageComplet.ConvertToQuadratic( 1 )
-  logging.info("groupes")
-  groups = maillageComplet.GetGroups()
-  grps = [ grp for grp in groups if grp.GetName() == 'FONDFISS']
-  fond = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FONDFISS' )
-
-  logging.info("réorientation face de fissure FACE1")
-  grps = [ grp for grp in groups if grp.GetName() == 'FACE1']
-  nb = maillageComplet.Reorient2D( grps[0], normfiss, grps[0].GetID(1))
-
-  logging.info("réorientation face de fissure FACE2")
-  plansim = geompy.MakePlane(O, normfiss, 10000)
-  fissnorm = geompy.MakeMirrorByPlane(normfiss, plansim)
-  grps = [ grp for grp in groups if grp.GetName() == 'FACE2']
-  nb = maillageComplet.Reorient2D( grps[0], fissnorm, grps[0].GetID(1))
-  fond = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FACE2' )
-
-  logging.info("export maillage fini")
-  maillageComplet.ExportMED(fichierMaillageFissure)
-  putName(maillageComplet, nomFicFissure)
-  logging.info("fichier maillage fissure %s", fichierMaillageFissure)
+  listMeshes = [internalBoundary.GetMesh(), meshPipe.GetMesh(), meshFaceFiss.GetMesh()]
+  for mfpeau in meshesFacesPeau:
+    listMeshes.append(mfpeau.GetMesh())
+
+  # Attention à la précision... 1.e-5 est trop exigeant. Il faudrait mettre une valeur en cohérence avec les tailles de mailles.
+  meshBoiteDefaut = smesh.Concatenate(listMeshes, 1, 1, 1.e-04)
+  putName(meshBoiteDefaut, "boiteDefaut", i_pref=nro_cas)
+
+# Maillage complet
+  maillageComplet = construitFissureGenerale_c( maillageSain, meshBoiteDefaut, \
+                                                zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges, \
+                                                facesPortFissure, \
+                                                maillageFissureParams, \
+                                                mailleur, nro_cas )
 
   if salome.sg.hasDesktop():
     salome.sg.updateObjBrowser()
 
   logging.info("maillage fissure fini")
-  
+
   return maillageComplet
diff --git a/src/Tools/blocFissure/gmu/construitFissureGenerale_a.py b/src/Tools/blocFissure/gmu/construitFissureGenerale_a.py
new file mode 100644 (file)
index 0000000..05c3f0f
--- /dev/null
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""construction de la fissure générale - le point interne"""
+
+import logging
+
+# -----------------------------------------------------------------------------
+
+def construitFissureGenerale_a (geompy, shapeFissureParams):
+  """construction de la fissure générale - le point interne"""
+  logging.info('start')
+
+  point_in_x = 0.0
+  point_in_y = 0.0
+  point_in_z = 0.0
+  is_point_interne = False
+  if 'pointIn_x' in shapeFissureParams:
+    point_in_x = shapeFissureParams['pointIn_x']
+    is_point_interne = True
+  if 'pointIn_y' in shapeFissureParams:
+    point_in_y = shapeFissureParams['pointIn_y']
+    is_point_interne = True
+  if 'pointIn_z' in shapeFissureParams:
+    point_in_z = shapeFissureParams['pointIn_z']
+    is_point_interne = True
+
+  if is_point_interne:
+    pointInterne = geompy.MakeVertex(point_in_x, point_in_y, point_in_z)
+  else:
+    pointInterne = None
+
+  return pointInterne
diff --git a/src/Tools/blocFissure/gmu/construitFissureGenerale_b.py b/src/Tools/blocFissure/gmu/construitFissureGenerale_b.py
new file mode 100644 (file)
index 0000000..c296057
--- /dev/null
@@ -0,0 +1,89 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""construction de la fissure générale - inventaire des faces de peau coupées par la fissure"""
+
+import logging
+from .geomsmesh import geomPublish
+from . import initLog
+
+from .identifieElementsGeometriquesPeau import identifieElementsGeometriquesPeau
+
+# -----------------------------------------------------------------------------
+
+def construitFissureGenerale_b( partitionsPeauFissFond, \
+                                edgesPipeFiss, edgesFondFiss, wireFondFiss, aretesVivesC, \
+                                facesDefaut, centreFondFiss, rayonPipe, aretesVivesCoupees, \
+                                nro_cas=None ):
+  """construction de la fissure générale - inventaire des faces de peau coupées par la fissure
+
+pour chaque face de peau : 0, 1 ou 2 faces débouchante du fond de fissure
+                           0, 1 ou plus edges de la face de fissure externe au pipe
+  """
+  logging.info('start')
+
+  nbFacesFilling = len(partitionsPeauFissFond)
+  texte = "nbFacesFilling : {} ".format(nbFacesFilling)
+  logging.info(texte)
+
+  ptEdgeFond = [ list() for _ in range(nbFacesFilling)] # pour chaque face [points edge fond de fissure aux débouchés du pipe]
+  fsPipePeau = [ list() for _ in range(nbFacesFilling)] # pour chaque face [faces du pipe débouchantes]
+  edRadFPiPo = [ list() for _ in range(nbFacesFilling)] # pour chaque face [edge radiale des faces du pipe débouchantes ]
+  fsFissuExt = [ list() for _ in range(nbFacesFilling)] # pour chaque face [faces de fissure externes au pipe]
+  edFisExtPe = [ list() for _ in range(nbFacesFilling)] # pour chaque face [edge en peau des faces de fissure externes (pas subshape facePeau)]
+  edFisExtPi = [ list() for _ in range(nbFacesFilling)] # pour chaque face [edge commun au pipe des faces de fissure externes]
+  facesPeaux = [None for _ in range(nbFacesFilling)] # pour chaque face : la face de peau finale a mailler (percée des faces débouchantes)
+  edCircPeau = [ list() for _ in range(nbFacesFilling)] # pour chaque face de peau : [subshape edge circulaire aux débouchés du pipe]
+  gpedgeBord = [None for _ in range(nbFacesFilling)] # pour chaque face de peau : groupe subshape des edges aux bords liés à la partie saine
+  gpedgeVifs = [None for _ in range(nbFacesFilling)] # pour chaque face de peau : groupes subshape des edges aux arêtes vives entre fillings
+  edFissPeau = [ list() for _ in range(nbFacesFilling)] # pour chaque face de peau : [subshape edge en peau des faces de fissure externes]
+  ptFisExtPi = [ list() for _ in range(nbFacesFilling)] # pour chaque face de peau : [point commun edFissPeau edCircPeau]
+
+  for ifil, partitionPeauFissFond in enumerate(partitionsPeauFissFond):
+    if partitionPeauFissFond is not None:
+      dataPPFF,aretesVivesCoupees = identifieElementsGeometriquesPeau(ifil, partitionPeauFissFond, \
+                                                                      edgesPipeFiss, edgesFondFiss, wireFondFiss, aretesVivesC, \
+                                                                      facesDefaut, centreFondFiss, rayonPipe, aretesVivesCoupees, \
+                                                                      nro_cas)
+      ptEdgeFond[ifil] = dataPPFF['endsEdgeFond']
+      fsPipePeau[ifil] = dataPPFF['facesPipePeau']
+      edRadFPiPo[ifil] = dataPPFF['edgeRadFacePipePeau']
+      fsFissuExt[ifil] = dataPPFF['facesFissExt']
+      edFisExtPe[ifil] = dataPPFF['edgesFissExtPeau']
+      edFisExtPi[ifil] = dataPPFF['edgesFissExtPipe']
+      facesPeaux[ifil] = dataPPFF['facePeau']
+      edCircPeau[ifil] = dataPPFF['edgesCircPeau']
+      gpedgeBord[ifil] = dataPPFF['groupEdgesBordPeau']
+      gpedgeVifs[ifil] = dataPPFF['bordsVifs']
+      edFissPeau[ifil] = dataPPFF['edgesFissurePeau']
+      ptFisExtPi[ifil] = dataPPFF['verticesPipePeau']
+
+  facesPipePeau = list()
+  edgeRadFacePipePeau = list()
+  for ifil in range(nbFacesFilling):
+    facesPipePeau += fsPipePeau[ifil]
+    edgeRadFacePipePeau += edRadFPiPo[ifil]
+
+  for i_aux, avc in enumerate(aretesVivesCoupees):
+    name = "areteViveCoupee{}".format(i_aux)
+    geomPublish(initLog.debug, avc, name, nro_cas)
+
+  return ptEdgeFond, fsFissuExt, edFisExtPe, edFisExtPi, facesPeaux, edCircPeau, \
+         gpedgeBord, gpedgeVifs, edFissPeau, ptFisExtPi, \
+         edgeRadFacePipePeau, facesPipePeau
diff --git a/src/Tools/blocFissure/gmu/construitFissureGenerale_c.py b/src/Tools/blocFissure/gmu/construitFissureGenerale_c.py
new file mode 100644 (file)
index 0000000..af74e23
--- /dev/null
@@ -0,0 +1,122 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""construction de la fissure générale - maillage"""
+
+import os
+
+import logging
+
+from salome.smesh import smeshBuilder
+import SMESH
+
+from .geomsmesh import geompy
+
+from .putName import putName
+from .enleveDefaut import enleveDefaut
+from .shapeSurFissure import shapeSurFissure
+from .regroupeSainEtDefaut import RegroupeSainEtDefaut
+from .triedreBase import triedreBase
+
+# -----------------------------------------------------------------------------
+
+def construitFissureGenerale_c(maillageSain, meshBoiteDefaut, \
+                              zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges, \
+                              facesPortFissure, \
+                              maillageFissureParams, \
+                              mailleur="MeshGems", nro_cas=None):
+  """construction de la fissure générale - maillage"""
+  logging.info('start')
+  logging.info("Usage du mailleur %s pour le cas n°%s", mailleur, nro_cas)
+
+  nomRep            = maillageFissureParams['nomRep']
+  nomFicSain        = maillageFissureParams['nomFicSain']
+  nomFicFissure     = maillageFissureParams['nomFicFissure']
+
+  O, _, _, _ = triedreBase()
+
+  # pour aider l'algo hexa-tetra à ne pas mettre de pyramides à l'exterieur des volumes repliés sur eux-mêmes
+  # on désigne les faces de peau en quadrangles par le groupe "skinFaces"
+  group_faceFissOutPipe = None
+  group_faceFissInPipe = None
+  groups = meshBoiteDefaut.GetGroups()
+  for grp in groups:
+    if grp.GetType() == SMESH.FACE:
+      if grp.GetName() == "fisOutPi":
+        group_faceFissOutPipe = grp
+      elif grp.GetName() == "fisInPi":
+        group_faceFissInPipe = grp
+
+  # le maillage NETGEN ne passe pas toujours ==> on force l'usage de MG_Tetra
+  mailleur = "MeshGems"
+  logging.info("Maillage avec %s", mailleur)
+  if ( mailleur == "MeshGems"):
+    algo3d = meshBoiteDefaut.Tetrahedron(algo=smeshBuilder.MG_Tetra)
+  else:
+    algo3d = meshBoiteDefaut.Tetrahedron(algo=smeshBuilder.NETGEN)
+    hypo3d = algo3d.MaxElementVolume(1000.0)
+    hypo3d.SetVerboseLevel( 0 )
+    hypo3d.SetStandardOutputLog( 0 )
+    hypo3d.SetRemoveLogOnSuccess( 1 )
+  putName(algo3d.GetSubMesh(), "boiteDefaut", i_pref=nro_cas)
+
+  is_done = meshBoiteDefaut.Compute()
+  text = "meshBoiteDefaut.Compute"
+  if is_done:
+    logging.info(text+" OK")
+  else:
+    text = "Erreur au calcul du maillage.\n" + text
+    logging.info(text)
+    raise Exception(text)
+
+  _ = meshBoiteDefaut.GetMesh().UnionListOfGroups( [ group_faceFissOutPipe, group_faceFissInPipe ], \
+                                                             'FACE1' )
+  maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin,
+                              zoneDefaut_internalFaces, zoneDefaut_internalEdges)
+  putName(maillageSain, nomFicSain+"_coupe", i_pref=nro_cas)
+  _, normfiss = shapeSurFissure(facesPortFissure)
+  maillageComplet = RegroupeSainEtDefaut(maillageSain, meshBoiteDefaut, \
+                                         None, None, 'COMPLET', normfiss)
+  putName(maillageComplet, nomFicFissure)
+
+  logging.info("conversion quadratique")
+  maillageComplet.ConvertToQuadratic( 1 )
+
+  logging.info("groupes")
+  groups = maillageComplet.GetGroups()
+  grps = [ grp for grp in groups if grp.GetName() == 'FONDFISS']
+  _ = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FONDFISS' )
+
+  logging.info("réorientation face de fissure FACE1")
+  grps = [ grp for grp in groups if grp.GetName() == 'FACE1']
+  _ = maillageComplet.Reorient2D( grps[0], normfiss, grps[0].GetID(1))
+
+  logging.info("réorientation face de fissure FACE2")
+  plansim = geompy.MakePlane(O, normfiss, 10000)
+  fissnorm = geompy.MakeMirrorByPlane(normfiss, plansim)
+  grps = [ grp for grp in groups if grp.GetName() == 'FACE2']
+  _ = maillageComplet.Reorient2D( grps[0], fissnorm, grps[0].GetID(1))
+  _ = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FACE2' )
+
+  logging.info("export maillage fini")
+  fichierMaillageFissure = os.path.join (nomRep , '{}.med'.format(nomFicFissure))
+  maillageComplet.ExportMED(fichierMaillageFissure)
+  logging.info("fichier maillage fissure %s", fichierMaillageFissure)
+
+  return maillageComplet
index cd79654afb0be5463bcd332baa505381d4de408e..ca150ca1b62f74e5a212b9987bc327639f8480e7 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Maillage du pipe"""
 
 import logging
 
-from .geomsmesh import geompy
-from .geomsmesh import smesh
 import SMESH
 
-def construitMaillagePipe(gptsdisks, idisklim, nbsegCercle, nbsegRad):
-  """
-  maillage effectif du pipe
-  """
+from .geomsmesh import smesh
+from .putName import putName
+
+from .construitMaillagePipe_a import construitMaillagePipe_a
+from .construitMaillagePipe_b import construitMaillagePipe_b
+from .construitMaillagePipe_c import construitMaillagePipe_c
+from .construitMaillagePipe_d import construitMaillagePipe_d
+
+def construitMaillagePipe(gptsdisks, idisklim, nbsegCercle, nbsegRad, \
+                          nro_cas=None):
+  """maillage effectif du pipe"""
   logging.info('start')
+  logging.info("nbsegCercle = %d, nbsegRad = %d", nbsegCercle, nbsegRad)
+  logging.info("idisklim[0] = %d, idisklim[1] = %d", idisklim[0], idisklim[1])
+
   meshPipe = smesh.Mesh(None, "meshPipe")
+  putName(meshPipe, "meshPipe", i_pref=nro_cas)
+
+  edgesCircPipeGroup = list()
+
   fondFissGroup = meshPipe.CreateEmptyGroup(SMESH.EDGE, "FONDFISS")
   nodesFondFissGroup = meshPipe.CreateEmptyGroup(SMESH.NODE, "nfondfis")
   faceFissGroup = meshPipe.CreateEmptyGroup(SMESH.FACE, "fisInPi")
   edgeFaceFissGroup = meshPipe.CreateEmptyGroup(SMESH.EDGE, "edgeFaceFiss")
-  edgeCircPipe0Group = meshPipe.CreateEmptyGroup(SMESH.EDGE, "edgeCircPipe0")
-  edgeCircPipe1Group = meshPipe.CreateEmptyGroup(SMESH.EDGE, "edgeCircPipe1")
-  faceCircPipe0Group = meshPipe.CreateEmptyGroup(SMESH.FACE, "faceCircPipe0")
-  faceCircPipe1Group = meshPipe.CreateEmptyGroup(SMESH.FACE, "faceCircPipe1")
-  
-  mptsdisks  = [] # vertices maillage de tous les disques
-  mEdges     = [] # identifiants edges maillage fond de fissure
-  mEdgeFaces = [] # identifiants edges maillage edge face de fissure externe
-  mFaces     = [] # identifiants faces maillage fissure
-  mVols      = [] # identifiants volumes maillage pipe
-
-  mptdsk = None
+
+  mptdsk     = list() # vertices de chaque disque au fur et à mesure
+  mptsdisks  = list() # vertices maillage de tous les disques
+  mEdges     = list() # identifiants edges maillage fond de fissure
+  mEdgeFaces = list() # identifiants edges maillage edge face de fissure externe
+  mFaces     = list() # identifiants faces maillage fissure
+  mVols      = list() # identifiants volumes maillage pipe
+
   for idisk in range(idisklim[0], idisklim[1]+1): # boucle sur les disques internes
-    
+    #logging.info(". Prise en compte du disque n°%d", idisk)
+
     # -----------------------------------------------------------------------
-    # --- points
-    
-    gptdsk = gptsdisks[idisk]
-    if idisk > idisklim[0]:
-      oldmpts = mptdsk
-    mptdsk = [] # vertices maillage d'un disque
-    for k in range(nbsegCercle):
-      points = gptdsk[k]
-      mptids = []
-      for j, pt in enumerate(points):
-        if j == 0 and k > 0:
-          id = mptdsk[0][0]
-        else:
-          coords = geompy.PointCoordinates(pt)
-          id = meshPipe.AddNode(coords[0], coords[1], coords[2])
-        mptids.append(id)
-      mptdsk.append(mptids)
-    mptsdisks.append(mptdsk)
-    
+    # --- Les points
+
+    oldmpts = mptdsk
+    mptdsk = construitMaillagePipe_a(idisk, \
+                                      gptsdisks, nbsegCercle, \
+                                      meshPipe, mptsdisks)
+
     # -----------------------------------------------------------------------
-    # --- groupes edges cercles debouchants
-    
-    if idisk == idisklim[0]:
-      pts = []
-      for k in range(nbsegCercle):
-        pts.append(mptdsk[k][-1])
-      edges = []
-      for k in range(len(pts)):
-        k1 = (k+1)%len(pts)
-        idEdge = meshPipe.AddEdge([pts[k], pts[k1]])
-        edges.append(idEdge)
-      edgeCircPipe0Group.Add(edges)
-       
-    if idisk == idisklim[1]:
-      pts = []
-      for k in range(nbsegCercle):
-        pts.append(mptdsk[k][-1])
-      edges = []
-      for k in range(len(pts)):
-        k1 = (k+1)%len(pts)
-        idEdge = meshPipe.AddEdge([pts[k], pts[k1]])
-        edges.append(idEdge)
-      edgeCircPipe1Group.Add(edges)
-    
+    # --- Les groupes des edges des cercles débouchants
+
+    if idisk in (idisklim[0],idisklim[1]):
+      construitMaillagePipe_b(idisk, \
+                              idisklim, nbsegCercle, \
+                              meshPipe, mptdsk, \
+                              edgesCircPipeGroup)
+
     # -----------------------------------------------------------------------
-    # --- groupes faces  debouchantes
-    
-    if idisk == idisklim[0]:
-      faces = []
-      for j in range(nbsegRad):
-        for k in range(nbsegCercle):
-          k1 = k+1
-          if k ==  nbsegCercle-1:
-            k1 = 0
-          if j == 0:
-            idf = meshPipe.AddFace([mptdsk[k][0], mptdsk[k][1], mptdsk[k1][1]]) # triangle
-          else:
-            idf = meshPipe.AddFace([mptdsk[k][j], mptdsk[k][j+1], mptdsk[k1][j+1], mptdsk[k1][j]]) # quadrangle
-          faces.append(idf)
-      faceCircPipe0Group.Add(faces)
-
-    if idisk == idisklim[1]:
-      faces = []
-      for j in range(nbsegRad):
-        for k in range(nbsegCercle):
-          k1 = k+1
-          if k ==  nbsegCercle-1:
-            k1 = 0
-          if j == 0:
-            idf = meshPipe.AddFace([mptdsk[k][0], mptdsk[k][1], mptdsk[k1][1]]) # triangle
-          else:
-            idf = meshPipe.AddFace([mptdsk[k][j], mptdsk[k][j+1], mptdsk[k1][j+1], mptdsk[k1][j]]) # quadrangle
-          faces.append(idf)
-      faceCircPipe1Group.Add(faces)
-          
+    # --- Les groupes des faces débouchantes
+
+    if idisk in (idisklim[0],idisklim[1]):
+      construitMaillagePipe_c(idisk, \
+                              idisklim, nbsegCercle, \
+                              meshPipe, mptdsk, nbsegRad)
+
     # -----------------------------------------------------------------------
     # --- mailles volumiques, groupes noeuds et edges de fond de fissure, groupe de face de fissure
-    
-    if idisk == idisklim[0]:
-      mEdges.append(0)
-      mEdgeFaces.append(0)
-      mFaces.append([0])
-      mVols.append([[0]])
-      nodesFondFissGroup.Add([mptdsk[0][0]])
-    else:
-      ide = meshPipe.AddEdge([oldmpts[0][0], mptdsk[0][0]])
-      mEdges.append(ide)
-      fondFissGroup.Add([ide])
-      nodesFondFissGroup.Add([mptdsk[0][0]])
-      ide2 = meshPipe.AddEdge([oldmpts[0][-1], mptdsk[0][-1]])
-      mEdgeFaces.append(ide2)
-      edgeFaceFissGroup.Add([ide2])
-      idFaces = []
-      idVols = []
-      
-      for j in range(nbsegRad):
-        idf = meshPipe.AddFace([oldmpts[0][j], mptdsk[0][j], mptdsk[0][j+1], oldmpts[0][j+1]])
-        faceFissGroup.Add([idf])
-        idFaces.append(idf)
-        
-        idVolCercle = []
-        for k in range(nbsegCercle):
-          k1 = k+1
-          if k ==  nbsegCercle-1:
-            k1 = 0
-          if j == 0:
-            idv = meshPipe.AddVolume([mptdsk[k][j], mptdsk[k][j+1], mptdsk[k1][j+1],
-                                      oldmpts[k][j], oldmpts[k][j+1], oldmpts[k1][j+1]])
-          else:
-            idv = meshPipe.AddVolume([mptdsk[k][j], mptdsk[k][j+1], mptdsk[k1][j+1], mptdsk[k1][j],
-                                      oldmpts[k][j], oldmpts[k][j+1], oldmpts[k1][j+1], oldmpts[k1][j]])
-          idVolCercle.append(idv)
-        idVols.append(idVolCercle)  
-        
-      mFaces.append(idFaces)
-      mVols.append(idVols)
+
+    construitMaillagePipe_d(idisk, \
+                            idisklim, nbsegCercle, nbsegRad, \
+                            meshPipe, mptdsk, oldmpts, \
+                            fondFissGroup, edgeFaceFissGroup, faceFissGroup, \
+                            mEdges, mEdgeFaces, mFaces, mVols, nodesFondFissGroup)
+  # Bilan
 
   pipeFissGroup = meshPipe.CreateEmptyGroup( SMESH.VOLUME, 'PIPEFISS' )
-  nbAdd = pipeFissGroup.AddFrom( meshPipe.GetMesh() )
-
-  nb, new_mesh, new_group = meshPipe.MakeBoundaryElements(SMESH.BND_2DFROM3D, "pipeBoundaries")
-  edgesCircPipeGroup = [edgeCircPipe0Group, edgeCircPipe1Group]
-
-  meshPipeGroups = dict(fondFissGroup = fondFissGroup,
-                        nodesFondFissGroup = nodesFondFissGroup,
-                        faceFissGroup = faceFissGroup,
-                        edgeFaceFissGroup = edgeFaceFissGroup,
-                        edgeCircPipe0Group = edgeCircPipe0Group,
-                        edgeCircPipe1Group = edgeCircPipe1Group,
-                        faceCircPipe0Group = faceCircPipe0Group,
-                        faceCircPipe1Group = faceCircPipe1Group,
-                        pipeFissGroup = pipeFissGroup,
-                        edgesCircPipeGroup = edgesCircPipeGroup
-                        )
-  
-  return (meshPipe, meshPipeGroups, edgesCircPipeGroup)
\ No newline at end of file
+  _ = pipeFissGroup.AddFrom( meshPipe.GetMesh() )
+
+  _, _, _ = meshPipe.MakeBoundaryElements(SMESH.BND_2DFROM3D, "pipeBoundaries")
+
+  #if meshPipe:
+    #text = "Arrêt rapide.\n"
+    #logging.info(text)
+    #raise Exception(text)
+
+  return (meshPipe, edgeFaceFissGroup, edgesCircPipeGroup)
diff --git a/src/Tools/blocFissure/gmu/construitMaillagePipe_a.py b/src/Tools/blocFissure/gmu/construitMaillagePipe_a.py
new file mode 100644 (file)
index 0000000..269909e
--- /dev/null
@@ -0,0 +1,48 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Les points"""
+
+from .geomsmesh import geompy
+
+def construitMaillagePipe_a(idisk, \
+                            gptsdisks, nbsegCercle, \
+                            meshPipe, mptsdisks):
+  """Les points"""
+  #logging.info('start')
+
+  gptdsk = gptsdisks[idisk]
+
+  mptdsk = list() # vertices maillage d'un disque
+  for n_seg in range(nbsegCercle):
+
+    points = gptdsk[n_seg]
+    mptids = list()
+    for n_point, point in enumerate(points):
+      if n_point == 0 and n_seg > 0:
+        n_noeud = mptdsk[0][0]
+      else:
+        coords = geompy.PointCoordinates(point)
+        n_noeud = meshPipe.AddNode(coords[0], coords[1], coords[2])
+      mptids.append(n_noeud)
+    mptdsk.append(mptids)
+
+  mptsdisks.append(mptdsk)
+
+  return mptdsk
diff --git a/src/Tools/blocFissure/gmu/construitMaillagePipe_b.py b/src/Tools/blocFissure/gmu/construitMaillagePipe_b.py
new file mode 100644 (file)
index 0000000..63af875
--- /dev/null
@@ -0,0 +1,50 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Les groupes des edges des cercles débouchants"""
+
+import SMESH
+
+def construitMaillagePipe_b(idisk, \
+                            idisklim, nbsegCercle, \
+                            meshPipe, mptdsk, \
+                            edgesCircPipeGroup):
+  """Les groupes des edges des cercles débouchants"""
+  #logging.info('start')
+
+  pts = list()
+  for n_cercle in range(nbsegCercle):
+    pts.append(mptdsk[n_cercle][-1])
+
+  edges = list()
+  nb_pts = len(pts)
+  for n_cercle in range(nb_pts):
+    n_cercle_1 = (n_cercle+1)%nb_pts
+    id_edge = meshPipe.AddEdge([pts[n_cercle], pts[n_cercle_1]])
+    edges.append(id_edge)
+
+  if idisk == idisklim[0]:
+    groupe = meshPipe.CreateEmptyGroup(SMESH.EDGE, "edgeCircPipe0")
+  else:
+    groupe = meshPipe.CreateEmptyGroup(SMESH.EDGE, "edgeCircPipe1")
+
+  groupe.Add(edges)
+  edgesCircPipeGroup.append(groupe)
+
+  return
diff --git a/src/Tools/blocFissure/gmu/construitMaillagePipe_c.py b/src/Tools/blocFissure/gmu/construitMaillagePipe_c.py
new file mode 100644 (file)
index 0000000..1b0e182
--- /dev/null
@@ -0,0 +1,49 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Les groupes des faces débouchantes"""
+
+import SMESH
+
+def construitMaillagePipe_c(idisk, \
+                            idisklim, nbsegCercle, \
+                            meshPipe, mptdsk, nbsegRad):
+  """Les groupes des faces débouchantes"""
+  #logging.info('start')
+
+  faces = list()
+  for n_seg in range(nbsegRad):
+    for n_cercle in range(nbsegCercle):
+      n_cercle_1 = n_cercle+1
+      if n_cercle ==  nbsegCercle-1:
+        n_cercle_1 = 0
+      if n_seg == 0:
+        id_face = meshPipe.AddFace([mptdsk[n_cercle][0], mptdsk[n_cercle][1], mptdsk[n_cercle_1][1]]) # triangle
+      else:
+        id_face = meshPipe.AddFace([mptdsk[n_cercle][n_seg], mptdsk[n_cercle][n_seg+1], mptdsk[n_cercle_1][n_seg+1], mptdsk[n_cercle_1][n_seg]]) # quadrangle
+      faces.append(id_face)
+
+  if idisk == idisklim[0]:
+    groupe = meshPipe.CreateEmptyGroup(SMESH.FACE, "faceCircPipe0")
+  else:
+    groupe = meshPipe.CreateEmptyGroup(SMESH.FACE, "faceCircPipe1")
+
+  groupe.Add(faces)
+
+  return
diff --git a/src/Tools/blocFissure/gmu/construitMaillagePipe_d.py b/src/Tools/blocFissure/gmu/construitMaillagePipe_d.py
new file mode 100644 (file)
index 0000000..67111ae
--- /dev/null
@@ -0,0 +1,71 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Mailles volumiques, groupes noeuds et edges de fond de fissure, groupe de face de fissure"""
+
+def construitMaillagePipe_d(idisk, \
+                            idisklim, nbsegCercle, nbsegRad, \
+                            meshPipe, mptdsk, oldmpts, \
+                            fondFissGroup, edgeFaceFissGroup, faceFissGroup, \
+                            mEdges, mEdgeFaces, mFaces, mVols, nodesFondFissGroup):
+  """Mailles volumiques, groupes noeuds et edges de fond de fissure, groupe de face de fissure"""
+  #logging.info('start')
+
+  if idisk == idisklim[0]:
+    mEdges.append(0)
+    mEdgeFaces.append(0)
+    mFaces.append([0])
+    mVols.append([[0]])
+    nodesFondFissGroup.Add([mptdsk[0][0]])
+
+  else:
+    ide = meshPipe.AddEdge([oldmpts[0][0], mptdsk[0][0]])
+    mEdges.append(ide)
+    fondFissGroup.Add([ide])
+    nodesFondFissGroup.Add([mptdsk[0][0]])
+    ide2 = meshPipe.AddEdge([oldmpts[0][-1], mptdsk[0][-1]])
+    mEdgeFaces.append(ide2)
+    edgeFaceFissGroup.Add([ide2])
+
+    id_faces = list()
+    id_volumes = list()
+
+    for n_srad in range(nbsegRad):
+      idf = meshPipe.AddFace([oldmpts[0][n_srad], mptdsk[0][n_srad], mptdsk[0][n_srad+1], oldmpts[0][n_srad+1]])
+      faceFissGroup.Add([idf])
+      id_faces.append(idf)
+
+      id_vol_cercle = list()
+      for n_cercle in range(nbsegCercle):
+        n_cercle_1 = n_cercle+1
+        if n_cercle ==  nbsegCercle-1:
+          n_cercle_1 = 0
+        if n_srad == 0:
+          idv = meshPipe.AddVolume([mptdsk[n_cercle][n_srad], mptdsk[n_cercle][n_srad+1], mptdsk[n_cercle_1][n_srad+1], \
+                                    oldmpts[n_cercle][n_srad], oldmpts[n_cercle][n_srad+1], oldmpts[n_cercle_1][n_srad+1]])
+        else:
+          idv = meshPipe.AddVolume([mptdsk[n_cercle][n_srad], mptdsk[n_cercle][n_srad+1], mptdsk[n_cercle_1][n_srad+1], mptdsk[n_cercle_1][n_srad], \
+                                    oldmpts[n_cercle][n_srad], oldmpts[n_cercle][n_srad+1], oldmpts[n_cercle_1][n_srad+1], oldmpts[n_cercle_1][n_srad]])
+        id_vol_cercle.append(idv)
+      id_volumes.append(id_vol_cercle)
+
+    mFaces.append(id_faces)
+    mVols.append(id_volumes)
+
+  return
index eff8b18a36cf013d3dd42583eacbdd333fc583f8..ede0ea77792dc60e47bb0fe0da44da9065072aa5 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""peau et face de fissure
+
+partition peau défaut - face de fissure prolongée - wire de fond de fissure prolongée
+il peut y avoir plusieurs faces externes, dont certaines sont découpées par la fissure
+liste de faces externes : facesDefaut
+liste de partitions face externe - fissure : partitionPeauFissFond (None quand pas d'intersection)
+"""
 
 import logging
+
+from . import initLog
+
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
 from .geomsmesh import geomPublishInFather
-from . import initLog
-from .checkDecoupePartition import checkDecoupePartition
 
-  # -----------------------------------------------------------------------------
-  # --- peau et face de fissure
-  #
-  # --- partition peau défaut - face de fissure prolongée - wire de fond de fissure prolongée
-  #     il peut y avoir plusieurs faces externes, dont certaines sont découpées par la fissure
-  #     liste de faces externes : facesDefaut
-  #     liste de partitions face externe - fissure : partitionPeauFissFond (None quand pas d'intersection)
+from .checkDecoupePartition import checkDecoupePartition
 
 def construitPartitionsPeauFissure(facesDefaut, fissPipe):
-  """
-  partition peau défaut - face de fissure prolongée - wire de fond de fissure prolongée.
+  """partition peau défaut - face de fissure prolongée - wire de fond de fissure prolongée.
+
   Il peut y avoir plusieurs faces externes, dont certaines sont découpées par la fissure.
   @param facesDefaut liste de faces externes
   @param fissPipe    partition face de fissure etendue par pipe prolongé
   @return partitionsPeauFissFond : liste de partitions face externe - fissure (None quand pas d'intersection)
   """
-  
+
   logging.info('start')
-  partitionsPeauFissFond = []
+  partitionsPeauFissFond = list()
   ipart = 0
-  for filling in facesDefaut: 
-    part = geompy.MakePartition([fissPipe, filling], [], [], [], geompy.ShapeType["FACE"], 0, [], 0)
-    isPart = checkDecoupePartition([fissPipe, filling], part)
-    if isPart: # on recrée la partition avec toutes les faces filling en outil pour avoir une face de fissure correcte
+  for filling in facesDefaut:
+    part = geompy.MakePartition([fissPipe, filling], list(), list(), list(), geompy.ShapeType["FACE"], 0, list(), 0)
+    # on recrée la partition avec toutes les faces filling en outil pour avoir une face de fissure correcte
+    if checkDecoupePartition([fissPipe, filling], part):
       otherFD = [fd for fd in facesDefaut if fd != filling]
-      if len(otherFD) > 0:
-        fissPipePart = geompy.MakePartition([fissPipe], otherFD, [], [], geompy.ShapeType["FACE"], 0, [], 0)
+      if otherFD:
+        fissPipePart = geompy.MakePartition([fissPipe], otherFD, list(), list(), geompy.ShapeType["FACE"], 0, list(), 0)
       else:
         fissPipePart = fissPipe
-      part = geompy.MakePartition([fissPipePart, filling], [], [], [], geompy.ShapeType["FACE"], 0, [], 0)
+      part = geompy.MakePartition([fissPipePart, filling], list(), list(), list(), geompy.ShapeType["FACE"], 0, list(), 0)
       partitionsPeauFissFond.append(part)
       geomPublish(initLog.debug, part, 'partitionPeauFissFond%d'%ipart )
     else:
       partitionsPeauFissFond.append(None)
-    ipart = ipart +1
+    ipart += 1
 
-  return partitionsPeauFissFond
\ No newline at end of file
+  return partitionsPeauFissFond
index b6254d1379234d085a23a724ae920217cda1b6ee..9788982bb6c52f9433ed5ac9fe453e4be9daae3a 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""création des points du maillage du pipe sur la face de peau"""
 
 import logging
 
+from . import initLog
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
 from .geomsmesh import geomPublishInFather
-from . import initLog
 from .projettePointSurCourbe import projettePointSurCourbe
 
 def creePointsPipePeau(listEdges, idFacesDebouchantes, idFillingFromBout,
                        ptEdgeFond, ptFisExtPi, edCircPeau, gptsdisks, idisklim, nbsegRad):
-  """
-  création des points du maillage du pipe sur la face de peau
-  """
+  """création des points du maillage du pipe sur la face de peau"""
   logging.info('start')
-  
-  for i, edges in enumerate(listEdges):
-    idf = idFacesDebouchantes[i] # indice de face débouchante (facesPipePeau)
-    if idf >= 0:
-      gptdsk = []
-      if idf > 0: # idf vaut 0 ou 1
-        idf = -1  # si idf vaut 1, on prend le dernier élément de la liste (1 ou 2 extrémités débouchent sur la face)
-      centre = ptEdgeFond[idFillingFromBout[i]][idf]
-      name = "centre%d"%idf
+
+  for n_edges, edges in enumerate(listEdges):
+
+     # idf = indice de face débouchante (facesPipePeau) ; idf vaut 0 ou 1
+    idf = idFacesDebouchantes[n_edges]
+    logging.info("idf: %d", idf)
+    if ( idf >= 0 ):
+      gptdsk = list()
+      # si idf vaut 1, on prend le dernier élément de la liste (1 ou 2 extrémités débouchent sur la face)
+      if ( idf > 0 ):
+        idf = -1
+      centre = ptEdgeFond[idFillingFromBout[n_edges]][idf]
+      name = "centre_{}".format(idf)
       geomPublish(initLog.debug, centre, name)
-      vertPipePeau = ptFisExtPi[idFillingFromBout[i]][idf]
+      vertPipePeau = ptFisExtPi[idFillingFromBout[n_edges]][idf]
       geomPublishInFather(initLog.debug, centre, vertPipePeau, "vertPipePeau")
-      grpsEdgesCirc = edCircPeau[idFillingFromBout[i]] # liste de groupes
-      edgesCirc = []
+      grpsEdgesCirc = edCircPeau[idFillingFromBout[n_edges]] # liste de groupes
+
+      edgesCirc = list()
       for grpEdgesCirc in grpsEdgesCirc:
         edgesCirc += geompy.ExtractShapes(grpEdgesCirc, geompy.ShapeType["EDGE"], False)
-      for k, edge in enumerate(edges):
+      logging.debug("edgesCirc: %s", edgesCirc)
+
+      for i_aux, edge in enumerate(edges):
         extrems = geompy.ExtractShapes(edge, geompy.ShapeType["VERTEX"], True)
         if geompy.MinDistance(centre, extrems[0]) < geompy.MinDistance(centre, extrems[1]):
           bout = extrems[1]
         else:
           bout = extrems[0]
         # ajustement du point extrémité (bout) sur l'edge circulaire en face de peau
-        logging.debug("edgesCirc: %s", edgesCirc)
         distEdgeCirc = [(geompy.MinDistance(bout, edgeCirc), k2, edgeCirc) for k2, edgeCirc in enumerate(edgesCirc)]
         distEdgeCirc.sort()
         logging.debug("distEdgeCirc: %s", distEdgeCirc)
-        u = projettePointSurCourbe(bout, distEdgeCirc[0][2])
-        if (abs(u) < 0.02) or (abs(1-u) < 0.02): # les points très proches d'une extrémité doivent y être mis précisément.
+        dist = projettePointSurCourbe(bout, distEdgeCirc[0][2])
+        # les points très proches d'une extrémité doivent y être mis précisément.
+        if (abs(dist) < 0.02) or (abs(1.-dist) < 0.02):
           extrCircs = geompy.ExtractShapes(distEdgeCirc[0][2], geompy.ShapeType["VERTEX"], True)
           if geompy.MinDistance(bout, extrCircs[0]) < geompy.MinDistance(bout, extrCircs[1]):
             bout = extrCircs[0]
           else:
             bout = extrCircs[1]
         else:
-          bout = geompy.MakeVertexOnCurve(distEdgeCirc[0][2], u)
-        name ="bout%d"%k
+          bout = geompy.MakeVertexOnCurve(distEdgeCirc[0][2], dist)
+        name = "bout_{}".format(i_aux)
         geomPublishInFather(initLog.debug, centre, bout, name)
         # enregistrement des points dans la structure
-        points = []
-        for j in range(nbsegRad +1):
-          u = j/float(nbsegRad)
-          points.append(geompy.MakeVertexOnCurve(edge, u))
+        points = list()
+        for n_seg in range(nbsegRad +1):
+          points.append(geompy.MakeVertexOnCurve(edge, float(n_seg)/float(nbsegRad)))
         if geompy.MinDistance(bout, points[0]) < geompy.MinDistance(centre, points[0]):
           points.reverse()
         points[0] = centre
         points[-1] = bout
         gptdsk.append(points)
-      if i == 0:
+
+      # Enregistrement des extrémités
+      if n_edges == 0:
         gptsdisks[idisklim[0] -1] = gptdsk
         idisklim[0] = idisklim[0] -1
       else:
         gptsdisks[idisklim[1] +1] = gptdsk
         idisklim[1] = idisklim[1] +1
-        
-  return (gptsdisks, idisklim)
\ No newline at end of file
+
+  return gptsdisks
index 412516fcb56d18ba5a6f15186f4a13e872fd577b..4c6c1911518170ffce3fe03e46f6c3c927055304 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""TODO: a compléter"""
+
+import os
 
 import logging
+
 from .geomsmesh import smesh
-import SMESH
-import SALOMEDS
 
 from .creeZoneDefautMaillage import creeZoneDefautMaillage
 from .peauInterne import peauInterne
@@ -29,12 +31,11 @@ from .quadranglesToShapeNoCorner import quadranglesToShapeNoCorner
 from .creeZoneDefautFilling import creeZoneDefautFilling
 from .creeZoneDefautGeom import creeZoneDefautGeom
 from .getCentreFondFiss import getCentreFondFiss
+from .putName import putName
 
-# -----------------------------------------------------------------------------
-# ---
-
-def creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure,
-                                shapeFissureParams, maillageFissureParams):
+def creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, \
+                                shapeFissureParams, maillageFissureParams, \
+                                nro_cas=None):
   """
   #TODO: a compléter
   """
@@ -62,12 +63,11 @@ def creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure,
   nomRep              = maillageFissureParams['nomRep']
   nomFicSain          = maillageFissureParams['nomFicSain']
 
-  fichierMaillageSain    = nomRep + '/' + nomFicSain + '.med'
-  
+  fichierMaillageSain = os.path.join (nomRep , '{}.med'.format(nomFicSain))
+
   # --- centre de fond de fissure et tangente
-  
+
   edgeFondExt, centreFondFiss, tgtCentre = getCentreFondFiss(shapesFissure)
-  
 
   # --- zone de défaut
   nomZones = "zoneDefaut"
@@ -78,18 +78,20 @@ def creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure,
   maillageSain.ExportMED(fichierMaillageSain)
   logging.debug("fichier maillage sain %s", fichierMaillageSain)
   [maillageSain, internalBoundary, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges] = \
-    peauInterne(fichierMaillageSain, shapeDefaut, nomZones)
+    peauInterne(fichierMaillageSain, shapeDefaut, nomZones, \
+                nro_cas)
 
-  facesDefaut = []
-  centresDefaut = []
-  normalsDefaut =[]
-  extrusionsDefaut = []
+  facesDefaut = list()
+  centresDefaut = list()
+  normalsDefaut = list()
+  extrusionsDefaut = list()
   isPlane = False
   if isHexa and not isPlane:
     meshQuad =  smesh.CopyMesh( zoneDefaut_skin, 'meshQuad', 0, 0)
-    
-    fillings, noeuds_bords, bordsPartages, fillconts, idFilToCont = quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss)
-    
+    putName(meshQuad, "meshQuad", i_pref=nro_cas)
+
+    fillings, _, bordsPartages, fillconts, idFilToCont = quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss)
+
     for filling in fillings:
       [faceDefaut, centreDefaut, normalDefaut, extrusionDefaut] = \
         creeZoneDefautFilling(filling, shapeDefaut, lgExtrusion)
@@ -99,14 +101,15 @@ def creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure,
       extrusionsDefaut.append(extrusionDefaut)
   else:
     [facesDefaut, centreDefaut, normalDefaut, extrusionDefaut] = \
-      creeZoneDefautGeom( geometrieSaine, shapeDefaut, origShapes, verticesShapes, dmoyen, lgExtrusion)
-    bordsPartages = []
-    for face in facesDefaut:
+      creeZoneDefautGeom( geometrieSaine, shapeDefaut, origShapes, verticesShapes, lgExtrusion)
+    bordsPartages = list()
+    for _ in facesDefaut:
       bordsPartages.append([None,None]) # TODO : traitement des arêtes vives ?
     fillconts = facesDefaut
     idFilToCont = list(range(len(facesDefaut)))
 
-  return [facesDefaut, centresDefaut, normalsDefaut, extrusionsDefaut, dmoyen, bordsPartages, fillconts, idFilToCont,
-          maillageSain, internalBoundary, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges,
+  return [facesDefaut, centresDefaut, normalsDefaut, extrusionsDefaut, \
+          dmoyen, bordsPartages, fillconts, idFilToCont, \
+          maillageSain, internalBoundary, \
+          zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges, \
           edgeFondExt, centreFondFiss, tgtCentre]
-
index 3f67674f605a0c02bf432dbb2d94d962a7172da2..d69f98ebdad9cb046e48f96d2fe14b61847e229f 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Crée zone géométrique défaut a partir d'un filling"""
 
 import logging
+
+from . import initLog
+
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
 from .geomsmesh import geomPublishInFather
-from . import initLog
-
-# -----------------------------------------------------------------------------
-# --- crée zone géométrique défaut a partir d'un filling
 
 def creeZoneDefautFilling(filling, shapeDefaut, lgExtrusion=50):
-  """
-  Construction CAO de la zone à remailler, quand on utilise un filling,
+  """Construction CAO de la zone à remailler, quand on utilise un filling,
   après appel creeZoneDefautMaillage et quadranglesToShapeNoCorner
+
   @param filling : la CAO de la peau du défaut reconstituée
   @param shapeDefaut : objet géométrique représentant la fissure
   (selon les cas, un point central, ou une shape plus complexe,
index 0b99507fe4b42988a8e10246e10f07e197b6f109..c480db5d2343fe649abb34e6796cddb7c194ad47 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Zone de défaut, constructions géométrique avec CAO d'origine"""
 
 import logging
+from . import initLog
+
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
-from . import initLog
 from .prolongeVertices import prolongeVertices
 
-# -----------------------------------------------------------------------------
-# --- zone de defaut, constructions geometrique avec CAO d'origine
+def creeZoneDefautGeom(objetSain, shapeDefaut, origShapes, verticesShapes, lgExtrusion=50):
+  """Construction CAO de la zone à remailler, quand on utilise la CAO d'origine,apres appel creeZoneDefautMaillage
 
-def creeZoneDefautGeom(objetSain, shapeDefaut, origShapes, verticesShapes, dmoyen, lgExtrusion=50):
-  """
-  Construction CAO de la zone à remailler, quand on utilise la CAO d'origine,
-  apres appel creeZoneDefautMaillage
   @param objetSain : la géometrie de l'objet initial
   @param shapeDefaut : objet géometrique représentant la fissure
   (selon les cas, un point central, ou une shape plus complexe,
   dont on ne garde que les vertices)
   @param origShapes : liste id subShapes
   @param verticesShapes : listes noeuds de bord
-  @param dmoyen : longueur arete moyenne bord
   @lgExtrusion : distance d'extrusion de la face du defaut
   (ne vaut que pour des fissures courtes)
   @return (facesDefaut, centreDefaut, normalDefaut, extrusionDefaut)
@@ -46,14 +42,14 @@ def creeZoneDefautGeom(objetSain, shapeDefaut, origShapes, verticesShapes, dmoye
   logging.info("start")
 
   trace = True
-  faces = []
-  curves = []
-  cdgs = []
-  projs = []
-  normals = []
-  extrusions = []
-  partitions = []
-  decoupes = []
+  faces = list()
+  curves = list()
+  cdgs = list()
+  projs = list()
+  normals = list()
+  extrusions = list()
+  partitions = list()
+  decoupes = list()
 
   for ishape, vertices in enumerate(verticesShapes):
     aShape = origShapes[ishape]
@@ -106,7 +102,6 @@ def creeZoneDefautGeom(objetSain, shapeDefaut, origShapes, verticesShapes, dmoye
     if trace:
       name="partition_%d"%aShape
       geomPublish(initLog.debug, partition, name)
-    pass
   #
 
   centreSphere = geompy.MakeCDG(shapeDefaut)
@@ -114,12 +109,12 @@ def creeZoneDefautGeom(objetSain, shapeDefaut, origShapes, verticesShapes, dmoye
   ccurves = geompy.MakeCompound(curves)
   gravCenter = geompy.MakeCDG(ccurves)
   geomPublish(initLog.debug, gravCenter, "cdg_curves")
-  for i in range(len(partitions)):
+  for indice, part in enumerate(partitions):
     if trace:
-      logging.debug(" --- original shape %s", origShapes[i])
-    dists = []
-    facesToSort = []
-    subFaces = geompy.ExtractShapes(partitions[i], geompy.ShapeType["FACE"], True)
+      logging.debug(" --- original shape %s", origShapes[indice])
+    dists = list()
+    facesToSort = list()
+    subFaces = geompy.ExtractShapes(part, geompy.ShapeType["FACE"], True)
     for aFace in subFaces:
       cdg = geompy.MakeCDG(aFace)
       distance = geompy.MinDistance(cdg, centreSphere)
@@ -127,70 +122,66 @@ def creeZoneDefautGeom(objetSain, shapeDefaut, origShapes, verticesShapes, dmoye
       facesToSort.append(aFace)
       if trace:
         logging.debug("distance = %s", distance)
-        pass
-      pass
     if len(dists) > 0:
       minDist = min(dists)
       for j,d in enumerate(dists):
         if d == minDist:
           aFace = facesToSort[j]
-          name="decoupe_%d"%origShapes[i]
+          name="decoupe_%d"%origShapes[indice]
           geomPublish(initLog.debug, aFace, name)
           decoupes.append(aFace)
           break
-        pass
-      pass
 
   facesDefaut = decoupes[0]
   if len(decoupes) > 1:
     facesDefaut = geompy.MakePartition(decoupes, [], [], [], geompy.ShapeType["FACE"], 0, [], 0)
   geomPublish(initLog.debug, facesDefaut, "facesDefaut")
 
-  shells=[]
+  shells = list()
   if len(decoupes) > 1: # plusieurs faces de defaut
     subFaces = geompy.ExtractShapes(facesDefaut, geompy.ShapeType["FACE"], True)
     # --- regroupe les subFaces en shells connectes
     theFaces = list(subFaces) # copy
-    while len(theFaces) > 0:
+    while theFaces:
       logging.debug("------- len(theFaces) %s" , len(theFaces))
       theFace = theFaces[0]
       logging.debug("  start with face %s",theFaces[0])
-      theFaces[0:1] = []
+      theFaces[0:1] = list()
       aShell = [theFace]
       toAdd =[theFace]
-      while len(toAdd) > 0:
-        toAdd = []
-        toRemove = []
-        for i in range(len(theFaces)):
-          logging.debug("  try %s", theFaces[i])
+      while toAdd:
+        toAdd = list()
+        toRemove = list()
+        for indice, la_face in enumerate(theFaces):
+          logging.debug("  try %s", la_face)
           for aFace in aShell:
             logging.debug("    with %s", aFace)
             try:
-              edge = geompy.GetSharedShapesMulti([aFace, theFaces[i]], geompy.ShapeType["EDGE"])
+              _ = geompy.GetSharedShapesMulti([aFace, la_face], geompy.ShapeType["EDGE"])
               edgeShared = True
             except:
               edgeShared = False
             if edgeShared:
-              if theFaces[i] not in toAdd:
-                toAdd.append(theFaces[i])
-                toRemove.append(i)
-                logging.debug("    --- add %s", theFaces[i])
+              if la_face not in toAdd:
+                toAdd.append(la_face)
+                toRemove.append(indice)
+                logging.debug("    --- add %s", la_face)
         aShell += toAdd
         for k in sorted(toRemove, reverse=True):
-          theFaces[k:k+1] = []
+          theFaces[k:k+1] = list()
       theShell = geompy.MakeShell(aShell)
       name = "theShell%d"%len(shells)
       geomPublish(initLog.debug, theShell,name)
       shells.append(theShell)
     #
-    distances = []
+    distances = list()
     for aShell in shells: # --- trouver le shell en contact avec la fissure
       distances.append(geompy.MinDistance(aShell, shapeDefaut))
     minDist = min(distances)
-    for index in range(len(distances)):
-      if distances[index] == minDist:
+    for indice, dist in enumerate(distances):
+      if dist == minDist:
+        theShellDefaut = shells[indice]
         break
-    theShellDefaut = shells[index]
     #
   else: # --- une seule face de defaut
     subFaces = [facesDefaut]
@@ -199,18 +190,19 @@ def creeZoneDefautGeom(objetSain, shapeDefaut, origShapes, verticesShapes, dmoye
     geomPublish(initLog.debug, theShellDefaut,"theShellDefaut")
 
   theFaces = geompy.ExtractShapes(theShellDefaut, geompy.ShapeType["FACE"], True)
-  distances = []
+  distances = list()
   for aFace in theFaces:
     distances.append(geompy.MinDistance(aFace, centreSphere))
   minDist = min(distances)
-  for index in range(len(distances)):
-    if distances[index] == minDist:
+  for indice, dist in enumerate(distances):
+    if dist == minDist:
+      indice0 = indice
       break
 
-  centreDefaut = geompy.MakeProjection(centreSphere, theFaces[index])
+  centreDefaut = geompy.MakeProjection(centreSphere, theFaces[indice0])
   if trace:
     geomPublish(initLog.debug, centreDefaut, "centreDefaut")
-  normalDefaut = geompy.GetNormal(subFaces[index], centreDefaut)
+  normalDefaut = geompy.GetNormal(subFaces[indice0], centreDefaut)
   if trace:
     geomPublish(initLog.debug, normalDefaut, "normalDefaut")
   extrusionDefaut = geompy.MakePrismVecH(theShellDefaut, normalDefaut, -lgExtrusion)
index 73fa23755fd144ccf0c7a5fee54fe96338da383a..25949542ee7800f097387e39fd1352da2cdfa9f5 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Zone de defaut extraite du maillage"""
 
 import logging
-from .geomsmesh import geompy
 import math
-from .distance2 import distance2
 import traceback
+
+from .geomsmesh import geompy
+from .distance2 import distance2
 from .fissError import fissError
 
 # -----------------------------------------------------------------------------
-# --- zone de defaut extraite du maillage
 
 def creeZoneDefautMaillage(maillagesSains, shapeDefaut, tailleDefaut,
                            nomZones, coordsNoeudsFissure):
-  """
-  Identification de la zone à remailler, opérations sur le maillage
-  de l'objet sain.
+  """Identification de la zone à remailler, opérations sur le maillage de l'objet sain.
+
   La zone à remailler est définie à partir d'un objet géométrique
   ou à partir d'un jeu de points et d'une distance d'influence.
   @param maillagesSains : (le maillage de l'objet initial, booleen isHexa)
   @param shapeDefaut : objet géométrique représentant la fissure
-  (selon les cas, un point central, ou une shape plus complexe,
-  dont on ne garde que les vertices)
+  (selon les cas, un point central, ou une shape plus complexe, dont on ne garde que les vertices)
   @param tailleDefaut : distance d'influence définissant la zone à remailler:
   tous les éléments du maillage initial qui pénètrent dans cette zone
   sont détectés
   @param nomZones : préfixe des noms de groupes créés dans le maillage initial. S'il y a un groupe de noeuds
   @coordsNoeudsFissure : jeu de points donné par une liste (x1,y1,z1, x2,y2,z2, ...)
-  @return (origShapes, verticesShapes, dmoyen) liste id subShapes,
-  listes noeuds de bord, longueur arête moyenne bord
+  @return (origShapes, verticesShapes, dmoyen) liste id subShapes, listes noeuds de bord, longueur arête moyenne bord
   """
   logging.info("start")
-  
+  texte = "distance d'influence (tailleDefaut) = {}".format(tailleDefaut)
+  logging.debug(texte)
+  #print ("  shapeDefaut : {}".format(shapeDefaut))
+  #print ("  nomZones : {}".format(nomZones))
+
   maillageSain = maillagesSains[0]
-  isHexa = maillagesSains[1]
+  #isHexa = maillagesSains[1]
   lists = maillageSain.CreateHoleSkin(tailleDefaut, shapeDefaut, nomZones, coordsNoeudsFissure)
 
-  logging.debug("lists=%s", lists)
+  #print("lists = {}".format(lists))
 
   trace = True
-  origShapes = []
-  verticesShapes = []
+  origShapes = list()
+  verticesShapes = list()
 
-  cumul = 0 # somme des distances carrées entre point ordonnés (taille des arêtes)
-  nb = 0    # nombre d'arêtes évaluées
+  cumul = 0. # somme des distances carrées entre points ordonnés (taille des arêtes)
+  nbar = 0     # nombre d'arêtes évaluées
 
   for aList in lists:
     aShape = aList[0]
     origShapes.append(aShape)
-    logging.debug("  shapeId %s", aShape)
-    vertices = []
-    xyz0 = None
-    for inode in range(1, len(aList)):
-      xyz = maillageSain.GetNodeXYZ(aList[inode])
-      if xyz0 is not None:
-        cumul += distance2(xyz, xyz0)
-        nb += 1
+    vertices = list()
+    xyz0 = maillageSain.GetNodeXYZ(aList[1])
+    ###vertices.append(geompy.MakeVertex(xyz0[0], xyz0[1], xyz0[2])) pourquoi pas le premier ?
+    #print ("  node 0 {} : {}".format(aList[1],xyz0))
+    #print (xyz0)
+    for node in aList[2:]:
+      xyz = maillageSain.GetNodeXYZ(node)
+      #print ("  node {} : {}".format(node,xyz))
+      cumul += distance2(xyz, xyz0)
       xyz0 = xyz
-      #logging.debug("    node %s %s", aList[inode], xyz)
+      #logging.debug("    node %s %s", node, xyz)
       vertices.append(geompy.MakeVertex(xyz[0], xyz[1], xyz[2]))
-      pass
+    nbar += len(aList) - 2
     verticesShapes.append(vertices)
-    pass
+  #print ("nbar = {}".format(nbar))
+  #print ("cumul = {}".format(cumul))
 
-  if (nb == 0) :
+  if (nbar == 0):
     texte = "La zone à remailler n'est pas détectée correctement.<br>"
     texte += "Cause possible :<ul>"
     texte += "<li>La distance d'influence est trop petite. "
     texte += "L'ordre de grandeur minimal correspond à la taille des mailles du maillage sain dans la zone à remailler.</li></ul>"
     raise fissError(traceback.extract_stack(),texte)
 
-  dmoyen = math.sqrt(cumul/nb) # ~ taille de l'arête moyenne du maillage global
+  dmoyen = math.sqrt(cumul/float(nbar)) # ~ taille de l'arête moyenne du maillage global
+
   return origShapes, verticesShapes, dmoyen
index 261768b86f39908484951509c6a7a7b935d21c22..e374519ac4b3d8d259612be47a6fcba1e8382f02 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""calcul du carré de la distance entre deux points"""
 
 import logging
 
 # -----------------------------------------------------------------------------
-# --- calcul de distance carree entre deux points, jeux de coordonnees x,y,z
+# ---
 
 def distance2(xyz1, xyz2):
   """
   carré de la distance entre deux points donnés par des triplets [x,y,z]
   """
   #logging.info("start")
-  
-  d2 = 0
-  for i in range(3):
-    d2 += (xyz1[i]-xyz2[i])*(xyz1[i]-xyz2[i])
-  logging.debug('d2=%s', d2)
-  return d2
 
-# -----------------------------------------------------------------------------
-# --- test unitaire
-
-import unittest
-class Test_distance2(unittest.TestCase):
-
-  def setUp(self):
-    self.a=[0, 0, 0]
-    self.b=[3, 4, 5]
-    self.c=[-5,-4,-3]
-    
-  def test_calcul(self):
-    self.assertEqual(distance2(self.a, self.b), distance2(self.b, self.a))
-    self.assertEqual(distance2(self.a, self.b), distance2(self.a, self.c))
-    self.assertEqual(distance2(self.b, self.b), 0)
-    self.assertEqual(distance2(self.a, self.b), 50)
-        
\ No newline at end of file
+  dcarre = 0
+  for ijk in range(3):
+    dcarre += (xyz1[ijk]-xyz2[ijk])*(xyz1[ijk]-xyz2[ijk])
+  logging.debug('dcarre=%s', dcarre)
+
+  return dcarre
+
+## -----------------------------------------------------------------------------
+## --- test unitaire
+
+#import unittest
+#class Test_distance2(unittest.TestCase):
+  #"""test de la fonction"""
+
+  #def setUp(self):
+    #self.a=[0, 0, 0]
+    #self.b=[3, 4, 5]
+    #self.c=[-5,-4,-3]
+
+  #def test_calcul(self):
+    #self.assertEqual(distance2(self.a, self.b), distance2(self.b, self.a))
+    #self.assertEqual(distance2(self.a, self.b), distance2(self.a, self.c))
+    #self.assertEqual(distance2(self.b, self.b), 0)
+    #self.assertEqual(distance2(self.a, self.b), 50)
index 97a9276c188920f5922db2ee64c20b5c59b1177c..83a7410f1ed24e386eb92eb2016977e58f48b2db 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""éliminer les doublons d'une liste de subshapes"""
 
 import logging
 from .geomsmesh import geompy
 
-# -----------------------------------------------------------------------------
-# --- éliminer les doublons d'une liste de subshapes
-
 def eliminateDoubles(obj, subshapes):
-  """
-  éliminer les doublons d'une liste de subshapes
-  """
-  idsubs = {}
+  """éliminer les doublons d'une liste de subshapes"""
+
+  idsubs = dict()
   for sub in subshapes:
     subid = geompy.GetSubShapeID(obj, sub)
-    if subid in list(idsubs.keys()):
+    if subid in idsubs:
       idsubs[subid].append(sub)
     else:
       idsubs[subid] = [sub]
-  shortList = []
-  for k, v in idsubs.items():
-    shortList.append(v[0])
+
+  shortList = list()
+  for _, l_sub in idsubs.items():
+    shortList.append(l_sub[0])
   logging.debug("shortList=%s", shortList)
+
   return shortList
index 23974a36db1a8978bbda7e64312bb91dc1ff28cf..83b24150d8393e4b27a39e1654738e0ca53284ac 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -17,6 +17,7 @@
 #
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
+"""Recherche des points en trop (externes au volume à remailler)"""
 
 import logging
 
@@ -24,33 +25,34 @@ from .geomsmesh import geompy
 from .whichSideVertex import whichSideVertex
 
 def elimineExtremitesPipe(ptEdgeFond, facesDefaut, centres, gptsdisks, nbsegCercle):
-  """
-  recherche des points en trop (externes au volume à remailler)
-  - on associe chaque extrémité du pipe à une face filling 
+  """Recherche des points en trop (externes au volume à remailler)
+
+  - on associe chaque extrémité du pipe à une face filling
   - on part des disques aux extrémités du pipe
   - pour chaque disque, on prend les vertices de géométrie,
     on marque leur position relative à la face.
   - on s'arrete quand tous les noeuds sont dedans
   """
-  
+
   logging.info('start')
 
-  pt0 = centres[0]
-  pt1 = centres[-1]
+  point_0 = centres[0]
+  point_1 = centres[-1]
   idFillingFromBout = [None, None]                 # contiendra l'index du filling pour les extrémités 0 et 1
   nbFacesFilling = len(ptEdgeFond)
   for ifil in range(nbFacesFilling):
-    for ipt, pt in enumerate(ptEdgeFond[ifil]): # il y a un ou deux points débouchant sur cette face
-      if geompy.MinDistance(pt,pt0) < geompy.MinDistance(pt,pt1): # TODO: trouver plus fiable pour les cas tordus...
+    for point in ptEdgeFond[ifil]: # il y a un ou deux points débouchant sur cette face
+      if geompy.MinDistance(point,point_0) < geompy.MinDistance(point,point_1): # TODO: trouver plus fiable pour les cas tordus...
         idFillingFromBout[0] = ifil
-      else: 
+      else:
         idFillingFromBout[1] = ifil
   logging.debug("association bouts du pipe - faces de filling: %s", idFillingFromBout)
-     
+
   logging.debug("recherche des disques de noeuds complètement internes")
-  idisklim = [] # indices des premier et dernier disques internes
-  idiskout = [] # indices des premier et dernier disques externes
+  idisklim = list() # indices des premier et dernier disques internes
+  idiskout = list() # indices des premier et dernier disques externes
   for bout in range(2):
+
     if bout == 0:
       idisk = -1
       inc = 1
@@ -59,26 +61,28 @@ def elimineExtremitesPipe(ptEdgeFond, facesDefaut, centres, gptsdisks, nbsegCerc
       idisk = len(gptsdisks)
       inc = -1
       numout = len(gptsdisks)
+
     inside = False
     outside = True
     while not inside:
-      idisk = idisk + inc
+      idisk += inc
       logging.debug("examen disque %s", idisk)
       gptdsk = gptsdisks[idisk]
       inside = True
-      for k in range(nbsegCercle):
-        points = gptdsk[k]
-        for j, pt in enumerate(points):
-          side = whichSideVertex(facesDefaut[idFillingFromBout[bout]], pt)
+      for n_seg in range(nbsegCercle):
+        points = gptdsk[n_seg]
+        for point in points:
+          side = whichSideVertex(facesDefaut[idFillingFromBout[bout]], point)
           if side < 0:
             if outside: # premier point detecté dedans
               outside = False
               numout = idisk -inc # le disque précédent était dehors
           else:
-            inside = False # ce point est dehors              
+            inside = False # ce point est dehors
         if not inside and not outside:
           break
+
     idisklim.append(idisk)  # premier et dernier disques internes
     idiskout.append(numout) # premier et dernier disques externes
-    
-  return (idFillingFromBout, idisklim, idiskout)
\ No newline at end of file
+
+  return (idFillingFromBout, idisklim, idiskout)
index 1005eb99cd88c424573de5320a4efa13d8f7a6b8..1f5e36f3f1e60ddb427d7c6dda0d29cdbe0c8389 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""ellipsoide defaut"""
 
 import logging
 import math
+
 from .geomsmesh import geompy
 from .triedreBase import triedreBase
-O, OX, OY, OZ = triedreBase()
 
-# -----------------------------------------------------------------------------
-# --- ellipsoide defaut
+O, OX, OY, OZ = triedreBase()
 
-def ellipsoideDefaut(minRad,allonge,rayTore):
-  """
-  Le bloc contenant la fissure est un ellipsoide construit centre a l'origine,
+def ellipsoideDefaut(minRad,allonge):
+  """Le bloc contenant la fissure est un ellipsoide construit centre a l'origine,
   contenant le tore elliptique de fissure
+
   @param minRad :petit rayon
   @param allonge :rapport grand rayon / petit rayon
-  @param rayTore :rayon du tore construit autour de la generatrice de l'ellipse
   @return  ellipsoide (geomObject)
   """
-  logging.info("start") 
+  logging.info("start")
   boule = geompy.MakeSphereR(2)
   bouler = geompy.MakeRotation(boule, OY, math.pi/2.0)
   face = geompy.MakeFaceHW(100, 100, 3)
index 518f3bce6daa519887238da2483c08798a2c9cd3..f9349ec31582c22407f5e73cd8b4aaf725e44535 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""maillage sain sans la zone de défaut"""
 
 import logging
 
-# -----------------------------------------------------------------------------
-# --- maillage sain sans la zone defaut
 
 def enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges):
-  """
-  Maillage sain sans la zone de defaut
+  """Maillage sain sans la zone de défaut
+
   TODO: a completer
   """
   logging.info('start')
 
   maillageSain.RemoveGroupWithContents(zoneDefaut)
+
   if zoneDefaut_skin is not None:
     maillageSain.RemoveGroupWithContents(zoneDefaut_skin)
+
   if zoneDefaut_internalFaces is not None:
     maillageSain.RemoveGroupWithContents(zoneDefaut_internalFaces)
+
   if zoneDefaut_internalEdges is not None:
     maillageSain.RemoveGroupWithContents(zoneDefaut_internalEdges)
-  nbRemoved = maillageSain.RemoveOrphanNodes()
-  return maillageSain
 
+  _ = maillageSain.RemoveOrphanNodes()
+
+  return maillageSain
index e7ea9b87b056c6e6b465536568b5d8afa3943ac5..5cf709195bb9fe55362fe3671abd85bf747c74b3 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Renvoie l'extraction des shapes d'un objet selon leur position par rapport à la face"""
 
 import logging
+
 from .geomsmesh import geompy
-from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
-from . import initLog
 
 from .whichSide import whichSide
-
-# -----------------------------------------------------------------------------
-# --- renvoie l'extraction des shapes d'un objet selon leur position par rapport à la face.
+from .extractionOrientee_a import extractionOrientee_a
 
 def extractionOrientee(face, obj, ref, shapeType, tol, prefix=""):
   """
@@ -37,36 +34,22 @@ def extractionOrientee(face, obj, ref, shapeType, tol, prefix=""):
   """
   logging.info('start')
   trace = True
-  sideRef = whichSide(face, ref)
-  logging.debug("ref side %s", sideRef)
-  shapesInside = []
-  shapesOutside = []
-  shapesOnside = []
+  side_ref = whichSide(face, ref)
+  logging.debug("ref side %s", side_ref)
+  shapesInside = list()
+  shapesOutside = list()
+  shapesOnside = list()
   shapes = geompy.ExtractShapes(obj, geompy.ShapeType[shapeType], False)
-  i=0
-  j=0
-  k=0
+
+  i_aux = 0
+  j_aux = 0
+  k_aux = 0
   prefix = prefix + shapeType
   for shape in shapes:
     side = whichSide(face, shape, tol)
-    if side == sideRef:
-      shapesInside.append(shape)
-      if trace:
-        name = prefix + "_Inside%d"%i
-        geomPublishInFather(initLog.debug, obj, shape, name)
-      i+=1
-    elif side == -sideRef:
-      shapesOutside.append(shape)
-      if trace:
-        name = prefix + "_Outside%d"%j
-        geomPublishInFather(initLog.debug, obj, shape, name)
-      j+=1
-    elif side == 0:
-      shapesOnside.append(shape)
-      if trace:
-        name = prefix + "_Onside%d"%k
-        geomPublishInFather(initLog.debug, obj, shape, name)
-      k+=1
-    logging.debug("--- shape was %s", name)
-  return [shapesInside, shapesOutside, shapesOnside]
+    i_aux, j_aux, k_aux = extractionOrientee_a(obj, shape, side, side_ref, \
+                                               shapesInside, shapesOutside, shapesOnside, \
+                                               i_aux, j_aux, k_aux, \
+                                               trace, prefix)
 
+  return [shapesInside, shapesOutside, shapesOnside]
index 661793a64090f2ec1b9e9c870fe3ac520bb67883..eb58629a1b0442a25c19c4c2ae4f426f669d3da7 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Renvoie l'extraction des shapes d'un objet selon leur position par rapport à la fac"""
 
 import logging
+
 from .geomsmesh import geompy
-from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
-from . import initLog
 
 from .whichSideMulti import whichSideMulti
-
-# -----------------------------------------------------------------------------
-# --- renvoie l'extraction des shapes d'un objet selon leur position par rapport à la face.
+from .extractionOrientee_a import extractionOrientee_a
 
 def extractionOrienteeMulti(faces, ifil, obj, centre, shapeType, tol, prefix=""):
   """
@@ -37,34 +34,20 @@ def extractionOrienteeMulti(faces, ifil, obj, centre, shapeType, tol, prefix="")
   """
   logging.info('start')
   trace = True
-  shapesInside = []
-  shapesOutside = []
-  shapesOnside = []
+  shapesInside = list()
+  shapesOutside = list()
+  shapesOnside = list()
   shapes = geompy.ExtractShapes(obj, geompy.ShapeType[shapeType], False)
-  i=0
-  j=0
-  k=0
+
+  i_aux = 0
+  j_aux = 0
+  k_aux = 0
   prefix = prefix + shapeType
   for shape in shapes:
     side = whichSideMulti(faces, ifil, shape, centre, tol)
-    if side == 1:
-      shapesInside.append(shape)
-      if trace:
-        name = prefix + "_Inside%d"%i
-        geomPublishInFather(initLog.debug, obj, shape, name)
-      i+=1
-    elif side == -1:
-      shapesOutside.append(shape)
-      if trace:
-        name = prefix + "_Outside%d"%j
-        geomPublishInFather(initLog.debug, obj, shape, name)
-      j+=1
-    elif side == 0:
-      shapesOnside.append(shape)
-      if trace:
-        name = prefix + "_Onside%d"%k
-        geomPublishInFather(initLog.debug, obj, shape, name)
-      k+=1
-    logging.debug("--- shape was %s", name)
-  return [shapesInside, shapesOutside, shapesOnside]
+    i_aux, j_aux, k_aux = extractionOrientee_a(obj, shape, side, 1, \
+                                               shapesInside, shapesOutside, shapesOnside, \
+                                               i_aux, j_aux, k_aux, \
+                                               trace, prefix)
 
+  return [shapesInside, shapesOutside, shapesOnside]
diff --git a/src/Tools/blocFissure/gmu/extractionOrientee_a.py b/src/Tools/blocFissure/gmu/extractionOrientee_a.py
new file mode 100644 (file)
index 0000000..e48aff7
--- /dev/null
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Détermine le bon côté"""
+
+import logging
+from . import initLog
+
+from .geomsmesh import geomPublishInFather
+
+def extractionOrientee_a(obj, shape, side, side_ref, \
+                         shapesInside, shapesOutside, shapesOnside, \
+                         i_aux, j_aux, k_aux, \
+                         trace=True, prefix=""):
+  """Détermine le bon côté"""
+  #logging.info('start')
+
+  if side == side_ref:
+    shapesInside.append(shape)
+    if trace:
+      name = prefix + "_Inside%d"%i_aux
+      geomPublishInFather(initLog.debug, obj, shape, name)
+    i_aux += 1
+
+  elif side == -side_ref:
+    shapesOutside.append(shape)
+    if trace:
+      name = prefix + "_Outside%d"%j_aux
+      geomPublishInFather(initLog.debug, obj, shape, name)
+    j_aux += 1
+
+  elif side == 0:
+    shapesOnside.append(shape)
+    if trace:
+      name = prefix + "_Onside%d"%k_aux
+      geomPublishInFather(initLog.debug, obj, shape, name)
+    k_aux += 1
+
+  logging.debug("--- shape was %s", name)
+
+  return i_aux, j_aux, k_aux
index 5543d398fa18e0000f6e319993ec6e1c06eae1e2..bef2dae6e25613bf9564d467e06bf5e39ccf676c 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Tore : faces 1/2 circulaires et leur centre, edges de ces faces dans le plan de fissure"""
 
 import logging
-from .geomsmesh import geompy
-from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
+
 from . import initLog
 
-# -----------------------------------------------------------------------------
-# --- TORE
-## --- faces 1/2 circulaires et leur centre, edges de ces faces dans le plan de fissure
+import GEOM
+
+from .geomsmesh import geompy
+from .geomsmesh import geomPublishInFather
 
 def facesCirculaires(bloc, tore):
   """
@@ -41,59 +41,42 @@ def facesCirculaires(bloc, tore):
 
   faces = geompy.GetShapesOnShape(bloc, tore, geompy.ShapeType["FACE"], GEOM.ST_ON)
 
-  geomPublishInFather(initLog.debug, tore, faces[0], 'face0' )
-  geomPublishInFather(initLog.debug, tore, faces[1], 'face1' )
-  geomPublishInFather(initLog.debug, tore, faces[2], 'face2' )
-  geomPublishInFather(initLog.debug, tore, faces[3], 'face3' )
-
-  centres = [None, None, None, None]
-  [v1,centres[0],v3] = geompy.ExtractShapes(faces[0], geompy.ShapeType["VERTEX"], True)
-  [v1,centres[1],v3] = geompy.ExtractShapes(faces[1], geompy.ShapeType["VERTEX"], True)
-  [v1,centres[2],v3] = geompy.ExtractShapes(faces[2], geompy.ShapeType["VERTEX"], True)
-  [v1,centres[3],v3] = geompy.ExtractShapes(faces[3], geompy.ShapeType["VERTEX"], True)
+  centres = list()
+  alledges = list()
+  for i_aux in range(4):
+    geomPublishInFather(initLog.debug, tore, faces[i_aux], 'face{}'.format(i_aux))
+    [_,centre,_] = geompy.ExtractShapes(faces[i_aux], geompy.ShapeType["VERTEX"], True)
+    centres.append(centre)
+    geomPublishInFather(initLog.debug, faces[i_aux], centre, 'centre{}'.format(i_aux))
+    alledges.append(geompy.ExtractShapes(faces[i_aux], geompy.ShapeType["EDGE"], True))
 
-  geomPublishInFather(initLog.debug, faces[0], centres[0], 'centre0' )
-  geomPublishInFather(initLog.debug, faces[1], centres[1], 'centre1' )
-  geomPublishInFather(initLog.debug, faces[2], centres[2], 'centre2' )
-  geomPublishInFather(initLog.debug, faces[3], centres[3], 'centre3' )
+  dicoedge = dict()
+  edges = list()
+  reverses = list()
 
-  alledges = [None, None, None, None]
-  alledges[0] = geompy.ExtractShapes(faces[0], geompy.ShapeType["EDGE"], True)
-  alledges[1] = geompy.ExtractShapes(faces[1], geompy.ShapeType["EDGE"], True)
-  alledges[2] = geompy.ExtractShapes(faces[2], geompy.ShapeType["EDGE"], True)
-  alledges[3] = geompy.ExtractShapes(faces[3], geompy.ShapeType["EDGE"], True)
+  for i_aux, edgesface in enumerate(alledges):
 
-  dicoedge = {}
-  edges = []
-  reverses = []
-  for i in range(len(alledges)):
-    edgesface = alledges[i]
-    lenef = []
-    for j in range(len(edgesface)):
-      props = geompy.BasicProperties(edgesface[j])
+    lenef = list()
+    for edge in edgesface:
+      props = geompy.BasicProperties(edge)
       lenef.append(props[0])
-      pass
+
     maxlen = max(lenef)
-    for j in range(len(edgesface)):
-      if lenef[j] < maxlen:
-        edgid = geompy.GetSubShapeID(tore, edgesface[j])
+    for j_aux, edge in enumerate(edgesface):
+      if lenef[j_aux] < maxlen:
+        edgid = geompy.GetSubShapeID(tore, edge)
         if not (edgid in dicoedge):
-          dicoedge[edgid] = edgesface[j]
-          edges.append(edgesface[j])
-          named = 'edge_' + str(i) + '_' +str(j)
-          geomPublishInFather(initLog.debug, faces[i], edgesface[j], named)
-          vertices = geompy.ExtractShapes(edgesface[j], geompy.ShapeType["VERTEX"], False)
-          #firstVertex = geompy.GetFirstVertex(edgesface[j])
-          if geompy.GetSubShapeID(tore, vertices[0]) != geompy.GetSubShapeID(tore, centres[i]):
+          dicoedge[edgid] = edge
+          edges.append(edge)
+          named = 'edge_{}_{}'.format(i_aux,j_aux)
+          geomPublishInFather(initLog.debug, faces[i_aux], edge, named)
+          vertices = geompy.ExtractShapes(edge, geompy.ShapeType["VERTEX"], False)
+          #firstVertex = geompy.GetFirstVertex(edge)
+          if geompy.GetSubShapeID(tore, vertices[0]) != geompy.GetSubShapeID(tore, centres[i_aux]):
             reverses.append(1)
             #print 'reversed ' + str(edgid)
           else:
             reverses.append(0)
             #print 'normal' + str(edgid)
-          pass
-        pass
-      pass
-    pass
 
   return faces, centres, edges, reverses
-
index 4858042929a0ab206724bf646659e37ca2c99a55..23551e8bd8312504711d48ed5cf8e8c5108d5f39 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Faces fissure dans et hors tore, et edges face hors tore"""
 
 import logging
-from .geomsmesh import geompy
-from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
+
+import GEOM
+
 from . import initLog
 
-# -----------------------------------------------------------------------------
-# --- faces fissure dans et hors tore, et edges face hors tore
+from .geomsmesh import geompy
+from .geomsmesh import geomPublishInFather
 
 def facesFissure(blocp, faceFissure, extrusionDefaut, genint):
-  """
-  extraction des faces de fissure dans et hors tore, des edges le long du tore et en paroi
+  """Extraction des faces de fissure dans et hors tore, des edges le long du tore et en paroi
+
   @param faceFissure : la face de fissure avec la partie dans le tore elliptique et la partie externe
   @return (facefissintore, facefissoutore, edgeint, edgeext)
   """
   logging.info('start')
 
-  [f0,f1] = geompy.ExtractShapes(faceFissure, geompy.ShapeType["FACE"], True)
-  ed0 = geompy.ExtractShapes(f0, geompy.ShapeType["EDGE"], True)
-  ed1 = geompy.ExtractShapes(f1, geompy.ShapeType["EDGE"], True)
+  [face_0,face_1] = geompy.ExtractShapes(faceFissure, geompy.ShapeType["FACE"], True)
+  ed0 = geompy.ExtractShapes(face_0, geompy.ShapeType["EDGE"], True)
+  ed1 = geompy.ExtractShapes(face_1, geompy.ShapeType["EDGE"], True)
   if len(ed0) > len(ed1):
-    facefissintore = f0
-    facefissoutore = f1
+    facefissintore = face_0
+    facefissoutore = face_1
   else:
-    facefissintore = f1
-    facefissoutore = f0
+    facefissintore = face_1
+    facefissoutore = face_0
 
   geomPublishInFather(initLog.debug, faceFissure, facefissintore,'facefissintore')
   geomPublishInFather(initLog.debug, faceFissure, facefissoutore,'facefissoutore')
@@ -51,18 +52,18 @@ def facesFissure(blocp, faceFissure, extrusionDefaut, genint):
   edgeint = geompy.GetShapesOnShape(extrusionDefaut, facefissoutore, geompy.ShapeType["EDGE"], GEOM.ST_IN)
   edgeext = geompy.GetShapesOnShape(extrusionDefaut, facefissoutore, geompy.ShapeType["EDGE"], GEOM.ST_ON)
 
-  for i in range(len(edgeint)):
-    name = "edgeint_%d"%i
-    geomPublishInFather(initLog.debug, facefissoutore, edgeint[i],name)
-  for i in range(len(edgeext)):
-    name = "edgeext_%d"%i
-    geomPublishInFather(initLog.debug, facefissoutore, edgeext[i],name)
+  for i_aux, edge in enumerate(edgeint):
+    name = "edgeint_{}".format(i_aux)
+    geomPublishInFather(initLog.debug, facefissoutore, edge,name)
+  for i_aux, edge in enumerate(edgeext):
+    name = "edgeext_{}".format(i_aux)
+    geomPublishInFather(initLog.debug, facefissoutore, edge,name)
 
-  reverext = []
+  reverext = list()
   if len(edgeext) > 1:
     vertices = geompy.ExtractShapes(genint, geompy.ShapeType["VERTEX"], False)
-    for i in range(len(edgeext)):
-      vertedge = geompy.ExtractShapes(edgeext[i], geompy.ShapeType["VERTEX"], False)
+    for edge in edgeext:
+      vertedge = geompy.ExtractShapes(edge, geompy.ShapeType["VERTEX"], False)
       if ((geompy.GetSubShapeID(blocp, vertedge[0]) == geompy.GetSubShapeID(blocp, vertices[0])) or
           (geompy.GetSubShapeID(blocp, vertedge[0]) == geompy.GetSubShapeID(blocp, vertices[1]))):
         reverext.append(0)
index c71da68cf506a17004c2b3eee4631399bc9829ff..66d605fc4f6e826b671ed4b8db1185a9125ce2ec 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Identification des faces tore et fissure dans le solide hors tore du bloc partitionné"""
 
 import logging
-from .geomsmesh import geompy
-from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
+
 from . import initLog
 
-# -----------------------------------------------------------------------------
-# --- identification des faces tore et fissure dans le solide hors tore du bloc partitionné
+from .geomsmesh import geompy
+from .geomsmesh import geomPublishInFather
 
 def facesToreInBloc(blocp, facefissoutore, facetore1, facetore2):
-  """
-  identification des faces tore et fissure dans le bloc partitionné : sous shapes du bloc
+  """Identification des faces tore et fissure dans le bloc partitionné : sous shapes du bloc
+
   @param blocp : bloc partitionné
   @param facefissoutore : la face de fissure externe au tore
   @param facetore1 : face du tore selon la génératrice
@@ -47,4 +46,3 @@ def facesToreInBloc(blocp, facefissoutore, facetore1, facetore2):
   geomPublishInFather(initLog.debug, blocp, blocFaceTore2,'blocFaceTore2')
 
   return blocFaceFiss, blocFaceTore1, blocFaceTore2
-
index 4186cc34e1a3a66fefb14f4b9d2cd00011fe22fe..a17880dfbcf29efadf7dd8a88687be1303cf36b8 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Tore : aces toriques et volumes du tore"""
 
 import logging
+
+from . import initLog
+
 from .geomsmesh import geompy
-from .geomsmesh import geomPublish
 from .geomsmesh import geomPublishInFather
-from . import initLog
+
 from .extractionOrientee import extractionOrientee
 from .getSubshapeIds import getSubshapeIds
 
-# -----------------------------------------------------------------------------
-# --- TORE
-# --- faces toriques  et volumes du tore
-
 def facesVolumesToriques(tore, plan, facesDefaut):
   """
   Extraction des deux faces  et volumes du tore partitionné, qui suivent la génératrice elliptique.
@@ -43,28 +42,25 @@ def facesVolumesToriques(tore, plan, facesDefaut):
   normal = geompy.GetNormal(plan, centre)
   reference = geompy.MakeTranslationVector(centre, normal)
 
-  [facesInPlan, facesOutPlan, facesOnPlan] = extractionOrientee(plan, tore, reference, "FACE", 1.e-2, "faceTorePlan_")
-  [facesInSide, facesOutSide, facesOnSide] = extractionOrientee(facesDefaut, tore, reference, "FACE", 1.e-2, "faceTorePeau_")
+  [facesInPlan, facesOutPlan, _] = extractionOrientee(plan, tore, reference, "FACE", 1.e-2, "faceTorePlan_")
   facesIdInPlan = getSubshapeIds(tore, facesInPlan)
   facesIdOutPlan = getSubshapeIds(tore, facesOutPlan)
+
+  [_, _, facesOnSide] = extractionOrientee(facesDefaut, tore, reference, "FACE", 1.e-2, "faceTorePeau_")
   facesIdOnSide = getSubshapeIds(tore, facesOnSide)
-  facesIdInSide = getSubshapeIds(tore, facesInSide)
-  facesIdOutSide = getSubshapeIds(tore, facesOutSide)
-  #facesIdInOutSide = facesIdInSide + facesIdOutSide
+
   facetore1 = None
-  faceTore2 = None
-  for i, faceId in enumerate(facesIdInPlan):
+  for i_aux, faceId in enumerate(facesIdInPlan):
     if faceId not in facesIdOnSide:
-      facetore1 = facesInPlan[i]
+      facetore1 = facesInPlan[i_aux]
       break
-  for i, faceId in enumerate(facesIdOutPlan):
+  geomPublishInFather(initLog.debug, tore, facetore1, 'facetore1' )
+
+  facetore2 = None
+  for i_aux, faceId in enumerate(facesIdOutPlan):
     if faceId not in facesIdOnSide:
-      facetore2 = facesOutPlan[i]
+      facetore2 = facesOutPlan[i_aux]
       break
-
-  #[facetore1,facetore2] = geompy.GetShapesOnShape(pipe0, tore, geompy.ShapeType["FACE"], GEOM.ST_ON)
-
-  geomPublishInFather(initLog.debug, tore, facetore1, 'facetore1' )
   geomPublishInFather(initLog.debug, tore, facetore2, 'facetore2' )
 
   [volumeTore1, volumeTore2] = geompy.ExtractShapes(tore, geompy.ShapeType["SOLID"], True)
index 82ea4d62e8315a13b5fc8b0097ee3f91e1a9a21c..5ef2b82bec850e1288ed60871839db89d7acf246 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Trouver les vertices aux extrémites d'un wire"""
 
 import logging
+
 from .geomsmesh import geompy
-from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
-from . import initLog
 
-# -----------------------------------------------------------------------------
-# --- trouver les vertices extremites d'un wire
+from .findWireVertices import findWireVertices
 
 def findWireEndVertices(aWire, getNormals=False):
-  """
-  trouver les vertices extremites d'un wire
-  calcul optionnel des tangentes. Attention à la tolérance qui peut être élevée (> 0.001)
+  """Trouver les vertices aux extrémites d'un wire
+
+  Calcul optionnel des tangentes. Attention à la tolérance qui peut être élevée (> 0.001)
   """
   logging.info("start")
   if geompy.NumberOfEdges(aWire) > 1:
     edges = geompy.ExtractShapes(aWire, geompy.ShapeType["EDGE"], False)
   else:
     edges = [aWire]
-  vertices = []
-  idsubs = {}
-  shortList = []
-  if getNormals:
-    normals = []
-    idnorm = {}
-    shortNorm = []
-  for edge in edges:
-    vert = geompy.ExtractShapes(edge, geompy.ShapeType["VERTEX"], False)
-    vertices += vert
-    if getNormals:
-      v0 = geompy.MakeVertexOnCurve(edge, 0.0)
-      n0 = geompy.MakeTangentOnCurve(edge, 0.0)
-      v1 = geompy.MakeVertexOnCurve(edge, 1.0)
-      n1 = geompy.MakeTangentOnCurve(edge, 1.0)
-      dist = geompy.MinDistance(v0, vert[0])
-      logging.debug("distance %s", dist)
-      if dist < 1.e-2:
-        normals += [n0, n1]
-      else:
-        normals += [n1, n0]
-  for i, sub in enumerate(vertices):
-    subid = geompy.GetSubShapeID(aWire, sub)
-    if subid in list(idsubs.keys()):
-      idsubs[subid].append(sub)
-    else:
-      idsubs[subid] = [sub]
-      name='vertex%d'%i
-      geomPublishInFather(initLog.debug, aWire, sub, name)
-      if getNormals:
-        idnorm[subid] = normals[i]
-        name='norm%d'%i
-        geomPublishInFather(initLog.debug, aWire, normals[i], name)
-  logging.debug("idsubs: %s", idsubs)
-  for k, v in idsubs.items():
-    if len(v) == 1:
-      shortList.append(v[0])
+
+  idsubs, idnorm = findWireVertices(aWire, edges, getNormals)
+
+  shortList = list()
+  shortNorm = list()
+  for k_aux, sub in idsubs.items():
+    if ( len(sub) == 1 ):
+      shortList.append(sub[0])
       if getNormals:
-        shortNorm.append(idnorm[k])
-  if getNormals:
-    return shortList, shortNorm
-  else:
-    return shortList
+        shortNorm.append(idnorm[k_aux])
 
+  return shortList, shortNorm
index 0f5cdbe3066f79309b615b2a4442b9c1a732349b..c1c20535a62a5435850be65f2a4a2cdc0bb3ee8c 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Trouver les vertices intermédiaires d'un wire"""
 
 import logging
+
 from .geomsmesh import geompy
-from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
-from . import initLog
+
+from .findWireVertices import findWireVertices
 
 # -----------------------------------------------------------------------------
 # --- trouver les vertices intermediaires d'un wire
 
 def findWireIntermediateVertices(aWire, getNormals=False):
-  """
-  trouver les vertices d'un wire qui ne sont pas aux extremités
-  calcul optionnel des tangentes. Attention à la tolérance qui peut être élevée (> 0.001)
+  """Trouver les vertices d'un wire qui ne sont pas aux extremités
+
+  Calcul optionnel des tangentes. Attention à la tolérance qui peut être élevée (> 0.001)
   """
   logging.info("start")
   edges = geompy.ExtractShapes(aWire, geompy.ShapeType["EDGE"], False)
-  vertices = []
-  idsubs = {}
-  shortList = []
-  if getNormals:
-    normals = []
-    idnorm = {}
-    shortNorm = []
-  for edge in edges:
-    vert = geompy.ExtractShapes(edge, geompy.ShapeType["VERTEX"], False)
-    vertices += vert
-    if getNormals:
-      v0 = geompy.MakeVertexOnCurve(edge, 0.0)
-      n0 = geompy.MakeTangentOnCurve(edge, 0.0)
-      v1 = geompy.MakeVertexOnCurve(edge, 1.0)
-      n1 = geompy.MakeTangentOnCurve(edge, 1.0)
-      dist = geompy.MinDistance(v0, vert[0])
-      logging.debug("distance %s", dist)
-      if dist < 1.e-2:
-        normals += [n0, n1]
-      else:
-        normals += [n1, n0]
-  for i, sub in enumerate(vertices):
-    subid = geompy.GetSubShapeID(aWire, sub)
-    if subid in list(idsubs.keys()):
-      idsubs[subid].append(sub)
-    else:
-      idsubs[subid] = [sub]
-      name='vertex%d'%i
-      geomPublishInFather(initLog.debug, aWire, sub, name)
-      if getNormals:
-        idnorm[subid] = normals[i]
-        name='norm%d'%i
-        geomPublishInFather(initLog.debug, aWire, normals[i], name)
-  for k, v in idsubs.items():
-    if len(v) > 1:
-      shortList.append(v[0])
+
+  idsubs, idnorm = findWireVertices(aWire, edges, getNormals)
+
+  shortList = list()
+  shortNorm = list()
+  for k_aux, sub in idsubs.items():
+    if ( len(sub) > 1 ):
+      shortList.append(sub[0])
       if getNormals:
-        shortNorm.append(idnorm[k])
-  if getNormals:
-    return shortList, shortNorm
-  else:
-    return shortList
+        shortNorm.append(idnorm[k_aux])
 
+  return shortList, shortNorm
diff --git a/src/Tools/blocFissure/gmu/findWireVertices.py b/src/Tools/blocFissure/gmu/findWireVertices.py
new file mode 100644 (file)
index 0000000..ad5da7e
--- /dev/null
@@ -0,0 +1,69 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Trouver les vertices d'un wire"""
+
+import logging
+
+from . import initLog
+
+from .geomsmesh import geompy
+from .geomsmesh import geomPublishInFather
+
+def findWireVertices(aWire, edges, getNormals=False):
+  """Trouver les vertices d'un wire
+
+  Calcul optionnel des tangentes. Attention à la tolérance qui peut être élevée (> 0.001)
+  """
+  logging.info("start")
+  vertices = list()
+  idsubs = dict()
+  idnorm = dict()
+  if getNormals:
+    normals = list()
+
+  for edge in edges:
+    vert = geompy.ExtractShapes(edge, geompy.ShapeType["VERTEX"], False)
+    vertices += vert
+    if getNormals:
+      vertex_0 = geompy.MakeVertexOnCurve(edge, 0.0)
+      tangente_0 = geompy.MakeTangentOnCurve(edge, 0.0)
+      tangente_1 = geompy.MakeTangentOnCurve(edge, 1.0)
+      dist = geompy.MinDistance(vertex_0, vert[0])
+      logging.debug("distance %s", dist)
+      if dist < 1.e-2:
+        normals += [tangente_0, tangente_1]
+      else:
+        normals += [tangente_1, tangente_0]
+
+  for nro, sub in enumerate(vertices):
+    subid = geompy.GetSubShapeID(aWire, sub)
+    if subid in list(idsubs.keys()):
+      idsubs[subid].append(sub)
+    else:
+      idsubs[subid] = [sub]
+      name='vertex{}'.format(nro)
+      geomPublishInFather(initLog.debug, aWire, sub, name)
+      if getNormals:
+        idnorm[subid] = normals[nro]
+        name='norm{}'.format(nro)
+        geomPublishInFather(initLog.debug, aWire, normals[nro], name)
+  logging.debug("idsubs: %s", idsubs)
+
+  return idsubs, idnorm
index b2ea492ec0394b4c12285914477c641a06fd2238..9ef507a3b4c8d70cedf1e69e5ae706a259d0816d 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2016-2020  EDF R&D
+# Copyright (C) 2016-2024  EDF
 #
 # 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
 #
+"""Message d'erreur"""
 
 class fissError(Exception):
-  """
-  usage:
+  """ Usage:
   try:
     instructions()
   except:
-    raise fissError(traceback.extract_stack(),"mon message")  
+    raise fissError(traceback.extract_stack(),"mon message")
   """
   def __init__(self, pile, msg):
-    self.pile = pile    
+    self.pile = pile
     self.msg = msg
 
   def __str__(self):
-    return 'msg=%s\npile=%s\n'%(self.msg, repr(self.pile))
-  
+    return 'msg={}\npile={}\n'.format(self.msg, repr(self.pile))
index 95cf1904ec4d688af4f6bebfe87252866a316c82..f8ce927f03ec780398840ae7eadd854fcc5470da 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Fissure dans un coude"""
 
-from .geomsmesh import geompy, smesh
-from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
-from . import initLog
-
+import logging
+import os
 import math
+
 import GEOM
-import SALOMEDS
 import SMESH
-#import StdMeshers
-#import GHS3DPlugin
-#import NETGENPlugin
-import logging
+
+from . import initLog
+
+from .geomsmesh import geompy, smesh
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
 
 from .fissureGenerique import fissureGenerique
 
@@ -39,16 +39,17 @@ from .genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
 from .creeZoneDefautDansObjetSain import creeZoneDefautDansObjetSain
 from .construitFissureGenerale import construitFissureGenerale
 from .sortEdges import sortEdges
+from .putName import putName
 
 O, OX, OY, OZ = triedreBase()
 
 class fissureCoude(fissureGenerique):
-  """
-  problème de fissure du Coude : version de base
-  maillage hexa
-  """
+  """Problème de fissure du Coude : version de base - maillage hexa"""
 
-  nomProbleme = "tuyau_Coude"
+  nomProbleme = "fissureCoude"
+  longitudinale = None
+  circonferentielle = None
+  elliptique = None
 
   # ---------------------------------------------------------------------------
   def setParamGeometrieSaine(self):
@@ -70,6 +71,7 @@ class fissureCoude(fissureGenerique):
 
   # ---------------------------------------------------------------------------
   def genereGeometrieSaine(self, geomParams):
+    """a écrire"""
     logging.info("genereGeometrieSaine %s", self.nomCas)
 
     angleCoude = geomParams['angleCoude']
@@ -90,22 +92,22 @@ class fissureCoude(fissureGenerique):
     Rotation_2 = geompy.MakeRotation(OZ, OY, angleCoude*math.pi/180.0)
     tube_2 = geompy.MakePrismVecH(Rotation_1, Rotation_2, -l_tube_p2)
     plan_y = geompy.MakePlaneLCS(None, 100000, 3)
-    geomPublish(initLog.debug,  plan_y, "plan_y" )
-    geomPublish(initLog.debug,  tube_1, "tube_1" )
-    geomPublish(initLog.debug,  coude, "coude" )
-    geomPublish(initLog.debug,  tube_2, "tube_2" )
+    geomPublish(initLog.debug, plan_y, "plan_y", self.numeroCas )
+    geomPublish(initLog.debug, tube_1, "tube_1", self.numeroCas )
+    geomPublish(initLog.debug, coude, "coude", self.numeroCas )
+    geomPublish(initLog.debug, tube_2, "tube_2", self.numeroCas )
 
     P1 = O
-    geompy.addToStudy(P1, "P1" )
+    geomPublish(initLog.always, P1, "P1", self.numeroCas )
     op2 = geompy.MakeVertex(0, 0, -l_tube_p1)
     P2 = geompy.MakeRotation(op2, axe, angleCoude*math.pi/180.0)
     P2 = geompy.MakeTranslationVectorDistance(P2, Rotation_2, -l_tube_p2)
-    geompy.addToStudy(P2, "P2" )
+    geomPublish(initLog.always, P2, "P2", self.numeroCas )
 
     # --- tube coude sain
 
     geometrieSaine = geompy.MakePartition([tube_1, coude, tube_2, P1, P2], [plan_y], [], [], geompy.ShapeType["SOLID"], 0, [], 1)
-    geomPublish(initLog.debug,  geometrieSaine, self.nomCas )
+    geomPublish(initLog.debug, geometrieSaine, self.nomCas, self.numeroCas )
     [P1, P2] = geompy.RestoreGivenSubShapes(geometrieSaine, [P1, P2], GEOM.FSM_GetInPlaceByHistory, False, True)
 
     xmin = -de -r_cintr -l_tube_p2
@@ -145,7 +147,7 @@ class fissureCoude(fissureGenerique):
     grped = geompy.CutGroups(grped, long_p2)
     ep = geompy.CutGroups(grped, long_coude)
     geomPublishInFather(initLog.debug, geometrieSaine, long_p1, 'long_p1' )
-    geomPublishInFather(initLog.debug, geometrieSaine, ep, 'ep' )
+    geomPublishInFather(initLog.debug, geometrieSaine, ep, 'ep')
     geomPublishInFather(initLog.debug, geometrieSaine, long_coude, 'long_coude' )
     geomPublishInFather(initLog.debug, geometrieSaine, circ_g, 'circ_g' )
     geomPublishInFather(initLog.debug, geometrieSaine, circ_d, 'circ_d' )
@@ -162,7 +164,7 @@ class fissureCoude(fissureGenerique):
 
     edge1Ids = geompy.GetShapesOnPlaneIDs(geometrieSaine, geompy.ShapeType["EDGE"], OZ, GEOM.ST_ON)
     edge2Ids = geompy.GetShapesOnCylinderIDs(geometrieSaine, geompy.ShapeType["EDGE"], OZ, de/2. -epais, GEOM.ST_ON)
-    edgesIds = []
+    edgesIds = list()
     for edge in edge1Ids:
       if edge in edge2Ids:
         edgesIds.append(edge)
@@ -174,7 +176,7 @@ class fissureCoude(fissureGenerique):
 
     pp2 = geompy.MakeTranslationVectorDistance(P2, Rotation_2, 10)
     vec2 = geompy.MakeVector(P2, pp2)
-    #geomPublish(initLog.debug, vec2, 'vec2')
+    #geomPublish(initLog.debug, vec2, 'vec2', self.numeroCas)
     facesIds = geompy.GetShapesOnPlaneIDs(geometrieSaine, geompy.ShapeType["FACE"], vec2, GEOM.ST_ON)
     CLGV = geompy.CreateGroup(geometrieSaine, geompy.ShapeType["FACE"])
     geompy.UnionIDs(CLGV, facesIds)
@@ -188,7 +190,7 @@ class fissureCoude(fissureGenerique):
     extru2 = geompy.MakePrismVecH(rot1, Rotation_2, -l_tube_p2)
     interne = geompy.MakeFuse(extru1, revol1)
     interne = geompy.MakeFuse(extru2, interne)
-    geomPublish(initLog.debug, interne, 'interne')
+    geomPublish(initLog.debug, interne, 'interne', self.numeroCas)
     facesIds = geompy.GetShapesOnShapeIDs(interne, geometrieSaine, geompy.ShapeType["FACE"], GEOM.ST_ONIN)
     PEAUINT = geompy.CreateGroup(geometrieSaine, geompy.ShapeType["FACE"])
     geompy.UnionIDs(PEAUINT, facesIds)
@@ -203,7 +205,7 @@ class fissureCoude(fissureGenerique):
     extru2 = geompy.MakePrismVecH(rot1, Rotation_2, -l_tube_p2)
     externe = geompy.MakeFuse(extru1, revol1)
     externe = geompy.MakeFuse(extru2, externe)
-    geomPublish(initLog.debug, externe, 'externe')
+    geomPublish(initLog.debug, externe, 'externe', self.numeroCas)
     facesIds = geompy.GetShapesOnShapeIDs(externe, geometrieSaine, geompy.ShapeType["FACE"], GEOM.ST_ON)
     PEAUEXT = geompy.CreateGroup(geometrieSaine, geompy.ShapeType["FACE"])
     geompy.UnionIDs(PEAUEXT, facesIds)
@@ -257,52 +259,52 @@ class fissureCoude(fissureGenerique):
     n_long_p2    = meshParams['n_long_p2']
 
     maillageSain = smesh.Mesh(geometrieSaine)
+    putName(maillageSain, "maillageSain", i_pref=self.numeroCas)
 
     algo3d = maillageSain.Hexahedron()
     algo2d = maillageSain.Quadrangle()
-    smesh.SetName(algo3d, "algo3d_maillageSain")
-    smesh.SetName(algo2d, "algo2d_maillageSain")
 
     algo1d_long_p1 = maillageSain.Segment(geom=long_p1)
     hypo1d_long_p1 = algo1d_long_p1.NumberOfSegments(n_long_p1)
-    smesh.SetName(algo1d_long_p1, "algo1d_long_p1")
-    smesh.SetName(hypo1d_long_p1, "hypo1d_long_p1")
+    putName(hypo1d_long_p1, "n_long_p1={}".format(n_long_p1), i_pref=self.numeroCas)
 
     algo1d_ep = maillageSain.Segment(geom=ep)
     hypo1d_ep = algo1d_ep.NumberOfSegments(n_ep)
-    smesh.SetName(algo1d_ep, "algo1d_ep")
-    smesh.SetName(hypo1d_ep, "hypo1d_ep")
+    putName(hypo1d_ep, "n_ep={}".format(n_ep), i_pref=self.numeroCas)
 
     algo1d_long_coude = maillageSain.Segment(geom=long_coude)
     hypo1d_long_coude = algo1d_long_coude.NumberOfSegments(n_long_coude)
-    smesh.SetName(algo1d_long_coude, "algo1d_long_coude")
-    smesh.SetName(hypo1d_long_coude, "hypo1d_long_coude")
+    putName(hypo1d_long_coude, "n_long_coude={}".format(n_long_coude), i_pref=self.numeroCas)
 
     algo1d_circ_g = maillageSain.Segment(geom=circ_g)
     hypo1d_circ_g = algo1d_circ_g.NumberOfSegments(n_circ_g)
-    smesh.SetName(algo1d_circ_g, "algo1d_circ_g")
-    smesh.SetName(hypo1d_circ_g, "hypo1d_circ_g")
+    putName(hypo1d_circ_g, "n_circ_g={}".format(n_circ_g), i_pref=self.numeroCas)
 
     algo1d_circ_d = maillageSain.Segment(geom=circ_d)
     hypo1d_circ_d = algo1d_circ_d.NumberOfSegments(n_circ_d)
-    smesh.SetName(algo1d_circ_d, "algo1d_circ_d")
-    smesh.SetName(hypo1d_circ_d, "hypo1d_circ_d")
+    putName(hypo1d_circ_d, "n_circ_d={}".format(n_circ_d), i_pref=self.numeroCas)
 
     algo1d_long_p2 = maillageSain.Segment(geom=long_p2)
     hypo1d_long_p2 = algo1d_long_p2.NumberOfSegments(n_long_p2)
-    smesh.SetName(algo1d_long_p2, "algo1d_long_p2")
-    smesh.SetName(hypo1d_long_p2, "hypo1d_long_p2")
-
-    isDone = maillageSain.Compute()
-
-    mp1 = maillageSain.GroupOnGeom(P1,'P1',SMESH.NODE)
-    mp2 = maillageSain.GroupOnGeom(P2,'P2',SMESH.NODE)
-    ext = maillageSain.GroupOnGeom(EXTUBE,'EXTUBE',SMESH.FACE)
-    btu = maillageSain.GroupOnGeom(BORDTU,'BORDTU',SMESH.EDGE)
-    clg = maillageSain.GroupOnGeom(CLGV,'CLGV',SMESH.FACE)
-    pei = maillageSain.GroupOnGeom(PEAUINT,'PEAUINT',SMESH.FACE)
-    pex = maillageSain.GroupOnGeom(PEAUEXT,'PEAUEXT',SMESH.FACE)
-    cou = maillageSain.GroupOnGeom(COUDE,'COUDSAIN',SMESH.VOLUME)
+    putName(hypo1d_long_p2, "n_long_p2={}".format(n_long_p2), i_pref=self.numeroCas)
+
+    _ = maillageSain.GroupOnGeom(P1,'P1',SMESH.NODE)
+    _ = maillageSain.GroupOnGeom(P2,'P2',SMESH.NODE)
+    _ = maillageSain.GroupOnGeom(EXTUBE,'EXTUBE',SMESH.FACE)
+    _ = maillageSain.GroupOnGeom(BORDTU,'BORDTU',SMESH.EDGE)
+    _ = maillageSain.GroupOnGeom(CLGV,'CLGV',SMESH.FACE)
+    _ = maillageSain.GroupOnGeom(PEAUINT,'PEAUINT',SMESH.FACE)
+    _ = maillageSain.GroupOnGeom(PEAUEXT,'PEAUEXT',SMESH.FACE)
+    _ = maillageSain.GroupOnGeom(COUDE,'COUDSAIN',SMESH.VOLUME)
+
+    is_done = maillageSain.Compute()
+    text = "maillageSain.Compute"
+    if is_done:
+      logging.info(text+" OK")
+    else:
+      text = "Erreur au calcul du maillage.\n" + text
+      logging.info(text)
+      raise Exception(text)
 
     return [maillageSain, True] # True : maillage hexa
 
@@ -335,14 +337,13 @@ class fissureCoude(fissureGenerique):
                                    externe     = True)
 
   # ---------------------------------------------------------------------------
-  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams):
+  def genereShapeFissure( self, geometriesSaines, geomParams, shapeFissureParams, \
+                                mailleur="MeshGems"):
     logging.info("genereShapeFissure %s", self.nomCas)
     logging.info("shapeFissureParams %s", shapeFissureParams)
 
-    angleCoude = geomParams['angleCoude']
     r_cintr    = geomParams['r_cintr']
     l_tube_p1  = geomParams['l_tube_p1']
-    l_tube_p2  = geomParams['l_tube_p2']
     epais      = geomParams['epais']
     de         = geomParams['de']
 
@@ -357,11 +358,9 @@ class fissureCoude(fissureGenerique):
     if 'elliptique' in shapeFissureParams:
       self.elliptique = shapeFissureParams['elliptique']
 
-
-
     azimut = -azimut # axe inverse / ASCOUF
     axe = geompy.MakeTranslation(OY, -r_cintr, 0, -l_tube_p1)
-    geomPublish(initLog.debug, axe,"axe")
+    geomPublish(initLog.debug, axe, "axe", self.numeroCas)
 
     if not lgInfluence:
       lgInfluence = profondeur
@@ -375,10 +374,8 @@ class fissureCoude(fissureGenerique):
     self.circonferentielle = False
     self.longitudinale = False
     if self.fissureLongue and not self.elliptique:
-      if abs(orientation) < 45 :
-        self.longitudinale = True
-      else:
-        self.circonferentielle = True
+      self.longitudinale = bool(abs(orientation) < 45)
+      self.circonferentielle = not bool(abs(orientation) < 45)
 
     nbp1 = 10
     if self.circonferentielle:
@@ -392,45 +389,45 @@ class fissureCoude(fissureGenerique):
         raybor = de/2. - epais
         rayint = raybor + profondeur
         rayext = raybor - profondeur/5.0
-      lgfond = longueur -2*profondeur
-      angle = lgfond/(2*raybor)
+      lgfond = longueur -2.*profondeur
+      angle = lgfond/(2.*raybor)
       pb = geompy.MakeVertex(raybor, 0, 0)
       pi = geompy.MakeVertex(rayint, 0, 0)
       pbl = geompy.MakeRotation(pb, OZ, angle)
       pbr = geompy.MakeRotation(pb, OZ, -angle)
-      geomPublish(initLog.debug, pbl,"pbl")
-      geomPublish(initLog.debug, pbr,"pbr")
+      geomPublish(initLog.debug, pbl,"pbl", self.numeroCas)
+      geomPublish(initLog.debug, pbr,"pbr", self.numeroCas)
       pal = geompy.MakeTranslationVector(pbl, OZ)
       par = geompy.MakeTranslationVector(pbr, OZ)
       axl = geompy.MakeVector(pbl,pal)
       axr = geompy.MakeVector(pbr,par)
       pil = geompy.MakeRotation(pi, OZ, angle)
       pir = geompy.MakeRotation(pi, OZ, -angle)
-      points = []
+      points = list()
       nbp = 3*nbp1
-      for i in range(nbp):
-        angi = dp*(nbp -i)*(2.0*math.pi/3.0)/nbp
+      for i_aux in range(nbp):
+        angi = dp*(nbp - i_aux)*(2.0*math.pi/3.0)/nbp
         pt = geompy.MakeRotation(pil, axl, angi)
         points.append(pt)
-      for i in range(nbp):
-        angi = angle -2.0*i*angle/nbp
+      for i_aux in range(nbp):
+        angi = angle -2.0*float(i_aux)*angle/nbp
         pt = geompy.MakeRotation(pi, OZ, angi)
         points.append(pt)
-      for i in range(nbp+1):
-        angi = -dp*i*(2.0*math.pi/3.0)/nbp
+      for i_aux in range(nbp+1):
+        angi = -dp*float(i_aux)*(2.0*math.pi/3.0)/nbp
         pt = geompy.MakeRotation(pir, axr, angi)
         points.append(pt)
-      for i, pt in enumerate(points):
+      for i_aux, pt in enumerate(points):
         pt = geompy.MakeRotation(pt, OZ, azimut*math.pi/180.)
         pt = geompy.MakeTranslation(pt, 0, 0, -l_tube_p1)
         pt = geompy.MakeRotation(pt, axe, alpha*math.pi/180.)
-        points[i] = pt
+        points[i_aux] = pt
       wire0 = geompy.MakeInterpol(points[0:nbp+1])
       wire1 = geompy.MakeInterpol(points[nbp:2*nbp+1])
       wire2 = geompy.MakeInterpol(points[2*nbp:3*nbp+1])
       #wiretube = geompy.MakeInterpol(points)
       wiretube=geompy.MakeWire([wire0,wire1,wire2])
-      geomPublish(initLog.debug, wiretube,"wiretube")
+      geomPublish(initLog.debug, wiretube,"wiretube", self.numeroCas)
 
       pe = geompy.MakeVertex(rayext, 0, 0)
       pe = geompy.MakeRotation(pe, OZ, azimut*math.pi/180.)
@@ -438,22 +435,22 @@ class fissureCoude(fissureGenerique):
       pe = geompy.MakeRotation(pe, axe, alpha*math.pi/180.)
 
       arce = geompy.MakeArc(points[0], pe, points[-1])
-      geomPublish(initLog.debug, arce,"arce")
+      geomPublish(initLog.debug, arce,"arce", self.numeroCas)
 
       facefiss = geompy.MakeFaceWires([arce, wiretube], 1)
-      geomPublish(initLog.debug,  facefiss, 'facefissPlace' )
+      geomPublish(initLog.debug, facefiss, 'facefissPlace', self.numeroCas )
 
       pc = geompy.MakeVertex((raybor + rayint)/2.0, 0, 0)
       centre = geompy.MakeRotation(pc, OZ, azimut*math.pi/180.)
       centre = geompy.MakeTranslation(centre, 0, 0, -l_tube_p1)
       centre = geompy.MakeRotation(centre, axe, alpha*math.pi/180.)
-      geomPublish(initLog.debug,  centre, 'centrefissPlace' )
+      geomPublish(initLog.debug, centre, 'centrefissPlace', self.numeroCas )
 
       wiretube = geompy.GetInPlace(facefiss, wiretube)
-      geomPublish(initLog.debug, wiretube, 'wiretubePlace' )
+      geomPublish(initLog.debug, wiretube, 'wiretubePlace', self.numeroCas )
       try:
         edgetube = geompy.MakeEdgeWire(wiretube)
-        geomPublish(initLog.debug, edgetube,"edgetube")
+        geomPublish(initLog.debug, edgetube,"edgetube", self.numeroCas)
       except:
         logging.debug("erreur MakeEdgeWire sur fond de fissure, on fait sans")
         edgetube = None
@@ -486,109 +483,109 @@ class fissureCoude(fissureGenerique):
       pil = geompy.MakeRotation(pi, axe, alfrd -angle, "pil")
       pir = geompy.MakeRotation(pi, axe, alfrd +angle, "pir")
 
-      curves = []
+      curves = list()
 
-      points = []
+      points = list()
       nbp = 3*nbp1
-      xs = []
+      xs = list()
       totx = 0
-      for i in range(nbp+2):
-        x = math.sin(i*math.pi/(nbp+1)) # fonction de répartition des points : distance relative
+      for i_aux in range(nbp+2):
+        x = math.sin(float(i_aux)*math.pi/(nbp+1)) # fonction de répartition des points : distance relative
         x2 = x*x
         totx += x2
         xs.append(totx)
         logging.debug("x2: %s, totx: %s", x2, totx)
-      for i in range(nbp+1):
-        #posi = nbp -i             # répartition équidistante des points sur la courbe
-        posi = nbp*(1 -xs[i]/totx) # points plus resserrés aux extrémités de la courbe
+      for i_aux in range(nbp+1):
+        #posi = nbp - i_aux             # répartition équidistante des points sur la courbe
+        posi = nbp*(1 -xs[i_aux]/totx) # points plus resserrés aux extrémités de la courbe
         angi = -dp*posi*(5.0*math.pi/8.0)/nbp
         pt = geompy.MakeRotation(pil, axl, angi)
         points.append(pt)
       curves.append(geompy.MakeInterpol(points))
       point0 = points[0]
-      geomPublish(initLog.debug, curves[-1],"curve0")
-#      for i, pt in enumerate(points):
-#        name = "point%d"%i
+      geomPublish(initLog.debug, curves[-1],"curve0", self.numeroCas)
+#      for i_aux, pt in enumerate(points):
+#        name = "point%d"%i_aux
 #        geomPublishInFather(initLog.debug,curves[-1], pt, name)
 
-      points = []
+      points = list()
       nbp = 3*nbp1
-      xs =[]
+      xs = list()
       totx = 0
-      for i in range(nbp+1):
-        x = math.sin(i*math.pi/nbp)
+      for i_aux in range(nbp+1):
+        x = math.sin(float(i_aux)*math.pi/nbp)
         #x = 1.0 # répartition équidistante des points sur la courbe
         x2 = x*x # points plus resserrés aux extrémités de la courbe
         totx += x2
         xs.append(totx)
         logging.debug("x2: %s, totx: %s", x2, totx)
-      for i in range(nbp):
-        angi = alfrd -angle +2.0*angle*xs[i]/totx
+      for i_aux in range(nbp):
+        angi = alfrd -angle +2.0*angle*xs[i_aux]/totx
         pt = geompy.MakeRotation(pi, axe, angi)
         points.append(pt)
       curves.append(geompy.MakeInterpol(points))
-      geomPublish(initLog.debug, curves[-1],"curve1")
-#      for i, pt in enumerate(points):
-#        name = "point%d"%i
+      geomPublish(initLog.debug, curves[-1],"curve1", self.numeroCas)
+#      for i_aux, pt in enumerate(points):
+#        name = "point%d"%i_aux
 #        geomPublishInFather(initLog.debug,curves[-1], pt, name)
 
-      points = []
+      points = list()
       nbp = 3*nbp1
-      xs = []
+      xs = list()
       totx = 0
-      for i in range(nbp+2):
-        x = math.sin(i*math.pi/(nbp+1))
+      for i_aux in range(nbp+2):
+        x = math.sin(float(i_aux)*math.pi/(nbp+1))
         x2 = x*x
         totx += x2
         xs.append(totx)
         logging.debug("x2: %s, totx: %s", x2, totx)
-      for i in range(nbp+1):
-        #posi = nbp -i        # répartition équidistante des points sur la courbe
-        posi = nbp*xs[i]/totx # points plus resserrés aux extrémités de la courbe
+      for i_aux in range(nbp+1):
+        #posi = nbp - i_aux        # répartition équidistante des points sur la courbe
+        posi = nbp*xs[i_aux]/totx # points plus resserrés aux extrémités de la courbe
         angi = dp*posi*(5.0*math.pi/8.0)/nbp
         pt = geompy.MakeRotation(pir, axr, angi)
         points.append(pt)
       curves.append(geompy.MakeInterpol(points))
       point1 = points[-1]
-      geomPublish(initLog.debug, curves[-1],"curve2")
-#      for i, pt in enumerate(points):
-#        name = "point%d"%i
+      geomPublish(initLog.debug, curves[-1],"curve2", self.numeroCas)
+#      for i_aux, pt in enumerate(points):
+#        name = "point%d"%i_aux
 #        geomPublishInFather(initLog.debug,curves[-1], pt, name)
 
       wiretube = geompy.MakeWire(curves)
-      geomPublish(initLog.debug, wiretube,"wiretube")
+      geomPublish(initLog.debug, wiretube,"wiretube", self.numeroCas)
       try:
         edgetube = geompy.MakeEdgeWire(wiretube)
-        geomPublish(initLog.debug, edgetube,"edgetube")
+        geomPublish(initLog.debug, edgetube,"edgetube", self.numeroCas)
       except:
         logging.debug("erreur MakeEdgeWire sur fond de fissure, on fait sans")
         edgetube = None
 
-      pts = []
+      pts = list()
       pts.append(point0)
       dpr = prof*math.cos(5.0*math.pi/8.0)
       pe = geompy.MakeTranslation(pb, dpr*cosaz, dpr*sinaz, 0., "pe")
-      for i in range(nbp):
-        angi = alfrd -angle +2.0*i*angle/nbp
+      for i_aux in range(nbp):
+        angi = alfrd -angle +2.0*float(i_aux)*angle/nbp
         pt = geompy.MakeRotation(pe, axe, angi)
         pts.append(pt)
       pts.append(point1)
       arce = geompy.MakeInterpol(pts)
-      geomPublish(initLog.debug, arce,"arce")
+      geomPublish(initLog.debug, arce,"arce", self.numeroCas)
 
       facefiss = geompy.MakeFaceWires([arce, wiretube], 0)
-      geomPublish(initLog.debug,  facefiss, 'facefissPlace' )
+      geomPublish(initLog.debug, facefiss, 'facefissPlace', self.numeroCas)
 
       pc = geompy.MakeTranslation(pb, 0.5*prof*cosaz, 0.5*prof*sinaz, 0.)
       centre = geompy.MakeRotation(pc, axe, alfrd)
-      geomPublish(initLog.debug,  centre, 'centrefissPlace' )
+      geomPublish(initLog.debug, centre, 'centrefissPlace', self.numeroCas)
 
       edges = geompy.ExtractShapes(facefiss, geompy.ShapeType["EDGE"], True)
-      edgesTriees, minl, maxl = sortEdges(edges)
+      edgesTriees, _, _ = sortEdges(edges)
       edges = edgesTriees[:-1] # la plus grande correspond à arce, on l'elimine
       wiretube = geompy.MakeWire(edges)
       #wiretube = edgesTriees[-1]
-      geomPublish(initLog.debug, wiretube, 'wiretubePlace' )
+      geomPublish(initLog.debug, wiretube, 'wiretubePlace', self.numeroCas)
 
     # ---------------------------------------------------------
 
@@ -633,17 +630,18 @@ class fissureCoude(fissureGenerique):
       arci = geompy.MakePosition(arco, originLCS, localLCS, "arci")
       arce = geompy.MakePosition(lino, originLCS, localLCS, "arce")
       facefiss = geompy.MakeFaceWires([arce, arci], 0)
-      geomPublish(initLog.debug,  facefiss, 'facefissPlace' )
+      geomPublish(initLog.debug, facefiss, 'facefissPlace', self.numeroCas )
       edges = geompy.ExtractShapes(facefiss, geompy.ShapeType["EDGE"], True)
-      edgesTriees, minl, maxl = sortEdges(edges)
+      edgesTriees, _, _ = sortEdges(edges)
       edgetube = edgesTriees[-1] # la plus grande correspond à arci
       wiretube = edgetube
 
       pc = geompy.MakeTranslation(pb, 0.5*prof*cosaz, 0.5*prof*sinaz, 0.)
       centre = geompy.MakeRotation(pc, axe, alfrd)
-      geomPublish(initLog.debug,  centre, 'centrefissPlace' )
+      geomPublish(initLog.debug, centre, 'centrefissPlace', self.numeroCas )
 
-    coordsNoeudsFissure = genereMeshCalculZoneDefaut(facefiss, profondeur/2. ,profondeur)
+    coordsNoeudsFissure = genereMeshCalculZoneDefaut(facefiss, profondeur/2. ,profondeur, \
+                                                     mailleur, self.numeroCas)
 
     return [facefiss, centre, lgInfluence, coordsNoeudsFissure, wiretube, edgetube]
 
@@ -656,35 +654,38 @@ class fissureCoude(fissureGenerique):
     nbSegCercle = nombre de secteurs
     areteFaceFissure = taille cible de l'arête des triangles en face de fissure.
     """
-    self.maillageFissureParams = dict(nomRep        = '.',
-                                      nomFicSain    = self.nomCas,
-                                      nomFicFissure = 'fissure_' + self.nomCas,
+    self.maillageFissureParams = dict(nomRep        = os.curdir,
+                                      nomFicSain       = self.nomProbleme,
+                                      nomFicFissure    = self.nomProbleme + "_fissure",
                                       nbsegRad      = 5,
                                       nbsegCercle   = 6,
                                       areteFaceFissure = 5)
 
   # ---------------------------------------------------------------------------
   def genereZoneDefaut(self, geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams):
-    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams)
+    elementsDefaut = creeZoneDefautDansObjetSain(geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams, \
+                          self.numeroCas)
     return elementsDefaut
 
   # ---------------------------------------------------------------------------
-  def genereMaillageFissure(self, geometriesSaines, maillagesSains,
-                            shapesFissure, shapeFissureParams,
-                            maillageFissureParams, elementsDefaut, step):
-    maillageFissure = construitFissureGenerale(maillagesSains,
-                                               shapesFissure, shapeFissureParams,
-                                               maillageFissureParams, elementsDefaut, step)
+  def genereMaillageFissure(self, geometriesSaines, maillagesSains, \
+                            shapesFissure, shapeFissureParams, \
+                            maillageFissureParams, elementsDefaut, step, \
+                            mailleur="MeshGems"):
+    maillageFissure = construitFissureGenerale(shapesFissure, shapeFissureParams, \
+                                               maillageFissureParams, elementsDefaut, \
+                                               mailleur, self.numeroCas)
     return maillageFissure
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Node            = 77917,
-                                          Entity_Quad_Edge       = 975,
-                                          Entity_Quad_Triangle   = 2182,
-                                          Entity_Quad_Quadrangle = 6842,
-                                          Entity_Quad_Tetra      = 20135,
-                                          Entity_Quad_Hexa       = 8994,
-                                          Entity_Quad_Penta      = 972,
-                                          Entity_Quad_Pyramid    = 1038)
-
+    self.referencesMaillageFissure = dict( \
+                                          Entity_Quad_Edge = 975, \
+                                          Entity_Quad_Quadrangle = 6842, \
+                                          Entity_Quad_Hexa = 8994, \
+                                          Entity_Node = 77917, \
+                                          Entity_Quad_Triangle = 2182, \
+                                          Entity_Quad_Tetra = 20135, \
+                                          Entity_Quad_Pyramid = 1038, \
+                                          Entity_Quad_Penta = 972 \
+                                         )
index bbc606aee8fdc93a8899c1dfe944485ef9958b71..bf9f53c20e0c5fb674b9e10b791692c5522a84b1 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""fissureGenerique"""
 
 import logging
 
 from blocFissure import gmu
-from blocFissure.gmu.initEtude import initEtude
-from blocFissure.gmu.getStatsMaillageFissure import getStatsMaillageFissure
+from .initEtude import initEtude
+from .getStatsMaillageFissure import getStatsMaillageFissure
+
+class fissureGenerique(object):
+  """classe générique problème fissure:
 
-class fissureGenerique():
-  """
-  classe générique problème fissure:
   génération géométrie et maillage sain
   définition et positionnement d'une fissure
   génération d'un bloc défaut inséré dans le maillage sain
   """
 
-  nomProbleme = "generique"
+  nomProbleme = "fissureGenerique"
+  maillageFissure = None
+  geomParams = dict()
+  meshParams = dict()
+  shapeFissureParams = dict()
+  maillageFissureParams = dict()
 
   def __init__(self, numeroCas):
     initEtude()
     self.numeroCas = numeroCas
     self.nomCas = self.nomProbleme +"_%d"%(self.numeroCas)
     self.fissureLongue = False
+    self.referencesMaillageFissure = None
 
   def setParamGeometrieSaine(self):
-    self.geomParams = {}
+    """setParamGeometrieSaine"""
+    self.geomParams = dict()
 
   def genereGeometrieSaine(self, geomParams):
+    """genereGeometrieSaine"""
     geometriesSaines = [None]
     return geometriesSaines
 
   def setParamMaillageSain(self):
-    self.meshParams = {}
+    """setParamMaillageSain"""
+    self.meshParams = dict()
 
   def genereMaillageSain(self, geometriesSaines, meshParams):
+    """genereMaillageSain"""
     maillagesSains = [None]
     return maillagesSains
 
   def setParamShapeFissure(self):
-    self.shapeFissureParams = {}
+    """setParamShapeFissure"""
+    self.shapeFissureParams = dict()
 
-  def genereShapeFissure(self, geometriesSaines, geomParams, shapeFissureParams):
+  def genereShapeFissure(self, geometriesSaines, geomParams, shapeFissureParams, mailleur="MeshGems"):
+    """genereShapeFissure"""
     shapesFissure = [None]
     return shapesFissure
 
   def setParamMaillageFissure(self):
-    self.maillageFissureParams = {}
+    """setParamMaillageFissure"""
+    self.maillageFissureParams = dict()
 
-  def genereZoneDefaut(self, geometriesSaines, maillagesSains, shapesFissure, maillageFissureParams):
+  def genereZoneDefaut(self, geometriesSaines, maillagesSains, shapesFissure, shapeFissureParams, maillageFissureParams):
+    """genereZoneDefaut"""
     elementsDefaut = [None]
     return elementsDefaut
 
-  def genereMaillageFissure(self, geometriesSaines, maillagesSains, shapesFissure,
-                            maillageFissureParams, elementsDefaut, step):
+  def genereMaillageFissure(self, geometriesSaines, maillagesSains, \
+                                  shapesFissure, shapeFissureParams, \
+                                  maillageFissureParams, elementsDefaut, step, \
+                                  mailleur="MeshGems"):
+    """genereMaillageFissure"""
     maillageFissure = None
     return maillageFissure
 
   def setReferencesMaillageFissure(self):
-    referencesMaillageFissure = {}
+    """setReferencesMaillageFissure"""
+    referencesMaillageFissure = dict()
     return referencesMaillageFissure
 
+  def mailleur2d3d(self):
+    """Le mailleur : NETGEN ou MeshGems"""
+    #mailleur = "MeshGems"
+    mailleur = "NETGEN"
+    return mailleur
+
 # ---------------------------------------------------------------------------
 
   def executeProbleme(self, step=-1):
-    logging.info(" --- executeProbleme %s", self.nomCas)
+    """executeProbleme"""
+    texte = " --- fissureGenerique.executeProbleme pour '{}', step = {}".format(self.nomCas,step)
+    logging.info(texte)
     if step == 0:
       return
 
@@ -95,24 +122,21 @@ class fissureGenerique():
       return
 
     self.setParamShapeFissure()
-    shapesFissure = self.genereShapeFissure(geometriesSaines, self.geomParams, self.shapeFissureParams)
+    mailleur = self.mailleur2d3d()
+    shapesFissure = self.genereShapeFissure(geometriesSaines, self.geomParams, self.shapeFissureParams, mailleur)
     if step == 3:
       return
 
     self.setParamMaillageFissure()
-    elementsDefaut = self.genereZoneDefaut(geometriesSaines, maillagesSains, shapesFissure, self.shapeFissureParams, self.maillageFissureParams)
+    elementsDefaut = self.genereZoneDefaut(geometriesSaines, maillagesSains, \
+                                           shapesFissure, self.shapeFissureParams, self.maillageFissureParams)
     if step == 4:
       return
 
-    maillageFissure = self.genereMaillageFissure(geometriesSaines, maillagesSains,
-                                                 shapesFissure, self.shapeFissureParams,
-                                                 self.maillageFissureParams, elementsDefaut, step)
+    self.maillageFissure = self.genereMaillageFissure(geometriesSaines, maillagesSains, \
+                                                      shapesFissure, self.shapeFissureParams, self.maillageFissureParams, \
+                                                      elementsDefaut, step, mailleur)
 
     self.setReferencesMaillageFissure()
-    mesures = getStatsMaillageFissure(maillageFissure, self.referencesMaillageFissure, self.maillageFissureParams)
-
-
-
-
-
-
+    ok_maillage = getStatsMaillageFissure(self.maillageFissure, self.referencesMaillageFissure, self.maillageFissureParams)
+    return ok_maillage
index 7ed8d7e512b0d6b51630cc8c8c432bcb3f0821e6..ddcccec0f287bd6c228efc9e84d334daf1b1a817 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
-"""
-Created on Tue Jun 24 09:14:13 2014
+"""Groupe de quadrangles de face transformé en face géométrique par filling
 
+Created on Tue Jun 24 09:14:13 2014
 @author: I48174 (Olivier HOAREAU)
 """
 
 import logging
-from .geomsmesh import geompy
-from .geomsmesh import smesh
-from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
-from . import initLog
+
 import GEOM
 import SMESH
 
+from .geomsmesh import geompy
+from .geomsmesh import smesh
+
 from .listOfExtraFunctions import createNewMeshesFromCorner
 from .listOfExtraFunctions import createLinesFromMesh
+from .putName import putName
+
+def fusionMaillageDefaut(maillageSain, maillageDefautCible, maillageInterneCible, \
+                         zoneDefaut_skin, shapeDefaut, listOfCorners, \
+                         nro_cas=None):
+  """Groupe de quadrangles de face transformé en face géométrique par filling"""
+
+  logging.info("start")
+  logging.info("Pour le cas n°%s", nro_cas)
+
+  facesNonCoupees = list()
+  facesCoupees = list()
+  maillagesNonCoupes = list()
+  maillagesCoupes = list()
+
+  # On crée une liste contenant le maillage de chaque face.
+  listOfNewMeshes = createNewMeshesFromCorner(maillageDefautCible, listOfCorners, nro_cas)
+
+  i_aux = 0
+  while i_aux < len(listOfNewMeshes):
+    lines = createLinesFromMesh(listOfNewMeshes[i_aux])
+    setOfLines = list()
+    for line in lines:
+      # On possède l'information 'ID' de chaque noeud composant chaque
+      # ligne de la face. A partir de l'ID, on crée un vertex. Un
+      # ensemble de vertices constitue une ligne. Un ensemble de lignes
+      # constitue la face.
+      tmpCoords = [maillageDefautCible.GetNodeXYZ(node) for node in line]
+      tmpPoints = [geompy.MakeVertex(val[0], val[1], val[2]) for val in tmpCoords]
+      line = geompy.MakeInterpol(tmpPoints, False, False)
+      setOfLines.append(line)
+
+    # A partir des lignes de la face,
+    # on recrée un objet GEOM temporaire par filling.
+    filling = geompy.MakeFilling(geompy.MakeCompound(setOfLines), 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default, True)
+    #logging.debug("face de filling")
+    #geomPublish(initLog.debug, filling, 'filling_{0}'.format(i_aux+1))
+
+    tmpPartition = geompy.MakePartition([filling], [shapeDefaut], list(), list(), geompy.ShapeType["FACE"], 0, list(), 0)
+    tmpExplodeRef = geompy.ExtractShapes(filling, geompy.ShapeType["EDGE"], True)
+    tmpExplodeNum = geompy.ExtractShapes(tmpPartition, geompy.ShapeType["EDGE"], True)
+    if len(tmpExplodeRef) == len(tmpExplodeNum):
+      logging.debug("face de filling non coupee")
+      geompy.addToStudy( filling, "faceNonCoupee_{0}".format(i_aux+1)) # doit etre publié pour critère OK plus bas
+      facesNonCoupees.append(filling)
+      maillagesNonCoupes.append(listOfNewMeshes[i_aux])
+    else:
+      logging.debug("face de filling coupee")
+      geompy.addToStudy( filling, "faceCoupee_{0}".format(i_aux+1))
+      facesCoupees.append(filling)
+      maillagesCoupes.append(listOfNewMeshes[i_aux])
+    i_aux += 1
+
+  listOfInternMeshes = [maillageInterneCible] + [msh.GetMesh() for msh in maillagesNonCoupes]
+
+  newMaillageInterne = smesh.Concatenate(listOfInternMeshes, 1, 1, 1e-05, False)
+  putName(newMaillageInterne, 'newInternalBoundary', i_pref=nro_cas)
+
+  facesEnTrop = list()
+  criteres = [smesh.GetCriterion(SMESH.FACE, SMESH.FT_BelongToGenSurface, SMESH.FT_Undefined, face) for face in facesNonCoupees]
+  filtres = [smesh.GetFilterFromCriteria([critere]) for critere in criteres]
+  for i_aux, filtre in enumerate(filtres):
+    filtre.SetMesh(maillageSain.GetMesh())
+    faceEnTrop = maillageSain.GroupOnFilter(SMESH.FACE, 'faceEnTrop_{0}'.format(i_aux+1), filtre)
+    facesEnTrop.append(faceEnTrop)
+
+  newZoneDefaut_skin = maillageSain.GetMesh().CutListOfGroups([zoneDefaut_skin], facesEnTrop, 'newZoneDefaut_skin')
 
-# -----------------------------------------------------------------------------
-# --- groupe de quadrangles de face transformé en face géométrique par filling
-
-def fusionMaillageDefaut(maillageSain, maillageDefautCible, maillageInterneCible, zoneDefaut_skin, shapeDefaut, listOfCorners):
-    """ """
-    # TODO: rédiger la docstring
-    
-    logging.info("start")
-    
-    facesNonCoupees = []
-    facesCoupees = []
-    maillagesNonCoupes = []
-    maillagesCoupes = []
-        
-    # On crée une liste contenant le maillage de chaque face.
-    listOfNewMeshes = createNewMeshesFromCorner(maillageDefautCible, listOfCorners)
-    
-    i = 0
-    while i < len(listOfNewMeshes):
-        lines = createLinesFromMesh(listOfNewMeshes[i])
-        setOfLines = []
-        for line in lines:
-            # On possède l'information 'ID' de chaque noeud composant chaque
-            # ligne de la face. A partir de l'ID, on crée un vertex. Un
-            # ensemble de vertices constitue une ligne. Un ensemble de lignes
-            # constitue la face.
-            tmpCoords = [maillageDefautCible.GetNodeXYZ(node) for node in line]
-            tmpPoints = [geompy.MakeVertex(val[0], val[1], val[2]) for val in tmpCoords]
-            line = geompy.MakeInterpol(tmpPoints, False, False)
-            setOfLines.append(line)
-        
-        # A partir des lignes de la face,
-        # on recrée un objet GEOM temporaire par filling.
-        filling = geompy.MakeFilling(geompy.MakeCompound(setOfLines), 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default, True)
-        #logging.debug("face de filling")
-        #geomPublish(initLog.debug, filling, 'filling_{0}'.format(i + 1))
-        
-        tmpPartition = geompy.MakePartition([filling], [shapeDefaut], [], [], geompy.ShapeType["FACE"], 0, [], 0)
-        tmpExplodeRef = geompy.ExtractShapes(filling, geompy.ShapeType["EDGE"], True)
-        tmpExplodeNum = geompy.ExtractShapes(tmpPartition, geompy.ShapeType["EDGE"], True)
-        if len(tmpExplodeRef) == len(tmpExplodeNum):
-            logging.debug("face de filling non coupee")
-            geompy.addToStudy( filling, "faceNonCoupee_{0}".format(i + 1)) # doit etre publie pour critere OK plus bas
-            facesNonCoupees.append(filling)
-            maillagesNonCoupes.append(listOfNewMeshes[i])
-        else:
-            logging.debug("face de filling coupee")
-            geompy.addToStudy( filling, "faceCoupee_{0}".format(i + 1))
-            facesCoupees.append(filling)
-            maillagesCoupes.append(listOfNewMeshes[i])
-        
-        i += 1
-    
-    listOfInternMeshes = [maillageInterneCible] + [msh.GetMesh() for msh in maillagesNonCoupes]
-    
-    newMaillageInterne = smesh.Concatenate(listOfInternMeshes, 1, 1, 1e-05, False)
-    
-    facesEnTrop = []
-    
-    criteres = [smesh.GetCriterion(SMESH.FACE, SMESH.FT_BelongToGenSurface, SMESH.FT_Undefined, face) for face in facesNonCoupees]
-    filtres = [smesh.GetFilterFromCriteria([critere]) for critere in criteres]
-    for i, filtre in enumerate(filtres):
-        filtre.SetMesh(maillageSain.GetMesh())
-        faceEnTrop = maillageSain.GroupOnFilter(SMESH.FACE, 'faceEnTrop_{0}'.format(i + 1), filtre)
-        facesEnTrop.append(faceEnTrop)
-    
-    newZoneDefaut_skin = maillageSain.GetMesh().CutListOfGroups([zoneDefaut_skin], facesEnTrop, 'newZoneDefaut_skin')
-    
-    smesh.SetName(newMaillageInterne, 'newInternalBoundary')
-        
-    return newZoneDefaut_skin, newMaillageInterne
-    
\ No newline at end of file
+  return newZoneDefaut_skin, newMaillageInterne
index 9a7225b72ad69aa9515cc368d22cd43ac02b6b7b..02ba4e81bcca5fdaf3279321e3cfa1113fc2c61b 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Création élements géométriques fissure elliptique"""
 
 import logging
+from . import initLog
+
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
-from . import initLog
 
 from .toreFissure import toreFissure
 from .ellipsoideDefaut import ellipsoideDefaut
 from .rotTrans import rotTrans
 from .genereMeshCalculZoneDefaut import genereMeshCalculZoneDefaut
 
-# -----------------------------------------------------------------------------
-# --- création élements géométriques fissure elliptique
+def genereElemsFissureElliptique(shapeFissureParams, \
+                                 mailleur="MeshGems", nro_cas=None):
+  """Création élements géométriques fissure elliptique"""
 
-def genereElemsFissureElliptique(shapeFissureParams):
-  """
-  TODO: a completer
-  """
   logging.info('start')
-  
+
   centreDefaut  = shapeFissureParams['centreDefaut']
   vecteurDefaut = shapeFissureParams['vecteurDefaut']
   demiGrandAxe  = shapeFissureParams['demiGrandAxe']
@@ -49,8 +47,8 @@ def genereElemsFissureElliptique(shapeFissureParams):
 
   allonge = demiGrandAxe/demiPetitAxe
   rayonTore = demiPetitAxe/5.0
-  generatrice, FaceGenFiss, Pipe_1, FaceFissure, Plane_1, Pipe1Part = toreFissure(demiPetitAxe, allonge, rayonTore)
-  ellipsoide = ellipsoideDefaut(demiPetitAxe, allonge, rayonTore)
+  generatrice, _, Pipe_1, FaceFissure, Plane_1, Pipe1Part = toreFissure(demiPetitAxe, allonge, rayonTore)
+  ellipsoide = ellipsoideDefaut(demiPetitAxe, allonge)
 
   # --- positionnement sur le bloc defaut de generatrice, tore et plan fissure
 
@@ -70,6 +68,7 @@ def genereElemsFissureElliptique(shapeFissureParams):
 
   shapeDefaut = facefis1
   xyz_defaut = geompy.PointCoordinates(centreDefaut)
-  coordsNoeudsFissure = genereMeshCalculZoneDefaut(facefis1, demiPetitAxe/10.0, demiPetitAxe/5.0)
+  coordsNoeudsFissure = genereMeshCalculZoneDefaut(facefis1, demiPetitAxe/10.0, demiPetitAxe/5.0, \
+                                                   mailleur, nro_cas)
 
   return shapeDefaut, xyz_defaut, tailleDefaut, coordsNoeudsFissure, pipe0, gener1, pipe1, facefis1, plane1, ellipsoide1
index fedf48e701869aa89c8c925113228cc8b1b7b43f..1691e88de75a6df998801ab348e0da14d46c775d 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Maillage face de fissure pour identification zone de défaut"""
 
 import logging
-from .geomsmesh import smesh
+
 from salome.smesh import smeshBuilder
 
-# -----------------------------------------------------------------------------
-# --- maillage face de fissure pour identification zone de defaut
+from .geomsmesh import smesh
 
-def genereMeshCalculZoneDefaut(facefiss, minSize, maxSize):
-  """
-  -Permet de générer un maillage sur l'objet géométrique 'facefiss' via
-   l'algorithme NETGEN_1D2D :
+from .putName import putName
+
+def genereMeshCalculZoneDefaut(facefiss, minSize, maxSize, \
+                               mailleur="MeshGems", nro_cas=None):
+  """Maillage de l'objet géométrique 'facefiss'
+
+. Avec l'algorithme MG_CADSurf :
+      -SetMaxSize     = dimension max d'un élément (maxSize)
+      -SetSecondOrder = élément quadratique (Y=1, N=0)
+      -SetOptimize    = élément régulier (Y=1, N=0)
+      -SetFineness    = finesse du maillage
+
+. Avec l'algorithme NETGEN_1D2D :
       -SetMaxSize     = dimension max d'un élément (maxSize)
       -SetSecondOrder = élément quadratique (Y=1, N=0)
       -SetOptimize    = élément régulier (Y=1, N=0)
@@ -37,29 +46,58 @@ def genereMeshCalculZoneDefaut(facefiss, minSize, maxSize):
        [0,           1,      2,        3,    4,         5     ]
       -SetMinSize     = dimension min d'un élément (minSize)
       -SetQuadAllowed = permission quadrangle dans maillage triangle
-  -On récupère les coordonnées de chaque noeud de la fissure qu'on stocke
-   dans une liste sous la forme : [X0, Y0, Z0, ..., Xn, Yn, Zn]"""
-   
+
+-On récupère les coordonnées de chaque noeud de la fissure qu'on stocke
+   dans une liste sous la forme : [X0, Y0, Z0, ..., Xn, Yn, Zn]
+  """
+
   logging.info('start')
+  logging.info("Maillage avec %s pour le cas n°%s", mailleur, nro_cas)
 
   meshFissure = smesh.Mesh(facefiss)
-  algo2d = meshFissure.Triangle(algo=smeshBuilder.NETGEN_1D2D)
-  hypo2d = algo2d.Parameters()
-  hypo2d.SetMaxSize( maxSize )
-  hypo2d.SetSecondOrder( 0 )
-  hypo2d.SetOptimize( 1 )
-  hypo2d.SetFineness( 2 )
-  hypo2d.SetMinSize( minSize )
-  hypo2d.SetQuadAllowed( 0 )
-  isDone = meshFissure.Compute()
-  smesh.SetName(algo2d, "algo2d_zoneFiss")
-  smesh.SetName(hypo2d, "hypo1d_zoneFiss")
+  putName(meshFissure, "facefiss", i_pref=nro_cas)
 
-  coordsNoeudsFissure = []
+  text = "Maillage de '{}'".format(facefiss.GetName())
+  logging.info(text)
+  if ( mailleur == "MeshGems"):
+    algo2d = meshFissure.Triangle(algo=smeshBuilder.MG_CADSurf)
+    hypo2d = algo2d.Parameters()
+    hypo2d.SetPhySize( maxSize )
+    hypo2d.SetMinSize( maxSize/4. )
+    hypo2d.SetMaxSize( maxSize*2. )
+    hypo2d.SetChordalError( maxSize*0.25 )
+    hypo2d.SetVerbosity( 0 )
+  else:
+    algo2d = meshFissure.Triangle(algo=smeshBuilder.NETGEN_1D2D)
+    hypo2d = algo2d.Parameters()
+    hypo2d.SetMaxSize( maxSize )
+    hypo2d.SetSecondOrder( 0 )
+    hypo2d.SetOptimize( 1 )
+    hypo2d.SetFineness( 2 )
+    hypo2d.SetMinSize( minSize )
+    hypo2d.SetChordalErrorEnabled (True)
+    hypo2d.SetChordalError( maxSize*0.25 )
+    hypo2d.SetUseSurfaceCurvature (True)
+    hypo2d.SetQuadAllowed( 0 )
+  putName(hypo2d, "zoneFiss", i_pref=nro_cas)
+
+  is_done = meshFissure.Compute()
+  text = "meshFissure.Compute"
+  if is_done:
+    logging.info(text+" OK")
+  else:
+    text = "Erreur au calcul du maillage.\n" + text
+    logging.info(text)
+    raise Exception(text)
+
+  coordsNoeudsFissure = list()
   nodeIds = meshFissure.GetNodesId()
-  for id in nodeIds:
-    coords = meshFissure.GetNodeXYZ(id)
+  for indice in nodeIds:
+    coords = meshFissure.GetNodeXYZ(indice)
     coordsNoeudsFissure.append(coords[0])
     coordsNoeudsFissure.append(coords[1])
     coordsNoeudsFissure.append(coords[2])
+
+  logging.info('end')
+
   return coordsNoeudsFissure
index f7a21b9df5e17347e4592fa1dc4bc6842d39f8a5..1327a87f51f65c3a9af1cffa58f480daeaff2187 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
-
-import logging
-#logging.info('start')
-from . import initLog
+"""Publications dans salome"""
 
 import salome
 salome.salome_init()
@@ -31,13 +28,45 @@ geompy = geomBuilder.New()
 from salome.smesh import smeshBuilder
 smesh = smeshBuilder.New()
 
-# logging.debug("initialisation de geompy et smesh OK")
+from . import initLog
+
+def geomPublish(level,aShape, aName, i_pref=None):
+  """Publication d'un objet sous GEOM
 
-def geomPublish(level,aShape, aName):
+  @level niveau d'impression voulu
+  @aShape objet à nommer
+  @aName le nom brut
+  @i_pref un éventuel préfixe
+  """
+  #print ("initLog.getLogLevel() = {}".format(initLog.getLogLevel()))
+  #print ("level                 = {}".format(level))
   if initLog.getLogLevel() <= level:
+    # préfixe éventuel :
+    if ( i_pref is not None):
+      if isinstance(i_pref,int):
+        prefixe = "Cas{:02d}_".format(i_pref)
+      else:
+        prefixe = "{}_".format(i_pref)
+      aName = prefixe + aName
+
     geompy.addToStudy(aShape, aName)
-    
-def geomPublishInFather(level, aFather, aShape, aName):
+
+def geomPublishInFather(level, aFather, aShape, aName, i_pref=None):
+  """Publication d'un objet sous son ascendant sous GEOM
+
+  @level niveau d'impression voulu
+  @aFather objet ascendant
+  @aShape objet à nommer
+  @aName le nom brut
+  @i_pref un éventuel préfixe
+  """
   if initLog.getLogLevel() <= level:
+    # préfixe éventuel :
+    if ( i_pref is not None):
+      if isinstance(i_pref,int):
+        prefixe = "Cas{:02d}_".format(i_pref)
+      else:
+        prefixe = "{}_".format(i_pref)
+      aName = prefixe + aName
+
     geompy.addToStudyInFather(aFather, aShape, aName)
-    
\ No newline at end of file
index 819f80b3b569b48c01270a4acb6884b942910a32..0125206582dd0ab15497848c751bb7b41ae0f916 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Identification du centre de fond de fissure,"""
 
 import logging
+import bisect
+
+from . import initLog
+
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
 from .geomsmesh import geomPublishInFather
-from . import initLog
-import bisect
 
 publie = False
 
 def getCentreFondFiss(shapesFissure):
-  """
-  identification du centre de fond de fissure,
+  """Identification du centre de fond de fissure,
+
   transformation fond de fissure en edge unique (seulement pour la procédure construitFissureGenerale).
   On distingue le cas d'utilisation de la procédure insereFissureLongue par le nombre d'éléments de shapesFissure.
   """
   global publie
   logging.debug("start")
-  
+
   fondFiss          = shapesFissure[4] # groupe d'edges de fond de fissure
   if len(shapesFissure) == 6:          # procédure construitFissureGenerale, et edge fond de fissure fournie explicitement
     edgeFondExt     = shapesFissure[5]
   else:
     edgeFondExt     = None
-  
+
   if len(shapesFissure) > 6:           # procédure insereFissureLongue (fissure plane, plusieurs edges sur le fond de fissure)
     centreFondFiss = shapesFissure[1]
     tgtCentre = None
@@ -57,7 +60,7 @@ def getCentreFondFiss(shapesFissure):
       aWire = geompy.MakeWire([fondFiss], 1e-07)
     if not publie:
       geomPublish(initLog.debug, aWire, "wireFondFissExt")
-        
+
     lgWire = geompy.BasicProperties(aWire)[0]
     edges = geompy.ExtractShapes(aWire, geompy.ShapeType["EDGE"], True)
     lgEdges = [geompy.BasicProperties(ed)[0] for ed in edges]
@@ -71,7 +74,7 @@ def getCentreFondFiss(shapesFissure):
     logging.debug("lgsumEdges %s", lgSumEd)
     logging.debug("id edge: %s, lgOnEdge: %s, lgEdge: %s",iedr, lgOnEdge, lgEdges[iedr])
     if iedr > 0: # il y a une edge avant celle du milieu
-      if geompy.MinDistance(edges[iedr-1], geompy.MakeVertexOnCurve(edges[iedr], 0.0 )) < 1.e-3: # edge orientée croissante 
+      if geompy.MinDistance(edges[iedr-1], geompy.MakeVertexOnCurve(edges[iedr], 0.0 )) < 1.e-3: # edge orientée croissante
         centreFondFiss = geompy.MakeVertexOnCurve(edges[iedr], lgOnEdge/lgEdges[iedr])
       else:
         centreFondFiss = geompy.MakeVertexOnCurve(edges[iedr], 1.0 - lgOnEdge/lgEdges[iedr])
@@ -84,7 +87,7 @@ def getCentreFondFiss(shapesFissure):
       centreFondFiss = geompy.MakeVertexOnCurve(edges[iedr], lgOnEdge/lgEdges[iedr])
     geomPublishInFather(initLog.debug,aWire, centreFondFiss, "centreFondFiss")
     tgtCentre = geompy.MakeTangentOnCurve(edges[iedr], lgOnEdge/ lgEdges[iedr])
-    
+
     if edgeFondExt is None: # fond de fissure non fourni explicitement sous forme d'edge
       try:
         edgeFondExt = geompy.MakeEdgeWire(aWire, 0.0005, 1e-07)
@@ -93,6 +96,7 @@ def getCentreFondFiss(shapesFissure):
         edgeFondExt = None
     if not publie and edgeFondExt is not None:
       geomPublish(initLog.debug, edgeFondExt, "edgeFondExt")
-  
+
   publie = True
+
   return edgeFondExt, centreFondFiss, tgtCentre
old mode 100644 (file)
new mode 100755 (executable)
index 4db1f82..0234d3e
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Statistiques maillage"""
 
+import os
 import logging
-import SMESH
-
-# -----------------------------------------------------------------------------
-# --- statistiques maillage
 
 def getStatsMaillageFissure(maillage, referencesMaillageFissure, maillageFissureParams):
-  """
-  TODO: a completer
-  """
+  """"Statistiques maillage"""
+
   logging.debug('start')
 
-  nomRep = '.'
   if 'nomRep' in maillageFissureParams:
     nomRep = maillageFissureParams['nomRep']
-  
+  else:
+    nomRep = os.path.curdir
+
   nomFicFissure     = maillageFissureParams['nomFicFissure']
-  fichierStatMaillageFissure = nomRep + '/' + nomFicFissure + '.res'
-  fichierNewRef = nomRep + '/' + nomFicFissure + '.new'
+  fichierStatMaillageFissure = os.path.join(nomRep, "{}.res".format(nomFicFissure))
+  fichierNewRef = os.path.join(nomRep, "{}.new".format(nomFicFissure))
   logging.debug("fichierStatMaillageFissure=%s", fichierStatMaillageFissure)
 
-  OK = False
+  ok_maillage = False
   if maillage is not None:
     mesures = maillage.GetMeshInfo()
-    d= {}
+    d_resu = dict()
     for key, value in mesures.items():
       logging.debug( "key: %s value: %s", key, value)
-      d[str(key)] = value
-    logging.debug("dico mesures %s", d)      
+      d_resu[str(key)] = value
+    logging.debug("dico mesures %s", d_resu)
+
+    text_2 = ""
+    ok_maillage = True
+    with open(fichierStatMaillageFissure, "w", encoding='utf-8') as fic_stat :
+
+      # Le nombre de quadrangles ou d'hexaèdres doit être rigoureusement identique
+      for key in ('Entity_Quad_Quadrangle', 'Entity_Quad_Hexa'):
+        if d_resu[key] != referencesMaillageFissure[key]:
+          text = "Ecart"
+          ok_maillage = False
+        else:
+          text = "Valeur_OK"
+        text += ": {} reference: {} calcul: {}".format(key,referencesMaillageFissure[key],d_resu[key])
+        logging.info(text)
+        fic_stat.write(text+"\n")
+        text_2 += "                                          {} = {}, \\\n".format(key,d_resu[key])
+
+      # Le nombre de noeuds, d'arêtes, de triangles, de tétraèdres ou de pyramides peut varier du fait des algorithmes. On tolère 5% d'écart.
+      tolerance = 0.05
+      for key in ('Entity_Node', 'Entity_Quad_Edge', 'Entity_Quad_Triangle', 'Entity_Quad_Tetra', 'Entity_Quad_Pyramid', 'Entity_Quad_Penta'):
+        if d_resu[key] == referencesMaillageFissure[key]:
+          text = "Valeur_OK"
+        elif (d_resu[key] < (1.0 - tolerance)*referencesMaillageFissure[key]) \
+          or (d_resu[key] > (1.0 + tolerance)*referencesMaillageFissure[key]):
+          text = "Ecart de plus de {}%".format(tolerance*100.)
+          ok_maillage = False
+        else:
+          text = "Valeur_OK à moins de {}%".format(tolerance*100.)
+        text += ": {} reference: {} calcul: {}".format(key,referencesMaillageFissure[key],d_resu[key])
+        logging.info(text)
+        fic_stat.write(text+"\n")
+        text_2 += "                                          {} = {}, \\\n".format(key,d_resu[key])
+
+    if ok_maillage:
+      text = "Calcul cohérent avec la référence."
+    else:
+      text = "Calcul différent de la référence.\n"
+      text += "Voir le fichier {}\n".format(fichierStatMaillageFissure)
+      text += "La nouvelle référence est disponible dans le fichier :\n{}\n".format(fichierNewRef)
+      text += "Il faut l'insérer pour créer le dictionnaire 'referencesMaillageFissure' dans le paramétrage du cas."
+#     Résultats de référence pour intégration dans le python du cas pour une mise à jour
+      with open(fichierNewRef, "w") as fic_info :
+        fic_info.write(text_2[:-4]+" \\")
+
+    print (text.encode('utf-8'))
 
-    f = open(fichierStatMaillageFissure, 'w')
-    f2 = open(fichierNewRef, 'w')
-    OK = True
-    for key in ('Entity_Quad_Pyramid', 'Entity_Quad_Hexa', 'Entity_Quad_Quadrangle'):
-      if d[key] != referencesMaillageFissure[key]:
-        logging.info("Ecart: %s reference: %s calcul: %s", key, referencesMaillageFissure[key], d[key])
-        f.write("Ecart: " + key + " reference: " + str(referencesMaillageFissure[key]) + " calcul: " + str(d[key]) + '\n')
-        OK = False
-      else:
-        logging.info("Valeur_OK: %s reference: %s calcul: %s", key, referencesMaillageFissure[key], d[key])
-        f.write("Valeur_OK: " + key + " reference: " + str(referencesMaillageFissure[key]) + " calcul: " + str(d[key]) + '\n')
-      f2.write(key + " = " + str(d[key]) + ",\n")
-    tolerance = 0.05
-    for key in ('Entity_Quad_Penta', 'Entity_Quad_Tetra', 'Entity_Quad_Triangle', 'Entity_Quad_Edge', 'Entity_Node'):
-      if (d[key] < (1.0 - tolerance)*referencesMaillageFissure[key]) \
-      or (d[key] > (1.0 + tolerance)*referencesMaillageFissure[key]):
-        logging.info("Ecart: %s reference: %s calcul: %s", key, referencesMaillageFissure[key], d[key])
-        f.write("Ecart: " + key + " reference: " + str(referencesMaillageFissure[key]) + " calcul: " + str(d[key]) + '\n')
-        OK = False
-      else:
-        logging.info("Valeur_OK: %s reference: %s calcul: %s", key, referencesMaillageFissure[key], d[key])
-        f.write("Valeur_OK: " + key + " reference: " + str(referencesMaillageFissure[key]) + " calcul: " + str(d[key]) + '\n')
-      f2.write(key + " = " + str(d[key]) + ",\n")
-    f.close()
-    f2.close()
-  return OK
+  return ok_maillage
index f53ecc6d4aa734ae9df370826ec1aac595b5c9ae..2c9bf6108476dbc63902648e6bc23403556456bb 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Transformation d'une liste de subshapes en une liste d'Id"""
 
 import logging
-from .geomsmesh import geompy
 
-# -----------------------------------------------------------------------------
-# --- transformation d'une liste de subshapes en une liste d'Id
+from .geomsmesh import geompy
 
 def getSubshapeIds(obj, subshapes):
-  """
-  transformation d'une liste de subshapes en une liste d'Id
-  """
+  """Transformation d'une liste de subshapes en une liste d'Id"""
   logging.debug("start")
-  subshapesId = []
+  subshapesId = list()
   for sub in subshapes:
     subshapesId.append(geompy.GetSubShapeID(obj, sub))
   logging.debug("subshapesId=%s", subshapesId)
+
   return subshapesId
index 31bd47ff8feabd060cd7afa153a8ab3cea612404..d0eaeb439dc64197da26d5e96d40a8d798df9166 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Identification précise des edges et disques des faces de peau selon index extremité fissure"""
 
 import logging
 
-from .geomsmesh import geompy
-from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
-from . import initLog
+from .identifieEdgesPeau_a import identifieEdgesPeau_a
+from .identifieEdgesPeau_b import identifieEdgesPeau_b
+from .identifieEdgesPeau_c import identifieEdgesPeau_c
 
-from .substractSubShapes import substractSubShapes
-
-def identifieEdgesPeau(edgesFissExtPipe,verticesPipePeau, facePeau, facesPeauSorted,
-                       edgesPeauFondIn, fillingFaceExterne, aretesVivesC, aretesVivesCoupees):
-  """
-  identification précise des edges et disques des faces de peau selon index extremité fissure
-  """
+def identifieEdgesPeau(edgesFissExtPipe, verticesPipePeau, facePeau, facesPeauSorted, \
+                       edgesPeauFondIn, fillingFaceExterne, aretesVivesC, aretesVivesCoupees, \
+                       nro_cas=None):
+  """Identification précise des edges et disques des faces de peau selon index extremité fissure"""
   logging.info('start')
+  logging.info('Nombre de sommets : len(verticesPipePeau) = %d', len(verticesPipePeau))
 
-  facesPipePeau = [None for i in range(len(edgesFissExtPipe))]
-  endsEdgeFond = [None for i in range(len(edgesFissExtPipe))]
-  edgeRadFacePipePeau = [None for i in range(len(edgesFissExtPipe))]
+  facesPipePeau = [None for _ in range(len(edgesFissExtPipe))]
+  endsEdgeFond = [None for _ in range(len(edgesFissExtPipe))]
+  edgeRadFacePipePeau = [None for _ in range(len(edgesFissExtPipe))]
 
-  edgesListees = []
-  edgesCircPeau = []
-  verticesCircPeau = []
-  if len(verticesPipePeau) > 0: # --- au moins une extrémité du pipe sur cette face de peau
+  edgesListees = list()
+  # --- au moins une extrémité du pipe sur cette face de peau
+  if verticesPipePeau:
 
-    for face in facesPeauSorted[:-1]: # la ou les faces débouchantes, pas la grande face de peau
-      logging.debug("examen face debouchante circulaire")
-      for i,efep in enumerate(edgesFissExtPipe):
-        dist = geompy.MinDistance(face, efep)
-        logging.debug("  distance face circulaire edge %s", dist)
-        if dist < 1e-3:
-          for ik, edpfi in enumerate(edgesPeauFondIn):
-            if geompy.MinDistance(face, edpfi) < 1e-3:
-              break
-          sharedVertices = geompy.GetSharedShapesMulti([face, edgesPeauFondIn[ik]], geompy.ShapeType["VERTEX"])
-          nameFace = "facePipePeau%d"%i
-          nameVert = "endEdgeFond%d"%i
-          nameEdge = "edgeRadFacePipePeau%d"%i
-          facesPipePeau[i] = face
-          endsEdgeFond[i] = sharedVertices[0]
-          geomPublish(initLog.debug, face, nameFace)
-          geomPublish(initLog.debug, sharedVertices[0], nameVert)
-          edgesFace = geompy.ExtractShapes(face, geompy.ShapeType["EDGE"], True)
-          for edge in edgesFace:
-            if geompy.MinDistance(edge, sharedVertices[0]) < 1e-3:
-              edgeRadFacePipePeau[i] = edge
-              geomPublish(initLog.debug, edge, nameEdge)
-              break
-            pass
-          pass
-        pass
-      pass
+    edgesCircPeau, verticesCircPeau = identifieEdgesPeau_a(edgesFissExtPipe, facePeau, facesPeauSorted, edgesPeauFondIn, \
+                                                           endsEdgeFond, facesPipePeau, edgeRadFacePipePeau, edgesListees, \
+                                                          nro_cas)
+  else:
+    edgesCircPeau = list()
+    verticesCircPeau = list()
 
-    # --- edges circulaires de la face de peau et points de jonction de la face externe de fissure
-    logging.debug("facesPipePeau: %s", facesPipePeau)
-    edgesCircPeau = [None for i in range(len(facesPipePeau))]
-    verticesCircPeau = [None for i in range(len(facesPipePeau))]
-    for i,fcirc in enumerate(facesPipePeau):
-      edges = geompy.GetSharedShapesMulti([facePeau, fcirc], geompy.ShapeType["EDGE"])
-      grpEdgesCirc = geompy.CreateGroup(facePeau, geompy.ShapeType["EDGE"])
-      geompy.UnionList(grpEdgesCirc, edges)
-      edgesCircPeau[i] = grpEdgesCirc
-      name = "edgeCirc%d"%i
-      geomPublishInFather(initLog.debug, facePeau, grpEdgesCirc, name)
-      edgesListees = edgesListees + edges
-      vertices = geompy.GetSharedShapesMulti([facePeau, fcirc], geompy.ShapeType["VERTEX"])
-      grpVertCircPeau = geompy.CreateGroup(facePeau, geompy.ShapeType["VERTEX"])
-      geompy.UnionList(grpVertCircPeau, vertices)
-      verticesCircPeau[i] = grpVertCircPeau
-      name = "pointEdgeCirc%d"%i
-      geomPublishInFather(initLog.debug, facePeau, grpVertCircPeau, name)
-      pass
-    pass # --- au moins une extrémité du pipe sur cette face de peau
 
   # --- edges de bord de la face de peau
 
-  edgesFilling = geompy.ExtractShapes(fillingFaceExterne, geompy.ShapeType["EDGE"], False)
-  edgesBords = []
-  for i, edge in enumerate(edgesFilling):
-    edgepeau = geompy.GetInPlace(facePeau, edge)
-    name = "edgepeau%d"%i
-    geomPublishInFather(initLog.debug, facePeau,edgepeau, name)
-    logging.debug("edgepeau %s", geompy.ShapeInfo(edgepeau))
-    if geompy.ShapeInfo(edgepeau)['EDGE'] > 1:
-      logging.debug("  EDGES multiples")
-      edgs = geompy.ExtractShapes(edgepeau, geompy.ShapeType["EDGE"], False)
-      edgesBords += edgs
-      edgesListees += edgs
-    else:
-      logging.debug("  EDGE")
-      edgesBords.append(edgepeau)
-      edgesListees.append(edgepeau)
-  groupEdgesBordPeau = geompy.CreateGroup(facePeau, geompy.ShapeType["EDGE"])
-  geompy.UnionList(groupEdgesBordPeau, edgesBords)
-  bordsVifs = None
-  if aretesVivesC is not None:
-    logging.debug("identification des bords vifs par GetInPlace")
-    bordsVifs = geompy.GetInPlace(facePeau, aretesVivesC)
-    if bordsVifs is None:
-      logging.debug("pas d'identification des bords vifs par GetInPlace: test par distance")
-      edvifs = []
-      arvives = geompy.ExtractShapes(aretesVivesC, geompy.ShapeType["EDGE"], False)
-      edgs = geompy.ExtractShapes(facePeau, geompy.ShapeType["EDGE"], False)
-      for ed in edgs:
-        vxs = geompy.ExtractShapes(ed, geompy.ShapeType["VERTEX"], False)
-        for ar in arvives:
-          d = geompy.MinDistance(vxs[0], ar)
-          d += geompy.MinDistance(vxs[1], ar)
-          logging.debug("test distance bord face peau - arete vive: %s",d)
-          if d < 0.001:
-            edvifs.append(ed)
-            break
-      if len(edvifs) >0:
-        bordsVifs = geompy.CreateGroup(facePeau,geompy.ShapeType["EDGE"])
-        for ed in edvifs:
-          geompy.AddObject(bordsVifs, geompy.GetSubShapeID(facePeau, ed))
-  if bordsVifs is not None:
-    geomPublishInFather(initLog.debug, facePeau, bordsVifs, "bordsVifs")
-    groupEdgesBordPeau = geompy.CutGroups(groupEdgesBordPeau, bordsVifs)
-    grptmp = None
-    if len(aretesVivesCoupees) > 0:
-      grpC = geompy.MakeCompound(aretesVivesCoupees)
-      grptmp = geompy.GetInPlace(facePeau, grpC)
-    if grptmp is not None:
-      grpnew = geompy.CutGroups(bordsVifs, grptmp) # ce qui est nouveau dans bordsVifs
-    else:
-      grpnew = bordsVifs
-    if grpnew is not None:
-      edv = geompy.ExtractShapes(grpnew, geompy.ShapeType["EDGE"], False)
-      aretesVivesCoupees += edv
-  logging.debug("aretesVivesCoupees %s",aretesVivesCoupees)
-  geomPublishInFather(initLog.debug, facePeau, groupEdgesBordPeau , "EdgesBords")
+  groupEdgesBordPeau, bordsVifs = identifieEdgesPeau_b(facePeau, edgesListees, \
+                                                      fillingFaceExterne, aretesVivesC, aretesVivesCoupees, \
+                                                      nro_cas)
 
   # ---  edges de la face de peau partagées avec la face de fissure
+  edgesFissurePeau = identifieEdgesPeau_c(verticesPipePeau, facePeau, edgesListees, verticesCircPeau)
 
-  edgesPeau = geompy.ExtractShapes(facePeau, geompy.ShapeType["EDGE"], False)
-  edges = substractSubShapes(facePeau, edgesPeau, edgesListees)
-  edgesFissurePeau = []
-  if len(verticesPipePeau) > 0: # --- au moins une extrémité du pipe sur cette face de peau
-    edgesFissurePeau = [None for i in range(len(verticesCircPeau))] # edges associés aux extrémités du pipe, en premier
-    for edge in edges:
-      for i, grpVert in enumerate(verticesCircPeau):
-        if (geompy.MinDistance(grpVert, edge) < 1.e-3) and (edge not in edgesFissurePeau):
-          edgesFissurePeau[i] = edge
-          name = "edgeFissurePeau%d"%i
-          geomPublishInFather(initLog.debug, facePeau,  edge, name)
-    for edge in edges: # on ajoute après les edges manquantes
-      if edge not in edgesFissurePeau:
-        edgesFissurePeau.append(edge)
-  else:
-    for i, edge in enumerate(edges):
-      edgesFissurePeau.append(edge)
-      name = "edgeFissurePeau%d"%i
-      geomPublishInFather(initLog.debug, facePeau,  edge, name)
-
-  return (endsEdgeFond, facesPipePeau, edgeRadFacePipePeau,
-          edgesCircPeau, verticesCircPeau, groupEdgesBordPeau,
+  return (endsEdgeFond, facesPipePeau, edgeRadFacePipePeau, \
+          edgesCircPeau, groupEdgesBordPeau, \
           bordsVifs, edgesFissurePeau, aretesVivesCoupees)
diff --git a/src/Tools/blocFissure/gmu/identifieEdgesPeau_a.py b/src/Tools/blocFissure/gmu/identifieEdgesPeau_a.py
new file mode 100644 (file)
index 0000000..aef94d0
--- /dev/null
@@ -0,0 +1,84 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Identification précise des edges et disques des faces de peau selon index extremité fissure"""
+
+import logging
+
+from . import initLog
+
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+
+def identifieEdgesPeau_a(edgesFissExtPipe, facePeau, facesPeauSorted, edgesPeauFondIn, \
+                         endsEdgeFond, facesPipePeau, edgeRadFacePipePeau, edgesListees, \
+                        nro_cas=None):
+  """Identification précise des edges et disques des faces de peau selon index extremité fissure"""
+  logging.info('start')
+  logging.info("Traitement des arêtes de '%s'", facePeau.GetName())
+
+  for face in facesPeauSorted[:-1]: # la ou les faces débouchantes, pas la grande face de peau
+    logging.debug("examen face debouchante circulaire")
+    for i_aux,efep in enumerate(edgesFissExtPipe):
+      dist = geompy.MinDistance(face, efep)
+      logging.debug("  distance face circulaire edge %s", dist)
+      if dist < 1e-3:
+        for j_aux, edpfi in enumerate(edgesPeauFondIn):
+          if geompy.MinDistance(face, edpfi) < 1e-3:
+            j_aux_0 = j_aux
+            break
+        sharedVertices = geompy.GetSharedShapesMulti([face, edgesPeauFondIn[j_aux_0]], geompy.ShapeType["VERTEX"])
+        nameFace = "facePipePeau_{}".format(i_aux)
+        nameVert = "endEdgeFond_{}".format(i_aux)
+        facesPipePeau[i_aux] = face
+        endsEdgeFond[i_aux] = sharedVertices[0]
+        geomPublish(initLog.debug, face, nameFace, nro_cas)
+        geomPublish(initLog.debug, sharedVertices[0], nameVert, nro_cas)
+        edgesFace = geompy.ExtractShapes(face, geompy.ShapeType["EDGE"], True)
+        for edge in edgesFace:
+          if geompy.MinDistance(edge, sharedVertices[0]) < 1e-3:
+            edgeRadFacePipePeau[i_aux] = edge
+            nameEdge = "edgeRadFacePipePeau_{}".format(i_aux)
+            geomPublish(initLog.debug, edge, nameEdge, nro_cas)
+            break
+
+  # --- edges elliptiques de la face de peau et points de jonction de la face externe de fissure
+  logging.info('Nombre de faces : len(facesPipePeau) = %d', len(facesPipePeau))
+  edgesCircPeau = list()
+  verticesCircPeau = list()
+  for i_aux,fcirc in enumerate(facesPipePeau):
+    # Arêtes
+    edges = geompy.GetSharedShapesMulti([facePeau, fcirc], geompy.ShapeType["EDGE"])
+    groupe = geompy.CreateGroup(facePeau, geompy.ShapeType["EDGE"])
+    geompy.UnionList(groupe, edges)
+    geomPublishInFather(initLog.always, facePeau, groupe, "edgeCirc_{}".format(i_aux))
+    edgesCircPeau.append(groupe)
+    edgesListees = edgesListees + edges
+    # Sommets
+    vertices = geompy.GetSharedShapesMulti([facePeau, fcirc], geompy.ShapeType["VERTEX"])
+    groupe = geompy.CreateGroup(facePeau, geompy.ShapeType["VERTEX"])
+    geompy.UnionList(groupe, vertices)
+    geomPublishInFather(initLog.info, facePeau, groupe, "point(s)EdgeCirc_{}".format(i_aux))
+    verticesCircPeau.append(groupe)
+
+  logging.info("==> Nombre de groupes d'arêtes   : len(edgesCircPeau)    = %d", len(edgesCircPeau))
+  logging.info("==> Nombre de groupes de sommets : len(verticesCircPeau) = %d", len(verticesCircPeau))
+
+  return edgesCircPeau, verticesCircPeau
diff --git a/src/Tools/blocFissure/gmu/identifieEdgesPeau_b.py b/src/Tools/blocFissure/gmu/identifieEdgesPeau_b.py
new file mode 100644 (file)
index 0000000..2987021
--- /dev/null
@@ -0,0 +1,99 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""edges de bord de la face de peau"""
+
+import logging
+
+from . import initLog
+
+from .geomsmesh import geompy
+from .geomsmesh import geomPublishInFather
+
+def identifieEdgesPeau_b(facePeau, edgesListees, \
+                         fillingFaceExterne, aretesVivesC, aretesVivesCoupees, \
+                          nro_cas=None):
+  """edges de bord de la face de peau"""
+  logging.info('start')
+
+  # Liste des arêtes de bord
+  edgesFilling = geompy.ExtractShapes(fillingFaceExterne, geompy.ShapeType["EDGE"], False)
+  logging.info('Détermination des arêtes de bord à partir des %d arêtes de fillingFaceExterne', len(edgesFilling))
+  edgesBords = list()
+  for i_aux, edge in enumerate(edgesFilling):
+    edgepeau = geompy.GetInPlace(facePeau, edge)
+    name = "edgepeau_{}".format(i_aux)
+    geomPublishInFather(initLog.debug, facePeau,edgepeau, name)
+    logging.debug("edgepeau %s", geompy.ShapeInfo(edgepeau))
+    if geompy.ShapeInfo(edgepeau)['EDGE'] > 1:
+      logging.debug("  EDGES multiples")
+      l_edges = geompy.ExtractShapes(edgepeau, geompy.ShapeType["EDGE"], False)
+      edgesBords.extend(l_edges)
+      edgesListees.extend(l_edges)
+    else:
+      logging.debug("  EDGE")
+      edgesBords.append(edgepeau)
+      edgesListees.append(edgepeau)
+  logging.info('==> Nombre d arêtes de bord : len(edgesBords) = %d', len(edgesBords))
+
+  groupEdgesBordPeau = geompy.CreateGroup(facePeau, geompy.ShapeType["EDGE"])
+  geompy.UnionList(groupEdgesBordPeau, edgesBords)
+  bordsVifs = None
+  if aretesVivesC is not None:
+    logging.info("identification des bords vifs par GetInPlace")
+    bordsVifs = geompy.GetInPlace(facePeau, aretesVivesC)
+    if bordsVifs is None:
+      logging.debug("pas d'identification des bords vifs par GetInPlace: test par distance")
+      edvifs = list()
+      arvives = geompy.ExtractShapes(aretesVivesC, geompy.ShapeType["EDGE"], False)
+      l_edges = geompy.ExtractShapes(facePeau, geompy.ShapeType["EDGE"], False)
+      for edge in l_edges:
+        vxs = geompy.ExtractShapes(edge, geompy.ShapeType["VERTEX"], False)
+        for arete in arvives:
+          dist = geompy.MinDistance(vxs[0], arete)
+          dist += geompy.MinDistance(vxs[1], arete)
+          logging.debug("test distance bord face peau - arete vive: %s",dist)
+          if ( dist < 0.001 ):
+            edvifs.append(edge)
+            break
+      if edvifs:
+        logging.info('==> Nombre d arêtes de bord vif : len(edvifs) = %d', len(edvifs))
+        bordsVifs = geompy.CreateGroup(facePeau,geompy.ShapeType["EDGE"])
+        for edge in edvifs:
+          geompy.AddObject(bordsVifs, geompy.GetSubShapeID(facePeau, edge))
+
+  if bordsVifs is not None:
+    geomPublishInFather(initLog.always, facePeau, bordsVifs, "bordsVifs")
+    groupEdgesBordPeau = geompy.CutGroups(groupEdgesBordPeau, bordsVifs)
+    grptmp = None
+    if len(aretesVivesCoupees) > 0:
+      grpc = geompy.MakeCompound(aretesVivesCoupees)
+      grptmp = geompy.GetInPlace(facePeau, grpc)
+    if grptmp is not None:
+      grpnew = geompy.CutGroups(bordsVifs, grptmp) # ce qui est nouveau dans bordsVifs
+    else:
+      grpnew = bordsVifs
+    if grpnew is not None:
+      edv = geompy.ExtractShapes(grpnew, geompy.ShapeType["EDGE"], False)
+      aretesVivesCoupees += edv
+
+  logging.debug("aretesVivesCoupees %s",aretesVivesCoupees)
+  geomPublishInFather(initLog.always, facePeau, groupEdgesBordPeau , "EdgesBords")
+
+  return groupEdgesBordPeau, bordsVifs
diff --git a/src/Tools/blocFissure/gmu/identifieEdgesPeau_c.py b/src/Tools/blocFissure/gmu/identifieEdgesPeau_c.py
new file mode 100644 (file)
index 0000000..6caa191
--- /dev/null
@@ -0,0 +1,73 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""edges de la face de peau partagées avec la face de fissure"""
+
+import logging
+
+from . import initLog
+
+from .geomsmesh import geompy
+from .geomsmesh import geomPublishInFather
+
+from .substractSubShapes import substractSubShapes
+
+def identifieEdgesPeau_c(verticesPipePeau, facePeau, edgesListees, verticesCircPeau):
+  """edges de la face de peau partagées avec la face de fissure"""
+  logging.info('start')
+  logging.info("Traitement des arêtes de '%s'", facePeau.GetName())
+  logging.info('Nombre de sommets : len(verticesPipePeau) = %d', len(verticesPipePeau))
+
+  edgesPeau = geompy.ExtractShapes(facePeau, geompy.ShapeType["EDGE"], False)
+  logging.info('Nombre total d arêtes de la peau : len(edgesPeau) = %d', len(edgesPeau))
+
+  edges = substractSubShapes(facePeau, edgesPeau, edgesListees)
+
+  l_edge_cercle = list()
+# --- au moins une extrémité du pipe sur cette face de peau : arêtes sui les prenent toutes
+  if verticesPipePeau:
+    i_aux = -1
+    for edge in edges:
+      for groupe in verticesCircPeau:
+        cercle = True
+        for id_vertex in geompy.GetObjectIDs(groupe):
+          vertex = geompy.GetSubShape(facePeau, [id_vertex])
+          distance = geompy.MinDistance(vertex, edge)
+          logging.info(".. distance %s", distance)
+          if ( distance > 1.e-3 ):
+            cercle = False
+            break
+        if cercle:
+          logging.info("... entrée de %s dans l_edge_cercle", edge)
+          l_edge_cercle.append(edge)
+          i_aux += 1
+          name = "edgeFissurePeauCercle_{}".format(i_aux)
+          geomPublishInFather(initLog.info, facePeau, edge, name)
+
+# --- Les arêtes n'appartenant pas aux cercles
+  edgesFissurePeau = list()
+  for i_aux, edge in enumerate(edges):
+    if edge not in l_edge_cercle:
+      edgesFissurePeau.append(edge)
+      name = "edgeFissurePeau_{}".format(i_aux)
+      geomPublishInFather(initLog.debug, facePeau, edge, name)
+
+  logging.info('==> Nombre d arêtes : len(edgesFissurePeau) = %d', len(edgesFissurePeau))
+
+  return edgesFissurePeau
index 0d4b28e9578ab3c891fb1b48f06f450006603fab..aa1745894309a7dbaf7e97b89f9e4f058c5ba0a6 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Eléments débouchants (intersection pipe et peau), indexés selon les edges du fond de fissure (edgesFondIn)"""
 
 import logging
-import math
 
-from .geomsmesh import geompy
-from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
-from . import initLog
-import traceback
-from .fissError import fissError
+from .identifieElementsDebouchants_a import identifieElementsDebouchants_a
+from .identifieElementsDebouchants_b import identifieElementsDebouchants_b
+from .identifieElementsDebouchants_c import identifieElementsDebouchants_c
+from .identifieElementsDebouchants_d import identifieElementsDebouchants_d
 
-from .produitMixte import produitMixte
-from .whichSide import whichSide
-  
-def identifieElementsDebouchants(ifil, facesDefaut, partitionPeauFissFond,
-                                edgesFondIn, edgesFondFiss, wireFondFiss,
-                                aretesVivesC, fillingFaceExterne,
-                                edgesPipeIn, verticesPipePeau, rayonPipe,
+def identifieElementsDebouchants(ifil, facesDefaut, partitionPeauFissFond, \
+                                edgesFondIn, edgesFondFiss, wireFondFiss, \
+                                aretesVivesC, fillingFaceExterne, \
+                                edgesPipeIn, verticesPipePeau, rayonPipe, \
                                 facesInside, facesOnside):
-  """
-  elements débouchants (intersection pipe et peau), indexés selon les edges du fond de fissure (edgesFondIn)
-  """
-  
+  """Eléments débouchants (intersection pipe et peau), indexés selon les edges du fond de fissure (edgesFondIn)"""
+
   logging.info('start')
-  verticesEdgesFondIn = [] # les points du fond de fissure au débouché du pipe sur la peau (indice de edgesFondIn)
-  pipexts = []             # les segments de pipe associés au points de fond de fissure débouchants (même indice)
-  cercles = []             # les cercles de generation des pipes débouchant (même indice)
-  facesFissExt = []        # les faces de la fissure externe associés au points de fond de fissure débouchants (même indice)
-  edgesFissExtPeau = []    # edges des faces de fissure externe sur la peau (même indice)
-  edgesFissExtPipe = []    # edges des faces de fissure externe sur le pipe (même indice)
+
+  verticesEdgesFondIn = list() # les points du fond de fissure au débouché du pipe sur la peau (indice de edgesFondIn)
+  pipexts = list()             # les segments de pipe associés au points de fond de fissure débouchants (même indice)
+  cercles = list()             # les cercles de generation des pipes débouchant (même indice)
+  facesFissExt = list()        # les faces de la fissure externe associés au points de fond de fissure débouchants (même indice)
+  edgesFissExtPeau = list()    # edges des faces de fissure externe sur la peau (même indice)
+  edgesFissExtPipe = list()    # edges des faces de fissure externe sur le pipe (même indice)
 
   #logging.debug("edgesFondIn %s", edgesFondIn)
   for iedf, edge in enumerate(edgesFondIn):
-    name = "edgeFondIn%d"%iedf
-    geomPublishInFather(initLog.debug, partitionPeauFissFond, edge, name)
-    dist = [ geompy.MinDistance(pt, edge) for pt in verticesPipePeau]
-    ptPeau = verticesPipePeau[dist.index(min(dist))] # le point de verticesPipePeau a distance minimale de l'edge
-    [u, PointOnEdge, EdgeInWireIndex]  = geompy.MakeProjectionOnWire(ptPeau, wireFondFiss)
-    logging.debug("u:%s, EdgeInWireIndex: %s, len(edgesFondFiss): %s", u, EdgeInWireIndex, len(edgesFondFiss))
-    localEdgeInFondFiss = edgesFondFiss[EdgeInWireIndex]
-    centre = PointOnEdge
-    centre2 = geompy.MakeVertexOnCurve(localEdgeInFondFiss, u)
-    geomPublishInFather(initLog.debug, partitionPeauFissFond, centre2, "centre2_%d"%iedf)
+
+    ptPeau, centre, norm, localEdgeInFondFiss, localEdgeInFondFiss, cercle = \
+                                   identifieElementsDebouchants_a(iedf, \
+                                                                  partitionPeauFissFond, edgesFondFiss, wireFondFiss, \
+                                                                  verticesPipePeau, rayonPipe, edge,)
     verticesEdgesFondIn.append(centre)
-    name = "verticeEdgesFondIn%d"%iedf
-    geomPublishInFather(initLog.debug, partitionPeauFissFond, centre, name)
-    norm = geompy.MakeTangentOnCurve(localEdgeInFondFiss, u)
-    geomPublishInFather(initLog.debug, partitionPeauFissFond, centre, "norm%d"%iedf)
-    cercle = geompy.MakeCircle(centre, norm, rayonPipe)
-    geomPublishInFather(initLog.debug, partitionPeauFissFond, cercle, "cerclorig%d"%iedf)
-    [vertex] = geompy.ExtractShapes(cercle, geompy.ShapeType["VERTEX"], False)
-    vec1 = geompy.MakeVector(centre, vertex)
-    vec2 = geompy.MakeVector(centre, ptPeau)
-    angle = geompy.GetAngleRadians(vec1, vec2)
-    # cas général : on reconstitue une portion de pipe, avec l'arête de couture qui coincide
-    #   avec la face de fissure, au niveau du débouché sur la face externe
-    # cas dégénéré : le pipe débouche perpendiculairement à une surface plane à l'origine.
-    #   La partition filling / pipe reconstruit échoue.
-    #   - Si on partitionne le filling avec un simple pipe obtenu par extrusion droite du cercle,
-    #     cela donne un point en trop sur le cercle.
-    #   - Si on prend une vraie surface plane (pas un filling), on peut faire la partition avec 
-    #     les pipes reconstruits              
-    logging.debug("angle=%s", angle)
-    #if abs(angle) > 1.e-7:
-    sommetAxe = geompy.MakeTranslationVector(centre, norm)
-    pm = produitMixte(centre, vertex, ptPeau, sommetAxe)
-    if pm > 0:  # ajout de pi a (-)angle pour éviter des points confondus (partition échoue) dans les cas dégénérés
-      cercle = geompy.MakeRotation(cercle, norm, angle + math.pi)
-    else:
-      cercle = geompy.MakeRotation(cercle, norm, -angle + math.pi)
-    name = "cercle%d"%iedf
-    geomPublishInFather(initLog.debug,partitionPeauFissFond, cercle, name)
     cercles.append(cercle)
 
     # --- estimation de la longueur du pipe necessaire de part et d'autre du point de sortie
-    if aretesVivesC is None:
-      faceTestPeau = fillingFaceExterne
-    else:
-      faceTestPeau = facesDefaut[ifil]
-    sideCentre = whichSide(faceTestPeau, centre)
-    locPt0 = geompy.MakeVertexOnCurve(localEdgeInFondFiss, 0.0)
-    locPt1 = geompy.MakeVertexOnCurve(localEdgeInFondFiss, 1.0)
-    sidePt0 = whichSide(faceTestPeau, locPt0)
-    sidePt1 = whichSide(faceTestPeau, locPt1)
-    logging.debug("position centre cercle: %s, extremité edge u0: %s, u1: %s", sideCentre, sidePt0, sidePt1) 
-    normFace = geompy.GetNormal(faceTestPeau, ptPeau)
-    inclPipe = abs(geompy.GetAngleRadians(norm, normFace))
-    lgp = max(rayonPipe/2., abs(3*rayonPipe*math.tan(inclPipe)))
-    logging.debug("angle inclinaison Pipe en sortie: %s degres, lgp: %s", inclPipe*180/math.pi, lgp)
-    
-    # --- position des points extremite du pipe sur l'edge debouchante
-    #     il faut la distance curviligne ofp du point central par rapport à une extrémité de l'edge débouchante
-    locEdgePart = geompy.MakePartition([localEdgeInFondFiss],[centre], [], [], geompy.ShapeType["EDGE"], 0, [], 0)
-    edgesLoc = geompy.ExtractShapes(locEdgePart, geompy.ShapeType["EDGE"], False)
-    edgesLocSorted =[(geompy.MinDistance(edge, locPt0), kk, edge) for kk, edge in enumerate(edgesLoc)]
-    edgesLocSorted.sort()
-    try:
-      ofp = geompy.BasicProperties(edgesLocSorted[0][2])[0] # distance curviligne centre locPt0
-    except:
-      texte = "Identification des éléments au débouché du pipe sur la face externe impossible. "
-      texte += "Cause possible : la ligne de fond de fissure comprend un point géométrique coincidant avec la face externe. "
-      texte += "La ligne de fond de fissure doit déboucher franchement de la face externe, et ne doit pas être coupée au niveau de la face."
-      raise fissError(traceback.extract_stack(),texte)
-    logging.debug("distance curviligne centre extremite0: %s", ofp)
-    p1 = geompy.MakeVertexOnCurveByLength(localEdgeInFondFiss, ofp +lgp, locPt0)
-    p2 = geompy.MakeVertexOnCurveByLength(localEdgeInFondFiss, ofp -lgp, locPt0)
-    geomPublishInFather(initLog.debug, wireFondFiss, p1, "p1_%d"%iedf)
-    geomPublishInFather(initLog.debug, wireFondFiss, p2, "p2_%d"%iedf)
+    loc_pt0, lgp = identifieElementsDebouchants_b(ifil, \
+                                  facesDefaut,aretesVivesC, fillingFaceExterne, rayonPipe, \
+                                  ptPeau, centre, norm, localEdgeInFondFiss)
 
-    edgePart = geompy.MakePartition([localEdgeInFondFiss], [p1,p2], [], [], geompy.ShapeType["EDGE"], 0, [], 0)
-    edps = geompy.ExtractShapes(edgePart, geompy.ShapeType["EDGE"], True)
-    for edp in edps:
-      if geompy.MinDistance(centre, edp) < 1.e-3:
-        pipext = geompy.MakePipe(cercle, edp)
-        name = "pipeExt%d"%iedf
-        geomPublishInFather(initLog.debug, partitionPeauFissFond, pipext, name)
-        pipexts.append(pipext)
+    # --- position des points extremite du pipe sur l'edge debouchante
+    identifieElementsDebouchants_c(iedf,\
+                                   partitionPeauFissFond, wireFondFiss, \
+                                   centre, localEdgeInFondFiss, cercle, loc_pt0, lgp, pipexts)
 
-    for ifa, face in enumerate(facesInside):
-      logging.debug("recherche edges communes entre une face inside et (faces onside, edges pipe et fond débouchante)")
-      edgesPeauFis = []
-      edgesPipeFis = []
-      edgesPipeFnd = []
-      try:
-        edgesPeauFis = geompy.GetSharedShapesMulti([geompy.MakeCompound(facesOnside), face], geompy.ShapeType["EDGE"])
-        logging.debug("    faces onside %s",edgesPeauFis)
-        edgesPipeFis = geompy.GetSharedShapesMulti([geompy.MakeCompound(edgesPipeIn), face], geompy.ShapeType["EDGE"])
-        logging.debug("    edgesPipeIn %s", edgesPipeFis)
-        edgesPipeFnd = geompy.GetSharedShapesMulti([geompy.MakeCompound(edgesFondIn), face], geompy.ShapeType["EDGE"])
-        logging.debug("    edgesFondIn %s ", edgesPipeFnd)
-      except:
-        logging.debug("  pb edges communes %s %s %s",edgesPeauFis, edgesPipeFis, edgesPipeFnd)
-        pass
-      if (len(edgesPeauFis) > 0) and (len(edgesPipeFis) > 0) and (len(edgesPipeFnd) == 0):
-        dist = geompy.MinDistance(geompy.MakeCompound(edgesPeauFis), ptPeau)
-        logging.debug("    test distance extrémité reference %s", dist)
-        if dist < 1.e-3: # c'est la face de fissure externe associée
-          logging.debug("    face %s inside ajoutée", ifa)
-          facesFissExt.append(face)
-          name="faceFissExt%d"%iedf
-          geomPublishInFather(initLog.debug, partitionPeauFissFond, face, name)
-          dist = 1.
-          for ipe, edpe in enumerate(edgesPeauFis):
-            for ipi, edpi in enumerate(edgesPipeFis):
-              dist = geompy.MinDistance(edpe, edpi)
-              if dist < 1.e-3:
-                edgesFissExtPeau.append(edpe)
-                name="edgesFissExtPeau%d"%iedf
-                geomPublishInFather(initLog.debug, partitionPeauFissFond, edpe, name)
-                edgesFissExtPipe.append(edpi)
-                name="edgesFissExtPipe%d"%iedf
-                geomPublishInFather(initLog.debug, partitionPeauFissFond, edpi, name)
-                break
-            if dist < 1.e-3:
-              break
+    # --- Recherche edges communes entre une face inside et (faces onside, edges pipe et fond débouchante)
+    identifieElementsDebouchants_d(iedf,\
+                                   partitionPeauFissFond, edgesFondIn, edgesPipeIn, \
+                                   facesInside, facesOnside, \
+                                   ptPeau, facesFissExt, edgesFissExtPeau, edgesFissExtPipe)
 
-  return (verticesEdgesFondIn, pipexts, cercles, facesFissExt, edgesFissExtPeau, edgesFissExtPipe)
\ No newline at end of file
+  return (verticesEdgesFondIn, pipexts, cercles, facesFissExt, edgesFissExtPeau, edgesFissExtPipe)
diff --git a/src/Tools/blocFissure/gmu/identifieElementsDebouchants_a.py b/src/Tools/blocFissure/gmu/identifieElementsDebouchants_a.py
new file mode 100644 (file)
index 0000000..f82a128
--- /dev/null
@@ -0,0 +1,79 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Eléments débouchants (intersection pipe et peau), indexés selon les edges du fond de fissure (edgesFondIn)"""
+
+import logging
+import math
+
+from . import initLog
+
+from .geomsmesh import geompy
+from .geomsmesh import geomPublishInFather
+
+from .produitMixte import produitMixte
+
+def identifieElementsDebouchants_a(iedf,\
+                                   partitionPeauFissFond, edgesFondFiss, wireFondFiss, \
+                                   verticesPipePeau, rayonPipe, edge):
+  """Eléments débouchants (intersection pipe et peau), indexés selon les edges du fond de fissure (edgesFondIn)"""
+
+  logging.info('start')
+
+  name = "edgeFondIn{}".format(iedf)
+  geomPublishInFather(initLog.debug, partitionPeauFissFond, edge, name)
+  dist = [ geompy.MinDistance(pt, edge) for pt in verticesPipePeau]
+  ptPeau = verticesPipePeau[dist.index(min(dist))] # le point de verticesPipePeau a distance minimale de l'edge
+  [parametre, PointOnEdge, EdgeInWireIndex]  = geompy.MakeProjectionOnWire(ptPeau, wireFondFiss)
+  logging.debug("parametre:%s, EdgeInWireIndex: %s, len(edgesFondFiss): %s", parametre, EdgeInWireIndex, len(edgesFondFiss))
+
+  localEdgeInFondFiss = edgesFondFiss[EdgeInWireIndex]
+  centre = PointOnEdge
+  centre2 = geompy.MakeVertexOnCurve(localEdgeInFondFiss, parametre)
+  geomPublishInFather(initLog.debug, partitionPeauFissFond, centre2, "centre2_{}".format(iedf))
+  name = "verticeEdgesFondIn{}".format(iedf)
+  geomPublishInFather(initLog.debug, partitionPeauFissFond, centre, name)
+  norm = geompy.MakeTangentOnCurve(localEdgeInFondFiss, parametre)
+  geomPublishInFather(initLog.debug, partitionPeauFissFond, centre, "norm{}".format(iedf))
+  cercle = geompy.MakeCircle(centre, norm, rayonPipe)
+  geomPublishInFather(initLog.debug, partitionPeauFissFond, cercle, "cerclorig{}".format(iedf))
+  [vertex] = geompy.ExtractShapes(cercle, geompy.ShapeType["VERTEX"], False)
+  vec1 = geompy.MakeVector(centre, vertex)
+  vec2 = geompy.MakeVector(centre, ptPeau)
+  angle = geompy.GetAngleRadians(vec1, vec2)
+  # cas général : on reconstitue une portion de pipe, avec l'arête de couture qui coincide
+  #   avec la face de fissure, au niveau du débouché sur la face externe
+  # cas dégénéré : le pipe débouche perpendiculairement à une surface plane à l'origine.
+  #   La partition filling / pipe reconstruit échoue.
+  #   - Si on partitionne le filling avec un simple pipe obtenu par extrusion droite du cercle,
+  #     cela donne un point en trop sur le cercle.
+  #   - Si on prend une vraie surface plane (pas un filling), on peut faire la partition avec
+  #     les pipes reconstruits
+  logging.debug("angle=%s", angle)
+
+  #if abs(angle) > 1.e-7:
+  sommetAxe = geompy.MakeTranslationVector(centre, norm)
+  if ( produitMixte(centre, vertex, ptPeau, sommetAxe) > 0 ):  # ajout de pi a (-)angle pour éviter des points confondus (partition échoue) dans les cas dégénérés
+    cercle = geompy.MakeRotation(cercle, norm, angle + math.pi)
+  else:
+    cercle = geompy.MakeRotation(cercle, norm, -angle + math.pi)
+  name = "cercle{}".format(iedf)
+  geomPublishInFather(initLog.debug,partitionPeauFissFond, cercle, name)
+
+  return ptPeau, centre, norm, localEdgeInFondFiss, localEdgeInFondFiss, cercle
diff --git a/src/Tools/blocFissure/gmu/identifieElementsDebouchants_b.py b/src/Tools/blocFissure/gmu/identifieElementsDebouchants_b.py
new file mode 100644 (file)
index 0000000..6be0ace
--- /dev/null
@@ -0,0 +1,52 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Estimation de la longueur du pipe necessaire de part et d'autre du point de sortie"""
+
+import logging
+import math
+
+from .geomsmesh import geompy
+
+from .whichSide import whichSide
+
+def identifieElementsDebouchants_b(ifil, \
+                                  facesDefaut,aretesVivesC, fillingFaceExterne, rayonPipe, \
+                                  ptPeau, centre, norm, localEdgeInFondFiss):
+  """Estimation de la longueur du pipe necessaire de part et d'autre du point de sortie"""
+
+  logging.info('start')
+
+  # --- estimation de la longueur du pipe necessaire de part et d'autre du point de sortie
+  if aretesVivesC is None:
+    face_test_peau = fillingFaceExterne
+  else:
+    face_test_peau = facesDefaut[ifil]
+  side_centre = whichSide(face_test_peau, centre)
+  loc_pt0 = geompy.MakeVertexOnCurve(localEdgeInFondFiss, 0.0)
+  loc_pt1 = geompy.MakeVertexOnCurve(localEdgeInFondFiss, 1.0)
+  side_point_0 = whichSide(face_test_peau, loc_pt0)
+  side_point_1 = whichSide(face_test_peau, loc_pt1)
+  logging.debug("position centre cercle: %s, extremité edge u0: %s, u1: %s", side_centre, side_point_0, side_point_1)
+  norm_face = geompy.GetNormal(face_test_peau, ptPeau)
+  incl_pipe = abs(geompy.GetAngleRadians(norm, norm_face))
+  lgp = max(rayonPipe/2., abs(3*rayonPipe*math.tan(incl_pipe)))
+  logging.debug("angle inclinaison Pipe en sortie: %s degres, lgp: %s", incl_pipe*180/math.pi, lgp)
+
+  return loc_pt0, lgp
diff --git a/src/Tools/blocFissure/gmu/identifieElementsDebouchants_c.py b/src/Tools/blocFissure/gmu/identifieElementsDebouchants_c.py
new file mode 100644 (file)
index 0000000..de9a267
--- /dev/null
@@ -0,0 +1,68 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Position des points extremite du pipe sur l'edge debouchante"""
+
+import logging
+
+import traceback
+
+from . import initLog
+
+from .geomsmesh import geompy
+from .geomsmesh import geomPublishInFather
+
+from .fissError import fissError
+
+def identifieElementsDebouchants_c(iedf,\
+                                   partitionPeauFissFond, wireFondFiss, \
+                                   centre, localEdgeInFondFiss, cercle, loc_pt0, lgp, pipexts):
+  """Position des points extremite du pipe sur l'edge debouchante"""
+
+  logging.info('start')
+
+  # ---
+  #     il faut la distance curviligne ofp du point central par rapport à une extrémité de l'edge débouchante
+  locEdgePart = geompy.MakePartition([localEdgeInFondFiss],[centre], list(), list(), geompy.ShapeType["EDGE"], 0, list(), 0)
+  edgesLoc = geompy.ExtractShapes(locEdgePart, geompy.ShapeType["EDGE"], False)
+  edgesLocSorted =[(geompy.MinDistance(edge, loc_pt0), kk, edge) for kk, edge in enumerate(edgesLoc)]
+  edgesLocSorted.sort()
+  try:
+    ofp = geompy.BasicProperties(edgesLocSorted[0][2])[0] # distance curviligne centre loc_pt0
+  except:
+    texte = "Identification des éléments au débouché du pipe sur la face externe impossible. "
+    texte += "Cause possible : la ligne de fond de fissure comprend un point géométrique coincidant avec la face externe. "
+    texte += "La ligne de fond de fissure doit déboucher franchement de la face externe, et ne doit pas être coupée au niveau de la face."
+    raise fissError(traceback.extract_stack(),texte)
+  logging.debug("distance curviligne centre extremite0: %s", ofp)
+  point_1 = geompy.MakeVertexOnCurveByLength(localEdgeInFondFiss, ofp +lgp, loc_pt0)
+  point_2 = geompy.MakeVertexOnCurveByLength(localEdgeInFondFiss, ofp -lgp, loc_pt0)
+  geomPublishInFather(initLog.debug, wireFondFiss, point_1, "point_1_{}".format(iedf))
+  geomPublishInFather(initLog.debug, wireFondFiss, point_2, "point_2_{}".format(iedf))
+
+  edgePart = geompy.MakePartition([localEdgeInFondFiss], [point_1,point_2], list(), list(), geompy.ShapeType["EDGE"], 0, list(), 0)
+  edps = geompy.ExtractShapes(edgePart, geompy.ShapeType["EDGE"], True)
+  for edp in edps:
+    if geompy.MinDistance(centre, edp) < 1.e-3:
+      pipext = geompy.MakePipe(cercle, edp)
+      name = "pipeExt{}".format(iedf)
+      geomPublishInFather(initLog.debug, partitionPeauFissFond, pipext, name)
+      pipexts.append(pipext)
+
+  return
diff --git a/src/Tools/blocFissure/gmu/identifieElementsDebouchants_d.py b/src/Tools/blocFissure/gmu/identifieElementsDebouchants_d.py
new file mode 100644 (file)
index 0000000..0426d6b
--- /dev/null
@@ -0,0 +1,72 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Recherche edges communes entre une face inside et (faces onside, edges pipe et fond débouchante)"""
+
+import logging
+
+from . import initLog
+
+from .geomsmesh import geompy
+from .geomsmesh import geomPublishInFather
+
+def identifieElementsDebouchants_d(iedf,\
+                                   partitionPeauFissFond, edgesFondIn, edgesPipeIn, \
+                                   facesInside, facesOnside, \
+                                   ptPeau, facesFissExt, edgesFissExtPeau, edgesFissExtPipe):
+  """Recherche edges communes entre une face inside et (faces onside, edges pipe et fond débouchante)"""
+
+  for ifa, face in enumerate(facesInside):
+    logging.debug("recherche edges communes entre une face inside et (faces onside, edges pipe et fond débouchante)")
+    edgesPeauFis = list()
+    edgesPipeFis = list()
+    edgesPipeFnd = list()
+    try:
+      edgesPeauFis = geompy.GetSharedShapesMulti([geompy.MakeCompound(facesOnside), face], geompy.ShapeType["EDGE"])
+      logging.debug("    faces onside %s",edgesPeauFis)
+      edgesPipeFis = geompy.GetSharedShapesMulti([geompy.MakeCompound(edgesPipeIn), face], geompy.ShapeType["EDGE"])
+      logging.debug("    edgesPipeIn %s", edgesPipeFis)
+      edgesPipeFnd = geompy.GetSharedShapesMulti([geompy.MakeCompound(edgesFondIn), face], geompy.ShapeType["EDGE"])
+      logging.debug("    edgesFondIn %s ", edgesPipeFnd)
+    except:
+      logging.debug("  pb edges communes %s %s %s",edgesPeauFis, edgesPipeFis, edgesPipeFnd)
+    if (len(edgesPeauFis) > 0) and (len(edgesPipeFis) > 0) and (len(edgesPipeFnd) == 0):
+      dist = geompy.MinDistance(geompy.MakeCompound(edgesPeauFis), ptPeau)
+      logging.debug("    test distance extrémité reference %s", dist)
+      if dist < 1.e-3: # c'est la face de fissure externe associée
+        logging.debug("    face %s inside ajoutée", ifa)
+        facesFissExt.append(face)
+        name="faceFissExt%d"%iedf
+        geomPublishInFather(initLog.debug, partitionPeauFissFond, face, name)
+        dist = 1.
+        for edpe in edgesPeauFis:
+          for edpi in edgesPipeFis:
+            dist = geompy.MinDistance(edpe, edpi)
+            if dist < 1.e-3:
+              edgesFissExtPeau.append(edpe)
+              name="edgesFissExtPeau%d"%iedf
+              geomPublishInFather(initLog.debug, partitionPeauFissFond, edpe, name)
+              edgesFissExtPipe.append(edpi)
+              name="edgesFissExtPipe%d"%iedf
+              geomPublishInFather(initLog.debug, partitionPeauFissFond, edpi, name)
+              break
+          if dist < 1.e-3:
+            break
+
+  return
index f67f26a9ac55ea901bf834e5a0bba8770f31077a..06966ff868242df1fcf22b2a59a5b50256600b6d 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Identification edges fond de fissure, edges pipe sur la face de fissure,
+edges prolongées
+edges internes communes pipe et fissure, points communs edges fissure peau et edges circulaires
+"""
 
 import logging
 
+from . import initLog
+
 from .geomsmesh import geompy
-from .geomsmesh import geomPublish
 from .geomsmesh import geomPublishInFather
-from . import initLog
 
 from .extractionOrientee import extractionOrientee
 from .extractionOrienteeMulti import extractionOrienteeMulti
+
 def identifieElementsFissure(ifil, facesDefaut, partitionPeauFissFond,
                              edgesPipeFiss, edgesFondFiss, aretesVivesC,
                              fillingFaceExterne, centreFondFiss):
@@ -44,34 +48,32 @@ def identifieElementsFissure(ifil, facesDefaut, partitionPeauFissFond,
   geomPublishInFather(initLog.debug, partitionPeauFissFond, edgesPipeC, "edgesPipeFiss")
   edgesFondC = geompy.GetInPlace(partitionPeauFissFond, geompy.MakeCompound(edgesFondFiss))
   geomPublishInFather(initLog.debug, partitionPeauFissFond, edgesFondC, "edgesFondFiss")
-  
+
   if aretesVivesC is None:
-    [edgesInside, edgesOutside, edgesOnside] = extractionOrientee(fillingFaceExterne, partitionPeauFissFond, centreFondFiss, "EDGE", 1.e-3)
-    [facesInside, facesOutside, facesOnside] = extractionOrientee(fillingFaceExterne, partitionPeauFissFond, centreFondFiss, "FACE", 1.e-3)
+    [edgesInside, _, _] = extractionOrientee(fillingFaceExterne, partitionPeauFissFond, centreFondFiss, "EDGE", 1.e-3)
+    [facesInside, _, facesOnside] = extractionOrientee(fillingFaceExterne, partitionPeauFissFond, centreFondFiss, "FACE", 1.e-3)
   else:
-    [edgesInside, edgesOutside, edgesOnside] = extractionOrienteeMulti(facesDefaut, ifil, partitionPeauFissFond, centreFondFiss, "EDGE", 1.e-3)
-    [facesInside, facesOutside, facesOnside] = extractionOrienteeMulti(facesDefaut, ifil, partitionPeauFissFond, centreFondFiss, "FACE", 1.e-3)
-    
+    [edgesInside, _, _] = extractionOrienteeMulti(facesDefaut, ifil, partitionPeauFissFond, centreFondFiss, "EDGE", 1.e-3)
+    [facesInside, _, facesOnside] = extractionOrienteeMulti(facesDefaut, ifil, partitionPeauFissFond, centreFondFiss, "FACE", 1.e-3)
+
   edgesPipeIn = geompy.GetSharedShapesMulti([edgesPipeC, geompy.MakeCompound(edgesInside)], geompy.ShapeType["EDGE"])
-  verticesPipePeau = []
+  verticesPipePeau = list()
 
-  for i, edge in enumerate(edgesPipeIn):
+  for i_aux, edge in enumerate(edgesPipeIn):
     try:
       vertices = geompy.GetSharedShapesMulti([edge, geompy.MakeCompound(facesOnside)], geompy.ShapeType["VERTEX"])
       verticesPipePeau.append(vertices[0])
-      name = "edgePipeIn%d"%i
+      name = "edgePipeIn{}".format(i_aux)
       geomPublishInFather(initLog.debug, partitionPeauFissFond, edge, name)
-      name = "verticePipePeau%d"%i
+      name = "verticePipePeau{}".format(i_aux)
       geomPublishInFather(initLog.debug, partitionPeauFissFond, vertices[0], name)
-      logging.debug("edgePipeIn%s coupe les faces OnSide", i)
+      logging.debug("edgePipeIn%s coupe les faces OnSide", i_aux)
     except:
-      logging.debug("edgePipeIn%s ne coupe pas les faces OnSide", i)
+      logging.debug("edgePipeIn%s ne coupe pas les faces OnSide", i_aux)
 
-  edgesFondIn =[]
-  if len(verticesPipePeau) > 0: # au moins une extrémité du pipe sur cette face de peau  
-    #tmp = geompy.GetSharedShapesMulti([edgesFondC, geompy.MakeCompound(edgesOutside)], geompy.ShapeType["EDGE"])
-    #edgesFondOut = [ ed for ed in tmp if geompy.MinDistance(ed, geompy.MakeCompound(facesOnside)) < 1.e-3] 
+  edgesFondIn = list()
+  if verticesPipePeau: # au moins une extrémité du pipe sur cette face de peau
     tmp = geompy.GetSharedShapesMulti([edgesFondC, geompy.MakeCompound(edgesInside)], geompy.ShapeType["EDGE"])
     edgesFondIn = [ ed for ed in tmp if geompy.MinDistance(ed, geompy.MakeCompound(facesOnside)) < 1.e-3]
 
-  return (edgesPipeIn, verticesPipePeau, edgesFondIn, facesInside, facesOnside) 
\ No newline at end of file
+  return (edgesPipeIn, verticesPipePeau, edgesFondIn, facesInside, facesOnside)
index 9c366ba54ec6fb9ae76b7cf757604b19f69cbb1f..da03b08222ad91dc1d1ae1357f01760a59f2f26b 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -17,6 +17,7 @@
 #
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
+"""Identification des éléments géométriques de la face de peau"""
 
 import logging
 
@@ -26,51 +27,54 @@ from .trouveEdgesFissPeau import trouveEdgesFissPeau
 from .identifieFacesPeau import identifieFacesPeau
 from .identifieEdgesPeau import identifieEdgesPeau
 
-def identifieElementsGeometriquesPeau(ifil, partitionPeauFissFond, edgesPipeFiss,
-                                      edgesFondFiss, wireFondFiss, aretesVivesC,
-                                      facesDefaut, centreFondFiss, rayonPipe,
-                                      aretesVivesCoupees):
-  """
-  """
+def identifieElementsGeometriquesPeau(ifil, partitionPeauFissFond, \
+                                      edgesPipeFiss, edgesFondFiss, wireFondFiss, aretesVivesC, \
+                                      facesDefaut, centreFondFiss, rayonPipe, aretesVivesCoupees, \
+                                      nro_cas=None):
+  """Identification des éléments géométriques de la face de peau"""
   logging.info('start')
   fillingFaceExterne = facesDefaut[ifil]
 
   logging.debug("traitement partitionPeauFissFond %s", ifil)
-  
+
   # --- identification edges fond de fissure, edges pipe sur la face de fissure, edges prolongées
   #     edges internes communes pipe et fissure, points communs edges fissure peau et edges circulaires
-  
-  (edgesPipeIn, verticesPipePeau, edgesFondIn, facesInside, facesOnside) = identifieElementsFissure(ifil, facesDefaut, partitionPeauFissFond,
-                                                                                                    edgesPipeFiss, edgesFondFiss, aretesVivesC,
-                                                                                                    fillingFaceExterne, centreFondFiss)
-  
+
+  (edgesPipeIn, verticesPipePeau, edgesFondIn, facesInside, facesOnside) = \
+                           identifieElementsFissure(ifil, facesDefaut, partitionPeauFissFond, \
+                                                    edgesPipeFiss, edgesFondFiss, aretesVivesC, \
+                                                    fillingFaceExterne, centreFondFiss)
+
   # --- elements débouchants (intersection pipe et peau), indexés selon les edges du fond de fissure (edgesFondIn)
-  
+
   (verticesEdgesFondIn, pipexts, cercles,
-   facesFissExt, edgesFissExtPeau, edgesFissExtPipe) = identifieElementsDebouchants(ifil, facesDefaut, partitionPeauFissFond,
-                                                                                    edgesFondIn, edgesFondFiss, wireFondFiss,
-                                                                                    aretesVivesC, fillingFaceExterne,
-                                                                                    edgesPipeIn, verticesPipePeau, rayonPipe,
+   facesFissExt, edgesFissExtPeau, edgesFissExtPipe) = identifieElementsDebouchants(ifil, facesDefaut, partitionPeauFissFond, \
+                                                                                    edgesFondIn, edgesFondFiss, wireFondFiss, \
+                                                                                    aretesVivesC, fillingFaceExterne, \
+                                                                                    edgesPipeIn, verticesPipePeau, rayonPipe, \
                                                                                     facesInside, facesOnside)
 
   # --- pour les faces de peau sans extremité débouchante de fissure, il faut recenser les edges de fissure sur la face de peau
 
   if len(verticesPipePeau) == 0: # aucune extrémité du pipe sur cette face de peau
     edgesFissExtPeau = trouveEdgesFissPeau(facesInside, facesOnside, edgesPipeIn, edgesFondIn, partitionPeauFissFond, edgesFissExtPeau)
-    
+
   # --- inventaire des faces de peau : face de peau percée du pipe, extrémités du pipe
-  
-  (facePeau, facesPeauSorted, edgesPeauFondIn) = identifieFacesPeau(ifil, verticesPipePeau, facesOnside, wireFondFiss,
-                                                                    verticesEdgesFondIn, pipexts, cercles,
-                                                                    fillingFaceExterne, centreFondFiss)
-  
+
+  (facePeau, facesPeauSorted, edgesPeauFondIn) = identifieFacesPeau(ifil, verticesPipePeau, facesOnside, wireFondFiss, \
+                                                                    verticesEdgesFondIn, pipexts, cercles, \
+                                                                    fillingFaceExterne, centreFondFiss, \
+                                                                    nro_cas)
+
   # --- identification précise des edges et disques des faces de peau selon index extremité fissure
-  
-  (endsEdgeFond, facesPipePeau, edgeRadFacePipePeau,
-   edgesCircPeau, verticesCircPeau, groupEdgesBordPeau,
-   bordsVifs, edgesFissurePeau, aretesVivesCoupees) = identifieEdgesPeau(edgesFissExtPipe, verticesPipePeau, facePeau, facesPeauSorted,
-                                                                         edgesPeauFondIn, fillingFaceExterne, aretesVivesC, aretesVivesCoupees)
-  
+
+  (endsEdgeFond, facesPipePeau, edgeRadFacePipePeau, \
+  edgesCircPeau, groupEdgesBordPeau, \
+  bordsVifs, edgesFissurePeau, aretesVivesCoupees) = \
+                                              identifieEdgesPeau(edgesFissExtPipe, verticesPipePeau, facePeau, facesPeauSorted, \
+                                                                edgesPeauFondIn, fillingFaceExterne, aretesVivesC, aretesVivesCoupees, \
+                                                                nro_cas)
+
   dataPPFF = dict(endsEdgeFond        = endsEdgeFond,        # pour chaque face [points edge fond de fissure aux débouchés du pipe]
                   facesPipePeau       = facesPipePeau,       # pour chaque face [faces du pipe débouchantes]
                   edgeRadFacePipePeau = edgeRadFacePipePeau, # pour chaque face [edge radiale des faces du pipe débouchantes ]
@@ -79,12 +83,10 @@ def identifieElementsGeometriquesPeau(ifil, partitionPeauFissFond, edgesPipeFiss
                   edgesFissExtPipe    = edgesFissExtPipe,    # pour chaque face [edge commun au pipe des faces de fissure externes]
                   facePeau            = facePeau,            # pour chaque face : la face de peau finale a mailler (percee des faces débouchantes)
                   edgesCircPeau       = edgesCircPeau,       # pour chaque face de peau : [groupe subshapes edges circulaires aux débouchés du pipe]
-                  verticesCircPeau    = verticesCircPeau,    # pour chaque face de peau : [groupe subshapes points sur edges circulaires aux débouchés du pipe]
                   groupEdgesBordPeau  = groupEdgesBordPeau,  # pour chaque face de peau : groupe subshape des edges aux bords liés à la partie saine
                   bordsVifs           = bordsVifs,           # pour chaque face de peau : groupe subshape des edges aux bords correspondant à des arêtes vives
                   edgesFissurePeau    = edgesFissurePeau,    # pour chaque face de peau : [subshape edge en peau des faces de fissure externes]
                   verticesPipePeau    = verticesPipePeau     # pour chaque face de peau : [point commun edFissPeau edCircPeau]
-                  )  
+                 )
 
   return dataPPFF, aretesVivesCoupees
-  
index 287f24a4bfa69d6fb4e5cbe07c8622d6de4fad8c..547dc3cfbe24642dbfb4045b9acbdddfc8542a11 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Identification des faces et edges de fissure externe pour maillage"""
 
 import logging
 
+from . import initLog
+
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
 from .geomsmesh import geomPublishInFather
-from . import initLog
 
-def identifieFacesEdgesFissureExterne(fsFissuExt, edFisExtPe, edFisExtPi, edgesPipeFiss):
-  """
-  identification des faces et edges de fissure externe pour maillage
-  """
+def identifieFacesEdgesFissureExterne(fsFissuExt, edFisExtPe, edFisExtPi, edgesPipeFiss, \
+                                      nro_cas=None):
+  """Identification des faces et edges de fissure externe pour maillage"""
   logging.info('start')
-  facesFissExt = []
-  edgesFissExtPeau = []
-  edgesFissExtPipe = []
-  for ifil in range(len(fsFissuExt)): # TODO: éliminer les doublons (comparer tous les vertices triés, avec mesure de distance ?)
-    facesFissExt += fsFissuExt[ifil]
+
+  texte = "---------------------------- fsFissuExt : {} ".format(fsFissuExt)
+  logging.debug(texte)
+  facesFissExt = list()
+  edgesFissExtPeau = list()
+  edgesFissExtPipe = list()
+  for ifil, face in enumerate(fsFissuExt): # éliminer les doublons (comparer tous les vertices triés, avec mesure de distance ?)
+    facesFissExt += face
     edgesFissExtPeau += edFisExtPe[ifil]
     edgesFissExtPipe += edFisExtPi[ifil]
-  logging.debug("---------------------------- identification faces de fissure externes au pipe :%s ", len(facesFissExt))
+  texte = "---------------------------- identification faces de fissure externes au pipe : {}".format(len(facesFissExt))
+  logging.debug(texte)
   # regroupement des faces de fissure externes au pipe.
-  
-  if len(facesFissExt) > 1:
+
+  if not facesFissExt:
+    texte = "---------------------------- fsFissuExt : {} ".format(fsFissuExt)
+    logging.info(texte)
+    raise Exception("stop identifieFacesEdgesFissureExterne ; aucune face de fissure externe au pipe n'a été trouvée.")
+
+  elif len(facesFissExt) > 1:
     faceFissureExterne = geompy.MakePartition(facesFissExt, [], [], [], geompy.ShapeType["FACE"], 0, [], 0)
     edgesPipeFissureExterneC = geompy.GetInPlace(faceFissureExterne, geompy.MakeCompound(edgesPipeFiss))    # edgesFissExtPipe peut ne pas couvrir toute la longueur
     # edgesPeauFissureExterneC = geompy.GetInPlace(faceFissureExterne, geompy.MakeCompound(edgesFissExtPeau))
     # il peut manquer des edges de faceFissureExterne en contact avec la peau dans edgesFissExtPeau
-    (isDone, closedFreeBoundaries, openFreeBoundaries) = geompy.GetFreeBoundary(faceFissureExterne)
-    edgesBordFFE = []
+    (_, closedFreeBoundaries, _) = geompy.GetFreeBoundary(faceFissureExterne)
+    edgesBordFFE = list()
     for bound in closedFreeBoundaries:
       edgesBordFFE += geompy.ExtractShapes(bound, geompy.ShapeType["EDGE"], False)
     edgesBordFFEid = [ (ed,geompy.GetSubShapeID(faceFissureExterne, ed)) for ed in edgesBordFFE]
-    logging.debug("edgesBordFFEid %s", edgesBordFFEid)
+    texte = "edgesBordFFEid {}".format(edgesBordFFEid)
+    logging.debug(texte)
     edgesPPE = geompy.ExtractShapes(edgesPipeFissureExterneC, geompy.ShapeType["EDGE"], False)
     edgesPPEid = [ geompy.GetSubShapeID(faceFissureExterne, ed) for ed in edgesPPE]
-    logging.debug("edgesPPEid %s", edgesPPEid)
+    texte = "edgesPPEid {}".format(edgesPPEid)
+    logging.debug(texte)
     edgesPFE = [ edid[0] for edid in edgesBordFFEid if edid[1] not in edgesPPEid] # on garde toutes les edges de bord non en contact avec le pipe
-    logging.debug("edgesPFE %s", edgesPFE)
+    texte = "edgesPFE {}".format(edgesPFE)
+    logging.debug(texte)
     edgesPeauFissureExterneC = geompy.MakeCompound(edgesPFE)
+
   else:
     faceFissureExterne = facesFissExt[0]
     edgesPeauFissureExterneC = geompy.MakeCompound(edgesFissExtPeau)
     edgesPipeFissureExterneC = geompy.MakeCompound(edgesFissExtPipe)
+
+  geomPublish(initLog.always, faceFissureExterne, "faceFissureExterne", nro_cas)
+  geomPublishInFather(initLog.always, faceFissureExterne, edgesPeauFissureExterneC, "edgesPeauFissureExterne", nro_cas)
+  geomPublishInFather(initLog.always, faceFissureExterne, edgesPipeFissureExterneC, "edgesPipeFissureExterne", nro_cas)
+
   wirePipeFissureExterne = geompy.MakeWire(geompy.ExtractShapes(edgesPipeFissureExterneC, geompy.ShapeType["EDGE"], False))
-  geomPublish(initLog.debug, faceFissureExterne, "faceFissureExterne")
-  geomPublishInFather(initLog.debug, faceFissureExterne, edgesPeauFissureExterneC, "edgesPeauFissureExterne")
-  geomPublishInFather(initLog.debug, faceFissureExterne, edgesPipeFissureExterneC, "edgesPipeFissureExterne")
-  
-  return (faceFissureExterne, edgesPipeFissureExterneC, wirePipeFissureExterne, edgesPeauFissureExterneC)
\ No newline at end of file
+
+  return (faceFissureExterne, edgesPipeFissureExterneC, wirePipeFissureExterne, edgesPeauFissureExterneC)
index 2e08901a7af04ad85023b96d86f12dbcebbc0532..e32d737994ec785a214dd7f64c82a0bae152b799 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Inventaire des faces de peau"""
 
 import logging
 
+from . import initLog
+
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
-from . import initLog
 
 from .sortFaces import sortFaces
 from .extractionOrientee import extractionOrientee
 
-def identifieFacesPeau(ifil, verticesPipePeau, facesOnside, wireFondFiss,
-                       verticesEdgesFondIn, pipexts, cercles,
-                       fillingFaceExterne, centreFondFiss):
-  """
-  inventaire des faces de peau : face de peau percée du pipe, extrémités du pipe
+def identifieFacesPeau(ifil, verticesPipePeau, facesOnside, wireFondFiss, \
+                       verticesEdgesFondIn, pipexts, cercles, \
+                       fillingFaceExterne, centreFondFiss, \
+                       nro_cas=None):
+  """Inventaire des faces de peau : face de peau percée du pipe, extrémités du pipe
+
   La partition avec le pipe peut créer un vertex (et un edge) de trop sur le cercle projeté,
   quand le cercle est très proche de la face.
   dans ce cas, la projection du cercle sur la face suivie d'une partition permet
   d'éviter le point en trop
   """
   logging.info('start')
-   
+
   facesAndFond = facesOnside
   facesAndFond.append(wireFondFiss)
   try:
     partitionPeauByPipe = geompy.MakePartition(facesAndFond, pipexts, [], [], geompy.ShapeType["FACE"], 0, [], 1)
   except:
     logging.debug("probleme partition face pipe, contournement avec MakeSection")
-    sections = []
+    sections = list()
     for pipext in pipexts:
       sections.append(geompy.MakeSection(facesOnside[0], pipext))
     partitionPeauByPipe = geompy.MakePartition(facesAndFond, sections, [], [], geompy.ShapeType["FACE"], 0, [], 1)
-    
+
   # contrôle edge en trop sur edges circulaires
   if len(verticesPipePeau) > 0: # --- au moins une extrémité du pipe sur cette face de peau
-    edgeEnTrop = []
+    edgeEnTrop = list()
     outilPart = pipexts
     facesPeau = geompy.ExtractShapes(partitionPeauByPipe, geompy.ShapeType["FACE"], False)
-    facesPeauSorted, minsur, maxsurf = sortFaces(facesPeau)
-    for i, face in enumerate(facesPeauSorted[:-1]): # on ne teste que la ou les petites faces "circulaires"
+    facesPeauSorted, _, _ = sortFaces(facesPeau)
+    for face in facesPeauSorted[:-1]: # on ne teste que la ou les petites faces "circulaires"
       nbv = geompy.NumberOfEdges(face)
       logging.debug("nombre d'edges sur face circulaire: %s", nbv)
-      if nbv > 3:
-        edgeEnTrop.append(True) # TODO : distinguer les cas avec deux faces circulaires dont l'une est correcte
-      else:
-        edgeEnTrop.append(False)
+      edgeEnTrop.append(bool(nbv > 3)) # TODO : distinguer les cas avec deux faces circulaires dont l'une est correcte
     refaire = sum(edgeEnTrop)
     if refaire > 0:
-      dc = [(geompy.MinDistance(verticesEdgesFondIn[0], fac), i)  for i, fac in enumerate(facesPeauSorted[:-1])]
-      dc.sort()
-      logging.debug("dc sorted: %s", dc)
-      i0 = dc[0][1] # indice de facesPeauSorted qui correspond à verticesEdgesFondIn[0], donc 0 pour cercles
-      direct = (i0 == 0)
-      for i, bad in enumerate(edgeEnTrop):
+      l_aux = [(geompy.MinDistance(verticesEdgesFondIn[0], fac), i_aux)  for i_aux, fac in enumerate(facesPeauSorted[:-1])]
+      l_aux.sort()
+      logging.debug("l_aux sorted: %s", l_aux)
+      direct = bool(l_aux[0][1] == 0) # l_aux[0][1] = indice de facesPeauSorted qui correspond à verticesEdgesFondIn[0], donc 0 pour cercles
+      for i_aux, bad in enumerate(edgeEnTrop):
         if direct:
-          j = i
+          j_aux = i_aux
         else:
-          j = 1-i
+          j_aux = 1-i_aux
         if bad:
-          outilPart[j] = geompy.MakeProjection(cercles[j],facesOnside[0])
-        pass
+          outilPart[j_aux] = geompy.MakeProjection(cercles[j_aux],facesOnside[0])
       partitionPeauByPipe = geompy.MakePartition(facesAndFond, outilPart, [], [], geompy.ShapeType["FACE"], 0, [], 1)
-      pass
-      
-  name="partitionPeauByPipe%d"%ifil
+
+  name="partitionPeauByPipe_{}".format(ifil)
   geomPublish(initLog.debug, partitionPeauByPipe, name)
-  [edgesPeauFondIn, edgesPeauFondOut, edgesPeauFondOn] = extractionOrientee(fillingFaceExterne, partitionPeauByPipe, centreFondFiss, "EDGE", 1.e-3)
-  [facesPeauFondIn, facesPeauFondOut, facesPeauFondOn] = extractionOrientee(fillingFaceExterne, partitionPeauByPipe, centreFondFiss, "FACE", 1.e-3)
-    
-  if len(verticesPipePeau) > 0: # --- au moins une extrémité du pipe sur cette face de peau
-    facesPeauSorted, minsur, maxsurf = sortFaces(facesPeauFondOn)
+  [edgesPeauFondIn, _, _] = extractionOrientee(fillingFaceExterne, partitionPeauByPipe, centreFondFiss, "EDGE", 1.e-3)
+  [_, _, facesPeauFondOn] = extractionOrientee(fillingFaceExterne, partitionPeauByPipe, centreFondFiss, "FACE", 1.e-3)
+
+  if verticesPipePeau: # --- au moins une extrémité du pipe sur cette face de peau
+    facesPeauSorted, _, _ = sortFaces(facesPeauFondOn)
     facePeau = facesPeauSorted[-1] # la plus grande face
   else:
     facePeau =geompy.MakePartition(facesPeauFondOn, [], [], [], geompy.ShapeType["FACE"], 0, [], 1)
     facesPeauSorted = [facePeau]
-  name="facePeau%d"%ifil
-  geomPublish(initLog.debug, facePeau, name)
 
-  return (facePeau, facesPeauSorted, edgesPeauFondIn)
\ No newline at end of file
+  name="facePeau_{}".format(ifil)
+  geomPublish(initLog.always, facePeau, name, nro_cas)
+
+  return (facePeau, facesPeauSorted, edgesPeauFondIn)
index 67e56780738c62d84835d255c84980c798da35be..2a62e716d6fadd4c5fc52ba1fca856eb1c27ff09 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
-
-import logging
-myStudy = None
+"""Création d'une nouvelle étude"""
 
 def initEtude():
-  """
-  creation nouvelle etude salome
-  """
+  """Création nouvelle etude salome"""
   from . import geomsmesh
index ee63bf2efc4dad911d0db63fc6467299d24619b0..f6987031c236b7dd63097eea4db0d2f567c304b8 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Initialisations des impressions"""
 
 import logging
 import os
+import tempfile
 
 debug = 10
 info = 20
 warning = 30
 error = 40
 critical = 50
+always = 100
 
-loglevel = warning
-logging.basicConfig(format='%(funcName)s[%(lineno)d] %(message)s',
-                    level=logging.WARNING)
+LOGFILE = tempfile.NamedTemporaryFile().name + "_blocFissure.log"
+
+LOG_LEVEL = warning
+
+logging.basicConfig(format='%(funcName)s[%(lineno)d] %(message)s', \
+                    level=logging.WARNING, \
+                    filename=LOGFILE, filemode='w')
 ch = None
 fh = None
 
 def setLogger(logfile, level, formatter):
+  """setLogger"""
   global ch, fh
   rootLogger = logging.getLogger('')
   if fh is not None:
@@ -53,47 +61,61 @@ def setLogger(logfile, level, formatter):
     rootLogger.addHandler(ch)
     ch.setFormatter(formatter)
   rootLogger.setLevel(level)
-  
-  
+
 def setDebug(logfile=None):
-  global loglevel
-  loglevel = debug
+  """setDebug"""
+  global LOG_LEVEL
+  LOG_LEVEL = debug
   level = logging.DEBUG
   formatter = logging.Formatter('%(relativeCreated)d %(funcName)s[%(lineno)d] %(message)s')
   setLogger(logfile, level, formatter)
-  logging.info('start Debug %s', loglevel)
+  logging.info('start Debug %s', LOG_LEVEL)
 
 def setVerbose(logfile=None):
-  global loglevel
-  loglevel = info
+  """setVerbose"""
+  global LOG_LEVEL
+  LOG_LEVEL = info
   level = logging.INFO
   formatter = logging.Formatter('%(relativeCreated)d %(funcName)s[%(lineno)d] %(message)s')
   setLogger(logfile, level, formatter)
-  logging.info('start Verbose %s', loglevel)
+  logging.info('start Verbose %s', LOG_LEVEL)
 
 def setRelease(logfile=None):
-  global loglevel
-  loglevel = warning
+  """setRelease"""
+  global LOG_LEVEL
+  LOG_LEVEL = warning
   level = logging.WARNING
   formatter = logging.Formatter('%(funcName)s[%(lineno)d] %(message)s')
   setLogger(logfile, level, formatter)
-  logging.warning('start Release %s', loglevel)
-  
+  logging.warning('start Release %s', LOG_LEVEL)
+
 def setUnitTests(logfile=None):
-  global loglevel
-  loglevel = critical
+  """setUnitTests"""
+  global LOG_LEVEL
+  LOG_LEVEL = critical
   level = logging.CRITICAL
   formatter = logging.Formatter('%(funcName)s[%(lineno)d] %(message)s')
   setLogger(logfile, level, formatter)
-  logging.critical('start UnitTests %s', loglevel)
-  
+  logging.critical('start UnitTests %s', LOG_LEVEL)
+
 def setPerfTests(logfile=None):
-  global loglevel
-  loglevel = critical
+  """setPerfTests"""
+  global LOG_LEVEL
+  LOG_LEVEL = critical
   level = logging.CRITICAL
   formatter = logging.Formatter('%(funcName)s[%(lineno)d] %(message)s')
   setLogger(logfile, level, formatter)
-  logging.info('start PerfTests %s', loglevel)
-  
+  logging.info('start PerfTests %s', LOG_LEVEL)
+
+def setAlways(logfile=None):
+  """setAlways"""
+  global LOG_LEVEL
+  LOG_LEVEL = always
+  level = logging.CRITICAL
+  formatter = logging.Formatter('%(relativeCreated)d %(funcName)s[%(lineno)d] %(message)s')
+  setLogger(logfile, level, formatter)
+  logging.info('start Always %s', LOG_LEVEL)
+
 def getLogLevel():
-  return loglevel
+  """getLogLevel"""
+  return LOG_LEVEL
index 037e072993037f4470d2138c3af16ca298cf3bb3..8ec19886a3a6b19d981122afff2e33b4f78eb788 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Insertion d'une fissure elliptique"""
+
+import os
 
 import logging
+
 import salome
-from .geomsmesh import geompy
-from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
-from . import initLog
-from .geomsmesh import smesh
-import SMESH
-import math
 
 from .partitionBlocDefaut import partitionBlocDefaut
 from .facesVolumesToriques import facesVolumesToriques
@@ -40,24 +37,19 @@ from .meshBlocPart import meshBlocPart
 from .enleveDefaut import enleveDefaut
 from .regroupeSainEtDefaut import RegroupeSainEtDefaut
 from .putName import putName
-# -----------------------------------------------------------------------------
-# --- procedure complete fissure elliptique
 
-def insereFissureElliptique(geometriesSaines, maillagesSains,
-                            shapesFissure, shapeFissureParams,
+def insereFissureElliptique(geometriesSaines, maillagesSains, \
+                            shapesFissure, shapeFissureParams, \
                             maillageFissureParams, elementsDefaut, step=-1):
-  """
-  TODO: a completer
-  """
+  """procedure complete fissure elliptique"""
   logging.info('start')
 
-  geometrieSaine    = geometriesSaines[0]
+  #geometrieSaine    = geometriesSaines[0]
   maillageSain      = maillagesSains[0]
   isHexa            = maillagesSains[1]
-  shapeDefaut       = shapesFissure[0]
-  tailleDefaut      = shapesFissure[2]
-  pipe0             = shapesFissure[4]
+  #shapeDefaut       = shapesFissure[0]
+  #tailleDefaut      = shapesFissure[2]
+  #pipe0             = shapesFissure[4]
   gener1            = shapesFissure[5]
   pipe1             = shapesFissure[6]
   facefis1          = shapesFissure[7]
@@ -65,12 +57,12 @@ def insereFissureElliptique(geometriesSaines, maillagesSains,
   ellipsoide1       = shapesFissure[9]
 
 
-  demiGrandAxe      = shapeFissureParams['demiGrandAxe']
-  demiPetitAxe      = shapeFissureParams['demiPetitAxe']
-  orientation       = shapeFissureParams['orientation']
+  #demiGrandAxe      = shapeFissureParams['demiGrandAxe']
+  #demiPetitAxe      = shapeFissureParams['demiPetitAxe']
+  #orientation       = shapeFissureParams['orientation']
 
   nomRep            = maillageFissureParams['nomRep']
-  nomFicSain        = maillageFissureParams['nomFicSain']
+  #nomFicSain        = maillageFissureParams['nomFicSain']
   nomFicFissure     = maillageFissureParams['nomFicFissure']
 
   nbsegExt          = maillageFissureParams['nbsegExt']      # 5
@@ -81,135 +73,140 @@ def insereFissureElliptique(geometriesSaines, maillagesSains,
   nbsegFis          = maillageFissureParams['nbsegFis']      # 20
   lensegEllipsoide  = maillageFissureParams['lensegEllipso'] # 1.0
 
-  fichierMaillageSain = nomRep + '/' + nomFicSain + '.med'
-  fichierMaillageFissure = nomRep + '/' + nomFicFissure + '.med'
+  #fichierMaillageSain = os.path.join(nomRep, '{}.med'.format(nomFicSain))
+  fichierMaillageFissure = os.path.join(nomRep, '{}.med'.format(nomFicFissure))
 
   facesDefaut              = elementsDefaut[0]
-  centreDefaut             = elementsDefaut[1]
-  normalDefaut             = elementsDefaut[2]
+  #centreDefaut             = elementsDefaut[1]
+  #normalDefaut             = elementsDefaut[2]
   extrusionDefaut          = elementsDefaut[3]
   dmoyen                   = elementsDefaut[4]
-  bordsPartages            = elementsDefaut[5]
-  fillconts                = elementsDefaut[6]
-  idFilToCont              = elementsDefaut[7]
-  maillageSain             = elementsDefaut[8]
+  #bordsPartages            = elementsDefaut[5]
+  #fillconts                = elementsDefaut[6]
+  #idFilToCont              = elementsDefaut[7]
+  #maillageSain             = elementsDefaut[8]
   internalBoundary         = elementsDefaut[9]
   zoneDefaut               = elementsDefaut[10]
   zoneDefaut_skin          = elementsDefaut[11]
   zoneDefaut_internalFaces = elementsDefaut[12]
   zoneDefaut_internalEdges = elementsDefaut[13]
 
-  ## --- ellipse incomplete : generatrice
-  #if step == 5:
-    #return None
+  maillageComplet = None
+
+  while True:
+
+    ## --- ellipse incomplete : generatrice
+    #if step == 5:
+      #break
+
+    #allonge = demiGrandAxe/demiPetitAxe
+    #rayonTore = demiPetitAxe/5.0
+    #generatrice, FaceGenFiss, Pipe_1, FaceFissure, Plane_1, Pipe1Part = self.toreFissure(demiPetitAxe, allonge, rayonTore)
+    #ellipsoide = self.ellipsoideDefaut(demiPetitAxe, allonge)
 
-  #allonge = demiGrandAxe/demiPetitAxe
-  #rayonTore = demiPetitAxe/5.0
-  #generatrice, FaceGenFiss, Pipe_1, FaceFissure, Plane_1, Pipe1Part = self.toreFissure(demiPetitAxe, allonge, rayonTore)
-  #ellipsoide = self.ellipsoideDefaut(demiPetitAxe, allonge, rayonTore)
+    ## --- positionnement sur le bloc defaut de generatrice, tore et plan fissure
+    #if step == 6:
+      #break
 
-  ## --- positionnement sur le bloc defaut de generatrice, tore et plan fissure
-  #if step == 6:
-    #return None
+    #pipe0 = self.rotTrans(Pipe_1, orientation, centreDefaut, normalDefaut)
+    #gener1 = self.rotTrans(generatrice, orientation, centreDefaut, normalDefaut)
+    #pipe1 = self.rotTrans(Pipe1Part, orientation, centreDefaut, normalDefaut)
+    #facefis1 = self.rotTrans(FaceFissure, orientation, centreDefaut, normalDefaut)
+    #plane1 = self.rotTrans(Plane_1, orientation, centreDefaut, normalDefaut)
+    #ellipsoide1 = self.rotTrans(ellipsoide, orientation, centreDefaut, normalDefaut)
 
-  #pipe0 = self.rotTrans(Pipe_1, orientation, centreDefaut, normalDefaut)
-  #gener1 = self.rotTrans(generatrice, orientation, centreDefaut, normalDefaut)
-  #pipe1 = self.rotTrans(Pipe1Part, orientation, centreDefaut, normalDefaut)
-  #facefis1 = self.rotTrans(FaceFissure, orientation, centreDefaut, normalDefaut)
-  #plane1 = self.rotTrans(Plane_1, orientation, centreDefaut, normalDefaut)
-  #ellipsoide1 = self.rotTrans(ellipsoide, orientation, centreDefaut, normalDefaut)
+    #geomPublish(initLog.debug,  pipe0, 'pipe0' )
+    #geomPublish(initLog.debug,  gener1, 'gener1' )
+    #geomPublish(initLog.debug,  pipe1, 'pipe1' )
+    #geomPublish(initLog.debug,  facefis1, 'facefis1' )
+    #geomPublish(initLog.debug,  plane1, 'plane1' )
+    #geomPublish(initLog.debug,  ellipsoide1, 'ellipsoide1' )
 
-  #geomPublish(initLog.debug,  pipe0, 'pipe0' )
-  #geomPublish(initLog.debug,  gener1, 'gener1' )
-  #geomPublish(initLog.debug,  pipe1, 'pipe1' )
-  #geomPublish(initLog.debug,  facefis1, 'facefis1' )
-  #geomPublish(initLog.debug,  plane1, 'plane1' )
-  #geomPublish(initLog.debug,  ellipsoide1, 'ellipsoide1' )
+    # --- partition du bloc défaut par génératrice, tore et plan fissure
+    if step == 7:
+      break
 
-  # --- partition du bloc défaut par génératrice, tore et plan fissure
-  if step == 7:
-    return None
+    [ blocPartition, _, tore, \
+      faceFissure, facesExternes, facesExtBloc, facesExtElli,
+      aretesInternes, ellipsoidep, sharedFaces, sharedEdges, edgesBords] = \
+      partitionBlocDefaut(extrusionDefaut, facesDefaut, gener1, pipe1, facefis1, ellipsoide1)
+    if not isHexa:
+      edgesBords = None # maillage sain hexa ==> filling, et maillage edges Bords imposés du maillage sain
 
-  [blocPartition, blocp, tore,
-  faceFissure, facesExternes, facesExtBloc, facesExtElli,
-  aretesInternes, ellipsoidep, sharedFaces, sharedEdges, edgesBords] = \
-    partitionBlocDefaut(extrusionDefaut, facesDefaut, gener1, pipe1,
-                        facefis1, ellipsoide1)
-  if not isHexa:
-    edgesBords = None # maillage sain hexa ==> filling, et maillage edges Bords imposés du maillage sain
+    # --- TORE
+    # --- faces toriques du tore
+    if step == 8:
+      break
 
-  # --- TORE
-  # --- faces toriques du tore
-  if step == 8:
-    return None
+    [facetore1, facetore2, _, _] = facesVolumesToriques(tore, plane1, facesDefaut)
 
-  [facetore1, facetore2, volumeTore1, volumeTore2] = facesVolumesToriques(tore, plane1, facesDefaut)
+    # --- faces 1/2 circulaires et edges dans le plan de fissure
+    if step == 9:
+      break
 
-  # --- faces 1/2 circulaires et edges dans le plan de fissure
-  if step == 9:
-    return None
+    [faces, centres, edges, reverses] = facesCirculaires(extrusionDefaut, tore)
 
-  [faces, centres, edges, reverses] = facesCirculaires(extrusionDefaut, tore)
+    # --- recherche et classement des edges du tore par propagate
+    if step == 10:
+      break
 
-  # --- recherche et classement des edges du tore par propagate
-  if step == 10:
-    return None
+    [diams, circles, geners] = propagateTore(tore)
 
-  [diams, circles, geners] = propagateTore(tore)
+    # --- tri par longueur des 3 génératrices
+    if step == 11:
+      break
 
-  # --- tri par longueur des 3 génératrices
-  if step == 11:
-    return None
+    [_, genint, gencnt] = sortGeneratrices(tore, geners)
 
-  [genext, genint, gencnt] = sortGeneratrices(tore, geners)
+    # --- faces fissure dans et hors tore, et edges face hors tore
+    if step == 12:
+      break
 
-  # --- faces fissure dans et hors tore, et edges face hors tore
-  if step == 12:
-    return None
+    [_, facefissoutore, _, edgeext, reverext] = \
+      facesFissure(ellipsoidep, faceFissure, extrusionDefaut, genint)
 
-  [facefissintore, facefissoutore, edgeint, edgeext, reverext] = \
-    facesFissure(ellipsoidep, faceFissure, extrusionDefaut, genint)
+    # --- identification des faces tore et fissure dans le solide hors tore
+    if step == 13:
+      break
 
-  # --- identification des faces tore et fissure dans le solide hors tore
-  if step == 13:
-    return None
+    [_, _, _] = \
+      facesToreInBloc(ellipsoidep, facefissoutore, facetore1, facetore2)
 
-  [blocFaceFiss, blocFaceTore1, blocFaceTore2] = \
-    facesToreInBloc(ellipsoidep, facefissoutore, facetore1, facetore2)
+    # --- identification des shapes modifiées par la duplication des noeuds de la face fissure (d'un coté de la face)
 
-  # --- identification des shapes modifiées par la duplication des noeuds de la face fissure (d'un coté de la face)
+    #shapesAModifier = self.shapesSurFissure(blocPartition, plane1 faceFissure, gencnt)
+    if step == 14:
+      break
 
-  #shapesAModifier = self.shapesSurFissure(blocPartition, plane1 faceFissure, gencnt)
-  if step == 14:
-    return None
+    extrusionFaceFissure, _ = shapeSurFissure(plane1)
 
-  extrusionFaceFissure, normfiss = shapeSurFissure(plane1)
+    # --- maillage du bloc partitionne
 
-  # --- maillage du bloc partitionne
+    if step == 15:
+      break
 
-  if step == 15:
-    return None
+    [_, blocComplet] = \
+      meshBlocPart(blocPartition, faceFissure, tore, centres, edges, diams, circles, faces, \
+                  gencnt, facefissoutore, edgeext, facesExternes, facesExtBloc, facesExtElli, \
+                  aretesInternes, internalBoundary, ellipsoidep, sharedFaces, sharedEdges, edgesBords, \
+                  nbsegExt, nbsegGen, nbsegRad, scaleRad, reverses, reverext, nbsegCercle, \
+                  nbsegFis, dmoyen, lensegEllipsoide)
+    if step == 16:
+      break
 
-  [bloc1, blocComplet] = \
-    meshBlocPart(blocPartition, faceFissure, tore, centres, edges, diams, circles, faces,
-                gencnt, facefissoutore, edgeext, facesExternes, facesExtBloc, facesExtElli,
-                aretesInternes, internalBoundary, ellipsoidep, sharedFaces, sharedEdges, edgesBords,
-                nbsegExt, nbsegGen, nbsegRad, scaleRad, reverses, reverext, nbsegCercle,
-                nbsegFis, dmoyen, lensegEllipsoide)
+    maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges)
+    if step == 17:
+      break
 
-  if step == 16:
-    return None
-  maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges)
+    maillageComplet = RegroupeSainEtDefaut(maillageSain, blocComplet, extrusionFaceFissure, faceFissure, 'VOLUMES')
+    if step == 18:
+      break
 
-  if step == 17:
-    return None
-  maillageComplet = RegroupeSainEtDefaut(maillageSain, blocComplet, extrusionFaceFissure, faceFissure, 'VOLUMES')
+    maillageComplet.ExportMED(fichierMaillageFissure)
+    putName(maillageComplet, nomFicFissure)
+    logging.info("fichier maillage fissure : %s", fichierMaillageFissure)
 
-  if step == 18:
-    return None
-  maillageComplet.ExportMED(fichierMaillageFissure)
-  putName(maillageComplet, nomFicFissure)
-  logging.info("fichier maillage fissure : %s", fichierMaillageFissure)
+    break
 
   if salome.sg.hasDesktop():
     salome.sg.updateObjBrowser()
diff --git a/src/Tools/blocFissure/gmu/insereFissureGenerale.py b/src/Tools/blocFissure/gmu/insereFissureGenerale.py
deleted file mode 100644 (file)
index 8998b91..0000000
+++ /dev/null
@@ -1,1403 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
-#
-# 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
-#
-
-import logging
-import salome
-from .geomsmesh import geompy
-from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
-from . import initLog
-import GEOM
-from .geomsmesh import smesh
-from salome.smesh import smeshBuilder
-import SMESH
-import math
-import bisect
-
-from .extractionOrientee import extractionOrientee
-from .extractionOrienteeMulti import extractionOrienteeMulti
-from .sortFaces import sortFaces
-from .sortEdges import sortEdges
-from .eliminateDoubles import eliminateDoubles
-from .substractSubShapes import substractSubShapes
-from .produitMixte import produitMixte
-from .findWireEndVertices import findWireEndVertices
-from .findWireIntermediateVertices import findWireIntermediateVertices
-from .orderEdgesFromWire import orderEdgesFromWire
-from .getSubshapeIds import getSubshapeIds
-from .putName import putName
-from .distance2 import distance2
-from .enleveDefaut import enleveDefaut
-from .shapeSurFissure import shapeSurFissure
-from .regroupeSainEtDefaut import RegroupeSainEtDefaut
-from .triedreBase import triedreBase
-from .checkDecoupePartition import checkDecoupePartition
-from .whichSide import whichSide
-from .whichSideMulti import whichSideMulti
-from .whichSideVertex import whichSideVertex
-from .projettePointSurCourbe import projettePointSurCourbe
-from .prolongeWire import prolongeWire
-#from getCentreFondFiss import getCentreFondFiss
-
-# -----------------------------------------------------------------------------
-# --- procédure complète fissure générale
-
-def insereFissureGenerale(maillagesSains,
-                          shapesFissure, shapeFissureParams,
-                          maillageFissureParams, elementsDefaut, step=-1):
-  """
-  TODO: a completer
-  """
-  logging.info('start')
-  
-  shapeDefaut       = shapesFissure[0] # faces de fissure, débordant
-  fondFiss          = shapesFissure[4] # groupe d'edges de fond de fissure
-
-  rayonPipe = shapeFissureParams['rayonPipe']
-  if 'lenSegPipe' in shapeFissureParams:
-    lenSegPipe = shapeFissureParams['lenSegPipe']
-  else:
-    lenSegPipe = rayonPipe
-
-  nomRep            = maillageFissureParams['nomRep']
-  nomFicSain        = maillageFissureParams['nomFicSain']
-  nomFicFissure     = maillageFissureParams['nomFicFissure']
-
-  nbsegRad          = maillageFissureParams['nbsegRad']      # nombre de couches selon un rayon du pipe
-  nbsegCercle       = maillageFissureParams['nbsegCercle']   # nombre de secteur dans un cercle du pipe
-  areteFaceFissure  = maillageFissureParams['areteFaceFissure']
-
-  pointIn_x = 0.0
-  pointIn_y = 0.0
-  pointIn_z = 0.0
-  isPointInterne = False
-  if 'pointIn_x' in shapeFissureParams:
-    pointIn_x = shapeFissureParams['pointIn_x']
-    isPointInterne = True
-  if 'pointIn_y' in shapeFissureParams:
-    pointIn_y = shapeFissureParams['pointIn_y']
-    isPointInterne = True
-  if 'pointIn_z' in shapeFissureParams:
-    pointIn_z = shapeFissureParams['pointIn_z']
-    isPointInterne = True
-  if isPointInterne:
-    pointInterne = geompy.MakeVertex(pointIn_x, pointIn_y, pointIn_z)
-
-  #fichierMaillageSain = nomRep + '/' + nomFicSain + '.med'
-  fichierMaillageFissure = nomRep + '/' + nomFicFissure + '.med'
-
-  # fillings des faces en peau
-  facesDefaut = elementsDefaut[0]
-  #centresDefaut            = elementsDefaut[1]
-  #normalsDefaut            = elementsDefaut[2]
-  #extrusionsDefaut         = elementsDefaut[3]
-  dmoyen                   = elementsDefaut[4]
-  bordsPartages = elementsDefaut[5]
-  fillconts                = elementsDefaut[6]
-  idFilToCont              = elementsDefaut[7]
-  maillageSain             = elementsDefaut[8]
-  internalBoundary         = elementsDefaut[9]
-  zoneDefaut               = elementsDefaut[10]
-  zoneDefaut_skin          = elementsDefaut[11]
-  zoneDefaut_internalFaces = elementsDefaut[12]
-  zoneDefaut_internalEdges = elementsDefaut[13]
-  edgeFondExt              = elementsDefaut[14]
-  centreFondFiss           = elementsDefaut[15]
-  tgtCentre                = elementsDefaut[16]
-
-  # --- restriction de la face de fissure au domaine solide :
-  #     partition face fissure étendue par fillings, on garde la plus grande face
-
-  partShapeDefaut = geompy.MakePartition([shapeDefaut], facesDefaut, [], [], geompy.ShapeType["FACE"], 0, [], 0)
-  geomPublish(initLog.debug, partShapeDefaut, 'partShapeDefaut')
-  facesPartShapeDefaut = geompy.ExtractShapes(partShapeDefaut, geompy.ShapeType["FACE"], False)
-  if isPointInterne:
-    distfaces = [(geompy.MinDistance(face,pointInterne), i, face) for i, face in enumerate(facesPartShapeDefaut)]
-    distfaces.sort()
-    logging.debug("selection de la face la plus proche du point interne, distance=%s",distfaces[0][0])
-    facesPortFissure = distfaces[0][2]
-  else:
-    facesPartShapeDefautSorted, minSurf, maxSurf = sortFaces(facesPartShapeDefaut) # la face de fissure dans le volume doit être la plus grande
-    logging.debug("surfaces faces fissure étendue, min %s, max %s", minSurf, maxSurf)
-    facesPortFissure = facesPartShapeDefautSorted[-1] #= global
-  
-  geomPublish(initLog.debug, facesPortFissure, "facesPortFissure")
-
-  O, OX, OY, OZ = triedreBase()
-  
-  # -----------------------------------------------------------------------------
-  # --- pipe de fond de fissure, prolongé, partition face fissure par pipe
-  #     identification des edges communes pipe et face fissure
-  
-  if geompy.NumberOfFaces(shapeDefaut) == 1:
-    plan = geompy.MakePlane(centreFondFiss, tgtCentre, 10000)
-    shapeDefaut = geompy.MakePartition([shapeDefaut], [plan], [], [], geompy.ShapeType["FACE"], 0, [], 0) #= local
-    #fondFissCoupe = geompy.GetInPlaceByHistory(shapeDefaut, fondFiss) #= inutile
-    geomPublish(initLog.debug, shapeDefaut, 'shapeDefaut_coupe')
-    #geomPublishInFather(initLog.debug,shapeDefaut, fondFissCoupe, 'fondFiss_coupe')
-  
-  extrem, norms = findWireEndVertices(fondFiss, True)
-  logging.debug("extrem: %s, norm: %s",extrem, norms)
-  cercle = geompy.MakeCircle(extrem[0], norms[0], rayonPipe)
-  cercle = geompy.MakeRotation(cercle, norms[0], math.pi/3.0 ) # éviter d'avoir l'arête de couture du pipe presque confondue avec la face fissure
-  geomPublish(initLog.debug, cercle, 'cercle')
-  fondFissProlonge = prolongeWire(fondFiss, extrem, norms, 2*rayonPipe)
-  pipeFiss = geompy.MakePipe(cercle, fondFissProlonge)
-  geomPublish(initLog.debug, pipeFiss, 'pipeFiss')
-  partFissPipe = geompy.MakePartition([shapeDefaut, pipeFiss], [], [], [], geompy.ShapeType["FACE"], 0, [], 1)
-  geomPublish(initLog.debug, partFissPipe, 'partFissPipe')
-  fissPipe = geompy.GetInPlaceByHistory(partFissPipe, shapeDefaut) #= global
-  geomPublish(initLog.debug, fissPipe, 'fissPipe')
-  partPipe = geompy.GetInPlaceByHistory(partFissPipe, pipeFiss) #= local
-  geomPublish(initLog.debug, partPipe, 'partPipe')
-  
-  edgesPipeFiss = geompy.GetSharedShapesMulti([fissPipe, partPipe], geompy.ShapeType["EDGE"]) #= global
-  for i, edge in enumerate(edgesPipeFiss):
-    name = "edgePipe%d"%i
-    geomPublishInFather(initLog.debug,fissPipe, edge, name)
-  try:
-    wirePipeFiss = geompy.MakeWire(edgesPipeFiss) #= global
-  except:
-    wirePipeFiss = geompy.MakeCompound(edgesPipeFiss)
-    logging.debug("wirePipeFiss construit sous forme de compound")
-  geomPublish(initLog.debug, wirePipeFiss, "wirePipeFiss")
-  
-  wireFondFiss = geompy.GetInPlace(partFissPipe,fondFiss)
-  edgesFondFiss = geompy.GetSharedShapesMulti([fissPipe, wireFondFiss], geompy.ShapeType["EDGE"])
-  for i, edge in enumerate(edgesFondFiss):
-    name = "edgeFondFiss%d"%i
-    geomPublishInFather(initLog.debug,fissPipe, edge, name)
-  wireFondFiss = geompy.MakeWire(edgesFondFiss) #= global
-  geomPublish(initLog.debug, wireFondFiss,"wireFondFiss")  
-
-  # -----------------------------------------------------------------------------
-  # --- peau et face de fissure
-  #
-  # --- partition peau défaut - face de fissure prolongée - wire de fond de fissure prolongée
-  #     il peut y avoir plusieurs faces externes, dont certaines sont découpées par la fissure
-  #     liste de faces externes : facesDefaut
-  #     liste de partitions face externe - fissure : partitionPeauFissFond (None quand pas d'intersection)
-
-  partitionsPeauFissFond = [] #= global
-  ipart = 0
-  for filling in facesDefaut: 
-    part = geompy.MakePartition([fissPipe, filling], [], [], [], geompy.ShapeType["FACE"], 0, [], 0)
-    isPart = checkDecoupePartition([fissPipe, filling], part)
-    if isPart: # on recrée la partition avec toutes les faces filling en outil pour avoir une face de fissure correcte
-      otherFD = [fd for fd in facesDefaut if fd != filling]
-      if len(otherFD) > 0:
-        fissPipePart = geompy.MakePartition([fissPipe], otherFD, [], [], geompy.ShapeType["FACE"], 0, [], 0)
-      else:
-        fissPipePart = fissPipe
-      part = geompy.MakePartition([fissPipePart, filling], [], [], [], geompy.ShapeType["FACE"], 0, [], 0)
-      partitionsPeauFissFond.append(part)
-      geomPublish(initLog.debug,  part, 'partitionPeauFissFond%d'%ipart )
-    else:
-      partitionsPeauFissFond.append(None)
-    ipart = ipart +1
-  
-  # --- arêtes vives détectées (dans quadranglesToShapeNoCorner
-  #                             et quadranglesToShapeWithCorner)
-  
-  aretesVives = []
-  aretesVivesCoupees = []  #= global
-  ia = 0
-  for a in bordsPartages:
-    if not isinstance(a, list):
-        aretesVives.append(a)
-        name = "areteVive%d"%ia
-        geomPublish(initLog.debug, a, name)
-        ia += 1
-    else:
-        if a[0] is not None:
-            aretesVives.append(a[0])
-            name = "areteVive%d"%ia
-            geomPublish(initLog.debug, a[0], name)
-            ia += 1
-
-  aretesVivesC = None #= global
-  if len(aretesVives) > 0:
-    aretesVivesC =geompy.MakeCompound(aretesVives)
-    
-  # -------------------------------------------------------
-  # --- inventaire des faces de peau coupées par la fissure
-  #     pour chaque face de peau : 0, 1 ou 2 faces débouchante du fond de fissure
-  #                                0, 1 ou plus edges de la face de fissure externe au pipe
-  
-  nbFacesFilling = len(partitionsPeauFissFond)
-  ptEdgeFond = [ []  for i in range(nbFacesFilling)] # pour chaque face [points edge fond de fissure aux débouchés du pipe]
-  fsPipePeau = [ []  for i in range(nbFacesFilling)] # pour chaque face [faces du pipe débouchantes]
-  edRadFPiPo = [ []  for i in range(nbFacesFilling)] # pour chaque face [edge radiale des faces du pipe débouchantes ]
-  fsFissuExt = [ []  for i in range(nbFacesFilling)] # pour chaque face [faces de fissure externes au pipe]
-  edFisExtPe = [ []  for i in range(nbFacesFilling)] # pour chaque face [edge en peau des faces de fissure externes (pas subshape facePeau)]
-  edFisExtPi = [ []  for i in range(nbFacesFilling)] # pour chaque face [edge commun au pipe des faces de fissure externes]
-  facesPeaux = [None for i in range(nbFacesFilling)] # pour chaque face : la face de peau finale a mailler (percée des faces débouchantes)
-  edCircPeau = [ []  for i in range(nbFacesFilling)] # pour chaque face de peau : [subshape edge circulaire aux débouchés du pipe]
-  ptCircPeau = [ []  for i in range(nbFacesFilling)] # pour chaque face de peau : [subshape point sur edge circulaire aux débouchés du pipe]
-  gpedgeBord = [None for i in range(nbFacesFilling)] # pour chaque face de peau : groupe subshape des edges aux bords liés à la partie saine
-  gpedgeVifs = [None for i in range(nbFacesFilling)] # pour chaque face de peau : groupes subshape des edges aux arêtes vives entre fillings
-  edFissPeau = [ []  for i in range(nbFacesFilling)] # pour chaque face de peau : [subshape edge en peau des faces de fissure externes]
-  ptFisExtPi = [ []  for i in range(nbFacesFilling)] # pour chaque face de peau : [point commun edFissPeau edCircPeau]
-  
-  for ifil, partitionPeauFissFond in enumerate(partitionsPeauFissFond):
-    if partitionPeauFissFond is not None:
-      fillingFaceExterne = facesDefaut[ifil]
-      #fillingSansDecoupe = fillconts[idFilToCont[ifil]]
-      logging.debug("traitement partitionPeauFissFond %s", ifil)
-      # -----------------------------------------------------------------------
-      # --- identification edges fond de fissure, edges pipe sur la face de fissure,
-      #     edges prolongées
-      
-      edgesPipeC = geompy.GetInPlace(partitionPeauFissFond, geompy.MakeCompound(edgesPipeFiss)) #= local
-      geomPublishInFather(initLog.debug,partitionPeauFissFond, edgesPipeC, "edgesPipeFiss")
-      edgesFondC = geompy.GetInPlace(partitionPeauFissFond, geompy.MakeCompound(edgesFondFiss)) #= local
-      geomPublishInFather(initLog.debug,partitionPeauFissFond, edgesFondC, "edgesFondFiss")
-      
-      if aretesVivesC is None: #= global facesInside facesOnside
-        [edgesInside, edgesOutside, edgesOnside] = extractionOrientee(fillingFaceExterne, partitionPeauFissFond, centreFondFiss, "EDGE", 1.e-3)
-        [facesInside, facesOutside, facesOnside] = extractionOrientee(fillingFaceExterne, partitionPeauFissFond, centreFondFiss, "FACE", 1.e-3)
-      else:
-        [edgesInside, edgesOutside, edgesOnside] = extractionOrienteeMulti(facesDefaut, ifil, partitionPeauFissFond, centreFondFiss, "EDGE", 1.e-3)
-        [facesInside, facesOutside, facesOnside] = extractionOrienteeMulti(facesDefaut, ifil, partitionPeauFissFond, centreFondFiss, "FACE", 1.e-3)
-        
-      edgesPipeIn = geompy.GetSharedShapesMulti([edgesPipeC, geompy.MakeCompound(edgesInside)], geompy.ShapeType["EDGE"]) #= global
-      verticesPipePeau = [] #= global
-
-      for i, edge in enumerate(edgesPipeIn):
-        try:
-          vertices = geompy.GetSharedShapesMulti([edge, geompy.MakeCompound(facesOnside)], geompy.ShapeType["VERTEX"])
-          verticesPipePeau.append(vertices[0])
-          name = "edgePipeIn%d"%i
-          geomPublishInFather(initLog.debug,partitionPeauFissFond, edge, name)
-          name = "verticePipePeau%d"%i
-          geomPublishInFather(initLog.debug,partitionPeauFissFond, vertices[0], name)
-          logging.debug("edgePipeIn%s coupe les faces OnSide", i)
-        except:
-          logging.debug("edgePipeIn%s ne coupe pas les faces OnSide", i)
-      #edgesFondOut = []     #= inutile
-      edgesFondIn =[] #= global
-      if len(verticesPipePeau) > 0: # au moins une extrémité du pipe sur cette face de peau  
-        #tmp = geompy.GetSharedShapesMulti([edgesFondC, geompy.MakeCompound(edgesOutside)], geompy.ShapeType["EDGE"])
-        #edgesFondOut = [ ed for ed in tmp if geompy.MinDistance(ed, geompy.MakeCompound(facesOnside)) < 1.e-3] 
-        tmp = geompy.GetSharedShapesMulti([edgesFondC, geompy.MakeCompound(edgesInside)], geompy.ShapeType["EDGE"])
-        edgesFondIn = [ ed for ed in tmp if geompy.MinDistance(ed, geompy.MakeCompound(facesOnside)) < 1.e-3]
-
-      verticesEdgesFondIn = [] # les points du fond de fissure au débouché du pipe sur la peau (indice de edgesFondIn)
-      pipexts = []             # les segments de pipe associés au points de fond de fissure débouchants (même indice)
-      cercles = []             # les cercles de generation des pipes débouchant (même indice)
-      facesFissExt = []        # les faces de la fissure externe associés au points de fond de fissure débouchants (même indice)
-      edgesFissExtPeau = []    # edges des faces de fissure externe sur la peau (même indice)
-      edgesFissExtPipe = []    # edges des faces de fissure externe sur le pipe (même indice)
-      #logging.debug("edgesFondIn %s", edgesFondIn)
-
-      edgesFondFiss, edgesIdByOrientation = orderEdgesFromWire(wireFondFiss)
-      for i,edge in enumerate(edgesFondFiss):
-        geomPublishInFather(initLog.debug,wireFondFiss, edge, "edgeFondFiss%d"%i)
-
-      for iedf, edge in enumerate(edgesFondIn):
-        name = "edgeFondIn%d"%iedf
-        geomPublishInFather(initLog.debug,partitionPeauFissFond, edge, name)
-        dist = [ geompy.MinDistance(pt, edge) for pt in verticesPipePeau]
-        ptPeau = verticesPipePeau[dist.index(min(dist))] # le point de verticesPipePeau a distance minimale de l'edge
-        [u, PointOnEdge, EdgeInWireIndex]  = geompy.MakeProjectionOnWire(ptPeau, wireFondFiss)
-        logging.debug("u:%s, EdgeInWireIndex: %s, len(edgesFondFiss): %s", u, EdgeInWireIndex, len(edgesFondFiss))
-        localEdgeInFondFiss = edgesFondFiss[EdgeInWireIndex]
-        centre = PointOnEdge
-        centre2 = geompy.MakeVertexOnCurve(localEdgeInFondFiss, u)
-        geomPublishInFather(initLog.debug,partitionPeauFissFond, centre2, "centre2_%d"%iedf)
-        verticesEdgesFondIn.append(centre)
-        name = "verticeEdgesFondIn%d"%iedf
-        geomPublishInFather(initLog.debug,partitionPeauFissFond, centre, name)
-        norm = geompy.MakeTangentOnCurve(localEdgeInFondFiss, u)
-        geomPublishInFather(initLog.debug,partitionPeauFissFond, centre, "norm%d"%iedf)
-        cercle = geompy.MakeCircle(centre, norm, rayonPipe)
-        geomPublishInFather(initLog.debug,partitionPeauFissFond, cercle, "cerclorig%d"%iedf)
-        [vertex] = geompy.ExtractShapes(cercle, geompy.ShapeType["VERTEX"], False)
-        vec1 = geompy.MakeVector(centre, vertex)
-        vec2 = geompy.MakeVector(centre, ptPeau)
-        angle = geompy.GetAngleRadians(vec1, vec2)
-        # cas général : on reconstitue une portion de pipe, avec l'arête de couture qui coincide
-        #   avec la face de fissure, au niveau du débouché sur la face externe
-        # cas dégénéré : le pipe débouche perpendiculairement à une surface plane à l'origine.
-        #   La partition filling / pipe reconstruit échoue.
-        #   - Si on partitionne le filling avec un simple pipe obtenu par extrusion droite du cercle,
-        #     cela donne un point en trop sur le cercle.
-        #   - Si on prend une vraie surface plane (pas un filling), on peut faire la partition avec 
-        #     les pipes reconstruits              
-        logging.debug("angle=%s", angle)
-        #if abs(angle) > 1.e-7:
-        sommetAxe = geompy.MakeTranslationVector(centre, norm)
-        pm = produitMixte(centre, vertex, ptPeau, sommetAxe)
-        if pm > 0:  # ajout de pi a (-)angle pour éviter des points confondus (partition échoue) dans les cas dégénérés
-          cercle = geompy.MakeRotation(cercle, norm, angle + math.pi)
-        else:
-          cercle = geompy.MakeRotation(cercle, norm, -angle + math.pi)
-        name = "cercle%d"%iedf
-        geomPublishInFather(initLog.debug,partitionPeauFissFond, cercle, name)
-        cercles.append(cercle)
-
-        # --- estimation de la longueur du pipe necessaire de part et d'autre du point de sortie
-        if aretesVivesC is None:
-          faceTestPeau = fillingFaceExterne
-        else:
-          faceTestPeau = facesDefaut[ifil]
-        sideCentre = whichSide(faceTestPeau, centre)
-        locPt0 = geompy.MakeVertexOnCurve(localEdgeInFondFiss, 0.0)
-        locPt1 = geompy.MakeVertexOnCurve(localEdgeInFondFiss, 1.0)
-        sidePt0 = whichSide(faceTestPeau, locPt0)
-        sidePt1 = whichSide(faceTestPeau, locPt1)
-        logging.debug("position centre cercle: %s, extremité edge u0: %s, u1: %s", sideCentre, sidePt0, sidePt1) 
-        normFace = geompy.GetNormal(faceTestPeau, ptPeau)
-        inclPipe = abs(geompy.GetAngleRadians(norm, normFace))
-        lgp = max(rayonPipe/2., abs(3*rayonPipe*math.tan(inclPipe)))
-        logging.debug("angle inclinaison Pipe en sortie: %s degres, lgp: %s", inclPipe*180/math.pi, lgp)
-        
-        # --- position des points extremite du pipe sur l'edge debouchante
-        #     il faut la distance curviligne ofp du point central par rapport à une extrémité de l'edge débouchante
-        locEdgePart = geompy.MakePartition([localEdgeInFondFiss],[centre], [], [], geompy.ShapeType["EDGE"], 0, [], 0)
-        edgesLoc = geompy.ExtractShapes(locEdgePart, geompy.ShapeType["EDGE"], False)
-        edgesLocSorted =[(geompy.MinDistance(edge, locPt0), kk, edge) for kk, edge in enumerate(edgesLoc)]
-        edgesLocSorted.sort()
-        ofp = geompy.BasicProperties(edgesLocSorted[0][2])[0] # distance curviligne centre locPt0
-        logging.debug("distance curviligne centre extremite0: %s", ofp)
-        p1 = geompy.MakeVertexOnCurveByLength(localEdgeInFondFiss, ofp +lgp, locPt0)
-        p2 = geompy.MakeVertexOnCurveByLength(localEdgeInFondFiss, ofp -lgp, locPt0)
-        geomPublishInFather(initLog.debug,wireFondFiss, p1, "p1_%d"%iedf)
-        geomPublishInFather(initLog.debug,wireFondFiss, p2, "p2_%d"%iedf)
-
-        edgePart = geompy.MakePartition([localEdgeInFondFiss], [p1,p2], [], [], geompy.ShapeType["EDGE"], 0, [], 0)
-        edps = geompy.ExtractShapes(edgePart, geompy.ShapeType["EDGE"], True)
-        for edp in edps:
-          if geompy.MinDistance(centre, edp) < 1.e-3:
-            pipext = geompy.MakePipe(cercle, edp)
-            name = "pipeExt%d"%iedf
-            geomPublishInFather(initLog.debug,partitionPeauFissFond, pipext, name)
-            pipexts.append(pipext)
-
-        for face in facesInside:
-          logging.debug("recherche edges communes entre une face inside et (faces onside, edges pipe et fond débouchante)")
-          edgesPeauFis = []
-          edgesPipeFis = []
-          edgesPipeFnd = []
-          try:
-            edgesPeauFis = geompy.GetSharedShapesMulti([geompy.MakeCompound(facesOnside), face], geompy.ShapeType["EDGE"])
-            logging.debug("    faces onside %s",edgesPeauFis)
-            edgesPipeFis = geompy.GetSharedShapesMulti([geompy.MakeCompound(edgesPipeIn), face], geompy.ShapeType["EDGE"])
-            logging.debug("    edgesPipeIn %s", edgesPipeFis)
-            edgesPipeFnd = geompy.GetSharedShapesMulti([geompy.MakeCompound(edgesFondIn), face], geompy.ShapeType["EDGE"])
-            logging.debug("    edgesFondIn %s ", edgesPipeFnd)
-          except:
-            logging.debug("  pb edges communes %s %s %s",edgesPeauFis, edgesPipeFis, edgesPipeFnd)
-            pass
-          if (len(edgesPeauFis) > 0) and (len(edgesPipeFis) > 0) and (len(edgesPipeFnd) == 0):
-            dist = geompy.MinDistance(geompy.MakeCompound(edgesPeauFis), ptPeau)
-            logging.debug("    test distance extrémité reference %s", dist)
-            if dist < 1.e-3: # c'est la face de fissure externe associée
-              logging.debug("    face %s inside ajoutée", i)
-              facesFissExt.append(face)
-              name="faceFissExt%d"%iedf
-              geomPublishInFather(initLog.debug,partitionPeauFissFond, face, name)
-              dist = 1.
-              for ipe, edpe in enumerate(edgesPeauFis):
-                for ipi, edpi in enumerate(edgesPipeFis):
-                  dist = geompy.MinDistance(edpe, edpi)
-                  if dist < 1.e-3:
-                    edgesFissExtPeau.append(edpe)
-                    name="edgesFissExtPeau%d"%iedf
-                    geomPublishInFather(initLog.debug,partitionPeauFissFond, edpe, name)
-                    edgesFissExtPipe.append(edpi)
-                    name="edgesFissExtPipe%d"%iedf
-                    geomPublishInFather(initLog.debug,partitionPeauFissFond, edpi, name)
-                    break
-                if dist < 1.e-3:
-                  break
-
-      if len(verticesPipePeau) == 0: # aucune extrémité du pipe sur cette face de peau
-                                     # il faut recenser les edges de fissure sur la face de peau
-        j = 0
-        for face in facesInside:
-          edgesPeauFis = []
-          edgesPipeFis = []
-          edgesPipeFnd = []
-          try:
-            edgesPeauFis = geompy.GetSharedShapesMulti([geompy.MakeCompound(facesOnside), face], geompy.ShapeType["EDGE"])
-            edgesPipeFis = geompy.GetSharedShapesMulti([geompy.MakeCompound(edgesPipeIn), face], geompy.ShapeType["EDGE"])
-            edgesPipeFnd = geompy.GetSharedShapesMulti([geompy.MakeCompound(edgesFondIn), face], geompy.ShapeType["EDGE"])
-          except:
-            pass
-          if (len(edgesPeauFis) > 0) and (len(edgesPipeFis) > 0) and (len(edgesPipeFnd) == 0):
-            edgesFissExtPeau.append(edgesPeauFis[0])
-            name="edgesFissExtPeau%d"%j
-            geomPublishInFather(initLog.debug,partitionPeauFissFond, edgesPeauFis[0], name)
-            j += 1
-     
-      # -----------------------------------------------------------------------
-      # --- identification faces de peau : face de peau percée du pipe, extrémités du pipe
-      #     La partition avec le pipe peut créer un vertex (et un edge) de trop sur le cercle projeté,
-      #     quand le cercle est très proche de la face.
-      #     dans ce cas, la projection du cercle sur la face suivie d'une partition permet
-      #     d'éviter le point en trop
-      
-      facesAndFond = facesOnside
-      facesAndFond.append(wireFondFiss)
-      try:
-        partitionPeauByPipe = geompy.MakePartition(facesAndFond, pipexts, [], [], geompy.ShapeType["FACE"], 0, [], 1)
-      except:
-        logging.debug("probleme partition face pipe, contournement avec MakeSection")
-        sections = []
-        for pipext in pipexts:
-          sections.append(geompy.MakeSection(facesOnside[0], pipext))
-        partitionPeauByPipe = geompy.MakePartition(facesAndFond, sections, [], [], geompy.ShapeType["FACE"], 0, [], 1)
-        
-      # contrôle edge en trop sur edges circulaires
-      if len(verticesPipePeau) > 0: # --- au moins une extrémité du pipe sur cette face de peau
-        edgeEnTrop = []
-        outilPart = pipexts
-        facesPeau = geompy.ExtractShapes(partitionPeauByPipe, geompy.ShapeType["FACE"], False)
-        facesPeauSorted, minsur, maxsurf = sortFaces(facesPeau)
-        for i, face in enumerate(facesPeauSorted[:-1]): # on ne teste que la ou les petites faces "circulaires"
-          nbv = geompy.NumberOfEdges(face)
-          logging.debug("nombre d'edges sur face circulaire: %s", nbv)
-          if nbv > 3:
-            edgeEnTrop.append(True) # TODO : distinguer les cas avec deux faces circulaires dont l'une est correcte
-          else:
-            edgeEnTrop.append(False)
-        refaire = sum(edgeEnTrop)
-        if refaire > 0:
-          dc = [(geompy.MinDistance(verticesEdgesFondIn[0], fac), i)  for i, fac in enumerate(facesPeauSorted[:-1])]
-          dc.sort()
-          logging.debug("dc sorted: %s", dc)
-          i0 = dc[0][1] # indice de facesPeauSorted qui correspond à verticesEdgesFondIn[0], donc 0 pour cercles
-          direct = (i0 == 0)
-          for i, bad in enumerate(edgeEnTrop):
-            if direct:
-              j = i
-            else:
-              j = 1-i
-            if bad:
-              outilPart[j] = geompy.MakeProjection(cercles[j],facesOnside[0])
-            pass
-          partitionPeauByPipe = geompy.MakePartition(facesAndFond, outilPart, [], [], geompy.ShapeType["FACE"], 0, [], 1)
-          pass
-          
-      name="partitionPeauByPipe%d"%ifil
-      geomPublish(initLog.debug, partitionPeauByPipe, name)
-      [edgesPeauFondIn, edgesPeauFondOut, edgesPeauFondOn] = extractionOrientee(fillingFaceExterne, partitionPeauByPipe, centreFondFiss, "EDGE", 1.e-3)
-      [facesPeauFondIn, facesPeauFondOut, facesPeauFondOn] = extractionOrientee(fillingFaceExterne, partitionPeauByPipe, centreFondFiss, "FACE", 1.e-3)
-        
-      if len(verticesPipePeau) > 0: # --- au moins une extrémité du pipe sur cette face de peau
-        facesPeauSorted, minsur, maxsurf = sortFaces(facesPeauFondOn)
-        facePeau = facesPeauSorted[-1] # la plus grande face
-      else:
-        facePeau =geompy.MakePartition(facesPeauFondOn, [], [], [], geompy.ShapeType["FACE"], 0, [], 1)
-      name="facePeau%d"%ifil
-      geomPublish(initLog.debug, facePeau, name)
-      
-      facesPipePeau = [None for i in range(len(edgesFissExtPipe))]
-      endsEdgeFond = [None for i in range(len(edgesFissExtPipe))]
-      edgeRadFacePipePeau = [None for i in range(len(edgesFissExtPipe))]
-      
-      edgesListees = []
-      edgesCircPeau = []
-      verticesCircPeau = []
-      if len(verticesPipePeau) > 0: # --- au moins une extrémité du pipe sur cette face de peau
-        
-        for face in facesPeauSorted[:-1]: # la ou les faces débouchantes, pas la grande face de peau
-          logging.debug("examen face debouchante circulaire")
-          for i,efep in enumerate(edgesFissExtPipe):
-            dist = geompy.MinDistance(face, efep)
-            logging.debug("  distance face circulaire edge %s", dist)
-            if dist < 1e-3:
-              for ik, edpfi in enumerate(edgesPeauFondIn):
-                if geompy.MinDistance(face, edpfi) < 1e-3:
-                  break
-              sharedVertices = geompy.GetSharedShapesMulti([face, edgesPeauFondIn[ik]], geompy.ShapeType["VERTEX"])
-              nameFace = "facePipePeau%d"%i
-              nameVert = "endEdgeFond%d"%i
-              nameEdge = "edgeRadFacePipePeau%d"%i
-              facesPipePeau[i] = face
-              endsEdgeFond[i] = sharedVertices[0]
-              geomPublish(initLog.debug, face, nameFace)
-              geomPublish(initLog.debug, sharedVertices[0], nameVert)
-              edgesFace = geompy.ExtractShapes(face, geompy.ShapeType["EDGE"], True)
-              for edge in edgesFace:
-                if geompy.MinDistance(edge, sharedVertices[0]) < 1e-3:
-                  edgeRadFacePipePeau[i] = edge
-                  geomPublish(initLog.debug, edge, nameEdge)
-                  break
-                pass
-              pass
-            pass
-          pass
-        
-        # --- edges circulaires de la face de peau et points de jonction de la face externe de fissure
-        logging.debug("facesPipePeau: %s", facesPipePeau)
-        edgesCircPeau = [None for i in range(len(facesPipePeau))]
-        verticesCircPeau = [None for i in range(len(facesPipePeau))]        
-        for i,fcirc in enumerate(facesPipePeau):
-          edges = geompy.GetSharedShapesMulti([facePeau, fcirc], geompy.ShapeType["EDGE"])
-          grpEdgesCirc = geompy.CreateGroup(facePeau, geompy.ShapeType["EDGE"])
-          geompy.UnionList(grpEdgesCirc, edges)
-          edgesCircPeau[i] = grpEdgesCirc
-          name = "edgeCirc%d"%i
-          geomPublishInFather(initLog.debug,facePeau, grpEdgesCirc, name)
-          edgesListees = edgesListees + edges
-          vertices = geompy.GetSharedShapesMulti([facePeau, fcirc], geompy.ShapeType["VERTEX"])
-          grpVertCircPeau = geompy.CreateGroup(facePeau, geompy.ShapeType["VERTEX"])
-          geompy.UnionList(grpVertCircPeau, vertices)
-          verticesCircPeau[i] = grpVertCircPeau
-          name = "pointEdgeCirc%d"%i
-          geomPublishInFather(initLog.debug,facePeau, grpVertCircPeau, name)
-          pass
-        pass # --- au moins une extrémité du pipe sur cette face de peau
-
-      # --- edges de bord de la face de peau
-
-      edgesFilling = geompy.ExtractShapes(fillingFaceExterne, geompy.ShapeType["EDGE"], False)
-      edgesBords = []
-      for i, edge in enumerate(edgesFilling):
-        edgepeau = geompy.GetInPlace(facePeau, edge)
-        name = "edgepeau%d"%i
-        geomPublishInFather(initLog.debug,facePeau,edgepeau, name)
-        logging.debug("edgepeau %s", geompy.ShapeInfo(edgepeau))
-        if geompy.ShapeInfo(edgepeau)['EDGE'] > 1:
-          logging.debug("  EDGES multiples")
-          edgs = geompy.ExtractShapes(edgepeau, geompy.ShapeType["EDGE"], False)
-          edgesBords += edgs
-          edgesListees += edgs
-        else:
-          logging.debug("  EDGE")
-          edgesBords.append(edgepeau)
-          edgesListees.append(edgepeau)
-      groupEdgesBordPeau = geompy.CreateGroup(facePeau, geompy.ShapeType["EDGE"])
-      geompy.UnionList(groupEdgesBordPeau, edgesBords)
-      bordsVifs = None
-      if aretesVivesC is not None:
-        bordsVifs = geompy.GetInPlace(facePeau, aretesVivesC)
-      if bordsVifs is not None:
-        geomPublishInFather(initLog.debug,facePeau, bordsVifs, "bordsVifs")
-        groupEdgesBordPeau = geompy.CutGroups(groupEdgesBordPeau, bordsVifs)
-        grptmp = None
-        if len(aretesVivesCoupees) > 0:
-          grpC = geompy.MakeCompound(aretesVivesCoupees)
-          grptmp = geompy.GetInPlace(facePeau, grpC)
-        if grptmp is not None:
-          grpnew = geompy.CutGroups(bordsVifs, grptmp) # ce qui est nouveau dans bordsVifs
-        else:
-          grpnew = bordsVifs
-        if grpnew is not None:
-          edv = geompy.ExtractShapes(grpnew, geompy.ShapeType["EDGE"], False)
-          aretesVivesCoupees += edv
-      logging.debug("aretesVivesCoupees %s",aretesVivesCoupees)
-      geomPublishInFather(initLog.debug,facePeau, groupEdgesBordPeau , "EdgesBords")
-        
-      # ---  edges de la face de peau partagées avec la face de fissure
-      
-      edgesPeau = geompy.ExtractShapes(facePeau, geompy.ShapeType["EDGE"], False)
-      edges = substractSubShapes(facePeau, edgesPeau, edgesListees)
-      edgesFissurePeau = []
-      if len(verticesPipePeau) > 0: # --- au moins une extrémité du pipe sur cette face de peau
-        edgesFissurePeau = [None for i in range(len(verticesCircPeau))] # edges associés aux extrémités du pipe, en premier
-        for edge in edges:
-          for i, grpVert in enumerate(verticesCircPeau):
-            if (geompy.MinDistance(grpVert, edge) < 1.e-3) and (edge not in edgesFissurePeau):
-              edgesFissurePeau[i] = edge
-              name = "edgeFissurePeau%d"%i
-              geomPublishInFather(initLog.debug,facePeau,  edge, name)
-        for edge in edges: # on ajoute après les edges manquantes
-          if edge not in edgesFissurePeau:
-            edgesFissurePeau.append(edge)
-      else:
-        for i, edge in enumerate(edges):
-          edgesFissurePeau.append(edge)
-          name = "edgeFissurePeau%d"%i
-          geomPublishInFather(initLog.debug,facePeau,  edge, name)
-        
-
-      ptEdgeFond[ifil] = endsEdgeFond        # pour chaque face [points edge fond de fissure aux débouchés du pipe]
-      fsPipePeau[ifil] = facesPipePeau       # pour chaque face [faces du pipe débouchantes]
-      edRadFPiPo[ifil] = edgeRadFacePipePeau # pour chaque face [edge radiale des faces du pipe débouchantes ]
-      fsFissuExt[ifil] = facesFissExt        # pour chaque face [faces de fissure externes au pipe]
-      edFisExtPe[ifil] = edgesFissExtPeau    # pour chaque face [edge en peau des faces de fissure externes (pas subshape facePeau)]
-      edFisExtPi[ifil] = edgesFissExtPipe    # pour chaque face [edge commun au pipe des faces de fissure externes]
-      facesPeaux[ifil] = facePeau            # pour chaque face : la face de peau finale a mailler (percee des faces débouchantes)
-      edCircPeau[ifil] = edgesCircPeau       # pour chaque face de peau : [groupe subshapes edges circulaires aux débouchés du pipe]
-      ptCircPeau[ifil] = verticesCircPeau    # pour chaque face de peau : [groupe subshapes points sur edges circulaires aux débouchés du pipe]
-      gpedgeBord[ifil] = groupEdgesBordPeau  # pour chaque face de peau : groupe subshape des edges aux bords liés à la partie saine
-      gpedgeVifs[ifil] = bordsVifs           # pour chaque face de peau : groupe subshape des edges aux bords correspondant à des arêtes vives
-      edFissPeau[ifil] = edgesFissurePeau    # pour chaque face de peau : [subshape edge en peau des faces de fissure externes]
-      ptFisExtPi[ifil] = verticesPipePeau    # pour chaque face de peau : [point commun edFissPeau edCircPeau]
-
-  # -----------------------------------------------------------------------
-  # fin de la boucle sur les faces de filling
-  # -----------------------------------------------------------------------
-  
-  for i, avc in enumerate(aretesVivesCoupees):
-    name = "areteViveCoupee%d"%i
-    geomPublish(initLog.debug, avc, name)
-  
-  # --- identification des faces et edges de fissure externe pour maillage
-  
-  facesFissExt = []
-  edgesFissExtPeau = []
-  edgesFissExtPipe = []
-  for ifil in range(nbFacesFilling): # TODO: éliminer les doublons (comparer tous les vertices triés, avec mesure de distance ?)
-    facesFissExt += fsFissuExt[ifil]
-    edgesFissExtPeau += edFisExtPe[ifil]
-    edgesFissExtPipe += edFisExtPi[ifil]
-  logging.debug("---------------------------- identification faces de fissure externes au pipe :%s ", len(facesFissExt))
-  # regroupement des faces de fissure externes au pipe.
-  
-  if len(facesFissExt) > 1:
-    faceFissureExterne = geompy.MakePartition(facesFissExt, [], [], [], geompy.ShapeType["FACE"], 0, [], 0)
-    edgesPipeFissureExterneC = geompy.GetInPlace(faceFissureExterne, geompy.MakeCompound(edgesPipeFiss))    # edgesFissExtPipe peut ne pas couvrir toute la longueur
-    # edgesPeauFissureExterneC = geompy.GetInPlace(faceFissureExterne, geompy.MakeCompound(edgesFissExtPeau))
-    # il peut manquer des edges de faceFissureExterne en contact avec la peau dans edgesFissExtPeau
-    (isDone, closedFreeBoundaries, openFreeBoundaries) = geompy.GetFreeBoundary(faceFissureExterne)
-    edgesBordFFE = []
-    for bound in closedFreeBoundaries:
-      edgesBordFFE += geompy.ExtractShapes(bound, geompy.ShapeType["EDGE"], False)
-    edgesBordFFEid = [ (ed,geompy.GetSubShapeID(faceFissureExterne, ed)) for ed in edgesBordFFE]
-    logging.debug("edgesBordFFEid %s", edgesBordFFEid)
-    edgesPPE = geompy.ExtractShapes(edgesPipeFissureExterneC, geompy.ShapeType["EDGE"], False)
-    edgesPPEid = [ geompy.GetSubShapeID(faceFissureExterne, ed) for ed in edgesPPE]
-    logging.debug("edgesPPEid %s", edgesPPEid)
-    edgesPFE = [ edid[0] for edid in edgesBordFFEid if edid[1] not in edgesPPEid] # on garde toutes les edges de bord non en contact avec le pipe
-    logging.debug("edgesPFE %s", edgesPFE)
-    edgesPeauFissureExterneC = geompy.MakeCompound(edgesPFE)
-  else:
-    faceFissureExterne = facesFissExt[0]
-    edgesPeauFissureExterneC = geompy.MakeCompound(edgesFissExtPeau)
-    edgesPipeFissureExterneC = geompy.MakeCompound(edgesFissExtPipe)
-  wirePipeFissureExterne = geompy.MakeWire(geompy.ExtractShapes(edgesPipeFissureExterneC, geompy.ShapeType["EDGE"], False))
-  geomPublish(initLog.debug, faceFissureExterne, "faceFissureExterne")
-  geomPublishInFather(initLog.debug,faceFissureExterne, edgesPeauFissureExterneC, "edgesPeauFissureExterne")
-  geomPublishInFather(initLog.debug,faceFissureExterne, edgesPipeFissureExterneC, "edgesPipeFissureExterne")
-  
-  logging.debug("---------------------------- Preparation Maillage du Pipe --------------")
-  # -----------------------------------------------------------------------
-  # --- preparation maillage du pipe :
-  #     - détections des points a respecter : jonction des edges/faces constituant
-  #       la face de fissure externe au pipe
-  #     - points sur les edges de fond de fissure et edges pipe/face fissure,
-  #     - vecteurs tangents au fond de fissure (normal au disque maillé)
-
-  # --- option de maillage selon le rayon de courbure du fond de fissure 
-  lenEdgeFondExt = 0
-  for edff in edgesFondFiss:
-    lenEdgeFondExt += geompy.BasicProperties(edff)[0]
-  
-  disfond = []
-  for filling in facesDefaut:
-    disfond.append(geompy.MinDistance(centreFondFiss, filling))
-  disfond.sort()
-  rcourb = disfond[0]
-  nbSegQuart = 5 # on veut 5 segments min sur un quart de cercle
-  alpha = math.pi/(4*nbSegQuart)
-  deflexion = rcourb*(1.0 -math.cos(alpha))
-  lgmin = lenSegPipe*0.25
-  lgmax = lenSegPipe*1.5               
-  logging.debug("rcourb: %s, lenFond:%s, deflexion: %s, lgmin: %s, lgmax: %s", rcourb, lenEdgeFondExt, deflexion, lgmin, lgmax)  
-
-  meshFondExt = smesh.Mesh(wireFondFiss)
-  algo1d = meshFondExt.Segment()
-  hypo1d = algo1d.Adaptive(lgmin, lgmax, deflexion) # a ajuster selon la profondeur de la fissure
-  isDone = meshFondExt.Compute()
-  
-  ptGSdic = {} # dictionnaire [paramètre sur la courbe] --> point géométrique
-  allNodeIds = meshFondExt.GetNodesId()
-  for nodeId in allNodeIds:
-    xyz = meshFondExt.GetNodeXYZ(nodeId)
-    #logging.debug("nodeId %s, coords %s", nodeId, str(xyz))
-    pt = geompy.MakeVertex(xyz[0], xyz[1], xyz[2])
-    u, PointOnEdge, EdgeInWireIndex = geompy.MakeProjectionOnWire(pt, wireFondFiss) # u compris entre 0 et 1
-    edgeOrder = edgesIdByOrientation[EdgeInWireIndex]
-    ptGSdic[(edgeOrder, EdgeInWireIndex, u)] = pt
-    #logging.debug("nodeId %s, u %s", nodeId, str(u))
-  usort = sorted(ptGSdic)  
-  logging.debug("nombre de points obtenus par deflexion %s",len(usort))
-     
-  centres = []
-  origins = []
-  normals = []      
-  for edu in usort:
-    ied = edu[1]
-    u = edu[2]
-    vertcx = ptGSdic[edu]
-    norm = geompy.MakeTangentOnCurve(edgesFondFiss[ied], u)
-    plan = geompy.MakePlane(vertcx, norm, 3*rayonPipe)
-    part = geompy.MakePartition([plan], [wirePipeFiss], [], [], geompy.ShapeType["VERTEX"], 0, [], 0)
-    liste = geompy.ExtractShapes(part, geompy.ShapeType["VERTEX"], True)
-    if len(liste) == 5: # 4 coins du plan plus intersection recherchée
-      for point in liste:
-        if geompy.MinDistance(point, vertcx) < 1.1*rayonPipe: # les quatre coins sont plus loin
-          vertpx = point
-          break
-      centres.append(vertcx)
-      origins.append(vertpx)
-      normals.append(norm)
-#      name = "vertcx%d"%i
-#      geomPublishInFather(initLog.debug,wireFondFiss, vertcx, name)
-#      name = "vertpx%d"%i
-#      geomPublishInFather(initLog.debug,wireFondFiss, vertpx, name)
-#      name = "plan%d"%i
-#      geomPublishInFather(initLog.debug,wireFondFiss, plan, name)
-
-  # --- maillage du pipe étendu, sans tenir compte de l'intersection avec la face de peau
-      
-  logging.debug("nbsegCercle %s", nbsegCercle)
-  
-  # -----------------------------------------------------------------------
-  # --- points géométriques
-  
-  gptsdisks = [] # vertices géométrie de tous les disques
-  raydisks = [[] for i in range(nbsegCercle)]
-  for i in range(len(centres)): # boucle sur les disques
-    gptdsk = [] # vertices géométrie d'un disque
-    vertcx = centres[i]
-    vertpx = origins[i]
-    normal = normals[i]
-    vec1 = geompy.MakeVector(vertcx, vertpx)
-    
-    points = [vertcx] # les points du rayon de référence
-    for j in range(nbsegRad):
-      pt = geompy.MakeTranslationVectorDistance(vertcx, vec1, (j+1)*float(rayonPipe)/nbsegRad)
-      points.append(pt)
-    gptdsk.append(points)
-    pt = geompy.MakeTranslationVectorDistance(vertcx, vec1, 1.5*rayonPipe)
-    rayon = geompy.MakeLineTwoPnt(vertcx, pt)
-    raydisks[0].append(rayon)
-    
-    for k in range(nbsegCercle-1):
-      angle = (k+1)*2*math.pi/nbsegCercle
-      pts = [vertcx] # les points d'un rayon obtenu par rotation
-      for j in range(nbsegRad):
-        pt = geompy.MakeRotation(points[j+1], normal, angle)
-        pts.append(pt)
-      gptdsk.append(pts)
-      ray = geompy.MakeRotation(rayon, normal, angle)
-      raydisks[k+1].append(ray)
-      
-    gptsdisks.append(gptdsk) 
-  # -----------------------------------------------------------------------
-  # --- recherche des points en trop (externes au volume à remailler)
-  #     - on associe chaque extrémité du pipe à une face filling 
-  #     - on part des disques aux extrémités du pipe
-  #     - pour chaque disque, on prend les vertices de géométrie,
-  #       on marque leur position relative à la face.
-  #     - on s'arrete quand tous les noeuds sont dedans
-  
-  logging.debug("---------------------------- recherche des points du pipe a éliminer --------------")
-
-  pt0 = centres[0]
-  pt1 = centres[-1]
-  idFillingFromBout = [None, None]                 # contiendra l'index du filling pour les extrémités 0 et 1
-  for ifil in range(nbFacesFilling):
-    for ipt, pt in enumerate(ptEdgeFond[ifil]): # il y a un ou deux points débouchant sur cette face
-      if geompy.MinDistance(pt,pt0) < geompy.MinDistance(pt,pt1): # TODO: trouver plus fiable pour les cas tordus...
-        idFillingFromBout[0] = ifil
-      else: 
-        idFillingFromBout[1] = ifil
-  logging.debug("association bouts du pipe - faces de filling: %s", idFillingFromBout)
-  
-  facesPipePeau = []
-  edgeRadFacePipePeau = []
-  for ifil in range(nbFacesFilling):
-    facesPipePeau += fsPipePeau[ifil]
-    edgeRadFacePipePeau += edRadFPiPo[ifil]
-    
-  logging.debug("recherche des disques de noeuds complètement internes")
-  idisklim = [] # indices des premier et dernier disques internes
-  idiskout = [] # indices des premier et dernier disques externes
-  for bout in range(2):
-    if bout == 0:
-      idisk = -1
-      inc = 1
-      numout = -1
-    else:
-      idisk = len(gptsdisks)
-      inc = -1
-      numout = len(gptsdisks)
-    inside = False
-    outside = True
-    while not inside:
-      idisk = idisk + inc
-      logging.debug("examen disque %s", idisk)
-      gptdsk = gptsdisks[idisk]
-      inside = True
-      for k in range(nbsegCercle):
-        points = gptdsk[k]
-        for j, pt in enumerate(points):
-          side = whichSideVertex(facesDefaut[idFillingFromBout[bout]], pt)
-          if side < 0:
-            if outside: # premier point detecté dedans
-              outside = False
-              numout = idisk -inc # le disque précédent était dehors
-          else:
-            inside = False # ce point est dehors              
-        if not inside and not outside:
-          break
-    idisklim.append(idisk)  # premier et dernier disques internes
-    idiskout.append(numout) # premier et dernier disques externes
-    
-  # --- listes de nappes radiales en filling à chaque extrémité débouchante
-  facesDebouchantes = [False, False]
-  idFacesDebouchantes = [-1, -1] # contiendra les indices des faces disque débouchantes (facesPipePeau)
-  listNappes =[]
-  for i, idisk in enumerate(idisklim):
-    numout = idiskout[i]
-    logging.debug("extremité %s, indices disques interne %s, externe %s",i, idisk, numout)
-    nappes = []
-    if  (idisk != 0) and (idisk != len(gptsdisks)-1): # si extrémité débouchante
-      for k in range(nbsegCercle):
-        if i == 0:
-          iddeb = max(0, numout)
-          idfin = max(iddeb+3,idisk+1) # il faut 3 rayons pour faire un filling qui suive le fond de fissure
-          #logging.debug("extremité %s, indices retenus interne %s, externe %s",i, idfin, iddeb)
-          comp = geompy.MakeCompound(raydisks[k][iddeb:idfin])
-          name='compoundRay%d'%k
-          geomPublish(initLog.debug, comp, name)
-        else:
-          idfin = min(len(gptsdisks), numout+1)
-          iddeb = min(idfin-3, idisk) # il faut 3 rayons pour faire un filling qui suive le fond de fissure
-          #logging.debug("extremité %s, indices retenus interne %s, externe %s",i, idfin, iddeb)
-          comp = geompy.MakeCompound(raydisks[k][iddeb:idfin])
-          name='compoundRay%d'%k
-          geomPublish(initLog.debug, comp, name)
-        nappe = geompy.MakeFilling(comp, 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default)
-        nappes.append(nappe)
-        name='nappe%d'%k
-        geomPublish(initLog.debug, nappe, name)
-        facesDebouchantes[i] = True
-    listNappes.append(nappes)
-      
-  # --- mise en correspondance avec les indices des faces disque débouchantes (facesPipePeau)
-  for i, nappes in enumerate(listNappes):
-    if facesDebouchantes[i]:
-      for k, face in enumerate(facesPipePeau):
-        edge = geompy.MakeSection(face, nappes[0])
-        if geompy.NbShapes(edge, geompy.ShapeType["EDGE"]) > 0:
-          idFacesDebouchantes[i] = k
-          break
-  logging.debug("idFacesDebouchantes: %s", idFacesDebouchantes)
-
-  # --- construction des listes d'edges radiales sur chaque extrémité débouchante
-  listEdges = []
-  for i, nappes in enumerate(listNappes):
-    id = idFacesDebouchantes[i] # indice de face débouchante (facesPipePeau)
-    if id < 0:
-      listEdges.append([])
-    else:
-      face = facesPipePeau[id]
-      edges = [edgeRadFacePipePeau[id]]
-      for k, nappe in enumerate(nappes):
-        if k > 0:
-          obj = geompy.MakeSection(face, nappes[k]) # normalement une edge, parfois un compound d'edges dont un tout petit
-          edge = obj
-          vs = geompy.ExtractShapes(obj, geompy.ShapeType["VERTEX"], False)
-          if len(vs) > 2:
-            eds = geompy.ExtractShapes(obj, geompy.ShapeType["EDGE"], False)
-            [edsorted, minl,maxl] = sortEdges(eds)
-            edge = edsorted[-1]
-          else:
-            maxl = geompy.BasicProperties(edge)[0]
-          if maxl < 0.01: # problème MakeSection
-            logging.debug("problème MakeSection recherche edge radiale %s, longueur trop faible: %s, utilisation partition", k, maxl)
-            partNappeFace = geompy.MakePartition([face, nappes[k]], [] , [], [], geompy.ShapeType["FACE"], 0, [], 0)
-            edps= geompy.ExtractShapes(partNappeFace, geompy.ShapeType["EDGE"], False)
-            ednouv = []
-            for ii, ed in enumerate(edps):
-              vxs = geompy.ExtractShapes(ed, geompy.ShapeType["VERTEX"], False)
-              distx = [geompy.MinDistance(vx, face) for vx in vxs]
-              distx += [geompy.MinDistance(vx, nappes[k]) for vx in vxs]
-              dmax = max(distx)
-              logging.debug("  dmax %s",dmax)
-              if dmax < 0.01:
-                ednouv.append(ed)
-            logging.debug("  edges issues de la partition: %s", ednouv)
-            for ii, ed in enumerate(ednouv):
-              geomPublish(initLog.debug, ed, "ednouv%d"%ii)
-            [edsorted, minl,maxl] = sortEdges(ednouv)
-            logging.debug("  longueur edge trouvée: %s", maxl) 
-            edge = edsorted[-1]
-          edges.append(edge)
-          name = 'edgeEndPipe%d'%k
-          geomPublish(initLog.debug, edge, name)
-      listEdges.append(edges)
-
-  # --- création des points du maillage du pipe sur la face de peau
-  for i, edges in enumerate(listEdges):
-    id = idFacesDebouchantes[i] # indice de face débouchante (facesPipePeau)
-    if id >= 0:
-      gptdsk = []
-      if id > 0: # id vaut 0 ou 1
-        id = -1  # si id vaut 1, on prend le dernier élément de la liste (1 ou 2 extrémités débouchent sur la face)
-      centre = ptEdgeFond[idFillingFromBout[i]][id]
-      name = "centre%d"%id
-      geomPublish(initLog.debug, centre, name)
-      vertPipePeau = ptFisExtPi[idFillingFromBout[i]][id]
-      geomPublishInFather(initLog.debug,centre, vertPipePeau, "vertPipePeau")
-      grpsEdgesCirc = edCircPeau[idFillingFromBout[i]] # liste de groupes
-      edgesCirc = []
-      for grpEdgesCirc in grpsEdgesCirc:
-        edgesCirc += geompy.ExtractShapes(grpEdgesCirc, geompy.ShapeType["EDGE"], False)
-      for k, edge in enumerate(edges):
-        extrems = geompy.ExtractShapes(edge, geompy.ShapeType["VERTEX"], True)
-        if geompy.MinDistance(centre, extrems[0]) < geompy.MinDistance(centre, extrems[1]):
-          bout = extrems[1]
-        else:
-          bout = extrems[0]
-        # ajustement du point extrémité (bout) sur l'edge circulaire en face de peau
-        logging.debug("edgesCirc: %s", edgesCirc)
-        distEdgeCirc = [(geompy.MinDistance(bout, edgeCirc), k2, edgeCirc) for k2, edgeCirc in enumerate(edgesCirc)]
-        distEdgeCirc.sort()
-        logging.debug("distEdgeCirc: %s", distEdgeCirc)
-        u = projettePointSurCourbe(bout, distEdgeCirc[0][2])
-        if (abs(u) < 0.02) or (abs(1-u) < 0.02): # les points très proches d'une extrémité doivent y être mis précisément.
-          extrCircs = geompy.ExtractShapes(distEdgeCirc[0][2], geompy.ShapeType["VERTEX"], True)
-          if geompy.MinDistance(bout, extrCircs[0]) < geompy.MinDistance(bout, extrCircs[1]):
-            bout = extrCircs[0]
-          else:
-            bout = extrCircs[1]
-          pass
-        else:
-          bout = geompy.MakeVertexOnCurve(distEdgeCirc[0][2], u)
-        name ="bout%d"%k
-        geomPublishInFather(initLog.debug,centre, bout, name)
-        # enregistrement des points dans la structure
-        points = []
-        for j in range(nbsegRad +1):
-          u = j/float(nbsegRad)
-          points.append(geompy.MakeVertexOnCurve(edge, u))
-        if geompy.MinDistance(bout, points[0]) < geompy.MinDistance(centre, points[0]):
-          points.reverse()
-        points[0] = centre
-        points[-1] = bout
-        gptdsk.append(points)
-      if i == 0:
-        gptsdisks[idisklim[0] -1] = gptdsk
-        idisklim[0] = idisklim[0] -1
-      else:
-        gptsdisks[idisklim[1] +1] = gptdsk
-        idisklim[1] = idisklim[1] +1
-
-  # --- ajustement precis des points sur edgesPipeFissureExterneC
-  
-  edgesPFE = geompy.ExtractShapes(edgesPipeFissureExterneC, geompy.ShapeType["EDGE"], False)
-  verticesPFE = findWireIntermediateVertices(wirePipeFissureExterne)  # vertices intermédiaires (des points en trop dans ptsInWireFissExtPipe)
-  idiskmin = idisklim[0] + 1 # on ne prend pas le disque sur la peau, déjà ajusté
-  idiskmax = idisklim[1]     # on ne prend pas le disque sur la peau, déjà ajusté
-  idiskint = []
-  for vtx in verticesPFE:
-    distPtVt = []
-    for idisk in range(idiskmin, idiskmax):
-      gptdsk = gptsdisks[idisk]
-      pt = gptdsk[0][-1]       # le point sur l'edge de la fissure externe au pipe
-      distPtVt.append((geompy.MinDistance(pt, vtx), idisk))
-    distPtVt.sort()
-    idiskint.append(distPtVt[0][1])
-    gptsdisks[idiskint[-1]][0][-1] = vtx
-    logging.debug("ajustement point sur edgePipeFissureExterne, vertex: %s %s", idiskint[-1], distPtVt[0][0])
-  for idisk in range(idiskmin, idiskmax):
-    if idisk in idiskint:
-      break
-    logging.debug("ajustement point sur edgePipeFissureExterne: %s", idisk)
-    gptdsk = gptsdisks[idisk]
-    pt = gptdsk[0][-1]       # le point sur l'edge de la fissure externe au pipe
-    distPtEd = [(geompy.MinDistance(pt, edgePFE), k, edgePFE) for k, edgePFE in enumerate(edgesPFE)]
-    distPtEd.sort()
-    edgePFE = distPtEd[0][2]
-    u = projettePointSurCourbe(pt, edgePFE)
-    ptproj = geompy.MakeVertexOnCurve(edgePFE, u)
-    gptsdisks[idisk][0][-1] = ptproj
-  
-  # -----------------------------------------------------------------------
-  # --- maillage effectif du pipe
-
-  logging.debug("---------------------------- maillage effectif du pipe --------------")
-  meshPipe = smesh.Mesh(None, "meshPipe")
-  fondFissGroup = meshPipe.CreateEmptyGroup(SMESH.EDGE, "FONDFISS")
-  nodesFondFissGroup = meshPipe.CreateEmptyGroup(SMESH.NODE, "nfondfis")
-  faceFissGroup = meshPipe.CreateEmptyGroup(SMESH.FACE, "fisInPi")
-  edgeFaceFissGroup = meshPipe.CreateEmptyGroup(SMESH.EDGE, "edgeFaceFiss")
-  edgeCircPipe0Group = meshPipe.CreateEmptyGroup(SMESH.EDGE, "edgeCircPipe0")
-  edgeCircPipe1Group = meshPipe.CreateEmptyGroup(SMESH.EDGE, "edgeCircPipe1")
-  faceCircPipe0Group = meshPipe.CreateEmptyGroup(SMESH.FACE, "faceCircPipe0")
-  faceCircPipe1Group = meshPipe.CreateEmptyGroup(SMESH.FACE, "faceCircPipe1")
-  mptsdisks = []  # vertices maillage de tous les disques
-  mEdges = []     # identifiants edges maillage fond de fissure
-  mEdgeFaces = [] # identifiants edges maillage edge face de fissure externe
-  mFaces = []     # identifiants faces maillage fissure
-  mVols  = []     # identifiants volumes maillage pipe
-
-  mptdsk = None
-  for idisk in range(idisklim[0], idisklim[1]+1): # boucle sur les disques internes
-    
-    # -----------------------------------------------------------------------
-    # --- points
-    
-    gptdsk = gptsdisks[idisk]
-    if idisk > idisklim[0]:
-      oldmpts = mptdsk
-    mptdsk = [] # vertices maillage d'un disque
-    for k in range(nbsegCercle):
-      points = gptdsk[k]
-      mptids = []
-      for j, pt in enumerate(points):
-        if j == 0 and k > 0:
-          id = mptdsk[0][0]
-        else:
-          coords = geompy.PointCoordinates(pt)
-          id = meshPipe.AddNode(coords[0], coords[1], coords[2])
-        mptids.append(id)
-      mptdsk.append(mptids)
-    mptsdisks.append(mptdsk)
-    
-    # -----------------------------------------------------------------------
-    # --- groupes edges cercles debouchants
-    
-    if idisk == idisklim[0]:
-      pts = []
-      for k in range(nbsegCercle):
-        pts.append(mptdsk[k][-1])
-      edges = []
-      for k in range(len(pts)):
-        k1 = (k+1)%len(pts)
-        idEdge = meshPipe.AddEdge([pts[k], pts[k1]])
-        edges.append(idEdge)
-      edgeCircPipe0Group.Add(edges)
-       
-    if idisk == idisklim[1]:
-      pts = []
-      for k in range(nbsegCercle):
-        pts.append(mptdsk[k][-1])
-      edges = []
-      for k in range(len(pts)):
-        k1 = (k+1)%len(pts)
-        idEdge = meshPipe.AddEdge([pts[k], pts[k1]])
-        edges.append(idEdge)
-      edgeCircPipe1Group.Add(edges)
-    
-    # -----------------------------------------------------------------------
-    # --- groupes faces  debouchantes
-    
-    if idisk == idisklim[0]:
-      faces = []
-      for j in range(nbsegRad):
-        for k in range(nbsegCercle):
-          k1 = k+1
-          if k ==  nbsegCercle-1:
-            k1 = 0
-          if j == 0:
-            idf = meshPipe.AddFace([mptdsk[k][0], mptdsk[k][1], mptdsk[k1][1]]) # triangle
-          else:
-            idf = meshPipe.AddFace([mptdsk[k][j], mptdsk[k][j+1], mptdsk[k1][j+1], mptdsk[k1][j]]) # quadrangle
-          faces.append(idf)
-      faceCircPipe0Group.Add(faces)
-
-    if idisk == idisklim[1]:
-      faces = []
-      for j in range(nbsegRad):
-        for k in range(nbsegCercle):
-          k1 = k+1
-          if k ==  nbsegCercle-1:
-            k1 = 0
-          if j == 0:
-            idf = meshPipe.AddFace([mptdsk[k][0], mptdsk[k][1], mptdsk[k1][1]]) # triangle
-          else:
-            idf = meshPipe.AddFace([mptdsk[k][j], mptdsk[k][j+1], mptdsk[k1][j+1], mptdsk[k1][j]]) # quadrangle
-          faces.append(idf)
-      faceCircPipe1Group.Add(faces)
-          
-    # -----------------------------------------------------------------------
-    # --- mailles volumiques, groupes noeuds et edges de fond de fissure, groupe de face de fissure
-    
-    if idisk == idisklim[0]:
-      mEdges.append(0)
-      mEdgeFaces.append(0)
-      mFaces.append([0])
-      mVols.append([[0]])
-      nodesFondFissGroup.Add([mptdsk[0][0]])
-    else:
-      ide = meshPipe.AddEdge([oldmpts[0][0], mptdsk[0][0]])
-      mEdges.append(ide)
-      fondFissGroup.Add([ide])
-      nodesFondFissGroup.Add([mptdsk[0][0]])
-      ide2 = meshPipe.AddEdge([oldmpts[0][-1], mptdsk[0][-1]])
-      mEdgeFaces.append(ide2)
-      edgeFaceFissGroup.Add([ide2])
-      idFaces = []
-      idVols = []
-      
-      for j in range(nbsegRad):
-        idf = meshPipe.AddFace([oldmpts[0][j], mptdsk[0][j], mptdsk[0][j+1], oldmpts[0][j+1]])
-        faceFissGroup.Add([idf])
-        idFaces.append(idf)
-        
-        idVolCercle = []
-        for k in range(nbsegCercle):
-          k1 = k+1
-          if k ==  nbsegCercle-1:
-            k1 = 0
-          if j == 0:
-            idv = meshPipe.AddVolume([mptdsk[k][j], mptdsk[k][j+1], mptdsk[k1][j+1],
-                                      oldmpts[k][j], oldmpts[k][j+1], oldmpts[k1][j+1]])
-          else:
-            idv = meshPipe.AddVolume([mptdsk[k][j], mptdsk[k][j+1], mptdsk[k1][j+1], mptdsk[k1][j],
-                                      oldmpts[k][j], oldmpts[k][j+1], oldmpts[k1][j+1], oldmpts[k1][j]])
-          idVolCercle.append(idv)
-        idVols.append(idVolCercle)  
-        
-      mFaces.append(idFaces)
-      mVols.append(idVols)
-
-  pipeFissGroup = meshPipe.CreateEmptyGroup( SMESH.VOLUME, 'PIPEFISS' )
-  nbAdd = pipeFissGroup.AddFrom( meshPipe.GetMesh() )
-
-  nb, new_mesh, new_group = meshPipe.MakeBoundaryElements(SMESH.BND_2DFROM3D, "pipeBoundaries")
-  edgesCircPipeGroup = [edgeCircPipe0Group, edgeCircPipe1Group]
-
-  # --- fin du maillage du pipe
-  # -----------------------------------------------------------------------
-  # --- edges de bord, faces défaut à respecter
-
-  aFilterManager = smesh.CreateFilterManager()
-  nbAdded, internalBoundary, _NoneGroup = internalBoundary.MakeBoundaryElements( SMESH.BND_1DFROM2D, '', '', 0, [  ])
-  criteres = []
-  unCritere = smesh.GetCriterion(SMESH.EDGE,SMESH.FT_FreeBorders,SMESH.FT_Undefined,0)
-  criteres.append(unCritere)
-  filtre = smesh.GetFilterFromCriteria(criteres)
-  bordsLibres = internalBoundary.MakeGroupByFilter( 'bords', filtre )
-  smesh.SetName(bordsLibres, 'bordsLibres')
-
-  # --- pour aider l'algo hexa-tetra à ne pas mettre de pyramides à l'exterieur des volumes repliés sur eux-mêmes
-  #     on désigne les faces de peau en quadrangles par le groupe "skinFaces"
-
-  skinFaces = internalBoundary.CreateEmptyGroup( SMESH.FACE, 'skinFaces' )
-  nbAdd = skinFaces.AddFrom( internalBoundary.GetMesh() )
-
-  # --- maillage des éventuelles arêtes vives entre faces reconstruites
-  
-  if len(aretesVivesCoupees) > 0:
-    aretesVivesC = geompy.MakeCompound(aretesVivesCoupees)
-    meshAretesVives = smesh.Mesh(aretesVivesC)
-    algo1d = meshAretesVives.Segment()
-    hypo1d = algo1d.LocalLength(dmoyen,[],1e-07)
-    putName(algo1d.GetSubMesh(), "aretesVives")
-    putName(algo1d, "algo1d_aretesVives")
-    putName(hypo1d, "hypo1d_aretesVives")
-    isDone = meshAretesVives.Compute()
-    logging.info("aretesVives fini")
-    grpAretesVives = meshAretesVives.CreateEmptyGroup( SMESH.EDGE, 'grpAretesVives' )
-    nbAdd = grpAretesVives.AddFrom( meshAretesVives.GetMesh() )
-
-  # -----------------------------------------------------------------------
-  # --- maillage faces de fissure
-  
-  logging.debug("---------------------------- maillage faces de fissure externes au pipe :%s --------------", len(facesFissExt))
-
-  meshFaceFiss = smesh.Mesh(faceFissureExterne)
-  algo2d = meshFaceFiss.Triangle(algo=smeshBuilder.NETGEN_1D2D)
-  hypo2d = algo2d.Parameters()
-  hypo2d.SetMaxSize( areteFaceFissure )
-  hypo2d.SetSecondOrder( 0 )
-  hypo2d.SetOptimize( 1 )
-  hypo2d.SetFineness( 2 )
-  hypo2d.SetMinSize( rayonPipe/float(nbsegRad) )
-  hypo2d.SetQuadAllowed( 0 )
-  putName(algo2d.GetSubMesh(), "faceFiss")
-  putName(algo2d, "algo2d_faceFiss")
-  putName(hypo2d, "hypo2d_faceFiss")
-  
-  algo1d = meshFaceFiss.UseExisting1DElements(geom=edgesPipeFissureExterneC)
-  hypo1d = algo1d.SourceEdges([ edgeFaceFissGroup ],0,0)
-  putName(algo1d.GetSubMesh(), "edgeFissPeau")
-  putName(algo1d, "algo1d_edgeFissPeau")
-  putName(hypo1d, "hypo1d_edgeFissPeau")
-  
-  isDone = meshFaceFiss.Compute()
-  logging.info("meshFaceFiss fini")
-
-  grpFaceFissureExterne = meshFaceFiss.GroupOnGeom(faceFissureExterne, "fisOutPi", SMESH.FACE)
-  grpEdgesPeauFissureExterne = meshFaceFiss.GroupOnGeom(edgesPeauFissureExterneC,'edgesPeauFissureExterne',SMESH.EDGE)
-  grpEdgesPipeFissureExterne = meshFaceFiss.GroupOnGeom(edgesPipeFissureExterneC,'edgesPipeFissureExterne',SMESH.EDGE)
-
-  # --- maillage faces de peau
-    
-  boutFromIfil = [None for i in range(nbFacesFilling)]
-  if idFillingFromBout[0] != idFillingFromBout[1]: # repérage des extremites du pipe quand elles débouchent sur des faces différentes
-    boutFromIfil[idFillingFromBout[0]] = 0
-    boutFromIfil[idFillingFromBout[1]] = 1
-  
-  logging.debug("---------------------------- maillage faces de peau --------------")
-  meshesFacesPeau = []
-  for ifil in range(nbFacesFilling):
-    meshFacePeau = None
-    if partitionsPeauFissFond[ifil] is None: # face de peau maillage sain intacte
-      
-      # --- edges de bord de la face de filling
-      filling = facesDefaut[ifil]
-      edgesFilling = geompy.ExtractShapes(filling, geompy.ShapeType["EDGE"], False)
-      groupEdgesBordPeau = geompy.CreateGroup(filling, geompy.ShapeType["EDGE"])
-      geompy.UnionList(groupEdgesBordPeau, edgesFilling)
-      geomPublishInFather(initLog.debug,filling, groupEdgesBordPeau , "EdgesBords")
-      
-      meshFacePeau = smesh.Mesh(facesDefaut[ifil])
-      
-      algo1d = meshFacePeau.UseExisting1DElements(geom=groupEdgesBordPeau)
-      hypo1d = algo1d.SourceEdges([ bordsLibres ],0,0)
-      putName(algo1d.GetSubMesh(), "bordsLibres", ifil)
-      putName(algo1d, "algo1d_bordsLibres", ifil)
-      putName(hypo1d, "hypo1d_bordsLibres", ifil)
-      
-    else:
-      
-      facePeau           = facesPeaux[ifil] # pour chaque face : la face de peau finale a mailler (percée des faces débouchantes)
-      edgesCircPeau      = edCircPeau[ifil] # pour chaque face de peau : [subshape edge circulaire aux débouchés du pipe]
-      verticesCircPeau   = ptCircPeau[ifil] # pour chaque face de peau : [subshape point sur edge circulaire aux débouchés du pipe]
-      groupEdgesBordPeau = gpedgeBord[ifil] # pour chaque face de peau : groupe subshape des edges aux bords liés à la partie saine
-      bordsVifs          = gpedgeVifs[ifil] # pour chaque face de peau : groupe subshape des edges aux bords correspondant à des arêtes vives
-      edgesFissurePeau   = edFissPeau[ifil] # pour chaque face de peau : [subshape edge en peau des faces de fissure externes]
-
-      meshFacePeau = smesh.Mesh(facePeau)
-      
-      algo1d = meshFacePeau.UseExisting1DElements(geom=groupEdgesBordPeau)
-      hypo1d = algo1d.SourceEdges([ bordsLibres ],0,0)
-      putName(algo1d.GetSubMesh(), "bordsLibres", ifil)
-      putName(algo1d, "algo1d_bordsLibres", ifil)
-      putName(hypo1d, "hypo1d_bordsLibres", ifil)
-      
-      algo1d = meshFacePeau.UseExisting1DElements(geom=geompy.MakeCompound(edgesFissurePeau))
-      hypo1d = algo1d.SourceEdges([ grpEdgesPeauFissureExterne ],0,0)
-      putName(algo1d.GetSubMesh(), "edgePeauFiss", ifil)
-      putName(algo1d, "algo1d_edgePeauFiss", ifil)
-      putName(hypo1d, "hypo1d_edgePeauFiss", ifil)
-      
-      if bordsVifs is not None:
-        algo1d = meshFacePeau.UseExisting1DElements(geom=bordsVifs)
-        hypo1d = algo1d.SourceEdges([ grpAretesVives ],0,0)
-        putName(algo1d.GetSubMesh(), "bordsVifs", ifil)
-        putName(algo1d, "algo1d_bordsVifs", ifil)
-        putName(hypo1d, "hypo1d_bordsVifs", ifil)
-        
-      for i, edgeCirc in enumerate(edgesCircPeau):
-        if edgeCirc is not None:
-          algo1d = meshFacePeau.UseExisting1DElements(geom=edgeCirc)
-          if boutFromIfil[ifil] is None:
-            hypo1d = algo1d.SourceEdges([ edgesCircPipeGroup[i] ],0,0)
-          else:
-            hypo1d = algo1d.SourceEdges([ edgesCircPipeGroup[boutFromIfil[ifil]] ],0,0)
-          name = "cercle%d"%i
-          putName(algo1d.GetSubMesh(), name, ifil)
-          putName(algo1d, "algo1d_" + name, ifil)
-          putName(hypo1d, "hypo1d_" + name, ifil)
-   
-    algo2d = meshFacePeau.Triangle(algo=smeshBuilder.NETGEN_1D2D)
-    hypo2d = algo2d.Parameters()
-    hypo2d.SetMaxSize( dmoyen )
-    hypo2d.SetOptimize( 1 )
-    hypo2d.SetFineness( 2 )
-    hypo2d.SetMinSize( rayonPipe/float(nbsegRad) )
-    hypo2d.SetQuadAllowed( 0 )
-    putName(algo2d.GetSubMesh(), "facePeau", ifil)
-    putName(algo2d, "algo2d_facePeau", ifil)
-    putName(hypo2d, "hypo2d_facePeau", ifil)
-      
-    isDone = meshFacePeau.Compute()
-    logging.info("meshFacePeau %d fini", ifil)
-    GroupFaces = meshFacePeau.CreateEmptyGroup( SMESH.FACE, "facePeau%d"%ifil )
-    nbAdd = GroupFaces.AddFrom( meshFacePeau.GetMesh() )
-    meshesFacesPeau.append(meshFacePeau)
-
-  # --- regroupement des maillages du défaut
-
-  listMeshes = [internalBoundary.GetMesh(),
-                meshPipe.GetMesh(),
-                meshFaceFiss.GetMesh()]
-  for mp in meshesFacesPeau:
-    listMeshes.append(mp.GetMesh())
-
-  meshBoiteDefaut = smesh.Concatenate(listMeshes, 1, 1, 1e-05,False)
-  # pour aider l'algo hexa-tetra à ne pas mettre de pyramides à l'exterieur des volumes repliés sur eux-mêmes
-  # on désigne les faces de peau en quadrangles par le groupe "skinFaces"
-  group_faceFissOutPipe = None
-  group_faceFissInPipe = None
-  groups = meshBoiteDefaut.GetGroups()
-  for grp in groups:
-    if grp.GetType() == SMESH.FACE:
-      #if "internalBoundary" in grp.GetName():
-      #  grp.SetName("skinFaces")
-      if grp.GetName() == "fisOutPi":
-        group_faceFissOutPipe = grp
-      elif grp.GetName() == "fisInPi":
-        group_faceFissInPipe = grp
-
-  # le maillage NETGEN ne passe pas toujours ==> utiliser GHS3D
-  distene=True
-  if distene:
-    algo3d = meshBoiteDefaut.Tetrahedron(algo=smeshBuilder.GHS3D)
-  else:
-    algo3d = meshBoiteDefaut.Tetrahedron(algo=smeshBuilder.NETGEN)
-    hypo3d = algo3d.MaxElementVolume(1000.0)
-  putName(algo3d.GetSubMesh(), "boiteDefaut")
-  putName(algo3d, "algo3d_boiteDefaut")
-  isDone = meshBoiteDefaut.Compute()
-  putName(meshBoiteDefaut, "boiteDefaut")
-  logging.info("meshBoiteDefaut fini")
-  
-  faceFissure = meshBoiteDefaut.GetMesh().UnionListOfGroups( [ group_faceFissOutPipe, group_faceFissInPipe ], 'FACE1' )
-  maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin,
-                              zoneDefaut_internalFaces, zoneDefaut_internalEdges)
-  putName(maillageSain, nomFicSain+"_coupe")
-  extrusionFaceFissure, normfiss = shapeSurFissure(facesPortFissure)
-  maillageComplet = RegroupeSainEtDefaut(maillageSain, meshBoiteDefaut,
-                                         None, None, 'COMPLET', normfiss)
-
-  logging.info("conversion quadratique")
-  maillageComplet.ConvertToQuadratic( 1 )
-  logging.info("groupes")
-  groups = maillageComplet.GetGroups()
-  grps = [ grp for grp in groups if grp.GetName() == 'FONDFISS']
-  fond = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FONDFISS' )
-
-  logging.info("réorientation face de fissure FACE1")
-  grps = [ grp for grp in groups if grp.GetName() == 'FACE1']
-  nb = maillageComplet.Reorient2D( grps[0], normfiss, grps[0].GetID(1))
-
-  logging.info("réorientation face de fissure FACE2")
-  plansim = geompy.MakePlane(O, normfiss, 10000)
-  fissnorm = geompy.MakeMirrorByPlane(normfiss, plansim)
-  grps = [ grp for grp in groups if grp.GetName() == 'FACE2']
-  nb = maillageComplet.Reorient2D( grps[0], fissnorm, grps[0].GetID(1))
-  fond = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FACE2' )
-
-  logging.info("export maillage fini")
-  maillageComplet.ExportMED(fichierMaillageFissure)
-  putName(maillageComplet, nomFicFissure)
-  logging.info("fichier maillage fissure %s", fichierMaillageFissure)
-
-  if salome.sg.hasDesktop():
-    salome.sg.updateObjBrowser()
-
-  logging.info("maillage fissure fini")
-  
-  return maillageComplet
index f324bfebfec05b4fffb878998d2f5c70d073ab86..a078f1bef188196fa386643ac0ea359dd7cf1647 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Procédure complète de construction d'une fissure longue"""
+
+import os
 
 import logging
+
 import salome
-from .geomsmesh import geompy
+
 from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
+
 from . import initLog
-from .geomsmesh import smesh
-from salome.smesh import smeshBuilder
-import SMESH
-import math
 
-from .extractionOrientee import extractionOrientee
-from .sortFaces import sortFaces
-from .sortEdges import sortEdges
-from .eliminateDoubles import eliminateDoubles
-from .substractSubShapes import substractSubShapes
-from .produitMixte import produitMixte
-from .findWireEndVertices import findWireEndVertices
-from .getSubshapeIds import getSubshapeIds
-from .putName import putName
-from .distance2 import distance2
-from .enleveDefaut import enleveDefaut
-from .shapeSurFissure import shapeSurFissure
-from .regroupeSainEtDefaut import RegroupeSainEtDefaut
-from .triedreBase import triedreBase
+from .insereFissureLongue_a import insereFissureLongue_a
+from .insereFissureLongue_b import insereFissureLongue_b
+from .insereFissureLongue_c import insereFissureLongue_c
+from .insereFissureLongue_d import insereFissureLongue_d
+from .insereFissureLongue_e import insereFissureLongue_e
+from .insereFissureLongue_f import insereFissureLongue_f
+from .insereFissureLongue_g import insereFissureLongue_g
 
 # -----------------------------------------------------------------------------
-# --- procedure complete fissure longue
 
-def insereFissureLongue(geometriesSaines, maillagesSains,
-                        shapesFissure, shapeFissureParams,
-                        maillageFissureParams, elementsDefaut, step=-1):
-  """
-  TODO: a completer
-  """
+def insereFissureLongue(shapesFissure, shapeFissureParams, \
+                        maillageFissureParams, elementsDefaut, \
+                        mailleur="MeshGems", nro_cas=None):
+  """Procédure complète de construction d'une fissure longue"""
   logging.info('start')
+  logging.info("Usage du mailleur %s pour le cas n°%s", mailleur, nro_cas)
 
-  #geometrieSaine    = geometriesSaines[0]
-  #maillageSain      = maillagesSains[0]
-  #isHexa            = maillagesSains[1]
   shapeDefaut       = shapesFissure[0] # face de fissure, debordant
   #tailleDefaut      = shapesFissure[2]
   wiretube          = shapesFissure[4] # wire fond de fissure, debordant
@@ -79,8 +67,8 @@ def insereFissureLongue(geometriesSaines, maillagesSains,
   #nbsegFis          = maillageFissureParams['nbsegFis']      # 20
   #lensegEllipsoide  = maillageFissureParams['lensegEllipso'] # 1.0
 
-  #fichierMaillageSain = nomRep + '/' + nomFicSain + '.med'
-  fichierMaillageFissure = nomRep + '/' + nomFicFissure + '.med'
+  #fichierMaillageSain = os.path.join(nomRep, '{}.med'.format(nomFicSain))
+  fichierMaillageFissure = os.path.join(nomRep, '{}.med'.format(nomFicFissure))
 
   facesDefaut              = elementsDefaut[0]
   #centreDefaut             = elementsDefaut[1]
@@ -102,576 +90,71 @@ def insereFissureLongue(geometriesSaines, maillagesSains,
   fillingFaceExterne = facesDefaut[0]
   logging.debug("fillingFaceExterne %s", fillingFaceExterne)
   geomPublish(initLog.debug, fillingFaceExterne, "fillingFaceExterne")
-  edgesFilling = geompy.ExtractShapes(fillingFaceExterne, geompy.ShapeType["EDGE"], False)
 
-  O, OX, OY, OZ = triedreBase()
-  
   # -----------------------------------------------------------------------------
   # --- peau et face de fissure
-
-  # --- partition peau defaut - face de fissure prolongee - wire de fond de fissure prolongée
-  partitionPeauFissFond = geompy.MakePartition([facePorteFissure, WirePorteFondFissure, fillingFaceExterne], [], [], [], geompy.ShapeType["FACE"], 0, [], 0)
-  geomPublish(initLog.debug,  partitionPeauFissFond, 'partitionPeauFissFond' )
-
-  edges = geompy.ExtractShapes(WirePorteFondFissure, geompy.ShapeType["EDGE"], False)
-
-  lgmax = 0
-  imax = 0
-  for i, edge in enumerate(edges):
-    props = geompy.BasicProperties(edge)
-    lg = props[0]
-    if lg > lgmax:
-      lgmax = lg
-      imax = i
-  edgemax = edges[imax]
-  geomPublish(initLog.debug, edgemax, 'edgemax')
-  centreFondFiss = geompy.MakeVertexOnCurve(edgemax, 0.5)
-  geomPublish(initLog.debug, centreFondFiss, 'centreFondFiss')
-  tangentFondFiss = geompy.MakeTangentOnCurve(edgemax, 0.5)
-  geomPublish(initLog.debug, tangentFondFiss, 'tangentFondFiss')
-
-  bord1FondFiss = geompy.MakeVertexOnCurve(edgemax, 0.0)
-  geomPublish(initLog.debug, bord1FondFiss, 'bord1FondFiss')
-  tangentBord1FondFiss = geompy.MakeTangentOnCurve(edgemax, 0.0)
-  geomPublish(initLog.debug, tangentBord1FondFiss, 'tangentBord1FondFiss')
-
-  bord2FondFiss = geompy.MakeVertexOnCurve(edgemax, 1.0)
-  geomPublish(initLog.debug, bord2FondFiss, 'bord2FondFiss')
-  tangentBord2FondFiss = geompy.MakeTangentOnCurve(edgemax, 1.0)
-  geomPublish(initLog.debug, tangentBord2FondFiss, 'tangentBord2FondFiss')
-
-  planBord1 = geompy.MakePlane(bord1FondFiss, tangentBord1FondFiss, 3*rayonPipe)
-  planBord2 = geompy.MakePlane(bord2FondFiss, tangentBord2FondFiss, 3*rayonPipe)
-  geomPublish(initLog.debug, planBord1, 'planBord1')
-  geomPublish(initLog.debug, planBord2, 'planBord2')
-
-  [edgesInside, edgesOutside, edgesOnside] = extractionOrientee(fillingFaceExterne, partitionPeauFissFond, centreFondFiss, "EDGE", 1.e-3)
-  [facesInside, facesOutside, facesOnside] = extractionOrientee(fillingFaceExterne, partitionPeauFissFond, centreFondFiss, "FACE", 1.e-3)
-
-  # --- partition peau -face fissure - pipe fond de fissure prolongé
-  partitionPeauFissByPipe = geompy.MakePartition([facesInside[0], facesOnside[0]], [pipefiss], [], [], geompy.ShapeType["FACE"], 0, [], 0)
-  geomPublish(initLog.debug,  partitionPeauFissByPipe, 'partitionPeauFissByPipe' )
-
-  # --- identification face de peau
-  [facesPeauFissInside, facesPeauFissOutside, facesPeauFissOnside] = extractionOrientee(fillingFaceExterne, partitionPeauFissByPipe, centreFondFiss, "FACE", 0.1, "peauFiss_bord_")
-  facesPeauSorted, minsur, maxsurf = sortFaces(facesPeauFissOnside) # 4 demi disques, une grande face
-  facePeau = facesPeauSorted[-1] # la plus grande face
-  geomPublishInFather(initLog.debug,partitionPeauFissByPipe, facePeau, "facePeau")
-
-  # --- identification edges de bord face peau
-  edgesBords = []
-  for i, edge in enumerate(edgesFilling):
-    edgepeau = geompy.GetInPlace(facePeau, edge)
-    edgesBords.append(edgepeau)
-  groupEdgesBordPeau = geompy.CreateGroup(facePeau, geompy.ShapeType["EDGE"])
-  geompy.UnionList(groupEdgesBordPeau, edgesBords)
-  geomPublishInFather(initLog.debug,facePeau, groupEdgesBordPeau , "EdgesBords")
-
-  # --- identification face fissure externe au pipe et edge commune peau fissure
-  for face in facesPeauFissInside:
-    try:
-      sharedEdges = geompy.GetSharedShapesMulti([facePeau, face], geompy.ShapeType["EDGE"])
-      if sharedEdges is not None:
-        faceFiss = face
-        edgePeauFiss = sharedEdges[0]
-        geomPublishInFather(initLog.debug,partitionPeauFissByPipe, faceFiss, "faceFiss")
-        geomPublishInFather(initLog.debug,faceFiss, edgePeauFiss, "edgePeauFiss")
-        geomPublishInFather(initLog.debug,facePeau, edgePeauFiss, "edgePeauFiss")
-        break
-    except:
-      pass
-  verticesEdgePeauFiss = geompy.ExtractShapes(edgePeauFiss, geompy.ShapeType["VERTEX"], False)
-
-  # --- identification edges demi cercle dans face de peau
-  edgesFacePeau = geompy.ExtractShapes(facePeau, geompy.ShapeType["EDGE"], False)
-  edgesFacePeauSorted, minlg, maxlg = sortEdges(edgesFacePeau)
-  demiCerclesPeau = edgesFacePeauSorted[0:4]
-  verticesDemiCerclesPeau = []
-  for i, edge in enumerate(demiCerclesPeau):
-    name = "demiCerclePeau_%d"%i
-    geomPublishInFather(initLog.debug,facePeau, edge, name)
-    verticesDemiCerclesPeau += geompy.ExtractShapes(edge, geompy.ShapeType["VERTEX"], False)
-  verticesDemiCerclesPeau = eliminateDoubles(facePeau, verticesDemiCerclesPeau)
-  for i, vertex in enumerate(verticesDemiCerclesPeau):
-    name = "verticesDemiCerclesPeau_%d"%i
-    geomPublishInFather(initLog.debug,facePeau, vertex, name)
-  verticesOutCercles = substractSubShapes(facePeau, verticesDemiCerclesPeau, verticesEdgePeauFiss)
-  for i, vertex in enumerate(verticesOutCercles):
-    name = "verticesOutCercles_%d"%i
-    geomPublishInFather(initLog.debug,facePeau, vertex, name)
-
-  # --- demi cercles  regroupés
-  groupsDemiCerclesPeau = []
-  for i, vertex in enumerate(verticesEdgePeauFiss):
-    demis = []
-    for edge in demiCerclesPeau:
-      if geompy.MinDistance(vertex, edge) < 1.e-5:
-        demis.append(edge)
-    group = geompy.CreateGroup(facePeau, geompy.ShapeType["EDGE"])
-    geompy.UnionList(group, demis)
-    name = "Cercle%d"%i
-    geomPublishInFather(initLog.debug,facePeau, group , name)
-    groupsDemiCerclesPeau.append(group)
-
-  # --- identification edges commune pipe face fissure externe au pipe
-  edgePeauFissId = geompy.GetSubShapeID(partitionPeauFissByPipe, edgePeauFiss)
-  edgesFaceFiss = geompy.ExtractShapes(faceFiss, geompy.ShapeType["EDGE"], False)
-  edgesFaceFissPipe = []
-  for edge in edgesFaceFiss:
-    if geompy.GetSubShapeID(partitionPeauFissByPipe, edge) != edgePeauFissId:
-      edgesFaceFissPipe.append(edge)
-      name = "edgeFaceFissPipe_%d"%len(edgesFaceFissPipe)
-      geomPublishInFather(initLog.debug,faceFiss, edge, name)
-  groupEdgesFaceFissPipe = geompy.CreateGroup(faceFiss, geompy.ShapeType["EDGE"])
-  geompy.UnionList(groupEdgesFaceFissPipe, edgesFaceFissPipe)
-  geomPublishInFather(initLog.debug,faceFiss, groupEdgesFaceFissPipe, "edgesFaceFissPipe")
-
+  edgesInside, centreFondFiss, tangentFondFiss, \
+    planBord1, planBord2 , \
+    facePeau, faceFiss, verticesOutCercles, verticesEdgePeauFiss, \
+    edgePeauFiss, demiCerclesPeau, \
+    groupEdgesBordPeau, groupsDemiCerclesPeau, groupEdgesFaceFissPipe = \
+             insereFissureLongue_a (facePorteFissure, WirePorteFondFissure, \
+                                    fillingFaceExterne, \
+                                    pipefiss, rayonPipe, \
+                                    mailleur, nro_cas )
   # -----------------------------------------------------------------------------
   # --- pipe de fond de fissure
-
-  wireFondFiss = geompy.MakeWire(edgesInside, 1e-07)
-
-  disque = geompy.MakeDiskPntVecR(centreFondFiss, tangentFondFiss, rayonPipe)
-  [vertex] = geompy.ExtractShapes(disque, geompy.ShapeType["VERTEX"], False)
-  vertproj = geompy.MakeProjection(vertex, planfiss)
-  vec1 = geompy.MakeVector(centreFondFiss, vertex)
-  try:
-    # si centreFondFiss et vertproj sont proches: exception. Angle = +- 90°
-    vec2 = geompy.MakeVector(centreFondFiss, vertproj)
-    angle = geompy.GetAngleRadians(vec1, vec2)
-  except:
-    # on utilise la projection du centre sur la peau pour avoir un vecteur non nul
-    vertproj = geompy.MakeProjection(centreFondFiss, facePeau)
-    vec2 = geompy.MakeVector(centreFondFiss, vertproj)
-    angle = geompy.GetAngleRadians(vec1, vec2)
-  sommetAxe = geompy.MakeTranslationVector(centreFondFiss, tangentFondFiss)
-  pm = produitMixte(centreFondFiss, vertex, vertproj, sommetAxe)
-  if pm > 0:
-    disque = geompy.MakeRotation(disque, tangentFondFiss, angle)
-  else:
-    disque = geompy.MakeRotation(disque, tangentFondFiss, -angle)
-  [vertexReference] = geompy.ExtractShapes(disque, geompy.ShapeType["VERTEX"], False)
-
-  pipeFondFiss = geompy.MakePipe(disque, wireFondFiss)
-  pipeFondFiss = geompy.MakePartition([pipeFondFiss], [planfiss, wireFondFiss, planBord1, planBord2], [], [], geompy.ShapeType["SOLID"], 0, [], 0)
-  #pipe = geompy.MakePipe(disque, WirePorteFondFissure)
-  #pipe = geompy.MakePartition([pipe],[fillingFaceExterne], [], [], geompy.ShapeType["SOLID"], 0, [], 0)
-  #pipes = geompy.ExtractShapes(pipe, geompy.ShapeType["SOLID"], False)
-  #pipesSorted, volmin, volmax = sortSolids(pipes)
-  #pipeFondFiss = pipesSorted[-1]
-  #pipeFondFiss = geompy.MakePartition([pipeFondFiss], [planfiss, wireFondFiss, planBord1, planBord2], [], [], geompy.ShapeType["SOLID"], 0, [], 0)
-
-  geomPublish(initLog.debug,  disque, 'disque')
-  geomPublish(initLog.debug,  wireFondFiss, 'wireFondFiss')
-  geomPublish(initLog.debug,  pipeFondFiss, 'pipeFondFiss')
-
-  VerticesEndFondFiss = findWireEndVertices(wireFondFiss)
-  for i, v in enumerate(VerticesEndFondFiss):
-    name = "vertexEndFondFiss_%d"%i
-    geomPublishInFather(initLog.debug,wireFondFiss, v, name)
-  VerticesEndPipeFiss = []
-  for v in VerticesEndFondFiss:
-    VerticesEndPipeFiss.append(geompy.GetInPlace(pipeFondFiss, v))
-  for i, v in enumerate(VerticesEndPipeFiss):
-    name = "vertexEndPipeFiss_%d"%i
-    geomPublishInFather(initLog.debug,pipeFondFiss, v, name)
-
-  geomPublishInFather(initLog.debug,pipeFondFiss, VerticesEndPipeFiss[0], "PFOR")
-  geomPublishInFather(initLog.debug,pipeFondFiss, VerticesEndPipeFiss[1], "PFEX")
-  if geompy.MinDistance(VerticesEndPipeFiss[0], verticesOutCercles[0]) > geompy.MinDistance(VerticesEndPipeFiss[0], verticesOutCercles[1]):
-    a = verticesOutCercles[0]
-    verticesOutCercles[0] = verticesOutCercles[1]
-    verticesOutCercles[1] = a
-  geomPublishInFather(initLog.debug,facePeau, verticesOutCercles[0], "THOR")
-  geomPublishInFather(initLog.debug,facePeau, verticesOutCercles[1], "THEX")
-
-  [facesPipeInside, facesPipeOutside, facesPipeOnside] = extractionOrientee(fillingFaceExterne, pipeFondFiss, centreFondFiss, "FACE", 0.1, "pipe_bord_")
-  [edgesPipeInside, edgesPipeOutside, edgesPipeOnside] = extractionOrientee(fillingFaceExterne, pipeFondFiss, centreFondFiss, "EDGE", 0.1, "pipe_bord_")
-  disqueInt1 = geompy.GetInPlaceByHistory(pipeFondFiss, planBord1)
-  disqueInt2 = geompy.GetInPlaceByHistory(pipeFondFiss, planBord2)
-  disques = facesPipeOnside + [disqueInt1, disqueInt2]
-  edgesDiskInt = geompy.ExtractShapes(disqueInt1, geompy.ShapeType["EDGE"], False)
-  edgesDiskInt = edgesDiskInt +geompy.ExtractShapes(disqueInt2, geompy.ShapeType["EDGE"], False)
-  edgesSorted, minlg, maxlg = sortEdges(edgesDiskInt) # 4 rayons, 2 demi cercles
-
-  centre = geompy.MakeVertexOnSurface(planfiss, 0.5, 0.5)
-  refpoint = geompy.MakeTranslationVector(centre, geompy.GetNormal(planfiss,centre))
-  geomPublish(initLog.debug, refpoint, 'refpoint')
-  [facesPipeInplan, facesPipeOutplan, facesPipeOnplan] = extractionOrientee(planfiss, pipeFondFiss, refpoint, "FACE", 0.1, "pipe_plan_")
-  [edgesPipeInplan, edgesPipeOutplan, edgesPipeOnplan] = extractionOrientee(planfiss, pipeFondFiss, refpoint, "EDGE", 0.1, "pipe_plan_")
-
-  # --- rayon disques = (edgesPipeOnside inter edgesPipeOnplan) + rayons disque internes
-  #     demi cercles  = edgesPipeOnside moins edgesPipeOnplan + demi cercles disque internes
-  #     generatrices  = edgesPipeOnplan moins rayon disques (3 grandes et 6 petites)
-  edgesIdPipeOnside = getSubshapeIds(pipeFondFiss, edgesPipeOnside)
-  edgesIdPipeOnplan = getSubshapeIds(pipeFondFiss, edgesPipeOnplan)
-  rayons = []
-  demiCercles = []
-  for i, edgeId in enumerate(edgesIdPipeOnside):
-    if edgeId in edgesIdPipeOnplan:
-      rayons.append(edgesPipeOnside[i])
-    else:
-      demiCercles.append(edgesPipeOnside[i])
-  demiCerclesExternes = demiCercles
-  rayons = rayons + edgesSorted[:4]            # les 4 plus petits sont les rayons
-  demiCercles = demiCercles  + edgesSorted[4:] # les suivants sont les arcs de cercle
-  rayonsId = getSubshapeIds(pipeFondFiss, rayons)
-  generatrices = []
-  for i, edgeId in enumerate(edgesIdPipeOnplan):
-    if edgeId not in rayonsId:
-      generatrices.append(edgesPipeOnplan[i])
-
-  # --- generatrices en contact avec la face fissure externe au pipe
-  generFiss = []
-  for edge in generatrices:
-    distance = geompy.MinDistance(vertexReference, edge)
-    logging.debug("distance %s", distance)
-    if distance < 1.e-5:
-      generFiss.append(edge)
-      break
-  for edge in generatrices:
-    distance = geompy.MinDistance(generFiss[0], edge)
-    logging.debug("distance %s", distance)
-    if distance < 1.e-5:
-      generFiss.append(edge)
-  groupGenerFiss = geompy.CreateGroup(pipeFondFiss, geompy.ShapeType["EDGE"])
-  geompy.UnionList(groupGenerFiss, generFiss)
-  geomPublishInFather(initLog.debug,pipeFondFiss, groupGenerFiss, "GenFiss")
-
-  # --- demi cercles externes regroupés
-  groupsDemiCerclesPipe = []
-  for i, vertex in enumerate(verticesEdgePeauFiss):
-    demis = []
-    for edge in demiCerclesExternes:
-      if geompy.MinDistance(vertex, edge) < 0.1:
-        demis.append(edge)
-    group = geompy.CreateGroup(pipeFondFiss, geompy.ShapeType["EDGE"])
-    geompy.UnionList(group, demis)
-    name = "Cercle%d"%i
-    geomPublishInFather(initLog.debug,pipeFondFiss, group , name)
-    groupsDemiCerclesPipe.append(group)
-
-  # --- faces fissure dans le pipe
-
-  facesFissinPipe = []
-  generFissId = getSubshapeIds(pipeFondFiss, generFiss)
-  logging.debug("generatrice fissure %s", generFissId)
-  for face in facesPipeOnplan:
-    edges =geompy.ExtractShapes(face, geompy.ShapeType["EDGE"], False)
-    edgesId = getSubshapeIds(pipeFondFiss, edges)
-    logging.debug("  edges %s", edgesId)
-    for i,edgeId in enumerate(edgesId):
-      if edgeId in generFissId:
-        logging.debug("face found")
-        facesFissinPipe.append(face)
-        name = "faceFissInPipe_%d"%i
-        geomPublishInFather(initLog.debug,pipeFondFiss, face, name)
-        break
-  groupFaceFissInPipe = geompy.CreateGroup(pipeFondFiss, geompy.ShapeType["FACE"])
-  geompy.UnionList(groupFaceFissInPipe, facesFissinPipe)
-  name = "FaceFissInPipe"
-  geomPublishInFather(initLog.debug,pipeFondFiss, groupFaceFissInPipe , name)
-
-  # --- edges de fond de fissure
-
-  edgesFondFiss = []
-  for i, edge in enumerate(edgesInside):
-    anEdge = geompy.GetInPlace(pipeFondFiss, edge)
-    logging.debug("  edge %s ", anEdge)
-    edgesFondFiss.append(anEdge)
-    name ="edgeFondFissure_%d"%i
-    geomPublishInFather(initLog.debug,pipeFondFiss, anEdge, name)
-  groupEdgeFondFiss = geompy.CreateGroup(pipeFondFiss, geompy.ShapeType["EDGE"])
-  geompy.UnionList(groupEdgeFondFiss, edgesFondFiss)
-  name = "FONDFISS"
-  geomPublishInFather(initLog.debug,pipeFondFiss, groupEdgeFondFiss , name)
-
-  # -------------------------------------------------------------------------
-  # --- maillage
-
-  # --- edges de bord face defaut à respecter
-
-  aFilterManager = smesh.CreateFilterManager()
-  nbAdded, internalBoundary, _NoneGroup = internalBoundary.MakeBoundaryElements( SMESH.BND_1DFROM2D, '', '', 0, [  ])
-  criteres = []
-  unCritere = smesh.GetCriterion(SMESH.EDGE,SMESH.FT_FreeBorders,SMESH.FT_Undefined,0)
-  criteres.append(unCritere)
-  filtre = smesh.GetFilterFromCriteria(criteres)
-  bordsLibres = internalBoundary.MakeGroupByFilter( 'bords', filtre )
-  smesh.SetName(bordsLibres, 'bordsLibres')
-
-  # --- pour aider l'algo hexa-tetra a ne pas mettre de pyramides a l'exterieur des volumes replies sur eux-memes
-  #     on designe les faces de peau en quadrangles par le groupe "skinFaces"
-
-  skinFaces = internalBoundary.CreateEmptyGroup( SMESH.FACE, 'skinFaces' )
-  nbAdd = skinFaces.AddFrom( internalBoundary.GetMesh() )
+  pipeFondFiss, disques, rayons, \
+    demiCercles, generatrices, \
+    VerticesEndPipeFiss, bordsLibres, \
+    groupFaceFissInPipe, groupEdgeFondFiss, groupsDemiCerclesPipe, groupGenerFiss = \
+            insereFissureLongue_b (edgesInside, centreFondFiss, tangentFondFiss, \
+                                    planfiss, planBord1, planBord2, \
+                                    facePeau, verticesOutCercles, verticesEdgePeauFiss, \
+                                    fillingFaceExterne, rayonPipe, \
+                                    internalBoundary, \
+                                    nro_cas)
 
   # --- maillage pipe fond fissure
 
-  meshFondFiss = smesh.Mesh(pipeFondFiss)
-  algo2d = meshFondFiss.Quadrangle(algo=smeshBuilder.QUADRANGLE)
-  algo3d = meshFondFiss.Prism()
-  putName(algo3d.GetSubMesh(), "pipe")
-  putName(algo3d, "algo3d_pipe")
-  putName(algo2d, "algo2d_pipe")
-
-  for i, face in enumerate(disques):
-    algo2d = meshFondFiss.Quadrangle(algo=smeshBuilder.RADIAL_QUAD,geom=face)
-    putName(algo2d.GetSubMesh(), "disque", i)
-    putName(algo2d, "algo2d_disque", i)
-
-  for i, edge in enumerate(rayons):
-    algo1d = meshFondFiss.Segment(geom=edge)
-    hypo1d = algo1d.NumberOfSegments(4)
-    putName(algo1d.GetSubMesh(), "rayon", i)
-    putName(algo1d, "algo1d_rayon", i)
-    putName(hypo1d, "hypo1d_rayon", i)
-
-  for i, edge in enumerate(demiCercles):
-    algo1d = meshFondFiss.Segment(geom=edge)
-    hypo1d = algo1d.NumberOfSegments(6)
-    putName(algo1d.GetSubMesh(), "demiCercle", i)
-    putName(algo1d, "algo1d_demiCercle", i)
-    putName(hypo1d, "hypo1d_demiCercle", i)
-
-  generSorted, minlg, maxlg = sortEdges(generatrices)
-  nbSegGenLong = int(math.sqrt(3.0)*maxlg/(profondeur - rayonPipe)) # on veut 2 triangles equilateraux dans la largeur de la face
-  nbSegGenBout = 6
-  logging.info("min %s, max %s, nombre de segments %s, nombre de generatrices %s", minlg, maxlg, nbSegGenLong, len(generSorted))
-  for i, edge in enumerate(generSorted):
-    algo1d = meshFondFiss.Segment(geom=edge)
-    if i < 6:
-      hypo1d = algo1d.NumberOfSegments(nbSegGenBout)
-    else:
-      hypo1d = algo1d.NumberOfSegments(nbSegGenLong)
-    putName(algo1d.GetSubMesh(), "generatrice", i)
-    putName(algo1d, "algo1d_generatrice", i)
-    putName(hypo1d, "hypo1d_generatrice", i)
-  isDone = meshFondFiss.Compute()
-  logging.info("meshFondFiss computed")
-
-  disks = []
-  for i, face in enumerate(disques[:4]):
-    name = "disk%d"%i
-    disks.append(meshFondFiss.GroupOnGeom(face, name, SMESH.FACE))
-  peauext_pipe = meshFondFiss.GetMesh().UnionListOfGroups( disks, 'PEAUEXT' )
-
-  grpPFOR = meshFondFiss.GroupOnGeom(VerticesEndPipeFiss[0], "PFOR", SMESH.NODE)
-  grpPFEX = meshFondFiss.GroupOnGeom(VerticesEndPipeFiss[1], "PFEX", SMESH.NODE)
-
-  grp = meshFondFiss.GroupOnGeom(groupFaceFissInPipe, "fisInPi", SMESH.FACE)
-  group_edgeFondFiss = meshFondFiss.GroupOnGeom(groupEdgeFondFiss, "FONDFISS", SMESH.EDGE)
-  noeudsFondFissure = meshFondFiss.GroupOnGeom(groupEdgeFondFiss, "nfondfis", SMESH.NODE)
-  groups_demiCercles = []
-  groupnodes_demiCercles = []
-  for i, group in enumerate(groupsDemiCerclesPipe):
-    name = "Cercle%d"%i
-    groups_demiCercles.append(meshFondFiss.GroupOnGeom(group, name, SMESH.EDGE))
-    name = "nCercle%d"%i
-    groupnodes_demiCercles.append(meshFondFiss.GroupOnGeom(group, name, SMESH.NODE))
-  group_generFiss = meshFondFiss.GroupOnGeom(groupGenerFiss, "GenFiss", SMESH.EDGE)
-  groupnode_generFiss = meshFondFiss.GroupOnGeom(groupGenerFiss, "GenFiss", SMESH.NODE)
-  grpNode0 = meshFondFiss.IntersectGroups(groupnode_generFiss, groupnodes_demiCercles[0], "Node0")
-  grpNode1 = meshFondFiss.IntersectGroups(groupnode_generFiss, groupnodes_demiCercles[1], "Node1")
-  idNode0 = grpNode0.GetID(1)
-  idNode1 = grpNode1.GetID(1)
-  coordsMesh = []
-  coordsMesh.append(meshFondFiss.GetNodeXYZ(idNode0))
-  coordsMesh.append(meshFondFiss.GetNodeXYZ(idNode1))
-  coordsGeom = []
-  for vertex in verticesEdgePeauFiss:
-    coord = geompy.PointCoordinates(vertex);
-    if distance2(coord, coordsMesh[0]) < 0.1:
-      meshFondFiss.MoveNode(idNode0, coord[0], coord[1], coord[2])
-    if distance2(coord, coordsMesh[1]) < 0.1:
-      meshFondFiss.MoveNode(idNode1, coord[0], coord[1], coord[2])
-
-  for groupNodes in groupnodes_demiCercles:
-    for idNode in groupNodes.GetListOfID():
-      coordMesh = meshFondFiss.GetNodeXYZ(idNode)
-      vertex = geompy.MakeVertex(coordMesh[0], coordMesh[1], coordMesh[2])
-      minDist = 100000
-      minCoord = None
-      imin = -1
-      for i, edge in enumerate(demiCerclesPeau):
-        discoord = geompy.MinDistanceComponents(vertex, edge)
-        if discoord[0] <minDist:
-          minDist = discoord[0]
-          minCoord = discoord[1:]
-          imin = i
-      if imin >= 0 and minDist > 1.E-6:
-        logging.debug("node id moved : %s distance=%s", idNode, minDist)
-        meshFondFiss.MoveNode(idNode, coordMesh[0] + minCoord[0], coordMesh[1] + minCoord[1], coordMesh[2] + minCoord[2])
-
+  meshFondFiss, groups_demiCercles, group_generFiss, nbSegGenLong, nbSegGenBout = \
+            insereFissureLongue_c (pipeFondFiss, disques, rayons, demiCercles, demiCerclesPeau, generatrices, \
+            VerticesEndPipeFiss, verticesEdgePeauFiss, \
+            groupFaceFissInPipe, groupEdgeFondFiss, groupsDemiCerclesPipe, groupGenerFiss, \
+            profondeur, rayonPipe, \
+            nro_cas)
 
   # --- maillage face de peau
 
-  meshFacePeau = smesh.Mesh(facePeau)
-  algo2d = meshFacePeau.Triangle(algo=smeshBuilder.NETGEN_2D)
-  hypo2d = algo2d.Parameters()
-  hypo2d.SetMaxSize( 1000 )
-  hypo2d.SetOptimize( 1 )
-  hypo2d.SetFineness( 2 )
-  hypo2d.SetMinSize( 2 )
-  hypo2d.SetQuadAllowed( 0 )
-  putName(algo2d.GetSubMesh(), "facePeau")
-  putName(algo2d, "algo2d_facePeau")
-  putName(hypo2d, "hypo2d_facePeau")
-  #
-  lenEdgePeauFiss = geompy.BasicProperties(edgePeauFiss)[0]
-  frac = profondeur/lenEdgePeauFiss
-  nbSeg = nbSegGenLong +2*nbSegGenBout
-  ratio = (nbSegGenBout/float(profondeur)) / (nbSegGenLong/lenEdgePeauFiss)
-  logging.info("lenEdgePeauFiss %s, profondeur %s, nbSegGenLong %s, nbSegGenBout %s, frac %s, ratio %s", lenEdgePeauFiss, profondeur, nbSegGenLong, nbSegGenBout, frac, ratio)
-  algo1d = meshFacePeau.Segment(geom=edgePeauFiss)
-  hypo1d = algo1d.NumberOfSegments(nbSeg,[],[  ])
-  hypo1d.SetDistrType( 2 )
-  hypo1d.SetConversionMode( 1 )
-  hypo1d.SetTableFunction( [ 0, ratio, frac, 1, (1.-frac), 1, 1, ratio ] )
-  putName(algo1d.GetSubMesh(), "edgePeauFiss")
-  putName(algo1d, "algo1d_edgePeauFiss")
-  putName(hypo1d, "hypo1d_edgePeauFiss")
-  #
-  algo1d = meshFacePeau.UseExisting1DElements(geom=groupEdgesBordPeau)
-  hypo1d = algo1d.SourceEdges([ bordsLibres ],0,0)
-  putName(algo1d.GetSubMesh(), "bordsLibres")
-  putName(algo1d, "algo1d_bordsLibres")
-  putName(hypo1d, "hypo1d_bordsLibres")
-  #
-  for i in range(2):
-    algo1d = meshFacePeau.UseExisting1DElements(geom=groupsDemiCerclesPeau[i])
-    hypo1d = algo1d.SourceEdges([ groups_demiCercles[i] ],0,0)
-    putName(algo1d.GetSubMesh(), "DemiCercles", i)
-    putName(algo1d, "algo1d_groupDemiCercles", i)
-    putName(hypo1d, "hypo1d_groupDemiCercles", i)
-  #
-  isDone = meshFacePeau.Compute()
-  logging.info("meshFacePeau computed")
-  grpTHOR = meshFacePeau.GroupOnGeom(verticesOutCercles[0], "THOR", SMESH.NODE)
-  grpTHEX = meshFacePeau.GroupOnGeom(verticesOutCercles[1], "THEX", SMESH.NODE)
-
-  groupEdgesPeauFiss = meshFacePeau.GroupOnGeom(edgePeauFiss, "PeauFis", SMESH.EDGE)
-
-  peauext_face = meshFacePeau.CreateEmptyGroup( SMESH.FACE, 'PEAUEXT' )
-  nbAdd = peauext_face.AddFrom( meshFacePeau.GetMesh() )
-
+  meshFacePeau, groupEdgesPeauFiss = \
+            insereFissureLongue_d ( facePeau, edgePeauFiss, groupEdgesBordPeau, bordsLibres, \
+                                    groupsDemiCerclesPeau, groups_demiCercles, verticesOutCercles, \
+                                    nbSegGenLong, nbSegGenBout, profondeur, \
+                                    mailleur, nro_cas )
 
   # --- maillage face de fissure
 
-  meshFaceFiss = smesh.Mesh(faceFiss)
-  algo2d = meshFaceFiss.Triangle(algo=smeshBuilder.NETGEN_2D)
-  hypo2d = algo2d.Parameters()
-  hypo2d.SetMaxSize( (profondeur - rayonPipe)/math.sqrt(3.0) ) # pour avoir deux couches de triangles equilateraux partout sur la fissure
-  hypo2d.SetOptimize( 1 )
-  hypo2d.SetFineness( 2 )
-  hypo2d.SetMinSize( 2 )
-  hypo2d.SetQuadAllowed( 0 )
-  putName(algo2d.GetSubMesh(), "faceFiss")
-  putName(algo2d, "algo2d_faceFiss")
-  putName(hypo2d, "hypo2d_faceFiss")
-  #
-  algo1d = meshFaceFiss.UseExisting1DElements(geom=edgePeauFiss)
-  hypo1d = algo1d.SourceEdges([ groupEdgesPeauFiss ],0,0)
-  putName(algo1d.GetSubMesh(), "edgeFissPeau")
-  putName(algo1d, "algo1d_edgeFissPeau")
-  putName(hypo1d, "hypo1d_edgeFissPeau")
-  #
-  algo1d = meshFaceFiss.UseExisting1DElements(geom=groupEdgesFaceFissPipe)
-  hypo1d = algo1d.SourceEdges([ group_generFiss ],0,0)
-  putName(algo1d.GetSubMesh(), "edgeFissPeau")
-  putName(algo1d, "algo1d_edgeFissPeau")
-  putName(hypo1d, "hypo1d_edgeFissPeau")
-  #
-  isDone = meshFaceFiss.Compute()
-  logging.info("meshFaceFiss computed")
-
-  grp = meshFaceFiss.GroupOnGeom(faceFiss, "fisOutPi", SMESH.FACE)
-
-  meshBoiteDefaut = smesh.Concatenate([internalBoundary.GetMesh(),
-                                   meshFondFiss.GetMesh(),
-                                   meshFacePeau.GetMesh(),
-                                   meshFaceFiss.GetMesh()],
-                                   1, 1, 1e-05,False)
-  # pour aider l'algo hexa-tetra a ne pas mettre de pyramides a l'exterieur des volumes replies sur eux-memes
-  # on designe les faces de peau en quadrangles par le groupe "skinFaces"
-  group_faceFissOutPipe = None
-  group_faceFissInPipe = None
-  groups = meshBoiteDefaut.GetGroups()
-  for grp in groups:
-    if grp.GetType() == SMESH.FACE:
-      #if "internalBoundary" in grp.GetName():
-      #  grp.SetName("skinFaces")
-      if grp.GetName() == "fisOutPi":
-        group_faceFissOutPipe = grp
-      elif grp.GetName() == "fisInPi":
-        group_faceFissInPipe = grp
-
-  # le maillage NETGEN ne passe pas toujours ==> utiliser GHS3D
-  distene=True
-  if distene:
-    algo3d = meshBoiteDefaut.Tetrahedron(algo=smeshBuilder.GHS3D)
-  else:
-    algo3d = meshBoiteDefaut.Tetrahedron(algo=smeshBuilder.NETGEN)
-    hypo3d = algo3d.MaxElementVolume(1000.0)
-  putName(algo3d.GetSubMesh(), "boiteDefaut")
-  putName(algo3d, "algo3d_boiteDefaut")
-  isDone = meshBoiteDefaut.Compute()
-  logging.info("meshBoiteDefaut computed")
-  putName(meshBoiteDefaut, "boiteDefaut")
-
-  groups = maillageSain.GetGroups()
-  grps1 = [ grp for grp in groups if grp.GetName() == 'P1']
-  grps2 = [ grp for grp in groups if grp.GetName() == 'P2']
-  coords1 = maillageSain.GetNodeXYZ(grps1[0].GetID(1))
-  coords2 = maillageSain.GetNodeXYZ(grps2[0].GetID(1))
-  logging.info("coords1 %s, coords2 %s",coords1, coords2)
-
-  faceFissure = meshBoiteDefaut.GetMesh().UnionListOfGroups( [ group_faceFissOutPipe, group_faceFissInPipe ], 'FACE1' )
-  maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges)
-  putName(maillageSain, nomFicSain+"_coupe")
-  extrusionFaceFissure, normfiss = shapeSurFissure(facePorteFissure)
-  maillageComplet = RegroupeSainEtDefaut(maillageSain, meshBoiteDefaut, extrusionFaceFissure, facePorteFissure, 'COUDE')
-
-  groups = maillageComplet.GetGroups()
-  grps1 = [ grp for grp in groups if grp.GetName() == 'P1']
-  grps2 = [ grp for grp in groups if grp.GetName() == 'P2']
-  nodeid1 = maillageComplet.AddNode(coords1[0], coords1[1], coords1[2])
-  nodeid2 = maillageComplet.AddNode(coords2[0], coords2[1], coords2[2])
-  grps1[0].Add([nodeid1])
-  grps2[0].Add([nodeid2])
-  ma0d1 = maillageComplet.Add0DElement(nodeid1)
-  ma0d2 = maillageComplet.Add0DElement(nodeid2)
-  grpma0d1 = maillageComplet.CreateEmptyGroup( SMESH.ELEM0D, 'P1' )
-  nbAdd = grpma0d1.Add( [ma0d1] )
-  grpma0d2 = maillageComplet.CreateEmptyGroup( SMESH.ELEM0D, 'P2' )
-  nbAdd = grpma0d2.Add( [ma0d2] )
-
-#  grps = [ grp for grp in groups if grp.GetName() == 'affectedEdges']
-#  grps[0].SetName('affEdges')
-#  grps = [ grp for grp in groups if grp.GetName() == 'affectedFaces']
-#  grps[0].SetName('affFaces')
-#  grps = [ grp for grp in groups if grp.GetName() == 'affectedVolumes']
-#  grps[0].SetName('affVols')
+  meshFaceFiss = \
+            insereFissureLongue_e ( faceFiss, edgePeauFiss, groupEdgesPeauFiss, group_generFiss, groupEdgesFaceFissPipe, \
+                                    profondeur, rayonPipe, \
+                                    mailleur, nro_cas )
 
-  maillageComplet.ConvertToQuadratic( 1 )
-  grps = [ grp for grp in groups if grp.GetName() == 'FONDFISS']
-  fond = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FONDFISS' )
+  # --- maillage meshBoiteDefaut
 
-  grps = [ grp for grp in groups if grp.GetName() == 'FACE1']
-  nb = maillageComplet.Reorient2D( grps[0], normfiss, grps[0].GetID(1))
+  meshBoiteDefaut, group_faceFissInPipe, group_faceFissOutPipe = \
+            insereFissureLongue_f ( internalBoundary, meshFondFiss, meshFacePeau, meshFaceFiss, \
+                                    mailleur, nro_cas )
 
-  plansim = geompy.MakePlane(O, normfiss, 10000)
-  fissnorm = geompy.MakeMirrorByPlane(normfiss, plansim)
-  grps = [ grp for grp in groups if grp.GetName() == 'FACE2']
-  nb = maillageComplet.Reorient2D( grps[0], fissnorm, grps[0].GetID(1))
-  #isDone = maillageComplet.ReorientObject( grps[0] )
-  fond = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FACE2' )
 
-  maillageComplet.ExportMED(fichierMaillageFissure)
-  putName(maillageComplet, nomFicFissure)
-  logging.info("fichier maillage fissure %s", fichierMaillageFissure)
+  # --- maillage complet
+  maillageComplet = \
+            insereFissureLongue_g (nomFicFissure, fichierMaillageFissure, nomFicSain, maillageSain, \
+                          meshBoiteDefaut, facePorteFissure, \
+                          group_faceFissInPipe, group_faceFissOutPipe, \
+                          zoneDefaut, zoneDefaut_skin, zoneDefaut_internalEdges, zoneDefaut_internalFaces, \
+                          nro_cas)
 
   if salome.sg.hasDesktop():
     salome.sg.updateObjBrowser()
 
-  return  maillageComplet
\ No newline at end of file
+  return  maillageComplet
diff --git a/src/Tools/blocFissure/gmu/insereFissureLongue_a.py b/src/Tools/blocFissure/gmu/insereFissureLongue_a.py
new file mode 100644 (file)
index 0000000..09152f4
--- /dev/null
@@ -0,0 +1,172 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""procédure complète de construction d'une fissure longue"""
+
+import logging
+
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+
+from . import initLog
+
+from .extractionOrientee import extractionOrientee
+from .sortFaces import sortFaces
+from .sortEdges import sortEdges
+from .eliminateDoubles import eliminateDoubles
+from .substractSubShapes import substractSubShapes
+
+# -----------------------------------------------------------------------------
+
+def insereFissureLongue_a(facePorteFissure, WirePorteFondFissure, \
+                          fillingFaceExterne, \
+                          pipefiss, rayonPipe, \
+                          mailleur="MeshGems", nro_cas=None):
+  """procedure complete fissure longue"""
+  logging.info('start')
+  logging.info("Usage du mailleur %s", mailleur)
+
+
+  # -----------------------------------------------------------------------------
+  # --- peau et face de fissure
+
+  # --- partition peau defaut - face de fissure prolongee - wire de fond de fissure prolongée
+  partitionPeauFissFond = geompy.MakePartition([facePorteFissure, WirePorteFondFissure, fillingFaceExterne], list(), list(), list(), geompy.ShapeType["FACE"], 0, list(), 0)
+  geomPublish(initLog.debug,  partitionPeauFissFond, 'partitionPeauFissFond', nro_cas )
+
+  edges = geompy.ExtractShapes(WirePorteFondFissure, geompy.ShapeType["EDGE"], False)
+
+  lgmax = 0
+  imax = 0
+  for i_aux, edge in enumerate(edges):
+    props = geompy.BasicProperties(edge)
+    longueur = props[0]
+    if ( longueur > lgmax ):
+      lgmax = longueur
+      imax = i_aux
+  edgemax = edges[imax]
+  geomPublish(initLog.debug, edgemax, 'edgemax', nro_cas)
+  centreFondFiss = geompy.MakeVertexOnCurve(edgemax, 0.5)
+  geomPublish(initLog.debug, centreFondFiss, 'centreFondFiss', nro_cas)
+  tangentFondFiss = geompy.MakeTangentOnCurve(edgemax, 0.5)
+  geomPublish(initLog.debug, tangentFondFiss, 'tangentFondFiss', nro_cas)
+
+  bord1FondFiss = geompy.MakeVertexOnCurve(edgemax, 0.0)
+  geomPublish(initLog.debug, bord1FondFiss, 'bord1FondFiss', nro_cas)
+  tangentBord1FondFiss = geompy.MakeTangentOnCurve(edgemax, 0.0)
+  geomPublish(initLog.debug, tangentBord1FondFiss, 'tangentBord1FondFiss', nro_cas)
+
+  bord2FondFiss = geompy.MakeVertexOnCurve(edgemax, 1.0)
+  geomPublish(initLog.debug, bord2FondFiss, 'bord2FondFiss', nro_cas)
+  tangentBord2FondFiss = geompy.MakeTangentOnCurve(edgemax, 1.0)
+  geomPublish(initLog.debug, tangentBord2FondFiss, 'tangentBord2FondFiss', nro_cas)
+
+  planBord1 = geompy.MakePlane(bord1FondFiss, tangentBord1FondFiss, 3*rayonPipe)
+  planBord2 = geompy.MakePlane(bord2FondFiss, tangentBord2FondFiss, 3*rayonPipe)
+  geomPublish(initLog.debug, planBord1, 'planBord1', nro_cas)
+  geomPublish(initLog.debug, planBord2, 'planBord2', nro_cas)
+
+  [edgesInside, _, _] = extractionOrientee(fillingFaceExterne, partitionPeauFissFond, centreFondFiss, "EDGE", 1.e-3)
+  [facesInside, _, facesOnside] = extractionOrientee(fillingFaceExterne, partitionPeauFissFond, centreFondFiss, "FACE", 1.e-3)
+
+  # --- partition peau -face fissure - pipe fond de fissure prolongé
+  partitionPeauFissByPipe = geompy.MakePartition([facesInside[0], facesOnside[0]], [pipefiss], list(), list(), geompy.ShapeType["FACE"], 0, list(), 0)
+  geomPublish(initLog.always, partitionPeauFissByPipe, 'partitionPeauFissByPipe', nro_cas )
+
+  # --- identification face de peau
+  [facesPeauFissInside, _, facesPeauFissOnside] = extractionOrientee(fillingFaceExterne, partitionPeauFissByPipe, centreFondFiss, "FACE", 0.1, "peauFiss_bord_")
+  facesPeauSorted, _, _ = sortFaces(facesPeauFissOnside) # 4 demi disques, une grande face
+  facePeau = facesPeauSorted[-1] # la plus grande face
+  geomPublishInFather(initLog.always, partitionPeauFissByPipe, facePeau, "facePeau", nro_cas)
+
+  # --- identification edges de bord face peau
+  edgesFilling = geompy.ExtractShapes(fillingFaceExterne, geompy.ShapeType["EDGE"], False)
+  edgesBords = list()
+  for edge in edgesFilling:
+    edgepeau = geompy.GetInPlace(facePeau, edge)
+    edgesBords.append(edgepeau)
+  groupEdgesBordPeau = geompy.CreateGroup(facePeau, geompy.ShapeType["EDGE"])
+  geompy.UnionList(groupEdgesBordPeau, edgesBords)
+  geomPublishInFather(initLog.always, facePeau, groupEdgesBordPeau , "EdgesBords", nro_cas)
+
+  # --- identification face fissure externe au pipe et edge commune peau fissure
+  for face in facesPeauFissInside:
+    try:
+      sharedEdges = geompy.GetSharedShapesMulti([facePeau, face], geompy.ShapeType["EDGE"])
+      if sharedEdges is not None:
+        faceFiss = face
+        edgePeauFiss = sharedEdges[0]
+        geomPublishInFather(initLog.always, partitionPeauFissByPipe, faceFiss, "faceFiss", nro_cas)
+        geomPublishInFather(initLog.always, faceFiss, edgePeauFiss, "edgePeauFiss", nro_cas)
+        geomPublishInFather(initLog.always, facePeau, edgePeauFiss, "edgePeauFiss", nro_cas)
+        break
+    except:
+      pass
+  verticesEdgePeauFiss = geompy.ExtractShapes(edgePeauFiss, geompy.ShapeType["VERTEX"], False)
+
+  # --- identification edges demi cercle dans face de peau
+  edgesFacePeau = geompy.ExtractShapes(facePeau, geompy.ShapeType["EDGE"], False)
+  edgesFacePeauSorted, _, _ = sortEdges(edgesFacePeau)
+  demiCerclesPeau = edgesFacePeauSorted[0:4]
+  verticesDemiCerclesPeau = list()
+  for i_aux, edge in enumerate(demiCerclesPeau):
+    name = "demiCerclePeau_{}".format(i_aux)
+    geomPublishInFather(initLog.debug,facePeau, edge, name, nro_cas)
+    verticesDemiCerclesPeau += geompy.ExtractShapes(edge, geompy.ShapeType["VERTEX"], False)
+  verticesDemiCerclesPeau = eliminateDoubles(facePeau, verticesDemiCerclesPeau)
+  for i_aux, vertex in enumerate(verticesDemiCerclesPeau):
+    name = "verticesDemiCerclesPeau_{}".format(i_aux)
+    geomPublishInFather(initLog.debug,facePeau, vertex, name, nro_cas)
+  verticesOutCercles = substractSubShapes(facePeau, verticesDemiCerclesPeau, verticesEdgePeauFiss)
+  for i_aux, vertex in enumerate(verticesOutCercles):
+    name = "verticesOutCercles_{}".format(i_aux)
+    geomPublishInFather(initLog.debug,facePeau, vertex, name, nro_cas)
+
+  # --- demi cercles  regroupés
+  groupsDemiCerclesPeau = list()
+  for i_aux, vertex in enumerate(verticesEdgePeauFiss):
+    demis = list()
+    for edge in demiCerclesPeau:
+      if ( geompy.MinDistance(vertex, edge) < 1.e-5 ):
+        demis.append(edge)
+    group = geompy.CreateGroup(facePeau, geompy.ShapeType["EDGE"])
+    geompy.UnionList(group, demis)
+    name = "Cercle{}".format(i_aux)
+    geomPublishInFather(initLog.always,facePeau, group , name, nro_cas)
+    groupsDemiCerclesPeau.append(group)
+
+  # --- identification edges commune pipe face fissure externe au pipe
+  edgePeauFissId = geompy.GetSubShapeID(partitionPeauFissByPipe, edgePeauFiss)
+  edgesFaceFiss = geompy.ExtractShapes(faceFiss, geompy.ShapeType["EDGE"], False)
+  edgesFaceFissPipe = list()
+  for edge in edgesFaceFiss:
+    if geompy.GetSubShapeID(partitionPeauFissByPipe, edge) != edgePeauFissId:
+      edgesFaceFissPipe.append(edge)
+      name = "edgeFaceFissPipe_%d"%len(edgesFaceFissPipe)
+      geomPublishInFather(initLog.debug,faceFiss, edge, name, nro_cas)
+  groupEdgesFaceFissPipe = geompy.CreateGroup(faceFiss, geompy.ShapeType["EDGE"])
+  geompy.UnionList(groupEdgesFaceFissPipe, edgesFaceFissPipe)
+  geomPublishInFather(initLog.debug,faceFiss, groupEdgesFaceFissPipe, "edgesFaceFissPipe", nro_cas)
+
+  return edgesInside, centreFondFiss, tangentFondFiss, \
+          planBord1, planBord2, \
+          facePeau, faceFiss, verticesOutCercles, verticesEdgePeauFiss, \
+          edgePeauFiss, demiCerclesPeau, \
+          groupEdgesBordPeau, groupsDemiCerclesPeau, groupEdgesFaceFissPipe
diff --git a/src/Tools/blocFissure/gmu/insereFissureLongue_b.py b/src/Tools/blocFissure/gmu/insereFissureLongue_b.py
new file mode 100644 (file)
index 0000000..22698e0
--- /dev/null
@@ -0,0 +1,237 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""procédure complète de construction d'une fissure longue"""
+
+import logging
+
+import SMESH
+
+from .geomsmesh import geompy
+from .geomsmesh import geomPublish
+from .geomsmesh import geomPublishInFather
+from .geomsmesh import smesh
+
+from . import initLog
+
+from .extractionOrientee import extractionOrientee
+from .sortEdges import sortEdges
+from .produitMixte import produitMixte
+from .findWireEndVertices import findWireEndVertices
+from .getSubshapeIds import getSubshapeIds
+from .putName import putName
+
+# -----------------------------------------------------------------------------
+
+def insereFissureLongue_b (edgesInside, centreFondFiss, tangentFondFiss, \
+                           planfiss, planBord1, planBord2, \
+                           facePeau, verticesOutCercles, verticesEdgePeauFiss, \
+                           fillingFaceExterne, rayonPipe, \
+                           internalBoundary, \
+                           nro_cas=None):
+  """procedure complete fissure longue"""
+  logging.info('start')
+  logging.info("Maillage pour le cas n°%s", nro_cas)
+
+  # -----------------------------------------------------------------------------
+  # --- pipe de fond de fissure
+
+  wireFondFiss = geompy.MakeWire(edgesInside, 1e-07)
+
+  disque = geompy.MakeDiskPntVecR(centreFondFiss, tangentFondFiss, rayonPipe)
+  [vertex] = geompy.ExtractShapes(disque, geompy.ShapeType["VERTEX"], False)
+  vertproj = geompy.MakeProjection(vertex, planfiss)
+  vec1 = geompy.MakeVector(centreFondFiss, vertex)
+  try:
+    # si centreFondFiss et vertproj sont proches: exception. Angle = +- 90°
+    vec2 = geompy.MakeVector(centreFondFiss, vertproj)
+    angle = geompy.GetAngleRadians(vec1, vec2)
+  except:
+    # on utilise la projection du centre sur la peau pour avoir un vecteur non nul
+    vertproj = geompy.MakeProjection(centreFondFiss, facePeau)
+    vec2 = geompy.MakeVector(centreFondFiss, vertproj)
+    angle = geompy.GetAngleRadians(vec1, vec2)
+  sommetAxe = geompy.MakeTranslationVector(centreFondFiss, tangentFondFiss)
+  if ( produitMixte(centreFondFiss, vertex, vertproj, sommetAxe) > 0 ):
+    disque = geompy.MakeRotation(disque, tangentFondFiss, angle)
+  else:
+    disque = geompy.MakeRotation(disque, tangentFondFiss, -angle)
+  [vertexReference] = geompy.ExtractShapes(disque, geompy.ShapeType["VERTEX"], False)
+
+  pipeFondFiss = geompy.MakePipe(disque, wireFondFiss)
+  pipeFondFiss = geompy.MakePartition([pipeFondFiss], [planfiss, wireFondFiss, planBord1, planBord2], list(), list(), geompy.ShapeType["SOLID"], 0, list(), 0)
+  #pipe = geompy.MakePipe(disque, WirePorteFondFissure)
+  #pipe = geompy.MakePartition([pipe],[fillingFaceExterne], list(), list(), geompy.ShapeType["SOLID"], 0, list(), 0)
+  #pipes = geompy.ExtractShapes(pipe, geompy.ShapeType["SOLID"], False)
+  #pipesSorted, volmin, volmax = sortSolids(pipes)
+  #pipeFondFiss = pipesSorted[-1]
+  #pipeFondFiss = geompy.MakePartition([pipeFondFiss], [planfiss, wireFondFiss, planBord1, planBord2], list(), list(), geompy.ShapeType["SOLID"], 0, list(), 0)
+
+  geomPublish(initLog.debug,  disque, 'disque')
+  geomPublish(initLog.always,  wireFondFiss, 'wireFondFiss', nro_cas)
+  geomPublish(initLog.always,  pipeFondFiss, 'pipeFondFiss', nro_cas)
+
+  VerticesEndFondFiss, _ = findWireEndVertices(wireFondFiss)
+  for i_aux, vertex in enumerate(VerticesEndFondFiss):
+    name = "vertexEndFondFiss_{}".format(i_aux)
+    geomPublishInFather(initLog.debug,wireFondFiss, vertex, name)
+  VerticesEndPipeFiss = list()
+  for vertex in VerticesEndFondFiss:
+    VerticesEndPipeFiss.append(geompy.GetInPlace(pipeFondFiss, vertex))
+  for i_aux, vertex in enumerate(VerticesEndPipeFiss):
+    name = "vertexEndPipeFiss_{}".format(i_aux)
+    geomPublishInFather(initLog.debug,pipeFondFiss, vertex, name)
+
+  geomPublishInFather(initLog.debug,pipeFondFiss, VerticesEndPipeFiss[0], "PFOR")
+  geomPublishInFather(initLog.debug,pipeFondFiss, VerticesEndPipeFiss[1], "PFEX")
+  if ( geompy.MinDistance(VerticesEndPipeFiss[0], verticesOutCercles[0]) > geompy.MinDistance(VerticesEndPipeFiss[0], verticesOutCercles[1]) ):
+    aux = verticesOutCercles[0]
+    verticesOutCercles[0] = verticesOutCercles[1]
+    verticesOutCercles[1] = aux
+  geomPublishInFather(initLog.debug,facePeau, verticesOutCercles[0], "THOR")
+  geomPublishInFather(initLog.debug,facePeau, verticesOutCercles[1], "THEX")
+
+  [_, _, facesPipeOnside] = extractionOrientee(fillingFaceExterne, pipeFondFiss, centreFondFiss, "FACE", 0.1, "pipe_bord_")
+  [_, _, edgesPipeOnside] = extractionOrientee(fillingFaceExterne, pipeFondFiss, centreFondFiss, "EDGE", 0.1, "pipe_bord_")
+  disqueInt1 = geompy.GetInPlaceByHistory(pipeFondFiss, planBord1)
+  disqueInt2 = geompy.GetInPlaceByHistory(pipeFondFiss, planBord2)
+  disques = facesPipeOnside + [disqueInt1, disqueInt2]
+  edgesDiskInt = geompy.ExtractShapes(disqueInt1, geompy.ShapeType["EDGE"], False)
+  edgesDiskInt = edgesDiskInt +geompy.ExtractShapes(disqueInt2, geompy.ShapeType["EDGE"], False)
+  edgesSorted, _, _ = sortEdges(edgesDiskInt) # 4 rayons, 2 demi cercles
+
+  centre = geompy.MakeVertexOnSurface(planfiss, 0.5, 0.5)
+  refpoint = geompy.MakeTranslationVector(centre, geompy.GetNormal(planfiss,centre))
+  geomPublish(initLog.debug, refpoint, 'refpoint')
+  [_, _, facesPipeOnplan] = extractionOrientee(planfiss, pipeFondFiss, refpoint, "FACE", 0.1, "pipe_plan_")
+  [_, _, edgesPipeOnplan] = extractionOrientee(planfiss, pipeFondFiss, refpoint, "EDGE", 0.1, "pipe_plan_")
+
+  # --- rayon disques = (edgesPipeOnside inter edgesPipeOnplan) + rayons disque internes
+  #     demi cercles  = edgesPipeOnside moins edgesPipeOnplan + demi cercles disque internes
+  #     generatrices  = edgesPipeOnplan moins rayon disques (3 grandes et 6 petites)
+  edgesIdPipeOnside = getSubshapeIds(pipeFondFiss, edgesPipeOnside)
+  edgesIdPipeOnplan = getSubshapeIds(pipeFondFiss, edgesPipeOnplan)
+  rayons = list()
+  demiCercles = list()
+  for i, edgeId in enumerate(edgesIdPipeOnside):
+    if edgeId in edgesIdPipeOnplan:
+      rayons.append(edgesPipeOnside[i])
+    else:
+      demiCercles.append(edgesPipeOnside[i])
+  demiCerclesExternes = demiCercles
+  rayons = rayons + edgesSorted[:4]            # les 4 plus petits sont les rayons
+  demiCercles = demiCercles  + edgesSorted[4:] # les suivants sont les arcs de cercle
+  rayonsId = getSubshapeIds(pipeFondFiss, rayons)
+  generatrices = list()
+  for i, edgeId in enumerate(edgesIdPipeOnplan):
+    if edgeId not in rayonsId:
+      generatrices.append(edgesPipeOnplan[i])
+
+  # --- generatrices en contact avec la face fissure externe au pipe
+  generFiss = list()
+  for edge in generatrices:
+    distance = geompy.MinDistance(vertexReference, edge)
+    logging.debug("distance %s", distance)
+    if distance < 1.e-5:
+      generFiss.append(edge)
+      break
+  for edge in generatrices:
+    distance = geompy.MinDistance(generFiss[0], edge)
+    logging.debug("distance %s", distance)
+    if distance < 1.e-5:
+      generFiss.append(edge)
+  groupGenerFiss = geompy.CreateGroup(pipeFondFiss, geompy.ShapeType["EDGE"])
+  geompy.UnionList(groupGenerFiss, generFiss)
+  geomPublishInFather(initLog.debug,pipeFondFiss, groupGenerFiss, "GenFiss")
+
+  # --- demi cercles externes regroupés
+  groupsDemiCerclesPipe = list()
+  for i, vertex in enumerate(verticesEdgePeauFiss):
+    demis = list()
+    for edge in demiCerclesExternes:
+      if geompy.MinDistance(vertex, edge) < 0.1:
+        demis.append(edge)
+    group = geompy.CreateGroup(pipeFondFiss, geompy.ShapeType["EDGE"])
+    geompy.UnionList(group, demis)
+    name = "Cercle%d"%i
+    geomPublishInFather(initLog.debug,pipeFondFiss, group , name)
+    groupsDemiCerclesPipe.append(group)
+
+  # --- faces fissure dans le pipe
+
+  facesFissinPipe = list()
+  generFissId = getSubshapeIds(pipeFondFiss, generFiss)
+  logging.debug("generatrice fissure %s", generFissId)
+  for face in facesPipeOnplan:
+    edges =geompy.ExtractShapes(face, geompy.ShapeType["EDGE"], False)
+    edgesId = getSubshapeIds(pipeFondFiss, edges)
+    logging.debug("  edges %s", edgesId)
+    for i,edgeId in enumerate(edgesId):
+      if edgeId in generFissId:
+        logging.debug("face found")
+        facesFissinPipe.append(face)
+        name = "faceFissInPipe_%d"%i
+        geomPublishInFather(initLog.debug,pipeFondFiss, face, name)
+        break
+  groupFaceFissInPipe = geompy.CreateGroup(pipeFondFiss, geompy.ShapeType["FACE"])
+  geompy.UnionList(groupFaceFissInPipe, facesFissinPipe)
+  name = "FaceFissInPipe"
+  geomPublishInFather(initLog.debug,pipeFondFiss, groupFaceFissInPipe , name)
+
+  # --- edges de fond de fissure
+
+  edgesFondFiss = list()
+  for i, edge in enumerate(edgesInside):
+    anEdge = geompy.GetInPlace(pipeFondFiss, edge)
+    logging.debug("  edge %s ", anEdge)
+    edgesFondFiss.append(anEdge)
+    name ="edgeFondFissure_%d"%i
+    geomPublishInFather(initLog.debug,pipeFondFiss, anEdge, name)
+  groupEdgeFondFiss = geompy.CreateGroup(pipeFondFiss, geompy.ShapeType["EDGE"])
+  geompy.UnionList(groupEdgeFondFiss, edgesFondFiss)
+  name = "FONDFISS"
+  geomPublishInFather(initLog.debug,pipeFondFiss, groupEdgeFondFiss , name)
+
+  # -------------------------------------------------------------------------
+  # --- maillage
+
+  # --- edges de bord face defaut à respecter
+
+  _ = smesh.CreateFilterManager()
+  _, internalBoundary, _ = internalBoundary.MakeBoundaryElements( SMESH.BND_1DFROM2D, '', '', 0, [  ])
+  putName(internalBoundary, 'internalBoundary', i_pref=nro_cas)
+  criteres = list()
+  un_critere = smesh.GetCriterion(SMESH.EDGE,SMESH.FT_FreeBorders,SMESH.FT_Undefined,0)
+  criteres.append(un_critere)
+  filtre = smesh.GetFilterFromCriteria(criteres)
+  bordsLibres = internalBoundary.MakeGroupByFilter( 'bords', filtre )
+  putName(bordsLibres, 'bordsLibres', i_pref=nro_cas)
+
+  # --- pour aider l'algo hexa-tetra a ne pas mettre de pyramides a l'exterieur des volumes replies sur eux-memes
+  #     on designe les faces de peau en quadrangles par le groupe "skinFaces"
+
+  skinFaces = internalBoundary.CreateEmptyGroup( SMESH.FACE, 'skinFaces' )
+  _ = skinFaces.AddFrom( internalBoundary.GetMesh() )
+
+  # --- maillage pipe fond fissure
+
+  return pipeFondFiss, disques, rayons, \
+          demiCercles, generatrices, \
+          VerticesEndPipeFiss, bordsLibres, \
+          groupFaceFissInPipe, groupEdgeFondFiss, groupsDemiCerclesPipe, groupGenerFiss
diff --git a/src/Tools/blocFissure/gmu/insereFissureLongue_c.py b/src/Tools/blocFissure/gmu/insereFissureLongue_c.py
new file mode 100644 (file)
index 0000000..a963177
--- /dev/null
@@ -0,0 +1,147 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Insertion de fissure longue - maillage pipe fond fissure"""
+
+import logging
+import math
+
+from salome.smesh import smeshBuilder
+import SMESH
+
+from .geomsmesh import geompy
+from .geomsmesh import smesh
+
+from .sortEdges import sortEdges
+from .putName import putName
+from .distance2 import distance2
+
+def insereFissureLongue_c (pipeFondFiss, disques, rayons, demiCercles, demiCerclesPeau, generatrices, \
+                           VerticesEndPipeFiss, verticesEdgePeauFiss, \
+                           groupFaceFissInPipe, groupEdgeFondFiss, groupsDemiCerclesPipe, groupGenerFiss, \
+                           profondeur, rayonPipe, \
+                           nro_cas=None):
+  """maillage pipe fond fissure"""
+  logging.info('start')
+  logging.info("Maillage pour le cas n°%s", nro_cas)
+
+  meshFondFiss = smesh.Mesh(pipeFondFiss)
+  putName(meshFondFiss, "pipeFondFiss", i_pref=nro_cas)
+
+  algo3d = meshFondFiss.Prism()
+
+  algo2d = meshFondFiss.Quadrangle(algo=smeshBuilder.QUADRANGLE)
+
+  for i_aux, face in enumerate(disques):
+    #print (i_aux)
+    # la commande suivante entraîne addToStudy() failed
+    algo2d = meshFondFiss.Quadrangle(algo=smeshBuilder.RADIAL_QUAD,geom=face)
+    putName(algo2d.GetSubMesh(), "disque", i_aux, nro_cas)
+
+  for i_aux, edge in enumerate(rayons):
+    algo1d = meshFondFiss.Segment(geom=edge)
+    putName(algo1d.GetSubMesh(), "rayon", i_aux, nro_cas)
+    hypo1d = algo1d.NumberOfSegments(4)
+    putName(hypo1d, "rayon={}".format(4), i_aux, nro_cas)
+
+  for i_aux, edge in enumerate(demiCercles):
+    algo1d = meshFondFiss.Segment(geom=edge)
+    putName(algo1d.GetSubMesh(), "demiCercle", i_aux, nro_cas)
+    hypo1d = algo1d.NumberOfSegments(6)
+    putName(hypo1d, "demiCercle={}".format(6), i_aux, nro_cas)
+
+  generSorted, minlg, maxlg = sortEdges(generatrices)
+  nbSegGenLong = int(math.sqrt(3.0)*maxlg/(profondeur - rayonPipe)) # on veut 2 triangles equilateraux dans la largeur de la face
+  nbSegGenBout = 6
+  logging.info("min %s, max %s, nombre de segments %s, nombre de generatrices %s", minlg, maxlg, nbSegGenLong, len(generSorted))
+  for i_aux, edge in enumerate(generSorted):
+    algo1d = meshFondFiss.Segment(geom=edge)
+    putName(algo1d.GetSubMesh(), "generatrice", i_aux, nro_cas)
+    if i_aux < 6:
+      nbSeg = nbSegGenBout
+    else:
+      nbSeg = nbSegGenLong
+    hypo1d = algo1d.NumberOfSegments(nbSeg)
+    putName(hypo1d, "generatrice={}".format(nbSeg), i_aux, nro_cas)
+
+  disks = list()
+  for i_aux, face in enumerate(disques[:4]):
+    name = "disk{}".format(i_aux)
+    disks.append(meshFondFiss.GroupOnGeom(face, name, SMESH.FACE))
+  _ = meshFondFiss.GetMesh().UnionListOfGroups( disks, 'PEAUEXT' )
+
+  _ = meshFondFiss.GroupOnGeom(VerticesEndPipeFiss[0], "PFOR", SMESH.NODE)
+  _ = meshFondFiss.GroupOnGeom(VerticesEndPipeFiss[1], "PFEX", SMESH.NODE)
+
+  _ = meshFondFiss.GroupOnGeom(groupFaceFissInPipe, "fisInPi", SMESH.FACE)
+  _ = meshFondFiss.GroupOnGeom(groupEdgeFondFiss, "FONDFISS", SMESH.EDGE)
+  _ = meshFondFiss.GroupOnGeom(groupEdgeFondFiss, "nfondfis", SMESH.NODE)
+
+  groups_demiCercles = list()
+  groupnodes_demiCercles = list()
+  for i_aux, group in enumerate(groupsDemiCerclesPipe):
+    name = "Cercle{}".format(i_aux)
+    groups_demiCercles.append(meshFondFiss.GroupOnGeom(group, name, SMESH.EDGE))
+    name = "nCercle{}".format(i_aux)
+    groupnodes_demiCercles.append(meshFondFiss.GroupOnGeom(group, name, SMESH.NODE))
+  group_generFiss = meshFondFiss.GroupOnGeom(groupGenerFiss, "GenFiss", SMESH.EDGE)
+  groupnode_generFiss = meshFondFiss.GroupOnGeom(groupGenerFiss, "GenFiss", SMESH.NODE)
+
+  is_done = meshFondFiss.Compute()
+  text = "meshFondFiss.Compute"
+  if is_done:
+    logging.info(text+" OK")
+  else:
+    text = "Erreur au calcul du maillage.\n" + text
+    logging.info(text)
+    raise Exception(text)
+
+  grpNode0 = meshFondFiss.IntersectGroups(groupnode_generFiss, groupnodes_demiCercles[0], "Node0")
+  grpNode1 = meshFondFiss.IntersectGroups(groupnode_generFiss, groupnodes_demiCercles[1], "Node1")
+  idNode0 = grpNode0.GetID(1)
+  idNode1 = grpNode1.GetID(1)
+  coordsMesh = list()
+  coordsMesh.append(meshFondFiss.GetNodeXYZ(idNode0))
+  coordsMesh.append(meshFondFiss.GetNodeXYZ(idNode1))
+
+  for vertex in verticesEdgePeauFiss:
+    coord = geompy.PointCoordinates(vertex)
+    if distance2(coord, coordsMesh[0]) < 0.1:
+      meshFondFiss.MoveNode(idNode0, coord[0], coord[1], coord[2])
+    if distance2(coord, coordsMesh[1]) < 0.1:
+      meshFondFiss.MoveNode(idNode1, coord[0], coord[1], coord[2])
+
+  for groupNodes in groupnodes_demiCercles:
+    for idNode in groupNodes.GetListOfID():
+      coordMesh = meshFondFiss.GetNodeXYZ(idNode)
+      vertex = geompy.MakeVertex(coordMesh[0], coordMesh[1], coordMesh[2])
+      minDist = 100000
+      minCoord = None
+      imin = -1
+      for i_aux, edge in enumerate(demiCerclesPeau):
+        discoord = geompy.MinDistanceComponents(vertex, edge)
+        if discoord[0] <minDist:
+          minDist = discoord[0]
+          minCoord = discoord[1:]
+          imin = i_aux
+      if imin >= 0 and minDist > 1.E-6:
+        logging.debug("node id moved : %s distance=%s", idNode, minDist)
+        meshFondFiss.MoveNode(idNode, coordMesh[0] + minCoord[0], coordMesh[1] + minCoord[1], coordMesh[2] + minCoord[2])
+
+  return meshFondFiss, groups_demiCercles, group_generFiss, nbSegGenLong, nbSegGenBout
diff --git a/src/Tools/blocFissure/gmu/insereFissureLongue_d.py b/src/Tools/blocFissure/gmu/insereFissureLongue_d.py
new file mode 100644 (file)
index 0000000..0f28309
--- /dev/null
@@ -0,0 +1,107 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Insertion de fissure longue - maillage face de peau"""
+
+import logging
+
+from salome.smesh import smeshBuilder
+import SMESH
+
+from .geomsmesh import geompy
+from .geomsmesh import smesh
+
+from .putName import putName
+
+def insereFissureLongue_d (facePeau, edgePeauFiss, groupEdgesBordPeau, bordsLibres, \
+                           groupsDemiCerclesPeau, groups_demiCercles, verticesOutCercles, \
+                           nbSegGenLong, nbSegGenBout, profondeur, \
+                           mailleur="MeshGems", nro_cas=None):
+  """maillage face de peau"""
+  logging.info('start')
+  logging.info("Maillage avec %s pour le cas n°%s", mailleur, nro_cas)
+
+  meshFacePeau = smesh.Mesh(facePeau)
+  putName(meshFacePeau, "facePeau", i_pref=nro_cas)
+
+  if ( mailleur == "MeshGems"):
+    algo2d = meshFacePeau.Triangle(algo=smeshBuilder.MG_CADSurf)
+    hypo2d = algo2d.Parameters()
+    hypo2d.SetPhySize( 1000 )
+    hypo2d.SetMinSize( 100 )
+    hypo2d.SetMaxSize( 3000. )
+    hypo2d.SetChordalError( 250. )
+    hypo2d.SetVerbosity( 0 )
+  else:
+    algo2d = meshFacePeau.Triangle(algo=smeshBuilder.NETGEN_2D)
+    hypo2d = algo2d.Parameters()
+    hypo2d.SetMaxSize( 1000 )
+    hypo2d.SetOptimize( 1 )
+    hypo2d.SetFineness( 2 )
+    hypo2d.SetMinSize( 2 )
+    hypo2d.SetChordalErrorEnabled (True)
+    hypo2d.SetChordalError( 250. )
+    hypo2d.SetUseSurfaceCurvature (True)
+    hypo2d.SetQuadAllowed( 0 )
+  putName(algo2d.GetSubMesh(), "facePeau", i_pref=nro_cas)
+  putName(hypo2d, "facePeau", i_pref=nro_cas)
+  #
+  lenEdgePeauFiss = geompy.BasicProperties(edgePeauFiss)[0]
+  frac = profondeur/lenEdgePeauFiss
+  nbSeg = nbSegGenLong +2*nbSegGenBout
+  ratio = (nbSegGenBout/float(profondeur)) / (nbSegGenLong/lenEdgePeauFiss)
+  logging.info("lenEdgePeauFiss %s, profondeur %s, nbSegGenLong %s, nbSegGenBout %s, frac %s, ratio %s", lenEdgePeauFiss, profondeur, nbSegGenLong, nbSegGenBout, frac, ratio)
+
+  algo1d = meshFacePeau.Segment(geom=edgePeauFiss)
+  hypo1d = algo1d.NumberOfSegments(nbSeg,list(),[  ])
+  hypo1d.SetDistrType( 2 )
+  hypo1d.SetConversionMode( 1 )
+  hypo1d.SetTableFunction( [ 0, ratio, frac, 1, (1.-frac), 1, 1, ratio ] )
+  putName(algo1d.GetSubMesh(), "edgePeauFiss", i_pref=nro_cas)
+  putName(hypo1d, "edgePeauFiss", i_pref=nro_cas)
+  #
+  algo1d = meshFacePeau.UseExisting1DElements(geom=groupEdgesBordPeau)
+  hypo1d = algo1d.SourceEdges([ bordsLibres ],0,0)
+  putName(algo1d.GetSubMesh(), "bordsLibres", i_pref=nro_cas)
+  putName(hypo1d, "bordsLibres", i_pref=nro_cas)
+  #
+  for i_aux in range(2):
+    algo1d = meshFacePeau.UseExisting1DElements(geom=groupsDemiCerclesPeau[i_aux])
+    hypo1d = algo1d.SourceEdges([ groups_demiCercles[i_aux] ],0,0)
+    putName(algo1d.GetSubMesh(), "DemiCercles", i_aux, nro_cas)
+    putName(hypo1d, "groupDemiCercles", i_aux, nro_cas)
+
+  _ = meshFacePeau.GroupOnGeom(verticesOutCercles[0], "THOR", SMESH.NODE)
+  _ = meshFacePeau.GroupOnGeom(verticesOutCercles[1], "THEX", SMESH.NODE)
+
+  groupEdgesPeauFiss = meshFacePeau.GroupOnGeom(edgePeauFiss, "PeauFis", SMESH.EDGE)
+
+  is_done = meshFacePeau.Compute()
+  text = "meshFacePeau.Compute"
+  if is_done:
+    logging.info(text+" OK")
+  else:
+    text = "Erreur au calcul du maillage.\n" + text
+    logging.info(text)
+    raise Exception(text)
+
+  peauext_face = meshFacePeau.CreateEmptyGroup( SMESH.FACE, 'PEAUEXT' )
+  _ = peauext_face.AddFrom( meshFacePeau.GetMesh() )
+
+  return meshFacePeau, groupEdgesPeauFiss
diff --git a/src/Tools/blocFissure/gmu/insereFissureLongue_e.py b/src/Tools/blocFissure/gmu/insereFissureLongue_e.py
new file mode 100644 (file)
index 0000000..8caf597
--- /dev/null
@@ -0,0 +1,86 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Insertion de fissure longue - maillage face de fissure"""
+
+import logging
+import math
+
+import SMESH
+from salome.smesh import smeshBuilder
+
+from .geomsmesh import smesh
+
+from .putName import putName
+
+def insereFissureLongue_e (faceFiss, edgePeauFiss, groupEdgesPeauFiss, group_generFiss, groupEdgesFaceFissPipe, \
+                           profondeur, rayonPipe, \
+                           mailleur="MeshGems", nro_cas=None):
+  """maillage face de fissure"""
+  logging.info('start')
+  logging.info("Maillage avec %s pour le cas n°%s", mailleur, nro_cas)
+
+  meshFaceFiss = smesh.Mesh(faceFiss)
+  putName(meshFaceFiss, "faceFiss", i_pref=nro_cas)
+
+  mesh_size = (profondeur - rayonPipe)/math.sqrt(3.0) # pour avoir deux couches de triangles équilatéraux partout sur la fissure
+  if ( mailleur == "MeshGems"):
+    algo2d = meshFaceFiss.Triangle(algo=smeshBuilder.MG_CADSurf)
+    hypo2d = algo2d.Parameters()
+    hypo2d.SetPhySize( mesh_size )
+    hypo2d.SetMinSize( mesh_size/10. )
+    hypo2d.SetMaxSize( mesh_size*3. )
+    hypo2d.SetChordalError( mesh_size*0.25 )
+    hypo2d.SetVerbosity( 0 )
+  else:
+    algo2d = meshFaceFiss.Triangle(algo=smeshBuilder.NETGEN_2D)
+    hypo2d = algo2d.Parameters()
+    hypo2d.SetMaxSize( mesh_size )
+    hypo2d.SetOptimize( 1 )
+    hypo2d.SetFineness( 2 )
+    hypo2d.SetMinSize( 2 )
+    hypo2d.SetChordalErrorEnabled (True)
+    hypo2d.SetChordalError( mesh_size*0.25 )
+    hypo2d.SetUseSurfaceCurvature (True)
+    hypo2d.SetQuadAllowed( 0 )
+  putName(algo2d.GetSubMesh(), "faceFiss", i_pref=nro_cas)
+  putName(hypo2d, "faceFiss", i_pref=nro_cas)
+  #
+  algo1d = meshFaceFiss.UseExisting1DElements(geom=edgePeauFiss)
+  hypo1d = algo1d.SourceEdges([ groupEdgesPeauFiss ],0,0)
+  putName(algo1d.GetSubMesh(), "edgeFissPeau", i_pref=nro_cas)
+  putName(hypo1d, "edgeFissPeau", i_pref=nro_cas)
+  #
+  algo1d = meshFaceFiss.UseExisting1DElements(geom=groupEdgesFaceFissPipe)
+  hypo1d = algo1d.SourceEdges([ group_generFiss ],0,0)
+  putName(algo1d.GetSubMesh(), "edgeFissPeau", i_pref=nro_cas)
+  putName(hypo1d, "edgeFissPeau", i_pref=nro_cas)
+
+  _ = meshFaceFiss.GroupOnGeom(faceFiss, "fisOutPi", SMESH.FACE)
+
+  is_done = meshFaceFiss.Compute()
+  text = "meshFaceFiss.Compute"
+  if is_done:
+    logging.info(text+" OK")
+  else:
+    text = "Erreur au calcul du maillage.\n" + text
+    logging.info(text)
+    raise Exception(text)
+
+  return meshFaceFiss
diff --git a/src/Tools/blocFissure/gmu/insereFissureLongue_f.py b/src/Tools/blocFissure/gmu/insereFissureLongue_f.py
new file mode 100644 (file)
index 0000000..e4773b7
--- /dev/null
@@ -0,0 +1,79 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Insertion de fissure longue - maillage meshBoiteDefaut"""
+
+import logging
+
+from salome.smesh import smeshBuilder
+import SMESH
+
+from .geomsmesh import smesh
+
+from .putName import putName
+
+def insereFissureLongue_f (internalBoundary, meshFondFiss, meshFacePeau, meshFaceFiss, \
+                           mailleur="MeshGems", nro_cas=None):
+  """maillage meshBoiteDefaut"""
+  logging.info('start')
+  logging.info("Usage du mailleur %s pour le cas n°%s", mailleur, nro_cas)
+
+  meshBoiteDefaut = smesh.Concatenate( [internalBoundary.GetMesh(), \
+                                        meshFondFiss.GetMesh(), \
+                                        meshFacePeau.GetMesh(), \
+                                        meshFaceFiss.GetMesh()], \
+                                        1, 1, 1e-05,False )
+  # pour aider l'algo hexa-tetra a ne pas mettre de pyramides a l'exterieur des volumes replies sur eux-memes
+  # on designe les faces de peau en quadrangles par le groupe "skinFaces"
+  group_faceFissOutPipe = None
+  group_faceFissInPipe = None
+  groups = meshBoiteDefaut.GetGroups()
+  for grp in groups:
+    if grp.GetType() == SMESH.FACE:
+      #if "internalBoundary" in grp.GetName():
+      #  grp.SetName("skinFaces")
+      if grp.GetName() == "fisOutPi":
+        group_faceFissOutPipe = grp
+      elif grp.GetName() == "fisInPi":
+        group_faceFissInPipe = grp
+
+  # le maillage NETGEN ne passe pas toujours ==> on force l'usage de MG_Tetra
+  mailleur = "MeshGems"
+  logging.info("Maillage avec %s", mailleur)
+  if ( mailleur == "MeshGems"):
+    algo3d = meshBoiteDefaut.Tetrahedron(algo=smeshBuilder.MG_Tetra)
+  else:
+    algo3d = meshBoiteDefaut.Tetrahedron(algo=smeshBuilder.NETGEN)
+    hypo3d = algo3d.MaxElementVolume(1000.0)
+    hypo3d.SetVerboseLevel( 0 )
+    hypo3d.SetStandardOutputLog( 0 )
+    hypo3d.SetRemoveLogOnSuccess( 1 )
+  putName(algo3d.GetSubMesh(), "boiteDefaut", i_pref=nro_cas)
+  putName(meshBoiteDefaut, "boiteDefaut", i_pref=nro_cas)
+
+  is_done = meshBoiteDefaut.Compute()
+  text = "meshBoiteDefaut.Compute"
+  if is_done:
+    logging.info(text+" OK")
+  else:
+    text = "Erreur au calcul du maillage.\n" + text
+    logging.info(text)
+    raise Exception(text)
+
+  return meshBoiteDefaut, group_faceFissInPipe, group_faceFissOutPipe
diff --git a/src/Tools/blocFissure/gmu/insereFissureLongue_g.py b/src/Tools/blocFissure/gmu/insereFissureLongue_g.py
new file mode 100644 (file)
index 0000000..c05e1e6
--- /dev/null
@@ -0,0 +1,99 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Les groupes de la fissure longue"""
+
+import logging
+
+import SMESH
+
+from .geomsmesh import geompy
+
+from .putName import putName
+from .enleveDefaut import enleveDefaut
+from .shapeSurFissure import shapeSurFissure
+from .regroupeSainEtDefaut import RegroupeSainEtDefaut
+from .triedreBase import triedreBase
+
+# -----------------------------------------------------------------------------
+
+def insereFissureLongue_g(nomFicFissure, fichierMaillageFissure, nomFicSain, maillageSain, \
+                          meshBoiteDefaut, facePorteFissure, \
+                          group_faceFissInPipe, group_faceFissOutPipe, \
+                          zoneDefaut, zoneDefaut_skin, zoneDefaut_internalEdges, zoneDefaut_internalFaces, \
+                          nro_cas=None):
+  """Les groupes de la fissure longue"""
+  logging.info('start')
+  logging.info("Pour le cas n°%s", nro_cas)
+
+  O, _, _, _ = triedreBase()
+
+  groups = maillageSain.GetGroups()
+  grps1 = [ grp for grp in groups if grp.GetName() == 'P1']
+  grps2 = [ grp for grp in groups if grp.GetName() == 'P2']
+  coords1 = maillageSain.GetNodeXYZ(grps1[0].GetID(1))
+  coords2 = maillageSain.GetNodeXYZ(grps2[0].GetID(1))
+  logging.info("coords1 %s, coords2 %s",coords1, coords2)
+
+  _ = meshBoiteDefaut.GetMesh().UnionListOfGroups( [ group_faceFissOutPipe, group_faceFissInPipe ], 'FACE1' )
+  maillageSain = enleveDefaut(maillageSain, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges)
+  putName(maillageSain, nomFicSain+"_coupe", i_pref=nro_cas)
+  extrusionFaceFissure, normfiss = shapeSurFissure(facePorteFissure)
+  maillageComplet = RegroupeSainEtDefaut(maillageSain, meshBoiteDefaut, extrusionFaceFissure, facePorteFissure, 'COUDE')
+
+  groups = maillageComplet.GetGroups()
+  grps1 = [ grp for grp in groups if grp.GetName() == 'P1']
+  grps2 = [ grp for grp in groups if grp.GetName() == 'P2']
+  nodeid1 = maillageComplet.AddNode(coords1[0], coords1[1], coords1[2])
+  nodeid2 = maillageComplet.AddNode(coords2[0], coords2[1], coords2[2])
+  grps1[0].Add([nodeid1])
+  grps2[0].Add([nodeid2])
+  ma0d1 = maillageComplet.Add0DElement(nodeid1)
+  ma0d2 = maillageComplet.Add0DElement(nodeid2)
+  grpma0d1 = maillageComplet.CreateEmptyGroup( SMESH.ELEM0D, 'P1' )
+  _ = grpma0d1.Add( [ma0d1] )
+  grpma0d2 = maillageComplet.CreateEmptyGroup( SMESH.ELEM0D, 'P2' )
+  _ = grpma0d2.Add( [ma0d2] )
+
+#  grps = [ grp for grp in groups if grp.GetName() == 'affectedEdges']
+#  grps[0].SetName('affEdges')
+#  grps = [ grp for grp in groups if grp.GetName() == 'affectedFaces']
+#  grps[0].SetName('affFaces')
+#  grps = [ grp for grp in groups if grp.GetName() == 'affectedVolumes']
+#  grps[0].SetName('affVols')
+
+  maillageComplet.ConvertToQuadratic( 1 )
+  grps = [ grp for grp in groups if grp.GetName() == 'FONDFISS']
+  _ = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FONDFISS' )
+
+  grps = [ grp for grp in groups if grp.GetName() == 'FACE1']
+  _ = maillageComplet.Reorient2D( grps[0], normfiss, grps[0].GetID(1))
+
+  plansim = geompy.MakePlane(O, normfiss, 10000)
+  fissnorm = geompy.MakeMirrorByPlane(normfiss, plansim)
+  grps = [ grp for grp in groups if grp.GetName() == 'FACE2']
+  _ = maillageComplet.Reorient2D( grps[0], fissnorm, grps[0].GetID(1))
+  #isDone = maillageComplet.ReorientObject( grps[0] )
+  _ = maillageComplet.GetMesh().CreateDimGroup( grps, SMESH.NODE, 'FACE2' )
+
+  maillageComplet.ExportMED(fichierMaillageFissure)
+  putName(maillageComplet, nomFicFissure)
+  logging.info("fichier maillage fissure %s", fichierMaillageFissure)
+
+  return maillageComplet
index 86c1998f2e3f3a762d02048f85ff713216ec2b5f..88c94bd5d503158fb04959e1342a4d87caf26671 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Fonctions générrales sur les maillages
 
-"""
 Created on Mon Jun 23 14:49:36 2014
-
 @author: I48174 (Olivier HOAREAU)
 """
 
 import logging
+
 import SMESH
 from .geomsmesh import smesh
 
+from .putName import putName
+
 def lookForCorner(maillageAScanner):
-    
-    """ Cette fonction permet de scanner la liste de noeuds qui composent le
-        maillage passé en paramètre. On recherche un ou plusieurs coins, ce
-        qui implique les caractéristiques suivantes:
-            - le noeud doit appartenir au moins à trois éléments distincts
-            - chaque élément doit appartenir à un ensemble distinct
-        La fonction renvoie une liste de coins par l'intermédiaire de l'IDs
-        chaque noeud. La liste contient en général au maximum deux coins.
-    """
-    
-    logging.info("start")
-    
-    allNodeIds = maillageAScanner.GetNodesId()  # On stocke tout les noeuds
-    listOfCorners = []
-    for ND in allNodeIds:
-        # On parcours la liste de noeuds
-        listOfElements = maillageAScanner.GetNodeInverseElements(ND)
-        if len(listOfElements) >=3:
-            # On teste le nombre d'éléments qui partagent le même noeud
-            # --- Filtre selon le critère 'coplanar' --- #
-            listOfCriterion = [smesh.GetCriterion(SMESH.FACE, SMESH.FT_CoplanarFaces, \
-                               SMESH.FT_Undefined, elem, SMESH.FT_Undefined, SMESH.FT_Undefined, 30) \
-                               for elem in listOfElements]
-            listOfFilters = [smesh.GetFilterFromCriteria([criteria]) for criteria in listOfCriterion]
-            listOfSets = [maillageAScanner.GetIdsFromFilter(filter) for filter in listOfFilters]
-            if listOfSets.count(listOfSets[0]) == len(listOfSets):
-                # Si toutes les listes d'éléments sont similaires, on retourne
-                # au début pour éviter de travailler sur des éléments inutiles.
-                # Exemple : un noeud appartenant à 4 éléments sur la même face.
-                continue
-            for s in listOfSets:
-                while listOfSets.count(s) > 1:
-                    # On supprime tant que la liste d'éléments n'est pas unique.
-                    listOfSets.remove(s)
-            if len(listOfSets) >= 3:
-                # Si on a au moins 3 listes d'élements différentes, on considère
-                # qu'il y a présence d'un coin.
-                listOfCorners.append(ND)
-    return listOfCorners
+
+  """ Cette fonction permet de scanner la liste de noeuds qui composent le
+      maillage passé en paramètre. On recherche un ou plusieurs coins, ce
+      qui implique les caractéristiques suivantes:
+          - le noeud doit appartenir au moins à trois éléments distincts
+          - chaque élément doit appartenir à un ensemble distinct
+      La fonction renvoie une liste de coins par l'intermédiaire de l'IDs
+      chaque noeud. La liste contient en général au maximum deux coins.
+  """
+
+  logging.info("start")
+
+  allNodeIds = maillageAScanner.GetNodesId()  # On stocke tout les noeuds
+  listOfCorners = list()
+  for noeud in allNodeIds:
+    # On parcours la liste de noeuds
+    listOfElements = maillageAScanner.GetNodeInverseElements(noeud)
+    if len(listOfElements) >=3:
+      # On teste le nombre d'éléments qui partagent le même noeud
+      # --- Filtre selon le critère 'coplanar' --- #
+      listOfCriterion = [smesh.GetCriterion(SMESH.FACE, SMESH.FT_CoplanarFaces, \
+                          SMESH.FT_Undefined, elem, SMESH.FT_Undefined, SMESH.FT_Undefined, 30) \
+                          for elem in listOfElements]
+      listOfFilters = [smesh.GetFilterFromCriteria([criteria]) for criteria in listOfCriterion]
+      listOfSets = [maillageAScanner.GetIdsFromFilter(filtre) for filtre in listOfFilters]
+      if listOfSets.count(listOfSets[0]) == len(listOfSets):
+        # Si toutes les listes d'éléments sont similaires, on retourne
+        # au début pour éviter de travailler sur des éléments inutiles.
+        # Exemple : un noeud appartenant à 4 éléments sur la même face.
+        continue
+      for l_aux in listOfSets:
+        while listOfSets.count(l_aux) > 1:
+            # On supprime tant que la liste d'éléments n'est pas unique.
+          listOfSets.remove(l_aux)
+      if len(listOfSets) >= 3:
+        # Si on a au moins 3 listes d'élements différentes, on considère
+        # qu'il y a présence d'un coin.
+        listOfCorners.append(noeud)
+
+  return listOfCorners
 
 def createLinesFromMesh(maillageSupport):
-    
-    """ Cette fonction permet de générer une liste de lignes à partir du 
-        maillage support passé en paramètre. On démarre à partir d'un coin
-        simple et on parcourt tout les noeuds pour former une ligne. Soit la
-        figure ci-dessous :
-            
-            1_____4_____7    On part du coin N1, et on cherche les noeuds
-            |     |     |    successifs tels que [1, 2, 3]. Lorsqu'on arrive
-            |  1  |  3  |    arrive sur le noeud de fin de ligne N3, on repart
-            |     |     |    du noeud précédent du premier élément (E1), à
-            2_____5_____8    savoir le noeud N4. On suit les noeuds succesifs
-            |     |     |    [4, 5, 6] comme précédemment et ainsi de suite.
-            |  2  |  4  |    Lorsqu'on arrive sur le dernier noeud de la
-            |     |     |    dernière ligne, à savoir le noeud N9, on considère
-            3_____6_____9    que toutes les lignes sont créées.
-            
-        La fonction retourne une liste de lignes utilisées par la suite.
-    """
-    
-    logging.info("start")
-    
-    allNodeIds = maillageSupport.GetNodesId()
-    while len(allNodeIds):
-        nodeIds = allNodeIds
-        for idNode in nodeIds: # rechercher un coin
-          elems = maillageSupport.GetNodeInverseElements(idNode)
-          if len(elems) == 1:
-            # un coin: un noeud, un element quadrangle
-            elem = elems[0]
-            break;
-        idStart = idNode # le noeud de coin
-        elemStart = elem # l'élément quadrangle au coin
-        xyz = maillageSupport.GetNodeXYZ(idStart)
-        logging.debug("idStart %s, coords %s", idStart, str(xyz))
-    
-        nodelines =[] # on va constituer une liste de lignes de points
-        nextLine = True
-        ligneFinale = False
-        while nextLine:
-            logging.debug("--- une ligne")
-            idNode = idStart
-            elem = elemStart
-            if ligneFinale:
-                agauche = False  # sens de parcours des 4 noeuds d'un quadrangle
-                nextLine = False
+
+  """ Cette fonction permet de générer une liste de lignes à partir du
+      maillage support passé en paramètre. On démarre à partir d'un coin
+      simple et on parcourt tout les noeuds pour former une ligne. Soit la
+      figure ci-dessous :
+
+          1_____4_____7    On part du coin N1, et on cherche les noeuds
+          |     |     |    successifs tels que [1, 2, 3]. Lorsqu'on arrive
+          |  1  |  3  |    arrive sur le noeud de fin de ligne N3, on repart
+          |     |     |    du noeud précédent du premier élément (E1), à
+          2_____5_____8    savoir le noeud N4. On suit les noeuds succesifs
+          |     |     |    [4, 5, 6] comme précédemment et ainsi de suite.
+          |  2  |  4  |    Lorsqu'on arrive sur le dernier noeud de la
+          |     |     |    dernière ligne, à savoir le noeud N9, on considère
+          3_____6_____9    que toutes les lignes sont créées.
+
+      La fonction retourne une liste de lignes utilisées par la suite.
+  """
+
+  logging.info("start")
+
+  allNodeIds = maillageSupport.GetNodesId()
+  while len(allNodeIds):
+    nodeIds = allNodeIds
+    for idNode in nodeIds: # rechercher un coin
+      elems = maillageSupport.GetNodeInverseElements(idNode)
+      if len(elems) == 1:
+        # un coin: un noeud, un element quadrangle
+        elem = elems[0]
+        idNode_c = idNode
+        break
+    idStart = idNode_c # le noeud de coin
+    elemStart = elem # l'élément quadrangle au coin
+    xyz = maillageSupport.GetNodeXYZ(idStart)
+    logging.debug("idStart %s, coords %s", idStart, str(xyz))
+
+    nodelines = list() # on va constituer une liste de lignes de points
+    nextLine = True
+    ligneFinale = False
+    while nextLine:
+      logging.debug("--- une ligne")
+      idNode = idStart
+      elem = elemStart
+      if ligneFinale:
+        agauche = False  # sens de parcours des 4 noeuds d'un quadrangle
+        nextLine = False
+      else:
+        agauche = True
+      ligneIncomplete = True  # on commence une ligne de points
+      debutLigne = True
+      nodeline = list()
+      elemline = list()
+      while ligneIncomplete:  # compléter la ligne de points
+        nodeline.append(idNode)
+        allNodeIds.remove(idNode)
+        elemline.append(elem)
+        nodes = maillageSupport.GetElemNodes(elem)
+        i_aux = nodes.index(idNode)  # repérer l'index du noeud courant (i_aux) dans l'élément quadrangle (0 a 3)
+        if agauche:              # déterminer le noeud suivant (j_aux) et celui opposé (k_aux) dans le quadrangle
+          if i_aux < 3:
+            j_aux = i_aux+1
+          else:
+            j_aux = 0
+          if j_aux < 3:
+            k_aux = j_aux+1
+          else:
+            k_aux = 0
+        else:
+          if i_aux > 0:
+            j_aux = i_aux -1
+          else:
+            j_aux = 3
+          if j_aux > 0:
+            k_aux = j_aux -1
+          else:
+            k_aux = 3
+        isuiv = nodes[j_aux]   # noeud suivant
+        iapres = nodes[k_aux]  # noeud opposé
+        if debutLigne:
+          debutLigne = False
+          # précédent a trouver, dernière ligne : précédent au lieu de suivant
+          if agauche:
+            if i_aux > 0:
+              iprec = nodes[i_aux -1]
+            else:
+              iprec = nodes[3]
+            idStart = iprec
+            elems3 = maillageSupport.GetNodeInverseElements(iprec)
+            if len(elems3) == 1: # autre coin
+              ligneFinale = True
             else:
-                agauche = True
-            ligneIncomplete = True  # on commence une ligne de points
-            debutLigne = True
-            nodeline = []
-            elemline = []
-            while ligneIncomplete:  # compléter la ligne de points
-                nodeline.append(idNode)
-                allNodeIds.remove(idNode)
-                elemline.append(elem)
-                nodes = maillageSupport.GetElemNodes(elem)
-                i = nodes.index(idNode)  # repérer l'index du noeud courant (i) dans l'élément quadrangle (0 a 3)
-                if agauche:              # déterminer le noeud suivant (j) et celui opposé (k) dans le quadrangle
-                    if i < 3:
-                        j = i+1
-                    else:
-                        j = 0
-                    if j < 3:
-                        k = j+1
-                    else:
-                        k = 0
-                else:
-                    if i > 0:
-                        j = i -1
-                    else:
-                        j = 3
-                    if j > 0:
-                        k = j -1
-                    else:
-                        k = 3
-                isuiv = nodes[j]   # noeud suivant
-                iapres = nodes[k]  # noeud opposé
-                if debutLigne:
-                    debutLigne = False
-                    # précédent a trouver, dernière ligne : précédent au lieu de suivant
-                    if agauche:
-                        if i > 0:
-                            iprec = nodes[i -1]
-                        else:
-                            iprec = nodes[3]
-                        idStart = iprec
-                        elems3 = maillageSupport.GetNodeInverseElements(iprec)
-                        if len(elems3) == 1: # autre coin
-                            ligneFinale = True
-                        else:
-                            for elem3 in elems3:
-                                if elem3 != elem:
-                                    elemStart = elem3
-                                    break
-                #print nodes, idNode, isuiv, iapres
-                elems1 = maillageSupport.GetNodeInverseElements(isuiv)
-                elems2 = maillageSupport.GetNodeInverseElements(iapres)
-                ligneIncomplete = False
-                for elem2 in elems2:
-                    if elems1.count(elem2) and elem2 != elem:
-                        ligneIncomplete = True
-                        idNode = isuiv
-                        elem = elem2
-                        break
-                if not  ligneIncomplete:
-                    nodeline.append(isuiv)
-                    allNodeIds.remove(isuiv)
-            logging.debug("nodeline %s", nodeline)
-            logging.debug("elemline %s", elemline)
-            nodelines.append(nodeline)
-             
-        # on a constitué une liste de lignes de points connexes
-        logging.debug("dimensions [%s, %s]", len(nodelines),  len(nodeline))
-    
-    return nodelines
-
-def createNewMeshesFromCorner(maillageSupport, listOfCorners):
-    
-    """ Cette fonction permet de générer un nouveau maillage plus facile à
-        utiliser. On démarre d'un coin et on récupère les trois éléments
-        auquel le noeud appartient. Grâce à un filtre 'coplanar' sur les trois
-        éléments, on peut générer des faces distinctes.
-    """
-    
-    logging.info("start")
-    
-    tmp = []
-    listOfNewMeshes = []
-    for corner in listOfCorners:
-        elems = maillageSupport.GetNodeInverseElements(corner)
-        for i, elem in enumerate(elems):
-            # --- Filtre selon le critère 'coplanar' --- #
-            critere = smesh.GetCriterion(SMESH.FACE, SMESH.FT_CoplanarFaces, \
-                                         SMESH.FT_Undefined, elem, SMESH.FT_Undefined, SMESH.FT_Undefined, 30)
-            filtre = smesh.GetFilterFromCriteria([critere])
-            grp = maillageSupport.GroupOnFilter(SMESH.FACE, 'grp', filtre)
-            # On copie le maillage en fonction du filtre
-            msh = smesh.CopyMesh(grp, 'new_{0}'.format(i + 1), False, True)
-            # On stocke l'ensemble des noeuds du maillage dans tmp
-            # On ajoute le maillage à la liste des nouveaux maillages
-            # seulement s'il n'y est pas déjà
-            tmp.append(msh.GetNodesId())
-            if tmp.count(msh.GetNodesId()) <= 1:
-                listOfNewMeshes.append(msh)
-    return listOfNewMeshes
\ No newline at end of file
+              for elem3 in elems3:
+                if elem3 != elem:
+                  elemStart = elem3
+                  break
+
+        #print nodes, idNode, isuiv, iapres
+        elems1 = maillageSupport.GetNodeInverseElements(isuiv)
+        elems2 = maillageSupport.GetNodeInverseElements(iapres)
+        ligneIncomplete = False
+        for elem2 in elems2:
+          if elems1.count(elem2) and elem2 != elem:
+            ligneIncomplete = True
+            idNode = isuiv
+            elem = elem2
+            break
+        if not  ligneIncomplete:
+          nodeline.append(isuiv)
+          allNodeIds.remove(isuiv)
+      logging.debug("nodeline %s", nodeline)
+      logging.debug("elemline %s", elemline)
+      nodelines.append(nodeline)
+
+    # on a constitué une liste de lignes de points connexes
+    logging.debug("dimensions [%s, %s]", len(nodelines),  len(nodeline))
+
+  return nodelines
+
+def createNewMeshesFromCorner(maillageSupport, listOfCorners, \
+                              nro_cas=None):
+
+  """ Cette fonction permet de générer un nouveau maillage plus facile à
+      utiliser. On démarre d'un coin et on récupère les trois éléments
+      auquel le noeud appartient. Grâce à un filtre 'coplanar' sur les trois
+      éléments, on peut générer des faces distinctes.
+  """
+
+  logging.info("start")
+
+  tmp = list()
+  listOfNewMeshes = list()
+  n_msh = -1
+  for corner in listOfCorners:
+    elems = maillageSupport.GetNodeInverseElements(corner)
+    for elem in elems:
+      # --- Filtre selon le critère 'coplanar' --- #
+      critere = smesh.GetCriterion(SMESH.FACE, SMESH.FT_CoplanarFaces, \
+                                    SMESH.FT_Undefined, elem, SMESH.FT_Undefined, SMESH.FT_Undefined, 30)
+      filtre = smesh.GetFilterFromCriteria([critere])
+      n_msh += 1
+      nom = "coin_{}".format(n_msh)
+      grp = maillageSupport.GroupOnFilter(SMESH.FACE, nom, filtre)
+      # On copie le maillage en fonction du filtre
+      msh = smesh.CopyMesh(grp, nom, False, True)
+      putName(msh, nom, i_pref=nro_cas)
+      # On stocke l'ensemble des noeuds du maillage dans tmp
+      # On ajoute le maillage à la liste des nouveaux maillages
+      # seulement s'il n'y est pas déjà
+      tmp.append(msh.GetNodesId())
+      if ( tmp.count(msh.GetNodesId()) <= 1 ):
+        putName(msh, "Face", len(listOfNewMeshes), nro_cas)
+        listOfNewMeshes.append(msh)
+
+  return listOfNewMeshes
index 479d8bf2d329548c369498d673d2b69643b62044..c797d099a310e44c37cbd2cc1d91679dcaa7ff02 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""edges de bord, faces défaut à respecter"""
 
 import logging
 
+import SMESH
+
 from .geomsmesh import geompy
 from .geomsmesh import smesh
-import SMESH
+from .geomsmesh import geomPublish
 
+from . import initLog
 from .putName import putName
-  
-def mailleAretesEtJonction(internalBoundary, aretesVivesCoupees, lgAretesVives):
-  """
-  edges de bord, faces défaut à respecter
-  """
+
+def mailleAretesEtJonction (internalBoundary, aretesVivesCoupees, lgAretesVives, \
+                            nro_cas=None):
+  """edges de bord, faces défaut à respecter"""
   logging.info('start')
+  logging.info("Pour le cas n°%s", nro_cas)
 
-  aFilterManager = smesh.CreateFilterManager()
-  nbAdded, internalBoundary, _NoneGroup = internalBoundary.MakeBoundaryElements( SMESH.BND_1DFROM2D, '', '', 0, [  ])
-  criteres = []
+  _ = smesh.CreateFilterManager()
+  _, internalBoundary, _NoneGroup = internalBoundary.MakeBoundaryElements( SMESH.BND_1DFROM2D, '', '', 0, [  ])
+  criteres = list()
   unCritere = smesh.GetCriterion(SMESH.EDGE,SMESH.FT_FreeBorders,SMESH.FT_Undefined,0)
   criteres.append(unCritere)
   filtre = smesh.GetFilterFromCriteria(criteres)
   bordsLibres = internalBoundary.MakeGroupByFilter( 'bords', filtre )
-  smesh.SetName(bordsLibres, 'bordsLibres')
+  putName(bordsLibres, 'bordsLibres', i_pref=nro_cas)
 
-  # --- pour aider l'algo hexa-tetra à ne pas mettre de pyramides à l'exterieur des volumes repliés sur eux-mêmes
+  # --- pour aider l'algo hexa-tetra à ne pas mettre de pyramides à l'extérieur des volumes repliés sur eux-mêmes
   #     on désigne les faces de peau en quadrangles par le groupe "skinFaces"
 
   skinFaces = internalBoundary.CreateEmptyGroup( SMESH.FACE, 'skinFaces' )
-  nbAdd = skinFaces.AddFrom( internalBoundary.GetMesh() )
+  _ = skinFaces.AddFrom( internalBoundary.GetMesh() )
 
   # --- maillage des éventuelles arêtes vives entre faces reconstruites
-  
+
   grpAretesVives = None
-  if len(aretesVivesCoupees) > 0:
+  if aretesVivesCoupees:
+
     aretesVivesC = geompy.MakeCompound(aretesVivesCoupees)
+    geomPublish(initLog.always, aretesVivesC, "aretesVives", nro_cas)
     meshAretesVives = smesh.Mesh(aretesVivesC)
     algo1d = meshAretesVives.Segment()
+    putName(algo1d.GetSubMesh(), "aretesVives", i_pref=nro_cas)
     hypo1d = algo1d.LocalLength(lgAretesVives,[],1e-07)
-    putName(algo1d.GetSubMesh(), "aretesVives")
-    putName(algo1d, "algo1d_aretesVives")
-    putName(hypo1d, "hypo1d_aretesVives")
-    isDone = meshAretesVives.Compute()
-    logging.info("aretesVives fini")
+    putName(hypo1d, "aretesVives={}".format(lgAretesVives), i_pref=nro_cas)
+
+    is_done = meshAretesVives.Compute()
+    text = "meshAretesVives.Compute"
+    if is_done:
+      logging.info(text+" OK")
+    else:
+      text = "Erreur au calcul du maillage.\n" + text
+      logging.info(text)
+      raise Exception(text)
+
     grpAretesVives = meshAretesVives.CreateEmptyGroup( SMESH.EDGE, 'grpAretesVives' )
-    nbAdd = grpAretesVives.AddFrom( meshAretesVives.GetMesh() )
+    _ = grpAretesVives.AddFrom( meshAretesVives.GetMesh() )
 
-  return (internalBoundary, bordsLibres, grpAretesVives)
\ No newline at end of file
+  return (internalBoundary, bordsLibres, grpAretesVives)
index 82d4d5e9ff2032a6e86bc6795d7abfcd8be15ad8..0f545e6f556d61f896c72e60ced1b15445b14fd5 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""maillage faces de fissure"""
 
 import logging
 
-from .geomsmesh import geompy
-from .geomsmesh import smesh
-from salome.smesh import smeshBuilder
 import SMESH
+from salome.smesh import smeshBuilder
+
+from .geomsmesh import smesh
 
 from .putName import putName
-  
-def mailleFacesFissure(faceFissureExterne, edgesPipeFissureExterneC, edgesPeauFissureExterneC,
-                        meshPipeGroups, areteFaceFissure, rayonPipe, nbsegRad):
-  """
-  maillage faces de fissure
-  """
+
+def mailleFacesFissure(faceFissureExterne, \
+                       edgesPipeFissureExterneC, edgesPeauFissureExterneC, \
+                       edgeFaceFissGroup, areteFaceFissure, rayonPipe, nbsegRad, \
+                       mailleur="MeshGems", nro_cas=None):
+  """maillage faces de fissure"""
   logging.info('start')
+  logging.info("Maillage avec %s pour le cas n°%s", mailleur, nro_cas)
 
   meshFaceFiss = smesh.Mesh(faceFissureExterne)
-  algo2d = meshFaceFiss.Triangle(algo=smeshBuilder.NETGEN_1D2D)
-  hypo2d = algo2d.Parameters()
-  hypo2d.SetMaxSize( areteFaceFissure )
-  hypo2d.SetSecondOrder( 0 )
-  hypo2d.SetOptimize( 1 )
-  hypo2d.SetFineness( 2 )
-  hypo2d.SetMinSize( rayonPipe/float(nbsegRad) )
-  hypo2d.SetQuadAllowed( 0 )
-  putName(algo2d.GetSubMesh(), "faceFiss")
-  putName(algo2d, "algo2d_faceFiss")
-  putName(hypo2d, "hypo2d_faceFiss")
-  
+  putName(meshFaceFiss.GetMesh(), "faceFiss", i_pref=nro_cas)
+  if ( mailleur == "MeshGems"):
+    algo2d = meshFaceFiss.Triangle(algo=smeshBuilder.MG_CADSurf)
+    hypo2d = algo2d.Parameters()
+    hypo2d.SetPhySize( areteFaceFissure )
+    hypo2d.SetMinSize( rayonPipe/float(nbsegRad) )
+    hypo2d.SetMaxSize( areteFaceFissure*3. )
+    hypo2d.SetChordalError( areteFaceFissure*0.25 )
+    hypo2d.SetVerbosity( 0 )
+  else:
+    algo2d = meshFaceFiss.Triangle(algo=smeshBuilder.NETGEN_1D2D)
+    hypo2d = algo2d.Parameters()
+    hypo2d.SetMaxSize( areteFaceFissure )
+    hypo2d.SetSecondOrder( 0 )
+    hypo2d.SetOptimize( 1 )
+    hypo2d.SetFineness( 2 )
+    hypo2d.SetMinSize( rayonPipe/float(nbsegRad) )
+    hypo2d.SetChordalErrorEnabled (True)
+    hypo2d.SetChordalError( areteFaceFissure*0.25 )
+    hypo2d.SetUseSurfaceCurvature (True)
+    hypo2d.SetQuadAllowed( 0 )
+  putName(hypo2d, "faceFiss", i_pref=nro_cas)
+
+  logging.info("UseExisting1DElements sur la géométrie '%s' avec les mailles de '%s'", \
+                edgesPipeFissureExterneC.GetName(), edgeFaceFissGroup.GetName())
   algo1d = meshFaceFiss.UseExisting1DElements(geom=edgesPipeFissureExterneC)
-  hypo1d = algo1d.SourceEdges([ meshPipeGroups['edgeFaceFissGroup'] ],0,0)
-  putName(algo1d.GetSubMesh(), "edgeFissPeau")
-  putName(algo1d, "algo1d_edgeFissPeau")
-  putName(hypo1d, "hypo1d_edgeFissPeau")
-  
-  isDone = meshFaceFiss.Compute()
-  logging.info("meshFaceFiss fini")
+  putName(algo1d.GetSubMesh(), "edgeFissPeau", i_pref=nro_cas)
+  hypo1d = algo1d.SourceEdges([ edgeFaceFissGroup ],0,0)
+  putName(hypo1d, "SourceEdges_edgeFissPeau", i_pref=nro_cas)
 
-  grpFaceFissureExterne = meshFaceFiss.GroupOnGeom(faceFissureExterne, "fisOutPi", SMESH.FACE)
-  grpEdgesPeauFissureExterne = meshFaceFiss.GroupOnGeom(edgesPeauFissureExterneC,'edgesPeauFissureExterne',SMESH.EDGE)
   grpEdgesPipeFissureExterne = meshFaceFiss.GroupOnGeom(edgesPipeFissureExterneC,'edgesPipeFissureExterne',SMESH.EDGE)
+  grpEdgesPeauFissureExterne = meshFaceFiss.GroupOnGeom(edgesPeauFissureExterneC,'edgesPeauFissureExterne',SMESH.EDGE)
+  grpFaceFissureExterne = meshFaceFiss.GroupOnGeom(faceFissureExterne, "fisOutPi", SMESH.FACE)
+
+  is_done = meshFaceFiss.Compute()
+  text = "meshFaceFiss.Compute"
+  if is_done:
+    logging.info(text+" OK")
+  else:
+    text = "Erreur au calcul du maillage.\n" + text
+    logging.info(text)
+    raise Exception(text)
 
-  return (meshFaceFiss, grpFaceFissureExterne, grpEdgesPeauFissureExterne, grpEdgesPipeFissureExterne)
\ No newline at end of file
+  return (meshFaceFiss, grpFaceFissureExterne, grpEdgesPeauFissureExterne, grpEdgesPipeFissureExterne)
index 862245b0b6d0eaa2f11ef34ce2796eec2d226b60..79505c77776a2c7703d45ec4cac68034b9578492 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
 
+"""maillage faces de peau"""
+
 import logging
 
+import SMESH
+from salome.smesh import smeshBuilder
+
 from .geomsmesh import geompy
-from .geomsmesh import geomPublish
 from .geomsmesh import geomPublishInFather
-from . import initLog
 from .geomsmesh import smesh
-from salome.smesh import smeshBuilder
-import SMESH
+
+from . import initLog
 
 from .putName import putName
 
-def mailleFacesPeau(partitionsPeauFissFond, idFillingFromBout, facesDefaut,
-                    facesPeaux, edCircPeau, ptCircPeau, gpedgeBord, gpedgeVifs, edFissPeau,
-                    bordsLibres, grpEdgesPeauFissureExterne, grpAretesVives,
-                    edgesCircPipeGroup, dmoyen, rayonPipe, nbsegRad):
-  """
-  maillage faces de peau
-  """
+def mailleFacesPeau(partitionsPeauFissFond, idFillingFromBout, facesDefaut, \
+                    facesPeaux, edCircPeau, gpedgeBord, gpedgeVifs, edFissPeau, \
+                    bordsLibres, grpEdgesPeauFissureExterne, grpAretesVives, \
+                    edgesCircPipeGroup, dmoyen, rayonPipe, nbsegRad, \
+                    mailleur="MeshGems", nro_cas=None):
+  """maillage faces de peau"""
   logging.info('start')
+  logging.info("Maillage avec %s pour le cas n°%s", mailleur, nro_cas)
+
   nbFacesFilling = len(partitionsPeauFissFond)
-  boutFromIfil = [None for i in range(nbFacesFilling)]
-  if idFillingFromBout[0] != idFillingFromBout[1]: # repérage des extremites du pipe quand elles débouchent sur des faces différentes
+  boutFromIfil = [None for _ in range(nbFacesFilling)]
+  # repérage des extremites du pipe quand elles débouchent sur des faces différentes :
+  if ( idFillingFromBout[0] != idFillingFromBout[1] ):
     boutFromIfil[idFillingFromBout[0]] = 0
     boutFromIfil[idFillingFromBout[1]] = 1
-  
-  logging.debug("---------------------------- maillage faces de peau --------------")
-  meshesFacesPeau = []
+
+  logging.info("---------------------------- maillage faces de peau --------------")
+  logging.info("nbFacesFilling = %d", nbFacesFilling)
+  meshesFacesPeau = list()
   for ifil in range(nbFacesFilling):
-    meshFacePeau = None
+
     if partitionsPeauFissFond[ifil] is None: # face de peau maillage sain intacte
+      logging.info("face de peau %d intacte", ifil)
+      facePeau = facesDefaut[ifil]
+    else:
+      logging.info("face de peau %d coupée par la fissure", ifil)
+      # pour chaque face : la face de peau finale a mailler (percée des faces débouchantes)
+      facePeau = facesPeaux[ifil]
+    meshFacePeau = smesh.Mesh(facePeau)
+    putName(meshFacePeau.GetMesh(), "facePeau", ifil, nro_cas)
 
-      logging.debug("meshFacePeau %d intacte", ifil)
+    if ( mailleur == "MeshGems"):
+      algo2d = meshFacePeau.Triangle(algo=smeshBuilder.MG_CADSurf)
+      hypo2d = algo2d.Parameters()
+      hypo2d.SetPhySize( dmoyen )
+      hypo2d.SetMinSize( rayonPipe/float(nbsegRad) )
+      hypo2d.SetMaxSize( dmoyen*2. )
+      hypo2d.SetChordalError( dmoyen*0.25 )
+      hypo2d.SetVerbosity( 0 )
+    else:
+      algo2d = meshFacePeau.Triangle(algo=smeshBuilder.NETGEN_1D2D)
+      hypo2d = algo2d.Parameters()
+      hypo2d.SetMaxSize( dmoyen )
+      hypo2d.SetOptimize( 1 )
+      hypo2d.SetFineness( 2 )
+      hypo2d.SetMinSize( rayonPipe/float(nbsegRad) )
+      hypo2d.SetChordalErrorEnabled (True)
+      hypo2d.SetChordalError( dmoyen*0.25 )
+      hypo2d.SetUseSurfaceCurvature (True)
+      hypo2d.SetQuadAllowed( 0 )
+    putName(hypo2d, "{}_2d_facePeau".format(mailleur), ifil, nro_cas)
+
+    if partitionsPeauFissFond[ifil] is None: # face de peau maillage sain intacte
+
+      logging.debug("face de peau %d intacte", ifil)
       # --- edges de bord de la face de filling
       filling = facesDefaut[ifil]
       edgesFilling = geompy.ExtractShapes(filling, geompy.ShapeType["EDGE"], False)
-      groupEdgesBordPeau = geompy.CreateGroup(filling, geompy.ShapeType["EDGE"])
-      geompy.UnionList(groupEdgesBordPeau, edgesFilling)
-      geomPublishInFather(initLog.debug,filling, groupEdgesBordPeau , "EdgesBords")
-      
-      meshFacePeau = smesh.Mesh(facesDefaut[ifil])
-      
-      algo1d = meshFacePeau.UseExisting1DElements(geom=groupEdgesBordPeau)
+      gpedgeBord[ifil] = geompy.CreateGroup(filling, geompy.ShapeType["EDGE"])
+      geompy.UnionList(gpedgeBord[ifil], edgesFilling)
+      geomPublishInFather(initLog.always, filling, gpedgeBord[ifil], "EdgesBords", nro_cas)
+
+      logging.info("UseExisting1DElements sur la géométrie '%s' avec les mailles de '%s'", \
+                    gpedgeBord[ifil].GetName(), bordsLibres.GetName())
+      algo1d = meshFacePeau.UseExisting1DElements(geom=gpedgeBord[ifil])
+      putName(algo1d.GetSubMesh(), "bordsLibres", ifil, nro_cas)
       hypo1d = algo1d.SourceEdges([ bordsLibres ],0,0)
-      putName(algo1d.GetSubMesh(), "bordsLibres", ifil)
-      putName(algo1d, "algo1d_bordsLibres", ifil)
-      putName(hypo1d, "hypo1d_bordsLibres", ifil)
-      
+      putName(hypo1d, "SourceEdges_{}".format(bordsLibres.GetName()), ifil, nro_cas)
+
     else:
-      
-      logging.debug("meshFacePeau %d coupée par la fissure", ifil)
-      facePeau           = facesPeaux[ifil] # pour chaque face : la face de peau finale a mailler (percée des faces débouchantes)
-      edgesCircPeau      = edCircPeau[ifil] # pour chaque face de peau : [subshape edge circulaire aux débouchés du pipe]
-      verticesCircPeau   = ptCircPeau[ifil] # pour chaque face de peau : [subshape point sur edge circulaire aux débouchés du pipe]
-      groupEdgesBordPeau = gpedgeBord[ifil] # pour chaque face de peau : groupe subshape des edges aux bords liés à la partie saine
-      bordsVifs          = gpedgeVifs[ifil] # pour chaque face de peau : groupe subshape des edges aux bords correspondant à des arêtes vives
-      edgesFissurePeau   = edFissPeau[ifil] # pour chaque face de peau : [subshape edge en peau des faces de fissure externes]
-
-      meshFacePeau = smesh.Mesh(facePeau)
-      
-      algo1d = meshFacePeau.UseExisting1DElements(geom=groupEdgesBordPeau)
+
+      logging.info("face de peau %d coupée par la fissure", ifil)
+      # edCircPeau[ifil] # pour chaque face de peau : [subshape edge circulaire aux débouchés du pipe]
+      # gpedgeBord[ifil] : pour chaque face de peau : groupe subshape des edges aux bords liés à la partie saine
+      # gpedgeVifs[ifil] : pour chaque face de peau : groupe subshape des edges aux bords correspondant à des arêtes vives
+      # edFissPeau[ifil] : pour chaque face de peau : [subshape edge en peau des faces de fissure externes]
+
+      logging.info("UseExisting1DElements sur la géométrie '%s' avec les mailles de '%s'", \
+                    gpedgeBord[ifil].GetName(), bordsLibres.GetName())
+      algo1d = meshFacePeau.UseExisting1DElements(geom=gpedgeBord[ifil])
+      putName(algo1d.GetSubMesh(), "bordsLibres", ifil, nro_cas)
       hypo1d = algo1d.SourceEdges([ bordsLibres ],0,0)
-      putName(algo1d.GetSubMesh(), "bordsLibres", ifil)
-      putName(algo1d, "algo1d_bordsLibres", ifil)
-      putName(hypo1d, "hypo1d_bordsLibres", ifil)
-      
-      algo1d = meshFacePeau.UseExisting1DElements(geom=geompy.MakeCompound(edgesFissurePeau))
+      putName(hypo1d, "SourceEdges_{}".format(bordsLibres.GetName()), i_pref=nro_cas)
+
+      objet = geompy.MakeCompound(edFissPeau[ifil])
+      geomPublishInFather(initLog.always, facePeau, objet, "edFissPeau_{}".format(ifil))
+      logging.info("UseExisting1DElements sur la géométrie '%s' avec les mailles de '%s'", \
+                    objet.GetName(), grpEdgesPeauFissureExterne.GetName())
+      algo1d = meshFacePeau.UseExisting1DElements(geom=objet)
+      putName(algo1d.GetSubMesh(), objet.GetName(), i_pref=nro_cas)
       hypo1d = algo1d.SourceEdges([ grpEdgesPeauFissureExterne ],0,0)
-      putName(algo1d.GetSubMesh(), "edgePeauFiss", ifil)
-      putName(algo1d, "algo1d_edgePeauFiss", ifil)
-      putName(hypo1d, "hypo1d_edgePeauFiss", ifil)
-      
-      if bordsVifs is not None:
-        algo1d = meshFacePeau.UseExisting1DElements(geom=bordsVifs)
+      putName(hypo1d, "SourceEdges_{}".format(grpEdgesPeauFissureExterne.GetName()), i_pref=nro_cas)
+
+      if gpedgeVifs[ifil] is not None:
+        logging.info("UseExisting1DElements sur la géométrie '%s' avec les mailles de '%s'", \
+                      gpedgeVifs[ifil].GetName(), grpAretesVives.GetName())
+        algo1d = meshFacePeau.UseExisting1DElements(geom=gpedgeVifs[ifil])
+        putName(algo1d.GetSubMesh(), "gpedgeVifs", ifil, nro_cas)
         hypo1d = algo1d.SourceEdges([ grpAretesVives ],0,0)
-        putName(algo1d.GetSubMesh(), "bordsVifs", ifil)
-        putName(algo1d, "algo1d_bordsVifs", ifil)
-        putName(hypo1d, "hypo1d_bordsVifs", ifil)
-        
-      for i, edgeCirc in enumerate(edgesCircPeau):
+        putName(hypo1d, "SourceEdges_{}".format(grpAretesVives.GetName()), i_pref=nro_cas)
+
+      for i_aux, edgeCirc in enumerate(edCircPeau[ifil]):
+        texte = "i_aux = {}".format(i_aux)
+        logging.info(texte)
         if edgeCirc is not None:
-          algo1d = meshFacePeau.UseExisting1DElements(geom=edgeCirc)
           if boutFromIfil[ifil] is None:
-            hypo1d = algo1d.SourceEdges([ edgesCircPipeGroup[i] ],0,0)
+            groupe = edgesCircPipeGroup[i_aux]
           else:
-            hypo1d = algo1d.SourceEdges([ edgesCircPipeGroup[boutFromIfil[ifil]] ],0,0)
-          name = "cercle%d"%i
-          putName(algo1d.GetSubMesh(), name, ifil)
-          putName(algo1d, "algo1d_" + name, ifil)
-          putName(hypo1d, "hypo1d_" + name, ifil)
-   
-    algo2d = meshFacePeau.Triangle(algo=smeshBuilder.NETGEN_1D2D)
-    hypo2d = algo2d.Parameters()
-    hypo2d.SetMaxSize( dmoyen )
-    hypo2d.SetOptimize( 1 )
-    hypo2d.SetFineness( 2 )
-    hypo2d.SetMinSize( rayonPipe/float(nbsegRad) )
-    hypo2d.SetQuadAllowed( 0 )
-    putName(algo2d.GetSubMesh(), "facePeau", ifil)
-    putName(algo2d, "algo2d_facePeau", ifil)
-    putName(hypo2d, "hypo2d_facePeau", ifil)
-      
-    isDone = meshFacePeau.Compute()
-    logging.info("meshFacePeau %d fini", ifil)
-    GroupFaces = meshFacePeau.CreateEmptyGroup( SMESH.FACE, "facePeau%d"%ifil )
-    nbAdd = GroupFaces.AddFrom( meshFacePeau.GetMesh() )
+            groupe = edgesCircPipeGroup[boutFromIfil[ifil]]
+          logging.info("UseExisting1DElements sur la géométrie '%s' avec les mailles de '%s'", \
+                        edgeCirc.GetName(), groupe.GetName())
+          algo1d = meshFacePeau.UseExisting1DElements(geom=edgeCirc) # addToStudy() failed ?
+          putName(algo1d.GetSubMesh(), groupe.GetName(), i_pref=nro_cas)
+          hypo1d = algo1d.SourceEdges([ groupe ],0,0)
+          putName(hypo1d, "SourceEdges_{}".format(groupe.GetName()), i_pref=nro_cas)
+
+    is_done = meshFacePeau.Compute()
+    text = "meshFacePeau {} .Compute".format(ifil)
+    if is_done:
+      logging.info(text+" OK")
+    else:
+      text = "Erreur au calcul du maillage.\n" + text
+      logging.info(text)
+      raise Exception(text)
+
+    groupe_des_faces = meshFacePeau.CreateEmptyGroup( SMESH.FACE, "facePeau%d"%ifil )
+    _ = groupe_des_faces.AddFrom( meshFacePeau.GetMesh() )
     meshesFacesPeau.append(meshFacePeau)
 
-  return meshesFacesPeau
\ No newline at end of file
+  return meshesFacesPeau
index 2806d19de7ebabd4444d23991d12811f3949fa65..f2863d5e4be869b31b3055496045897b7fe80cbd 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Maillage du bloc partitionné"""
 
 import logging
-from .geomsmesh import geompy
-from .geomsmesh import smesh
-from salome.smesh import smeshBuilder
+
 import SMESH
+from salome.smesh import smeshBuilder
 from salome.StdMeshers import StdMeshersBuilder
+
+from .geomsmesh import geompy
+from .geomsmesh import smesh
+
 from .putName import putName
 
 # -----------------------------------------------------------------------------
-# --- maillage du bloc partitionne
-
-def meshBlocPart(blocPartition, faceFissure, tore, centres, edges, diams, circles, faces,
-                gencnt, facefissoutore, edgeext, facesExternes, facesExtBloc, facesExtElli,
-                aretesInternes, internalBoundary, ellipsoidep, sharedFaces, sharedEdges, edgesBords,
-                nbsegExt, nbsegGen, nbsegRad, scaleRad, reverses, reverext, nbsegCercle, nbsegFis, dmoyen, lensegEllipsoide):
-  """
-  Maillage du bloc partitionné
-  TODO: a completer
-  """
+
+def meshBlocPart(blocPartition, faceFissure, tore, centres, edges, diams, circles, faces, \
+                gencnt, facefissoutore, edgeext, facesExternes, facesExtBloc, facesExtElli, \
+                aretesInternes, internalBoundary, ellipsoidep, sharedFaces, sharedEdges, edgesBords, \
+                nbsegExt, nbsegGen, nbsegRad, scaleRad, reverses, reverext, nbsegCercle, nbsegFis, dmoyen, lensegEllipsoide, \
+                mailleur="MeshGems", nro_cas=None):
+  """Maillage du bloc partitionné"""
   logging.info('start')
+  logging.info("Maillage avec %s pour le cas n°%s", mailleur, nro_cas)
 
   # --- edges de bord à respecter
 
-  aFilterManager = smesh.CreateFilterManager()
-  nbAdded, internalBoundary, _NoneGroup = internalBoundary.MakeBoundaryElements( SMESH.BND_1DFROM2D, '', '', 0, [  ])
-  criteres = []
+  _ = smesh.CreateFilterManager()
+  _, internalBoundary, _NoneGroup = internalBoundary.MakeBoundaryElements( SMESH.BND_1DFROM2D, '', '', 0, [ ])
+  criteres = list()
   unCritere = smesh.GetCriterion(SMESH.EDGE,SMESH.FT_FreeBorders,SMESH.FT_Undefined,0)
   criteres.append(unCritere)
   filtre = smesh.GetFilterFromCriteria(criteres)
   bordsLibres = internalBoundary.MakeGroupByFilter( 'bords', filtre )
-  smesh.SetName(bordsLibres, 'bordsLibres')
+  putName(bordsLibres, 'bordsLibres', i_pref=nro_cas)
 
   # --- maillage bloc
 
   bloc1 = smesh.Mesh(blocPartition)
 
-  for i in range(len(sharedFaces)):
-    algo2d = bloc1.Triangle(algo=smeshBuilder.NETGEN, geom=sharedFaces[i])
+  for i_aux, sharedFaces_i in enumerate(sharedFaces):
+    algo2d = bloc1.Triangle(algo=smeshBuilder.NETGEN, geom=sharedFaces_i)
+    putName(algo2d.GetSubMesh(), "sharedFaces", i_aux, nro_cas)
     hypo2d = algo2d.Parameters(which=smesh.SIMPLE)
     hypo2d.SetLocalLength(lensegEllipsoide)
     hypo2d.LengthFromEdges()
     hypo2d.SetAllowQuadrangles(0)
-    putName(algo2d.GetSubMesh(), "sharedFaces", i)
-    putName(algo2d, "algo2d_sharedFaces", i)
-    putName(hypo2d, "hypo2d_sharedFaces", i)
+    putName(hypo2d, "sharedFaces", i_aux, nro_cas)
 
-  for i in range(len(sharedEdges)):
-    algo1d = bloc1.Segment(geom=sharedEdges[i])
+  for i_aux, sharedEdges_i in enumerate(sharedEdges):
+    algo1d = bloc1.Segment(geom=sharedEdges_i)
+    putName(algo1d.GetSubMesh(), "sharedEdges", i_aux, nro_cas)
     hypo1d = algo1d.LocalLength(lensegEllipsoide)
-    putName(algo1d.GetSubMesh(), "sharedEdges", i)
-    putName(algo1d, "algo1d_sharedEdges", i)
-    putName(hypo1d, "hypo1d_sharedEdges", i)
+    putName(hypo1d, "sharedEdges={}".format(lensegEllipsoide), i_aux, nro_cas)
 
   declareAlgoEllipsoideFirst = False
   if declareAlgoEllipsoideFirst:
     algo3d = bloc1.Tetrahedron(algo=smeshBuilder.NETGEN,geom=ellipsoidep)
+    putName(algo3d.GetSubMesh(), "ellipsoide", i_pref=nro_cas)
     hypo3d = algo3d.MaxElementVolume(1000.0)
-    putName(algo3d.GetSubMesh(), "ellipsoide")
-    putName(algo3d, "algo3d_ellipsoide")
-    putName(hypo3d, "hypo3d_ellipsoide")
+    putName(hypo3d, "ellipsoide", i_pref=nro_cas)
 
   algo3d = bloc1.Prism(geom=tore)
+  putName(algo3d.GetSubMesh(), "tore", i_pref=nro_cas)
   algo2d = bloc1.Quadrangle(geom=tore)
   algo1d = bloc1.Segment(geom=tore)
   hypo1d = algo1d.NumberOfSegments(nbsegGen)
-  putName(algo3d.GetSubMesh(), "tore")
-  putName(algo3d, "algo3d_tore")
-  putName(algo2d, "algo2d_tore")
-  putName(algo1d, "algo1d_tore")
-  putName(hypo1d, "hypo1d_tore")
-
-  for i in range(len(faces)):
-    algo2d = bloc1.Quadrangle(geom=faces[i])
+  putName(hypo1d, "tore={}".format(nbsegGen), i_pref=nro_cas)
+
+  for i_aux, faces_i in enumerate(faces):
+    algo2d = bloc1.Quadrangle(geom=faces_i)
+    putName(algo2d.GetSubMesh(), "faces", i_aux, nro_cas)
     hypo2d = smesh.CreateHypothesis('QuadrangleParams')
-    hypo2d.SetTriaVertex( geompy.GetSubShapeID(blocPartition,centres[i]) )
+    hypo2d.SetTriaVertex( geompy.GetSubShapeID(blocPartition,centres[i_aux]) )
     hypo2d.SetQuadType( StdMeshersBuilder.QUAD_STANDARD )
-    status = bloc1.AddHypothesis(hypo2d,faces[i])
-    putName(algo2d.GetSubMesh(), "faces", i)
-    putName(algo2d, "algo2d_faces", i)
-    putName(hypo2d, "hypo2d_faces", i)
-
-  for i in range(len(edges)):
-    algo1d = bloc1.Segment(geom=edges[i])
-    if reverses[i] > 0:
-      hypo1d = algo1d.NumberOfSegments(nbsegRad, scaleRad,[ geompy.GetSubShapeID(blocPartition,edges[i]) ])
+    _ = bloc1.AddHypothesis(hypo2d,faces_i)
+    putName(hypo2d, "faces", i_aux, nro_cas)
+
+  for i_aux, edges_i in enumerate(edges):
+    algo1d = bloc1.Segment(geom=edges_i)
+    putName(algo1d.GetSubMesh(), "edges", i_aux, nro_cas)
+    if reverses[i_aux] > 0:
+      hypo1d = algo1d.NumberOfSegments(nbsegRad, scaleRad,[ geompy.GetSubShapeID(blocPartition,edges_i) ])
     else:
-      hypo1d = algo1d.NumberOfSegments(nbsegRad, scaleRad,[  ])
-    putName(algo1d.GetSubMesh(), "edges", i)
-    putName(algo1d, "algo1d_edges", i)
-    putName(hypo1d, "hypo1d_edges", i)
+      hypo1d = algo1d.NumberOfSegments(nbsegRad, scaleRad,[ ])
+    putName(hypo1d, "edges", i_aux, nro_cas)
 
-  for i in range(len(circles)):
-    algo1d = bloc1.Segment(geom=circles[i])
+  for i_aux, circles_i in enumerate(circles):
+    algo1d = bloc1.Segment(geom=circles_i)
+    putName(algo1d.GetSubMesh(), "circles", i_aux, nro_cas)
     hypo1d = algo1d.NumberOfSegments(nbsegCercle)
-    putName(algo1d.GetSubMesh(), "circles", i)
-    putName(algo1d, "algo1d_circles", i)
-    putName(hypo1d, "hypo1d_circles", i)
+    putName(hypo1d, "circles={}".format(nbsegCercle), i_aux, nro_cas)
 
   if len(edgeext) == 1:
     densite = int(round(nbsegFis/2))
     algo1d = bloc1.Segment(geom=edgeext[0])
+    putName(algo1d.GetSubMesh(), "edgeext", i_pref=nro_cas)
     hypo1d = algo1d.NumberOfSegments(nbsegFis)
     hypo1d.SetDistrType( 2 )
     hypo1d.SetConversionMode( 1 )
     hypo1d.SetTableFunction( [ 0, densite, 0.4, 1, 0.6, 1, 1, densite ] )
-    putName(algo1d.GetSubMesh(), "edgeext")
-    putName(algo1d, "algo1d_edgeext")
-    putName(hypo1d, "hypo1d_edgeext")
+    putName(hypo1d, "edgeext", i_pref=nro_cas)
   else:
     longTotal = 0
-    longEdgeExts = []
-    for i in range(len(edgeext)):
-      props = geompy.BasicProperties(edgeext[i])
+    longEdgeExts = list()
+    for edgeext_i in edgeext:
+      props = geompy.BasicProperties(edgeext_i)
       longEdgeExts.append(props[0])
       longTotal += props[0]
-    for i in range(len(edgeext)):
-      local = longTotal/nbsegFis
-      nbLocal = int(round(nbsegFis*longEdgeExts[i]/longTotal))
+    for i_aux, edgeext_i in enumerate(edgeext):
+      nbLocal = int(round(nbsegFis*longEdgeExts[i_aux]/longTotal))
       densite = int(round(nbLocal/2))
-      algo1d = bloc1.Segment(geom=edgeext[i])
+      algo1d = bloc1.Segment(geom=edgeext_i)
+      putName(algo1d.GetSubMesh(), "edgeext", i_aux, nro_cas)
       hypo1d = algo1d.NumberOfSegments(nbLocal)
       hypo1d.SetDistrType( 2 )
       hypo1d.SetConversionMode( 1 )
       hypo1d.SetTableFunction( [ 0, densite, 0.8, 1, 1, 1 ] )
-      if reverext[i]:
-        hypo1d.SetReversedEdges([ geompy.GetSubShapeID(blocPartition, edgeext[i]) ])
-      putName(algo1d.GetSubMesh(), "edgeext", i)
-      putName(algo1d, "algo1d_edgeext", i)
-      putName(hypo1d, "hypo1d_edgeext", i)
+      if reverext[i_aux]:
+        hypo1d.SetReversedEdges([ geompy.GetSubShapeID(blocPartition, edgeext_i) ])
+      putName(hypo1d, "edgeext", i_aux, nro_cas)
 
   algo2d = bloc1.Triangle(algo=smeshBuilder.NETGEN_2D, geom=facefissoutore)
+  putName(algo2d.GetSubMesh(), "facefissoutore", i_pref=nro_cas)
   hypo2d = algo2d.LengthFromEdges()
-  putName(algo2d.GetSubMesh(), "facefissoutore")
-  putName(algo2d, "algo2d_facefissoutore")
-  putName(hypo2d, "hypo2d_facefissoutore")
+  putName(hypo2d, "facefissoutore", i_pref=nro_cas)
 
 
   maxElemArea = 0.5*dmoyen*dmoyen
   logging.debug("dmoyen %s, maxElemArea %s", dmoyen, maxElemArea)
 
-  for i in range(len(facesExternes)):
-    algo2d = bloc1.Triangle(algo=smeshBuilder.NETGEN_2D, geom=facesExternes[i])
+  for i_aux, facesExternes_i in enumerate(facesExternes):
+    algo2d = bloc1.Triangle(algo=smeshBuilder.NETGEN_2D, geom=facesExternes_i)
+    putName(algo2d.GetSubMesh(), "facesExternes", i_aux, nro_cas)
     hypo2d = algo2d.MaxElementArea(maxElemArea)
+    putName(hypo2d, "facesExternes={}".format(maxElemArea), i_aux, nro_cas)
     if edgesBords is None:
-      algo1d = bloc1.Segment(geom=facesExternes[i])
+      algo1d = bloc1.Segment(geom=facesExternes_i)
       hypo1d = algo1d.NumberOfSegments(1)
-    putName(algo2d.GetSubMesh(), "facesExternes", i)
-    putName(algo2d, "algo2d_facesExternes", i)
-    putName(hypo2d, "hypo2d_facesExternes", i)
-    if edgesBords is None:
-      putName(algo1d, "algo1d_facesExternes", i)
-      putName(hypo1d, "hypo1d_facesExternes", i)
+      putName(hypo1d, "facesExternes", i_aux, nro_cas)
 
-  for i in range(len(aretesInternes)):
-    algo1d = bloc1.Segment(geom=aretesInternes[i])
+  for i_aux, aretesInternes_i in enumerate(aretesInternes):
+    algo1d = bloc1.Segment(geom=aretesInternes_i)
+    putName(algo1d.GetSubMesh(), "aretesInternes", i_aux, nro_cas)
     hypo1d = algo1d.NumberOfSegments(nbsegExt)
-    putName(algo1d.GetSubMesh(), "aretesInternes", i)
-    putName(algo1d, "algo1d_aretesInternes", i)
-    putName(hypo1d, "hypo1d_aretesInternes", i)
+    putName(hypo1d, "aretesInternes={}".format(nbsegExt), i_aux, nro_cas)
 
   if edgesBords is not None:
     algo1d = bloc1.UseExisting1DElements(geom=edgesBords)
+    putName(algo1d.GetSubMesh(), "bordsLibres", i_pref=nro_cas)
     hypo1d = algo1d.SourceEdges([ bordsLibres ],0,0)
-    putName(algo1d.GetSubMesh(), "bordsLibres")
-    putName(algo1d, "algo1d_bordsLibres")
-    putName(hypo1d, "hypo1d_bordsLibres")
-
-  #isDone = bloc1.Compute()
+    putName(hypo1d, "bordsLibres", i_pref=nro_cas)
 
   if not declareAlgoEllipsoideFirst:
     algo3d = bloc1.Tetrahedron(algo=smeshBuilder.NETGEN,geom=ellipsoidep)
+    putName(algo3d.GetSubMesh(), "ellipsoide", i_pref=nro_cas)
     hypo3d = algo3d.MaxElementVolume(1000.0)
-    putName(algo3d.GetSubMesh(), "ellipsoide")
-    putName(algo3d, "algo3d_ellipsoide")
-    putName(hypo3d, "hypo3d_ellipsoide")
-
-  isDone = bloc1.Compute()
-
-  nbRemoved = bloc1.RemoveOrphanNodes()
-
-  faceFissure1 = bloc1.GroupOnGeom(faceFissure,'FACE1',SMESH.FACE)
-  noeudsFondFissure = bloc1.GroupOnGeom(gencnt,'nfondfis',SMESH.NODE)
-
-  groups_faceCommuneEllipsoideBloc = []
-  for i in range(len(sharedFaces)):
-    name = "faceCommuneEllipsoideBloc_%d"%i
-    groups_faceCommuneEllipsoideBloc.append(bloc1.GroupOnGeom(sharedFaces[i], name, SMESH.FACE))
-  groups_faceExterneBloc = []
-  for i in range(len(facesExtBloc)):
-    name = "faceExterneBloc_%d"%i
-    groups_faceExterneBloc.append(bloc1.GroupOnGeom(facesExtBloc[i], name, SMESH.FACE))
-
-  skinBlocMeshes = []
-  for i in range(len(groups_faceCommuneEllipsoideBloc)):
-    name = "faceCommuneEllipsoideBloc_%d"%i
-    skinBlocMeshes.append(smesh.CopyMesh(groups_faceCommuneEllipsoideBloc[i], name, 0, 0))
-  for i in range(len(groups_faceExterneBloc)):
-    name = "faceExterneBloc_%d"%i
-    skinBlocMeshes.append(smesh.CopyMesh(groups_faceExterneBloc[i], name, 0, 0))
+    putName(hypo3d, "ellipsoide", i_pref=nro_cas)
+
+  _ = bloc1.GroupOnGeom(faceFissure,'FACE1',SMESH.FACE)
+  _ = bloc1.GroupOnGeom(gencnt,'nfondfis',SMESH.NODE)
+
+  groups_faceCommuneEllipsoideBloc = list()
+  for i_aux, sharedFaces_i in enumerate(sharedFaces):
+    name = "faceCommuneEllipsoideBloc_{}".format(i_aux)
+    groups_faceCommuneEllipsoideBloc.append(bloc1.GroupOnGeom(sharedFaces_i, name, SMESH.FACE))
+  groups_faceExterneBloc = list()
+  for i_aux, facesExtBloc_i in enumerate(facesExtBloc):
+    name = "faceExterneBloc_{}".format(i_aux)
+    groups_faceExterneBloc.append(bloc1.GroupOnGeom(facesExtBloc_i, name, SMESH.FACE))
+
+  is_done = bloc1.Compute()
+  text = "bloc1.Compute"
+  if is_done:
+    logging.info(text+" OK")
+  else:
+    text = "Erreur au calcul du maillage.\n" + text
+    logging.info(text)
+    raise Exception(text)
+
+  _ = bloc1.RemoveOrphanNodes()
+
+  skinBlocMeshes = list()
+  for i_aux, groups_faceCommuneEllipsoideBloc_i in enumerate(groups_faceCommuneEllipsoideBloc):
+    name = "faceCommuneEllipsoideBloc_{}".format(i_aux)
+    skinBlocMeshes.append(smesh.CopyMesh(groups_faceCommuneEllipsoideBloc_i, name, 0, 0))
+  for i_aux, groups_faceExterneBloc_i in enumerate(groups_faceExterneBloc):
+    name = "faceExterneBloc_{}".format(i_aux)
+    skinBlocMeshes.append(smesh.CopyMesh(groups_faceExterneBloc_i, name, 0, 0))
 
   meshesBloc = [internalBoundary.GetMesh()]
-  for i in range(len(skinBlocMeshes)):
-    meshesBloc.append(skinBlocMeshes[i].GetMesh())
+  for skinBlocMeshes_i in skinBlocMeshes:
+    meshesBloc.append(skinBlocMeshes_i.GetMesh())
   blocMesh = smesh.Concatenate(meshesBloc, 1, 1, 1e-05,False)
 
   algo3d = blocMesh.Tetrahedron(algo=smeshBuilder.NETGEN)
+  putName(algo3d.GetSubMesh(), "bloc", i_pref=nro_cas)
   hypo3d = algo3d.MaxElementVolume(1000.0)
-  putName(algo3d.GetSubMesh(), "bloc")
-  putName(algo3d, "algo3d_bloc")
-  putName(hypo3d, "hypo3d_bloc")
+  putName(hypo3d, "bloc", i_pref=nro_cas)
 
   is_done = blocMesh.Compute()
+  text = "blocMesh.Compute"
+  if is_done:
+    logging.info(text+" OK")
+  else:
+    text = "Erreur au calcul du maillage.\n" + text
+    logging.info(text)
+    raise Exception(text)
 
   blocComplet = smesh.Concatenate([bloc1.GetMesh(), blocMesh.GetMesh()], 1, 1, 1e-05,False)
 
-  return bloc1, blocComplet
\ No newline at end of file
+  return bloc1, blocComplet
index cb93af397dab2e404761e0d01d7d1f09877092ab..b06b66d85c92f0f3aba226d9c7df8ebf5ee113c2 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Trouver les vertices intermédiaires d'un wire"""
 
 import logging
-from .geomsmesh import geompy
 
-# -----------------------------------------------------------------------------
-# --- trouver les vertices intermediaires d'un wire
+from .geomsmesh import geompy
 
 def orderEdgesFromWire(aWire):
-  """
-  fournit les edges ordonnées d'un wire selon ExtractShapes(,,False), 
+  """Fournit les edges ordonnées d'un wire selon ExtractShapes(,,False),
   et l'ordre des edges selon le sens de parcours (ordre des indices de la liste d'edges)
   """
   logging.info("start")
   edges = geompy.ExtractShapes(aWire, geompy.ShapeType["EDGE"], False)
-  
-  idverts = {}
-  for i, edge in enumerate(edges):
+
+  idverts = dict()
+  for i_aux, edge in enumerate(edges):
     verts = geompy.ExtractShapes(edge, geompy.ShapeType["VERTEX"], True)
-#    idverts[(i,0)] = verts[0]
-#    idverts[(i,1)] = verts[1]
-    v0 = geompy.MakeVertexOnCurve(edge, 0.0)
-    dist = geompy.MinDistance(v0, verts[0])
+    vertex_a = geompy.MakeVertexOnCurve(edge, 0.0)
+    dist = geompy.MinDistance(vertex_a, verts[0])
     if dist < 1.e-4:
-      idverts[(i,0)] = verts[0]
-      idverts[(i,1)] = verts[1]
+      idverts[(i_aux,0)] = verts[0]
+      idverts[(i_aux,1)] = verts[1]
     else:
-      idverts[(i,0)] = verts[1]
-      idverts[(i,1)] = verts[0]
-     
-  idsubs = {}
-  for kv, sub in idverts.items():
+      idverts[(i_aux,0)] = verts[1]
+      idverts[(i_aux,1)] = verts[0]
+
+  idsubs = dict()
+  for i_aux, sub in idverts.items():
     subid = geompy.GetSubShapeID(aWire, sub)
-    if subid in list(idsubs.keys()):
-      idsubs[subid].append(kv)
+    if ( subid in idsubs ):
+      idsubs[subid].append(i_aux)
     else:
-      idsubs[subid] = [kv]
-  
+      idsubs[subid] = [i_aux]
+
   debut = -1
-  fin = -1    
-  for k, kvs in idsubs.items():
+  fin = -1
+  for _, kvs in idsubs.items():
     if len(kvs) == 1: # une extremité
-      kv = kvs[0]
-      if kv[1] == 0:
-        debut = kv[0]
+      kv0 = kvs[0]
+      if kv0[1] == 0:
+        debut = kv0[0]
       else:
-        fin = kv[0]
-  logging.debug("nombre d'edges: %s, indice edge début: %s, fin: %s",len(edges), debut, fin)
+        fin = kv0[0]
+  texte = "nombre d'edges: {}, indice edge début: {}, fin: {}".format(len(edges), debut, fin)
+  logging.debug(texte)
   if debut < 0:
     logging.critical("les edges du wire ne sont pas orientées dans le même sens: pas de début trouvé")
     return edges, list(range(len(edges)))
-  
+
   orderedList = [debut]
   while len(orderedList) < len(edges):
     bout = orderedList[-1]
     vertex = idverts[(bout,1)]
-    for k, v in idverts.items():
+    for k, vertex_a in idverts.items():
       if k[0] not in orderedList:
-        if geompy.MinDistance(vertex, v) < 1.e-4:
+        if geompy.MinDistance(vertex, vertex_a) < 1.e-4:
           if k[1] == 0:
             orderedList.append(k[0])
             break
@@ -82,9 +79,12 @@ def orderEdgesFromWire(aWire):
             logging.critical("les edges du wire ne sont pas orientées dans le même sens: une edge à l'envers")
             return edges, list(range(len(edges)))
 
-  logging.debug("liste des edges ordonnées selon le sens de parcours: %s", orderedList)
+  texte = "liste des edges ordonnées selon le sens de parcours : {}".format(orderedList)
+  logging.debug(texte)
   accessList = list(range(len(orderedList)))
-  for i,k in enumerate(orderedList):
-    accessList[k] = i
-  logging.info("position ordonnée des edges selon le sens de parcours: %s", accessList)
+  for i_aux,k_aux in enumerate(orderedList):
+    accessList[k_aux] = i_aux
+  texte = "position ordonnée des edges selon le sens de parcours : {}".format(accessList)
+  logging.info(texte)
+
   return edges, accessList
index 8fa4a94b94039e9feaf6ad88ff8486838953c3ec..2b0134baea8359f36f0a101f4155d5f2b1ae3457 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Partition du bloc defaut par generatrice, tore et plan fissure"""
 
 import logging
+
+import GEOM
+
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
 from .geomsmesh import geomPublishInFather
-from . import initLog
 
-# -----------------------------------------------------------------------------
-# --- partition du bloc defaut par generatrice, tore et plan fissure
+from . import initLog
 
 def partitionBlocDefaut(volDefaut, facesDefaut, gener, pipe,
                         facefis, ellipsoide):
@@ -56,9 +58,9 @@ def partitionBlocDefaut(volDefaut, facesDefaut, gener, pipe,
   #geomPublishInFather(initLog.debug, volDefautPart, gencnt, 'generatrice' )
 
   solids = geompy.ExtractShapes(blocp, geompy.ShapeType["SOLID"], True)
-  vols = []
-  for i in range(len(solids)):
-    props = geompy.BasicProperties(solids[i])
+  vols = list()
+  for solid in solids:
+    props = geompy.BasicProperties(solid)
     vols.append(props[2])
   maxvol = max(vols)
   imaxvol = vols.index(maxvol)
@@ -72,110 +74,111 @@ def partitionBlocDefaut(volDefaut, facesDefaut, gener, pipe,
   geomPublishInFather(initLog.debug, volDefautPart, ellipsoidep, 'ellipsoide' )
 
   sharedFaces = geompy.GetSharedShapesMulti([blocp, ellipsoidep], geompy.ShapeType["FACE"])
-  for i in range(len(sharedFaces)):
-    name = "faceCommuneEllipsoideBloc_%d"%i
-    geomPublishInFather(initLog.debug,blocp, sharedFaces[i], name)
+  for i_aux, face in enumerate(sharedFaces):
+    name = "faceCommuneEllipsoideBloc_{}".format(i_aux)
+    geomPublishInFather(initLog.debug,blocp, face, name)
 
   #sharedEdges = geompy.GetSharedShapesMulti([blocp, ellipsoidep], geompy.ShapeType["EDGE"])
   allSharedEdges = geompy.GetSharedShapesMulti([blocp, ellipsoidep], geompy.ShapeType["EDGE"])
-  sharedEdges = []
-  for i in range(len(allSharedEdges)):
-    if geompy.NbShapes(allSharedEdges[i], geompy.ShapeType["VERTEX"]) > 1: # edge non degeneree
-      sharedEdges.append(allSharedEdges[i])
-  for i in range(len(sharedEdges)):
-    name = "edgeCommuneEllipsoideBloc_%d"%i
-    geomPublishInFather(initLog.debug,blocp, sharedEdges[i], name)
-
-  facesExternes = []
-  facesExtBloc = []
-  facesExtElli = []
+  sharedEdges = list()
+  for face in allSharedEdges:
+    if geompy.NbShapes(face, geompy.ShapeType["VERTEX"]) > 1: # edge non degeneree
+      sharedEdges.append(face)
+  for i_aux, edge in enumerate(sharedEdges):
+    name = "edgeCommuneEllipsoideBloc_{}".format(i_aux)
+    geomPublishInFather(initLog.debug,blocp, edge, name)
+
+  facesExternes = list()
+  facesExtBloc = list()
+  facesExtElli = list()
   faces = geompy.ExtractShapes(facesDefaut, geompy.ShapeType["FACE"], True)
-  if len(faces) == 0:
+  if not faces:
     faces = [facesDefaut]
-  for i in range(len(faces)):
-    faceExt = geompy.GetInPlace(ellipsoidep, faces[i])
+  for i_aux, face in enumerate(faces):
+    faceExt = geompy.GetInPlace(ellipsoidep, face)
     if faceExt is not None:
-      name = "faceExterne_e%d"%i
+      name = "faceExterne_e{}".format(i_aux)
       geomPublishInFather(initLog.debug,ellipsoidep, faceExt, name)
       facesExternes.append(faceExt)
       facesExtElli.append(faceExt)
 
-    faceExt = geompy.GetInPlace(blocp, faces[i])
+    faceExt = geompy.GetInPlace(blocp, face)
     if faceExt is not None:
-      name = "faceExterne_b%d"%i
+      name = "faceExterne_b{}".format(i_aux)
       geomPublishInFather(initLog.debug,blocp, faceExt, name)
       facesExternes.append(faceExt)
       facesExtBloc.append(faceExt)
     else:
       logging.info("  recherche faces externes par GetShapesOnShape")
-      vertex = geompy.MakeVertexOnSurface(faces[i], 0.5, 0.5)
-      normal = geompy.GetNormal(faces[i], vertex)
-      extrusionFace = geompy.MakePrismVecH(faces[i], normal, 1)
-      #extrusionFace = geompy.MakePrismVecH2Ways(faces[i], normal, 0.1)
+      vertex = geompy.MakeVertexOnSurface(face, 0.5, 0.5)
+      normal = geompy.GetNormal(face, vertex)
+      extrusionFace = geompy.MakePrismVecH(face, normal, 1)
+      #extrusionFace = geompy.MakePrismVecH2Ways(face, normal, 0.1)
       #extrusionFace = geompy.MakeScaleTransform(extrusionFace, vertex, 1.01)
-      name = "extrusionFace_b%d"%i
+      name = "extrusionFace_b{}".format(i_aux)
       geomPublishInFather(initLog.debug,blocp, extrusionFace, name)
       #facesExt = geompy.GetShapesOnShape(extrusionFace, blocp, geompy.ShapeType["FACE"], GEOM.ST_ONIN)
       facesExt = geompy.GetShapesOnShape(extrusionFace, blocp, geompy.ShapeType["FACE"], GEOM.ST_ON)
-      for j in range(len(facesExt)):
-        name = "faceExterne_b%d_%d"%(i,j)
-        geomPublishInFather(initLog.debug,blocp, facesExt[j], name)
-        facesExternes.append(facesExt[j])
-        facesExtBloc.append(facesExt[j])
+      for j_aux, face_ext in enumerate(facesExt):
+        name = "faceExterne_b{}_{}".format(i_aux,j_aux)
+        geomPublishInFather(initLog.debug,blocp, face_ext, name)
+        facesExternes.append(face_ext)
+        facesExtBloc.append(face_ext)
 
   if len(facesExtBloc) < len(faces): # toutes les faces externes du bloc n'ont pas été trouvées. TODO eliminer les detections  multiples
     logging.info("  recherche faces externes par aretes partagees avec faces externes ellipsoide")
     facesBloc = geompy.ExtractShapes(blocp, geompy.ShapeType["FACE"], True)
-    for i in range(len(facesBloc)):
+    for i_aux, face in enumerate(facesBloc):
       notOnEllipsoide = True
-      for j in range(len(sharedFaces)): # eliminer les faces communes avec l'ellipsoide
-        if facesBloc[i].IsSame(sharedFaces[j]):
+      for j_aux, sharedface in enumerate(sharedFaces): # eliminer les faces communes avec l'ellipsoide
+        if face.IsSame(sharedface):
           notOnEllipsoide = False
           break
       if notOnEllipsoide:
-        for j in range(len(facesExtElli)): # les faces recherchees ont une ou plusieurs edge communes avec la ou les faces externes de l'ellipsoide
-          allSharedEdges = []
+        for j_aux, face_ext_elli in enumerate(facesExtElli): # les faces recherchees ont une ou plusieurs edge communes avec la ou les faces externes de l'ellipsoide
+          allSharedEdges = list()
           try:
-            allSharedEdges += geompy.GetSharedShapesMulti([facesBloc[i], facesExtElli[j]], geompy.ShapeType["EDGE"])
+            allSharedEdges += geompy.GetSharedShapesMulti([face, face_ext_elli], geompy.ShapeType["EDGE"])
           except:
             pass
-          if len(allSharedEdges) > 0:
-            name = "faceExterne_b%d_%d"%(i,j)
-            geomPublishInFather(initLog.debug,blocp, facesBloc[i], name)
-            facesExternes.append(facesBloc[i])
-            facesExtBloc.append(facesBloc[i])
-
-  aretesInternes = []
-  for i in range(len(facesExternes)):
-    for j in range(i+1,len(facesExternes)):
-      shared = []
+          if allSharedEdges:
+            name = "faceExterne_b{}_{}".format(i_aux,j_aux)
+            geomPublishInFather(initLog.debug,blocp, face, name)
+            facesExternes.append(face)
+            facesExtBloc.append(face)
+
+  aretesInternes = list()
+  for i_aux, face_ext_i in enumerate(facesExternes):
+    for j_aux, face_ext_j in enumerate(facesExternes[i_aux+1:]):
+      shared = list()
       try:
-        shared += geompy.GetSharedShapesMulti([facesExternes[i], facesExternes[j]], geompy.ShapeType["EDGE"])
+        shared += geompy.GetSharedShapesMulti([face_ext_i, face_ext_j], geompy.ShapeType["EDGE"])
       except:
-        logging.info("no shared edges in %s,%s",i,j)
+        texte = "no shared edges in {},{}".format(i_aux,j_aux)
+        logging.info(texte)
       else:
         aretesInternes += shared
-  for i in range(len(aretesInternes)):
-    name = "aretesInternes_%d"%i
-    geomPublishInFather(initLog.debug,blocp, aretesInternes[i], name)
+  for i_aux, edge in enumerate(aretesInternes):
+    name = "aretesInternes_{}".format(i_aux)
+    geomPublishInFather(initLog.debug,blocp, edge, name)
 
-  edgesBords = []
+  l_edgesBords = list()
   for faceExtB in facesExtBloc:
     edges = geompy.ExtractShapes(faceExtB, geompy.ShapeType["EDGE"], True)
-    for i in range(len(edges)):
+    for i_aux, edge in enumerate(edges):
       isInterne = False
-      for j in range(len(aretesInternes)):
-        if edges[i].IsSame(aretesInternes[j]):
+      for arete in aretesInternes:
+        if edge.IsSame(arete):
           isInterne = True
           break
       if not isInterne:
-        edgesBords.append(edges[i])
-        name = "edgeBord%d"%i
-        geomPublishInFather(initLog.debug,blocp,edges[i] , name)
-  group = None
-  if len(edgesBords) > 0:
-    group = geompy.CreateGroup(blocp, geompy.ShapeType["EDGE"])
-    geompy.UnionList(group, edgesBords)
-  edgesBords = group
+        l_edgesBords.append(edge)
+        name = "edgeBord{}".format(i_aux)
+        geomPublishInFather(initLog.debug,blocp,edge , name)
+  if l_edgesBords:
+    edgesBords = geompy.CreateGroup(blocp, geompy.ShapeType["EDGE"])
+    geompy.UnionList(edgesBords, l_edgesBords)
+  else:
+    edgesBords = None
 
   return volDefautPart, blocp, tore, faceFissure, facesExternes, facesExtBloc, facesExtElli, aretesInternes, ellipsoidep, sharedFaces, sharedEdges, edgesBords
index 6b31b7f57613785801a78384df89ca30b896e712..f36f753f91a541c7aef21bd3d7de21d879e8399a 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Partition volume sain et bloc, face du bloc recevant la fissure"""
 
 import logging
+
+import GEOM
+
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
 from .geomsmesh import geomPublishInFather
-from . import initLog
 
-# -----------------------------------------------------------------------------
-# --- partition volume sain et bloc, face du bloc recevant la fissure
+from . import initLog
 
 def partitionVolumeSain(volumeSain,boiteDefaut):
   """
index d0a4e4f406207cba7ebb6e5278e305339034975b..16c38db972c451b6992ef34efa52b7dca03f854a 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Pipe de fond de fissure, prolongé, partition face fissure par pipe"""
 
-import math
 import logging
+import math
+import traceback
+
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
 from .geomsmesh import geomPublishInFather
+
 from . import initLog
 from .findWireEndVertices import findWireEndVertices
 from .prolongeWire import prolongeWire
-import traceback
 from .fissError import fissError
 
-def partitionneFissureParPipe(shapesFissure, elementsDefaut, rayonPipe):
+def partitionneFissureParPipe(shapesFissure, elementsDefaut, rayonPipe, \
+                              nro_cas=None):
   """
   pipe de fond de fissure, prolongé, partition face fissure par pipe
   identification des edges communes pipe et face fissure
@@ -44,14 +48,14 @@ def partitionneFissureParPipe(shapesFissure, elementsDefaut, rayonPipe):
     plan = geompy.MakePlane(centreFondFiss, tgtCentre, 10000)
     shapeDefaut = geompy.MakePartition([shapeDefaut], [plan], [], [], geompy.ShapeType["FACE"], 0, [], 0)
     #fondFissCoupe = geompy.GetInPlaceByHistory(shapeDefaut, fondFiss) #= inutile
-    geomPublish(initLog.debug, shapeDefaut, 'shapeDefaut_coupe')
-    #geomPublishInFather(initLog.debug,shapeDefaut, fondFissCoupe, 'fondFiss_coupe')
-  
+    geomPublish(initLog.debug, shapeDefaut, 'shapeDefaut_coupe', nro_cas)
+    #geomPublishInFather(initLog.debug,shapeDefaut, fondFissCoupe, 'fondFiss_coupe', nro_cas)
+
   extrem, norms = findWireEndVertices(fondFiss, True)
   logging.debug("extrem: %s, norm: %s",extrem, norms)
   cercle = geompy.MakeCircle(extrem[0], norms[0], rayonPipe)
   cercle = geompy.MakeRotation(cercle, norms[0], math.pi/3.0 ) # éviter d'avoir l'arête de couture du pipe presque confondue avec la face fissure
-  geomPublish(initLog.debug, cercle, 'cercle')
+  geomPublish(initLog.debug, cercle, 'cercle', nro_cas)
   fondFissProlonge = prolongeWire(fondFiss, extrem, norms, 2*rayonPipe)
   try:
     pipeFiss = geompy.MakePipe(cercle, fondFissProlonge)
@@ -59,31 +63,31 @@ def partitionneFissureParPipe(shapesFissure, elementsDefaut, rayonPipe):
     texte = "génération du pipe le long de la ligne de fond de fissure prolongée impossible. "
     texte += "Cause possible : la ligne s'autointersecte lorsqu'on la prolonge."
     raise fissError(traceback.extract_stack(),texte)
-  geomPublish(initLog.debug, pipeFiss, 'pipeFiss')
+  geomPublish(initLog.debug, pipeFiss, 'pipeFiss', nro_cas)
   partFissPipe = geompy.MakePartition([shapeDefaut, pipeFiss], [], [], [], geompy.ShapeType["FACE"], 0, [], 1)
-  geomPublish(initLog.debug, partFissPipe, 'partFissPipe')
+  geomPublish(initLog.debug, partFissPipe, 'partFissPipe', nro_cas)
   fissPipe = geompy.GetInPlaceByHistory(partFissPipe, shapeDefaut)
-  geomPublish(initLog.debug, fissPipe, 'fissPipe')
+  geomPublish(initLog.debug, fissPipe, 'fissPipe', nro_cas)
   partPipe = geompy.GetInPlaceByHistory(partFissPipe, pipeFiss)
-  geomPublish(initLog.debug, partPipe, 'partPipe')
-  
+  geomPublish(initLog.debug, partPipe, 'partPipe', nro_cas)
+
   edgesPipeFiss = geompy.GetSharedShapesMulti([fissPipe, partPipe], geompy.ShapeType["EDGE"])
-  for i, edge in enumerate(edgesPipeFiss):
-    name = "edgePipe%d"%i
-    geomPublishInFather(initLog.debug,fissPipe, edge, name)
+  for i_aux, edge in enumerate(edgesPipeFiss):
+    name = "edgePipe{}".format(i_aux)
+    geomPublishInFather(initLog.debug,fissPipe, edge, name, nro_cas)
   try:
     wirePipeFiss = geompy.MakeWire(edgesPipeFiss)
   except:
     wirePipeFiss = geompy.MakeCompound(edgesPipeFiss)
     logging.debug("wirePipeFiss construit sous forme de compound")
-  geomPublish(initLog.debug, wirePipeFiss, "wirePipeFiss")
-  
+  geomPublish(initLog.always, wirePipeFiss, "wirePipeFiss", nro_cas)
+
   wireFondFiss = geompy.GetInPlace(partFissPipe,fondFiss)
   edgesFondFiss = geompy.GetSharedShapesMulti([fissPipe, wireFondFiss], geompy.ShapeType["EDGE"])
-  for i, edge in enumerate(edgesFondFiss):
-    name = "edgeFondFiss%d"%i
+  for i_aux, edge in enumerate(edgesFondFiss):
+    name = "edgeFondFiss{}".format(i_aux)
     geomPublishInFather(initLog.debug,fissPipe, edge, name)
   wireFondFiss = geompy.MakeWire(edgesFondFiss)
-  geomPublish(initLog.debug, wireFondFiss,"wireFondFiss")  
+  geomPublish(initLog.always, wireFondFiss, "wireFondFiss", nro_cas)
 
-  return (fissPipe, edgesPipeFiss, edgesFondFiss, wirePipeFiss, wireFondFiss)
\ No newline at end of file
+  return (fissPipe, edgesPipeFiss, edgesFondFiss, wirePipeFiss, wireFondFiss)
index defa214fe0a04efa7ea3228f97586ac7c7c67250..defb410012e48989a84638b6b37ef971f0429339 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Peau interne du defaut dans le maillage sain"""
 
 import logging
-from .geomsmesh import smesh
-import SMESH
 import traceback
-from .fissError import fissError
 
+import SMESH
+
+from .geomsmesh import smesh
+
+from .fissError import fissError
 from .listOfExtraFunctions import lookForCorner
 from .fusionMaillageAttributionDefaut import fusionMaillageDefaut
+from .putName import putName
 
-# -----------------------------------------------------------------------------
-# --- peau interne du defaut dans le maillage sain
+def peauInterne(fichierMaillage, shapeDefaut, nomZones, \
+                nro_cas=None):
+  """Retrouve les groupes de défaut dans le maillage sain modifié par CreateHoleSkin (CreeZoneDefautMaillage)
 
-def peauInterne(fichierMaillage, shapeDefaut, nomZones):
-  """
-  Retrouve les groupes de défaut dans le maillage sain modifié par CreateHoleSkin (CreeZoneDefautMaillage)
   On récupère le volume et la peau de la zone de défaut, les éventuelles faces et arêtes internes de cette zone.
+  Remarque : intérêt du passage par fichierMaillage plutôt que par maillageSain ?
   """
   logging.info("start")
-  ([maillageSain], status) = smesh.CreateMeshesFromMED(fichierMaillage)
+  ([maillageSain], _) = smesh.CreateMeshesFromMED(fichierMaillage)
 
   groups = maillageSain.GetGroups()
+  #print ("groupes :")
+  #for grp in groups:
+    #print ("\t{}".format(grp.GetName()))
   zoneDefaut = None
-  for grp in groups:
-    logging.debug("groupe %s",grp.GetName())
-    if grp.GetName() == nomZones + "_vol":
-      zoneDefaut = grp
-      break
   zoneDefaut_skin = None
-  for grp in groups:
-    if grp.GetName() == nomZones + "_skin":
-      zoneDefaut_skin = grp
-      break
   zoneDefaut_internalFaces = None
-  for grp in groups:
-    if grp.GetName() == nomZones + "_internalFaces":
-      zoneDefaut_internalFaces = grp
-      break
   zoneDefaut_internalEdges = None
   for grp in groups:
-    if grp.GetName() == nomZones + "_internalEdges":
+    nom = grp.GetName()
+    logging.debug("groupe %s",nom)
+    if ( nom == nomZones + "_vol" ):
+      zoneDefaut = grp
+    elif ( nom == nomZones + "_skin" ):
+      zoneDefaut_skin = grp
+    elif ( nom == nomZones + "_internalFaces" ):
+      zoneDefaut_internalFaces = grp
+    elif ( nom == nomZones + "_internalEdges" ):
       zoneDefaut_internalEdges = grp
-      break
-    
   # --- Le groupe ZoneDefaut ne doit contenir que des Hexaèdres"
-  
-  info=maillageSain.GetMeshInfo(zoneDefaut)
-  keys = list(info.keys()); keys.sort()
-  nbelem=0
-  nbhexa=0
-  for i in keys:
-    #print "  %s  :  %d" % ( i, info[i] )
-    nbelem+=info[i]
-    if "Entity_Hexa" in str(i):
-      nbhexa+=info[i]
-  if (nbelem == 0) or (nbhexa < nbelem) :
+
+  info = maillageSain.GetMeshInfo(zoneDefaut)
+  #print ("info = {}".format(info))
+  nbelem = 0
+  nbhexa = 0
+  for entity_type in info:
+    #print (". {} : {})".format(entity_type, info[entity_type]))
+    nbelem += info[entity_type]
+    if ( str(entity_type) == "Entity_Hexa" ):
+      nbhexa += info[entity_type]
+      nbhexa += info[entity_type]
+  #print ("==> nbelem = {}, nbhexa = {}".format(nbelem,nbhexa))
+
+  if ( (nbelem == 0) or (nbhexa < nbelem) ):
+    print ("==> nbelem = {}, nbhexa = {}".format(nbelem,nbhexa))
     texte = "La zone a remailler est incorrecte.<br>"
     texte += "Causes possibles :<ul>"
     texte += "<li>Les mailles à enlever dans le maillage sain n'ont pas été détectées.</li>"
     texte += "<li>Certaines faces du maillage sain sont à l'envers : les normales aux faces en paroi de volume doivent être sortantes.</li>"
-    texte += "<li>Il n'y a pas que des Hexaèdres réglés linéaires dans la zone à remailler (notamment mailles quadratiques, tetraèdres non traités)</li></ul>"
+    texte += "<li>Il n'y a pas que des hexaèdres réglés linéaires dans la zone à remailler (notamment mailles quadratiques, tetraèdres non traités)</li></ul>"
     raise fissError(traceback.extract_stack(),texte)
 
-  nbAdded, maillageSain, DefautBoundary = maillageSain.MakeBoundaryElements( SMESH.BND_2DFROM3D, 'DefBound', '', 0, [ zoneDefaut ])
+  _, maillageSain, DefautBoundary = maillageSain.MakeBoundaryElements( SMESH.BND_2DFROM3D, 'DefBound', '', 0, [ zoneDefaut ])
   internal = maillageSain.GetMesh().CutListOfGroups( [ DefautBoundary ], [ zoneDefaut_skin ], 'internal' )
   internalBoundary = smesh.CopyMesh( internal, 'internalBoundary', 0, 0)
-  
+  putName(internalBoundary, "internalBoundary", i_pref=nro_cas)
+
   maillageDefautCible = smesh.CopyMesh(zoneDefaut_skin, 'maillageCible', 0, 0)
+  putName(maillageDefautCible, "maillageCible", i_pref=nro_cas)
   listOfCorner = lookForCorner(maillageDefautCible)
-  logging.debug("listOfCorner = %s", listOfCorner)
-  if len(listOfCorner) > 0:
-      logging.info("présence de coins à la surface externe de la zone à reconstruire")
-      zoneDefaut_skin, internalBoundary = fusionMaillageDefaut(maillageSain, maillageDefautCible, internalBoundary, zoneDefaut_skin, shapeDefaut, listOfCorner)
+  texte = "listOfCorner = {}".format(listOfCorner)
+  logging.debug(texte)
+  if listOfCorner:
+    logging.info("présence de coins à la surface externe de la zone à reconstruire")
+    zoneDefaut_skin, internalBoundary = \
+          fusionMaillageDefaut(maillageSain, maillageDefautCible, internalBoundary, zoneDefaut_skin, shapeDefaut, listOfCorner, \
+          nro_cas)
 
   return maillageSain, internalBoundary, zoneDefaut, zoneDefaut_skin, zoneDefaut_internalFaces, zoneDefaut_internalEdges
-
index d782de23ebdb166398d3b1e58b277a6dc23b3e0e..d000246e89996e4283a36147a934423786da1e68 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Calcul de produit mixte pour orientation"""
 
 import logging
+
 from .geomsmesh import geompy
 
-# -----------------------------------------------------------------------------
-# --- calcul de produit mixte pour orientation
+def produitMixte(origine, point_1, point_2, point_3):
+  """produit mixte de 3 vecteurs a partir d'une origine et 3 points"""
+  coordo = geompy.PointCoordinates(origine)
+  coord_1 = geompy.PointCoordinates(point_1)
+  coord_2 = geompy.PointCoordinates(point_2)
+  coord_3 = geompy.PointCoordinates(point_3)
+
+  o_1 = [coord_1[0] - coordo[0], coord_1[1] - coordo[1], coord_1[2] - coordo[2]]
+  o_2 = [coord_2[0] - coordo[0], coord_2[1] - coordo[1], coord_2[2] - coordo[2]]
+  o_3 = [coord_3[0] - coordo[0], coord_3[1] - coordo[1], coord_3[2] - coordo[2]]
+
+  prmi =  ( o_1[0]*o_2[1]*o_3[2] + o_2[0]*o_3[1]*o_1[2] + o_3[0]*o_1[1]*o_2[2] ) \
+        - ( o_1[0]*o_3[1]*o_2[2] + o_2[0]*o_1[1]*o_3[2] + o_3[0]*o_2[1]*o_1[2] )
 
-def produitMixte(o, p1, p2, p3):
-  """
-  produit mixte de 3 vecteurs a partir d'une origine et 3 points
-  """
-  coordo = geompy.PointCoordinates(o)
-  coordp1 = geompy.PointCoordinates(p1)
-  coordp2 = geompy.PointCoordinates(p2)
-  coordp3 = geompy.PointCoordinates(p3)
-  u = [coordp1[0] - coordo[0], coordp1[1] - coordo[1], coordp1[2] - coordo[2]]
-  v = [coordp2[0] - coordo[0], coordp2[1] - coordo[1], coordp2[2] - coordo[2]]
-  w = [coordp3[0] - coordo[0], coordp3[1] - coordo[1], coordp3[2] - coordo[2]]
-  pm = (u[0]*v[1]*w[2] + v[0]*w[1]*u[2] + w[0]*u[1]*v[2]) - (u[0]*w[1]*v[2] + v[0]*u[1]*w[2] + w[0]*v[1]*u[2])
-  logging.debug('pm=%s', pm)
-  return pm
+  logging.debug('prmi=%s', prmi)
 
+  return prmi
index 817cf07c400d62d844e4874c8994a7d114a17a4c..2fa99fe9c4ad03104c2bb61881cb510c99cff71f 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Projection d'un point sur une courbe."""
 
-from .geomsmesh import geompy
 import logging
-import math
 
-# -----------------------------------------------------------------------------
-# --- projection d'un point sur une courbe.
+from .geomsmesh import geompy
 
-def projettePointSurCourbe(pt, edge):
+def projettePointSurCourbe(point, edge):
   """
   projection d'un point p sur une courbe c
   on suppose que la distance (c(u), p) passe par un minimum quand u varie entre 0 et 1
-  et qu'elle presente pas de minimum local 
+  et qu'elle presente pas de minimum local
   """
   #logging.debug("start")
 
-  dist = []
-  nbSlices = 50
-  du = 1.0/nbSlices
-  for i in range(nbSlices + 1):
-    p = geompy.MakeVertexOnCurve(edge, du*i)
-    d = geompy.MinDistance(p,pt)
-    dist.append((d,i))
+  dist = list()
+  nb_slices = 50
+  delta = 1.0/float(nb_slices)
+  for i_aux in range(nb_slices + 1):
+    pti = geompy.MakeVertexOnCurve(edge, delta*float(i_aux))
+    dpti = geompy.MinDistance(pti,point)
+    dist.append((dpti,i_aux))
   dist.sort()
+
   #logging.debug("dist %s", dist)
-  umin = du*dist[0][1]
-  umax = du*dist[1][1]
+  umin = delta*dist[0][1]
+  umax = delta*dist[1][1]
   #umin = 0.0
   #umax = 1.0
   tol = 1.e-8
   pmin = geompy.MakeVertexOnCurve(edge, umin)
   pmax = geompy.MakeVertexOnCurve(edge, umax)
-  dmin = geompy.MinDistance(pmin,pt)
-  dmax = geompy.MinDistance(pmax,pt)
+  dmin = geompy.MinDistance(pmin,point)
+  dmax = geompy.MinDistance(pmax,point)
   dext = geompy.MinDistance(pmin,pmax)
-  i=0
-  while dext > tol and i < 100 :
-    i = i+1
+  i_aux = 0
+  while ( ( dext > tol ) and ( i_aux < 100 ) ):
+    i_aux += 1
     utest = (umax + umin) / 2.0
-    ptest = geompy.MakeVertexOnCurve(edge, utest)   
-    dtest = geompy.MinDistance(ptest,pt)
+    ptest = geompy.MakeVertexOnCurve(edge, utest)
+    dtest = geompy.MinDistance(ptest,point)
     if dmin < dmax:
       umax = utest
       pmax = ptest
@@ -68,10 +67,11 @@ def projettePointSurCourbe(pt, edge):
       dmin = dtest
     dext = geompy.MinDistance(pmin,pmax)
     #logging.debug('umin=%s umax=%s dmin=%s dmax=%s dtest=%s dext=%s', umin,umax,dmin,dmax,dtest,dext)
-  if abs(utest) < 1.e-7:
+
+  if ( abs(utest) < 1.e-7 ):
     utest = 0.0
-  if abs(1.0-utest) < 1.e-7:
+  elif ( abs(1.0-utest) < 1.e-7 ):
     utest = 1.0
-  logging.debug('u=%s, nbiter=%s dtest=%s dext=%s',utest,i,dtest,dext)
+  logging.debug('u=%s, nbiter=%s dtest=%s dext=%s',utest,i_aux,dtest,dext)
+
   return utest
-    
\ No newline at end of file
index c3c2e06cfcbc12b8e1d1da2b446ded817075b60c..557e8eb34b95e62e38fae1ba51106572c02ec881 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Prolongation des segments extrémités des polylines, pour la découpe"""
 
 import logging
-from .geomsmesh import geompy
 
-# -----------------------------------------------------------------------------
-# --- prolongation des segments extremité des polylines, pour la découpe
+from .geomsmesh import geompy
 
 def prolongeVertices(vertices):
   """
   Prolongation des segments extremité d'une polyline définie par un vecteur de points.
-  Chaque nouvelle extremité est obtenue par symétrie point du voisin de cette ancienne extrémité
-  (symétrie de centre l'ancienne extrémite) : les segments extremes sont doublés.
+  Chaque nouvelle extrémité est obtenue par symétrie point du voisin de cette ancienne extrémité
+  (symétrie de centre l'ancienne extrémite) : les segments extrêmes sont doublés.
   @param vertices : liste ordonnée des points (geomObject) de la polyline
   @return vertices : liste avec les deux extremités modifiées
   """
   logging.info("start")
   if len(vertices) < 2:
     return vertices
-  v0 = vertices[0]
-  v1 = vertices[1]
-  m0 = geompy.MakeMirrorByPoint(v1, v0)
-  ve = vertices[-1]
-  vd = vertices[-2]
-  m1 = geompy.MakeMirrorByPoint(vd, ve)
-  vertices[0] = m0
-  vertices[-1] = m1
+
+  m_0 = geompy.MakeMirrorByPoint(vertices[1], vertices[0])
+
+  m_1 = geompy.MakeMirrorByPoint(vertices[-2], vertices[-1])
+
+  vertices[0] = m_0
+  vertices[-1] = m_1
+
   return vertices
index ce3b408ac5990c4f52bafd5c1eff1c0cff6730f7..09fa85d7c6f89bef8396a150bbdab30c77b85e15 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Prolongation d'un wire par deux segments tangents"""
 
 import logging
+
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
+
 from . import initLog
-from .orderEdgesFromWire import orderEdgesFromWire
 
-# -----------------------------------------------------------------------------
-# --- prolongation d'un wire par deux segments tangents
+from .orderEdgesFromWire import orderEdgesFromWire
 
-def prolongeWire(aWire, extrem, norms, lg):
-  """
-  """
+def prolongeWire(aWire, extrem, norms, longueur):
+  """Prolongation d'un wire par deux segments tangents"""
   logging.info("start")
-  if geompy.NumberOfEdges(aWire) > 1:
+
+  if ( geompy.NumberOfEdges(aWire) > 1 ):
     edges = geompy.ExtractShapes(aWire, geompy.ShapeType["EDGE"])
     uneSeuleEdge = False
   else:
     edges = [aWire]
     uneSeuleEdge = True
-  edgesBout = []
-  for i, v1 in enumerate(extrem):
-    exts = [geompy.MakeTranslationVectorDistance(v1, norms[i], l) for l in (-lg, lg)]
-    dists = [(geompy.MinDistance(v, aWire), i , v) for i, v in enumerate(exts)]
+
+  edgesBout = list()
+  for i_aux, v_1 in enumerate(extrem):
+    exts = [geompy.MakeTranslationVectorDistance(v_1, norms[i_aux], lg_aux) for lg_aux in (-longueur, longueur)]
+    dists = [(geompy.MinDistance(v, aWire), j_aux , v) for j_aux, v in enumerate(exts)]
     dists.sort()
-    v2 = dists[-1][-1]
-    edge = geompy.MakeEdge(v1, v2)
+    v_2 = dists[-1][-1]
+    edge = geompy.MakeEdge(v_1, v_2)
     edges.append(edge)
     edgesBout.append(edge)
-    name = "extrem%d"%i
+    name = "extrem{}".format(i_aux)
     geomPublish(initLog.debug, edge, name)
+
   try:
     wireProlonge = geompy.MakeWire(edges)
     geomPublish(initLog.debug, wireProlonge, "wireProlonge")
@@ -61,16 +63,19 @@ def prolongeWire(aWire, extrem, norms, lg):
       edgelist, accessList = orderEdgesFromWire(aWire)
     edge1 = edgelist[accessList[0]]
     if geompy.MinDistance(edgesBout[0], edge1) < 1.e-4 :
-      i0 = 0
-      i1 = 1
+      i_0 = 0
+      i_1 = 1
     else:
-      i0 = 1
-      i1 = 0
-    wireProlonge = edgesBout[i0]
-    for i in range(len(edgelist)):
-      wireProlonge = geompy.MakeWire([wireProlonge, edgelist[accessList[i]]])
-      geomPublish(initLog.debug, wireProlonge, "wireProlonge_%d"%i)
-    wireProlonge = geompy.MakeWire([wireProlonge,edgesBout[i1]])
+      i_0 = 1
+      i_1 = 0
+    wireProlonge = edgesBout[i_0]
+
+    for i_aux in range(len(edgelist)):
+      wireProlonge = geompy.MakeWire([wireProlonge, edgelist[accessList[i_aux]]])
+      geomPublish(initLog.debug, wireProlonge, "wireProlonge_{}".format(i_aux))
+
+    wireProlonge = geompy.MakeWire([wireProlonge,edgesBout[i_1]])
     geomPublish(initLog.debug, wireProlonge, "wireProlonge")
     logging.warning("prolongation wire pas a pas OK")
+
   return wireProlonge
index b32dae57cbfbb6541ab8cfbedcf93504df2038d5..8c335f6312f654e8cabe8d2bee951939f21aaad1 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Recherche et classement des edges du tore par propagate"""
+
 
 import logging
+
 from .geomsmesh import geompy
-from .geomsmesh import geomPublish
 from .geomsmesh import geomPublishInFather
-from . import initLog
 
-# -----------------------------------------------------------------------------
-# --- recherche et classement des edges du tore par propagate
+from . import initLog
 
 def propagateTore(tore):
-  """
-  Classement des edges du tore par une operation 'propagate'
+  """Classement des edges du tore par une operation 'propagate'
+
   @param tore partionné et coupé
   @return (diams, circles, geners) edges dans le plan de fissure, edges demi circulaires,
   edges selon la generatrice (liste de compounds)
   """
   logging.info("start")
 
-  lencomp = []
+  lencomp = list()
   compounds = geompy.Propagate(tore)
-  for i in range(len(compounds)):
-    #geomPublishInFather(initLog.debug, tore, compounds[i], 'edges' )
-    props = geompy.BasicProperties(compounds[i])
+  for objet in compounds:
+    #geomPublishInFather(initLog.debug, tore, objet, 'edges' )
+    props = geompy.BasicProperties(objet)
     lencomp.append(props[0])
-    pass
+# Remarque : on passe par min et max plutôt que faire lencomp.sort() pour garder l'ordre dans le tri suivant
   minlen = min(lencomp)
   maxlen = max(lencomp)
-  diams = []
-  geners = []
-  circles = []
-  for i in range(len(lencomp)):
-    if (lencomp[i]- minlen)/minlen < 0.01 :
-      diams.append(compounds[i])
-    elif (maxlen - lencomp[i])/lencomp[i] < 0.2 :
-      geners.append(compounds[i])
+
+  diams = list()
+  geners = list()
+  circles = list()
+  for i_aux, longueur in enumerate(lencomp):
+    if ( (longueur- minlen)/minlen < 0.01 ):
+      diams.append(compounds[i_aux])
+    elif ( (maxlen - longueur)/longueur < 0.2 ):
+      geners.append(compounds[i_aux])
     else:
-      circles.append(compounds[i])
+      circles.append(compounds[i_aux])
 
   geomPublishInFather(initLog.debug, tore, diams[0], 'diams0' )
   geomPublishInFather(initLog.debug, tore, diams[1], 'diams1' )
index c2989151d949e70d56e34618a40d794210c40053..ad5890ac0ccc904c1275bdfa30ea5a158089b865 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Nommage des objets mesh (algorithme, hypothèse, subMesh)"""
 
+#import logging
 from .geomsmesh import smesh
 
-# -----------------------------------------------------------------------------
-# --- nommage des objets mesh (algorithme, hypothèse, subMesh)
+def putName (objmesh, name, i_suff=-1, i_pref=None):
+  """Nommage des objets mesh
 
-def putName(objmesh,name, i=-1):
-  if i >= 0:
-    suffix = "_%d"%i
-    name += suffix
-  smesh.SetName(objmesh, name)
+  @objmesh objet à nommer
+  @name le nom brut
+  @i_suff un éventuel suffixe
+  @i_pref un éventuel préfixe
+  """
+
+  #texte = "Name = {}, i_suff = {}, i_pref = {}".format(name,i_suff,i_pref)
+  #print(texte)
+  #logging.info(texte)
+  # suffixe éventuel :
+  if ( i_suff >= 0 ):
+    suffixe = "_{}".format(i_suff)
+    name += suffixe
 
+  # préfixe éventuel :
+  if ( i_pref is not None):
+    if isinstance(i_pref,int):
+      prefixe = "Cas{:02d}_".format(i_pref)
+    else:
+      prefixe = "{}_".format(i_pref)
+    name = prefixe + name
+  #logging.info("Au final : %s", name)
+
+  smesh.SetName(objmesh, name)
index 40155491cbb7ebd9c3dc2e0a0facf8266d8f17fe..121875af3c48a70ddc376d8600a6ad8b7ff0e35d 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Remarque : cette focntion n'est jamais appelée ????"""
 
 import logging
+import math
+import numpy as np
+
+import GEOM
+
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
 from .geomsmesh import geomPublishInFather
+
 from . import initLog
-import GEOM
-import math
-import numpy as np
 
 def mydot(a):
+  """produit scalaire"""
   return np.dot(a,a)
 
-# -----------------------------------------------------------------------------
-# --- groupe de quadrangles de face transformé en face géométrique par filling
 
 def quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss):
   """
@@ -51,14 +54,14 @@ def quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss):
     isVecteurDefaut = True
     vecteurDefaut = shapeFissureParams['vecteurDefaut']
 
-  fillings = []       # les faces reconstituées, découpées selon les arêtes vives
-  noeuds_bords = []   #
-  bords_Partages = [] # contient a la fin les courbes correspondant aux arêtes vives
-  fillconts = []      # les faces reconstituées, sans découpage selon les arêtes vives
-  idFilToCont = []    # index face découpée vers face sans découpe
+  fillings = list()       # les faces reconstituées, découpées selon les arêtes vives
+  noeuds_bords = list()   #
+  bords_Partages = list() # contient a la fin les courbes correspondant aux arêtes vives
+  fillconts = list()      # les faces reconstituées, sans découpage selon les arêtes vives
+  idFilToCont = list()    # index face découpée vers face sans découpe
   iface = 0           # index face découpée
   icont = 0           # index face continue
-  
+
   allNodeIds = meshQuad.GetNodesId()
   while len(allNodeIds):
     nodeIds = allNodeIds
@@ -67,13 +70,13 @@ def quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss):
       if len(elems) == 1:
         # un coin: un noeud, un element quadrangle
         elem = elems[0]
-        break;
+        break
     idStart = idNode # le noeud de coin
     elemStart = elem # l'élément quadrangle au coin
     xyz = meshQuad.GetNodeXYZ(idStart)
     logging.debug("idStart %s, coords %s", idStart, str(xyz))
-  
-    nodelines =[] # on va constituer une liste de lignes de points
+
+    nodelines = list() # on va constituer une liste de lignes de points
     nextLine = True
     ligneFinale = False
     while nextLine:
@@ -87,8 +90,8 @@ def quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss):
         agauche = True
       ligneIncomplete = True # on commence une ligne de points
       debutLigne = True
-      nodeline = []
-      elemline = []
+      nodeline = list()
+      elemline = list()
       while ligneIncomplete: # compléter la ligne de points
         nodeline.append(idNode)
         allNodeIds.remove(idNode)
@@ -148,10 +151,10 @@ def quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss):
       logging.debug("nodeline %s", nodeline)
       logging.debug("elemline %s", elemline)
       nodelines.append(nodeline)
-       
+
     # on a constitué une liste de lignes de points connexes
-    logging.debug("dimensions [%s, %s]", len(nodelines),  len(nodeline))   
-    
+    logging.debug("dimensions [%s, %s]", len(nodelines),  len(nodeline))
+
     # stockage des coordonnées dans un tableau numpy
     mat = np.zeros((len(nodelines), len(nodeline), 3))
     for i, ligne in enumerate(nodelines):
@@ -159,7 +162,7 @@ def quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss):
         mat[i,j] = meshQuad.GetNodeXYZ(nodeId)
     logging.debug("matrice de coordonnées: \n%s",mat)
     logging.debug("dimensions %s", mat.shape)
-    
+
     # recherche d'angles supérieurs a un seuil sur une ligne : angle entre deux vecteurs successifs
     cosmin = math.cos(math.pi/4.)          # TODO: angle reference en paramètre
     vecx = mat[:, 1:,  :] - mat[:, :-1, :] # vecteurs selon direction "x"
@@ -186,11 +189,11 @@ def quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss):
     rupY = [x for x in range(len(nodelines)-2) if np.prod(ruptureY[x, :])]
     logging.debug("lignes de rupture: %s",rupY)
     if (len(rupX)*len(rupY)) > 0:
-      logging.critical("""Cas non traité: présence d'angles vifs dans 2 directions, 
+      logging.critical("""Cas non traité: présence d'angles vifs dans 2 directions,
       lors de la reconstitution des faces géométriques dans la zone remaillée""")
-    
-    mats = []
-    bordsPartages = []
+
+    mats = list()
+    bordsPartages = list()
     if (len(rupX)> 0):
       rupX.append(mat.shape[1]-1)
       for i, index in enumerate(rupX):
@@ -220,8 +223,8 @@ def quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss):
     else:
       mats.append(mat)
       bordsPartages.append([0,0])         # les indices différents de 0 correspondent à des bords partagés
-    
-    curvconts = []
+
+    curvconts = list()
     for nmat, amat in enumerate(mats):
       logging.debug("dimensions matrice %s: %s", nmat, amat.shape)
       nbLignes = amat.shape[1] # pas de rupture, ou rupture selon des colonnes: on transpose
@@ -229,13 +232,13 @@ def quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss):
       if len(rupY) > 0 :       # rupture selon des lignes: pas de transposition
         nbLignes = amat.shape[0]
         nbCols = amat.shape[1]
-      curves = []
-      noeudsBords = []
+      curves = list()
+      noeudsBords = list()
       for i in range(4):
         noeudsBords.append([])
       k = 0
       for i in range(nbLignes):
-        nodeList = []
+        nodeList = list()
         for j in range(nbCols):
           #logging.debug("point[%s,%s] = (%s, %s, %s)",i,j,amat[i,j,0], amat[i,j,1], amat[i,j,2])
           if len(rupY) > 0 : # pas de transposition
@@ -263,7 +266,7 @@ def quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss):
         curve = geompy.MakeInterpol(nodeList, False, False)
         #name = "curve_%d"%i
         #geomPublish(initLog.debug,  curve, name )
-        if len(curvconts) == 0 or len(curves) > 0: # éliminer les doublons de la surface sans découpe 
+        if len(curvconts) == 0 or len(curves) > 0: # éliminer les doublons de la surface sans découpe
           curvconts.append(nodeList)
         curves.append(curve)
       if bordsPartages[nmat][0] :
@@ -282,7 +285,7 @@ def quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss):
       if centreFondFiss is not None:
         logging.debug("orientation filling a l'aide du centre de fond de fissure")
         vecteurDefaut = geompy.MakeVector(centreFondFiss, vertex)
-        
+
       if not isVecteurDefaut:
         pointIn_x = 0.0
         pointIn_y = 0.0
@@ -301,7 +304,7 @@ def quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss):
           cdg = geompy.MakeVertex(pointIn_x, pointIn_y, pointIn_z)
           logging.debug("orientation filling par point intérieur %s", (pointIn_x, pointIn_y, pointIn_z))
           vecteurDefaut = geompy.MakeVector(cdg, vertex)
-        
+
       if 'convexe' in shapeFissureParams:
         isConvexe = shapeFissureParams['convexe']
         logging.debug("orientation filling par indication de convexité %s", isConvexe)
@@ -310,7 +313,7 @@ def quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss):
           vecteurDefaut = geompy.MakeVector(cdg, vertex)
         else:
           vecteurDefaut = geompy.MakeVector(vertex, cdg)
-     
+
       if vecteurDefaut is not None:
         geomPublish(initLog.debug, normal, "normFillOrig%d"%iface)
         geomPublish(initLog.debug, vecteurDefaut, "fromInterieur%d"%iface)
@@ -323,14 +326,14 @@ def quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss):
       noeuds_bords.append(noeudsBords)
       idFilToCont.append(icont)
       bords_Partages += bordsPartages
-      pass # --- loop on mats
+      # --- loop on mats
     # --- reconstruction des faces continues à partir des listes de noeuds
     #     les courbes doivent suivre la courbure pour éviter les oscillations
     if icont == iface - 1: # pas de découpe, on garde la même face
       fillcont = fillings[-1]
     else:
       nbLignes = len(curvconts[0])
-      curves = []
+      curves = list()
       for i in range(nbLignes):
         nodes = [curvconts[j][i] for j in range(len(curvconts))]
         curve = geompy.MakeInterpol(nodes, False, False)
@@ -338,7 +341,7 @@ def quadranglesToShape(meshQuad, shapeFissureParams, centreFondFiss):
       fillcont = geompy.MakeFilling(geompy.MakeCompound(curves), 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default, True)
     geomPublish(initLog.debug,  fillcont, "filcont%d"%icont )
     fillconts.append(fillcont)
-    icont = icont+1   
-    pass   # --- loop while there are remaining nodes
-  
+    icont = icont+1
+    # --- loop while there are remaining nodes
+
   return fillings, noeuds_bords, bords_Partages, fillconts, idFilToCont
index 304de09a68c952c804845a653af4ecc6d4677d06..03ddc13e4e06fa36b6e8ee4153272656f976c1a3 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Groupe de quadrangles de face transformé en face géométrique par filling"""
 
 import logging
+import numpy as np
+
+import GEOM
+
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
+
 from . import initLog
-import GEOM
-import math
-import numpy as np
 
 def mydot(a):
+  """produit scalaire"""
   return np.dot(a,a)
 
-# -----------------------------------------------------------------------------
-# --- groupe de quadrangles de face transformé en face géométrique par filling
-
 def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
   """
   groupe de quadrangles de face transformée en faces géométriques par filling
@@ -51,30 +51,31 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
     isVecteurDefaut = True
     vecteurDefaut = shapeFissureParams['vecteurDefaut']
 
-  fillings = []       # les faces reconstituées, découpées selon les arêtes vives
-  noeuds_bords = []   #
-  bords_Partages = [] # contient a la fin les courbes correspondant aux arêtes vives
-  fillconts = []      # les faces reconstituées, sans découpage selon les arêtes vives
-  idFilToCont = []    # index face découpée vers face sans découpe
+  fillings = list()       # les faces reconstituées, découpées selon les arêtes vives
+  noeuds_bords = list()   #
+  bords_Partages = list() # contient a la fin les courbes correspondant aux arêtes vives
+  fillconts = list()      # les faces reconstituées, sans découpage selon les arêtes vives
+  idFilToCont = list()    # index face découpée vers face sans découpe
   iface = 0           # index face découpée
   icont = 0           # index face continue
-  
+  pisur2 = np.pi/2.0
+  pisur4 = np.pi/4.0
+
   allNodeIds = meshQuad.GetNodesId()
   while len(allNodeIds):
     logging.debug("len(allNodeIds): %s ", len(allNodeIds))
     nodeIds = allNodeIds
     for idNode in nodeIds: # rechercher un coin
       elems = meshQuad.GetNodeInverseElements(idNode)
-      if len(elems) == 1:
+      if ( len(elems) == 1 ):
         # un coin: un noeud, un element quadrangle
-        elem = elems[0]
-        break;
-    idStart = idNode # le noeud de coin
-    elemStart = elem # l'élément quadrangle au coin
+        idStart = idNode # le noeud de coin
+        elemStart = elems[0] # l'élément quadrangle au coin
+        break
     xyz = meshQuad.GetNodeXYZ(idStart)
     logging.debug("idStart %s, coords %s", idStart, str(xyz))
-  
-    nodelines =[] # on va constituer une liste de lignes de points
+
+    nodelines = list() # on va constituer une liste de lignes de points
     nextLine = True
     ligneFinale = False
     while nextLine:
@@ -88,8 +89,8 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
         agauche = True
       ligneIncomplete = True # on commence une ligne de points
       debutLigne = True
-      nodeline = []
-      elemline = []
+      nodeline = list()
+      elemline = list()
       while ligneIncomplete: # compléter la ligne de points
         nodeline.append(idNode)
         allNodeIds.remove(idNode)
@@ -153,8 +154,8 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
     longueur = [len(val) for val in nodelines]
     logging.debug("longueur = %s", longueur)
     # on a constitué une liste de lignes de points connexes
-    logging.debug("dimensions [%s, %s]", len(nodelines),  len(nodeline))   
-    
+    logging.debug("dimensions [%s, %s]", len(nodelines),  len(nodeline))
+
     # stockage des coordonnées dans un tableau numpy
     mat = np.zeros((len(nodelines), len(nodeline), 3))
     for i, ligne in enumerate(nodelines):
@@ -162,9 +163,9 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
         mat[i,j] = meshQuad.GetNodeXYZ(nodeId)
     logging.debug("matrice de coordonnées: \n%s",mat)
     logging.debug("dimensions %s", mat.shape)
-    
+
     # recherche d'angles supérieurs a un seuil sur une ligne : angle entre deux vecteurs successifs
-    cosmin = math.cos(math.pi/4.)          # TODO: angle reference en paramètre
+    cosmin = np.cos(pisur4)                # TODO: angle reference en paramètre
     vecx = mat[:, 1:,  :] - mat[:, :-1, :] # vecteurs selon direction "x"
     vx0 = vecx[:, :-1, :]                  # vecteurs amont
     vx1 = vecx[:, 1:,  :]                  # vecteurs aval
@@ -189,11 +190,11 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
     rupY = [x for x in range(len(nodelines)-2) if np.prod(ruptureY[x, :])]
     logging.debug("lignes de rupture: %s",rupY)
     if (len(rupX)*len(rupY)) > 0:
-      logging.critical("""Cas non traité: présence d'angles vifs dans 2 directions, 
+      logging.critical("""Cas non traité: présence d'angles vifs dans 2 directions,
       lors de la reconstitution des faces géométriques dans la zone remaillée""")
-    
-    mats = []
-    bordsPartages = []
+
+    mats = list()
+    bordsPartages = list()
     if (len(rupX)> 0):
       rupX.append(mat.shape[1]-1)
       for i, index in enumerate(rupX):
@@ -223,8 +224,8 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
     else:
       mats.append(mat)
       bordsPartages.append([0,0])         # les indices différents de 0 correspondent à des bords partagés
-    
-    curvconts = []
+
+    curvconts = list()
     for nmat, amat in enumerate(mats):
       logging.debug("dimensions matrice %s: %s", nmat, amat.shape)
       nbLignes = amat.shape[1] # pas de rupture, ou rupture selon des colonnes: on transpose
@@ -232,13 +233,13 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
       if len(rupY) > 0 :       # rupture selon des lignes: pas de transposition
         nbLignes = amat.shape[0]
         nbCols = amat.shape[1]
-      curves = []
-      noeudsBords = []
+      curves = list()
+      noeudsBords = list()
       for i in range(4):
         noeudsBords.append([])
       k = 0
       for i in range(nbLignes):
-        nodeList = []
+        nodeList = list()
         for j in range(nbCols):
           #logging.debug("point[%s,%s] = (%s, %s, %s)",i,j,amat[i,j,0], amat[i,j,1], amat[i,j,2])
           if len(rupY) > 0 : # pas de transposition
@@ -266,7 +267,7 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
         curve = geompy.MakeInterpol(nodeList, False, False)
         #name = "curve_%d"%i
         #geomPublish(initLog.debug,  curve, name )
-        if len(curvconts) == 0 or len(curves) > 0: # éliminer les doublons de la surface sans découpe 
+        if len(curvconts) == 0 or len(curves) > 0: # éliminer les doublons de la surface sans découpe
           curvconts.append(nodeList)
         curves.append(curve)
       if bordsPartages[nmat][0] :
@@ -285,7 +286,7 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
       if centreFondFiss is not None:
         logging.debug("orientation filling a l'aide du centre de fond de fissure")
         vecteurDefaut = geompy.MakeVector(centreFondFiss, vertex)
-        
+
       if not isVecteurDefaut:
         pointIn_x = 0.0
         pointIn_y = 0.0
@@ -304,7 +305,7 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
           cdg = geompy.MakeVertex(pointIn_x, pointIn_y, pointIn_z)
           logging.debug("orientation filling par point intérieur %s", (pointIn_x, pointIn_y, pointIn_z))
           vecteurDefaut = geompy.MakeVector(cdg, vertex)
-        
+
       if 'convexe' in shapeFissureParams:
         isConvexe = shapeFissureParams['convexe']
         logging.debug("orientation filling par indication de convexité %s", isConvexe)
@@ -313,11 +314,11 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
           vecteurDefaut = geompy.MakeVector(cdg, vertex)
         else:
           vecteurDefaut = geompy.MakeVector(vertex, cdg)
-     
+
       if vecteurDefaut is not None:
         geomPublish(initLog.debug, normal, "normFillOrig%d"%iface)
         geomPublish(initLog.debug, vecteurDefaut, "fromInterieur%d"%iface)
-        if geompy.GetAngleRadians(vecteurDefaut, normal) > math.pi/2.0:
+        if ( geompy.GetAngleRadians(vecteurDefaut, normal) > pisur2 ):
           filling = geompy.ChangeOrientation(filling)
       geomPublish(initLog.debug,  filling, "filling%d"%iface )
       #geompy.ExportBREP(filling, "filling.brep")
@@ -327,14 +328,14 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
       idFilToCont.append(icont)
       bords_Partages += bordsPartages
       logging.debug("bords_Partages = %s", bords_Partages)
-      pass # --- loop on mats
+    # --- loop on mats
     # --- reconstruction des faces continues à partir des listes de noeuds
     #     les courbes doivent suivre la courbure pour éviter les oscillations
     if icont == iface - 1: # pas de découpe, on garde la même face
       fillcont = fillings[-1]
     else:
       nbLignes = len(curvconts[0])
-      curves = []
+      curves = list()
       for i in range(nbLignes):
         nodes = [curvconts[j][i] for j in range(len(curvconts))]
         curve = geompy.MakeInterpol(nodes, False, False)
@@ -342,7 +343,7 @@ def quadranglesToShapeNoCorner(meshQuad, shapeFissureParams, centreFondFiss):
       fillcont = geompy.MakeFilling(geompy.MakeCompound(curves), 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default, True)
     geomPublish(initLog.debug,  fillcont, "filcont%d"%icont )
     fillconts.append(fillcont)
-    icont = icont+1   
-    pass   # --- loop while there are remaining nodes
-  
+    icont = icont+1
+    # --- loop while there are remaining nodes
+
   return fillings, noeuds_bords, bords_Partages, fillconts, idFilToCont
index 135ef968b096a4d296b80fb6da9cee2dbd15d988..9559670c26365088989b7a566cb0cd212b0dca08 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
-"""
-Created on Tue Jun 24 09:14:13 2014
-
-@author: I48174
-"""
+"""Remarque : cette focntion n'est jamais appelée ????"""
 
 import logging
+
+import GEOM
+
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
 from .geomsmesh import geomPublishInFather
+
 from . import initLog
-import GEOM
 
 from .listOfExtraFunctions import createNewMeshesFromCorner
 from .listOfExtraFunctions import createLinesFromMesh
@@ -36,101 +35,100 @@ from .listOfExtraFunctions import createLinesFromMesh
 # -----------------------------------------------------------------------------
 # --- groupe de quadrangles de face transformé en face géométrique par filling
 
-def quadranglesToShapeWithCorner(meshQuad, shapeDefaut, shapeFissureParams, centreFondFiss, listOfCorners):
-    """ """
-    # TODO: rédiger la docstring
-    
-    logging.info("start")
-
-    #fillings = [[], []]
-    tmpFillings = []
-    noeuds_bords = []
-    #bords_Partages = [[], []]
-    tmpBords = []
-    fillconts = []
-    idFilToCont = []
-    
-    facesNonCoupees = []
-    facesCoupees = []
-    aretesNonCoupees = []
-    aretesCoupees = []
-    
-    setOfNodes = []
-    setOfLines = []
-    listOfEdges = []
-    # On crée une liste contenant le maillage de chaque face.
-    listOfNewMeshes = createNewMeshesFromCorner(meshQuad, listOfCorners)
-    for msh in listOfNewMeshes:
-        # On crée une liste de noeuds correspondant aux faces suivant
-        # le modèle liste[face][ligne][noeud].
-        lines = createLinesFromMesh(msh, listOfCorners[0])
-        setOfNodes.append(lines)
-    
-    for face in setOfNodes:
-        tmpFace = []
-        for line in face:
-            # On possède l'information 'ID' de chaque noeud composant chaque
-            # ligne de chaque face. A partir de l'ID, on crée un vertex. Un
-            # ensemble de vertices constitue une ligne. Un ensemble de lignes
-            # constitue une face.
-            tmpCoords = [meshQuad.GetNodeXYZ(node) for node in line]
-            tmpPoints = [geompy.MakeVertex(val[0], val[1], val[2]) for val in tmpCoords]
-            line = geompy.MakeInterpol(tmpPoints, False, False)
-            tmpFace.append(line)
-        setOfLines.append(tmpFace)
-    
-    for i, face in enumerate(setOfLines):
-        # A partir des lignes de chaque face,
-        # on recrée un objet GEOM temporaire par filling.
-        filling = geompy.MakeFilling(geompy.MakeCompound(face), 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default, True)
-        geomPublish(initLog.debug, filling, 'filling_{0}'.format(i + 1)) 
-        tmpFillings.append(filling)
-
-    for face in setOfNodes:
-        # On prend la première ligne qui correspond aux bords partagés
-        listOfEdges.append(face[0])
-    
-    for edge in listOfEdges:
-        # On utilise les points de bords pour créer des aretes vives
-        tmpCoords = [meshQuad.GetNodeXYZ(node) for node in list(edge)]
-        tmpPoints = [geompy.MakeVertex(val[0], val[1], val[2]) for val in tmpCoords]
-        line = geompy.MakeInterpol(tmpPoints, False, False)
-        tmpBords.append(line)
-    
-    for i, filling in enumerate(tmpFillings):
-        tmpPartition = geompy.MakePartition([filling], [shapeDefaut], [], [], geompy.ShapeType["FACE"], 0, [], 0, True)
-        tmpExplodeRef = geompy.ExtractShapes(filling, geompy.ShapeType["EDGE"], True)
-        tmpExplodeNum = geompy.ExtractShapes(tmpPartition, geompy.ShapeType["EDGE"], True)
-        if len(tmpExplodeRef) == len(tmpExplodeNum):
-            geomPublish(initLog.debug, filling, "faceNonCoupee_{0}".format(i + 1))
-            facesNonCoupees.append(filling)
-        else:
-            geomPublish(initLog.debug, filling, "faceCoupee_{0}".format(i + 1))
-            facesCoupees.append(filling)
-    fillings = facesCoupees, facesNonCoupees
-    
-    for i, filling in enumerate(tmpBords):
-        tmpPartition = geompy.MakePartition([shapeDefaut], [filling], [], [], geompy.ShapeType["SHELL"], 0, [], 0, True)
-        tmpExplodeRef = geompy.ExtractShapes(shapeDefaut, geompy.ShapeType["EDGE"], True) + geompy.ExtractShapes(shapeDefaut, geompy.ShapeType["VERTEX"], True)
-        tmpExplodeNum = geompy.ExtractShapes(tmpPartition, geompy.ShapeType["EDGE"], True) + geompy.ExtractShapes(tmpPartition, geompy.ShapeType["VERTEX"], True)
-        if len(tmpExplodeRef) == len(tmpExplodeNum):
-            geomPublish(initLog.debug, filling, "areteNonCoupee_{0}".format(i + 1))
-            aretesNonCoupees.append(filling)
-        else:
-            geomPublish(initLog.debug, filling, "areteCoupee_{0}".format(i + 1))
-            aretesCoupees.append(filling)
-    bords_Partages = aretesCoupees, aretesNonCoupees
-    
+def quadranglesToShapeWithCorner(meshQuad, shapeDefaut, listOfCorners):
+  """TODO: rédiger la docstring"""
+
+  logging.info("start")
+
+  #fillings = [list(), list()]
+  tmpFillings = list()
+  noeuds_bords = list()
+  #bords_Partages = [list(), list()]
+  tmpBords = list()
+  fillconts = list()
+  idFilToCont = list()
+
+  facesNonCoupees = list()
+  facesCoupees = list()
+  aretesNonCoupees = list()
+  aretesCoupees = list()
+
+  setOfNodes = list()
+  setOfLines = list()
+  listOfEdges = list()
+  # On crée une liste contenant le maillage de chaque face.
+  listOfNewMeshes = createNewMeshesFromCorner(meshQuad, listOfCorners)
+  for msh in listOfNewMeshes:
+    # On crée une liste de noeuds correspondant aux faces suivant
+    # le modèle liste[face][ligne][noeud].
+    #lines = createLinesFromMesh(msh, listOfCorners[0])
+    lines = createLinesFromMesh(msh)
+    setOfNodes.append(lines)
+
+  for face in setOfNodes:
+    tmpFace = list()
+    for line in face:
+      # On possède l'information 'ID' de chaque noeud composant chaque
+      # ligne de chaque face. A partir de l'ID, on crée un vertex. Un
+      # ensemble de vertices constitue une ligne. Un ensemble de lignes
+      # constitue une face.
+      tmpCoords = [meshQuad.GetNodeXYZ(node) for node in line]
+      tmpPoints = [geompy.MakeVertex(val[0], val[1], val[2]) for val in tmpCoords]
+      line = geompy.MakeInterpol(tmpPoints, False, False)
+      tmpFace.append(line)
+    setOfLines.append(tmpFace)
+
+  for i_aux, face in enumerate(setOfLines):
+    # A partir des lignes de chaque face,
+    # on recrée un objet GEOM temporaire par filling.
+    filling = geompy.MakeFilling(geompy.MakeCompound(face), 2, 5, 0.0001, 0.0001, 0, GEOM.FOM_Default, True)
+    geomPublish(initLog.debug, filling, 'filling_{}'.format(i_aux+1))
+    tmpFillings.append(filling)
+
+  for face in setOfNodes:
+    # On prend la première ligne qui correspond aux bords partagés
+    listOfEdges.append(face[0])
+
+  for edge in listOfEdges:
+    # On utilise les points de bords pour créer des aretes vives
+    tmpCoords = [meshQuad.GetNodeXYZ(node) for node in list(edge)]
+    tmpPoints = [geompy.MakeVertex(val[0], val[1], val[2]) for val in tmpCoords]
+    line = geompy.MakeInterpol(tmpPoints, False, False)
+    tmpBords.append(line)
+
+  for i_aux, filling in enumerate(tmpFillings):
+    tmpPartition = geompy.MakePartition([filling], [shapeDefaut], list(), list(), geompy.ShapeType["FACE"], 0, list(), 0, True)
+    tmpExplodeRef = geompy.ExtractShapes(filling, geompy.ShapeType["EDGE"], True)
+    tmpExplodeNum = geompy.ExtractShapes(tmpPartition, geompy.ShapeType["EDGE"], True)
+    if len(tmpExplodeRef) == len(tmpExplodeNum):
+      geomPublish(initLog.debug, filling, "faceNonCoupee_{}".format(i_aux+1))
+      facesNonCoupees.append(filling)
+    else:
+      geomPublish(initLog.debug, filling, "faceCoupee_{}".format(i_aux+1))
+      facesCoupees.append(filling)
+  fillings = facesCoupees, facesNonCoupees
+
+  for i_aux, filling in enumerate(tmpBords):
+    tmpPartition = geompy.MakePartition([shapeDefaut], [filling], list(), list(), geompy.ShapeType["SHELL"], 0, list(), 0, True)
+    tmpExplodeRef = geompy.ExtractShapes(shapeDefaut, geompy.ShapeType["EDGE"], True) + geompy.ExtractShapes(shapeDefaut, geompy.ShapeType["VERTEX"], True)
+    tmpExplodeNum = geompy.ExtractShapes(tmpPartition, geompy.ShapeType["EDGE"], True) + geompy.ExtractShapes(tmpPartition, geompy.ShapeType["VERTEX"], True)
+    if len(tmpExplodeRef) == len(tmpExplodeNum):
+      geomPublish(initLog.debug, filling, "areteNonCoupee_{}".format(i_aux+1))
+      aretesNonCoupees.append(filling)
+    else:
+      geomPublish(initLog.debug, filling, "areteCoupee_{}".format(i_aux+1))
+      aretesCoupees.append(filling)
+  bords_Partages = aretesCoupees, aretesNonCoupees
+
 # TODO: A enlever
 #    for i, face in enumerate(setOfLines):
-#        for j, line in enumerate(face):
-#            geomPublish(initLog.debug, line, 'face{0}_ligne{1}'.format(i + 1, j + 1))
+#      for j, line in enumerate(face):
+#      geomPublish(initLog.debug, line, 'face{0}_ligne{1}'.format(i + 1, j + 1))
 
- #TODO: A enlever
+#TODO: A enlever
 #    for i, filling in enumerate(fillings[0]):
-#        geomPublish(initLog.debug, filling, 'filling_{0}'.format(i + 1))
-#        for j, line in enumerate(setOfLines[i]):
-#            geompy.addToStudyInFather(filling, line, 'line_{0}'.format(j + 1))
-    
-    return fillings, noeuds_bords, bords_Partages, fillconts, idFilToCont
-    
\ No newline at end of file
+#      geomPublish(initLog.debug, filling, 'filling_{0}'.format(i + 1))
+#      for j, line in enumerate(setOfLines[i]):
+#      geompy.addToStudyInFather(filling, line, 'line_{0}'.format(j + 1))
+
+  return fillings, noeuds_bords, bords_Partages, fillconts, idFilToCont
index 626d9f931fcdbb77e5c4b69bcfdb5e702c8d392e..8f462efd385ee56f5af666c1638277d2449a410c 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Maillage sain sans la zone de defaut"""
 
 import logging
-from .geomsmesh import smesh
+
 import SMESH
-from .geomsmesh import geompy
 
-# -----------------------------------------------------------------------------
-# --- maillage complet et fissure
+from .geomsmesh import geompy
+from .geomsmesh import smesh
 
 def RegroupeSainEtDefaut(maillageSain, blocComplet, extrusionFaceFissure, faceGeomFissure, nomVolume, normal = None):
-  """
-  Maillage sain sans la zone de defaut
-  TODO: a completer
-  """
+  """Maillage sain sans la zone de defaut"""
   logging.info('Concatenation')
 
   maillageComplet = smesh.Concatenate([maillageSain.GetMesh(), blocComplet.GetMesh()], 1, 1, 1e-05,False)
 
   groups = maillageComplet.GetGroups()
-  grps = [ grp for grp in groups if grp.GetName() == 'FACE1']
-  faceFissure = grps[0]
-  grps = [ grp for grp in groups if grp.GetName() == 'nfondfis']
-  noeudsFondFissure = grps[0]
-  grps = [ grp for grp in groups if grp.GetName() == 'fisInPi']
-  fisInPi = grps[0]
-  grps = [ grp for grp in groups if grp.GetName() == 'fisOutPi']
-  fisOutPi = grps[0]
+  for grp in groups:
+    grp_nom = grp.GetName()
+    if ( grp_nom == "FACE1" ):
+      faceFissure = grp
+    elif ( grp_nom == "nfondfis" ):
+      noeudsFondFissure = grp
+    elif ( grp_nom == "fisInPi" ):
+      fisInPi = grp
+    elif ( grp_nom == "fisOutPi" ):
+      fisOutPi = grp
 
   # --- TODO: fiabiliser l'orientation dans le cas general
   if normal is None:
     normal  = smesh.MakeDirStruct( 0, 0, 1 )
+  texte = 'après normal = {}'.format(normal)
+  logging.debug(texte)
   maillageComplet.Reorient2D( fisInPi,  normal, [0,0,0])
+  logging.debug('après Reorient2D In')
   maillageComplet.Reorient2D( fisOutPi, normal, [0,0,0])
-    
-  shapes = []
+
+  shapes = list()
   if extrusionFaceFissure is not None:
     subIds = geompy.SubShapeAllIDs(extrusionFaceFissure, geompy.ShapeType["SOLID"])
-    if len(subIds) > 1:
+    if ( len(subIds) > 1 ):
       shapes = geompy.ExtractShapes(extrusionFaceFissure, geompy.ShapeType["SOLID"], False)
     else:
       shapes = [extrusionFaceFissure]
@@ -64,40 +66,47 @@ def RegroupeSainEtDefaut(maillageSain, blocComplet, extrusionFaceFissure, faceGe
 #      shapes = geompy.ExtractShapes(faceGeomFissure, geompy.ShapeType["FACE"], False)
 #    else:
 #      shapes = [faceGeomFissure]
-    
-  grpEdges = []
-  grpFaces = []
-  grpVolumes = []
-  if len(shapes) == 0:
+
+  grpEdges = list()
+  grpFaces = list()
+  grpVolumes = list()
+  if not shapes:
     shapes = [None] # calcul uniquement avec les normales des faces mailles de la fissure
   for i, aShape in enumerate(shapes):
-    logging.info('Detection elements affectes par le dedoublement de la face %d'%i)
+    texte = "Detection elements affectes par le dedoublement de la face n° {}".format(i)
+    logging.debug(texte)
     affectedGroups = maillageComplet.AffectedElemGroupsInRegion([faceFissure], [noeudsFondFissure], aShape)
-    grps = [ grp for grp in affectedGroups if grp.GetName() == 'affectedEdges']
-    affectedEdges = grps[0]
+    for grp in affectedGroups:
+      grp_nom = grp.GetName()
+      if ( grp_nom == "affectedEdges" ):
+        affectedEdges = grp
+      elif ( grp_nom == "affectedFaces" ):
+        affectedFaces = grp
+      elif ( grp_nom == "affectedVolumes" ):
+        affectedVolumes = grp
+    #grps = [ grp for grp in affectedGroups if grp.GetName() == 'affectedEdges']
+    #affectedEdges = grps[0]
     affectedEdges.SetName('affEd%d'%i)
     grpEdges.append(affectedEdges)
-    grps = [ grp for grp in affectedGroups if grp.GetName() == 'affectedFaces']
-    affectedFaces = grps[0]
+    #grps = [ grp for grp in affectedGroups if grp.GetName() == 'affectedFaces']
+    #affectedFaces = grps[0]
     affectedFaces.SetName('affFa%d'%i)
     grpFaces.append(affectedFaces)
-    grps = [ grp for grp in affectedGroups if grp.GetName() == 'affectedVolumes']
-    affectedVolumes = grps[0]
+    #grps = [ grp for grp in affectedGroups if grp.GetName() == 'affectedVolumes']
+    #affectedVolumes = grps[0]
     affectedVolumes.SetName('affVo%d'%i)
     grpVolumes.append(affectedVolumes)
-  logging.info("union des groupes d'edges") 
   affectedEdges = maillageComplet.UnionListOfGroups(grpEdges, 'affEdges')
-  logging.info("union des groupes de faces") 
   affectedFaces = maillageComplet.UnionListOfGroups(grpFaces, 'affFaces')
-  logging.info("union des groupes de volumes") 
   affectedVolumes = maillageComplet.UnionListOfGroups(grpVolumes, 'affVols')
   for grp in affectedGroups:
-    logging.debug("nom groupe %s",grp.GetName())
-  [ FACE2, FACE2_nodes ] = maillageComplet.DoubleNodeElemGroups([faceFissure], [noeudsFondFissure], affectedGroups, True, True)
+    texte = "Traitement du groupe '{}'".format(grp.GetName())
+    logging.debug(texte)
+  [ FACE2, _ ] = maillageComplet.DoubleNodeElemGroups([faceFissure], [noeudsFondFissure], affectedGroups, True, True)
   FACE2.SetName( 'FACE2' )
 
+  # Groupe de toutes les mailles volumiques
   GroupVol = maillageComplet.CreateEmptyGroup( SMESH.VOLUME, nomVolume )
-  nbAdd = GroupVol.AddFrom( maillageComplet.GetMesh() )
+  _ = GroupVol.AddFrom( maillageComplet.GetMesh() )
 
   return maillageComplet
-
index 0305a372da030096bf66f6f8c70ad39e67f17219..c051dfb3f18b6db5ab8ba73f74c7c0bc2ba01b72 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Restriction de la face de fissure au domaine solide"""
 
 import logging
+
+import traceback
+
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
+
 from . import initLog
+
 from .sortFaces import sortFaces
-import traceback
 from .fissError import fissError
 
-def restreintFaceFissure(shapeDefaut, facesDefaut, pointInterne):
-  """
-  restriction de la face de fissure au domaine solide
+def restreintFaceFissure(shapeDefaut, facesDefaut, pointInterne, \
+                         nro_cas=None):
+  """restriction de la face de fissure au domaine solide
+
   partition face fissure étendue par fillings
   """
   logging.info('start')
+
   partShapeDefaut = geompy.MakePartition([shapeDefaut], facesDefaut, [], [], geompy.ShapeType["FACE"], 0, [], 0)
-  geomPublish(initLog.debug, partShapeDefaut, 'partShapeDefaut')
+  geomPublish(initLog.debug, partShapeDefaut, 'partShapeDefaut', i_pref=nro_cas)
   facesPartShapeDefaut = geompy.ExtractShapes(partShapeDefaut, geompy.ShapeType["FACE"], False)
+
   if pointInterne is not None:
     distfaces = [(geompy.MinDistance(face,pointInterne), i, face) for i, face in enumerate(facesPartShapeDefaut)]
     distfaces.sort()
-    logging.debug("selection de la face la plus proche du point interne, distance=%s",distfaces[0][0])
+    texte = "Sélection de la face la plus proche du point interne, distance={}".format(distfaces[0][0])
+    logging.debug(texte)
     facesPortFissure = distfaces[0][2]
   else:
     try:
@@ -52,8 +60,10 @@ def restreintFaceFissure(shapeDefaut, facesDefaut, pointInterne):
       texte += "<li>le prémaillage de la face de fissure est trop grossier, les mailles à enlever dans le maillage sain "
       texte += "n'ont pas toutes été détectées.</li></ul>"
       raise fissError(traceback.extract_stack(),texte)
-    logging.debug("surfaces faces fissure étendue, min %s, max %s", minSurf, maxSurf)
+    texte = "surfaces faces fissure étendue, min {}, max {}".format(minSurf, maxSurf)
+    logging.debug(texte)
     facesPortFissure = facesPartShapeDefautSorted[-1]
-  
-  geomPublish(initLog.debug, facesPortFissure, "facesPortFissure")
+
+  geomPublish(initLog.debug, facesPortFissure, "facesPortFissure", i_pref=nro_cas)
+
   return facesPortFissure
index ffae930ae344fa03bfaa96fa3db95d9f0f59af46..daa3f45eb8581dd19606a6d45225fa1de4f69e30 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Opérateur de rotation translation d'un objet centré à l'origine"""
 
 import logging
+import math
+
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
+
 from . import initLog
-import math
+
 from .triedreBase import triedreBase
-O, OX, OY, OZ = triedreBase()
 
-# -----------------------------------------------------------------------------
-# --- operateur de rotation translation d'un objet centré à l'origine
+O, OX, OY, OZ = triedreBase()
 
 def rotTrans(objet, orientation, point, normal, trace = False):
   """
@@ -41,33 +42,34 @@ def rotTrans(objet, orientation, point, normal, trace = False):
   @return trans : objet transformé (geomObject)
   """
   logging.info("start")
+
   planXY = geompy.MakePlaneLCS(None, 2000, 1)
   projXY = geompy.MakeProjection(normal, planXY)
-  [v1,v2] = geompy.ExtractShapes(projXY, geompy.ShapeType["VERTEX"], False)
-  xyz1 = geompy.PointCoordinates(v1)
-  xyz2 = geompy.PointCoordinates(v2)
+
+  [v_1,v_2] = geompy.ExtractShapes(projXY, geompy.ShapeType["VERTEX"], False)
+  xyz1 = geompy.PointCoordinates(v_1)
+  xyz2 = geompy.PointCoordinates(v_2)
   x = xyz2[0] - xyz1[0]
   y = xyz2[1] - xyz1[1]
   sinalpha = y / math.sqrt(x*x + y*y)
   cosalpha = x / math.sqrt(x*x + y*y)
   alpha = math.asin(sinalpha)
-  if cosalpha < 0:
+  if ( cosalpha < 0. ):
     alpha = math.pi -alpha
 
   beta = geompy.GetAngleRadians(OZ, normal)
-  [v1,v2] = geompy.ExtractShapes(normal, geompy.ShapeType["VERTEX"], False)
-  xyz1 = geompy.PointCoordinates(v1)
-  xyz2 = geompy.PointCoordinates(v2)
-  z = xyz2[2] - xyz1[2]
-  if z < 0:
+  [v_1,v_2] = geompy.ExtractShapes(normal, geompy.ShapeType["VERTEX"], False)
+  xyz1 = geompy.PointCoordinates(v_1)
+  xyz2 = geompy.PointCoordinates(v_2)
+  if ( (xyz2[2] - xyz1[2]) < 0 ):
     beta = math.pi -beta
 
   rot0 = geompy.MakeRotation(objet, OX, orientation*math.pi/180.0)
   rot1 = geompy.MakeRotation(rot0, OZ, alpha)
   axe2 = geompy.MakeRotation(OY, OZ, alpha)
   rot2 = geompy.MakeRotation(rot1, axe2, beta -math.pi/2.)
-  logging.debug("alpha",alpha)
-  logging.debug("beta",beta)
+  logging.debug("alpha %f",alpha)
+  logging.debug("beta %f",beta)
   if trace:
     geomPublish(initLog.debug,  rot1, 'rot1' )
     geomPublish(initLog.debug,  axe2, 'axe2' )
@@ -75,4 +77,5 @@ def rotTrans(objet, orientation, point, normal, trace = False):
 
   xyz = geompy.PointCoordinates(point)
   trans = geompy.MakeTranslation(rot2, xyz[0], xyz[1], xyz[2])
+
   return trans
index 5914acb5375095969e970fe74a75681f7c47344f..52b265e55c55c11c1d9a44a977b3e57ec29589f1 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""construction d'une shape de dectection des éléments à modifier suite à la la duplication des noeuds de la face fissure (d'un coté de la face)"""
 
 import logging
+
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
-from . import initLog
 
-# -----------------------------------------------------------------------------
-# --- construction d'une shape de dectection des éléments à modifier suite à la la duplication des noeuds de la face fissure (d'un coté de la face)
+from . import initLog
 
 def shapeSurFissure(facesFissure):
-  """
-  TODO: a completer, Normaliser les vecteurs et ponderer par les surfaces...
-  """
+  """Normaliser les vecteurs et ponderer par les surfaces..."""
   logging.info('start')
+
   normal = None
   subIds = geompy.SubShapeAllIDs(facesFissure, geompy.ShapeType["FACE"])
-  if len(subIds) > 1:
+  if ( len(subIds) > 1 ):
     logging.debug("plusieurs faces de fissure")
     faces = geompy.ExtractShapes(facesFissure, geompy.ShapeType["FACE"], False)
-    extrusions = []
-    for n,face in enumerate(faces):
+    extrusions = list()
+    for face in faces:
       vertex = geompy.MakeVertexOnSurface(face, 0.5, 0.5)
       normal = geompy.GetNormal(face, vertex)
       extrusion = geompy.MakePrismVecH(face, normal, 100)
@@ -50,7 +48,7 @@ def shapeSurFissure(facesFissure):
     vertex = geompy.MakeVertexOnSurface(face, 0.5, 0.5)
     normal = geompy.GetNormal(face, vertex)
     extrusionFaceFissure = geompy.MakePrismVecH(facesFissure, normal, 100)
-    
+
   geomPublish(initLog.debug, extrusionFaceFissure, "extrusionFaceFissure")
-  return extrusionFaceFissure, normal
 
+  return extrusionFaceFissure, normal
index 835088e861686de73af1a8b0f69d2de23f4a8281..5d4bda3608473d60665d87af86960664fd5a9eca 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Identification des shapes modifiées par la duplication des noeuds de la face fissure (d'un coté de la face)"""
 
 import logging
-from .geomsmesh import geompy
 
-# -----------------------------------------------------------------------------
-# --- identification des shapes modifiées par la duplication des noeuds de la face fissure (d'un coté de la face)
+import GEOM
+
+from .geomsmesh import geompy
 
 def shapesSurFissure(blocPartition, plane1, faceFissure, gencnt):
-  """
-  TODO: a completer
-  """
+  """Identification des shapes modifiées par la duplication des noeuds de la face fissure (d'un coté de la face)"""
+
   logging.info('start')
 
-  shapesAModifier = []
   vertex = geompy.MakeVertexOnSurface(plane1, 0.5, 0.5)
   normal = geompy.GetNormal(plane1, vertex)
   extrusion = geompy.MakePrismVecH(plane1, normal, 100)
 
-  sharedSolids = []
+  sharedSolids = list()
   solids= geompy.GetShapesOnBox ( extrusion, blocPartition, geompy.ShapeType("SOLID"), GEOM.ST_ONIN )
   for solid in solids:
     sharedSolids += geompy.GetSharedShapes(faceFissure, solid, geompy.ShapeType["SOLID"])
   logging.debug("sharedSolids %s",sharedSolids)
 
-  sharedFaces = []
+  sharedFaces = list()
   faces= geompy.GetShapesOnBox ( extrusion, blocPartition, geompy.ShapeType("FACE"), GEOM.ST_ONIN )
   for face in faces:
     sharedFaces += geompy.GetSharedShapes(faceFissure, face, geompy.ShapeType["FACE"])
   logging.debug("sharedFaces %s",sharedFaces)
 
-  sharedEdges = []
+  sharedEdges = list()
   edges= geompy.GetShapesOnBox ( extrusion, blocPartition, geompy.ShapeType("EDGE"), GEOM.ST_ONIN )
   for edge in edges:
     if not edge.IsSame(gencnt):
       sharedEdges += geompy.GetSharedShapes(faceFissure, edge, geompy.ShapeType["EDGE"])
   logging.debug("sharedEdges %s",sharedEdges)
 
-  shapesAModifier = [ sharedSolids, sharedFaces, sharedEdges]
-  return shapesAModifier
+  return [ sharedSolids, sharedFaces, sharedEdges ]
index 9fc35523d0ff55b931bcb79e3e62343cb08bc135..7651a7d182a684804b420520f3bcb821672484f8 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""tri par longueur d'edges"""
 
 import logging
-from .geomsmesh import geompy
 
-# -----------------------------------------------------------------------------
-# --- tri par longueur d'edges
+from .geomsmesh import geompy
 
 def sortEdges(edgesToSort):
-  """
-  tri des edges par longueur
-  """
+  """tri des edges par longueur"""
   logging.info('start')
 
-  lenEdges = [(geompy.BasicProperties(edge)[0], i, edge) for i, edge in enumerate(edgesToSort)]
-  lenEdges.sort()
-  edgesSorted = [edge for length, i, edge in lenEdges]
-  return edgesSorted, lenEdges[0][0], lenEdges[-1][0]
+  l_length = [(geompy.BasicProperties(edge)[0], i, edge) for i, edge in enumerate(edgesToSort)]
+  l_length.sort()
+  edgesSorted = [edge for _, i, edge in l_length]
 
+  return edgesSorted, l_length[0][0], l_length[-1][0]
index 411ecf0a57f44773d9aed058f278c5318a3ecc01..4ecbd4f15ef7c6f4e3dddd893a70be48c508a96e 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""tri par surface de faces"""
 
 import logging
 from .geomsmesh import geompy
 
-# -----------------------------------------------------------------------------
-# --- tri par surface de faces
-
 def sortFaces(facesToSort):
-  """
-  tri des faces par surface
-  """
+  """tri des faces par surface"""
   logging.info('start')
 
-  surFaces = [(geompy.BasicProperties(face)[1], i, face) for i, face in enumerate(facesToSort)]
-  surFaces.sort()
-  facesSorted = [face for surf, i, face in surFaces]
-  return facesSorted, surFaces[0][0], surFaces[-1][0]
+  l_surfaces = [(geompy.BasicProperties(face)[1], i, face) for i, face in enumerate(facesToSort)]
+  l_surfaces.sort()
+  facesSorted = [face for _, i, face in l_surfaces]
 
+  return facesSorted, l_surfaces[0][0], l_surfaces[-1][0]
index 579151700cd82faedd9ed3a02dd2763579d1a076..6564291746ac44f2db40dcff677ab269fbbfa764 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""tri par longueur des 3 generatrices"""
 
 import logging
+
 from .geomsmesh import geompy
-from .geomsmesh import geomPublish
 from .geomsmesh import geomPublishInFather
-from . import initLog
 
-# -----------------------------------------------------------------------------
-# --- tri par longueur des 3 generatrices
+from . import initLog
 
 def sortGeneratrices(tore, geners):
   """
@@ -38,24 +37,23 @@ def sortGeneratrices(tore, geners):
 
   genx = geompy.ExtractShapes(geners[0], geompy.ShapeType["EDGE"], True)
 
-  lenx = []
-  for i in range(len(genx)):
-    props = geompy.BasicProperties(genx[i])
+  lenx = list()
+  for gene in genx:
+    props = geompy.BasicProperties(gene)
     lenx.append(props[0])
-    pass
+
   minlen = min(lenx)
   maxlen = max(lenx)
   genext=None
   gencnt=None
   genint=None
-  for i in range(len(genx)):
-    if lenx[i] == minlen:
-      genint = genx[i]
-    elif lenx[i] == maxlen:
-      genext = genx[i]
+  for i_aux, gene in enumerate(genx):
+    if lenx[i_aux] == minlen:
+      genint = gene
+    elif lenx[i_aux] == maxlen:
+      genext = gene
     else:
-      gencnt= genx[i]
-    pass
+      gencnt= gene
 
   geomPublishInFather(initLog.debug, tore, genext, 'genext' )
   geomPublishInFather(initLog.debug, tore, genint, 'genint' )
index fa222c2f3edb212441be5f89451934ec46c15e74..1ba25aee2546d0ba143e1bc616fc338e10f041a7 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""tri par volume de solides"""
 
 import logging
-from .geomsmesh import geompy
 
-# -----------------------------------------------------------------------------
-# --- tri par volume de solides
+from .geomsmesh import geompy
 
 def sortSolids(solidsToSort):
-  """
-  tri des solides par volume
-  """
+  """tri des solides par volume"""
   logging.info('start')
 
   volSolids = [(geompy.BasicProperties(solid)[2], i, solid) for i, solid in enumerate(solidsToSort)]
   volSolids.sort()
-  solidsSorted = [solid for vol, i, solid in volSolids]
-  return solidsSorted, volSolids[0][0], volSolids[-1][0]
+  solidsSorted = [solid for _, i, solid in volSolids]
 
+  return solidsSorted, volSolids[0][0], volSolids[-1][0]
index ad4d6e01f5a9fa09da6c3057eeea09743a40cf3f..71df5ad60afe5f297fedb478a603146c7703e766 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Substract a list of subShapes from another"""
 
 import logging
-from .geomsmesh import geompy
 
-# -----------------------------------------------------------------------------
-# --- substract a list of subShapes from another
+from .geomsmesh import geompy
 
 def substractSubShapes(obj, subs, toRemove):
-  """
-  liste de subshapes par difference
-  """
+  """liste de subshapes par difference"""
   logging.info("start")
-  idToremove = {}
-  subList = []
-  for s in toRemove:
-    idToremove[geompy.GetSubShapeID(obj, s)] = s
-  for s in subs:
-    idsub = geompy.GetSubShapeID(obj, s)
-    if idsub not in list(idToremove.keys()):
-      subList.append(s)
+  idToremove = dict()
+  for shape in toRemove:
+    idToremove[geompy.GetSubShapeID(obj, shape)] = shape
+
+  subList = list()
+  for shape in subs:
+    idsub = geompy.GetSubShapeID(obj, shape)
+    if ( idsub not in idToremove ):
+      subList.append(shape)
+
   logging.debug("subList=%s", subList)
+
   return subList
diff --git a/src/Tools/blocFissure/gmu/testgmu.py b/src/Tools/blocFissure/gmu/testgmu.py
deleted file mode 100644 (file)
index 811d6c7..0000000
+++ /dev/null
@@ -1,40 +0,0 @@
-# Copyright (C) 2014-2020  EDF R&D
-#
-# 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
-#
-
-from blocFissure import gmu
-from blocFissure.gmu.initEtude import initEtude
-initEtude()
-from blocFissure.gmu.triedreBase import triedreBase
-O, OX, OY, OZ = triedreBase()
-
-from blocFissure.gmu.distance2 import distance2
-a=[10, 20, 30]
-b=[5, 7, 3]
-c=distance2(a,b)
-
-import unittest
-from blocFissure.gmu import initLog
-initLog.setUnitTests()
-
-from blocFissure.gmu import distance2
-
-suite = unittest.TestLoader().loadTestsFromTestCase(distance2.Test_distance2)
-unittest.TextTestRunner(verbosity=2).run(suite)
-
-
index 1e3dd7465b0616f0a6361facdf77503411ba33aa..e258517ebb95039d430407356a46daf5847c7647 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""tore et plan de fissure"""
 
 import logging
+import math
+
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
+
 from . import initLog
-import math
+
 from .triedreBase import triedreBase
 
 O, OX, OY, OZ = triedreBase()
 
-# -----------------------------------------------------------------------------
-# --- tore et plan de fissure
-
 def toreFissure(minRad,allonge,rayTore):
   """
   Construction de la geometrie du tore elliptique autour du front de fissure.
@@ -38,53 +38,53 @@ def toreFissure(minRad,allonge,rayTore):
   @param minRad :petit rayon
   @param allonge :rapport grand rayon / petit rayon
   @param rayTore :rayon du tore construit autour de la generatrice de l'ellipse
-  @return (generatrice, FaceGenFiss, Pipe_1, FaceFissure, Plane_1, Pipe1Part) : ellipse, section du tore,
+  @return (generatrice, face_gen_fiss, pipe, face_fissure, plane, pipe_part) : ellipse, section du tore,
   tore plein, face plane de le fissure, plan de la fissure, tore partitioné par le plan de fissure.
   """
-  logging.info("start ", minRad, allonge, rayTore)
-  
-  Vertex_1 = geompy.MakeVertex( minRad, 0, 0)
-  Vertex_2 = geompy.MakeVertex(-minRad, 0, 0)
-  Vertex_3 = geompy.MakeRotation(Vertex_1, OZ,  45*math.pi/180.0)
-  Arc_1 = geompy.MakeArc(Vertex_1, Vertex_2, Vertex_3)
-  generatrice = geompy.MakeScaleAlongAxes(Arc_1, O, 1, allonge, 1)
-
-  #geomPublish(initLog.debug,  Vertex_1, 'Vertex_1' )
-  #geomPublish(initLog.debug,  Vertex_2, 'Vertex_2' )
-  #geomPublish(initLog.debug,  Vertex_3, 'Vertex_3' )
-  #geomPublish(initLog.debug,  Arc_1, 'Arc_1' )
+  logging.info("start %s %s %s", minRad, allonge, rayTore)
+
+  vertex_1 = geompy.MakeVertex( minRad, 0., 0.)
+  vertex_2 = geompy.MakeVertex(-minRad, 0., 0.)
+  vertex_3 = geompy.Makerotation(vertex_1, OZ,  45.*math.pi/180.0)
+  arc = geompy.MakeArc(vertex_1, vertex_2, vertex_3)
+  generatrice = geompy.MakeScaleAlongAxes(arc, O, 1, allonge, 1)
+
+  #geomPublish(initLog.debug,  vertex_1, 'vertex_1' )
+  #geomPublish(initLog.debug,  vertex_2, 'vertex_2' )
+  #geomPublish(initLog.debug,  vertex_3, 'vertex_3' )
+  #geomPublish(initLog.debug,  arc, 'arc' )
   #geomPublish(initLog.debug,  generatrice, 'generatrice' )
 
   # --- face circulaire sur la generatrice, pour extrusion
 
-  Circle_1 = geompy.MakeCircle(O, OY, rayTore)
-  Rotation_1 = geompy.MakeRotation(Circle_1, OY, -90*math.pi/180.0)
-  Translation_1 = geompy.MakeTranslation(Rotation_1, minRad, 0, 0)
-  FaceGenFiss = geompy.MakeFaceWires([Translation_1], 1)
+  circle = geompy.MakeCircle(O, OY, rayTore)
+  rotation = geompy.MakeRotation(circle, OY, -90.*math.pi/180.0)
+  translation = geompy.MakeTranslation(rotation, minRad, 0., 0.)
+  face_gen_fiss = geompy.MakeFaceWires([translation], 1)
 
-  #geomPublish(initLog.debug,  Circle_1, 'Circle_1' )
-  #geomPublish(initLog.debug,  Rotation_1, 'Rotation_1' )
-  #geomPublish(initLog.debug,  Translation_1, 'Translation_1' )
-  #geomPublish(initLog.debug,  FaceGenFiss, 'FaceGenFiss' )
+  #geomPublish(initLog.debug,  circle, 'circle' )
+  #geomPublish(initLog.debug,  rotation, 'rotation' )
+  #geomPublish(initLog.debug,  translation, 'translation' )
+  #geomPublish(initLog.debug,  face_gen_fiss, 'face_gen_fiss' )
 
   # --- tore extrude
 
-  Pipe_1 = geompy.MakePipe(FaceGenFiss, generatrice)
+  pipe = geompy.MakePipe(face_gen_fiss, generatrice)
 
   # --- plan fissure, delimite par la generatrice
 
-  Scale_1_vertex_3 = geompy.GetSubShape(generatrice, [3])
-  Line_1 = geompy.MakeLineTwoPnt(Vertex_1, Scale_1_vertex_3)
-  FaceFissure = geompy.MakeFaceWires([generatrice, Line_1], 1)
+  scale_vertex_3 = geompy.GetSubShape(generatrice, [3])
+  line = geompy.MakeLineTwoPnt(vertex_1, scale_vertex_3)
+  face_fissure = geompy.MakeFaceWires([generatrice, line], 1)
 
-  #geomPublishInFather(initLog.debug, generatrice, Scale_1_vertex_3, 'Scale_1:vertex_3' )
-  #geomPublish(initLog.debug,  Line_1, 'Line_1' )
-  #geomPublish(initLog.debug,  FaceFissure, 'FaceFissure' )
+  #geomPublishInFather(initLog.debug, generatrice, scale_vertex_3, 'scale_1:vertex_3' )
+  #geomPublish(initLog.debug,  line, 'line' )
+  #geomPublish(initLog.debug,  face_fissure, 'face_fissure' )
 
   # --- tore coupe en 2 demi tore de section 1/2 disque
 
-  Plane_1 = geompy.MakePlane(O, OZ, 2000)
-  Pipe1Part = geompy.MakePartition([Pipe_1], [Plane_1], [], [], geompy.ShapeType["SOLID"], 0, [], 1)
-  geomPublish(initLog.debug, Pipe1Part , 'Pipe1Part' )
+  plane = geompy.MakePlane(O, OZ, 2000)
+  pipe_part = geompy.MakePartition([pipe], [plane], [], [], geompy.ShapeType["SOLID"], 0, [], 1)
+  geomPublish(initLog.debug, pipe_part , 'pipe_part' )
 
-  return generatrice, FaceGenFiss, Pipe_1, FaceFissure, Plane_1, Pipe1Part
+  return generatrice, face_gen_fiss, pipe, face_fissure, plane, pipe_part
index b0e8eb3a7e539b17bfa0c38630e79e44ca315792..b387586f36ada9d0d626de079f7144267dff469e 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Origine et vecteurs de base"""
 
 import logging
+
 from .geomsmesh import geompy
 from .geomsmesh import geomPublish
-from .geomsmesh import geomPublishInFather
-from . import initLog
 
-# --- origine et vecteurs de base
+from . import initLog
 
 O = None
 OX = None
@@ -37,14 +37,14 @@ def triedreBase():
   objets partages par plusieurs methodes
   """
   global O, OX, OY, OZ
-  
-  if O == None:
+
+  if ( O is None ):
     logging.info("start")
     O = geompy.MakeVertex(0, 0, 0)
     OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
     OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
     OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
-  
+
     if not geompy.myStudy.FindObjectByName( 'OX', geompy.ComponentDataType() ):
       geomPublish(initLog.debug,  O, 'O' )
       geomPublish(initLog.debug,  OX, 'OX' )
index 4dec8c459337de998487753ac19096dd789b7143..fcf6c9b78a8ad3a03aef9f1f6f96a8b6b0de1862 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Pour les faces de peau sans extremité débouchante de fissure, il faut recenser les edges de fissure sur la face de peau"""
 
 import logging
 
 from .geomsmesh import geompy
-from .geomsmesh import geomPublish
 from .geomsmesh import geomPublishInFather
+
 from . import initLog
 
 def trouveEdgesFissPeau(facesInside, facesOnside, edgesPipeIn, edgesFondIn, partitionPeauFissFond, edgesFissExtPeau):
-  """
-  pour les faces de peau sans extremité débouchante de fissure, il faut recenser les edges de fissure sur la face de peau
-  """
+  """Pour les faces de peau sans extremité débouchante de fissure, il faut recenser les edges de fissure sur la face de peau"""
   logging.info('start')
-  
-  j = 0
+
+  i_aux = 0
   for face in facesInside:
-    edgesPeauFis = []
-    edgesPipeFis = []
-    edgesPipeFnd = []
+
+    edgesPeauFis = list()
+    edgesPipeFis = list()
+    edgesPipeFnd = list()
     try:
       edgesPeauFis = geompy.GetSharedShapesMulti([geompy.MakeCompound(facesOnside), face], geompy.ShapeType["EDGE"])
       edgesPipeFis = geompy.GetSharedShapesMulti([geompy.MakeCompound(edgesPipeIn), face], geompy.ShapeType["EDGE"])
       edgesPipeFnd = geompy.GetSharedShapesMulti([geompy.MakeCompound(edgesFondIn), face], geompy.ShapeType["EDGE"])
     except:
       pass
-    if (len(edgesPeauFis) > 0) and (len(edgesPipeFis) > 0) and (len(edgesPipeFnd) == 0):
+
+    if ( edgesPeauFis and edgesPipeFis and ( not edgesPipeFnd ) ):
       edgesFissExtPeau.append(edgesPeauFis[0])
-      name="edgesFissExtPeau%d"%j
+      name="edgesFissExtPeau{}".format(i_aux)
       geomPublishInFather(initLog.debug,partitionPeauFissFond, edgesPeauFis[0], name)
-      j += 1
-  return edgesFissExtPeau
\ No newline at end of file
+      i_aux += 1
+
+  return edgesFissExtPeau
index 816e005560303f82c2213b9711065d85c2833561..e17ad331f2a5da4e018dcb63c0860c3bd037d6fa 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Calcul de la position d'une shape par rapport à une face (dessus, dessous, sur la surface même)"""
 
 import logging
 from .geomsmesh import geompy
 
-# -----------------------------------------------------------------------------
-# --- calcul de la position d'une shape par rapport à une face (dessus, dessous, sur la surface même)
-
 def whichSide(face, obj, tol = 1.e-3):
   """
   Position d'un objet par rapport a une face (non nécessairement plane).
@@ -40,6 +38,7 @@ def whichSide(face, obj, tol = 1.e-3):
   nbFaces = geompy.NbShapes(obj, geompy.ShapeType["FACE"]) # --- attention ! pour une seule face presente, renvoie 2
   logging.debug("   nbFaces %s", nbFaces)
   vertices = geompy.ExtractShapes(obj, geompy.ShapeType["VERTEX"], False)
+
   if nbEdges > 0 and nbFaces == 0: # --- edges
     if nbEdges <= 2:
       point = geompy.MakeVertexOnCurve(obj, 0.5)
@@ -49,17 +48,20 @@ def whichSide(face, obj, tol = 1.e-3):
       for anEdge in edges:
         point = geompy.MakeVertexOnCurve(anEdge, 0.5)
         vertices.append(point)
+
   elif nbFaces >0: # --- faces
     if nbFaces <=2:
       point = geompy.MakeVertexOnSurface(obj, 0.5, 0.5)
       vertices.append(point)
-    if nbFaces > 2:
+    else:
       faces = geompy.ExtractShapes(obj, geompy.ShapeType["FACE"], False)
       for aFace in faces:
         point = geompy.MakeVertexOnSurface(aFace, 0.5, 0.5)
         vertices.append(point)
+
   else: # --- vertices
     vertices = [obj]
+
   for vertex in vertices:
     distance = geompy.MinDistance(vertex, face)
     logging.debug("    distance %s", distance)
@@ -74,5 +76,5 @@ def whichSide(face, obj, tol = 1.e-3):
         side = -1
       break
   logging.debug("  side %s", side)
-  return side
 
+  return side
index c879fe2659896525f1c80192a942a91ecc05ffb8..804dee7240e2de424dd1ac642b58791163d9cb58 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Calcul de la position d'une shape par rapport à une face (dessus, dessous, sur la surface même)"""
 
 import logging
-from .geomsmesh import geompy
 
-# -----------------------------------------------------------------------------
-# --- calcul de la position d'une shape par rapport à une face (dessus, dessous, sur la surface même)
+from .geomsmesh import geompy
 
 def whichSideMulti(facerefs, ifil, obj, centre, tol = 1.e-3):
   """
@@ -39,6 +38,7 @@ def whichSideMulti(facerefs, ifil, obj, centre, tol = 1.e-3):
   nbEdges = geompy.NbShapes(obj, geompy.ShapeType["EDGE"]) # --- attention ! pour une seule edge presente, renvoie 2
   logging.debug("   nbEdges %s", nbEdges)
   vertices = geompy.ExtractShapes(obj, geompy.ShapeType["VERTEX"], False)
+
   if nbEdges > 0 : # --- edges
     if nbEdges <= 2:
       point = geompy.MakeVertexOnCurve(obj, 0.5)
@@ -50,6 +50,7 @@ def whichSideMulti(facerefs, ifil, obj, centre, tol = 1.e-3):
         vertices.append(point)
   else: # --- vertices
     vertices = [obj]
+
   nbOnRef = 0
   nbOnOther = 0
   for vertex in vertices:
@@ -70,20 +71,21 @@ def whichSideMulti(facerefs, ifil, obj, centre, tol = 1.e-3):
           break
         else:
           nbMiss += 1
-          pass           # peut-être inside, tester les autres faces
+          # peut-être inside, tester les autres faces
       else:
         if i == ifil:
           nbOnRef +=1    # le point est sur la face de référence, on continue avec les autres points
           break
         else:
           nbOnOther += 1 # le point est sur une autre face, mais il peut aussi être sur la face de référence...
-          pass           # on peut tester les autres faces
+         # on peut tester les autres faces
     if nbMiss == len(facerefs):
       side = 1 # inside
     if side != 0:
       break
+
   if side == 0 and nbOnRef < len(vertices):
-    side = 1   # inside  
+    side = 1   # inside
   logging.debug("  side %s", side)
-  return side
 
+  return side
index e14e78bbbc6646e10e8fa874a610508a6a0c2b4d..6b4d42f62cf1184932ae41516497434ae44d2bca 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Calcul de la position d'une shape par rapport à une face (dessus, dessous, sur la surface même)"""
 
 import logging
-from .geomsmesh import geompy
 
-# -----------------------------------------------------------------------------
-# --- calcul de la position d'une shape par rapport à une face (dessus, dessous, sur la surface même)
+from .geomsmesh import geompy
 
 def whichSideVertex(face, vertex, tol = 1.e-3):
   """
@@ -34,6 +33,7 @@ def whichSideVertex(face, vertex, tol = 1.e-3):
   side = 0
   distance = geompy.MinDistance(vertex, face)
   #logging.debug("    distance %s", distance)
+
   if distance > tol:
     projection = geompy.MakeProjection(vertex, face)
     normal = geompy.GetNormal(face, projection)
@@ -41,8 +41,8 @@ def whichSideVertex(face, vertex, tol = 1.e-3):
     angle = geompy.GetAngle(normal, vect)
     #logging.debug("  angle %s", angle)
     side = 1
-    if abs(angle) > 10:
+    if ( abs(angle) > 10 ):
       side = -1
   logging.debug("side %s distance %s", side, distance)
-  return side
 
+  return side
index 195dbdacc7118b26b5cdbcc305643ce13c22813d..f1d30763f41781e9fac2a254500503556ec5a327 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 741586626e24d0e07970113b7a7b6f822c0ffec7..c3f5ac159573c2f186fcdf2abbe5ec96c8d5c6de 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 5775569425d23b8edcd57693c6771493b0c1dc22..f7dc76c23cba0104155f61a615918b99cedc611c 100644 (file)
        <item>
         <widget class="QCheckBox" name="cb_optDiscrSain">
          <property name="toolTip">
-          <string>Paramètres optionnels de discretisation</string>
+          <string>Paramètres optionnels de discrétisation</string>
          </property>
          <property name="text">
-          <string>Options de discretisation</string>
+          <string>Options de discrétisation</string>
          </property>
         </widget>
        </item>
                <item row="0" column="0">
                 <widget class="QGroupBox" name="groupBox_4">
                  <property name="title">
-                  <string>position</string>
+                  <string>Position</string>
                  </property>
                  <layout class="QVBoxLayout" name="verticalLayout_7">
                   <item>
                      <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Fissure positionnée sur la face interne&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
                     </property>
                     <property name="text">
-                     <string>fissure interne</string>
+                     <string>Fissure interne</string>
                     </property>
                    </widget>
                   </item>
                      <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Fissure positionnée sur la face externe&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
                     </property>
                     <property name="text">
-                     <string>fissure externe</string>
+                     <string>Fissure externe</string>
                     </property>
                    </widget>
                   </item>
                   <string/>
                  </property>
                  <property name="text">
-                  <string>forcer elliptique</string>
+                  <string>Forcer elliptique</string>
                  </property>
                 </widget>
                </item>
              <item row="2" column="0">
               <widget class="QGroupBox" name="groupBox_11">
                <property name="title">
-                <string>position longitudinale</string>
+                <string>Position longitudinale</string>
                </property>
                <layout class="QGridLayout" name="gridLayout_11">
                 <item row="0" column="0">
              <item row="1" column="0" colspan="2">
               <widget class="QGroupBox" name="groupBox_8">
                <property name="title">
-                <string>maillage zone de fissure</string>
+                <string>Maillage zone de fissure</string>
                </property>
                <layout class="QVBoxLayout" name="verticalLayout_5">
                 <item>
                  <widget class="QGroupBox" name="groupBox_9">
                   <property name="title">
-                   <string>pipe rayonnant</string>
+                   <string>Pipe rayonnant</string>
                   </property>
                   <layout class="QHBoxLayout" name="horizontalLayout_4">
                    <item>
                      <item row="1" column="1">
                       <widget class="QSpinBox" name="sb_nbTranches">
                        <property name="toolTip">
-                        <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Pipe rayonnant construit sur le fond de fissure :&lt;/p&gt;&lt;p&gt;Nombre de mailles (approximatif) le long de la ligne de fond de fissure.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                        <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Pipe rayonnant construit sur le fond de fissure :&lt;/p&gt;&lt;p&gt;nombre de mailles (approximatif) le long de la ligne de fond de fissure.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
                        </property>
                        <property name="minimum">
                         <number>7</number>
                    <string>Paramètres optionnels de discrétisation</string>
                   </property>
                   <property name="text">
-                   <string>Options de discretisation</string>
+                   <string>Options de discrétisation</string>
                   </property>
                  </widget>
                 </item>
                    <bool>true</bool>
                   </property>
                   <property name="title">
-                   <string>faces externes</string>
+                   <string>Faces externes</string>
                   </property>
                   <layout class="QHBoxLayout" name="horizontalLayout_3">
                    <item>
                     <widget class="QLabel" name="label_24">
                      <property name="text">
-                      <string>aretes face fissure</string>
+                      <string>Arêtes face fissure</string>
                      </property>
-                    </widget>
+                    </widget>arete
                    </item>
                    <item>
                     <widget class="QDoubleSpinBox" name="dsb_aretesFaceFissure">
                 <bool>true</bool>
                </property>
                <property name="title">
-                <string>identification zone à remailler</string>
+                <string>Identification zone à remailler</string>
                </property>
                <layout class="QGridLayout" name="gridLayout_16">
                 <item row="0" column="0">
                   <item row="1" column="0">
                    <widget class="QLabel" name="label_25">
                     <property name="text">
-                     <string>distance influence</string>
+                     <string>Distance influence</string>
                     </property>
                    </widget>
                   </item>
      <item>
       <widget class="QPushButton" name="pb_reset">
        <property name="toolTip">
-        <string>réinitialisation de tous les paramètres à leur valeur par défaut</string>
+        <string>Réinitialisation de tous les paramètres à leur valeur par défaut</string>
        </property>
        <property name="text">
         <string>Reset</string>
      <item>
       <widget class="QPushButton" name="pb_valPrec">
        <property name="toolTip">
-        <string>réinitialisation de tous les paramètres à leur valeur de la précédente éxécution</string>
+        <string>Réinitialisation de tous les paramètres à leur valeur de la précédente éxécution</string>
        </property>
        <property name="text">
         <string>Précédent</string>
      <item>
       <widget class="QPushButton" name="pb_recharger">
        <property name="toolTip">
-        <string>réinitialisation des paramètres à partir d'un fichier préalablement sauvegardé</string>
+        <string>Réinitialisation des paramètres à partir d'un fichier préalablement sauvegardé</string>
        </property>
        <property name="text">
         <string>Recharger</string>
      <item>
       <widget class="QPushButton" name="pb_sauver">
        <property name="toolTip">
-        <string>sauvegarde des paramètres dans un fichier à choisir</string>
+        <string>Sauvegarde des paramètres dans un fichier à choisir</string>
        </property>
        <property name="text">
         <string>Sauver</string>
index 99d1ba490c4097fc65d0cfb7c0c5111c2d854b31..61a318e483ce83b369a0247d9b63e08f6a6cdbd5 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -18,6 +18,8 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
+import os
+
 from blocFissure.gmu.fissureCoude  import fissureCoude
 
 class fissureCoude_ihm(fissureCoude):
@@ -32,8 +34,8 @@ class fissureCoude_ihm(fissureCoude):
 
 # ---------------------------------------------------------------------------
   def setParamGeometrieSaine(self):
-    """
-    Paramètres géométriques du tuyau coudé sain:
+    """Paramètres géométriques du tuyau coudé sain:
+
     angleCoude
     r_cintr
     l_tube_p1
@@ -41,26 +43,26 @@ class fissureCoude_ihm(fissureCoude):
     epais
     de
     """
-    self.geomParams = dict(angleCoude = self.dico['angle'],
-                           r_cintr    = self.dico['rCintr'],
-                           l_tube_p1  = self.dico['lTubeP1'],
-                           l_tube_p2  = self.dico['lTubeP2'],
-                           epais      = self.dico['epais'],
+    self.geomParams = dict(angleCoude = self.dico['angle'], \
+                           r_cintr    = self.dico['rCintr'], \
+                           l_tube_p1  = self.dico['lTubeP1'], \
+                           l_tube_p2  = self.dico['lTubeP2'], \
+                           epais      = self.dico['epais'], \
                            de         = self.dico['dext'])
 
   # ---------------------------------------------------------------------------
   def setParamMaillageSain(self):
-    self.meshParams = dict(n_long_p1    = self.dico['nbAxeTubeP1'],
-                           n_ep         = self.dico['nbEpaisseur'],
-                           n_long_coude = self.dico['nbAxeCoude'],
-                           n_circ_g     = self.dico['nbCirconf'],
-                           n_circ_d     = self.dico['nbCirconf'],
+    self.meshParams = dict(n_long_p1    = self.dico['nbAxeTubeP1'], \
+                           n_ep         = self.dico['nbEpaisseur'], \
+                           n_long_coude = self.dico['nbAxeCoude'], \
+                           n_circ_g     = self.dico['nbCirconf'], \
+                           n_circ_d     = self.dico['nbCirconf'], \
                            n_long_p2    = self.dico['nbAxeTubeP2'])
 
 # ---------------------------------------------------------------------------
   def setParamShapeFissure(self):
-    """
-    paramètres de la fissure pour le tuyau coude
+    """paramètres de la fissure pour le tuyau coude
+
     profondeur  : 0 < profondeur <= épaisseur
     rayonPipe   : rayon du pipe correspondant au maillage rayonnant
     lenSegPipe  : longueur des mailles rayonnantes le long du fond de fissure (= rayonPipe par défaut)
@@ -74,41 +76,43 @@ class fissureCoude_ihm(fissureCoude):
     externe     : True : fissure face externe, False : fissure face interne
     """
     print("setParamShapeFissure", self.nomCas)
-    self.shapeFissureParams = dict(profondeur  = self.dico['profondeur'],
-                                   rayonPipe   = self.dico['rayonTore'],
-                                   lenSegPipe  = self.dico['lenSegPipe'],
-                                   azimut      = self.dico['azimut'],
-                                   alpha       = self.dico['posiAngul'],
-                                   longueur    = self.dico['longueur'],
-                                   orientation = self.dico['orientation'],
-                                   lgInfluence = self.dico['influence'],
-                                   elliptique  = self.dico['cbForceEllipse'],
+    self.shapeFissureParams = dict(profondeur  = self.dico['profondeur'], \
+                                   rayonPipe   = self.dico['rayonTore'], \
+                                   lenSegPipe  = self.dico['lenSegPipe'], \
+                                   azimut      = self.dico['azimut'], \
+                                   alpha       = self.dico['posiAngul'], \
+                                   longueur    = self.dico['longueur'], \
+                                   orientation = self.dico['orientation'], \
+                                   lgInfluence = self.dico['influence'], \
+                                   elliptique  = self.dico['cbForceEllipse'], \
                                    externe     = self.dico['rbFissExt'])
 
 # ---------------------------------------------------------------------------
   def setParamMaillageFissure(self):
-    """
-    Paramètres du maillage de la fissure pour le tuyau coudé
+    """Paramètres du maillage de la fissure pour le tuyau coudé
+
     Voir également setParamShapeFissure, paramètres rayonPipe et lenSegPipe.
     nbSegRad = nombre de couronnes
     nbSegCercle = nombre de secteurs
     areteFaceFissure = taille cible de l'arête des triangles en face de fissure.
     """
-    self.maillageFissureParams = dict(nomRep        = '.',
-                                      nomFicSain    = self.nomCas,
-                                      nomFicFissure = 'fissure_' + self.nomCas,
-                                      nbsegRad      = self.dico['nbCouronnes'],
-                                      nbsegCercle   = self.dico['nbSecteurs'],
+    self.maillageFissureParams = dict(nomRep        = os.curdir, \
+                                      nomFicSain    = self.nomProbleme, \
+                                      nomFicFissure = self.nomProbleme + '_fissure', \
+                                      nbsegRad      = self.dico['nbCouronnes'], \
+                                      nbsegCercle   = self.dico['nbSecteurs'], \
                                       areteFaceFissure = self.dico['aretesFaceFissure'])
 
   # ---------------------------------------------------------------------------
   def setReferencesMaillageFissure(self):
-    self.referencesMaillageFissure = dict(Entity_Node            = 0,
-                                          Entity_Quad_Edge       = 0,
-                                          Entity_Quad_Triangle   = 0,
-                                          Entity_Quad_Quadrangle = 0,
-                                          Entity_Quad_Tetra      = 0,
-                                          Entity_Quad_Hexa       = 0,
-                                          Entity_Quad_Penta      = 0,
-                                          Entity_Quad_Pyramid    = 0)
+    self.referencesMaillageFissure = dict( \
+                                          Entity_Quad_Quadrangle = 0, \
+                                          Entity_Quad_Hexa = 0, \
+                                          Entity_Node = 0, \
+                                          Entity_Quad_Edge = 0, \
+                                          Entity_Quad_Triangle = 0, \
+                                          Entity_Quad_Tetra = 0, \
+                                          Entity_Quad_Pyramid = 0, \
+                                          Entity_Quad_Penta = 0 \
+                                          )
 
index b6a25d54a5463d93d646aee79199a49baba7dc36..9734be32deacefac089adb1602a986439b775728 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
-# Copyright (C) 2006-2020  EDF R&D
+# Copyright (C) 2006-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -22,6 +22,7 @@
 # if you already have plugins defined in a salome_plugins.py file, add this file at the end.
 # if not, copy this file as ${HOME}/Plugins/smesh_plugins.py or ${APPLI}/Plugins/smesh_plugins.py
 
+import os
 import math
 import sys
 import traceback
@@ -33,26 +34,25 @@ def fissureCoudeDlg(context):
   # get context study, salomeGui
   study = context.study
   sg = context.sg
-  
-  import os
+
   #import subprocess
   #import tempfile
   from qtsalome import QFileDialog, QMessageBox, QPalette, QColor, QDialog
   from blocFissure.ihm.fissureCoude_ui import Ui_Dialog
-  
+
   class fissureCoudeDialog(QDialog):
-    
+
     def __init__(self):
       QDialog.__init__(self)
       # Set up the user interface from Designer.
       self.ui = Ui_Dialog()
       self.ui.setupUi(self)
-      
+
       self.blackPalette = self.ui.dsb_angle.palette()
       self.redPalette = QPalette()
       self.redPalette.setColor(QPalette.Text, QColor(255,0,0))
       self.NOK = False
-      
+
       self.initDefaut()
       self.initDialog(self.defaut)
       self.ui.dsb_angle.setSpecialValueText("saisie_obligatoire")
@@ -73,7 +73,7 @@ def fissureCoudeDlg(context):
       self.ui.dsb_aretesFaceFissure.setSpecialValueText("automatique")
       self.ui.dsb_influence.setSpecialValueText("automatique")
       self.ui.lb_calcul.hide()
-      
+
       # Connect up the buttons.
       self.ui.pb_valPrec.clicked.connect(self.readValPrec)
       self.ui.pb_reset.clicked.connect(self.resetVal)
@@ -81,39 +81,39 @@ def fissureCoudeDlg(context):
       self.ui.pb_sauver.clicked.connect(self.sauver)
       self.ui.buttonBox.accepted.disconnect(self.accept)
       self.ui.buttonBox.accepted.connect(self.execute)
-    
+
     def initDefaut(self):
-      self.defaut = dict(
-        angle             = -181.0,
-        rCintr            = 0.0,
-        lTubeP1           = 0.0,
-        lTubeP2           = 0.0,
-        epais             = 0.0,
-        dext              = 0.0,
-        profondeur        = 0.0,
-        longueur          = 0.0,
-        azimut            = -181.0,
-        orientation       = -1.0,
-        posiAngul         = -181.0,
-        absCurv           = 0.0,
-        nbTranches        = 7,
-        nbCouronnes       = 1,
-        nbSecteurs        = 3,
-        cbOptDiscrSain    = False,
-        cbOptDiscrFiss    = False,
-        rbPosiAngul       = True,
-        rbFissExt         = True,
-        cbForceEllipse    = False,
-        nbAxeTubeP1       = 15,
-        nbAxeTubeP2       = 15,
-        nbAxeCoude        = 10,
-        nbCirconf         = 20,
-        nbEpaisseur       = 3,
-        rayonTore         = 2.0,
-        aretesFaceFissure = 0.0,
-        influence         = 0.0,
+      self.defaut = dict( \
+        angle             = -181.0, \
+        rCintr            = 0.0, \
+        lTubeP1           = 0.0, \
+        lTubeP2           = 0.0, \
+        epais             = 0.0, \
+        dext              = 0.0, \
+        profondeur        = 0.0, \
+        longueur          = 0.0, \
+        azimut            = -181.0, \
+        orientation       = -1.0, \
+        posiAngul         = -181.0, \
+        absCurv           = 0.0, \
+        nbTranches        = 7, \
+        nbCouronnes       = 1, \
+        nbSecteurs        = 3, \
+        cbOptDiscrSain    = False, \
+        cbOptDiscrFiss    = False, \
+        rbPosiAngul       = True, \
+        rbFissExt         = True, \
+        cbForceEllipse    = False, \
+        nbAxeTubeP1       = 15, \
+        nbAxeTubeP2       = 15, \
+        nbAxeCoude        = 10, \
+        nbCirconf         = 20, \
+        nbEpaisseur       = 3, \
+        rayonTore         = 2.0, \
+        aretesFaceFissure = 0.0, \
+        influence         = 0.0, \
         )
-      
+
     def initDialog(self, dico):
       self.ui.dsb_angle.setValue(dico['angle'])
       self.ui.dsb_rCintr.setValue(dico['rCintr'])
@@ -158,7 +158,7 @@ def fissureCoudeDlg(context):
       self.ui.cb_forceEllipse.setChecked(dico['cbForceEllipse'])
       incomplet = self.testval(dico)
       pass
-    
+
     def testval(self, dico):
       incomplet = False
       if dico['angle'] < -180.0:
@@ -166,109 +166,109 @@ def fissureCoudeDlg(context):
         incomplet = True
       else:
         self.ui.dsb_angle.setPalette(self.blackPalette)
-        
+
       if dico['rCintr'] == 0.0:
         self.ui.dsb_rCintr.setPalette(self.redPalette)
         incomplet = True
       else:
         self.ui.dsb_rCintr.setPalette(self.blackPalette)
-        
-      if dico['lTubeP1'] == 0.0:  
+
+      if dico['lTubeP1'] == 0.0:
         self.ui.dsb_lTubeP1.setPalette(self.redPalette)
         incomplet = True
       else:
         self.ui.dsb_lTubeP1.setPalette(self.blackPalette)
-        
-      if dico['lTubeP2'] == 0.0:  
+
+      if dico['lTubeP2'] == 0.0:
         self.ui.dsb_lTubeP2.setPalette(self.redPalette)
         incomplet = True
       else:
         self.ui.dsb_lTubeP2.setPalette(self.blackPalette)
-        
-      if dico['epais'] == 0.0:  
+
+      if dico['epais'] == 0.0:
         self.ui.dsb_epais.setPalette(self.redPalette)
         incomplet = True
       else:
         self.ui.dsb_epais.setPalette(self.blackPalette)
-        
-      if dico['dext'] == 0.0:  
+
+      if dico['dext'] == 0.0:
         self.ui.dsb_dext.setPalette(self.redPalette)
         incomplet = True
       else:
         self.ui.dsb_dext.setPalette(self.blackPalette)
-        
-      if dico['profondeur'] == 0.0:  
+
+      if dico['profondeur'] == 0.0:
         self.ui.dsb_profondeur.setPalette(self.redPalette)
         incomplet = True
       else:
         self.ui.dsb_profondeur.setPalette(self.blackPalette)
-        
-      if dico['longueur'] == 0.0:  
+
+      if dico['longueur'] == 0.0:
         self.ui.dsb_longueur.setPalette(self.redPalette)
         incomplet = True
       else:
         self.ui.dsb_longueur.setPalette(self.blackPalette)
-        
-      if dico['azimut'] < -180.0:  
+
+      if dico['azimut'] < -180.0:
         self.ui.dsb_azimut.setPalette(self.redPalette)
         incomplet = True
       else:
         self.ui.dsb_azimut.setPalette(self.blackPalette)
-        
-      if dico['orientation'] < 0.0:  
+
+      if dico['orientation'] < 0.0:
         self.ui.dsb_orientation.setPalette(self.redPalette)
         incomplet = True
       else:
         self.ui.dsb_orientation.setPalette(self.blackPalette)
-        
-      if dico['posiAngul'] < -180.0 and dico['rbPosiAngul'] == True:  
+
+      if ( ( dico['posiAngul'] < -180.0 ) and dico['rbPosiAngul'] ):
         self.ui.dsb_posiAngul.setPalette(self.redPalette)
         incomplet = True
       else:
         self.ui.dsb_posiAngul.setPalette(self.blackPalette)
-        
-      if dico['absCurv'] == 0.0 and dico['rbPosiAngul'] == False:  
+
+      if ( ( dico['absCurv'] == 0.0 ) and ( not dico['rbPosiAngul'] ) ):
         self.ui.dsb_absCurv.setPalette(self.redPalette)
         incomplet = True
       else:
         self.ui.dsb_absCurv.setPalette(self.blackPalette)
-        
-      if dico['nbTranches'] == 7:  
+
+      if dico['nbTranches'] == 7:
         self.ui.sb_nbTranches.setPalette(self.redPalette)
         incomplet = True
       else:
         self.ui.sb_nbTranches.setPalette(self.blackPalette)
-        
-      if dico['nbCouronnes'] == 1:  
+
+      if dico['nbCouronnes'] == 1:
         self.ui.sb_nbCouronne.setPalette(self.redPalette)
         incomplet = True
       else:
         self.ui.sb_nbCouronne.setPalette(self.blackPalette)
-        
-      if dico['nbSecteurs'] == 3:  
+
+      if dico['nbSecteurs'] == 3:
         self.ui.sb_nbSecteur.setPalette(self.redPalette)
         incomplet = True
       else:
         self.ui.sb_nbSecteur.setPalette(self.blackPalette)
-        
+
       print("incomplet: ", incomplet)
       return incomplet
-    
+
     def fileDefault(self):
-      filedef = os.path.expanduser("~/.config/salome/dialogFissureCoude.dic")
+      filedef = os.path.expanduser( os.path.join(os.environ["HOME"],".config", "salome", "dialogFissureCoude.dic") )
       print(filedef)
       return filedef
-    
+
     def writeDefault(self, dico):
       filedef = self.fileDefault()
       with open(filedef, 'w') as f:
-          f.write(str(dico))
-    
+        f.write(str(dico))
+
     def readValPrec(self):
       filedef = self.fileDefault()
       if os.path.exists(filedef):
         with open(filedef, 'r') as f:
-            txt = f.read()
+          txt = f.read()
         dico = eval(txt)
         print(dico)
         self.initDialog(dico)
@@ -276,7 +276,7 @@ def fissureCoudeDlg(context):
     def resetVal(self):
       #self.initDefaut()
       self.initDialog(self.defaut)
-      
+
     def sauver(self):
       print("sauver")
       fileDiag = QFileDialog(self)
@@ -288,8 +288,8 @@ def fissureCoudeDlg(context):
         filedef = fileNames[0]
         dico = self.creeDico()
         with open(filedef, 'w') as f:
-            f.write(str(dico))
-        
+          f.write(str(dico))
+
     def recharger(self):
       print("recharger")
       fileDiag = QFileDialog(self)
@@ -302,45 +302,45 @@ def fissureCoudeDlg(context):
         print(filedef)
         if os.path.exists(filedef):
           with open(filedef, 'r') as f:
-              txt = f.read()
+            txt = f.read()
           dico = eval(txt)
           print(dico)
           self.initDialog(dico)
-         
+
     def creeDico(self):
-      dico = dict(
-        angle             = self.ui.dsb_angle.value(),
-        rCintr            = self.ui.dsb_rCintr.value(),
-        lTubeP1           = self.ui.dsb_lTubeP1.value(),
-        lTubeP2           = self.ui.dsb_lTubeP2.value(),
-        epais             = self.ui.dsb_epais.value(),
-        dext              = self.ui.dsb_dext.value(),
-        profondeur        = self.ui.dsb_profondeur.value(),
-        longueur          = self.ui.dsb_longueur.value(),
-        azimut            = self.ui.dsb_azimut.value(),
-        orientation       = self.ui.dsb_orientation.value(),
-        posiAngul         = self.ui.dsb_posiAngul.value(),
-        absCurv           = self.ui.dsb_absCurv.value(),
-        nbTranches        = self.ui.sb_nbTranches.value(),
-        nbCouronnes       = self.ui.sb_nbCouronne.value(),
-        nbSecteurs        = self.ui.sb_nbSecteur.value(),
-        cbOptDiscrSain    = self.ui.cb_optDiscrSain.isChecked(),
-        cbOptDiscrFiss    = self.ui.cb_optDiscrFiss.isChecked(),
-        rbPosiAngul       = self.ui.rb_posiAngul.isChecked(),
-        rbFissExt         = self.ui.rb_fissExt.isChecked(),
-        cbForceEllipse    = self.ui.cb_forceEllipse.isChecked(),
-        nbAxeTubeP1       = self.ui.sb_nbAxeTubeP1.value(),
-        nbAxeTubeP2       = self.ui.sb_nbAxeTubeP2.value(),
-        nbAxeCoude        = self.ui.sb_nbAxeCoude.value(),
-        nbCirconf         = self.ui.sb_nbCirconf.value(),
-        nbEpaisseur       = self.ui.sb_nbEpaisseur.value(),
-        rayonTore         = self.ui.dsb_rayonTore.value(),
-        aretesFaceFissure = self.ui.dsb_aretesFaceFissure.value(),
-        influence         = self.ui.dsb_influence.value(),
+      dico = dict( \
+        angle             = self.ui.dsb_angle.value(), \
+        rCintr            = self.ui.dsb_rCintr.value(), \
+        lTubeP1           = self.ui.dsb_lTubeP1.value(), \
+        lTubeP2           = self.ui.dsb_lTubeP2.value(), \
+        epais             = self.ui.dsb_epais.value(), \
+        dext              = self.ui.dsb_dext.value(), \
+        profondeur        = self.ui.dsb_profondeur.value(), \
+        longueur          = self.ui.dsb_longueur.value(), \
+        azimut            = self.ui.dsb_azimut.value(), \
+        orientation       = self.ui.dsb_orientation.value(), \
+        posiAngul         = self.ui.dsb_posiAngul.value(), \
+        absCurv           = self.ui.dsb_absCurv.value(), \
+        nbTranches        = self.ui.sb_nbTranches.value(), \
+        nbCouronnes       = self.ui.sb_nbCouronne.value(), \
+        nbSecteurs        = self.ui.sb_nbSecteur.value(), \
+        cbOptDiscrSain    = self.ui.cb_optDiscrSain.isChecked(), \
+        cbOptDiscrFiss    = self.ui.cb_optDiscrFiss.isChecked(), \
+        rbPosiAngul       = self.ui.rb_posiAngul.isChecked(), \
+        rbFissExt         = self.ui.rb_fissExt.isChecked(), \
+        cbForceEllipse    = self.ui.cb_forceEllipse.isChecked(), \
+        nbAxeTubeP1       = self.ui.sb_nbAxeTubeP1.value(), \
+        nbAxeTubeP2       = self.ui.sb_nbAxeTubeP2.value(), \
+        nbAxeCoude        = self.ui.sb_nbAxeCoude.value(), \
+        nbCirconf         = self.ui.sb_nbCirconf.value(), \
+        nbEpaisseur       = self.ui.sb_nbEpaisseur.value(), \
+        rayonTore         = self.ui.dsb_rayonTore.value(), \
+        aretesFaceFissure = self.ui.dsb_aretesFaceFissure.value(), \
+        influence         = self.ui.dsb_influence.value(), \
         )
       print(dico)
       return dico
-      
+
     def checkValues(self):
       return self.NOK
 
@@ -351,7 +351,7 @@ def fissureCoudeDlg(context):
       from blocFissure.gmu import geomsmesh
       from blocFissure.gmu.casStandard import casStandard
       from blocFissure.ihm.fissureCoude_ihm import fissureCoude_ihm
-      
+
       dico = self.creeDico()
       NOK = self.testval(dico)
       if not(NOK):
@@ -369,14 +369,14 @@ def fissureCoudeDlg(context):
         if dico['aretesFaceFissure'] == 0:
           dico['aretesFaceFissure'] = (areteMinAngle + areteMinCirco)/2.0
           print('aretesFaceFissure', dico['aretesFaceFissure'])
-        if dico['rbPosiAngul'] == False:
+        if not dico['rbPosiAngul']:
           rmoy = (dico['dext'] - dico['epais'])/2.0
           eta = 1
-          if dico['rbFissExt'] == False:
+          if not dico['rbFissExt']:
             eta = -1
           dico['posiAngul'] = (180.0/math.pi)*dico['absCurv']/(dico['rCintr']+(rmoy+eta*dico['epais']/2.0)*math.cos(math.pi*dico['azimut']/180.))
           print('posiAngul' , dico['posiAngul'])
-        
+
         self.writeDefault(dico)
         self.ui.lb_calcul.show()
         probleme = fissureCoude_ihm(0)
@@ -384,11 +384,9 @@ def fissureCoudeDlg(context):
         probleme.executeProbleme()
       self.NOK = NOK
       self.accept()
-    
-    pass 
 
 # ----------------------------------------------------------------------------
-                     
+
   window = fissureCoudeDialog()
 #  window.ui.dsb_tolerance.setValue(0.01)
   retry = True
@@ -402,5 +400,4 @@ def fissureCoudeDlg(context):
       retry = window.checkValues()
     else:
       print("dialog rejected, exit")
-  pass
-  
+
index 62fad0bbcf820c570b2afde86f8a497f07a59259..23755b2d99bd94d23bce4a112ca91d1e526a6bef 100644 (file)
@@ -7,20 +7,20 @@
     <x>0</x>
     <y>0</y>
     <width>664</width>
-    <height>624</height>
+    <height>681</height>
    </rect>
   </property>
   <property name="windowTitle">
    <string>Insertion de fissure dans un maillage sain</string>
   </property>
   <property name="toolTip">
-   <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Insertion d'un maillage de fissure dans un maillage hexaédrique sain.&lt;/p&gt;&lt;p&gt;Le maillage sain est fourni sous forme de fichier Med.&lt;/p&gt;&lt;p&gt;La face de fissure est décrite par une géométrie dans un fichier brep.&lt;/p&gt;&lt;p&gt;La ou les arêtes de fond de fissure sont données par leurs index dans la face de fissure.&lt;/p&gt;&lt;p&gt;La procédure identfie des mailles saines à enlever et remailler, construit un maillage régulier rayonnant autour de la ligne de fond de fissure, reconstitue les faces externes en triangles, complète la zone à remailler en tétraèdres.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+   <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Insertion d'un maillage de fissure dans un maillage hexaédrique sain.&lt;/p&gt;&lt;p&gt;Le maillage sain est fourni sous forme de fichier med.&lt;/p&gt;&lt;p&gt;La face de fissure est décrite par une géométrie dans un fichier de cao au format xao ou brep.&lt;/p&gt;&lt;p&gt;Si le format xao est utilisé, le fond de la fissure est identifiable par les noms du ou des groupes d'arêtes créés sur ce fond.&lt;/p&gt;&lt;p&gt; Avec le format brep, le fond de fissure est donné par les index des arêtes du fond dans la face de fissure du point de vue de GEOM. Cela est également possible pour un format xao.&lt;/p&gt;&lt;p&gt;La procédure identifie des mailles saines à enlever et à remailler, construit un maillage régulier rayonnant autour de la ligne de fond de fissure, reconstitue les faces externes en triangles, complète la zone à remailler en tétraèdres.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
   </property>
   <layout class="QVBoxLayout" name="verticalLayout_3">
    <item>
     <widget class="QGroupBox" name="groupBox">
      <property name="title">
-      <string>maillage sain et géometries de fissure</string>
+      <string>Maillage sain et géométries de fissure</string>
      </property>
      <layout class="QGridLayout" name="gridLayout_4">
       <item row="1" column="0">
         <item>
          <widget class="QLabel" name="label">
           <property name="text">
-           <string>index edges fond fissure</string>
+           <string>Arêtes fond de fissure</string>
           </property>
          </widget>
         </item>
         <item>
          <widget class="QLineEdit" name="le_fondfiss">
           <property name="toolTip">
-           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Index des edges décrivant le fond de fissure, dans la face de fissure.&lt;/p&gt;&lt;p&gt;Sous forme d'une liste Python.&lt;/p&gt;&lt;p&gt;Exemples : &lt;span style=&quot; font-weight:600; font-style:italic; color:#000080;&quot;&gt;[5,9]&lt;/span&gt; ou&lt;span style=&quot; font-weight:600;&quot;/&gt;&lt;span style=&quot; font-weight:600; font-style:italic; color:#000080;&quot;&gt;[3]&lt;/span&gt;&lt;/p&gt;&lt;p&gt;(on peut récupérer ces valeurs à l'aide du dialogue de création de groupes d'edges, dans GEOM)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Liste des noms des groupes d'arêtes formant le fond de la fissure.&lt;/p&gt;&lt;p&gt;Exemples : &lt;span style=&quot; font-weight:600; font-style:italic; color:#000080;&quot;&gt;["F_1", "F_2"]&lt;/span&gt; ou&lt;span style=&quot; font-weight:600;&quot;/&gt;&lt;span style=&quot; font-weight:600; font-style:italic; color:#000080;&quot;&gt;["Fond"]&lt;/span&gt;&lt;/p&gt;&lt;p&gt;Ou liste des index des arêtes décrivant le fond de fissure dans la face de fissure.&lt;/p&gt;&lt;p&gt;Exemples : &lt;span style=&quot; font-weight:600; font-style:italic; color:#000080;&quot;&gt;[5,9]&lt;/span&gt; ou&lt;span style=&quot; font-weight:600;&quot;/&gt;&lt;span style=&quot; font-weight:600; font-style:italic; color:#000080;&quot;&gt;[3]&lt;/span&gt;&lt;/p&gt;&lt;p&gt;(On peut récupérer ces valeurs à l'aide du dialogue de création de groupes d'edges, dans GEOM)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
           </property>
          </widget>
         </item>
         <item row="0" column="1">
          <widget class="QLineEdit" name="le_maillage">
           <property name="toolTip">
-           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;fichier med du maillage sain (hexaèdres)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Fichier med du maillage sain (hexaèdres)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
           </property>
          </widget>
         </item>
         <item row="1" column="0">
          <widget class="QPushButton" name="pb_facefiss">
           <property name="toolTip">
-           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;sélection du fichier brep (géométrie) décrivant la face de fissure.&lt;/p&gt;&lt;p&gt;Un champ rouge correspond à un fichier inexistant.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;sélection du fichier cao (format xao ou brep) décrivant la face de fissure.&lt;/p&gt;&lt;p&gt;Un champ rouge correspond à un fichier inexistant.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
           </property>
           <property name="text">
-           <string>face fissure</string>
+           <string>Face fissure</string>
           </property>
          </widget>
         </item>
         <item row="1" column="1">
          <widget class="QLineEdit" name="le_facefiss">
           <property name="toolTip">
-           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;fichier brep (géométrie) décrivant la face de fissure.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+           <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Fichier cao de la géométrie décrivant la face de fissure (xao ou brep).&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
           </property>
          </widget>
         </item>
@@ -86,7 +86,7 @@
            <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;sélection du fichier med du maillage sain (hexaèdres)&lt;/p&gt;&lt;p&gt;Un champ rouge correspond à un fichier inexistant.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
           </property>
           <property name="text">
-           <string>maillage sain</string>
+           <string>Maillage sain</string>
           </property>
          </widget>
         </item>
      <item>
       <widget class="QGroupBox" name="groupBox_2">
        <property name="title">
-        <string>identification zone à remailler</string>
+        <string>Identification zone à remailler</string>
        </property>
        <layout class="QVBoxLayout" name="verticalLayout">
         <item>
           <item>
            <widget class="QLabel" name="label_2">
             <property name="text">
-             <string>distance influence</string>
+             <string>Distance d'influence</string>
             </property>
            </widget>
           </item>
           <item>
            <widget class="QGroupBox" name="groupBox_3">
             <property name="title">
-             <string>prémaillage face fissure</string>
+             <string>Prémaillage face fissure</string>
             </property>
             <layout class="QHBoxLayout" name="horizontalLayout_7">
              <item>
           <item>
            <widget class="QGroupBox" name="groupBox_7">
             <property name="title">
-             <string>messages</string>
+             <string>Messages</string>
             </property>
             <layout class="QHBoxLayout" name="horizontalLayout_6">
              <item>
                <item>
                 <widget class="QLabel" name="label_10">
                  <property name="text">
-                  <string>mode</string>
+                  <string>Mode</string>
                  </property>
                 </widget>
                </item>
         </sizepolicy>
        </property>
        <property name="title">
-        <string>maillage zone de fissure</string>
+        <string>Maillage zone de fissure</string>
        </property>
        <layout class="QVBoxLayout" name="verticalLayout_2">
         <item>
          <widget class="QGroupBox" name="groupBox_5">
           <property name="title">
-           <string>pipe rayonnant</string>
+           <string>Pipe rayonnant</string>
           </property>
           <layout class="QHBoxLayout" name="horizontalLayout_10">
            <item>
              <item row="0" column="0">
               <widget class="QLabel" name="label_5">
                <property name="text">
-                <string>rayon pipe</string>
+                <string>Rayon pipe</string>
                </property>
               </widget>
              </item>
              <item row="1" column="0">
               <widget class="QLabel" name="label_6">
                <property name="text">
-                <string>longueur mailles</string>
+                <string>Longueur mailles</string>
                </property>
               </widget>
              </item>
              <item row="2" column="0">
               <widget class="QLabel" name="label_7">
                <property name="text">
-                <string>couronnes</string>
+                <string>Couronnes</string>
                </property>
               </widget>
              </item>
              <item row="2" column="1">
               <widget class="QSpinBox" name="sb_couronnes">
                <property name="toolTip">
-                <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Pipe rayonnant construit sur le fond de fissure :&lt;/p&gt;&lt;p&gt;nombre de couronnes de mailles autour de la ligne de fond de fissure.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Pipe rayonnant construit sur le fond de fissure :&lt;/p&gt;&lt;p&gt;Nombre de couronnes de mailles autour de la ligne de fond de fissure.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
                </property>
                <property name="minimum">
                 <number>2</number>
              <item row="3" column="0">
               <widget class="QLabel" name="label_8">
                <property name="text">
-                <string>secteurs</string>
+                <string>Secteurs</string>
                </property>
               </widget>
              </item>
              <item row="3" column="1">
               <widget class="QSpinBox" name="sb_secteurs">
                <property name="toolTip">
-                <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Pipe rayonnant construit sur le fond de fissure :&lt;/p&gt;&lt;p&gt;nombre de secteurs selon un cercle normal au fond de fissure.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Pipe rayonnant construit sur le fond de fissure :&lt;/p&gt;&lt;p&gt;Nombre de secteurs selon un cercle normal au fond de fissure.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
                </property>
                <property name="minimum">
                 <number>4</number>
         <item>
          <widget class="QGroupBox" name="groupBox_6">
           <property name="title">
-           <string>faces externes</string>
+           <string>Faces externes</string>
           </property>
           <layout class="QHBoxLayout" name="horizontalLayout_11">
            <item>
              <item row="0" column="0">
               <widget class="QLabel" name="label_9">
                <property name="text">
-                <string>triangles face fissure</string>
+                <string>Triangles face fissure</string>
                </property>
               </widget>
              </item>
              <item row="1" column="0">
               <widget class="QLabel" name="label_11">
                <property name="text">
-                <string>aretes vives</string>
+                <string>Arêtes vives</string>
                </property>
               </widget>
              </item>
              <item row="1" column="1">
               <widget class="QDoubleSpinBox" name="dsb_aretesVives">
                <property name="toolTip">
-                <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Arêtes vives de la zone à remailler.&lt;/p&gt;&lt;p&gt;Longueur des segments sur ces arêtes.&lt;/p&gt;&lt;p&gt;Ce paramètre est &lt;span style=&quot; font-weight:600; font-style:italic; color:#2631c1;&quot;&gt;optionnel&lt;/span&gt; : laissé à 0,&lt;/p&gt;&lt;p&gt;il est est ajusté automatiquement.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+                <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Longueur des segments sur les arêtes vives de la zone à remailler.&lt;/p&gt;Ce paramètre est &lt;span style=&quot; font-weight:600; font-style:italic; color:#2631c1;&quot;&gt;optionnel&lt;/span&gt; : laissé à 0, il est ajusté automatiquement.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
                </property>
                <property name="decimals">
                 <number>5</number>
      <item row="0" column="0">
       <widget class="QPushButton" name="pb_reptrav">
        <property name="text">
-        <string>répertoire de travail</string>
+        <string>Répertoire de travail</string>
        </property>
       </widget>
      </item>
      <item row="0" column="1">
       <widget class="QLineEdit" name="le_reptrav">
        <property name="toolTip">
-        <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Répertoire dans lequel seront rangés le maillage final, les objets intermédiaires, la log d'exécution.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+        <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Répertoire dans lequel seront rangés le maillage final, les objets intermédiaires, la log d'exécution.&lt;/p&gt;&lt;p&gt;Ce répertoire doit exister avant l'exécution.&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
        </property>
       </widget>
      </item>
      <item row="1" column="0">
       <widget class="QPushButton" name="pb_nomres">
        <property name="text">
-        <string>nom résultat</string>
+        <string>Nom du résultat</string>
        </property>
       </widget>
      </item>
      <item>
       <widget class="QPushButton" name="pb_exemple">
        <property name="toolTip">
-        <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;génération de jeux de données exemple :&lt;/p&gt;&lt;p&gt;maillages sain et face de fissure.&lt;/p&gt;&lt;p&gt;(from blocFissure.materielCasTests import genereMateriel)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
+        <string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;Génération de jeux de données exemple :&lt;/p&gt;&lt;p&gt;maillages sain et face de fissure.&lt;/p&gt;&lt;p&gt;(from blocFissure.materielCasTests import genereMateriel)&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
        </property>
        <property name="text">
         <string>Exemple</string>
      <item>
       <widget class="QPushButton" name="pb_reset">
        <property name="toolTip">
-        <string>réinitialisation de tous les paramètres à leur valeur par défaut</string>
+        <string>Réinitialisation de tous les paramètres à leur valeur par défaut</string>
        </property>
        <property name="text">
         <string>Reset</string>
      <item>
       <widget class="QPushButton" name="pb_valPrec">
        <property name="toolTip">
-        <string>réinitialisation de tous les paramètres à leur valeur de la précédente éxécution</string>
+        <string>Réinitialisation de tous les paramètres à leur valeur de la précédente éxécution</string>
        </property>
        <property name="text">
         <string>Précédent</string>
      <item>
       <widget class="QPushButton" name="pb_recharger">
        <property name="toolTip">
-        <string>réinitialisation des paramètres à partir d'un fichier préalablement sauvegardé</string>
+        <string>Réinitialisation des paramètres à partir d'un fichier préalablement sauvegardé</string>
        </property>
        <property name="text">
         <string>Recharger</string>
      <item>
       <widget class="QPushButton" name="pb_sauver">
        <property name="toolTip">
-        <string>sauvegarde des paramètres dans un fichier à choisir</string>
+        <string>Sauvegarde des paramètres dans un fichier à choisir</string>
        </property>
        <property name="text">
         <string>Sauver</string>
index 15ff7bc0c10c0979fbd0f6d08baf2385f7d3b383..e2791befbbdb0125b5ef0ca3083c037a5e486104 100644 (file)
@@ -1,6 +1,6 @@
 # -*- coding: utf-8 -*-
 
-# Copyright (C) 2006-2020  EDF R&D
+# Copyright (C) 2006-2024  EDF
 #
 # 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
 #
 
+"""Pilotage de la fenêtre de dialogue"""
+
 # if you already have plugins defined in a salome_plugins.py file, add this file at the end.
 # if not, copy this file as ${HOME}/Plugins/smesh_plugins.py or ${APPLI}/Plugins/smesh_plugins.py
 
-import sys, traceback
-import math
+import sys
+import traceback
 from blocFissure import gmu
 
 def fissureGeneraleDlg(context):
-  # get context study, salomeGui
+  """get context study, salomeGui"""
   study = context.study
   sg = context.sg
 
@@ -44,6 +46,7 @@ def fissureGeneraleDlg(context):
   from blocFissure.ihm.fissureGenerale_ui import Ui_Dialog
 
   class fissureGeneraleDialog(QtWidgets.QDialog):
+    """classe du dialogue"""
 
     def __init__(self):
       print("__init__")
@@ -75,28 +78,28 @@ def fissureGeneraleDlg(context):
       self.ui.bb_OkCancel.accepted.connect(self.execute)
 
     def initDefaut(self):
-      self.defaut = dict(
-        nomCas            = 'angleCube',
-        maillageSain      = os.path.join(gmu.pathBloc, 'materielCasTests/CubeAngle.med'),
-        brepFaceFissure   = os.path.join(gmu.pathBloc, "materielCasTests/CubeAngleFiss.brep"),
-        edgeFissIds       = [4],
-        lgInfluence       = 20,
-        meshBrep          = (5,10),
-        rayonPipe         = 5,
-        lenSegPipe        = 2.5,
-        nbSegRad          = 5,
-        nbSegCercle       = 32,
-        areteFaceFissure  = 10,
-        areteVives        = 0,
-        reptrav           = '.',
-        nomres            = 'casStandard_fissure.med',
+      self.defaut = dict( \
+        nomCas            = "angleCube", \
+        maillageSain      = os.path.join(gmu.pathBloc, "materielCasTests", "CubeAngle.med"), \
+        CAOFaceFissure    = os.path.join(gmu.pathBloc, "materielCasTests", "CubeAngleFiss.brep"), \
+        edgeFiss          = [3], \
+        lgInfluence       = 20, \
+        meshBrep          = (5,10), \
+        rayonPipe         = 5, \
+        lenSegPipe        = 2.5, \
+        nbSegRad          = 5, \
+        nbSegCercle       = 32, \
+        areteFaceFissure  = 10, \
+        areteVives        = 0, \
+        reptrav           = os.curdir, \
+        nomres            = "maillage_avec_fissure", \
         verbosite         = 0)
 
 
     def initDialog(self, dico):
       self.ui.le_maillage.setText(dico['maillageSain'])
-      self.ui.le_facefiss.setText(dico['brepFaceFissure'])
-      self.ui.le_fondfiss.setText(str(dico['edgeFissIds']))
+      self.ui.le_facefiss.setText(dico['CAOFaceFissure'])
+      self.ui.le_fondfiss.setText(str(dico['edgeFiss']))
       self.ui.dsb_influence.setValue(dico['lgInfluence'])
       self.ui.dsb_meshBrepMin.setValue(dico['meshBrep'][0])
       self.ui.dsb_meshBrepMax.setValue(dico['meshBrep'][1])
@@ -112,8 +115,7 @@ def fissureGeneraleDlg(context):
       self.ui.le_reptrav.setText(os.path.abspath(dico['reptrav']))
       self.ui.le_nomres.setText(os.path.split(dico['nomres'])[1])
       self.ui.cb_log.setCurrentIndex(dico['verbosite'])
-      incomplet = self.testval(dico)
-      pass
+      #incomplet = self.testval(dico)
 
     def testval(self, dico):
       incomplet = False
@@ -122,25 +124,40 @@ def fissureGeneraleDlg(context):
         incomplet = True
       else:
         self.ui.le_maillage.setPalette(self.blackPalette)
-      if not os.path.lexists(dico['brepFaceFissure']):
+      cao_file = dico['CAOFaceFissure']
+      if not os.path.lexists(cao_file):
         self.ui.le_facefiss.setPalette(self.redPalette)
         incomplet = True
       else:
-        self.ui.le_facefiss.setPalette(self.blackPalette)
-      edgeFissIdsOK=True
-      try:
-        l = dico['edgeFissIds']
-        for i in l:
-          if not isinstance(i, int):
-            print("not isinstance(i, int)")
+        suffix = os.path.basename(cao_file).split(".")[-1]
+        if ( suffix.upper() not in ("BREP","XAO") ):
+          print ("Suffixe inconnu pour le fichier {}".format(cao_file))
+          self.ui.le_facefiss.setPalette(self.redPalette)
+          incomplet = True
+        else:
+          self.ui.le_facefiss.setPalette(self.blackPalette)
+      if dico['edgeFiss']:
+        edgeFissOK=True
+        param_0 = dico['edgeFiss'][0]
+        type_param_id = type(param_0)
+        for param in dico['edgeFiss'][1:]:
+          if not isinstance(param,type_param_id):
+            print ("La donnée {} n'est pas du même type que la première de la liste : {}.".format(param,type(param)))
+            incomplet = True
+            edgeFissOK=False
+        if edgeFissOK:
+          if isinstance(param_0, int):
+            pass
+          elif isinstance(param_0, str):
+            pass
+          else:
+            print("Il faut une liste de noms de groupes d'arêtes ou une liste d'IDs d'arêtes.")
             incomplet = True
-            edgeFissIdsOK=False
-            break
-      except:
-        print("except eval")
+            edgeFissOK=False
+      else:
         incomplet = True
-        edgeFissIdsOK=False
-      if edgeFissIdsOK:
+        edgeFissOK=False
+      if edgeFissOK:
         self.ui.le_fondfiss.setPalette(self.blackPalette)
       else:
         self.ui.le_fondfiss.setPalette(self.redPalette)
@@ -174,19 +191,19 @@ def fissureGeneraleDlg(context):
       return incomplet
 
     def fileDefault(self):
-      filedef = os.path.expanduser("~/.config/salome/dialogFissureGenerale.dic")
+      filedef = os.path.expanduser( os.path.join(os.environ["HOME"], ".config", "salome", "dialogFissureGenerale.dic") )
       print(filedef)
       return filedef
 
     def writeDefault(self, dico):
       filedef = self.fileDefault()
-      with open(filedef, 'w') as f:
-          f.write(str(dico))
+      with open(filedef, 'w') as fichier:
+        fichier.write(str(dico))
 
     def genereExemples(self):
-      maillageSain      = os.path.join(gmu.pathBloc, 'materielCasTests/CubeAngle.med')
-      brepFaceFissure   = os.path.join(gmu.pathBloc, "materielCasTests/CubeAngleFiss.brep")
-      if (os.path.exists(maillageSain) and os.path.exists(brepFaceFissure)):
+      maillageSain      = os.path.join(gmu.pathBloc, "materielCasTests", "CubeAngle.med")
+      CAOFaceFissure    = os.path.join(gmu.pathBloc, "materielCasTests", "CubeAngleFiss.brep")
+      if (os.path.exists(maillageSain) and os.path.exists(CAOFaceFissure )):
         self.initDialog(self.defaut)
       else:
         self.ui.lb_calcul.setText("--- Generation exemples en cours ---")
@@ -198,8 +215,8 @@ def fissureGeneraleDlg(context):
     def readValPrec(self):
       filedef = self.fileDefault()
       if os.path.exists(filedef):
-        with open(filedef, 'r') as f:
-            txt = f.read()
+        with open(filedef, 'r') as fichier:
+          txt = fichier.read()
         dico = eval(txt)
         print(dico)
         self.initDialog(dico)
@@ -220,7 +237,6 @@ def fissureGeneraleDlg(context):
       elif index == 2:
         initLog.setDebug(logfile)
 
-
     def sauver(self):
       print("sauver")
       fileDiag = QFileDialog(self)
@@ -234,8 +250,8 @@ def fissureGeneraleDlg(context):
         if filedef[-4:] not in ['.dic']:
           filedef += '.dic'
         dico = self.creeDico()
-        with open(filedef, 'w') as f:
-          f.write(str(dico))
+        with open(filedef, 'w') as fichier:
+          fichier.write(str(dico))
 
     def recharger(self):
       print("recharger")
@@ -248,8 +264,8 @@ def fissureGeneraleDlg(context):
         filedef = fileNames[0]
         print(filedef)
         if os.path.exists(filedef):
-          with open(filedef, 'r') as f:
-            txt = f.read()
+          with open(filedef, 'r') as fichier:
+            txt = fichier.read()
           dico = eval(txt)
           print(dico)
           self.initDialog(dico)
@@ -306,21 +322,21 @@ def fissureGeneraleDlg(context):
         self.ui.le_nomres.setText(nomres)
 
     def creeDico(self):
-      dico = dict(
-                  maillageSain     = str(self.ui.le_maillage.text()),
-                  brepFaceFissure  = str(self.ui.le_facefiss.text()),
-                  edgeFissIds      = eval(str(self.ui.le_fondfiss.text())),
-                  lgInfluence      = self.ui.dsb_influence.value(),
-                  meshBrep         = [self.ui.dsb_meshBrepMin.value(),self.ui.dsb_meshBrepMax.value()],
-                  rayonPipe        = self.ui.dsb_rayonPipe.value(),
-                  lenSegPipe       = self.ui.dsb_lenSegPipe.value(),
-                  nbSegRad         = self.ui.sb_couronnes.value(),
-                  nbSegCercle      = self.ui.sb_secteurs.value(),
-                  areteFaceFissure = self.ui.dsb_areteFaceFissure.value(),
-                  aretesVives      = self.ui.dsb_aretesVives.value(),
-                  reptrav          = str(self.ui.le_reptrav.text()),
-                  nomres           = str(self.ui.le_nomres.text()),
-                  verbosite        = self.ui.cb_log.currentIndex()
+      dico = dict( \
+                  maillageSain     = str(self.ui.le_maillage.text()), \
+                  CAOFaceFissure   = str(self.ui.le_facefiss.text()), \
+                  edgeFiss         = eval(str(self.ui.le_fondfiss.text())), \
+                  lgInfluence      = self.ui.dsb_influence.value(), \
+                  meshBrep         = [self.ui.dsb_meshBrepMin.value(),self.ui.dsb_meshBrepMax.value()], \
+                  rayonPipe        = self.ui.dsb_rayonPipe.value(), \
+                  lenSegPipe       = self.ui.dsb_lenSegPipe.value(), \
+                  nbSegRad         = self.ui.sb_couronnes.value(), \
+                  nbSegCercle      = self.ui.sb_secteurs.value(), \
+                  areteFaceFissure = self.ui.dsb_areteFaceFissure.value(), \
+                  aretesVives      = self.ui.dsb_aretesVives.value(), \
+                  reptrav          = str(self.ui.le_reptrav.text()), \
+                  nomres           = str(self.ui.le_nomres.text()), \
+                  verbosite        = self.ui.cb_log.currentIndex() \
                   )
       print(dico)
       return dico
@@ -366,8 +382,6 @@ def fissureGeneraleDlg(context):
       self.ui.lb_calcul.hide()
       #self.accept()
 
-    pass
-
 # ----------------------------------------------------------------------------
 
   print("main")
@@ -383,5 +397,3 @@ def fissureGeneraleDlg(context):
       retry = window.checkValues()
     else:
       print("dialog rejected, exit")
-  pass
-
index 2c5a9d4177e1b9e7d0ff7f2873f66758a88d99fc..14616e8c6e82c2ceb13fcbc602a0054c998616ef 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: iso-8859-1 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -34,8 +34,8 @@ crack = 'fissureSoudureTest.brep'
 
 dicoParams = dict(nomCas            = 'casTestCoinTriple',
                   maillageSain      = '/local00/home/I48174/Documents/soudure/essaiFissure/{0}'.format(mesh),
-                  brepFaceFissure   = '/local00/home/I48174/Documents/soudure/essaiFissure/{0}'.format(crack),
-                  edgeFissIds       = [4],
+                  CAOFaceFissure    = '/local00/home/I48174/Documents/soudure/essaiFissure/{0}'.format(crack),
+                  edgeFiss          = [4],
                   lgInfluence       = 30,
                   meshBrep          = (5,10),
                   rayonPipe         = 5,
index f871078c549c6d387d342fcbbc7ca8e0d0daa5a4..82eae3de20db7e23614d0452c98fdaaee0e4da1c 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: iso-8859-1 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -34,8 +34,8 @@ crack = 'fissureSoudureTest.brep'
 
 dicoParams = dict(nomCas            = 'casTestCoinTriple',
                   maillageSain      = '/local00/home/I48174/Documents/soudure/essaiFissure/{0}'.format(mesh),
-                  brepFaceFissure   = '/local00/home/I48174/Documents/soudure/essaiFissure/{0}'.format(crack),
-                  edgeFissIds       = [4],
+                  CAOFaceFissure    = '/local00/home/I48174/Documents/soudure/essaiFissure/{0}'.format(crack),
+                  edgeFiss          = [4],
                   lgInfluence       = 30,
                   meshBrep          = (5,10),
                   rayonPipe         = 10,
index dc79c94d367382d803886ff05e1735c94c2cd2c4..fe0b936802d08f262ef6ded9f87ce2d7d2a05aa3 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: iso-8859-1 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -34,8 +34,8 @@ crack = 'hue.brep'
 
 dicoParams = dict(nomCas            = 'testAubry',
                   maillageSain      = '/local00/home/I48174/Bureau/{0}'.format(mesh),
-                  brepFaceFissure   = '/local00/home/I48174/Bureau/{0}'.format(crack),
-                  edgeFissIds       = [8],
+                  CAOFaceFissure    = '/local00/home/I48174/Bureau/{0}'.format(crack),
+                  edgeFiss          = [8],
                   lgInfluence       = 0.01,
                   meshBrep          = (0.0002,0.003),
                   rayonPipe         = 0.005,
index bf9e3eb4384fc362b1dd4ecfb6756c1cd6d0b2e7..9df86812f3e77fde1a4d91b4179d36a0ef64a55d 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -25,15 +25,16 @@ SET(plugin_SCRIPTS
   cubeAngle.py
   cubeFin.py
   decoupeCylindre.py
-  disque_perce.py
+  disquePerce.py
   ellipse_disque.py
   ellipse_probleme.py
   ellipse.py
   eprouvetteCourbe.py
   eprouvetteDroite.py
-  fissureGauche2.py
+  fissureGauche_2.py
   fissureGauche.py
   genereMateriel.py
+  tube.py
   vis.py
 )
 
index 741586626e24d0e07970113b7a7b6f822c0ffec7..c3f5ac159573c2f186fcdf2abbe5ec96c8d5c6de 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 02be3090e96e17c7486f7928cd44a3ac4c276ef9..73feaf6e3d87d9c2694333b5713d1efefbceb87d 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Géométries et maillages de base nécessaires aux cas-tests :
+. cubeAngle
+. cubeAngle_2
+"""
 
-import sys
-import salome
+import os
 
-salome.salome_init()
+import logging
 
-import salome_notebook
+import salome
+from salome.smesh import smeshBuilder
+import GEOM
+import SMESH
+import SALOMEDS
 
-import os
 from blocFissure import gmu
+from blocFissure.gmu.geomsmesh import geompy
+from blocFissure.gmu.geomsmesh import geomPublish
+
+from blocFissure.gmu.triedreBase import triedreBase
+from blocFissure.gmu.putName import putName
+from blocFissure.gmu import initLog
+
+#=============== Options ====================
+# 1. NOM_OBJET = nom de l'objet
+NOM_OBJET = "CubeAngle"
+#============================================
 
 ###
 ### GEOM component
 ###
 
-import GEOM
-from salome.geom import geomBuilder
-import math
-import SALOMEDS
-
-
-geompy = geomBuilder.New()
+O, OX, OY, OZ = triedreBase()
 
-O = geompy.MakeVertex(0, 0, 0)
-OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
-OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
-OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
 Box_1 = geompy.MakeBoxDXDYDZ(200, 200, 200)
 Vertex_1 = geompy.MakeVertex(0, 0, 100)
 Disk_1 = geompy.MakeDiskPntVecR(Vertex_1, OZ, 60)
@@ -51,44 +58,53 @@ Vertex_2 = geompy.MakeVertex(-5, -5, 90)
 Vertex_3 = geompy.MakeVertex(65, 65, 110)
 Box_2 = geompy.MakeBoxTwoPnt(Vertex_3, Vertex_2)
 Common_1 = geompy.MakeCommon(Disk_1, Box_2)
-geompy.ExportBREP(Common_1, os.path.join(gmu.pathBloc, "materielCasTests/CubeAngleFiss.brep"))
-geompy.addToStudy( O, 'O' )
-geompy.addToStudy( OX, 'OX' )
-geompy.addToStudy( OY, 'OY' )
-geompy.addToStudy( OZ, 'OZ' )
-geompy.addToStudy( Box_1, 'Box_1' )
-geompy.addToStudy( Vertex_1, 'Vertex_1' )
-geompy.addToStudy( Disk_1, 'Disk_1' )
-geompy.addToStudy( Vertex_2, 'Vertex_2' )
-geompy.addToStudy( Vertex_3, 'Vertex_3' )
-geompy.addToStudy( Box_2, 'Box_2' )
-geompy.addToStudy( Common_1, 'Common_1' )
+
+geompy.addToStudy( Box_1, NOM_OBJET )
+geomPublish(initLog.debug, Vertex_1, 'Vertex_1' )
+geomPublish(initLog.debug, Disk_1, 'Disk_1' )
+geomPublish(initLog.debug, Vertex_2, 'Vertex_2' )
+geomPublish(initLog.debug, Vertex_3, 'Vertex_3' )
+geomPublish(initLog.debug, Box_2, 'Box_2' )
+geompy.addToStudy( Common_1, NOM_OBJET+'_Fissure' )
+
+ficcao = os.path.join(gmu.pathBloc, "materielCasTests", "{}Fiss.brep".format(NOM_OBJET))
+text = ".. Exportation de la géométrie de la fissure dans le fichier '{}'".format(ficcao)
+logging.info(text)
+geompy.ExportBREP(Common_1, ficcao)
 
 ###
 ### SMESH component
 ###
 
-import  SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-
 smesh = smeshBuilder.New()
-from salome.StdMeshers import StdMeshersBuilder
 Mesh_1 = smesh.Mesh(Box_1)
+putName(Mesh_1, NOM_OBJET)
+
 Regular_1D = Mesh_1.Segment()
 Nb_Segments_1 = Regular_1D.NumberOfSegments(15)
 Nb_Segments_1.SetDistrType( 0 )
 Quadrangle_2D = Mesh_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
 Hexa_3D = Mesh_1.Hexahedron(algo=smeshBuilder.Hexa)
-isDone = Mesh_1.Compute()
-smesh.SetName(Mesh_1, 'Mesh_1')
-Mesh_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/CubeAngle.med"))
 
 ## set object names
-smesh.SetName(Mesh_1.GetMesh(), 'Mesh_1')
-smesh.SetName(Regular_1D.GetAlgorithm(), 'Regular_1D')
-smesh.SetName(Nb_Segments_1, 'Nb. Segments_1')
-smesh.SetName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D')
-smesh.SetName(Hexa_3D.GetAlgorithm(), 'Hexa_3D')
+#putName(Regular_1D.GetAlgorithm(), 'Regular_1D')
+#putName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D')
+#putName(Hexa_3D.GetAlgorithm(), 'Hexa_3D')
+putName(Nb_Segments_1, 'Nb. Segments_1', i_pref='cubeAngle')
+
+is_done = Mesh_1.Compute()
+text = "Mesh_1.Compute"
+if is_done:
+  logging.info(text+" OK")
+else:
+  text = "Erreur au calcul du maillage.\n" + text
+  logging.info(text)
+  raise Exception(text)
+
+ficmed = os.path.join(gmu.pathBloc, "materielCasTests","{}.med".format(NOM_OBJET))
+text = ".. Archivage du maillage dans le fichier '{}'".format(ficmed)
+logging.info(text)
+Mesh_1.ExportMED(ficmed)
 
 if salome.sg.hasDesktop():
   salome.sg.updateObjBrowser()
index 2794519b685dda97086490f79dd30c63e3ad8a68..815d6e5ac688a52ac8c19b2abe4b017e064d6ede 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Géométries et maillages de base nécessaires aux cas-tests :
+. cubeFin_Transverse
+. cubeFin_Coin
+. cubeFin_Milieu
+"""
 
-import sys
-import salome
+import os
+import math
 
-salome.salome_init()
+import logging
 
-import salome_notebook
+import salome
+from salome.smesh import smeshBuilder
+import GEOM
+import SMESH
+import SALOMEDS
 
-import os
 from blocFissure import gmu
+from blocFissure.gmu.geomsmesh import geompy
+from blocFissure.gmu.geomsmesh import geomPublish
+from blocFissure.gmu.geomsmesh import geomPublishInFather
+
+from blocFissure.gmu.triedreBase import triedreBase
+from blocFissure.gmu.putName import putName
+from blocFissure.gmu import initLog
 
 ###
 ### GEOM component
 ###
 
-import GEOM
-from salome.geom import geomBuilder
-import math
-import SALOMEDS
-
-
-geompy = geomBuilder.New()
+O, OX, OY, OZ = triedreBase()
 
-O = geompy.MakeVertex(0, 0, 0)
-OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
-OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
-OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
 cubeFin = geompy.MakeBoxDXDYDZ(200, 200, 200)
 [DEPL,ENCASTR] = geompy.SubShapes(cubeFin, [27, 23])
 origCoin = geompy.MakeVertex(0, 160, 200)
@@ -70,77 +75,74 @@ Arc_1 = geompy.MakeArc(Line_1_vertex_3, Vertex_5, Line_3_vertex_2)
 Face_1 = geompy.MakeFaceWires([Line_1, Line_3, Line_4, Arc_1], 1)
 cubeFin_Coin = geompy.MakeCommonList([Rotation_1, Face_1], True)
 cubeFin_Milieu = geompy.MakeCommonList([Scale_1, cubeFin_Transverse], True)
-O_1 = geompy.MakeVertex(0, 0, 0)
-OX_1 = geompy.MakeVectorDXDYDZ(1, 0, 0)
-OY_1 = geompy.MakeVectorDXDYDZ(0, 1, 0)
-OZ_1 = geompy.MakeVectorDXDYDZ(0, 0, 1)
-geompy.addToStudy( O, 'O' )
-geompy.addToStudy( OX, 'OX' )
-geompy.addToStudy( OY, 'OY' )
-geompy.addToStudy( OZ, 'OZ' )
+
 geompy.addToStudy( cubeFin, 'cubeFin' )
 geompy.addToStudyInFather( cubeFin, DEPL, 'DEPL' )
 geompy.addToStudyInFather( cubeFin, ENCASTR, 'ENCASTR' )
-geompy.addToStudy( origCoin, 'origCoin' )
-geompy.addToStudy( Disk_1, 'Disk_1' )
-geompy.addToStudy( Translation_1, 'Translation_1' )
-geompy.addToStudy( Vector_1, 'Vector_1' )
-geompy.addToStudy( Rotation_1, 'Rotation_1' )
-geompy.addToStudy( origMilieu, 'origMilieu' )
-geompy.addToStudy( Translation_2, 'Translation_2' )
-geompy.addToStudy( Scale_1, 'Scale_1' )
-geompy.addToStudy( Vertex_1, 'Vertex_1' )
-geompy.addToStudy( Vertex_2, 'Vertex_2' )
-geompy.addToStudy( Vertex_3, 'Vertex_3' )
-geompy.addToStudy( Vertex_4, 'Vertex_4' )
-geompy.addToStudy( Line_1, 'Line_1' )
-geompy.addToStudy( Line_2, 'Line_2' )
-geompy.addToStudy( Line_3, 'Line_3' )
-geompy.addToStudy( Line_4, 'Line_4' )
-geompy.addToStudy( cubeFin_Transverse, 'cubeFin_Transverse' )
-geompy.addToStudyInFather( Line_1, Line_1_vertex_3, 'Line_1:vertex_3' )
-geompy.addToStudy( Vertex_5, 'Vertex_5' )
-geompy.addToStudyInFather( Line_3, Line_3_vertex_2, 'Line_3:vertex_2' )
-geompy.addToStudy( Arc_1, 'Arc_1' )
-geompy.addToStudy( Face_1, 'Face_1' )
-geompy.addToStudy( cubeFin_Coin, 'cubeFin_Coin' )
-geompy.addToStudy( cubeFin_Milieu, 'cubeFin_Milieu' )
-geompy.addToStudy( O_1, 'O' )
-geompy.addToStudy( OX_1, 'OX' )
-geompy.addToStudy( OY_1, 'OY' )
-geompy.addToStudy( OZ_1, 'OZ' )
-geompy.ExportBREP(cubeFin_Transverse, os.path.join(gmu.pathBloc, "materielCasTests/cubeFin_Transverse.brep"))
-geompy.ExportBREP(cubeFin_Coin, os.path.join(gmu.pathBloc, "materielCasTests/cubeFin_Coin.brep"))
-geompy.ExportBREP(cubeFin_Milieu, os.path.join(gmu.pathBloc, "materielCasTests/cubeFin_Milieu.brep"))
+
+geomPublish(initLog.debug, origCoin, 'origCoin' )
+geomPublish(initLog.debug, Disk_1, 'Disk_1' )
+geomPublish(initLog.debug, Translation_1, 'Translation_1' )
+geomPublish(initLog.debug, Vector_1, 'Vector_1' )
+geomPublish(initLog.debug, Rotation_1, 'Rotation_1' )
+geomPublish(initLog.debug, origMilieu, 'origMilieu' )
+geomPublish(initLog.debug, Translation_2, 'Translation_2' )
+geomPublish(initLog.debug, Scale_1, 'Scale_1' )
+geomPublish(initLog.debug, Vertex_1, 'Vertex_1' )
+geomPublish(initLog.debug, Vertex_2, 'Vertex_2' )
+geomPublish(initLog.debug, Vertex_3, 'Vertex_3' )
+geomPublish(initLog.debug, Vertex_4, 'Vertex_4' )
+geomPublish(initLog.debug, Line_1, 'Line_1' )
+geomPublish(initLog.debug, Line_2, 'Line_2' )
+geomPublish(initLog.debug, Line_3, 'Line_3' )
+geomPublish(initLog.debug, Line_4, 'Line_4' )
+
+geomPublishInFather(initLog.debug, Line_1, Line_1_vertex_3, 'Line_1:vertex_3' )
+geomPublish(initLog.debug, Vertex_5, 'Vertex_5' )
+geomPublishInFather(initLog.debug, Line_3, Line_3_vertex_2, 'Line_3:vertex_2' )
+geomPublish(initLog.debug, Arc_1, 'Arc_1' )
+geomPublish(initLog.debug, Face_1, 'Face_1' )
+
+geompy.addToStudy( cubeFin_Transverse, 'cubeFin_Transverse_fissure' )
+geompy.addToStudy( cubeFin_Coin, 'cubeFin_Coin_fissure' )
+geompy.addToStudy( cubeFin_Milieu, 'cubeFin_Milieu_fissure' )
+
+geompy.ExportBREP(cubeFin_Transverse, os.path.join(gmu.pathBloc, "materielCasTests", "cubeFin_Transverse.brep"))
+geompy.ExportBREP(cubeFin_Coin, os.path.join(gmu.pathBloc, "materielCasTests", "cubeFin_Coin.brep"))
+geompy.ExportBREP(cubeFin_Milieu, os.path.join(gmu.pathBloc, "materielCasTests", "cubeFin_Milieu.brep"))
 
 ###
 ### SMESH component
 ###
 
-import  SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-
 smesh = smeshBuilder.New()
 cubeFin_1 = smesh.Mesh(cubeFin)
+putName(cubeFin_1.GetMesh(), 'cubeFin')
+
 Regular_1D = cubeFin_1.Segment()
 Nb_Segments_1 = Regular_1D.NumberOfSegments(20)
 Nb_Segments_1.SetDistrType( 0 )
 Quadrangle_2D = cubeFin_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
 Hexa_3D = cubeFin_1.Hexahedron(algo=smeshBuilder.Hexa)
-isDone = cubeFin_1.Compute()
-DEPL_1 = cubeFin_1.GroupOnGeom(DEPL,'DEPL',SMESH.FACE)
-ENCASTR_1 = cubeFin_1.GroupOnGeom(ENCASTR,'ENCASTR',SMESH.FACE)
+_ = cubeFin_1.GroupOnGeom(DEPL,'DEPL',SMESH.FACE)
+_ = cubeFin_1.GroupOnGeom(ENCASTR,'ENCASTR',SMESH.FACE)
 
 ## Set names of Mesh objects
-smesh.SetName(Regular_1D.GetAlgorithm(), 'Regular_1D')
-smesh.SetName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D')
-smesh.SetName(Hexa_3D.GetAlgorithm(), 'Hexa_3D')
-smesh.SetName(DEPL_1, 'DEPL')
-smesh.SetName(ENCASTR_1, 'ENCASTR')
-smesh.SetName(cubeFin_1.GetMesh(), 'cubeFin')
-smesh.SetName(Nb_Segments_1, 'Nb. Segments_1')
-
-cubeFin_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/cubeFin.med"))
+#putName(Regular_1D.GetAlgorithm(), 'Regular_1D')
+#putName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D')
+#putName(Hexa_3D.GetAlgorithm(), 'Hexa_3D')
+putName(Nb_Segments_1, 'Nb. Segments_1', i_pref='cubeFin')
+
+is_done = cubeFin_1.Compute()
+text = "cubeFin_1.Compute"
+if is_done:
+  logging.info(text+" OK")
+else:
+  text = "Erreur au calcul du maillage.\n" + text
+  logging.info(text)
+  raise Exception(text)
+
+cubeFin_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests", "cubeFin.med"))
 
 if salome.sg.hasDesktop():
   salome.sg.updateObjBrowser()
index 31e49a43439b029d4f5a1c5d300eb7168e2245b1..c81d91c4d9f18bcffd2205e3f32f14c7882e6e8e 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Géométries et maillages de base nécessaires aux cas-tests :
+. cylindre
+. cylindre_2
+"""
 
-import sys
-import salome
+import os
+import math
 
-salome.salome_init()
+import logging
 
-import salome_notebook
-notebook = salome_notebook.notebook
+import salome
+from salome.smesh import smeshBuilder
+import GEOM
+import SMESH
+import SALOMEDS
 
-import os
 from blocFissure import gmu
+from blocFissure.gmu.geomsmesh import geompy
+from blocFissure.gmu.geomsmesh import geomPublish
+from blocFissure.gmu.geomsmesh import geomPublishInFather
+
+from blocFissure.gmu.triedreBase import triedreBase
+from blocFissure.gmu.putName import putName
+from blocFissure.gmu import initLog
 
 ###
 ### GEOM component
 ###
 
-import GEOM
-from salome.geom import geomBuilder
-import math
-import SALOMEDS
-
+O, OX, OY, OZ = triedreBase()
 
-geompy = geomBuilder.New()
-
-O = geompy.MakeVertex(0, 0, 0)
-OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
-OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
-OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
-O_1 = geompy.MakeVertex(0, 0, 0)
-OX_1 = geompy.MakeVectorDXDYDZ(1, 0, 0)
-OY_1 = geompy.MakeVectorDXDYDZ(0, 1, 0)
-OZ_1 = geompy.MakeVectorDXDYDZ(0, 0, 1)
 Vertex_1 = geompy.MakeVertex(0, 0, 500)
 Vertex_2 = geompy.MakeVertex(100, 0, 500)
 Vertex_3 = geompy.MakeVertex(110, 0, 500)
@@ -70,84 +69,78 @@ Mirror_1_7 = geompy.MakeMirrorByPlane(Vertex_8, Plane_1)
 Mirror_1_8 = geompy.MakeMirrorByPlane(Vertex_9, Plane_1)
 Mirror_1_9 = geompy.MakeMirrorByPlane(Vertex_10, Plane_1)
 Curve_2 = geompy.MakeInterpol([Mirror_1_9, Mirror_1_8, Mirror_1_7, Mirror_1_6, Mirror_1_5, Mirror_1_4, Mirror_1_3, Mirror_1_2, Mirror_1_1, Vertex_1, Vertex_2, Vertex_3, Vertex_4, Vertex_5, Vertex_6, Vertex_7, Vertex_8, Vertex_9, Vertex_10], False, False)
+Divided_Cylinder_1 = geompy.MakeDividedCylinder(145, 800, GEOM.SQUARE)
+CylindreSain = geompy.MakeRotation(Divided_Cylinder_1, OZ, 45*math.pi/180.0)
+[Compound_1, vertical, radial, Compound_4] = geompy.Propagate(CylindreSain)
+geompy.addToStudy( CylindreSain, 'CylindreSain' )
+geomPublishInFather(initLog.debug,CylindreSain, Compound_1, 'Compound_1' )
+geompy.addToStudyInFather(CylindreSain, vertical, 'vertical' )
+geompy.addToStudyInFather(CylindreSain, radial, 'radial' )
+geompy.addToStudyInFather(CylindreSain, Compound_4, 'Compound_4' )
+
 Circle_1 = geompy.MakeCircle(Vertex_1, None, 145)
 Vertex_11 = geompy.MakeVertex(0, -165, 500)
 Curve_2_vertex_2 = geompy.GetSubShape(Curve_2, [2])
 Curve_2_vertex_3 = geompy.GetSubShape(Curve_2, [3])
 Arc_1 = geompy.MakeArc(Curve_2_vertex_2, Vertex_11, Curve_2_vertex_3)
 FissInCylindre = geompy.MakeFaceWires([Curve_2, Arc_1], 1)
-Divided_Cylinder_1 = geompy.MakeDividedCylinder(145, 800, GEOM.SQUARE)
-CylindreSain = geompy.MakeRotation(Divided_Cylinder_1, OZ, 45*math.pi/180.0)
-[Compound_1, vertical, radial, Compound_4] = geompy.Propagate(CylindreSain)
-geompy.ExportBREP(FissInCylindre, os.path.join(gmu.pathBloc, "materielCasTests/FissInCylindre.brep"))
+geompy.addToStudy( FissInCylindre, 'cylindre_fissure' )
+
+geompy.ExportBREP(FissInCylindre, os.path.join(gmu.pathBloc, "materielCasTests", "FissInCylindre.brep"))
+
 Vertex_12 = geompy.MakeVertex(0, -145, 500)
 Circle_2 = geompy.MakeCircle(Vertex_12, None, 145)
 Face_1 = geompy.MakeFaceWires([Circle_2], 1)
 Vertex_13 = geompy.MakeVertex(0, 0, 500)
-Disk_1 = geompy.MakeDiskPntVecR(Vertex_13, OZ_1, 170)
+Disk_1 = geompy.MakeDiskPntVecR(Vertex_13, OZ, 170)
 FissInCylindre2 = geompy.MakeCommon(Face_1, Disk_1)
-geompy.ExportBREP(FissInCylindre2, os.path.join(gmu.pathBloc, "materielCasTests/FissInCylindre2.brep"))
-geompy.addToStudy( O, 'O' )
-geompy.addToStudy( OX, 'OX' )
-geompy.addToStudy( OY, 'OY' )
-geompy.addToStudy( OZ, 'OZ' )
-geompy.addToStudy( O_1, 'O' )
-geompy.addToStudy( OX_1, 'OX' )
-geompy.addToStudy( OY_1, 'OY' )
-geompy.addToStudy( OZ_1, 'OZ' )
-geompy.addToStudy( Vertex_1, 'Vertex_1' )
-geompy.addToStudy( Vertex_2, 'Vertex_2' )
-geompy.addToStudy( Vertex_3, 'Vertex_3' )
-geompy.addToStudy( Vertex_4, 'Vertex_4' )
-geompy.addToStudy( Vertex_5, 'Vertex_5' )
-geompy.addToStudy( Vertex_6, 'Vertex_6' )
-geompy.addToStudy( Vertex_7, 'Vertex_7' )
-geompy.addToStudy( Vertex_8, 'Vertex_8' )
-geompy.addToStudy( Vertex_9, 'Vertex_9' )
-geompy.addToStudy( Vertex_10, 'Vertex_10' )
-geompy.addToStudy( Plane_1, 'Plane_1' )
-geompy.addToStudy( Mirror_1_1, 'Mirror_1_1' )
-geompy.addToStudy( Mirror_1_2, 'Mirror_1_2' )
-geompy.addToStudy( Mirror_1_3, 'Mirror_1_3' )
-geompy.addToStudy( Mirror_1_4, 'Mirror_1_4' )
-geompy.addToStudy( Mirror_1_5, 'Mirror_1_5' )
-geompy.addToStudy( Mirror_1_6, 'Mirror_1_6' )
-geompy.addToStudy( Mirror_1_7, 'Mirror_1_7' )
-geompy.addToStudy( Mirror_1_8, 'Mirror_1_8' )
-geompy.addToStudy( Mirror_1_9, 'Mirror_1_9' )
-geompy.addToStudy( Curve_2, 'Curve_2' )
-geompy.addToStudy( Circle_1, 'Circle_1' )
-geompy.addToStudy( Vertex_11, 'Vertex_11' )
-geompy.addToStudyInFather( Curve_2, Curve_2_vertex_2, 'Curve_2:vertex_2' )
-geompy.addToStudyInFather( Curve_2, Curve_2_vertex_3, 'Curve_2:vertex_3' )
-geompy.addToStudy( Arc_1, 'Arc_1' )
-geompy.addToStudy( FissInCylindre, 'FissInCylindre' )
-geompy.addToStudy( Divided_Cylinder_1, 'Divided Cylinder_1' )
-geompy.addToStudy( CylindreSain, 'CylindreSain' )
-geompy.addToStudyInFather( CylindreSain, Compound_1, 'Compound_1' )
-geompy.addToStudyInFather( CylindreSain, vertical, 'vertical' )
-geompy.addToStudyInFather( CylindreSain, radial, 'radial' )
-geompy.addToStudyInFather( CylindreSain, Compound_4, 'Compound_4' )
-geompy.addToStudy( Vertex_12, 'Vertex_12' )
-geompy.addToStudy( Circle_2, 'Circle_2' )
-geompy.addToStudy( Face_1, 'Face_1' )
-geompy.addToStudy( Vertex_13, 'Vertex_13' )
-geompy.addToStudy( Disk_1, 'Disk_1' )
-geompy.addToStudy( FissInCylindre2, 'FissInCylindre2' )
+geompy.addToStudy( FissInCylindre2, 'cylindre_2_fissure' )
+
+geompy.ExportBREP(FissInCylindre2, os.path.join(gmu.pathBloc, "materielCasTests", "FissInCylindre2.brep"))
+
+geomPublish(initLog.debug, Vertex_1, 'Vertex_1' )
+geomPublish(initLog.debug, Vertex_2, 'Vertex_2' )
+geomPublish(initLog.debug, Vertex_3, 'Vertex_3' )
+geomPublish(initLog.debug, Vertex_4, 'Vertex_4' )
+geomPublish(initLog.debug, Vertex_5, 'Vertex_5' )
+geomPublish(initLog.debug, Vertex_6, 'Vertex_6' )
+geomPublish(initLog.debug, Vertex_7, 'Vertex_7' )
+geomPublish(initLog.debug, Vertex_8, 'Vertex_8' )
+geomPublish(initLog.debug, Vertex_9, 'Vertex_9' )
+geomPublish(initLog.debug, Vertex_10, 'Vertex_10' )
+geomPublish(initLog.debug, Plane_1, 'Plane_1' )
+geomPublish(initLog.debug, Mirror_1_1, 'Mirror_1_1' )
+geomPublish(initLog.debug, Mirror_1_2, 'Mirror_1_2' )
+geomPublish(initLog.debug, Mirror_1_3, 'Mirror_1_3' )
+geomPublish(initLog.debug, Mirror_1_4, 'Mirror_1_4' )
+geomPublish(initLog.debug, Mirror_1_5, 'Mirror_1_5' )
+geomPublish(initLog.debug, Mirror_1_6, 'Mirror_1_6' )
+geomPublish(initLog.debug, Mirror_1_7, 'Mirror_1_7' )
+geomPublish(initLog.debug, Mirror_1_8, 'Mirror_1_8' )
+geomPublish(initLog.debug, Mirror_1_9, 'Mirror_1_9' )
+geomPublish(initLog.debug, Curve_2, 'Curve_2' )
+geomPublish(initLog.debug, Circle_1, 'Circle_1' )
+geomPublish(initLog.debug, Vertex_11, 'Vertex_11' )
+geomPublishInFather(initLog.debug, Curve_2, Curve_2_vertex_2, 'Curve_2:vertex_2' )
+geomPublishInFather(initLog.debug, Curve_2, Curve_2_vertex_3, 'Curve_2:vertex_3' )
+geomPublish(initLog.debug, Arc_1, 'Arc_1' )
+geomPublish(initLog.debug, FissInCylindre, 'FissInCylindre' )
+geomPublish(initLog.debug, Divided_Cylinder_1, 'Divided Cylinder_1' )
+geomPublish(initLog.debug, Vertex_12, 'Vertex_12' )
+geomPublish(initLog.debug, Circle_2, 'Circle_2' )
+geomPublish(initLog.debug, Face_1, 'Face_1' )
+geomPublish(initLog.debug, Vertex_13, 'Vertex_13' )
+geomPublish(initLog.debug, Disk_1, 'Disk_1' )
+geomPublish(initLog.debug, FissInCylindre2, 'FissInCylindre2' )
 
 ###
 ### SMESH component
 ###
 
-import  SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-
 smesh = smeshBuilder.New()
-from salome.StdMeshers import StdMeshersBuilder
-smeshObj_1 = smesh.CreateHypothesis('NumberOfSegments')
-smeshObj_1.SetNumberOfSegments( 5 )
-smeshObj_1.SetDistrType( 0 )
 CylindreSain_1 = smesh.Mesh(CylindreSain)
+putName(CylindreSain_1.GetMesh(), 'CylindreSain')
+
 Regular_1D = CylindreSain_1.Segment()
 Nb_Segments_1 = Regular_1D.NumberOfSegments(15,[],[  ])
 Nb_Segments_1.SetDistrType( 0 )
@@ -159,26 +152,25 @@ Nb_Segments_2.SetDistrType( 0 )
 Regular_1D_2 = CylindreSain_1.Segment(geom=radial)
 Nb_Segments_3 = Regular_1D_2.NumberOfSegments(6,[],[  ])
 Nb_Segments_3.SetDistrType( 0 )
-isDone = CylindreSain_1.Compute()
-smesh.SetName(CylindreSain_1, 'CylindreSain')
-CylindreSain_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests//CylindreSain.med"))
-SubMesh_1 = Regular_1D_1.GetSubMesh()
-SubMesh_2 = Regular_1D_2.GetSubMesh()
-
-## some objects were removed
-aStudyBuilder = salome.myStudy.NewBuilder()
-SO = salome.myStudy.FindObjectIOR(salome.myStudy.ConvertObjectToIOR(smeshObj_1))
-if SO is not None: aStudyBuilder.RemoveObjectWithChildren(SO)
+
 ## set object names
-smesh.SetName(CylindreSain_1.GetMesh(), 'CylindreSain')
-smesh.SetName(Regular_1D.GetAlgorithm(), 'Regular_1D')
-smesh.SetName(Nb_Segments_1, 'Nb. Segments_1')
-smesh.SetName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D')
-smesh.SetName(Hexa_3D.GetAlgorithm(), 'Hexa_3D')
-smesh.SetName(Nb_Segments_2, 'Nb. Segments_2')
-smesh.SetName(Nb_Segments_3, 'Nb. Segments_3')
-smesh.SetName(SubMesh_1, 'SubMesh_1')
-smesh.SetName(SubMesh_2, 'SubMesh_2')
+#smesh.SetName(Regular_1D.GetAlgorithm(), 'Regular_1D')
+#smesh.SetName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D')
+#smesh.SetName(Hexa_3D.GetAlgorithm(), 'Hexa_3D')
+putName(Nb_Segments_1, 'Nb. Segments_1', i_pref='cylindre')
+putName(Nb_Segments_2, 'Nb. Segments_2', i_pref='cylindre')
+putName(Nb_Segments_3, 'Nb. Segments_3', i_pref='cylindre')
+
+is_done = CylindreSain_1.Compute()
+text = "CylindreSain_1.Compute"
+if is_done:
+  logging.info(text+" OK")
+else:
+  text = "Erreur au calcul du maillage.\n" + text
+  logging.info(text)
+  raise Exception(text)
+
+CylindreSain_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests", "CylindreSain.med"))
 
 if salome.sg.hasDesktop():
   salome.sg.updateObjBrowser()
diff --git a/src/Tools/blocFissure/materielCasTests/disquePerce.py b/src/Tools/blocFissure/materielCasTests/disquePerce.py
new file mode 100644 (file)
index 0000000..5d9cb84
--- /dev/null
@@ -0,0 +1,105 @@
+# -*- coding: iso-8859-1 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Géométrie et maillage de base nécessaire au cas-test :
+. disquePerce
+"""
+
+import os
+
+import logging
+
+import salome
+from salome.smesh import smeshBuilder
+from salome.StdMeshers import StdMeshersBuilder
+import GEOM
+import SMESH
+import SALOMEDS
+
+from blocFissure import gmu
+from blocFissure.gmu.geomsmesh import geompy
+from blocFissure.gmu.geomsmesh import geomPublish
+from blocFissure.gmu.geomsmesh import geomPublishInFather
+
+from blocFissure.gmu.triedreBase import triedreBase
+from blocFissure.gmu.putName import putName
+from blocFissure.gmu import initLog
+
+###
+### GEOM component
+###
+
+O, OX, OY, OZ = triedreBase()
+
+Cylinder_1 = geompy.MakeCylinderRH(100, 300)
+Cylinder_2 = geompy.MakeCylinderRH(600, 200)
+Cut_1 = geompy.MakeCut(Cylinder_2, Cylinder_1)
+Face_1 = geompy.MakeFaceHW(500, 1500, 3)
+Disque = geompy.MakePartition([Cut_1], [Face_1], [], [], geompy.ShapeType["SOLID"], 0, [], 0)
+[Compound_1, Compound_2, Compound_3, Compound_4] = geompy.Propagate(Disque)
+geompy.addToStudy( Disque, 'Disque' )
+geompy.addToStudyInFather( Disque, Compound_1, 'Compound_1' )
+geompy.addToStudyInFather( Disque, Compound_2, 'Compound_2' )
+geompy.addToStudyInFather( Disque, Compound_3, 'Compound_3' )
+geompy.addToStudyInFather( Disque, Compound_4, 'Compound_4' )
+
+geomPublish(initLog.debug, Cylinder_1, 'Cylinder_1' )
+geomPublish(initLog.debug, Cylinder_2, 'Cylinder_2' )
+geomPublish(initLog.debug, Cut_1, 'Cut_1' )
+geomPublish(initLog.debug, Face_1, 'Face_1' )
+
+###
+### SMESH component
+###
+
+smesh = smeshBuilder.New()
+Disque_1 = smesh.Mesh(Disque)
+putName(Disque_1.GetMesh(), 'Disque')
+
+Regular_1D = Disque_1.Segment()
+Nb_Segments_1 = Regular_1D.NumberOfSegments(10)
+Nb_Segments_1.SetDistrType( 0 )
+Hexa_3D = Disque_1.Hexahedron(algo=smeshBuilder.Hexa)
+Regular_1D_1 = Disque_1.Segment(geom=Compound_3)
+Nb_Segments_2 = Regular_1D_1.NumberOfSegments(20)
+Nb_Segments_2.SetDistrType( 0 )
+Regular_1D_2 = Disque_1.Segment(geom=Compound_4)
+status = Disque_1.AddHypothesis(Nb_Segments_2,Compound_4)
+Quadrangle_2D = Disque_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
+
+## set object names
+#smesh.SetName(Regular_1D.GetAlgorithm(), 'Regular_1D')
+#smesh.SetName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D')
+#smesh.SetName(Hexa_3D.GetAlgorithm(), 'Hexa_3D')
+putName(Nb_Segments_1, 'Nb. Segments_1', i_pref='Disque')
+putName(Nb_Segments_2, 'Nb. Segments_2', i_pref='Disque')
+
+is_done = Disque_1.Compute()
+text = "Disque_1.Compute"
+if is_done:
+  logging.info(text+" OK")
+else:
+  text = "Erreur au calcul du maillage.\n" + text
+  logging.info(text)
+  raise Exception(text)
+
+Disque_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests", "disque.med"))
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser()
diff --git a/src/Tools/blocFissure/materielCasTests/disque_perce.py b/src/Tools/blocFissure/materielCasTests/disque_perce.py
deleted file mode 100644 (file)
index 8e03107..0000000
+++ /dev/null
@@ -1,106 +0,0 @@
-# -*- coding: iso-8859-1 -*-
-# Copyright (C) 2014-2020  EDF R&D
-#
-# 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
-#
-
-import sys
-import salome
-
-salome.salome_init()
-
-import salome_notebook
-notebook = salome_notebook.notebook
-
-import os
-from blocFissure import gmu
-
-
-###
-### GEOM component
-###
-
-import GEOM
-from salome.geom import geomBuilder
-import math
-import SALOMEDS
-
-
-geompy = geomBuilder.New()
-
-O = geompy.MakeVertex(0, 0, 0)
-OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
-OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
-OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
-Cylinder_1 = geompy.MakeCylinderRH(100, 300)
-Cylinder_2 = geompy.MakeCylinderRH(600, 200)
-Cut_1 = geompy.MakeCut(Cylinder_2, Cylinder_1)
-Face_1 = geompy.MakeFaceHW(500, 1500, 3)
-Disque = geompy.MakePartition([Cut_1], [Face_1], [], [], geompy.ShapeType["SOLID"], 0, [], 0)
-[Compound_1, Compound_2, Compound_3, Compound_4] = geompy.Propagate(Disque)
-geompy.addToStudy( O, 'O' )
-geompy.addToStudy( OX, 'OX' )
-geompy.addToStudy( OY, 'OY' )
-geompy.addToStudy( OZ, 'OZ' )
-geompy.addToStudy( Cylinder_1, 'Cylinder_1' )
-geompy.addToStudy( Cylinder_2, 'Cylinder_2' )
-geompy.addToStudy( Cut_1, 'Cut_1' )
-geompy.addToStudy( Face_1, 'Face_1' )
-geompy.addToStudy( Disque, 'Disque' )
-geompy.addToStudyInFather( Disque, Compound_1, 'Compound_1' )
-geompy.addToStudyInFather( Disque, Compound_2, 'Compound_2' )
-geompy.addToStudyInFather( Disque, Compound_3, 'Compound_3' )
-geompy.addToStudyInFather( Disque, Compound_4, 'Compound_4' )
-
-###
-### SMESH component
-###
-
-import  SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-
-smesh = smeshBuilder.New()
-from salome.StdMeshers import StdMeshersBuilder
-Disque_1 = smesh.Mesh(Disque)
-Regular_1D = Disque_1.Segment()
-Nb_Segments_1 = Regular_1D.NumberOfSegments(10)
-Nb_Segments_1.SetDistrType( 0 )
-Hexa_3D = Disque_1.Hexahedron(algo=smeshBuilder.Hexa)
-Regular_1D_1 = Disque_1.Segment(geom=Compound_3)
-Nb_Segments_2 = Regular_1D_1.NumberOfSegments(20)
-Nb_Segments_2.SetDistrType( 0 )
-Regular_1D_2 = Disque_1.Segment(geom=Compound_4)
-status = Disque_1.AddHypothesis(Nb_Segments_2,Compound_4)
-Quadrangle_2D = Disque_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
-isDone = Disque_1.Compute()
-smesh.SetName(Disque_1, 'Disque')
-Disque_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/disque.med"))
-SubMesh_1 = Regular_1D_1.GetSubMesh()
-SubMesh_2 = Regular_1D_2.GetSubMesh()
-
-## set object names
-smesh.SetName(Disque_1.GetMesh(), 'Disque')
-smesh.SetName(Regular_1D.GetAlgorithm(), 'Regular_1D')
-smesh.SetName(Nb_Segments_1, 'Nb. Segments_1')
-smesh.SetName(Hexa_3D.GetAlgorithm(), 'Hexa_3D')
-smesh.SetName(Nb_Segments_2, 'Nb. Segments_2')
-smesh.SetName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D')
-smesh.SetName(SubMesh_1, 'SubMesh_1')
-smesh.SetName(SubMesh_2, 'SubMesh_2')
-
-if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser()
index e6da1674a93496499306c7080793e6d39920ae70..4eebdec82b9e878d4a7643b4fac27e4f8687b793 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -54,8 +54,8 @@ Scale_1 = geompy.MakeScaleAlongAxes(Rotation_1, Vertex_1, 1, 1.5, 1)
 Vertex_3 = geompy.MakeVertex(420, -400, 300)
 Vertex_4 = geompy.MakeVertex(500, 400, 500)
 Box_1 = geompy.MakeBoxTwoPnt(Vertex_4, Vertex_3)
-ellipse1 = geompy.MakeCut(Scale_1, Box_1)
-[fondFiss] = geompy.SubShapes(ellipse1, [4])
+ellipse_1 = geompy.MakeCut(Scale_1, Box_1)
+[fondFiss] = geompy.SubShapes(ellipse_1, [4])
 geompy.addToStudy( O, 'O' )
 geompy.addToStudy( OX, 'OX' )
 geompy.addToStudy( OY, 'OY' )
@@ -69,9 +69,9 @@ geompy.addToStudy( Scale_1, 'Scale_1' )
 geompy.addToStudy( Vertex_3, 'Vertex_3' )
 geompy.addToStudy( Vertex_4, 'Vertex_4' )
 geompy.addToStudy( Box_1, 'Box_1' )
-geompy.addToStudy( ellipse1, 'ellipse1' )
-geompy.addToStudyInFather( ellipse1, fondFiss, 'fondFiss' )
-geompy.ExportBREP(ellipse1, os.path.join(gmu.pathBloc, "materielCasTests/ellipse1.brep"))
+geompy.addToStudy( ellipse_1, 'ellipse_1' )
+geompy.addToStudyInFather( ellipse_1, fondFiss, 'fondFiss' )
+geompy.ExportBREP(ellipse_1, os.path.join(gmu.pathBloc, "materielCasTests", "ellipse_1.brep"))
 
 
 if salome.sg.hasDesktop():
index ef3e544e86d2431ea1617712dc822658a2c0e0d9..d3e59a020dc17811f5bb464e91701652b1e412aa 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -51,7 +51,7 @@ Vertex_2 = geompy.MakeVertex(98, -2, -2)
 Vertex_3 = geompy.MakeVertex(120, 2, 60)
 Box_1 = geompy.MakeBoxTwoPnt(Vertex_3, Vertex_2)
 Ellipse_disque = geompy.MakeCommon(Box_1, Scale_1)
-geompy.ExportBREP(Ellipse_disque, os.path.join(gmu.pathBloc, "materielCasTests/ellipse_disque.brep"))
+geompy.ExportBREP(Ellipse_disque, os.path.join(gmu.pathBloc, "materielCasTests", "ellipse_disque.brep"))
 geompy.addToStudy( O, 'O' )
 geompy.addToStudy( OX, 'OX' )
 geompy.addToStudy( OY, 'OY' )
index 98d3459da418ef8e941269048e89cb3b9fd7506a..f7c3fd44c83534b77ca31e2362a385879afb2699 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -54,7 +54,7 @@ Vertex_2 = geompy.MakeVertex(20, -100, -50)
 Vertex_4 = geompy.MakeVertex(100, 100, 50)
 Box_1 = geompy.MakeBoxTwoPnt(Vertex_2, Vertex_4)
 Cut_1 = geompy.MakeCut(Rotation_1, Box_1)
-ellipse1 = geompy.MakeTranslation(Cut_1, 400, 0, 400)
+ellipse_1 = geompy.MakeTranslation(Cut_1, 400, 0, 400)
 geompy.addToStudy( Disk_1, 'Disk_1' )
 geompy.addToStudy( O, 'O' )
 geompy.addToStudy( OX, 'OX' )
@@ -68,8 +68,8 @@ geompy.addToStudy( Vertex_2, 'Vertex_2' )
 geompy.addToStudy( Box_1, 'Box_1' )
 geompy.addToStudy( Vertex_4, 'Vertex_4' )
 geompy.addToStudy( Cut_1, 'Cut_1' )
-geompy.addToStudy( ellipse1, 'ellipse1_pb' )
-geompy.ExportBREP(ellipse1, os.path.join(gmu.pathBloc, "materielCasTests/ellipse1_pb.brep"))
+geompy.addToStudy( ellipse_1, 'ellipse_1_pb' )
+geompy.ExportBREP(ellipse_1, os.path.join(gmu.pathBloc, "materielCasTests", "ellipse_1_pb.brep"))
 
 
 if salome.sg.hasDesktop():
index 754e641fdc0c321c550538f89afb45c9275a7da1..8975b8c91df087785ba1d1334fac13d2e3ac6131 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -18,6 +18,8 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
+import logging
+
 import sys
 import salome
 
@@ -60,7 +62,7 @@ EprouvetteCourbe = geompy.MakeCut(Common_1, Cylinder_3)
 geomObj_1 = geompy.MakeMarker(0, 0, 0, 1, 0, 0, 0, 1, 0)
 Sketch_1 = geompy.MakeSketcherOnPlane("Sketcher:F -110.000000 85.000000:T 220.000000 0.000000:T 0.000000 75.000000:T -220.000000 0.000000:WW", geomObj_1 )
 SectionDroite = geompy.MakeFaceWires([Sketch_1], 1)
-geompy.ExportBREP(SectionDroite, os.path.join(gmu.pathBloc, "materielCasTests/EprouvetteCourbeFiss.brep"))
+geompy.ExportBREP(SectionDroite, os.path.join(gmu.pathBloc, "materielCasTests", "EprouvetteCourbeFiss.brep"))
 geompy.addToStudy( O, 'O' )
 geompy.addToStudy( OX, 'OX' )
 geompy.addToStudy( OY, 'OY' )
@@ -92,6 +94,7 @@ from salome.smesh import smeshBuilder
 smesh = smeshBuilder.New()
 from salome.StdMeshers import StdMeshersBuilder
 EprouvetteCourbe_1 = smesh.Mesh(EprouvetteCourbe)
+smesh.SetName(EprouvetteCourbe_1, 'EprouvetteCourbe')
 Regular_1D = EprouvetteCourbe_1.Segment()
 Nb_Segments_1 = Regular_1D.NumberOfSegments(50)
 Nb_Segments_1.SetDistrType( 0 )
@@ -103,9 +106,17 @@ Nb_Segments_2.SetDistrType( 0 )
 Regular_1D_2 = EprouvetteCourbe_1.Segment(geom=Compound_y)
 Nb_Segments_3 = Regular_1D_2.NumberOfSegments(25)
 Nb_Segments_3.SetDistrType( 0 )
-isDone = EprouvetteCourbe_1.Compute()
-smesh.SetName(EprouvetteCourbe_1, 'EprouvetteCourbe')
-EprouvetteCourbe_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/EprouvetteCourbe.med"))
+
+is_done = EprouvetteCourbe_1.Compute()
+text = "EprouvetteCourbe_1.Compute"
+if is_done:
+  logging.info(text+" OK")
+else:
+  text = "Erreur au calcul du maillage.\n" + text
+  logging.info(text)
+  raise Exception(text)
+
+EprouvetteCourbe_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests", "EprouvetteCourbe.med"))
 SubMesh_1 = Regular_1D_1.GetSubMesh()
 SubMesh_2 = Regular_1D_2.GetSubMesh()
 
index f1ea29b11d7ad4e845bf6b1c3ee4b01a0d403e4f..7a746dd73f9acc1de67fa640a7f27b8805947810 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -18,6 +18,8 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
+import logging
+
 import sys
 import salome
 
@@ -61,8 +63,8 @@ Plane_2 = geompy.MakePlane(Vertex_1, Line_1, 2000)
 geomObj_4 = geompy.MakeMarker(0, 0, 0, 1, 0, 0, 0, 1, 0)
 Sketch_2 = geompy.MakeSketcherOnPlane("Sketcher:F 0.000000 0.000000:T 120.000000 0.000000:T 0.000000 100.000000:T -120.000000 20.000000:WW", Plane_2 )
 SectionInclinee = geompy.MakeFaceWires([Sketch_2], 1)
-geompy.ExportBREP(sectionDroite, os.path.join(gmu.pathBloc, "materielCasTests/EprouvetteDroiteFissPb1.brep"))
-geompy.ExportBREP(SectionInclinee, os.path.join(gmu.pathBloc, "materielCasTests/EprouvetteDroiteFiss2.brep"))
+geompy.ExportBREP(sectionDroite, os.path.join(gmu.pathBloc, "materielCasTests", "EprouvetteDroiteFissPb1.brep"))
+geompy.ExportBREP(SectionInclinee, os.path.join(gmu.pathBloc, "materielCasTests", "EprouvetteDroiteFiss2.brep"))
 Vertex_2 = geompy.MakeVertex(110, -10, 200)
 Vertex_3 = geompy.MakeVertex(110, 80, 200)
 Vertex_4 = geompy.MakeVertex(-10, 80, 200)
@@ -79,8 +81,8 @@ Line_7 = geompy.MakeLineTwoPnt(Vertex_5, Vertex_6)
 Face_1_vertex_9 = geompy.GetSubShape(Face_1, [9])
 Line_8 = geompy.MakeLineTwoPnt(Vertex_6, Face_1_vertex_9)
 Face_2 = geompy.MakeFaceWires([Line_5, Line_6, Line_7, Line_8], 1)
-geompy.ExportBREP(Face_1, os.path.join(gmu.pathBloc, "materielCasTests/EprouvetteDroiteFiss_1.brep"))
-geompy.ExportBREP(Face_2, os.path.join(gmu.pathBloc, "materielCasTests/EprouvetteDroiteFiss_2.brep"))
+geompy.ExportBREP(Face_1, os.path.join(gmu.pathBloc, "materielCasTests", "EprouvetteDroiteFiss_1.brep"))
+geompy.ExportBREP(Face_2, os.path.join(gmu.pathBloc, "materielCasTests", "EprouvetteDroiteFiss_2.brep"))
 geompy.addToStudy( O, 'O' )
 geompy.addToStudy( OX, 'OX' )
 geompy.addToStudy( OY, 'OY' )
@@ -126,6 +128,7 @@ from salome.smesh import smeshBuilder
 smesh = smeshBuilder.New()
 from salome.StdMeshers import StdMeshersBuilder
 eprouvetteDroite_1 = smesh.Mesh(eprouvetteDroite)
+smesh.SetName(eprouvetteDroite_1, 'eprouvetteDroite')
 Regular_1D = eprouvetteDroite_1.Segment()
 Nb_Segments_1 = Regular_1D.NumberOfSegments(50,[],[  ])
 Nb_Segments_1.SetDistrType( 0 )
@@ -137,9 +140,17 @@ Nb_Segments_2.SetDistrType( 0 )
 Regular_1D_2 = eprouvetteDroite_1.Segment(geom=Compound_x)
 Nb_Segments_3 = Regular_1D_2.NumberOfSegments(10,[],[  ])
 Nb_Segments_3.SetDistrType( 0 )
-isDone = eprouvetteDroite_1.Compute()
-smesh.SetName(eprouvetteDroite_1, 'eprouvetteDroite')
-eprouvetteDroite_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/eprouvetteDroite.med"))
+
+is_done = eprouvetteDroite_1.Compute()
+text = "eprouvetteDroite_1.Compute"
+if is_done:
+  logging.info(text+" OK")
+else:
+  text = "Erreur au calcul du maillage.\n" + text
+  logging.info(text)
+  raise Exception(text)
+
+eprouvetteDroite_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests", "eprouvetteDroite.med"))
 SubMesh_1 = Regular_1D_1.GetSubMesh()
 SubMesh_2 = Regular_1D_2.GetSubMesh()
 
index 2c27fd16a741c9dd60b24136a4a8ba4135db374b..1146c3ab88be9f2af4b64cb53ac24676742eef3f 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -18,6 +18,8 @@
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
+import logging
+
 import sys
 import salome
 
@@ -51,7 +53,7 @@ geomObj_2 = geompy.MakeCylinder(O, OX, 2000, 5000)
 Cylinder_2 = geompy.MakeRotation(geomObj_2, OX, 180*math.pi/180.0)
 Translation_1 = geompy.MakeTranslation(Cylinder_2, -2000, 0, 0)
 Fuse_1 = geompy.MakeFuse(Cylinder_1, Translation_1)
-Fillet_1 = geompy.MakeFillet(Fuse_1, 800, geompy.ShapeType["EDGE"], [11])
+Fillet_1 = geompy.MakeFillet(Fuse_1, 800, geompy.ShapeType["EDGE"], [8])
 Vertex_1 = geompy.MakeVertex(0, -3000, -3000)
 Vertex_2 = geompy.MakeVertex(2500, 3000, 3000)
 Box_1 = geompy.MakeBoxTwoPnt(Vertex_2, Vertex_1)
@@ -76,7 +78,7 @@ Box_2 = geompy.MakeBoxTwoPnt(Vertex_7, Vertex_6)
 Common_1 = geompy.MakeCommon(Box_2, Cut_2)
 objetSain = geompy.MakePartition([Common_1], [Plane_1, Plane_2, Plane_3], [], [], geompy.ShapeType["SOLID"], 0, [], 0)
 [hauteurs, epaisseurs, Compound_3, Compound_4, Compound_5, Compound_6] = geompy.Propagate(objetSain)
-geompy.ExportBREP(faceFiss1, os.path.join(gmu.pathBloc, "materielCasTests/faceGaucheFiss.brep"))
+geompy.ExportBREP(faceFiss1, os.path.join(gmu.pathBloc, "materielCasTests", "faceGaucheFiss.brep"))
 geompy.addToStudy( O, 'O' )
 geompy.addToStudy( OX, 'OX' )
 geompy.addToStudy( OY, 'OY' )
@@ -121,6 +123,7 @@ from salome.smesh import smeshBuilder
 smesh = smeshBuilder.New()
 from salome.StdMeshers import StdMeshersBuilder
 objetSain_1 = smesh.Mesh(objetSain)
+smesh.SetName(objetSain_1, 'objetSain')
 Regular_1D = objetSain_1.Segment()
 Nb_Segments_1 = Regular_1D.NumberOfSegments(10,[],[  ])
 Nb_Segments_1.SetDistrType( 0 )
@@ -132,9 +135,17 @@ Nb_Segments_2.SetDistrType( 0 )
 Regular_1D_2 = objetSain_1.Segment(geom=epaisseurs)
 Nb_Segments_3 = Regular_1D_2.NumberOfSegments(5,[],[  ])
 Nb_Segments_3.SetDistrType( 0 )
-isDone = objetSain_1.Compute()
-smesh.SetName(objetSain_1, 'objetSain')
-objetSain_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/faceGaucheSain.med"))
+
+is_done = objetSain_1.Compute()
+text = "objetSain_1.Compute"
+if is_done:
+  logging.info(text+" OK")
+else:
+  text = "Erreur au calcul du maillage.\n" + text
+  logging.info(text)
+  raise Exception(text)
+
+objetSain_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests", "faceGaucheSain.med"))
 SubMesh_1 = Regular_1D_1.GetSubMesh()
 SubMesh_2 = Regular_1D_2.GetSubMesh()
 
diff --git a/src/Tools/blocFissure/materielCasTests/fissureGauche2.py b/src/Tools/blocFissure/materielCasTests/fissureGauche2.py
deleted file mode 100644 (file)
index 519ea04..0000000
+++ /dev/null
@@ -1,115 +0,0 @@
-# -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
-#
-# 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
-#
-
-import sys
-import salome
-
-salome.salome_init()
-
-import salome_notebook
-notebook = salome_notebook.notebook
-
-import os
-from blocFissure import gmu
-
-###
-### GEOM component
-###
-
-import GEOM
-from salome.geom import geomBuilder
-import math
-import SALOMEDS
-
-
-geompy = geomBuilder.New()
-
-O = geompy.MakeVertex(0, 0, 0)
-OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
-OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
-OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
-Circle_1 = geompy.MakeCircle(O, OX, 500)
-Extrusion_1 = geompy.MakePrismVecH2Ways(Circle_1, OX, 500)
-Vertex_1 = geompy.MakeVertex(500, 0, 0)
-Circle_3 = geompy.MakeCircle(Vertex_1, OZ, 300)
-Extrusion_2 = geompy.MakePrismVecH(Circle_3, OZ, 1000)
-Partition_1 = geompy.MakePartition([Extrusion_1], [Extrusion_2], [], [], geompy.ShapeType["FACE"], 0, [], 0)
-[Face_1,Face_2] = geompy.SubShapes(Partition_1, [18, 13])
-FaceFissExt = geompy.MakeFuse(Face_2, Face_1)
-geompy.ExportBREP(FaceFissExt, os.path.join(gmu.pathBloc, "materielCasTests/faceGauche2Fiss.brep"))
-Vertex_2 = geompy.MakeVertex(0, -500, 0)
-Vertex_3 = geompy.MakeVertex(400, 500, 800)
-objetSain = geompy.MakeBoxTwoPnt(Vertex_3, Vertex_2)
-Rotation_1 = geompy.MakeRotation(Extrusion_1, OX, 180*math.pi/180.0)
-Partition_2 = geompy.MakePartition([Rotation_1], [Extrusion_2], [], [], geompy.ShapeType["FACE"], 0, [], 0)
-geompy.addToStudy( Partition_2, 'Partition_2' )
-[FaceFissExtSimple] = geompy.SubShapes(Partition_2, [13])
-geompy.addToStudyInFather( Partition_2, FaceFissExtSimple, 'FaceFissExtSimple' )
-Plane_1 = geompy.MakePlaneLCS(None, 2000, 3)
-FaceFissExtCoupe = geompy.MakePartition([FaceFissExtSimple], [Plane_1], [], [], geompy.ShapeType["FACE"], 0, [], 0)
-geompy.ExportBREP(FaceFissExtCoupe, os.path.join(gmu.pathBloc, "materielCasTests/faceGauche2FissCoupe.brep"))
-geompy.addToStudy( O, 'O' )
-geompy.addToStudy( OX, 'OX' )
-geompy.addToStudy( OY, 'OY' )
-geompy.addToStudy( OZ, 'OZ' )
-geompy.addToStudy( Circle_1, 'Circle_1' )
-geompy.addToStudy( Extrusion_1, 'Extrusion_1' )
-geompy.addToStudy( Vertex_1, 'Vertex_1' )
-geompy.addToStudy( Circle_3, 'Circle_3' )
-geompy.addToStudy( Extrusion_2, 'Extrusion_2' )
-geompy.addToStudy( Partition_1, 'Partition_1' )
-geompy.addToStudyInFather( Partition_1, Face_1, 'Face_1' )
-geompy.addToStudyInFather( Partition_1, Face_2, 'Face_2' )
-geompy.addToStudy( FaceFissExt, 'FaceFissExt' )
-geompy.addToStudy( Vertex_2, 'Vertex_2' )
-geompy.addToStudy( Vertex_3, 'Vertex_3' )
-geompy.addToStudy( objetSain, 'objetSain' )
-geompy.addToStudy( Rotation_1, 'Rotation_1' )
-geompy.addToStudy( Plane_1, 'Plane_1' )
-geompy.addToStudy( FaceFissExtCoupe, 'FaceFissExtCoupe' )
-
-###
-### SMESH component
-###
-
-import  SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
-
-smesh = smeshBuilder.New()
-from salome.StdMeshers import StdMeshersBuilder
-Mesh_1 = smesh.Mesh(objetSain)
-Regular_1D = Mesh_1.Segment()
-Nb_Segments_1 = Regular_1D.NumberOfSegments(15,[],[  ])
-Nb_Segments_1.SetDistrType( 0 )
-Quadrangle_2D = Mesh_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
-Hexa_3D = Mesh_1.Hexahedron(algo=smeshBuilder.Hexa)
-isDone = Mesh_1.Compute()
-smesh.SetName(Mesh_1, 'Mesh_1')
-Mesh_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/boiteSaine.med"))
-
-## set object names
-smesh.SetName(Mesh_1.GetMesh(), 'Mesh_1')
-smesh.SetName(Regular_1D.GetAlgorithm(), 'Regular_1D')
-smesh.SetName(Nb_Segments_1, 'Nb. Segments_1')
-smesh.SetName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D')
-smesh.SetName(Hexa_3D.GetAlgorithm(), 'Hexa_3D')
-
-if salome.sg.hasDesktop():
-  salome.sg.updateObjBrowser()
diff --git a/src/Tools/blocFissure/materielCasTests/fissureGauche_2.py b/src/Tools/blocFissure/materielCasTests/fissureGauche_2.py
new file mode 100644 (file)
index 0000000..1cc7f46
--- /dev/null
@@ -0,0 +1,124 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Géométrie et maillage de base nécessaire au cas-test :
+. faceGauche_2
+"""
+
+import os
+import math
+
+import logging
+
+import salome
+from salome.smesh import smeshBuilder
+from salome.StdMeshers import StdMeshersBuilder
+import GEOM
+import SMESH
+import SALOMEDS
+
+from blocFissure import gmu
+from blocFissure.gmu.geomsmesh import geompy
+from blocFissure.gmu.geomsmesh import geomPublish
+from blocFissure.gmu.geomsmesh import geomPublishInFather
+
+from blocFissure.gmu.triedreBase import triedreBase
+from blocFissure.gmu.putName import putName
+from blocFissure.gmu import initLog
+
+###
+### GEOM component
+###
+
+O, OX, OY, OZ = triedreBase()
+
+Circle_1 = geompy.MakeCircle(O, OX, 500.)
+Extrusion_1 = geompy.MakePrismVecH2Ways(Circle_1, OX, 500)
+Vertex_1 = geompy.MakeVertex(500., 0., 0.)
+Circle_3 = geompy.MakeCircle(Vertex_1, OZ, 300)
+Extrusion_2 = geompy.MakePrismVecH(Circle_3, OZ, 1000)
+Partition_1 = geompy.MakePartition([Extrusion_1], [Extrusion_2], [], [], geompy.ShapeType["FACE"], 0, [], 0)
+[Face_1,Face_2] = geompy.SubShapes(Partition_1, [18, 13])
+
+FaceFissExt = geompy.MakeFuse(Face_2, Face_1)
+geompy.addToStudy( FaceFissExt, 'FaceFissExt' )
+geompy.ExportBREP(FaceFissExt, os.path.join(gmu.pathBloc, "materielCasTests", "faceGauche2Fiss.brep"))
+
+Vertex_2 = geompy.MakeVertex(0, -500, 0)
+Vertex_3 = geompy.MakeVertex(400, 500, 800)
+objetSain = geompy.MakeBoxTwoPnt(Vertex_3, Vertex_2)
+geompy.addToStudy( objetSain, 'objetSain' )
+
+Rotation_1 = geompy.MakeRotation(Extrusion_1, OX, math.pi)
+Partition_2 = geompy.MakePartition([Rotation_1], [Extrusion_2], [], [], geompy.ShapeType["FACE"], 0, [], 0)
+geompy.addToStudy( Partition_2, 'Partition_2' )
+[FaceFissExtSimple] = geompy.SubShapes(Partition_2, [13])
+geompy.addToStudyInFather( Partition_2, FaceFissExtSimple, 'FaceFissExtSimple' )
+Plane_1 = geompy.MakePlaneLCS(None, 2000., 3)
+
+FaceFissExtCoupe = geompy.MakePartition([FaceFissExtSimple], [Plane_1], [], [], geompy.ShapeType["FACE"], 0, [], 0)
+geompy.addToStudy( FaceFissExtCoupe, 'FaceFissExtCoupe' )
+
+geompy.ExportBREP(FaceFissExtCoupe, os.path.join(gmu.pathBloc, "materielCasTests", "faceGauche2FissCoupe.brep"))
+
+geomPublish(initLog.debug, Circle_1, 'Circle_1' )
+geomPublish(initLog.debug, Extrusion_1, 'Extrusion_1' )
+geomPublish(initLog.debug, Vertex_1, 'Vertex_1' )
+geomPublish(initLog.debug, Circle_3, 'Circle_3' )
+geomPublish(initLog.debug, Extrusion_2, 'Extrusion_2' )
+geomPublish(initLog.debug, Partition_1, 'Partition_1' )
+geomPublishInFather(initLog.debug, Partition_1, Face_1, 'Face_1' )
+geomPublishInFather(initLog.debug, Partition_1, Face_2, 'Face_2' )
+geomPublish(initLog.debug, Vertex_2, 'Vertex_2' )
+geomPublish(initLog.debug, Vertex_3, 'Vertex_3' )
+geomPublish(initLog.debug, Rotation_1, 'Rotation_1' )
+geomPublish(initLog.debug, Plane_1, 'Plane_1' )
+
+###
+### SMESH component
+###
+smesh = smeshBuilder.New()
+Mesh_1 = smesh.Mesh(objetSain)
+putName(Mesh_1.GetMesh(), 'Mesh_1')
+
+Regular_1D = Mesh_1.Segment()
+Nb_Segments_1 = Regular_1D.NumberOfSegments(15,[],[  ])
+Nb_Segments_1.SetDistrType( 0 )
+Quadrangle_2D = Mesh_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
+Hexa_3D = Mesh_1.Hexahedron(algo=smeshBuilder.Hexa)
+
+## set object names
+#smesh.SetName(Regular_1D.GetAlgorithm(), 'Regular_1D')
+#smesh.SetName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D')
+#smesh.SetName(Hexa_3D.GetAlgorithm(), 'Hexa_3D')
+putName(Nb_Segments_1, 'Nb. Segments_1', i_pref='fissuregauche2')
+
+is_done = Mesh_1.Compute()
+text = "Mesh_1.Compute"
+if is_done:
+  logging.info(text+" OK")
+else:
+  text = "Erreur au calcul du maillage.\n" + text
+  logging.info(text)
+  raise Exception(text)
+
+Mesh_1.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests", "boiteSaine.med"))
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser()
index df9afea79bc2efeda633cd4d3d06052d3491f0f5..4337d16d3256949b260546c75f95969deb4d0f2b 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
 #
 
 from blocFissure.materielCasTests import cubeAngle
+from blocFissure.materielCasTests import cubeFin
 from blocFissure.materielCasTests import decoupeCylindre
+from blocFissure.materielCasTests import disquePerce
+from blocFissure.materielCasTests import ellipse_disque
+from blocFissure.materielCasTests import ellipse
+from blocFissure.materielCasTests import ellipse_probleme
 from blocFissure.materielCasTests import eprouvetteCourbe
 from blocFissure.materielCasTests import eprouvetteDroite
 from blocFissure.materielCasTests import fissureGauche
-from blocFissure.materielCasTests import fissureGauche2
-from blocFissure.materielCasTests import ellipse
-from blocFissure.materielCasTests import ellipse_probleme
-from blocFissure.materielCasTests import disque_perce
-from blocFissure.materielCasTests import ellipse_disque
+from blocFissure.materielCasTests import fissureGauche_2
 from blocFissure.materielCasTests import vis
-from blocFissure.materielCasTests import cubeFin
+from blocFissure.materielCasTests import tube
diff --git a/src/Tools/blocFissure/materielCasTests/tube.py b/src/Tools/blocFissure/materielCasTests/tube.py
new file mode 100755 (executable)
index 0000000..7bc45a3
--- /dev/null
@@ -0,0 +1,291 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2014-2024  EDF
+#
+# 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
+#
+"""Géométrie et maillage de base nécessaire au cas-test :
+. tube
+"""
+
+__revision__ = "V02.08"
+
+import os
+
+import logging
+
+import salome
+from salome.shaper import model
+from salome.smesh import smeshBuilder
+from SketchAPI import *
+import SHAPERSTUDY
+import SMESH
+
+from blocFissure import gmu
+from blocFissure.gmu.putName import putName
+
+#=============== Options ====================
+# 1. NOM_OBJET = nom de l'objet
+NOM_OBJET = "Tube"
+# 2. CAO
+# 2.1. Le tube : rayon intérieur, rayon extérieur, hauteur
+RAYON_INT =  9.84
+RAYON_EXT = 11.11
+HAUTEUR = 50.
+# 2.2. La fissure :
+F_L_1 = 80.
+F_THETA_1 = 3.
+F_C_1 = 1.04
+F_L_2 = 20.
+F_C_3 = 0.99
+# 3. Maillage
+# Nombre de segments du tube
+NB_S_E = 4
+NB_S_H = 60
+NB_S_P = 30
+#============================================
+
+salome.salome_init()
+
+###
+### SHAPER component
+###
+
+model.begin()
+partSet = model.moduleDocument()
+
+### Create Part
+Part_1 = model.addPart(partSet)
+Part_1_doc = Part_1.document()
+model.addParameter(Part_1_doc, "R_I", "%f" % RAYON_INT)
+model.addParameter(Part_1_doc, "R_E", "%f" % RAYON_EXT)
+model.addParameter(Part_1_doc, "H", "%f" % HAUTEUR)
+model.addParameter(Part_1_doc, "F_L_1", "{}".format(F_L_1))
+model.addParameter(Part_1_doc, "F_THETA_1", "{}".format(F_THETA_1))
+model.addParameter(Part_1_doc, "F_R_1", "{}*{}".format(F_C_1,RAYON_INT))
+model.addParameter(Part_1_doc, "F_L_2", "{}".format(F_L_2))
+model.addParameter(Part_1_doc, "F_D_3", "{}*{}".format(F_C_3,RAYON_INT))
+
+### Create Sketch
+Sketch_1 = model.addSketch(Part_1_doc, model.defaultPlane("XOZ"))
+
+### Create SketchLine
+SketchLine_1 = Sketch_1.addLine(11.11, -22.82842712474619, 9.84, -22.82842712474619)
+
+### Create SketchLine
+SketchLine_2 = Sketch_1.addLine(9.84, -22.82842712474619, 9.84, 27.17157287525381)
+
+### Create SketchLine
+SketchLine_3 = Sketch_1.addLine(9.84, 27.17157287525381, 11.11, 27.17157287525381)
+
+### Create SketchLine
+SketchLine_4 = Sketch_1.addLine(11.11, 27.17157287525381, 11.11, -22.82842712474619)
+Sketch_1.setCoincident(SketchLine_4.endPoint(), SketchLine_1.startPoint())
+Sketch_1.setCoincident(SketchLine_1.endPoint(), SketchLine_2.startPoint())
+Sketch_1.setCoincident(SketchLine_2.endPoint(), SketchLine_3.startPoint())
+Sketch_1.setCoincident(SketchLine_3.endPoint(), SketchLine_4.startPoint())
+Sketch_1.setHorizontal(SketchLine_1.result())
+Sketch_1.setVertical(SketchLine_2.result())
+Sketch_1.setHorizontal(SketchLine_3.result())
+Sketch_1.setVertical(SketchLine_4.result())
+Sketch_1.setLength(SketchLine_4.result(), "H")
+
+### Create SketchProjection
+SketchProjection_1 = Sketch_1.addProjection(model.selection("VERTEX", "PartSet/Origin"), False)
+SketchPoint_1 = SketchProjection_1.createdFeature()
+Sketch_1.setHorizontalDistance(SketchAPI_Point(SketchPoint_1).coordinates(), SketchLine_1.endPoint(), "R_I")
+Sketch_1.setHorizontalDistance(SketchAPI_Point(SketchPoint_1).coordinates(), SketchLine_1.startPoint(), "R_E")
+model.do()
+
+### Create Revolution
+Revolution_1 = model.addRevolution(Part_1_doc, [model.selection("FACE", "Sketch_1/Face-SketchLine_4r-SketchLine_3r-SketchLine_2r-SketchLine_1r")], model.selection("EDGE", "PartSet/OZ"), 180, 0)
+Revolution_1.result().setName("Tube")
+Revolution_1.result().setTransparency(0.37)
+
+### Create Sketch
+Sketch_2 = model.addSketch(Part_1_doc, model.standardPlane("YOZ"))
+
+### Create SketchArc
+SketchArc_1 = Sketch_2.addArc(-80, 0, 10.10993798722564, 4.722461741385164, 10.10993798722563, -4.722461741385561, True)
+
+### Create SketchProjection
+SketchProjection_2 = Sketch_2.addProjection(model.selection("EDGE", "PartSet/OY"), False)
+SketchLine_5 = SketchProjection_2.createdFeature()
+Sketch_2.setCoincident(SketchArc_1.center(), SketchLine_5.result())
+
+### Create SketchProjection
+SketchProjection_3 = Sketch_2.addProjection(model.selection("VERTEX", "PartSet/Origin"), False)
+SketchPoint_2 = SketchProjection_3.createdFeature()
+Sketch_2.setHorizontalDistance(SketchArc_1.center(), SketchAPI_Point(SketchPoint_2).coordinates(), "F_L_1")
+
+### Create SketchPoint
+SketchPoint_3 = Sketch_2.addPoint(10.2336, 0)
+SketchPoint_3.setAuxiliary(True)
+Sketch_2.setCoincident(SketchPoint_3.coordinates(), SketchArc_1.results()[1])
+Sketch_2.setMiddlePoint(SketchPoint_3.coordinates(), SketchArc_1.results()[1])
+Sketch_2.setCoincident(SketchPoint_3.coordinates(), SketchLine_5.result())
+
+### Create SketchProjection
+SketchProjection_4 = Sketch_2.addProjection(model.selection("VERTEX", "PartSet/Origin"), False)
+SketchPoint_4 = SketchProjection_4.createdFeature()
+Sketch_2.setHorizontalDistance(SketchPoint_3.coordinates(), SketchAPI_Point(SketchPoint_4).coordinates(), "F_R_1")
+
+### Create SketchLine
+SketchLine_6 = Sketch_2.addLine(-80, 0, 10.10993798722564, 4.722461741385164)
+SketchLine_6.setAuxiliary(True)
+Sketch_2.setCoincident(SketchArc_1.center(), SketchLine_6.startPoint())
+Sketch_2.setCoincident(SketchArc_1.startPoint(), SketchLine_6.endPoint())
+
+### Create SketchConstraintAngle
+Sketch_2.setAngle(SketchLine_5.result(), SketchLine_6.result(), "F_THETA_1", type = "Direct")
+
+### Create SketchEllipticArc
+SketchEllipticArc_1 = Sketch_2.addEllipticArc(-20, 8.956370781951521e-27, -10.21629725685072, 9.783702743149284, 10.10993798723031, 4.722461741243296, 9.7416, 8.052073253504034, False)
+[SketchPoint_5, SketchPoint_6, SketchPoint_7, SketchPoint_8, SketchPoint_9, SketchPoint_10, SketchPoint_11, SketchLine_7, SketchLine_8] = \
+  SketchEllipticArc_1.construction(center = "aux", firstFocus = "aux", secondFocus = "aux", majorAxisStart = "aux", majorAxisEnd = "aux", minorAxisStart = "aux", minorAxisEnd = "aux", majorAxis = "aux", minorAxis = "aux")
+Sketch_2.setCoincident(SketchEllipticArc_1.startPoint(), SketchLine_6.endPoint())
+Sketch_2.setCoincident(SketchAPI_Point(SketchPoint_5).coordinates(), SketchLine_5.result())
+Sketch_2.setTangent(SketchEllipticArc_1.result(), SketchArc_1.results()[1])
+
+### Create SketchProjection
+SketchProjection_5 = Sketch_2.addProjection(model.selection("VERTEX", "PartSet/Origin"), False)
+SketchPoint_12 = SketchProjection_5.createdFeature()
+Sketch_2.setHorizontalDistance(SketchAPI_Point(SketchPoint_5).coordinates(), SketchAPI_Point(SketchPoint_12).coordinates(), "F_L_2")
+
+### Create SketchConstraintAngle
+Sketch_2.setAngle(SketchLine_5.result(), SketchLine_7.result(), 45, type = "Supplementary")
+
+### Create SketchProjection
+SketchProjection_6 = Sketch_2.addProjection(model.selection("VERTEX", "PartSet/Origin"), False)
+SketchPoint_13 = SketchProjection_6.createdFeature()
+Sketch_2.setHorizontalDistance(SketchEllipticArc_1.endPoint(), SketchAPI_Point(SketchPoint_13).coordinates(), "F_D_3")
+
+### Create SketchConstraintMirror
+SketchConstraintMirror_1 = Sketch_2.addMirror(SketchLine_5.result(), [SketchEllipticArc_1.result()])
+[SketchEllipticArc_2] = SketchConstraintMirror_1.mirrored()
+
+### Create SketchLine
+SketchLine_9 = Sketch_2.addLine(9.7416, 8.052073253504034, 9.7416, -8.052073253504034)
+Sketch_2.setCoincident(SketchEllipticArc_1.endPoint(), SketchLine_9.startPoint())
+Sketch_2.setCoincident(SketchAPI_EllipticArc(SketchEllipticArc_2).endPoint(), SketchLine_9.endPoint())
+model.do()
+
+### Create Face
+Face_1 = model.addFace(Part_1_doc, [model.selection("FACE", "Sketch_2/Face-SketchArc_1_2r-SketchEllipticArc_1f-SketchLine_9f-SketchEllipticArc_2f")])
+Face_1.result().setName("Fissure")
+
+### Create Group
+Group_1 = model.addGroup(Part_1_doc, "Edges", [model.selection("EDGE", "Fissure/Modified_Edge&Sketch_2/SketchEllipticArc_1")])
+
+### Create Group
+Group_2 = model.addGroup(Part_1_doc, "Edges", [model.selection("EDGE", "Fissure/Modified_Edge&Sketch_2/SketchArc_1_2")])
+
+### Create Group
+Group_3 = model.addGroup(Part_1_doc, "Edges", [model.selection("EDGE", "Fissure/Modified_Edge&Sketch_2/SketchEllipticArc_2")])
+
+### Create Group
+Group_4 = model.addGroup(Part_1_doc, "Edges", [model.selection("EDGE", "Fissure/Modified_Edge&Sketch_2/SketchLine_9")])
+
+### Create Group
+Group_5 = model.addGroup(Part_1_doc, "Edges", [model.selection("EDGE", "[Tube/Generated_Face&Sketch_1/SketchLine_1][Tube/From_Face]")])
+Group_5.setName("Epaisseur")
+Group_5.result().setName("Epaisseur")
+
+### Create Group
+Group_6 = model.addGroup(Part_1_doc, "Edges", [model.selection("EDGE", "[Tube/Generated_Face&Sketch_1/SketchLine_4][Tube/From_Face]")])
+Group_6.setName("Hauteur")
+Group_6.result().setName("Hauteur")
+
+### Create Group
+Group_7 = model.addGroup(Part_1_doc, "Edges", [model.selection("EDGE", "[Tube/Generated_Face&Sketch_1/SketchLine_4][Tube/Generated_Face&Sketch_1/SketchLine_1]")])
+Group_7.setName("Peripherie")
+Group_7.result().setName("Peripherie")
+
+### Create Export
+ficcao = os.path.join(gmu.pathBloc, "materielCasTests", "{}Fiss.xao".format(NOM_OBJET))
+text = ".. Exportation de la géométrie de la fissure dans le fichier '{}'".format(ficcao)
+logging.info(text)
+_ = model.exportToXAO(Part_1_doc, ficcao, model.selection("FACE", "Fissure"), 'XAO')
+
+model.end()
+
+###
+### SHAPERSTUDY component
+###
+
+model.publishToShaperStudy()
+
+l_aux = SHAPERSTUDY.shape(model.featureStringId(Revolution_1))
+objet = l_aux[0]
+l_groups = l_aux[1:]
+
+###
+### SMESH component
+###
+
+smesh = smeshBuilder.New()
+Maillage_tube = smesh.Mesh(objet)
+putName(Maillage_tube.GetMesh(), NOM_OBJET)
+
+for groupe in l_groups:
+  groupe_nom = groupe.GetName()
+  if ( groupe_nom[:1] == "E" ):
+    group_e = groupe
+  elif ( groupe_nom[:1] == "H" ):
+    group_h = groupe
+  elif ( groupe_nom[:1] == "P" ):
+    group_p = groupe
+  _ = Maillage_tube.GroupOnGeom(groupe,groupe_nom,SMESH.EDGE)
+
+Regular_1D = Maillage_tube.Segment()
+Nb_Segments_1 = Regular_1D.NumberOfSegments(NB_S_P)
+Nb_Segments_1.SetDistrType( 0 )
+Quadrangle_2D = Maillage_tube.Quadrangle(algo=smeshBuilder.QUADRANGLE)
+Hexa_3D = Maillage_tube.Hexahedron(algo=smeshBuilder.Hexa)
+
+Regular_1D_1 = Maillage_tube.Segment(geom=group_e)
+Number_of_Segments_1 = Regular_1D_1.NumberOfSegments(NB_S_E)
+Propagation_of_1D_Hyp = Regular_1D_1.Propagation()
+
+Regular_1D_2 = Maillage_tube.Segment(geom=group_h)
+Number_of_Segments_2 = Regular_1D_2.NumberOfSegments(NB_S_H)
+Propagation_of_1D_Hyp_1 = Regular_1D_2.Propagation()
+
+## set object names
+#smesh.SetName(Regular_1D.GetAlgorithm(), 'Regular_1D')
+#smesh.SetName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D')
+#smesh.SetName(Hexa_3D.GetAlgorithm(), 'Hexa_3D')
+putName(Nb_Segments_1, 'Nb. Segments_1', i_pref='tube')
+putName(Number_of_Segments_1, 'Number_of_Segments_1', i_pref='tube')
+putName(Number_of_Segments_2, 'Number_of_Segments_2', i_pref='tube')
+putName(Propagation_of_1D_Hyp, 'Propagation', i_pref='tube')
+
+is_done = Maillage_tube.Compute()
+text = "Maillage_tube.Compute"
+if is_done:
+  logging.info(text+" OK")
+else:
+  text = "Erreur au calcul du maillage.\n" + text
+  logging.info(text)
+  raise Exception(text)
+
+ficmed = os.path.join(gmu.pathBloc, "materielCasTests","{}.med".format(NOM_OBJET))
+text = ".. Archivage du maillage dans le fichier '{}'".format(ficmed)
+logging.info(text)
+Maillage_tube.ExportMED(ficmed)
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser()
index 3c898d99119c6cdf0543545ba0497f46ff30f615..e71c99b92ce8abc3c797cc5a6c9f8a52af705bf1 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2014-2020  EDF R&D
+# Copyright (C) 2014-2024  EDF
 #
 # 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
 #
+"""Géométrie et maillage de base nécessaire au cas-test :
+. vis_1
+"""
 
-import sys
-import salome
+import os
+import math
 
-salome.salome_init()
+import logging
 
-import salome_notebook
-notebook = salome_notebook.notebook
+import salome
+from salome.smesh import smeshBuilder
+from salome.StdMeshers import StdMeshersBuilder
+import GEOM
+import SMESH
+import SALOMEDS
 
-import os
 from blocFissure import gmu
+from blocFissure.gmu.geomsmesh import geompy
+from blocFissure.gmu.geomsmesh import geomPublish
+from blocFissure.gmu.geomsmesh import geomPublishInFather
+
+from blocFissure.gmu.triedreBase import triedreBase
+from blocFissure.gmu.putName import putName
+from blocFissure.gmu import initLog
 
 ###
 ### GEOM component
 ###
 
-import GEOM
-from salome.geom import geomBuilder
-import math
-import SALOMEDS
-
+O, OX, OY, OZ = triedreBase()
 
-geompy = geomBuilder.New()
-O = geompy.MakeVertex(0, 0, 0)
-OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
-OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
-OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
 geomObj_1 = geompy.MakeMarker(0, 0, 0, 1, 0, 0, 0, 1, 0)
 geomObj_2 = geompy.MakeMarker(0, 0, 0, 1, 0, 0, 0, 1, 0)
 sk = geompy.Sketcher2D()
@@ -79,6 +83,31 @@ geompy.UnionIDs(appui, [39])
 p_imp = geompy.CreateGroup(coupe_vis, geompy.ShapeType["EDGE"])
 geompy.UnionIDs(p_imp, [11])
 
+geomPublish(initLog.debug, Sketch_1, 'Sketch_1' )
+geomPublish(initLog.debug, Face_1, 'Face_1' )
+geomPublish(initLog.debug, Vertex_1, 'Vertex_1' )
+geomPublish(initLog.debug, Vertex_2, 'Vertex_2' )
+geomPublish(initLog.debug, Vertex_3, 'Vertex_3' )
+geomPublishInFather(initLog.debug, Face_1, Face_1_vertex_17, 'Face_1:vertex_17' )
+geomPublish(initLog.debug, Line_1, 'Line_1' )
+geomPublishInFather(initLog.debug, Face_1, Face_1_vertex_9, 'Face_1:vertex_9' )
+geomPublish(initLog.debug, Line_2, 'Line_2' )
+geomPublishInFather(initLog.debug, Face_1, Face_1_vertex_19, 'Face_1:vertex_19' )
+geomPublishInFather(initLog.debug, Face_1, Face_1_vertex_7, 'Face_1:vertex_7' )
+geomPublish(initLog.debug, Line_3, 'Line_3' )
+geomPublish(initLog.debug, Line_4, 'Line_4' )
+
+geompy.addToStudy( coupe_vis, 'coupe_vis' )
+geompy.addToStudyInFather( coupe_vis, tige, 'tige' )
+geompy.addToStudyInFather( coupe_vis, section, 'section' )
+geompy.addToStudyInFather( coupe_vis, tige_haute, 'tige_haute' )
+geompy.addToStudyInFather( coupe_vis, rond, 'rond' )
+geompy.addToStudyInFather( coupe_vis, tete, 'tete' )
+geompy.addToStudyInFather( coupe_vis, section_tete, 'section_tete' )
+geompy.addToStudyInFather( coupe_vis, conge, 'conge' )
+geompy.addToStudyInFather( coupe_vis, appui, 'appui' )
+geompy.addToStudyInFather( coupe_vis, p_imp, 'p_imp' )
+
 Vertex_4 = geompy.MakeVertex(11.25, 98.75, 0)
 Vertex_5 = geompy.MakeVertexWithRef(Vertex_4, -0.5, 0.5, 0)
 Vertex_6 = geompy.MakeVertexWithRef(Vertex_4, -5, 5, 0)
@@ -114,78 +143,55 @@ Extrusion_1 = geompy.MakePrismVecH(Face_2, OX, 15)
 Revolution_2 = geompy.MakeRevolution2Ways(generatrice, OY, 65*math.pi/180.0)
 Fissure = geompy.MakeCommonList([Extrusion_1, Revolution_2], True)
 fondFiss = geompy.CreateGroup(Fissure, geompy.ShapeType["EDGE"])
-geompy.UnionIDs(fondFiss, [9, 7, 4])
-geompy.ExportBREP(Fissure, os.path.join(gmu.pathBloc, "materielCasTests/visFiss.brep"))
-
-geompy.addToStudy( O, 'O' )
-geompy.addToStudy( OX, 'OX' )
-geompy.addToStudy( OY, 'OY' )
-geompy.addToStudy( OZ, 'OZ' )
-geompy.addToStudy( Sketch_1, 'Sketch_1' )
-geompy.addToStudy( Face_1, 'Face_1' )
-geompy.addToStudy( Vertex_1, 'Vertex_1' )
-geompy.addToStudy( Vertex_2, 'Vertex_2' )
-geompy.addToStudy( Vertex_3, 'Vertex_3' )
-geompy.addToStudyInFather( Face_1, Face_1_vertex_17, 'Face_1:vertex_17' )
-geompy.addToStudy( Line_1, 'Line_1' )
-geompy.addToStudyInFather( Face_1, Face_1_vertex_9, 'Face_1:vertex_9' )
-geompy.addToStudy( Line_2, 'Line_2' )
-geompy.addToStudyInFather( Face_1, Face_1_vertex_19, 'Face_1:vertex_19' )
-geompy.addToStudyInFather( Face_1, Face_1_vertex_7, 'Face_1:vertex_7' )
-geompy.addToStudy( Line_3, 'Line_3' )
-geompy.addToStudy( Line_4, 'Line_4' )
-geompy.addToStudy( coupe_vis, 'coupe_vis' )
-geompy.addToStudyInFather( coupe_vis, tige, 'tige' )
-geompy.addToStudyInFather( coupe_vis, section, 'section' )
-geompy.addToStudyInFather( coupe_vis, tige_haute, 'tige_haute' )
-geompy.addToStudyInFather( coupe_vis, rond, 'rond' )
-geompy.addToStudyInFather( coupe_vis, tete, 'tete' )
-geompy.addToStudyInFather( coupe_vis, section_tete, 'section_tete' )
-geompy.addToStudyInFather( coupe_vis, conge, 'conge' )
-geompy.addToStudyInFather( coupe_vis, appui, 'appui' )
-geompy.addToStudyInFather( coupe_vis, p_imp, 'p_imp' )
+geompy.UnionIDs(fondFiss, [6, 8])
 
-geompy.addToStudy( Vertex_4, 'Vertex_4' )
-geompy.addToStudy( Vertex_6, 'Vertex_6' )
-geompy.addToStudy( Vertex_5, 'Vertex_5' )
-geompy.addToStudy( Line_5, 'Line_5' )
-geompy.addToStudy( Partition_1, 'Partition_1' )
-geompy.addToStudyInFather( Partition_1, Vertex_7, 'Vertex_7' )
-geompy.addToStudy( Vertex_8, 'Vertex_8' )
-geompy.addToStudy( generatrice, 'generatrice' )
-geompy.addToStudy( Revolution_1, 'Revolution_1' )
-geompy.addToStudy( Partition_2, 'Partition_2' )
-geompy.addToStudyInFather( Partition_2, Partition_2_vertex_11, 'Partition_2:vertex_11' )
-geompy.addToStudy( Plane_1, 'Plane_1' )
-geompy.addToStudy( Partition_3, 'Partition_3' )
-geompy.addToStudy( Vertex_9, 'Vertex_9' )
-geompy.addToStudy( Vertex_10, 'Vertex_10' )
-geompy.addToStudy( Vertex_11, 'Vertex_11' )
-geompy.addToStudy( Vertex_12, 'Vertex_12' )
-geompy.addToStudy( Vertex_13, 'Vertex_13' )
-geompy.addToStudy( Vertex_14, 'Vertex_14' )
-geompy.addToStudy( Vertex_15, 'Vertex_15' )
-geompy.addToStudy( Vertex_16, 'Vertex_16' )
-geompy.addToStudy( Arc_1, 'Arc_1' )
-geompy.addToStudy( Arc_2, 'Arc_2' )
-geompy.addToStudy( Line_6, 'Line_6' )
-geompy.addToStudy( Line_8, 'Line_8' )
-geompy.addToStudy( Wire_1, 'Wire_1' )
-geompy.addToStudy( Face_2, 'Face_2' )
-geompy.addToStudy( Extrusion_1, 'Extrusion_1' )
-geompy.addToStudy( Revolution_2, 'Revolution_2' )
-geompy.addToStudy( Fissure, 'Fissure' )
+geomPublish(initLog.debug, Vertex_4, 'Vertex_4' )
+geomPublish(initLog.debug, Vertex_6, 'Vertex_6' )
+geomPublish(initLog.debug, Vertex_5, 'Vertex_5' )
+geomPublish(initLog.debug, Line_5, 'Line_5' )
+geomPublish(initLog.debug, Partition_1, 'Partition_1' )
+geomPublishInFather(initLog.debug, Partition_1, Vertex_7, 'Vertex_7' )
+geomPublish(initLog.debug, Vertex_8, 'Vertex_8' )
+geomPublish(initLog.debug, generatrice, 'generatrice' )
+geomPublish(initLog.debug, Revolution_1, 'Revolution_1' )
+geomPublish(initLog.debug, Partition_2, 'Partition_2' )
+geomPublishInFather(initLog.debug, Partition_2, Partition_2_vertex_11, 'Partition_2:vertex_11' )
+geomPublish(initLog.debug, Plane_1, 'Plane_1' )
+geomPublish(initLog.debug, Partition_3, 'Partition_3' )
+geomPublish(initLog.debug, Vertex_9, 'Vertex_9' )
+geomPublish(initLog.debug, Vertex_10, 'Vertex_10' )
+geomPublish(initLog.debug, Vertex_11, 'Vertex_11' )
+geomPublish(initLog.debug, Vertex_12, 'Vertex_12' )
+geomPublish(initLog.debug, Vertex_13, 'Vertex_13' )
+geomPublish(initLog.debug, Vertex_14, 'Vertex_14' )
+geomPublish(initLog.debug, Vertex_15, 'Vertex_15' )
+geomPublish(initLog.debug, Vertex_16, 'Vertex_16' )
+geomPublish(initLog.debug, Arc_1, 'Arc_1' )
+geomPublish(initLog.debug, Arc_2, 'Arc_2' )
+geomPublish(initLog.debug, Line_6, 'Line_6' )
+geomPublish(initLog.debug, Line_8, 'Line_8' )
+geomPublish(initLog.debug, Wire_1, 'Wire_1' )
+geomPublish(initLog.debug, Face_2, 'Face_2' )
+geomPublish(initLog.debug, Extrusion_1, 'Extrusion_1' )
+geomPublish(initLog.debug, Revolution_2, 'Revolution_2' )
+geompy.addToStudy( Fissure, 'vis_Fissure' )
 geompy.addToStudyInFather( Fissure, fondFiss, 'fondFiss' )
 
+ficcao = os.path.join(gmu.pathBloc, "materielCasTests", "visFiss.brep")
+text = ".. Exportation de la géométrie de la fissure dans le fichier '{}'".format(ficcao)
+logging.info(text)
+geompy.ExportBREP(Fissure, ficcao)
+
 ###
 ### SMESH component
 ###
 
-import  SMESH, SALOMEDS
-from salome.smesh import smeshBuilder
+logging.info("Maillage de %s", coupe_vis.GetName())
 
 smesh = smeshBuilder.New()
 coupe_vis_1 = smesh.Mesh(coupe_vis)
+putName(coupe_vis_1.GetMesh(), 'coupe_vis')
+
 Regular_1D = coupe_vis_1.Segment()
 Nb_Segments_1 = Regular_1D.NumberOfSegments(10)
 Quadrangle_2D = coupe_vis_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
@@ -193,73 +199,61 @@ Regular_1D_1 = coupe_vis_1.Segment(geom=tige)
 Nb_Segments_2 = Regular_1D_1.NumberOfSegments(30)
 Regular_1D_2 = coupe_vis_1.Segment(geom=section)
 Nb_Segments_3 = Regular_1D_2.NumberOfSegments(10,1,[ 7, 11, 16, 23 ])
-isDone = coupe_vis_1.Compute()
-isDone = coupe_vis_1.SplitQuad( [ 691 ], 1 )
-tige_1 = coupe_vis_1.GroupOnGeom(tige,'tige',SMESH.EDGE)
-section_1 = coupe_vis_1.GroupOnGeom(section,'section',SMESH.EDGE)
-tige_haute_1 = coupe_vis_1.GroupOnGeom(tige_haute,'tige_haute',SMESH.EDGE)
-rond_1 = coupe_vis_1.GroupOnGeom(rond,'rond',SMESH.EDGE)
-tete_1 = coupe_vis_1.GroupOnGeom(tete,'tete',SMESH.EDGE)
-section_tete_1 = coupe_vis_1.GroupOnGeom(section_tete,'section_tete',SMESH.EDGE)
-conge_1 = coupe_vis_1.GroupOnGeom(conge,'conge',SMESH.EDGE)
-appui_1 = coupe_vis_1.GroupOnGeom(appui,'appui',SMESH.EDGE)
-p_imp_1 = coupe_vis_1.GroupOnGeom(p_imp,'p_imp',SMESH.EDGE)
+
+_ = coupe_vis_1.GroupOnGeom(tige,'tige',SMESH.EDGE)
+_ = coupe_vis_1.GroupOnGeom(section,'section',SMESH.EDGE)
+_ = coupe_vis_1.GroupOnGeom(tige_haute,'tige_haute',SMESH.EDGE)
+_ = coupe_vis_1.GroupOnGeom(rond,'rond',SMESH.EDGE)
+_ = coupe_vis_1.GroupOnGeom(tete,'tete',SMESH.EDGE)
+_ = coupe_vis_1.GroupOnGeom(section_tete,'section_tete',SMESH.EDGE)
+_ = coupe_vis_1.GroupOnGeom(conge,'conge',SMESH.EDGE)
+_ = coupe_vis_1.GroupOnGeom(appui,'appui',SMESH.EDGE)
+_ = coupe_vis_1.GroupOnGeom(p_imp,'p_imp',SMESH.EDGE)
+
+## set object names
+#smesh.SetName(Regular_1D.GetAlgorithm(), 'Regular_1D')
+#smesh.SetName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D')
+putName(Nb_Segments_1, 'Nb. Segments_1', i_pref='vis')
+putName(Nb_Segments_2, 'Nb. Segments_2', i_pref='vis')
+putName(Nb_Segments_3, 'Nb. Segments_3', i_pref='vis')
+
+is_done = coupe_vis_1.Compute()
+text = "coupe_vis_1.Compute"
+if is_done:
+  logging.debug(text+" : OK")
+else:
+  text = "Erreur au calcul du maillage.\n" + text
+  logging.info(text)
+  raise Exception(text)
+
+# Découpage en 2 triangles du quadrangle dans l'angle
+cg_x=0.972772
+cg_y=104.835
+cg_z=0.
+l_ids = coupe_vis_1.FindElementsByPoint( cg_x,cg_y,cg_z, SMESH.FACE )
+if ( len(l_ids) != 1 ):
+  text = "Maillage {}.\nImpossible de trouver l'élément proche de ({},{},{}).".format(coupe_vis.GetName(),cg_x,cg_y,cg_z)
+  raise Exception(text)
+isDone = coupe_vis_1.SplitQuad( l_ids, 1 )
+text = "SplitQuad de l'élément n° {} du maillage de {}".format(l_ids[0],coupe_vis.GetName())
+if isDone:
+  logging.debug(text+" : OK")
+else:
+  text = "Erreur.\n" + text
+  logging.info(text)
+  raise Exception(text)
+
 visHex80 = smesh.CopyMesh( coupe_vis_1, 'visHex80', 1, 0)
-[ tige_2, section_2, tige_haute_2, rond_2, tete_2, section_tete_2, conge_2, appui_2, p_imp_2 ] = visHex80.GetGroups()
-[ tige_rotated, section_rotated, tige_haute_rotated, rond_rotated, tete_rotated, section_tete_rotated, conge_rotated, appui_rotated, p_imp_rotated, tige_top, section_top, tige_haute_top, rond_top, tete_top, section_tete_top, conge_top, appui_top, p_imp_top ] = visHex80.RotationSweepObjects( [ visHex80 ], [ visHex80 ], [ visHex80 ], SMESH.AxisStruct( 0, 0, 0, 0, 10, 0 ), 0.0785398, 40, 1e-05, 1 )
-[ tige_2, section_2, tige_haute_2, rond_2, tete_2, section_tete_2, conge_2, appui_2, p_imp_2, tige_rotated, tige_top, section_rotated, section_top, tige_haute_rotated, tige_haute_top, rond_rotated, rond_top, tete_rotated, tete_top, section_tete_rotated, section_tete_top, conge_rotated, conge_top, appui_rotated, appui_top, p_imp_rotated, p_imp_top ] = visHex80.GetGroups()
-Sub_mesh_1 = Regular_1D_1.GetSubMesh()
-Sub_mesh_2 = Regular_1D_2.GetSubMesh()
-visHex80.ExportMED(os.path.join(gmu.pathBloc, "materielCasTests/visSain.med"))
+putName(visHex80.GetMesh(), 'visHex80')
 
-## Set names of Mesh objects
-smesh.SetName(tige_2, 'tige')
-smesh.SetName(Regular_1D.GetAlgorithm(), 'Regular_1D')
-smesh.SetName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D')
-smesh.SetName(Nb_Segments_2, 'Nb. Segments_2')
-smesh.SetName(Nb_Segments_1, 'Nb. Segments_1')
-smesh.SetName(Nb_Segments_3, 'Nb. Segments_3')
-smesh.SetName(coupe_vis_1.GetMesh(), 'coupe_vis')
-smesh.SetName(visHex80.GetMesh(), 'visHex80')
-smesh.SetName(p_imp_top, 'p_imp_top')
-smesh.SetName(appui_top, 'appui_top')
-smesh.SetName(conge_top, 'conge_top')
-smesh.SetName(section_tete_top, 'section_tete_top')
-smesh.SetName(tete_top, 'tete_top')
-smesh.SetName(rond_top, 'rond_top')
-smesh.SetName(tige_haute_top, 'tige_haute_top')
-smesh.SetName(section_top, 'section_top')
-smesh.SetName(tige_top, 'tige_top')
-smesh.SetName(Sub_mesh_2, 'Sub-mesh_2')
-smesh.SetName(Sub_mesh_1, 'Sub-mesh_1')
-smesh.SetName(p_imp_1, 'p_imp')
-smesh.SetName(p_imp_rotated, 'p_imp_rotated')
-smesh.SetName(appui_1, 'appui')
-smesh.SetName(appui_rotated, 'appui_rotated')
-smesh.SetName(conge_rotated, 'conge_rotated')
-smesh.SetName(section_tete_rotated, 'section_tete_rotated')
-smesh.SetName(tete_rotated, 'tete_rotated')
-smesh.SetName(rond_rotated, 'rond_rotated')
-smesh.SetName(tige_haute_rotated, 'tige_haute_rotated')
-smesh.SetName(section_rotated, 'section_rotated')
-smesh.SetName(tige_1, 'tige')
-smesh.SetName(tige_rotated, 'tige_rotated')
-smesh.SetName(tige_haute_1, 'tige_haute')
-smesh.SetName(section_1, 'section')
-smesh.SetName(tete_1, 'tete')
-smesh.SetName(rond_1, 'rond')
-smesh.SetName(conge_1, 'conge')
-smesh.SetName(appui_2, 'appui')
-smesh.SetName(section_tete_1, 'section_tete')
-smesh.SetName(p_imp_2, 'p_imp')
-smesh.SetName(section_tete_2, 'section_tete')
-smesh.SetName(conge_2, 'conge')
-smesh.SetName(rond_2, 'rond')
-smesh.SetName(tete_2, 'tete')
-smesh.SetName(section_2, 'section')
-smesh.SetName(tige_haute_2, 'tige_haute')
+_ = visHex80.RotationSweepObjects( [ visHex80 ], [ visHex80 ], [ visHex80 ], SMESH.AxisStruct( 0, 0, 0, 0, 10, 0 ), 0.0785398, 40, 1e-05, 1 )
 
+ficmed = os.path.join(gmu.pathBloc, "materielCasTests","visSain.med")
+text = ".. Archivage du maillage dans le fichier '{}'".format(ficmed)
+logging.info(text)
+visHex80.ExportMED(ficmed)
+
+## Set names of Mesh objects
 
 if salome.sg.hasDesktop():
   salome.sg.updateObjBrowser()
index 6bb2f9b64c2f2d169619a3fe4dc31324841f11bb..d7be02c405d1a7bcd082c4303c98925ae1863d65 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 15d3361715d164293c407ba1ff93b55d8f2fa28b..491ec642411098eb00b7bc91d59b3e542bc01f34 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007-2020  EDF R&D
+# Copyright (C) 2007-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 7c02edb2845bc5f3cb27ae2a85fd8256f892ebb2..74f287c5cc0835105f34435558ccf168dc814cc9 100644 (file)
@@ -29,7 +29,8 @@ GENERATE_HTML     = YES
 HTML_OUTPUT       = .
 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/salome_extra.css 
+HTML_EXTRA_STYLESHEET = @CMAKE_CURRENT_SOURCE_DIR@/static/salome_extra.css
+HTML_EXTRA_FILES      = @CMAKE_CURRENT_SOURCE_DIR@/images/head.png
 TOC_EXPAND        = YES
 DISABLE_INDEX     = NO
 GENERATE_TREEVIEW = YES
diff --git a/src/Tools/padder/doc/images/head.png b/src/Tools/padder/doc/images/head.png
new file mode 100644 (file)
index 0000000..307d9ef
Binary files /dev/null and b/src/Tools/padder/doc/images/head.png differ
index 24c61a4cb473d009254c127e75902e72e1112883..8b4b97e87a21ee32451d8ddedea6e3f3b6e6b17e 100644 (file)
@@ -4,7 +4,7 @@
   <ul>
     $navpath
     <li class="footer">
-      Copyright &copy; 2012-2020  EDF R&amp;D<br>
+      Copyright &copy; 2012-2024  EDF<br>
     </li>
   </ul>
 </div>
index 9d11402c1aa6558f76e5f84a7ffb5a1a68cbce3c..ad6e0ff758ca005db26b6efd34923208126894dc 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index b01aa1fb93ce61bd10c7bf427e15fdffe0676225..f2975edb3ebe07ea767155e22e41f585758ae4e2 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 0fd1d8e33da6536dcc6f0448579bbcb795293fce..efd48d6e82c824ac0c3f25b5fa37970cf2c16420 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2011-2020  EDF R&D
+// Copyright (C) 2011-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 641935b871941f28f4e0bc72329aa9e78681031a..ba92261329d54655ef1722637b6eaf8731cd4ded 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2011-2020  EDF R&D
+// Copyright (C) 2011-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index f580f4d65c5310c30824a12856f9889ffaff7d14..1a1a414060f9195dd033c19fb4da5376a406fed0 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # 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
 #
 
+include(${SWIG_USE_FILE})
+
 # --- options ---
-# additional include directories
 INCLUDE_DIRECTORIES(
+  ${CMAKE_CURRENT_SOURCE_DIR}
   ${KERNEL_INCLUDE_DIRS}
   ${GEOM_INCLUDE_DIRS}
   ${OpenCASCADE_INCLUDE_DIR}
   ${Boost_INCLUDE_DIRS}
   ${OMNIORB_INCLUDE_DIR}
   ${LIBXML2_INCLUDE_DIR}
+  ${MEDCOUPLING_INCLUDE_DIRS}
   ${PROJECT_SOURCE_DIR}/src/SMESH
   ${PROJECT_SOURCE_DIR}/src/SMESH_I
   ${PROJECT_SOURCE_DIR}/src/SMESHDS
@@ -85,6 +88,28 @@ SET(SPADDERPluginTesterEngine_SOURCES
   SPADDERPluginTester_i.cxx
 )
 
+# - swiggy pop
+
+SET(SMeshPadderHelper_HEADERS SMeshPadderHelper.h SMeshPadderHelper.i)
+SET(SMeshPadderHelper_SOURCES SMeshPadderHelper.cxx ${SMeshPadderHelper_HEADERS})
+SET_SOURCE_FILES_PROPERTIES(SMeshPadderHelper.i PROPERTIES CPLUSPLUS ON)
+SET_SOURCE_FILES_PROPERTIES(SMeshPadderHelper.i PROPERTIES SWIG_FLAGS "-py3")
+SET_SOURCE_FILES_PROPERTIES(SMeshPadderHelper_wrap.cpp PROPERTIES COMPILE_FLAGS "-DHAVE_CONFIG_H")
+SET(_swig_SCRIPTS ${CMAKE_CURRENT_BINARY_DIR}/SMeshPadderHelper.py )
+IF(${CMAKE_VERSION} VERSION_LESS "3.8.0") 
+  SWIG_ADD_MODULE(SMeshPadderHelper python ${SMeshPadderHelper_SOURCES})
+ELSE()
+  SWIG_ADD_LIBRARY(SMeshPadderHelper LANGUAGE python SOURCES ${SMeshPadderHelper_SOURCES})
+ENDIF()
+SWIG_LINK_LIBRARIES(SMeshPadderHelper ${PYTHON_LIBRARIES} ${PLATFORM_LIBS} MeshJobManagerEngine )
+SWIG_CHECK_GENERATION(SMeshPadderHelper)
+IF(WIN32)
+  SET_TARGET_PROPERTIES(_SMeshPadderHelper PROPERTIES DEBUG_OUTPUT_NAME _SMeshPadderHelper_d)
+ENDIF(WIN32)
+install(TARGETS _SMeshPadderHelper DESTINATION ${SALOME_INSTALL_LIBS})
+install(FILES ${SMeshPadderHelper_HEADERS} DESTINATION ${SALOME_INSTALL_HEADERS})
+SALOME_INSTALL_SCRIPTS("${_swig_SCRIPTS}"  ${SALOME_INSTALL_BINS} EXTRA_DPYS "${SWIG_MODULE_SMeshPadderHelper_REAL_NAME}")
+
 # --- rules ---
 
 ADD_LIBRARY(MeshJobManagerEngine ${MeshJobManagerEngine_SOURCES})
index 5eee6858e4a47e14be97a7846161840c773b57c2..6fdf92764727a70b801540d9bd41150e39465d83 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2011-2020  EDF R&D
+// Copyright (C) 2011-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -83,6 +83,10 @@ static bool fexists(const char *filename)
   return false;
 }
 
+//Engines::EngineComponent_var RetrievePadderMeshJobManagerInstance()
+//{
+//}
+
 //
 // ====================================================================
 // Constructor/Destructor
@@ -92,8 +96,9 @@ MeshJobManager_i::MeshJobManager_i(CORBA::ORB_ptr orb,
                                    PortableServer::POA_ptr poa,
                                    PortableServer::ObjectId * contId,
                                    const char *instanceName,
-                                   const char *interfaceName)
-  : Engines_Component_i(orb, poa, contId, instanceName, interfaceName)
+                                   const char *interfaceName,
+                                   bool checkNS, bool regist)
+  : Engines_Component_i(orb, poa, contId, instanceName, interfaceName, checkNS, regist)
 {
   LOG("Activating MESHJOB::MeshJobManager object");
   _thisObj = this ;
@@ -710,7 +715,13 @@ extern "C"
                                                            const char *interfaceName)
   {
     LOG("PortableServer::ObjectId * MeshJobManagerEngine_factory()");
-    MeshJobManager_i * myEngine = new MeshJobManager_i(orb, poa, contId, instanceName, interfaceName);
+    MeshJobManager_i * myEngine = nullptr;
+    CORBA::Object_var o = poa->id_to_reference(*contId);
+    Engines::Container_var cont = Engines::Container::_narrow(o);
+    if(cont->is_SSL_mode())
+      myEngine = new MeshJobManager_i(orb, poa, contId, instanceName, interfaceName, false, false);
+    else
+      myEngine = new MeshJobManager_i(orb, poa, contId, instanceName, interfaceName, true, true);
     return myEngine->getId() ;
   }
 }
index 6b85fe029d6da79f115673e799a4c3525d27cec3..081afacfce2a7af1ffdb8e608c2488a711ed2d9c 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2011-2020  EDF R&D
+// Copyright (C) 2011-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
@@ -43,6 +43,7 @@
  #define MESHJOBMANAGERENGINE_EXPORT
 #endif
 
+//Engines::EngineComponent_var RetrievePadderMeshJobManagerInstance();
 
 class MESHJOBMANAGERENGINE_EXPORT MeshJobManager_i: public virtual POA_MESHJOB::MeshJobManager,
                                                     public Engines_Component_i
@@ -50,7 +51,7 @@ class MESHJOBMANAGERENGINE_EXPORT MeshJobManager_i: public virtual POA_MESHJOB::
 public:
   MeshJobManager_i(CORBA::ORB_ptr orb, PortableServer::POA_ptr poa,
                    PortableServer::ObjectId * contId,
-                   const char *instanceName, const char *interfaceName);
+                   const char *instanceName, const char *interfaceName, bool checkNS = true, bool regist = true);
   ~MeshJobManager_i();
 
   bool           configure  (const char *configId,
diff --git a/src/Tools/padder/meshjob/impl/SMeshPadderHelper.cxx b/src/Tools/padder/meshjob/impl/SMeshPadderHelper.cxx
new file mode 100644 (file)
index 0000000..21d32a8
--- /dev/null
@@ -0,0 +1,62 @@
+// Copyright (C) 2021-2024  EDF
+//
+// 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 "SMeshPadderHelper.h"
+
+#include "MeshJobManager_i.hxx"
+#include "SALOME_Container_i.hxx"
+#include "SALOME_KernelServices.hxx"
+
+#include "SALOME_Fake_NamingService.hxx"
+
+static Engines::EngineComponent_var _unique_compo;
+
+Engines::EngineComponent_var GetPadderMeshJobManagerInstance()
+{
+  if (CORBA::is_nil(_unique_compo))
+  {
+    CORBA::ORB_var orb;
+    {
+      int argc(0);
+      orb = CORBA::ORB_init(argc, nullptr);
+    }
+    CORBA::Object_var obj = orb->resolve_initial_references("RootPOA");
+    PortableServer::POA_var poa = PortableServer::POA::_narrow(obj);
+    PortableServer::POAManager_var pman = poa->the_POAManager();
+    CORBA::PolicyList policies;
+    policies.length(0);
+    auto *cont(KERNEL::getContainerSA());
+    PortableServer::ObjectId *conId(cont->getCORBAId());
+    //
+    pman->activate();
+    //
+    MeshJobManager_i *servant = new MeshJobManager_i(orb, poa, conId, "MeshJobManager_inst_3", "MeshJobManager", false, false);
+    PortableServer::ObjectId *zeId = servant->getId();
+    CORBA::Object_var zeRef = poa->id_to_reference(*zeId);
+    _unique_compo = Engines::EngineComponent::_narrow(zeRef);
+  }
+  return _unique_compo;
+}
+
+std::string BuildPadderMeshJobManagerInstanceInternal()
+{
+  Engines::EngineComponent_var zeRef = GetPadderMeshJobManagerInstance();
+  CORBA::String_var ior = KERNEL::getORB()->object_to_string(zeRef);
+  return std::string(ior.in());
+}
diff --git a/src/Tools/padder/meshjob/impl/SMeshPadderHelper.h b/src/Tools/padder/meshjob/impl/SMeshPadderHelper.h
new file mode 100644 (file)
index 0000000..d5f44f7
--- /dev/null
@@ -0,0 +1,25 @@
+// Copyright (C) 2021-2024  EDF
+//
+// 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
+//
+
+#pragma once
+
+#include <string>
+
+std::string BuildPadderMeshJobManagerInstanceInternal();
+
diff --git a/src/Tools/padder/meshjob/impl/SMeshPadderHelper.i b/src/Tools/padder/meshjob/impl/SMeshPadderHelper.i
new file mode 100644 (file)
index 0000000..efd5a68
--- /dev/null
@@ -0,0 +1,34 @@
+// Copyright (C) 2021-2024  EDF
+//
+// 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
+//
+
+%module SMeshPadderHelper
+
+%include "std_string.i"
+
+%{
+#include "SMeshPadderHelper.h"
+%}
+
+%inline
+{
+  std::string BuildPadderMeshJobManagerInstance()
+  {
+    return BuildPadderMeshJobManagerInstanceInternal();
+  }
+}
index b793632126cd31965030b75a8f1d0ab8e2315a31..86e8bbe23ba542c85cd6b482f541e3c3b1afb465 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2011-2020  EDF R&D
+// Copyright (C) 2011-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 9a4551f09c71a76ecea3d71844ea8a5aa5a78ac8..56670078f38f96c13b058fcd9f67f2a1e7adaf07 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2011-2020  EDF R&D
+// Copyright (C) 2011-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index adee1ecbe1f2eb201c18f6561626d6013c265552..6e33c11c5f06a7160ace0b7aee2abb52e6350115 100644 (file)
@@ -1,4 +1,4 @@
-// Copyright (C) 2011-2020  EDF R&D
+// Copyright (C) 2011-2024  EDF
 //
 // This library is free software; you can redistribute it and/or
 // modify it under the terms of the GNU Lesser General Public
index 78eaf63075f926ba38ae5120eb809bd7bd20ca48..5eee4642e6a366c54c12a5abf883df06fe4f1c2d 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007-2020  EDF R&D
+# Copyright (C) 2007-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 104aea1f571a9dce0f04679690e6fb5509b8350c..49f46951902e02e17f1baefc5462bef0ec3def28 100755 (executable)
@@ -1,5 +1,5 @@
 #!/usr/bin/env python3
-# Copyright (C) 2011-2020  EDF R&D
+# Copyright (C) 2011-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 5c5f5254e1247bafc86b77b42ee065c6761ecab5..2f758eeda2e417b7b4bb9722620cb57fa5f8349f 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index b007628c4ab21e2d1e11af2675a1ce13d3ab0eda..92c6ca1807251c36888f89ce93dfe77bdbac1ea1 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2011-2020  EDF R&D
+# Copyright (C) 2011-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -94,7 +94,7 @@ def getSpadderCatalogFilename():
 def loadSpadderCatalog():
     import salome
     salome.salome_init()
-    obj = salome.naming_service.Resolve('Kernel/ModulCatalog')
+    obj = salome.naming_service.Resolve('/Kernel/ModulCatalog')
     import SALOME_ModuleCatalog
     catalog = obj._narrow(SALOME_ModuleCatalog.ModuleCatalog)
     if not catalog:
index cf3040a08cd5e11e01c8e6877acd36100b26f33d..bdfa5e76af3aecfca16e13c71a5567f15e9b17b2 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: iso-8859-1 -*-
-# Copyright (C) 2011-2020  EDF R&D
+# Copyright (C) 2011-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 1e58c14fe9795c0d9bfde9c085156c6bad6bfca2..0c3b5eb2fd0f063b861cff91daada378e9551045 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index e1ef08c628ac7a657b79f53dfef25e8586c48b96..cbb6344f2c319571229f4391924155426c3f032a 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2011-2020  EDF R&D
+# Copyright (C) 2011-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 398afec1e8e34bcfcaa86d6560351c7ef06c9c64..0e5fe0a763a70f7efaee8137d0ae25cc031bc430 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: iso-8859-1 -*-
-# Copyright (C) 2011-2020  EDF R&D
+# Copyright (C) 2011-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index e0211406ff4692c23b673f8fc547c4d0394fd13f..ffac9375ac783b3b1c2eaffcd761f4189cd1ac7a 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: iso-8859-1 -*-
-# Copyright (C) 2011-2020  EDF R&D
+# Copyright (C) 2011-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 02e6fb81097fb50abbeaac9bb5d4bf97f472e4a4..84852ade319734a560552a6f611093d77b259fcb 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: iso-8859-1 -*-
-# Copyright (C) 2011-2020  EDF R&D
+# Copyright (C) 2011-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 5247022eb75586048fe5c60caf631f214e5f764d..6d6367bd880e24c23bebf7392ec7ceace36debcb 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 090078117d2824956966b4fbe8d6477037564f92..6a67d00eae90e1456a615e3710f594e6009f5a3e 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2011-2020  EDF R&D
+# Copyright (C) 2011-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 515e6fb980e10b0fa2917a9b97234c5ad44f9866..fb917cc72e43492cac5301fc242d49c9f45c3914 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: iso-8859-1 -*-
-# Copyright (C) 2011-2020  EDF R&D
+# Copyright (C) 2011-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 5121e0d44bde839ae352e50a23cfcc48af85e254..e9b6460bdab3ec619361cf9de5078948fe5220b0 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2012-2020  EDF R&D
+# Copyright (C) 2012-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 408ba9e54d693791c16dcc9113d1497f7eb9cf57..79c02a6a364faf0d4f4e473fa8800545116b4efc 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2011-2020  EDF R&D
+# Copyright (C) 2011-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 18fdcdf2d726633432255e26ea58be22b3978aef..3120d1d065566488d3e94a3064381a8d651bc16f 100644 (file)
@@ -1,5 +1,5 @@
 #!/bin/bash
-# Copyright (C) 2010-2020  EDF R&D
+# Copyright (C) 2010-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 53be7a76e9f4759aac187b64cfccb72615267538..6f0e81dce745ef80426b608945f5a848f82ce635 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: iso-8859-1 -*-
-# Copyright (C) 2011-2020  EDF R&D
+# Copyright (C) 2011-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 33441124aab8f28c4eb719723f4bd9554119b3cf..973d8cdcf05d34da6757ba8b103cb80857003e32 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: iso-8859-1 -*-
-# Copyright (C) 2011-2020  EDF R&D
+# Copyright (C) 2011-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
index 2a8f1107fd56bf2cd65bada281f5468d6a259b96..126c0c96eac33cc665ff85bb4aa9ca65aa0405c2 100644 (file)
@@ -1,5 +1,5 @@
 # -*- coding: utf-8 -*-
-# Copyright (C) 2011-2020  EDF R&D
+# Copyright (C) 2011-2024  EDF
 #
 # This library is free software; you can redistribute it and/or
 # modify it under the terms of the GNU Lesser General Public
@@ -91,3 +91,14 @@ except Exception as e:
   #print 'probleme zcracks'
   salome_pluginsmanager.logger.info('ERROR: Zcrack plug-in is unavailable: {}'.format(e))
   pass
+
+# Topological to volumic mesh plugin
+try:
+  from TopIIVolMeshPlugin import TopIIVolMeshLct
+  salome_pluginsmanager.AddFunction('Run Topological Volumic mesher',
+                                    'run topological volumic mesher',
+                                    TopIIVolMeshLct)
+except Exception as e:
+  #print 'probleme zcracks'
+  salome_pluginsmanager.logger.info('ERROR: TopIIVolMesh plug-in is unavailable: {}'.format(e))
+  pass
diff --git a/test/0README b/test/0README
new file mode 100644 (file)
index 0000000..3cb1751
--- /dev/null
@@ -0,0 +1,7 @@
+This folder contains test scripts for SMESH module.
+
+These tests are exported into the ${SMESH_ROOT_DIR}/bin/test folder and can be executed with the
+`salome test` command, as a part of whole testing procedure.
+
+The example Python scripts to be used in the documentation of Mesh module, must be put into the
+{root_src}/doc/examples folder!
index 4e58f7d62b607ed013133701edc9a91c5272db2f..70a9e0e575f54a399c792375692520633ed81b53 100644 (file)
@@ -1,4 +1,4 @@
-# Copyright (C) 2007-2020  CEA/DEN, EDF R&D, OPEN CASCADE
+# Copyright (C) 2007-2024  CEA, EDF, OPEN CASCADE
 #
 # Copyright (C) 2003-2007  OPEN CASCADE, EADS/CCR, LIP6, CEA/DEN,
 # CEDRAT, EDF R&D, LEG, PRINCIPIA R&D, BUREAU VERITAS
 # See http://www.salome-platform.org/ or email : webmaster.salome@opencascade.com
 #
 
-SALOME_GENERATE_TESTS_ENVIRONMENT(_test_env)
-SET(_test_helper ${CMAKE_SOURCE_DIR}/doc/salome/examples/testme.py)
+INCLUDE(tests.set)
+
+SET(TEST_INSTALL_DIRECTORY ${SMESH_TEST_DIR}/other)
 
-# Tests from RESTRICTED repository -----------------------------------
+# Install 'salome test' staff
+# ---------------------------
 
-SET(RESTRICTED_ROOT_DIR $ENV{RESTRICTED_ROOT_DIR} CACHE PATH "Path to the restricted repository")
+SALOME_CONFIGURE_FILE(CTestTestfileInstall.cmake
+                      ${CMAKE_CURRENT_BINARY_DIR}${CMAKE_FILES_DIRECTORY}/CTestTestfile.cmake
+                      INSTALL ${TEST_INSTALL_DIRECTORY})
+INSTALL(FILES tests.set DESTINATION ${TEST_INSTALL_DIRECTORY})
+INSTALL(FILES ${GOOD_TESTS} ${BAD_TESTS} ${SESSION_FREE_TESTS} ${OTHER_FILES} DESTINATION ${TEST_INSTALL_DIRECTORY})
+INSTALL(DIRECTORY data DESTINATION ${TEST_INSTALL_DIRECTORY})
 
-IF(WITH_SHAPER_STUDY AND EXISTS ${RESTRICTED_ROOT_DIR})
-  FILE(GLOB _restricted_tests "${RESTRICTED_ROOT_DIR}/SMESH/*.py")
-  FOREACH(_test ${_restricted_tests})
-    GET_FILENAME_COMPONENT(_test_name ${_test} NAME_WE)
-    ADD_TEST(NAME ${_test_name}
-             COMMAND ${PYTHON_EXECUTABLE} -B ${_test_helper} ${_test})
-    SET_TESTS_PROPERTIES(${_test_name} PROPERTIES ENVIRONMENT "${_test_env}")
-  ENDFOREACH()
-ELSE()
-  MESSAGE(WARNING "Tests from RESTRICTED repository aren't available")
-ENDIF()
+# Add tests for 'make test'
+# -------------------------
+
+SALOME_GENERATE_TESTS_ENVIRONMENT(_test_env)
 
-# --------------------------------------------------------------------
+FOREACH(_test ${GOOD_TESTS})
+  GET_FILENAME_COMPONENT(testname ${_test} NAME_WE)
+  SET(testname "TESTS_${testname}")
+  ADD_TEST(NAME ${testname}
+           COMMAND ${PYTHON_EXECUTABLE} -B ${CMAKE_SOURCE_DIR}/test/test_helper.py ${CMAKE_CURRENT_SOURCE_DIR}/${_test})
+  SET_TESTS_PROPERTIES(${testname} PROPERTIES ENVIRONMENT "${tests_env}" LABELS "tests")
+ENDFOREACH()
diff --git a/test/CTestTestfileInstall.cmake b/test/CTestTestfileInstall.cmake
new file mode 100644 (file)
index 0000000..4961f25
--- /dev/null
@@ -0,0 +1,36 @@
+# Copyright (C) 2015-2024  CEA, EDF, 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(tests.set)
+
+SET(_all_tests ${GOOD_TESTS} ${BAD_TESTS})
+LIST(SORT _all_tests)
+FOREACH(tfile ${_all_tests})
+  GET_FILENAME_COMPONENT(BASE_NAME ${tfile} NAME_WE)
+  SET(TEST_NAME SMESH_${BASE_NAME})
+  ADD_TEST(${TEST_NAME} python ${PYTHON_TEST_DRIVER} ${TIMEOUT} ${tfile})
+  SET_TESTS_PROPERTIES(${TEST_NAME} PROPERTIES LABELS "${COMPONENT_NAME};${COMPONENT_NAME}_tests")
+ENDFOREACH()
+
+FOREACH(tfile ${SESSION_FREE_TESTS})
+  GET_FILENAME_COMPONENT(BASE_NAME ${tfile} NAME_WE)
+  SET(TEST_NAME SMESH_${BASE_NAME})
+  ADD_TEST(${TEST_NAME} python ${tfile})
+  SET_TESTS_PROPERTIES(${TEST_NAME} PROPERTIES LABELS "${COMPONENT_NAME};${COMPONENT_NAME}_tests")
+endforeach()
diff --git a/test/PAL_MESH_041_mesh.py b/test/PAL_MESH_041_mesh.py
new file mode 100644 (file)
index 0000000..e5029b1
--- /dev/null
@@ -0,0 +1,110 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+
+#-----------------------------GEOM----------------------------------------
+
+#----------Vertexes------------
+p1 = geompy.MakeVertex(20.0,30.0,40.0)
+p2 = geompy.MakeVertex(90.0,80.0,0.0)
+p3 = geompy.MakeVertex(30.0,80.0,200.0)
+
+#----------Edges---------------
+e1 = geompy.MakeEdge(p1,p2)
+e2 = geompy.MakeEdge(p2,p3)
+e3 = geompy.MakeEdge(p3,p1)
+
+#----------Wire----------------
+ListOfEdges = []
+ListOfEdges.append(e3)
+ListOfEdges.append(e2)
+ListOfEdges.append(e1)
+wire1 = geompy.MakeWire(ListOfEdges)
+
+
+#----------Face----------------
+WantPlanarFace = 1
+face1 = geompy.MakeFace(wire1,WantPlanarFace)
+
+Id_face1 = geompy.addToStudy(face1,"Face1")
+
+
+
+#-----------------------------SMESH-------------------------------------------
+
+# -- Init mesh --
+plane_mesh = salome.IDToObject( Id_face1)
+
+mesh = smesh.Mesh(plane_mesh, "Mesh_1")
+
+print("---------------------Hypothesis and Algorithms")
+
+#---------------- NumberOfSegments
+
+numberOfSegment = 9
+
+algoWireDes = mesh.Segment()
+listHyp = algoWireDes.GetCompatibleHypothesis()
+print(algoWireDes.GetName())
+algoWireDes.SetName("Ware descritisation")
+
+hypNbSeg = algoWireDes.NumberOfSegments(numberOfSegment)
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetNumberOfSegments())
+smesh.SetName(hypNbSeg, "Nb. Segments")
+
+
+#--------------------------Max. Element Area
+maxElementArea = 200
+
+algoTri = mesh.Triangle()
+listHyp = algoTri.GetCompatibleHypothesis()
+print(algoTri.GetName())
+algoTri.SetName("Triangle")
+
+hypArea200 = algoTri.MaxElementArea(maxElementArea)
+print(hypArea200.GetName())
+print(hypArea200.GetMaxElementArea())
+smesh.SetName(hypArea200, "Max. Element Area")
+
+
+print("---------------------Compute the mesh")
+
+isDone = mesh.Compute()
+print(isDone)
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+
+salome.sg.updateObjBrowser()
+
diff --git a/test/PAL_MESH_043_2D.py b/test/PAL_MESH_043_2D.py
new file mode 100644 (file)
index 0000000..89a0759
--- /dev/null
@@ -0,0 +1,89 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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_testExtrusion2D.py
+#  Module      : SMESH
+#  Description : Create meshes to test extrusion of mesh elements along path
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+
+#----------------------------------GEOM
+
+# create points
+p1 = geompy.MakeVertex(100, 0, 0)
+p2 = geompy.MakeVertex(100, 0, 100)
+p3 = geompy.MakeVertex(0, 0, 0)
+p4 = geompy.MakeVertex(0, 100, 0)
+
+
+# create two vectors
+vector1 = geompy.MakeVector(p1,p2)
+vector2 = geompy.MakeVector(p3,p4)
+
+# make two ellipses
+ellipse1 = geompy.MakeEllipse(p1,vector1,50,25)
+ellipse2 = geompy.MakeEllipse(p3,vector2,300,50)
+
+# publish circular face and second circle
+id_ellipse1 = geompy.addToStudy(ellipse1, "Ellips 1")
+id_ellipse2 = geompy.addToStudy(ellipse2, "Ellips 2")
+
+
+#---------------------------------SMESH
+
+# create the path mesh
+mesh1 = smesh.Mesh(ellipse1, "Path Mesh")
+
+algoReg1 = mesh1.Segment()
+algoReg1.SetName("Regular_1D")
+hypNbSeg1 = algoReg1.NumberOfSegments(18)
+smesh.SetName(hypNbSeg1, "NumberOfSegments 1")
+
+# create the tool mesh
+mesh2 = smesh.Mesh(ellipse2, "Tool Mesh")
+algoReg2 = mesh2.Segment()
+algoReg2.SetName("Regular_1D")
+hypNbSeg2 = algoReg2.NumberOfSegments(34)
+smesh.SetName(hypNbSeg2, "NumberOfSegments 2")
+
+# compute meshes
+isDone = mesh1.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+isDone = mesh2.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+
+# ---- udate object browser
+salome.sg.updateObjBrowser()
diff --git a/test/PAL_MESH_043_3D.py b/test/PAL_MESH_043_3D.py
new file mode 100644 (file)
index 0000000..24a70cb
--- /dev/null
@@ -0,0 +1,98 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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_testExtrusion3D.py
+#  Module      : SMESH
+#  Description : Create meshes to test extrusion of mesh elements along path
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+
+# create points to build two circles
+p1 = geompy.MakeVertex(0,  100,  0)
+p2 = geompy.MakeVertex(100,  0,  0)
+p3 = geompy.MakeVertex(0, -100,  0)
+p4 = geompy.MakeVertex(0,   70,  0)
+p5 = geompy.MakeVertex(0,  100, 30)
+p6 = geompy.MakeVertex(0,  130,  0)
+
+# create two circles
+circle = geompy.MakeCircleThreePnt(p1, p2, p3)
+cf     = geompy.MakeCircleThreePnt(p4, p5, p6)
+
+# make circular face
+wire = geompy.MakeWire([cf])
+face = geompy.MakeFace(wire, 1)
+
+# publish circular face and second circle
+idcircle = geompy.addToStudy(circle, "Circle")
+idface   = geompy.addToStudy(face,   "Circular face")
+
+
+# init a Mesh with the circular face
+mesh1 = smesh.Mesh(face, "Mesh on circular face")
+
+# set hypotheses and algos to the first mesh
+numberOfSegments1 = 12
+algoReg1 = mesh1.Segment()
+algoReg1.SetName("Regular_1D")
+hypNbSeg1 = algoReg1.NumberOfSegments(numberOfSegments1)
+smesh.SetName(hypNbSeg1, "NumberOfSegments_" + str(numberOfSegments1))
+
+maxElementArea = 30
+
+algoTri = mesh1.Triangle()
+algoTri.SetName("Triangle")
+hypArea = algoTri.MaxElementArea(maxElementArea)
+smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
+
+
+# init a Mesh with the second circle
+mesh2 = smesh.Mesh(circle, "Mesh on circular edge")
+
+numberOfSegments2 = 12
+algoReg2 = mesh2.Segment()
+algoReg2.SetName("Regular_1D")
+hypNbSeg2 = algoReg2.NumberOfSegments(numberOfSegments2)
+smesh.SetName(hypNbSeg2, "NumberOfSegments_" + str(numberOfSegments2))
+
+
+# compute meshes
+isDone = mesh1.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+isDone = mesh2.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# ---- update object browser
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_AdvancedEditor.py b/test/SMESH_AdvancedEditor.py
new file mode 100644 (file)
index 0000000..e0a2d7b
--- /dev/null
@@ -0,0 +1,220 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+import math
+
+def GetNewNodes(mesh,Elems,OldNodes):
+    """
+    Auxiliary function, which return list of nodes from
+    given Elems avoided nodes from OldNodes
+    """
+    newnodes = []
+    for i in Elems:
+        nbn = mesh.GetElemNbNodes(i)
+        for j in range(0,nbn):
+            nn = mesh.GetElemNode(i,j)
+            isold = 0
+            for k in range(0,len(newnodes)):
+                if nn==newnodes[k]:
+                    isold = 1
+                    break
+                pass
+            if isold: continue
+            for k in range(0,len(OldNodes)):
+                if nn==OldNodes[k]:
+                    isold = 1
+                    break
+                pass
+            if isold: continue
+            newnodes.append(nn)
+            pass
+        pass
+    return newnodes
+            
+
+# create empty mesh
+mesh = smesh.Mesh()
+
+tol = 0.001
+
+# create a cross from quadrangle faces
+# 1. create first edge and make extrusion along 0x
+n1 = mesh.AddNode(55,-5,0)
+n2 = mesh.AddNode(55,5,0)
+e1 = mesh.AddEdge([n1,n2])
+dir1 = SMESH.DirStruct(SMESH.PointStruct(-10,0,0))
+mesh.ExtrusionSweep([e1],dir1,11)
+# 2. create second edge and make extrusion along 0y
+n3 = mesh.AddNode(-5,-55,0)
+n4 = mesh.AddNode(5,-55,0)
+e2 = mesh.AddEdge([n3,n4])
+dir2 = SMESH.DirStruct(SMESH.PointStruct(0,10,0))
+mesh.ExtrusionSweep([e2],dir2,11)
+
+# since result has coincident nodes and faces
+# we have to make merge
+nodes = mesh.FindCoincidentNodes(0.001)
+mesh.MergeNodes(nodes)
+mesh.MergeEqualElements()
+
+# make extrusion faces along 0z
+faces = mesh.GetElementsByType(SMESH.FACE)
+nbf = len(faces)
+maxang = 2.0
+zstep = 5
+nbzsteps = 50
+dir3 = SMESH.DirStruct(SMESH.PointStruct(0,0,zstep))
+newfaces = [] # list for keeping created top faces
+              # during extrusion
+
+for i in range(0,nbzsteps):
+    mesh.ExtrusionSweep(faces,dir3,1)
+    # find top faces after each extrusion and keep them
+    res = mesh.GetLastCreatedElems()
+    nbr = len(res)
+    nfaces = []
+    for j in res:
+        nbn = mesh.GetElemNbNodes(j)
+        if nbn!=4: continue
+        nn1 = mesh.GetElemNode(j,0)
+        xyz1 = mesh.GetNodeXYZ(nn1)
+        nn2 = mesh.GetElemNode(j,1)
+        xyz2 = mesh.GetNodeXYZ(nn2)
+        nn3 = mesh.GetElemNode(j,2)
+        xyz3 = mesh.GetNodeXYZ(nn3)
+        if abs(xyz1[2]-xyz2[2])<tol and abs(xyz1[2]-xyz3[2])<tol :
+            # this face is a top face
+            nfaces.append(j)
+            pass
+        pass
+    if len(nfaces)!=nbf:
+        print("len(nfaces)!=nbf")
+        break
+    newfaces.append(nfaces)
+    # update faces for before next step of extrusion
+    faces = nfaces
+    pass
+    
+# rotate faces from newfaces
+axisr1 = SMESH.AxisStruct(0,0,0,0,0,1)
+for i in range(0,nbzsteps):
+    ang = maxang*(1-math.cos((i+1)*math.pi/nbzsteps))
+    mesh.Rotate(newfaces[i],axisr1,ang,0)
+
+
+# create circles
+# create two edges and rotate them for creation
+# full circle
+n5 = mesh.AddNode(65,0,0)
+n6 = mesh.AddNode(67.5,0,0)
+n7 = mesh.AddNode(70,0,0)
+e56 = mesh.AddEdge([n5,n6])
+e67 = mesh.AddEdge([n6,n7])
+axisr2 = SMESH.AxisStruct(65,0,0,0,1,0)
+mesh.RotationSweep([e56,e67],axisr2, math.pi/6, 12, tol)
+res = mesh.GetLastCreatedElems()
+faces1 = []
+for i in res:
+    nbn = mesh.GetElemNbNodes(i)
+    if nbn>2: faces1.append(i)
+    pass
+nbf1 = len(faces1)
+
+# create other two edges and rotate them for creation
+# other full circle
+n8 = mesh.AddNode(-65,0,0)
+n9 = mesh.AddNode(-67.5,0,0)
+n10 = mesh.AddNode(-70,0,0)
+e8 = mesh.AddEdge([n8,n9])
+e9 = mesh.AddEdge([n9,n10])
+axisr3 = SMESH.AxisStruct(-65,0,0,0,-1,0)
+mesh.RotationSweep([e8,e9],axisr3, math.pi/6, 12, tol)
+res = mesh.GetLastCreatedElems()
+faces2 = []
+for i in res:
+    nbn = mesh.GetElemNbNodes(i)
+    if nbn>2: faces2.append(i)
+    pass
+nbf2 = len(faces2)
+
+# there are coincident nodes after rotation
+# therefore we have to merge nodes
+nodes = mesh.FindCoincidentNodes(0.001)
+mesh.MergeNodes(nodes)
+
+nbcircs = 2
+nbrsteps = 24
+nbrs = nbcircs*nbrsteps
+dz = nbzsteps*zstep/nbrs
+
+# create first spiral
+oldnodes = []
+newnodes = GetNewNodes(mesh,faces1,oldnodes)
+oldnodes = newnodes
+
+nodes = []
+mesh.RotationSweep(faces1,axisr1, math.pi*2/nbrsteps, nbrs, tol)
+res = mesh.GetLastCreatedElems()
+
+for i in range(0,nbrs):
+    volumes = []
+    for j in range(0,nbf1): volumes.append(res[i+j*nbrs])
+    newnodes = GetNewNodes(mesh,volumes,oldnodes)
+    for j in newnodes:
+        xyz = mesh.GetNodeXYZ(j)
+        mesh.MoveNode(j,xyz[0],xyz[1],xyz[2]+dz*(i+1))
+        pass
+    oldnodes = newnodes
+    pass
+
+# create second spiral
+oldnodes = []
+newnodes = GetNewNodes(mesh,faces2,oldnodes)
+oldnodes = newnodes
+
+nodes = []
+mesh.RotationSweep(faces2,axisr1, math.pi*2/nbrsteps, nbrs, tol)
+res = mesh.GetLastCreatedElems()
+
+for i in range(0,nbrs):
+    volumes = []
+    for j in range(0,nbf2): volumes.append(res[i+j*nbrs])
+    newnodes = GetNewNodes(mesh,volumes,oldnodes)
+    for j in newnodes:
+        xyz = mesh.GetNodeXYZ(j)
+        mesh.MoveNode(j,xyz[0],xyz[1],xyz[2]+dz*(i+1))
+        pass
+    oldnodes = newnodes
+    pass
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_BelongToGeom.py b/test/SMESH_BelongToGeom.py
new file mode 100644 (file)
index 0000000..ea73068
--- /dev/null
@@ -0,0 +1,69 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+from SMESH_test1 import *
+
+## Old style
+def CheckBelongToGeomFilterOld(theMeshGen, theMesh, theShape, theSubShape, theElemType):
+    if theShape != theSubShape:
+        aName = str(theSubShape)
+        geompy.addToStudyInFather(theShape,theSubShape,aName)
+
+    if not theMeshGen.Compute(theMesh,theShape):
+        raise Exception("Error when computing Mesh")
+
+    aFilterMgr = theMeshGen.CreateFilterManager()
+    aFilter = aFilterMgr.CreateFilter()
+   
+    aBelongToGeom = aFilterMgr.CreateBelongToGeom()
+    aBelongToGeom.SetGeom(theSubShape)
+    aBelongToGeom.SetElementType(theElemType)
+    
+    aFilter.SetPredicate(aBelongToGeom)
+    aFilterMgr.UnRegister()
+    return aFilter.GetElementsId(theMesh)
+
+## Current style
+def CheckBelongToGeomFilter(theMesh, theShape, theSubShape, theElemType):
+    if theShape != theSubShape:
+        aName = str(theSubShape)
+        geompy.addToStudyInFather(theShape,theSubShape,aName)
+
+    if not theMesh.Compute():
+        raise Exception("Error when computing Mesh")
+
+    aFilter = smesh.GetFilter(theElemType, SMESH.FT_BelongToGeom, theSubShape)
+    return aFilter.GetElementsId(theMesh.GetMesh())
+    
+
+anElemType = SMESH.FACE;
+print("anElemType =", anElemType)
+#anIds = CheckBelongToGeomFilter(mesh,box,subShapeList[1],anElemType)
+anIds = CheckBelongToGeomFilter(mesh,box,box,anElemType)
+print("Number of ids = ", len(anIds))
+print("anIds = ", anIds)
+## Check old version
+#anIds = CheckBelongToGeomFilterOld(smesh,mesh.GetMesh(),box,box,anElemType)
+#print "anIds = ", anIds
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_BuildCompound.py b/test/SMESH_BuildCompound.py
new file mode 100644 (file)
index 0000000..3c36b78
--- /dev/null
@@ -0,0 +1,111 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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   : SMESH_BuildCompound.py
+#  Author : Alexander KOVALEV
+#  Module : SMESH
+#  $Header$
+# ! Please, if you edit this example file, update also
+# ! SMESH_SRC/doc/salome/gui/SMESH/input/tui_creating_meshes.doc
+# ! as some sequences of symbols from this example are used during
+# ! documentation generation to identify certain places of this file
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+## create a bottom box
+Box_inf = geompy.MakeBox(0., 0., 0., 200., 200., 50.)
+
+# get a top face
+Psup1=geompy.MakeVertex(100., 100., 50.)
+Fsup1=geompy.GetFaceNearPoint(Box_inf, Psup1)
+# get a bottom face
+Pinf1=geompy.MakeVertex(100., 100., 0.)
+Finf1=geompy.GetFaceNearPoint(Box_inf, Pinf1)
+
+## create a top box
+Box_sup = geompy.MakeBox(100., 100., 50., 200., 200., 100.)
+
+# get a top face
+Psup2=geompy.MakeVertex(150., 150., 100.)
+Fsup2=geompy.GetFaceNearPoint(Box_sup, Psup2)
+# get a bottom face
+Pinf2=geompy.MakeVertex(150., 150., 50.)
+Finf2=geompy.GetFaceNearPoint(Box_sup, Pinf2)
+
+## Publish in the study
+geompy.addToStudy(Box_inf, "Box_inf")
+geompy.addToStudyInFather(Box_inf, Fsup1, "Fsup")
+geompy.addToStudyInFather(Box_inf, Finf1, "Finf")
+
+geompy.addToStudy(Box_sup, "Box_sup")
+geompy.addToStudyInFather(Box_sup, Fsup2, "Fsup")
+geompy.addToStudyInFather(Box_sup, Finf2, "Finf")
+
+
+## create a bottom mesh
+Mesh_inf = smesh.Mesh(Box_inf, "Mesh_inf")
+algo1D_1=Mesh_inf.Segment()
+algo1D_1.NumberOfSegments(10)
+algo2D_1=Mesh_inf.Quadrangle()
+algo3D_1=Mesh_inf.Hexahedron()
+isDone = Mesh_inf.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# create a group on the top face
+Gsup1=Mesh_inf.Group(Fsup1, "Sup")
+# create a group on the bottom face
+Ginf1=Mesh_inf.Group(Finf1, "Inf")
+
+## create a top mesh
+Mesh_sup = smesh.Mesh(Box_sup, "Mesh_sup")
+algo1D_2=Mesh_sup.Segment()
+algo1D_2.NumberOfSegments(5)
+algo2D_2=Mesh_sup.Quadrangle()
+algo3D_2=Mesh_sup.Hexahedron()
+isDone = Mesh_sup.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# create a group on the top face
+Gsup2=Mesh_sup.Group(Fsup2, "Sup")
+# create a group on the bottom face
+Ginf2=Mesh_sup.Group(Finf2, "Inf")
+
+## create compounds
+# create a compound of two meshes with renaming groups with the same names and
+# merging of elements with the given tolerance
+Compound1 = smesh.Concatenate([Mesh_inf.GetMesh(), Mesh_sup.GetMesh()], 0, 1, 1e-05)
+smesh.SetName(Compound1, 'Compound_with_RenamedGrps_and_MergeElems')
+# create a compound of two meshes with uniting groups with the same names and
+# creating groups of all elements
+Compound2 = smesh.Concatenate([Mesh_inf.GetMesh(), Mesh_sup.GetMesh()], 1, 0, 1e-05, True)
+smesh.SetName(Compound2, 'Compound_with_UniteGrps_and_GrpsOfAllElems')
+#end
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_GroupFromGeom.py b/test/SMESH_GroupFromGeom.py
new file mode 100644 (file)
index 0000000..7d09aeb
--- /dev/null
@@ -0,0 +1,52 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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_GroupFromGeom.py
+#  Module : SMESH
+#
+from SMESH_test1 import *
+
+# Compute the mesh created in SMESH_test1
+
+isDone = mesh.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Create geometry groups on plane:
+aGeomGroup1 = geompy.CreateGroup(face , geompy.ShapeType["FACE"])
+geompy.AddObject(aGeomGroup1, 1)
+
+aGeomGroup2 = geompy.CreateGroup(face , geompy.ShapeType["EDGE"])
+
+geompy.AddObject(aGeomGroup2, 3)
+geompy.AddObject(aGeomGroup2, 6)
+geompy.AddObject(aGeomGroup2, 8)
+geompy.AddObject(aGeomGroup2, 10)
+
+geompy.addToStudy(aGeomGroup1, "Group on Faces")
+geompy.addToStudy(aGeomGroup2, "Group on Edges")
+
+aSmeshGroup1 = mesh.GroupOnGeom(aGeomGroup1, "SMESHGroup1", SMESH.FACE)
+aSmeshGroup2 = mesh.GroupOnGeom(aGeomGroup2, "SMESHGroup2", SMESH.EDGE)
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_GroupFromGeom2.py b/test/SMESH_GroupFromGeom2.py
new file mode 100644 (file)
index 0000000..61c5153
--- /dev/null
@@ -0,0 +1,82 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+#==============================================================================
+#  Info.
+#  Bug (from script, bug)   : SMESH_GroupFromGeom.py, PAL6945
+#  Modified                 : 25/11/2004
+#  Author                   : Kovaltchuk Alexey
+#  Project                  : PAL/SALOME
+#============================================================================== 
+#
+from SMESH_test1 import *
+
+
+# Compute the mesh created in SMESH_test1
+
+isDone = mesh.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Create geometry groups on plane:
+aGeomGroup1 = geompy.CreateGroup(face , geompy.ShapeType["FACE"])
+geompy.AddObject(aGeomGroup1, 1)
+
+aGeomGroup2 = geompy.CreateGroup(face , geompy.ShapeType["EDGE"])
+
+geompy.AddObject(aGeomGroup2, 3)
+geompy.AddObject(aGeomGroup2, 6)
+geompy.AddObject(aGeomGroup2, 8)
+geompy.AddObject(aGeomGroup2, 10)
+
+geompy.addToStudy(aGeomGroup1, "Group on Faces")
+geompy.addToStudy(aGeomGroup2, "Group on Edges")
+
+aSmeshGroup1 = mesh.GroupOnGeom(aGeomGroup1, "SMESHGroup1", SMESH.FACE)
+aSmeshGroup2 = mesh.GroupOnGeom(aGeomGroup2, "SMESHGroup2", SMESH.EDGE)
+
+print("Create aGroupOnShell - a group linked to a shell")
+aGroupOnShell = mesh.GroupOnGeom(shell, "GroupOnShell", SMESH.EDGE)
+print("aGroupOnShell type =", aGroupOnShell.GetType())
+print("aGroupOnShell size =", aGroupOnShell.Size())
+print("aGroupOnShell ids :", aGroupOnShell.GetListOfID())
+
+print(" ")
+
+print("Modify <LocalLength> hypothesis: 100 -> 50")
+hypLen1.SetLength(50)
+print("Contents of aGroupOnShell changes:")
+print("aGroupOnShell size =", aGroupOnShell.Size())
+print("aGroupOnShell ids :", aGroupOnShell.GetListOfID())
+
+print(" ")
+
+print("Re-compute mesh, contents of aGroupOnShell changes again:")
+isDone = mesh.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+print("aGroupOnShell size =", aGroupOnShell.Size())
+print("aGroupOnShell ids :", aGroupOnShell.GetListOfID())
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_GroupLyingOnGeom.py b/test/SMESH_GroupLyingOnGeom.py
new file mode 100644 (file)
index 0000000..af339aa
--- /dev/null
@@ -0,0 +1,52 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+def BuildGroupLyingOn(theMesh, theElemType, theName, theShape):
+    aFilterMgr = smesh.CreateFilterManager()
+    aFilter = aFilterMgr.CreateFilter()
+   
+    aLyingOnGeom = aFilterMgr.CreateLyingOnGeom()
+    aLyingOnGeom.SetGeom(theShape)
+    aLyingOnGeom.SetElementType(theElemType)
+    
+    aFilter.SetPredicate(aLyingOnGeom)
+    anIds = aFilter.GetElementsId(theMesh)
+    aFilterMgr.UnRegister()
+
+    aGroup = theMesh.CreateGroup(theElemType, theName)
+    aGroup.Add(anIds)
+
+#Example
+from SMESH_test1 import *
+
+isDone = mesh.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# First way
+BuildGroupLyingOn(mesh.GetMesh(), SMESH.FACE, "Group of faces lying on edge #1", edge )
+
+# Second way
+mesh.MakeGroup("Group of faces lying on edge #2", SMESH.FACE, SMESH.FT_LyingOnGeom, edge)
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_Nut.py b/test/SMESH_Nut.py
new file mode 100644 (file)
index 0000000..aacfcad
--- /dev/null
@@ -0,0 +1,163 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+#####################################################################
+#Created                :17/02/2005
+#Author                 :MASLOV Eugeny, KOVALTCHUK Alexey 
+#####################################################################
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+import os
+import math
+
+#Sketcher_1 creation
+print("Sketcher creation...")
+Sketcher_1 = geompy.MakeSketcher("Sketcher:F 100 -57.7:TT 100 57.7:TT 0 115.47:TT -100 57.7:TT -100 -57.7:TT 0 -115.47:WW") 
+geompy.addToStudy(Sketcher_1, "Sketcher_1")
+Face_1 = geompy.MakeFace(Sketcher_1, 1)
+geompy.addToStudy(Face_1, "Face_1")
+
+#Line creation
+print("Line  creation...")
+Line_1 = geompy.MakeLineTwoPnt(geompy.MakeVertex(0,0,0), geompy.MakeVertex(0,0,100))
+geompy.addToStudy(Line_1, "Line_1")
+
+#Prism creation
+print("Prism creation...")
+Prism_1 = geompy.MakePrismVecH(Face_1, Line_1, 100)
+geompy.addToStudy(Prism_1, "Prism_1")
+
+#Sketcher_2 creation
+print("Sketcher creation...")
+Sketcher_2 = geompy.MakeSketcher("Sketcher:F 50 0:TT 80 0:TT 112 13:TT 112 48:TT 80 63:TT 80 90:TT 50 90:WW", [0,0,0, 1,0,0, 0,1,0]) 
+geompy.addToStudy(Sketcher_2, "Sketcher_2")
+Face_2 = geompy.MakeFace(Sketcher_2, 1)
+geompy.addToStudy(Face_2, "Face_2")
+
+#Revolution creation
+print("Revolution creation...")
+Revolution_1 = geompy.MakeRevolution(Face_2, Line_1, 2*math.pi)
+geompy.addToStudy(Revolution_1, "Revolution_1")
+
+#Common applying
+print("Common of Revolution and Prism...")
+Common_1 = geompy.MakeBoolean(Revolution_1, Prism_1, 1)
+geompy.addToStudy(Common_1, "Common_1")
+
+#Explode Common_1 on edges
+CommonExplodedListEdges = geompy.SubShapeAll(Common_1, geompy.ShapeType["EDGE"])
+for i in range(0, len(CommonExplodedListEdges)):
+    name = "Edge_"+str(i+1)
+    geompy.addToStudyInFather(Common_1, CommonExplodedListEdges[i], name)
+
+#Fillet applying
+print("Fillet creation...")
+Fillet_1 = geompy.MakeFillet(Common_1, 10, geompy.ShapeType["EDGE"], [5])
+geompy.addToStudy(Fillet_1, "Fillet_1")
+
+#Chamfer applying
+print("Chamfer creation...")
+cyl_face = geompy.GetFaceNearPoint( Fillet_1, geompy.MakeVertex( 50, 0, 45 ), theName='cyl_face')
+cyl_face_id = geompy.GetSubShapeID( Fillet_1, cyl_face )
+top_face = geompy.GetFaceNearPoint( Fillet_1, geompy.MakeVertex( 60, 0, 90 ), theName='top_face')
+top_face_id = geompy.GetSubShapeID( Fillet_1, top_face )
+Chamfer_1 = geompy.MakeChamferEdge(Fillet_1, 10, 10, cyl_face_id, top_face_id, theName='Chamfer_1' )
+
+cyl_face = geompy.GetFaceNearPoint( Chamfer_1, geompy.MakeVertex( 80, 0, 85 ), theName='cyl_face')
+cyl_face_id = geompy.GetSubShapeID( Chamfer_1, cyl_face )
+top_face = geompy.GetFaceNearPoint( Chamfer_1, geompy.MakeVertex( 65, 0, 90 ), theName='top_face')
+top_face_id = geompy.GetSubShapeID( Chamfer_1, top_face )
+Chamfer_2 = geompy.MakeChamferEdge(Chamfer_1, 10, 10, cyl_face_id, top_face_id, theName='Chamfer_2' )
+
+#Import of the shape from "slots.brep"
+print("Import multi-rotation from the DATA_DIR/Shapes/Brep/slots.brep")
+thePath = os.getenv("DATA_DIR")
+theFileName = os.path.join( thePath,"Shapes","Brep","slots.brep")
+theShapeForCut = geompy.ImportBREP(theFileName)
+geompy.addToStudy(theShapeForCut, "slot.brep_1")
+
+#Cut applying
+print("Cut...")
+Cut_1 = geompy.MakeBoolean(Chamfer_2, theShapeForCut, 2)
+Cut_1_ID = geompy.addToStudy(Cut_1, "Cut_1")
+
+#Mesh creation
+
+# -- Init --
+shape_mesh = salome.IDToObject( Cut_1_ID )
+
+mesh = smesh.Mesh(shape_mesh, "Nut")
+
+#HYPOTHESIS CREATION
+print("-------------------------- Average length")
+theAverageLength = 5
+algoReg1D = mesh.Segment()
+hAvLength = algoReg1D.LocalLength(theAverageLength)
+print(hAvLength.GetName())
+print(hAvLength.GetId())
+print(hAvLength.GetLength())
+smesh.SetName(hAvLength, "AverageLength_"+str(theAverageLength))
+
+print("-------------------------- MaxElementArea")
+theMaxElementArea = 20
+algoTri = mesh.Triangle()
+hArea = algoTri.MaxElementArea( theMaxElementArea )
+print(hArea.GetName())
+print(hArea.GetId())
+print(hArea.GetMaxElementArea())
+smesh.SetName(hArea, "MaxElementArea_"+str(theMaxElementArea))
+
+print("-------------------------- MaxElementVolume")
+theMaxElementVolume = 150
+algoNg = mesh.Tetrahedron(smeshBuilder.NETGEN)
+hVolume = algoNg.MaxElementVolume( theMaxElementVolume )
+print(hVolume.GetName())
+print(hVolume.GetId())
+print(hVolume.GetMaxElementVolume())
+smesh.SetName(hVolume, "MaxElementVolume_"+str(theMaxElementVolume))
+
+
+print("-------------------------- compute the mesh of the mechanic piece")
+isDone = mesh.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+print("Information about the Nut:")
+print("Number of nodes       : ", mesh.NbNodes())
+print("Number of edges       : ", mesh.NbEdges())
+print("Number of faces       : ", mesh.NbFaces())
+print("Number of triangles   : ", mesh.NbTriangles())
+print("Number of quadrangles : ", mesh.NbQuadrangles())
+print("Number of volumes     : ", mesh.NbVolumes())
+print("Number of tetrahedrons: ", mesh.NbTetras())
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_Partition1_tetra.py b/test/SMESH_Partition1_tetra.py
new file mode 100644 (file)
index 0000000..b928d27
--- /dev/null
@@ -0,0 +1,186 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# Tetrahedrization of the geometry generated by the Python script GEOM_Partition1.py
+# Hypothesis and algorithms for the mesh generation are global
+# -- Rayon de la bariere
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+from math import sqrt
+
+
+#---------------------------------------------------------------
+
+barier_height = 7.0
+barier_radius = 5.6 / 2 # Rayon de la bariere
+colis_radius = 1.0 / 2  # Rayon du colis
+colis_step = 2.0        # Distance s�parant deux colis
+cc_width = 0.11         # Epaisseur du complement de colisage
+
+# --
+
+cc_radius = colis_radius + cc_width
+colis_center = sqrt(2.0)*colis_step/2
+
+# --
+
+boolean_common  = 1
+boolean_cut     = 2
+boolean_fuse    = 3
+boolean_section = 4
+
+# --
+
+p0 = geompy.MakeVertex(0.,0.,0.)
+vz = geompy.MakeVectorDXDYDZ(0.,0.,1.)
+
+# --
+
+barier = geompy.MakeCylinder(p0, vz, barier_radius, barier_height)
+
+# --
+
+colis = geompy.MakeCylinder(p0, vz, colis_radius, barier_height)
+cc    = geompy.MakeCylinder(p0, vz,    cc_radius, barier_height)
+
+colis_cc = geompy.MakeCompound([colis, cc])
+colis_cc = geompy.MakeTranslation(colis_cc, colis_center, 0.0, 0.0)
+
+colis_cc_multi = geompy.MultiRotate1D(colis_cc, vz, 4)
+
+# --
+
+Compound1 = geompy.MakeCompound([colis_cc_multi, barier])
+SubShape_theShape = geompy.SubShapeAll(Compound1,geompy.ShapeType["SOLID"])
+alveole = geompy.MakePartition(SubShape_theShape)
+
+print("Analysis of the geometry to mesh (right after the Partition) :")
+
+subShellList = geompy.SubShapeAll(alveole, geompy.ShapeType["SHELL"])
+subFaceList  = geompy.SubShapeAll(alveole, geompy.ShapeType["FACE"])
+subEdgeList  = geompy.SubShapeAll(alveole, geompy.ShapeType["EDGE"])
+
+print("number of Shells in alveole : ", len(subShellList))
+print("number of Faces  in alveole : ", len(subFaceList))
+print("number of Edges  in alveole : ", len(subEdgeList))
+
+subshapes = geompy.SubShapeAll(alveole, geompy.ShapeType["SHAPE"])
+
+## there are 9 sub-shapes
+
+comp1 = geompy.MakeCompound( [ subshapes[0], subshapes[1] ] )
+comp2 = geompy.MakeCompound( [ subshapes[2], subshapes[3] ] )
+comp3 = geompy.MakeCompound( [ subshapes[4], subshapes[5] ] )
+comp4 = geompy.MakeCompound( [ subshapes[6], subshapes[7] ] )
+
+compGOs = []
+compGOs.append( comp1 )
+compGOs.append( comp2 )
+compGOs.append( comp3 )
+compGOs.append( comp4 )
+comp = geompy.MakeCompound( compGOs )
+
+alveole = geompy.MakeCompound( [ comp, subshapes[8] ])
+
+idalveole = geompy.addToStudy(alveole, "alveole")
+
+print("Analysis of the geometry to mesh (right after the MakeCompound) :")
+
+subShellList = geompy.SubShapeAll(alveole, geompy.ShapeType["SHELL"])
+subFaceList  = geompy.SubShapeAll(alveole, geompy.ShapeType["FACE"])
+subEdgeList  = geompy.SubShapeAll(alveole, geompy.ShapeType["EDGE"])
+
+print("number of Shells in alveole : ", len(subShellList))
+print("number of Faces  in alveole : ", len(subFaceList))
+print("number of Edges  in alveole : ", len(subEdgeList))
+
+status = geompy.CheckShape(alveole)
+print(" check status ", status)
+
+
+# ---- init a Mesh with the alveole
+shape_mesh = salome.IDToObject( idalveole )
+
+mesh = smesh.Mesh(shape_mesh, "MeshAlveole")
+
+print("-------------------------- create Hypothesis (In this case global hypothesis are used)")
+
+print("-------------------------- NumberOfSegments")
+
+numberOfSegments = 10
+
+regular1D = mesh.Segment()
+hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetId())
+print(hypNbSeg.GetNumberOfSegments())
+smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
+
+print("-------------------------- MaxElementArea")
+
+maxElementArea = 0.1
+
+triangle = mesh.Triangle()
+hypArea = triangle.MaxElementArea(maxElementArea)
+print(hypArea.GetName())
+print(hypArea.GetId())
+print(hypArea.GetMaxElementArea())
+smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
+
+print("-------------------------- MaxElementVolume")
+
+maxElementVolume = 0.5
+
+netgen3D = mesh.Tetrahedron(smeshBuilder.NETGEN)
+hypVolume = netgen3D.MaxElementVolume(maxElementVolume)
+print(hypVolume.GetName())
+print(hypVolume.GetId())
+print(hypVolume.GetMaxElementVolume())
+smesh.SetName(hypVolume, "MaxElementVolume_" + str(maxElementVolume))
+
+print("-------------------------- compute the mesh of alveole ")
+ret = mesh.Compute()
+if not ret:
+    raise Exception("Error when computing Mesh")
+
+log = mesh.GetLog(0) # no erase trace
+# for linelog in log:
+#     print(linelog)
+print("Information about the Mesh_mechanic:")
+print("Number of nodes       : ", mesh.NbNodes())
+print("Number of edges       : ", mesh.NbEdges())
+print("Number of faces       : ", mesh.NbFaces())
+print("Number of triangles   : ", mesh.NbTriangles())
+print("Number of volumes     : ", mesh.NbVolumes())
+print("Number of tetrahedrons: ", mesh.NbTetras())
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_Sphere.py b/test/SMESH_Sphere.py
new file mode 100644 (file)
index 0000000..9fdc328
--- /dev/null
@@ -0,0 +1,123 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+#  GEOM GEOM_SWIG : binding of C++ implementation with Python
+#  File   : GEOM_Sphere.py
+#  Author : Damien COQUERET, Open CASCADE
+#  Module : GEOM
+#  $Header: 
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+import math
+
+# It is an example of creating a hexahedrical mesh on a sphere.
+#
+# Used approach allows to avoid problems with degenerated and
+# seam edges without special processing of geometrical shapes
+
+#-----------------------------------------------------------------------
+#Variables
+Radius  = 100.
+Dist    = Radius / 2.
+Factor  = 2.5
+Angle90 = math.pi / 2.
+NbSeg   = 10
+
+PointsList = []
+ShapesList = []
+
+#Basic Elements
+P0 = geompy.MakeVertex(0., 0., 0.)
+P1 = geompy.MakeVertex(-Dist, -Dist, -Dist)
+P2 = geompy.MakeVertex(-Dist, -Dist, Dist)
+P3 = geompy.MakeVertex(-Dist, Dist, Dist)
+P4 = geompy.MakeVertex(-Dist, Dist, -Dist)
+
+VZ = geompy.MakeVectorDXDYDZ(0., 0., 1.)
+
+#Construction Elements
+PointsList.append(P1)
+PointsList.append(P2)
+PointsList.append(P3)
+PointsList.append(P4)
+PointsList.append(P1)
+
+PolyLine = geompy.MakePolyline(PointsList)
+
+Face1 = geompy.MakeFace(PolyLine, 1)
+Face2 = geompy.MakeScaleTransform(Face1, P0, Factor)
+Face3 = geompy.MakeScaleTransform(Face1, P0, -1.)
+
+#Models
+Sphere = geompy.MakeSphereR(Radius)
+
+Block = geompy.MakeHexa2Faces(Face1, Face2)
+Cube  = geompy.MakeHexa2Faces(Face1, Face3)
+
+Common1 = geompy.MakeBoolean(Sphere, Block, 1)
+Common2 = geompy.MakeRotation(Common1, VZ, Angle90)
+
+MultiBlock1 = geompy.MakeMultiTransformation1D(Common1, 20, -1, 3)
+MultiBlock2 = geompy.MakeMultiTransformation1D(Common2, 30, -1, 3)
+
+#Reconstruct sphere from several blocks
+ShapesList.append(Cube)
+ShapesList.append(MultiBlock1)
+ShapesList.append(MultiBlock2)
+Compound = geompy.MakeCompound(ShapesList)
+
+Result = geompy.MakeGlueFaces(Compound, 0.1)
+
+#addToStudy
+Id_Sphere      = geompy.addToStudy(Sphere, "Sphere")
+Id_Cube        = geompy.addToStudy(Cube, "Cube")
+
+Id_Common1     = geompy.addToStudy(Common1, "Common1")
+Id_Common2     = geompy.addToStudy(Common2, "Common2")
+
+Id_MultiBlock1 = geompy.addToStudy(MultiBlock1, "MultiBlock1")
+Id_MultiBlock2 = geompy.addToStudy(MultiBlock2, "MultiBlock2")
+
+Id_Result      = geompy.addToStudy(Result, "Result")
+
+#-----------------------------------------------------------------------
+#Meshing
+my_hexa = smesh.Mesh(Result, "Sphere_Mesh")
+algo = my_hexa.Segment()
+algo.NumberOfSegments(NbSeg)
+my_hexa.Quadrangle()
+my_hexa.Hexahedron()
+isDone = my_hexa.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_blocks.py b/test/SMESH_blocks.py
new file mode 100644 (file)
index 0000000..94638a0
--- /dev/null
@@ -0,0 +1,49 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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 SMESH_SWIG : binding of C++ implementation with Python
+#  File   : SMESH_blocks.py
+#  Author : Julia DOROVSKIKH
+#  Module : SMESH
+#  $Header$
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+import math
+
+import GEOM_Spanner
+
+isBlocksTest = 0 # False
+isMeshTest   = 1 # True
+
+GEOM_Spanner.MakeSpanner(geompy, math, isBlocksTest, isMeshTest, smesh)
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_box.py b/test/SMESH_box.py
new file mode 100644 (file)
index 0000000..c4651b1
--- /dev/null
@@ -0,0 +1,75 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+#==============================================================================
+#  Info.
+#  Bug (from script, bug)   : box.py, PAL5223
+#  Modified                 : 25/11/2004
+#  Author                   : Kovaltchuk Alexey
+#  Project                  : PAL/SALOME
+#==============================================================================
+# Salome geometry and meshing for a box
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+from salome import sg
+
+# Plate
+
+box    = geompy.MakeBox(0.,0.,0.,1.,1.,1.)
+boxId  = geompy.addToStudy(box,"box")
+
+# ---- SMESH
+
+# ---- init a Mesh
+
+box_mesh=smesh.Mesh(box, "box_mesh")
+
+# set Hypothesis and Algorithm
+
+alg1D = box_mesh.Segment()
+alg1D.SetName("algo1D")
+hypL1 = alg1D.LocalLength(0.25)
+smesh.SetName(hypL1, "LocalLength")
+    
+alg2D = box_mesh.Quadrangle()
+alg2D.SetName("algo2D")
+
+alg3D = box_mesh.Hexahedron()
+alg3D.SetName("algo3D")
+
+# compute mesh
+
+isDone = box_mesh.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+sg.updateObjBrowser()
diff --git a/test/SMESH_box2_tetra.py b/test/SMESH_box2_tetra.py
new file mode 100644 (file)
index 0000000..5defa59
--- /dev/null
@@ -0,0 +1,141 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# Tetrahedrization of the geometry union of 2 boxes having a face in common
+# Hypothesis and algorithms for the mesh generation are global
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+
+# ---- define 2 boxes box1 and box2
+
+box1 = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
+
+idbox1 = geompy.addToStudy(box1, "box1")
+
+print("Analysis of the geometry box1 :")
+subShellList = geompy.SubShapeAll(box1, geompy.ShapeType["SHELL"])
+subFaceList  = geompy.SubShapeAll(box1, geompy.ShapeType["FACE"])
+subEdgeList  = geompy.SubShapeAll(box1, geompy.ShapeType["EDGE"])
+
+print("number of Shells in box1 : ", len(subShellList))
+print("number of Faces  in box1 : ", len(subFaceList))
+print("number of Edges  in box1 : ", len(subEdgeList))
+
+box2 = geompy.MakeBox(100., 0., 0., 200., 200., 300.)
+
+idbox2 = geompy.addToStudy(box2, "box2")
+
+print("Analysis of the geometry box2 :")
+subShellList = geompy.SubShapeAll(box2, geompy.ShapeType["SHELL"])
+subFaceList  = geompy.SubShapeAll(box2, geompy.ShapeType["FACE"])
+subEdgeList  = geompy.SubShapeAll(box2, geompy.ShapeType["EDGE"])
+
+print("number of Shells in box2 : ", len(subShellList))
+print("number of Faces  in box2 : ", len(subFaceList))
+print("number of Edges  in box2 : ", len(subEdgeList))
+
+# append the tow boxes to make ine shel, referrencing only once
+# the internal interface
+
+shell = geompy.MakePartition([box1, box2])
+idshell = geompy.addToStudy(shell, "shell")
+
+print("Analysis of the geometry shell (union of box1 and box2) :")
+subShellList = geompy.SubShapeAll(shell, geompy.ShapeType["SHELL"])
+subFaceList  = geompy.SubShapeAll(shell, geompy.ShapeType["FACE"])
+subEdgeList  = geompy.SubShapeAll(shell, geompy.ShapeType["EDGE"])
+
+print("number of Shells in shell : ", len(subShellList))
+print("number of Faces  in shell : ", len(subFaceList))
+print("number of Edges  in shell : ", len(subEdgeList))
+
+
+### ---------------------------- SMESH --------------------------------------
+
+# ---- init a Mesh with the shell
+
+mesh = smesh.Mesh(shell, "MeshBox2")
+
+
+# ---- set Hypothesis and Algorithm
+
+print("-------------------------- NumberOfSegments")
+
+numberOfSegments = 10
+
+regular1D = mesh.Segment()
+hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetId())
+print(hypNbSeg.GetNumberOfSegments())
+smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
+
+print("-------------------------- MaxElementArea")
+
+maxElementArea = 500
+
+triangle = mesh.Triangle()
+hypArea = triangle.MaxElementArea(maxElementArea)
+print(hypArea.GetName())
+print(hypArea.GetId())
+print(hypArea.GetMaxElementArea())
+smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
+
+print("-------------------------- MaxElementVolume")
+
+maxElementVolume = 500
+
+netgen3D = mesh.Tetrahedron(smeshBuilder.NETGEN)
+hypVolume = netgen3D.MaxElementVolume(maxElementVolume)
+print(hypVolume.GetName())
+print(hypVolume.GetId())
+print(hypVolume.GetMaxElementVolume())
+smesh.SetName(hypVolume, "MaxElementVolume_" + str(maxElementVolume))
+
+print("-------------------------- compute shell")
+ret = mesh.Compute()
+print(ret)
+if not ret:
+    raise Exception("Error when computing Mesh")
+
+log = mesh.GetLog(0) # no erase trace
+# for linelog in log:
+#     print(linelog)
+print("Information about the MeshBox2:")
+print("Number of nodes       : ", mesh.NbNodes())
+print("Number of edges       : ", mesh.NbEdges())
+print("Number of faces       : ", mesh.NbFaces())
+print("Number of triangles   : ", mesh.NbTriangles())
+print("Number of volumes     : ", mesh.NbVolumes())
+print("Number of tetrahedrons: ", mesh.NbTetras())
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_box3_tetra.py b/test/SMESH_box3_tetra.py
new file mode 100644 (file)
index 0000000..b03ce3c
--- /dev/null
@@ -0,0 +1,151 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# Tetrahedrization of the geometry union of 3 boxes aligned where the middle
+# one has a race in common with the two others.
+# Hypothesis and algorithms for the mesh generation are global
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# ---- define 3 boxes box1, box2 and box3
+
+box1 = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
+
+idbox1 = geompy.addToStudy(box1, "box1")
+
+print("Analysis of the geometry box1 :")
+subShellList = geompy.SubShapeAll(box1, geompy.ShapeType["SHELL"])
+subFaceList  = geompy.SubShapeAll(box1, geompy.ShapeType["FACE"])
+subEdgeList  = geompy.SubShapeAll(box1, geompy.ShapeType["EDGE"])
+
+print("number of Shells in box1 : ", len(subShellList))
+print("number of Faces  in box1 : ", len(subFaceList))
+print("number of Edges  in box1 : ", len(subEdgeList))
+
+box2 = geompy.MakeBox(100., 0., 0., 200., 200., 300.)
+
+idbox2 = geompy.addToStudy(box2, "box2")
+
+print("Analysis of the geometry box2 :")
+subShellList = geompy.SubShapeAll(box2, geompy.ShapeType["SHELL"])
+subFaceList  = geompy.SubShapeAll(box2, geompy.ShapeType["FACE"])
+subEdgeList  = geompy.SubShapeAll(box2, geompy.ShapeType["EDGE"])
+
+print("number of Shells in box2 : ", len(subShellList))
+print("number of Faces  in box2 : ", len(subFaceList))
+print("number of Edges  in box2 : ", len(subEdgeList))
+
+box3 = geompy.MakeBox(0., 0., 300., 200., 200., 500.)
+
+idbox3 = geompy.addToStudy(box3, "box3")
+
+print("Analysis of the geometry box3 :")
+subShellList = geompy.SubShapeAll(box3, geompy.ShapeType["SHELL"])
+subFaceList  = geompy.SubShapeAll(box3, geompy.ShapeType["FACE"])
+subEdgeList  = geompy.SubShapeAll(box3, geompy.ShapeType["EDGE"])
+
+print("number of Shells in box3 : ", len(subShellList))
+print("number of Faces  in box3 : ", len(subFaceList))
+print("number of Edges  in box3 : ", len(subEdgeList))
+
+shell = geompy.MakePartition([box1, box2, box3])
+idshell = geompy.addToStudy(shell,"shell")
+
+print("Analysis of the geometry shell (union of box1, box2 and box3) :")
+subShellList = geompy.SubShapeAll(shell, geompy.ShapeType["SHELL"])
+subFaceList  = geompy.SubShapeAll(shell, geompy.ShapeType["FACE"])
+subEdgeList  = geompy.SubShapeAll(shell, geompy.ShapeType["EDGE"])
+
+print("number of Shells in shell : ", len(subShellList))
+print("number of Faces  in shell : ", len(subFaceList))
+print("number of Edges  in shell : ", len(subEdgeList))
+
+
+### ---------------------------- SMESH --------------------------------------
+
+# ---- init a Mesh with the shell
+
+mesh = smesh.Mesh(shell, "MeshBox3")
+
+
+# ---- set Hypothesis and Algorithm
+
+print("-------------------------- NumberOfSegments")
+
+numberOfSegments = 10
+
+regular1D = mesh.Segment()
+hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetId())
+print(hypNbSeg.GetNumberOfSegments())
+smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
+
+print("-------------------------- MaxElementArea")
+
+maxElementArea = 500
+
+triangle = mesh.Triangle()
+hypArea = triangle.MaxElementArea(maxElementArea)
+print(hypArea.GetName())
+print(hypArea.GetId())
+print(hypArea.GetMaxElementArea())
+smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
+
+print("-------------------------- MaxElementVolume")
+
+maxElementVolume = 500
+
+netgen3D = mesh.Tetrahedron(smeshBuilder.NETGEN)
+hypVolume = netgen3D.MaxElementVolume(maxElementVolume)
+print(hypVolume.GetName())
+print(hypVolume.GetId())
+print(hypVolume.GetMaxElementVolume())
+smesh.SetName(hypVolume, "MaxElementVolume_" + str(maxElementVolume))
+
+print("-------------------------- compute shell")
+ret = mesh.Compute()
+print(ret)
+if not ret:
+    raise Exception("Error when computing Mesh")
+
+log = mesh.GetLog(0) # no erase trace
+# for linelog in log:
+#     print(linelog)
+print("Information about the MeshBox3:")
+print("Number of nodes       : ", mesh.NbNodes())
+print("Number of edges       : ", mesh.NbEdges())
+print("Number of faces       : ", mesh.NbFaces())
+print("Number of triangles   : ", mesh.NbTriangles())
+print("Number of volumes     : ", mesh.NbVolumes())
+print("Number of tetrahedrons: ", mesh.NbTetras())
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_box_tetra.py b/test/SMESH_box_tetra.py
new file mode 100644 (file)
index 0000000..f8289cd
--- /dev/null
@@ -0,0 +1,110 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# Tetrahedrization of a simple box. Hypothesis and algorithms for
+# the mesh generation are global
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# ---- define a box
+
+box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
+
+idbox = geompy.addToStudy(box, "box")
+
+print("Analysis of the geometry box :")
+subShellList = geompy.SubShapeAll(box, geompy.ShapeType["SHELL"])
+subFaceList  = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
+subEdgeList  = geompy.SubShapeAll(box, geompy.ShapeType["EDGE"])
+
+print("number of Shells in box : ", len(subShellList))
+print("number of Faces  in box : ", len(subFaceList))
+print("number of Edges  in box : ", len(subEdgeList))
+
+
+### ---------------------------- SMESH --------------------------------------
+
+# ---- init a Mesh with the box
+
+mesh = smesh.Mesh(box, "MeshBox")
+
+# ---- set Hypothesis and Algorithm
+
+print("-------------------------- NumberOfSegments")
+numberOfSegments = 10
+
+regular1D = mesh.Segment()
+hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetId())
+print(hypNbSeg.GetNumberOfSegments())
+smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
+
+print("-------------------------- MaxElementArea")
+
+maxElementArea = 500
+
+triangle = mesh.Triangle()
+hypArea = triangle.MaxElementArea(maxElementArea)
+print(hypArea.GetName())
+print(hypArea.GetId())
+print(hypArea.GetMaxElementArea())
+smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
+
+print("-------------------------- MaxElementVolume")
+
+maxElementVolume = 500
+
+netgen3D = mesh.Tetrahedron(smeshBuilder.NETGEN)
+hypVolume = netgen3D.MaxElementVolume(maxElementVolume)
+print(hypVolume.GetName())
+print(hypVolume.GetId())
+print(hypVolume.GetMaxElementVolume())
+smesh.SetName(hypVolume, "MaxElementVolume_" + str(maxElementVolume))
+
+print("-------------------------- compute the mesh of the box")
+ret = mesh.Compute()
+print(ret)
+if not ret:
+    raise Exception("Error when computing Mesh")
+
+log = mesh.GetLog(0) # no erase trace
+# for linelog in log:
+#     print(linelog)
+print("Information about the MeshBox:")
+print("Number of nodes       : ", mesh.NbNodes())
+print("Number of edges       : ", mesh.NbEdges())
+print("Number of faces       : ", mesh.NbFaces())
+print("Number of triangles   : ", mesh.NbTriangles())
+print("Number of volumes     : ", mesh.NbVolumes())
+print("Number of tetrahedrons: ", mesh.NbTetras())
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_controls.py b/test/SMESH_controls.py
new file mode 100644 (file)
index 0000000..a9a4f2b
--- /dev/null
@@ -0,0 +1,144 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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_control.py
+#  Author : Sergey LITONIN
+#  Module : SMESH
+#
+import salome
+import SMESH_mechanic
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+mesh = SMESH_mechanic.mesh
+
+# ---- Criterion : AREA > 100
+
+# create group
+aGroup = mesh.MakeGroup("Area > 100", SMESH.FACE, SMESH.FT_Area, SMESH.FT_MoreThan, 100)
+
+# print result
+anIds = aGroup.GetIDs()
+print("Criterion: Area > 100 Nb = ", len( anIds ))
+#for i in range( len( anIds ) ):
+  #print anIds[ i ]
+
+
+# ----  Criterion : Taper > 3e-15
+
+# create group
+aGroup = mesh.MakeGroup("Taper > 3e-15", SMESH.FACE, SMESH.FT_Taper, SMESH.FT_MoreThan, 3e-15)
+
+# print result
+anIds = aGroup.GetIDs()
+print("Criterion: Taper > 3e-15 Nb = ", len( anIds ))
+#for i in range( len( anIds ) ):
+  #print anIds[ i ]
+
+
+# ----  Criterion : ASPECT RATIO > 1.3
+
+# create group
+aGroup = mesh.MakeGroup("Aspect Ratio > 1.3", SMESH.FACE, SMESH.FT_AspectRatio, SMESH.FT_MoreThan, 1.3)
+
+# print result
+anIds = aGroup.GetIDs()
+print("Criterion: Aspect Ratio > 1.3 Nb = ", len( anIds ))
+#for i in range( len( anIds ) ):
+  #print anIds[ i ]
+
+
+# ----  Criterion : MINIMUM ANGLE < 30
+
+# create group
+aGroup = mesh.MakeGroup("Minimum Angle < 30", SMESH.FACE, SMESH.FT_MinimumAngle, SMESH.FT_LessThan, 30)
+
+# print result
+anIds = aGroup.GetIDs()
+print("Criterion: Minimum Angle < 30 Nb = ", len( anIds ))
+#for i in range( len( anIds ) ):
+  #print anIds[ i ]
+
+
+# ---- Criterion : Warp > 2e-13
+
+# create group
+aGroup = mesh.MakeGroup("Warp > 2e-13", SMESH.FACE, SMESH.FT_Warping, SMESH.FT_MoreThan, 2e-13 )
+
+# print result
+anIds = aGroup.GetIDs()
+print("Criterion: Warp > 2e-13 Nb = ", len( anIds ))
+#for i in range( len( anIds ) ):
+  #print anIds[ i ]
+
+
+# ---- Criterion : Skew > 18
+
+# create group
+aGroup = mesh.MakeGroup("Skew > 18", SMESH.FACE, SMESH.FT_Skew, SMESH.FT_MoreThan, 18 )
+
+# print result
+anIds = aGroup.GetIDs()
+print("Criterion: Skew > 18 Nb = ", len( anIds ))
+#for i in range( len( anIds ) ):
+  #print anIds[ i ]
+
+
+# Criterion : Length > 10
+
+# create group
+aGroup = mesh.MakeGroup("Length > 10", SMESH.FACE, SMESH.FT_Length, SMESH.FT_MoreThan, 10 )
+
+# print result
+anIds = aGroup.GetIDs()
+print("Criterion: Length > 10 Nb = ", len( anIds ))
+#for i in range( len( anIds ) ):
+  #print anIds[ i ]
+
+
+# Criterion : Borders at multi-connections = 2
+
+# create group
+aGroup = mesh.MakeGroup("Borders at multi-connections = 2", SMESH.EDGE, SMESH.FT_MultiConnection, SMESH.FT_EqualTo, 2)
+
+# print result
+anIds = aGroup.GetIDs()
+print("Criterion: Borders at multi-connections = 2 Nb = ", len( anIds ))
+#for i in range( len( anIds ) ):
+  #print anIds[ i ]
+
+
+# Criterion : Element Diameter 2D > 10
+
+# create group
+aGroup = mesh.MakeGroup("Element Diameter 2D > 10", SMESH.FACE, SMESH.FT_MaxElementLength2D, SMESH.FT_MoreThan, 10 )
+
+# print result
+anIds = aGroup.GetIDs()
+print("Criterion: Element Diameter 2D > 10 Nb = ", len( anIds ))
+#for i in range( len( anIds ) ):
+  #print anIds[ i ]
+
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_controls_3D_warping.py b/test/SMESH_controls_3D_warping.py
new file mode 100644 (file)
index 0000000..ce792d4
--- /dev/null
@@ -0,0 +1,177 @@
+#!/usr/bin/env python
+
+import os
+import sys
+import salome
+import tempfile
+
+salome.salome_init()
+
+
+def getTmpFileName(ext):
+  """
+  get a tmp file name
+  """
+  tempdir = tempfile.gettempdir()
+  tmp_file = tempfile.NamedTemporaryFile(suffix=".%s"%ext , dir=tempdir, delete=False)
+  tmp_filename = tmp_file.name
+  return tmp_filename
+
+###
+### SHAPER component
+###
+
+from salome.shaper import model
+
+model.begin()
+partSet = model.moduleDocument()
+Part_1 = model.addPart(partSet)
+Part_1_doc = Part_1.document()
+Cylinder_1 = model.addCylinder(Part_1_doc, model.selection("VERTEX", "PartSet/Origin"), model.selection("EDGE", "PartSet/OZ"), 1, 7)
+Point_2 = model.addPoint(Part_1_doc, 1, 0, 1.5)
+Point_3 = model.addPoint(Part_1_doc, 0.5, 0, 3.5)
+Sphere_1 = model.addSphere(Part_1_doc, model.selection("VERTEX", "Point_1"), 0.75)
+Cylinder_2 = model.addCylinder(Part_1_doc, model.selection("VERTEX", "Point_2"), model.selection("EDGE", "PartSet/OX"), 0.6, 3)
+Fuse_1_objects_1 = [model.selection("SOLID", "Cylinder_2_1"),
+                    model.selection("SOLID", "Cylinder_1_1"),
+                    model.selection("SOLID", "Sphere_1_1")]
+Fuse_1 = model.addFuse(Part_1_doc, Fuse_1_objects_1, keepSubResults = True)
+model.end()
+
+expected_volume = 25.881416712512
+model.testResultsVolumes(Fuse_1, [expected_volume])
+
+###
+### SHAPERSTUDY component
+###
+
+model.publishToShaperStudy()
+import SHAPERSTUDY
+Fuse_1_1, = SHAPERSTUDY.shape(model.featureStringId(Fuse_1))
+
+###
+### SMESH component
+###
+
+import  SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+
+smesh = smeshBuilder.New()
+# Surface Mesh
+# ============
+
+Mesh_1 = smesh.Mesh(Fuse_1_1, "Mesh_1")
+NETGEN_1D_2D = Mesh_1.Triangle(algo=smeshBuilder.NETGEN_1D2D)
+NETGEN_2D_Parameters_1 = NETGEN_1D_2D.Parameters()
+NETGEN_2D_Parameters_1.SetMaxSize( 0.75 )
+NETGEN_2D_Parameters_1.SetMinSize( 0 )
+NETGEN_2D_Parameters_1.SetSecondOrder( 0 )
+NETGEN_2D_Parameters_1.SetOptimize( 1 )
+NETGEN_2D_Parameters_1.SetFineness( 5 )
+NETGEN_2D_Parameters_1.SetGrowthRate( 0.1 )
+NETGEN_2D_Parameters_1.SetNbSegPerEdge( 2 )
+NETGEN_2D_Parameters_1.SetNbSegPerRadius( 4 )
+
+isDone = Mesh_1.Compute()
+
+if not isDone:
+  raise Exception("Error when computing the surface mesh")
+
+# MG-Hexa mesh
+# ============
+
+MG_Hexa = Mesh_1.Hexahedron(algo=smeshBuilder.MG_Hexa)
+isDone = Mesh_1.Compute()
+
+if not isDone:
+  raise Exception("Error when computing volumes with MG-Hexa")
+
+volume = smesh.GetVolume(Mesh_1)
+#print("volume: ", volume)
+assert abs(volume-expected_volume)/expected_volume < 0.03
+
+assert Mesh_1.NbTriangles() == 0
+
+nb_hexa = Mesh_1.NbHexas()
+assert Mesh_1.NbVolumes() == nb_hexa
+
+# MG-Hexa mesh with layers
+# ========================
+
+MG_Hexa_Parameters = MG_Hexa.Parameters()
+MG_Hexa_Parameters.SetNbLayers( 3 )
+MG_Hexa_Parameters.SetFirstLayerSize( 0.01 )
+MG_Hexa_Parameters.SetGrowth( 1.1 )
+MG_Hexa_Parameters.SetFacesWithLayers( [ 10, 3 ] )
+MG_Hexa_Parameters.SetImprintedFaces( [ 18, 20, 22 ] )
+
+isDone = Mesh_1.Compute()
+
+if not isDone:
+  raise Exception("Error when computing volumes with MG-Hexa and layers")
+
+nb_hexa_with_layers = Mesh_1.NbHexas()
+assert Mesh_1.NbVolumes() == nb_hexa_with_layers
+assert nb_hexa < nb_hexa_with_layers
+
+volume_with_layers = smesh.GetVolume(Mesh_1)
+#print("volume_with_layers: ", volume_with_layers)
+assert abs(volume_with_layers-expected_volume)/expected_volume < 0.05
+
+gr_small_volume = Mesh_1.MakeGroup("small_volumes_layers",
+                            SMESH.VOLUME,
+                            CritType=SMESH.FT_Volume3D,
+                            Compare=SMESH.FT_LessThan,
+                            Threshold=8e-5,
+                            Tolerance=1e-07)
+
+layers_volume = smesh.GetVolume(gr_small_volume)
+#print("layers_volume: ", layers_volume)
+assert layers_volume < 0.9
+
+# check max Warp3D
+max_warp3D = Mesh_1.GetMinMax(SMESH.FT_Warping3D)[1]
+print("max_warp3D: ", max_warp3D)
+# Check that some elements are warped
+assert max_warp3D > 1
+
+gr_warp3D = Mesh_1.MakeGroup("warp3D",
+                            SMESH.VOLUME,
+                            CritType=SMESH.FT_Warping3D,
+                            Compare=SMESH.FT_MoreThan,
+                            Threshold=1,
+                            Tolerance=1e-07)
+
+# Check the group has some elements
+assert gr_warp3D.Size() > 0
+
+# create a mesh with the faces of the hexaedra thanks to medcoupling
+umesh_3D = Mesh_1.ExportMEDCoupling()[0]
+# create faces
+umesh_2D,d0,d1,d2,d3=umesh_3D.buildDescendingConnectivity()
+
+# export the 2D mesh in a tmp file
+tmp_filename = getTmpFileName("med")
+umesh_2D.write(tmp_filename)
+
+# import it in SMESH
+([Mesh_faces], status) = smesh.CreateMeshesFromMED( tmp_filename )
+
+gr_warp2D = Mesh_faces.MakeGroup("warp2D",
+                            SMESH.FACE,
+                            CritType=SMESH.FT_Warping,
+                            Compare=SMESH.FT_MoreThan,
+                            Threshold=1,
+                            Tolerance=1e-07)
+
+# check max Warp3D
+max_warp2D = Mesh_faces.GetMinMax(SMESH.FT_Warping)[1]
+print("max_warp2D: ", max_warp2D)
+assert max_warp2D > 1
+
+assert abs(max_warp2D-max_warp3D)/max_warp2D < 1e-5
+
+os.remove(tmp_filename)
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser()
diff --git a/test/SMESH_controls_scaled_jacobian.py b/test/SMESH_controls_scaled_jacobian.py
new file mode 100644 (file)
index 0000000..d81cd38
--- /dev/null
@@ -0,0 +1,182 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2016-2024  CEA/DEN, EDF R&D
+#
+# 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_controls_scaled_jacobian.py
+#  Author : Cesar Conopoima
+#  Module : SMESH
+#
+import salome
+import math
+salome.salome_init_without_session()
+
+import GEOM
+import  SMESH
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+def assertWithDelta( refval, testvals, delta ):
+  return ( refval <= testvals+delta and refval >= testvals-delta ) 
+
+geompy = geomBuilder.New()
+smesh_builder = smeshBuilder.New()
+
+Box_1 = geompy.MakeBoxDXDYDZ(10, 10, 10)
+geompy.addToStudy( Box_1, 'Box_1' )
+
+smesh = smeshBuilder.New()
+
+Mesh_1 = smesh.Mesh(Box_1,'Mesh_1')
+NETGEN_1D_2D_3D = Mesh_1.Tetrahedron(algo=smeshBuilder.NETGEN_1D2D3D)
+Done = Mesh_1.Compute()
+
+if not Done:
+  raise Exception("Error when computing NETGEN_1D2D3D Mesh for quality control test")
+
+#For tetra elements
+perfect   = 1.0
+externals = math.sqrt( 2.0 )/2.0
+notPerfectElements  = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_ScaledJacobian, SMESH.FT_LessThan, perfect - 1e-12 )
+perfectElements     = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_ScaledJacobian, SMESH.FT_EqualTo, perfect )
+externalElements    = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_ScaledJacobian, SMESH.FT_EqualTo, externals )
+
+notPerfectIds = Mesh_1.GetIdsFromFilter(notPerfectElements)
+perfectIds    = Mesh_1.GetIdsFromFilter(perfectElements)
+externalsIds  = Mesh_1.GetIdsFromFilter(externalElements)
+
+assert( len(notPerfectIds)  == 4 )
+assert( len(perfectIds)     == 1 )
+assert( len(externalsIds)   == 4 )
+
+# Test GetScaledJacobian by elementId
+for id in range(len(perfectIds)):
+  assert( assertWithDelta( perfect, Mesh_1.GetScaledJacobian( perfectIds[ id ] ), 1e-12) )
+
+for id in range(len(externalsIds)):
+  assert( assertWithDelta( externals, Mesh_1.GetScaledJacobian( externalsIds[ id ] ), 1e-12) )
+
+#For hexa elements
+Mesh_2 = smesh.Mesh(Box_1,'Mesh_2')
+Cartesian_3D = Mesh_2.BodyFitted()
+Body_Fitting_Parameters_1 = Cartesian_3D.SetGrid([ [ '5.0' ], [ 0, 1 ]],[ [ '5.0' ], [ 0, 1 ]],[ [ '5.0' ], [ 0, 1 ]],4,0)
+Done = Mesh_2.Compute()
+
+if not Done:
+  raise Exception("Error when computing BodyFitted Mesh for quality control test")
+
+notPerfectIds = Mesh_2.GetIdsFromFilter(notPerfectElements)
+perfectIds    = Mesh_2.GetIdsFromFilter(perfectElements)
+
+assert( len(notPerfectIds)  == 0 )
+assert( len(perfectIds)     == 8 )
+
+# Test GetScaledJacobian by elementId
+for id in range(len(perfectIds)):
+  assert( assertWithDelta( perfect, Mesh_2.GetScaledJacobian( perfectIds[ id ] ), 1e-12) )
+
+#For hexa elements with poor quality
+Mesh_3 = smesh.Mesh(Box_1,'Mesh_3')
+Cartesian_3D = Mesh_3.BodyFitted()
+Body_Fitting_Parameters_1 = Cartesian_3D.SetGrid([ [ '5.0' ], [ 0, 1 ]],[ [ '5.0' ], [ 0, 1 ]],[ [ '5.0' ], [ 0, 1 ]],4,0)
+Body_Fitting_Parameters_1.SetAxesDirs( SMESH.DirStruct( SMESH.PointStruct ( 1, 0, 1 )), SMESH.DirStruct( SMESH.PointStruct ( 0, 1, 0 )), SMESH.DirStruct( SMESH.PointStruct ( 0, 0, 1 )) )
+Done = Mesh_3.Compute()
+
+if not Done:
+  raise Exception("Error when computing BodyFitted Distorted Mesh for quality control test")
+
+#Polyhedrons return zero scaled jacobian because of lack for a decomposition into simpler forms
+Polys   = 0.0
+#Hexahedrons that are distorted by an angle of 45 
+# Scaled Jacobian which is a measure of elements distortion 
+# will return cos(45) = math.sqrt( 2.0 )/2.0 
+distorted = math.sqrt( 2.0 )/2.0 
+polysElements     = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_ScaledJacobian, SMESH.FT_EqualTo, Polys )
+distortedElements = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_ScaledJacobian, SMESH.FT_EqualTo, distorted )
+
+polysIds        = Mesh_3.GetIdsFromFilter(polysElements)
+distortedIds    = Mesh_3.GetIdsFromFilter(distortedElements)
+
+assert( len(polysIds)     == 4 )
+assert( len(distortedIds) == 8 )
+
+# Test GetScaledJacobian by elementId
+for id in range(len(distortedIds)):
+  assert( assertWithDelta( distorted, Mesh_3.GetScaledJacobian( distortedIds[ id ] ), 1e-12 ) )
+
+#Test the pentahedron
+Mesh_4 = smesh.Mesh(Box_1,'Mesh_4')
+Cartesian_3D = Mesh_4.BodyFitted()
+Body_Fitting_Parameters_1 = Cartesian_3D.SetGrid([ [ '4' ], [ 0, 1 ]],[ [ '4' ], [ 0, 1 ]],[ [ '4' ], [ 0, 1 ]],4,0)
+Body_Fitting_Parameters_1.SetAxesDirs( SMESH.DirStruct( SMESH.PointStruct ( 1, 0, 1 )), SMESH.DirStruct( SMESH.PointStruct ( 0, 1, 0 )), SMESH.DirStruct( SMESH.PointStruct ( 0, 0, 1 )) )
+Body_Fitting_Parameters_1.SetSizeThreshold( 4 )
+Body_Fitting_Parameters_1.SetToAddEdges( 0 )
+Body_Fitting_Parameters_1.SetGridSpacing( [ '2' ], [ 0, 1 ], 0 )
+Body_Fitting_Parameters_1.SetGridSpacing( [ '2' ], [ 0, 1 ], 1 )
+Body_Fitting_Parameters_1.SetGridSpacing( [ '2' ], [ 0, 1 ], 2 )
+Done = Mesh_4.Compute()
+
+if not Done:
+  raise Exception("Error when computing BodyFitted Distorted Mesh for quality control test")
+
+pentahedrons = 0.6
+pentasAndPolys     = smesh.GetFilter(SMESH.VOLUME, SMESH.FT_ScaledJacobian, SMESH.FT_LessThan, pentahedrons )
+
+polysIds          = Mesh_4.GetIdsFromFilter(polysElements)
+pentasAndPolysIds = Mesh_4.GetIdsFromFilter(pentasAndPolys)
+
+assert( len(pentasAndPolysIds) - len(polysIds) == 10 )
+
+#Test distorded hexahedrons scaled jacobian values
+Mesh_5 = smesh.Mesh(Box_1,'Mesh_5')
+Regular_1D = Mesh_5.Segment()
+Number_of_Segments_1 = Regular_1D.NumberOfSegments(2)
+Quadrangle_2D = Mesh_5.Quadrangle(algo=smeshBuilder.QUADRANGLE)
+Hexa_3D = Mesh_5.Hexahedron(algo=smeshBuilder.Hexa)
+isDone = Mesh_5.Compute()
+
+if not Done:
+  raise Exception("Error when computing hexaedrons Mesh for quality control test")
+
+#move some nodes to make scaled jacobian lesser than 1
+node_id_1 = Mesh_5.FindNodeClosestTo(0, 0, 10)
+node_id_5 = Mesh_5.FindNodeClosestTo(10, 0, 10)
+node_id_14 = Mesh_5.FindNodeClosestTo(10, 5, 10)
+node_id_13 = Mesh_5.FindNodeClosestTo(10, 0, 5)
+node_id_6 = Mesh_5.FindNodeClosestTo(10, 0, 0)
+Mesh_5.MoveNode( node_id_1, 1, 1, 9 )
+Mesh_5.MoveNode( node_id_5, 9, 1, 9 )
+Mesh_5.MoveNode( node_id_14, 10, 5, 9 )
+Mesh_5.MoveNode( node_id_13, 9, 0, 5 )
+Mesh_5.MoveNode( node_id_6, 8, 0, 0 )
+
+yellow_element = Mesh_5.FindElementsByPoint(7.5, 2.5, 2.5)[0]
+green_element = Mesh_5.FindElementsByPoint(7.5, 2.5, 7.5)[0]
+blue_element = Mesh_5.FindElementsByPoint(2.5, 2.5, 7.5)[0]
+
+yellow_SJ = Mesh_5.GetScaledJacobian(yellow_element)
+green_SJ = Mesh_5.GetScaledJacobian(green_element)
+blue_SJ = Mesh_5.GetScaledJacobian(blue_element)
+
+yellow_SJ_ref = 0.910446300912
+green_SJ_ref = 0.818025491961
+blue_SJ_ref = 0.654728501099
+
+assert assertWithDelta( yellow_SJ_ref, yellow_SJ, 1e-10 )
+assert assertWithDelta( green_SJ_ref, green_SJ, 1e-10 )
+assert assertWithDelta( blue_SJ_ref, blue_SJ, 1e-10 )
diff --git a/test/SMESH_create_dual_mesh_adapt.py b/test/SMESH_create_dual_mesh_adapt.py
new file mode 100644 (file)
index 0000000..9b82dec
--- /dev/null
@@ -0,0 +1,99 @@
+#!/usr/bin/env python
+
+###
+### This file is generated automatically by SALOME v9.9.0 with dump python functionality
+###
+
+import sys
+import salome
+
+salome.salome_init()
+import salome_notebook
+notebook = salome_notebook.NoteBook()
+sys.path.insert(0, r'/home/B61570/work_in_progress/dual_mesh')
+
+###
+### GEOM component
+###
+
+import GEOM
+from salome.geom import geomBuilder
+import math
+import SALOMEDS
+
+
+geompy = geomBuilder.New()
+
+O = geompy.MakeVertex(0, 0, 0)
+OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
+OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
+OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
+Cylinder_1 = geompy.MakeCylinderRH(100, 400)
+Sphere_1 = geompy.MakeSpherePntR(O, 100)
+Fuse_1 = geompy.MakeFuseList([Cylinder_1, Sphere_1], True, True)
+
+[geomObj_1,geomObj_2,geomObj_3] = geompy.ExtractShapes(Fuse_1, geompy.ShapeType["FACE"], True)
+
+top = geompy.CreateGroup(Fuse_1, geompy.ShapeType["FACE"])
+geompy.UnionIDs(top, geomObj_1.GetSubShapeIndices())
+
+middle = geompy.CreateGroup(Fuse_1, geompy.ShapeType["FACE"])
+geompy.UnionIDs(middle, geomObj_2.GetSubShapeIndices())
+
+bottom = geompy.CreateGroup(Fuse_1, geompy.ShapeType["FACE"])
+geompy.UnionIDs(bottom, geomObj_3.GetSubShapeIndices())
+
+#[top, middle, bottom] = geompy.GetExistingSubObjects(Fuse_1, False)
+
+geompy.addToStudy( O, 'O' )
+geompy.addToStudy( OX, 'OX' )
+geompy.addToStudy( OY, 'OY' )
+geompy.addToStudy( OZ, 'OZ' )
+geompy.addToStudy( Cylinder_1, 'Cylinder_1' )
+geompy.addToStudy( Sphere_1, 'Sphere_1' )
+geompy.addToStudy( Fuse_1, 'Fuse_1' )
+geompy.addToStudyInFather( Fuse_1, top, 'top' )
+geompy.addToStudyInFather( Fuse_1, middle, 'middle' )
+geompy.addToStudyInFather( Fuse_1, bottom, 'bottom' )
+
+###
+### SMESH component
+###
+
+import  SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+
+smesh = smeshBuilder.New()
+
+NETGEN_3D_Parameters_1 = smesh.CreateHypothesisByAverageLength( 'NETGEN_Parameters', 'NETGENEngine', 50, 0 )
+Mesh_1 = smesh.Mesh(Fuse_1,'Mesh_1')
+status = Mesh_1.AddHypothesis( Fuse_1, NETGEN_3D_Parameters_1 )
+NETGEN_1D_2D_3D = Mesh_1.Tetrahedron(algo=smeshBuilder.NETGEN_1D2D3D)
+top_1 = Mesh_1.GroupOnGeom(top,'top',SMESH.FACE)
+middle_1 = Mesh_1.GroupOnGeom(middle,'middle',SMESH.FACE)
+bottom_1 = Mesh_1.GroupOnGeom(bottom,'bottom',SMESH.FACE)
+isDone = Mesh_1.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+[ top_1, middle_1, bottom_1 ] = Mesh_1.GetGroups()
+
+
+dual_Mesh_raw_1 = smesh.CreateDualMesh(Mesh_1, 'dual_Mesh_raw_1', False)
+dual_Mesh_1 = smesh.CreateDualMesh(Mesh_1, 'dual_Mesh_1', True)
+
+[ top_2, middle_2, bottom_2 ] = dual_Mesh_1.GetGroups()
+
+#Comparing volumes
+dual_volume = dual_Mesh_1.GetVolume()
+dual_raw_volume = dual_Mesh_raw_1.GetVolume()
+tetra_volume = Mesh_1.GetVolume()
+print("tetra_volume: ", tetra_volume)
+print("dual_volume: ", dual_volume)
+print("dual_raw_volume: ", dual_raw_volume)
+
+assert (dual_volume >= dual_raw_volume)
+assert abs( tetra_volume - dual_raw_volume )/tetra_volume < 1e-12
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser()
diff --git a/test/SMESH_create_dual_mesh_tpipe.py b/test/SMESH_create_dual_mesh_tpipe.py
new file mode 100644 (file)
index 0000000..c1aa3c5
--- /dev/null
@@ -0,0 +1,160 @@
+#!/usr/bin/env python3
+
+import sys
+import salome
+import math
+
+salome.salome_init()
+
+import GEOM
+from salome.geom import geomBuilder
+
+geompy = geomBuilder.New()
+
+# first cylinder
+r1 = 0.5
+h1 = 5
+
+# second cylinder
+r2 = 0.3
+h2 = 3
+
+length_piquage = 1.5
+
+O = geompy.MakeVertex(0, 0, 0)
+OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
+OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
+OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
+geompy.addToStudy( O, 'O' )
+geompy.addToStudy( OX, 'OX' )
+geompy.addToStudy( OY, 'OY' )
+geompy.addToStudy( OZ, 'OZ' )
+
+Cylinder_1 = geompy.MakeCylinderRH(r1, h1)
+Cylinder_2 = geompy.MakeCylinderRH(r2, h2)
+Rotation_1 = geompy.MakeRotation(Cylinder_2, OY, -90*math.pi/180.0)
+Translation_1 = geompy.MakeTranslation(Rotation_1, 0, 0, length_piquage)
+
+tpipe = geompy.MakeFuseList([Cylinder_1, Translation_1], True, True)
+geompy.addToStudy( tpipe, 'tpipe' )
+
+Inlet_z = geompy.GetFaceNearPoint(tpipe, O)
+geompy.addToStudyInFather( tpipe, Inlet_z, 'Inlet_z' )
+
+p_inlet_x = geompy.MakeVertex(-h2, 0, length_piquage)
+Inlet_x = geompy.GetFaceNearPoint(tpipe, p_inlet_x)
+geompy.addToStudyInFather( tpipe, Inlet_x, 'Inlet_x' )
+
+p_outlet = geompy.MakeVertex(0, 0, h1)
+Outlet = geompy.GetFaceNearPoint(tpipe, p_outlet)
+geompy.addToStudyInFather( tpipe, Outlet, 'Outlet' )
+
+Wall = geompy.CreateGroup(tpipe, geompy.ShapeType["FACE"])
+faces = geompy.SubShapeAll(tpipe, geompy.ShapeType["FACE"])
+geompy.UnionList(Wall, faces)
+geompy.DifferenceList(Wall, [Inlet_x, Inlet_z, Outlet])
+geompy.addToStudyInFather( tpipe, Wall, 'Wall' )
+
+p_corner = geompy.MakeVertex(-r2, 0, length_piquage+r2)
+corner = geompy.GetVertexNearPoint(tpipe, p_corner)
+geompy.addToStudyInFather( tpipe, corner, 'corner' )
+
+geom_groups = [Inlet_x, Inlet_z, Outlet, Wall]
+
+volumeGEOM = geompy.BasicProperties(tpipe)[2]
+
+###
+### SMESH component
+###
+
+import  SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+
+from salome.StdMeshers import StdMeshersBuilder
+
+smesh = smeshBuilder.New()
+
+# Coarse mesh with default hypothesis
+Mesh_1 = smesh.Mesh(tpipe, "Mesh_coarse")
+
+Mesh_1.Triangle(algo=smeshBuilder.NETGEN_1D2D)
+
+algo3d = Mesh_1.Tetrahedron(algo=smeshBuilder.NETGEN_3D)
+algo3d.MaxElementVolume(0.0002)
+
+isDone = Mesh_1.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Create groups
+d_geom_groups = {}
+d_mesh_groups = {}
+for geom_group in geom_groups:
+  gr = Mesh_1.Group(geom_group)
+  gr_name = gr.GetName()
+  d_mesh_groups[gr_name] = gr
+  d_geom_groups[gr_name] = geom_group
+
+# Check tetra mesh volume
+tetra_volume = smesh.GetVolume(Mesh_1)
+shape_volume = geompy.BasicProperties(tpipe)[2]
+assert abs(tetra_volume-shape_volume)/shape_volume < 0.05
+
+dual_Mesh_raw_1 = smesh.CreateDualMesh(Mesh_1, 'dual_Mesh_raw_1', False)
+
+# check polyhedrons
+assert dual_Mesh_raw_1.NbPolyhedrons() > 0
+assert dual_Mesh_raw_1.NbPolyhedrons() == dual_Mesh_raw_1.NbVolumes()
+
+# Check dual mesh volume
+dual_raw_volume = dual_Mesh_raw_1.GetVolume()
+assert abs(dual_raw_volume-shape_volume)/shape_volume < 0.14
+
+# Check groups
+dual_Mesh_raw_groups = dual_Mesh_raw_1.GetGroups()
+dual_Mesh_raw_group_names = dual_Mesh_raw_1.GetGroupNames()
+
+assert len(dual_Mesh_raw_groups) == 4
+
+## Create dual mesh with projection on faces
+dual_Mesh_1 = smesh.CreateDualMesh(Mesh_1, 'dual_Mesh_1', True)
+
+# Check dual mesh volume
+dual_volume = dual_Mesh_1.GetVolume()
+print("shape_volume: ", shape_volume)
+print("tetra_volume: ", tetra_volume)
+print("dual_volume: ", dual_volume)
+print("dual_raw_volume: ", dual_raw_volume)
+assert (dual_volume >= dual_raw_volume)
+
+assert abs(dual_volume-shape_volume)/shape_volume < 0.14
+assert abs(dual_raw_volume-tetra_volume)/tetra_volume < 1e-12
+
+# Check groups
+dual_Mesh_groups = dual_Mesh_1.GetGroups()
+dual_Mesh_group_names = dual_Mesh_1.GetGroupNames()
+d_mesh_dual_groups = {}
+for gr_name, gr in zip(dual_Mesh_group_names, dual_Mesh_groups):
+    gr_name = gr_name.strip()
+    d_mesh_dual_groups[gr_name] = gr
+
+for gr_dual_raw, gr_name in zip(dual_Mesh_raw_groups, dual_Mesh_raw_group_names):
+  gr_name = gr_name.strip()
+  gr_tri = d_mesh_groups[gr_name]
+  gr_dual = d_mesh_dual_groups[gr_name]
+  gr_geom = d_geom_groups[gr_name]
+  area_gr_geom = geompy.BasicProperties(gr_geom)[1]
+  area_gr_tri = smesh.GetArea(gr_tri)
+  area_gr_dual_raw = smesh.GetArea(gr_dual_raw)
+  area_gr_dual = smesh.GetArea(gr_dual)
+  print(gr_name)
+  print("Area geom: ", area_gr_geom)
+  print("Area tri: ", area_gr_tri)
+  print("Area dual raw:", area_gr_dual_raw)
+  print("Area dual:", area_gr_dual)
+  assert abs(area_gr_geom-area_gr_dual)/area_gr_geom < 0.015
+  assert abs(area_gr_tri-area_gr_dual_raw)/area_gr_tri < 1e-3
+
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser()
diff --git a/test/SMESH_demo_hexa2_upd.py b/test/SMESH_demo_hexa2_upd.py
new file mode 100644 (file)
index 0000000..599ad5f
--- /dev/null
@@ -0,0 +1,199 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+#==============================================================================
+#  Info.
+#  Bug (from script, bug)   : SMESH_demo_hexa2_upd.py, PAL6781
+#  Modified                 : 25/11/2004
+#  Author                   : Kovaltchuk Alexey
+#  Project                  : PAL/SALOME
+#==============================================================================
+# Tetrahedrization of a geometry (box minus a inner cylinder).
+# Hypothesis and algorithms for the mesh generation are not global:
+# the mesh of some edges is thinner
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+import math
+
+
+# -----------------------------------------------------------------------------
+
+ShapeTypeShell     = 3
+ShapeTypeFace      = 4
+ShapeTypeEdge      = 6
+
+a = math.sqrt(2.)/4.
+ma = - a
+zero = 0.
+un = 1.
+mun= - un
+demi = 1./2.
+
+Orig = geompy.MakeVertex(zero,zero,zero)
+P0 = geompy.MakeVertex(a,a,zero)
+P1 = geompy.MakeVertex(zero,demi,zero)
+P2 = geompy.MakeVertex(ma,a,zero)
+P3 = geompy.MakeVertex(mun,un,zero)
+P4 = geompy.MakeVertex(un,un,zero)
+P5 = geompy.MakeVertex(zero,zero,un)
+
+arc = geompy.MakeArc(P0,P1,P2)
+e1 = geompy.MakeEdge(P2,P3)
+e2 = geompy.MakeEdge(P3,P4)
+e3 = geompy.MakeEdge(P4,P0)
+
+list = []
+list.append(arc)
+list.append(e1)
+list.append(e2)
+list.append(e3)
+
+wire = geompy.MakeWire(list)
+face = geompy.MakeFace(wire,1)
+
+dir = geompy.MakeVector(Orig,P5)
+vol1 = geompy.MakePipe(face,dir)
+
+angle = math.pi/2.
+#dir = geom.MakeVector(Orig,P5)
+vol2 = geompy.MakeRotation(vol1,dir,angle)
+
+vol3 = geompy.MakeRotation(vol2,dir,angle)
+
+vol4 = geompy.MakeRotation(vol3,dir,angle)
+
+list = []
+list.append(vol1)
+list.append(vol2)
+list.append(vol3)
+list.append(vol4)
+
+volComp = geompy.MakeCompound(list)
+
+tol3d = 1.e-3
+vol = geompy.MakeGlueFaces(volComp,tol3d)
+idVol = geompy.addToStudy(vol,"volume")
+
+print("Analysis of the final volume:")
+subShellList = geompy.SubShapeAllSorted(vol,ShapeTypeShell)
+subFaceList = geompy.SubShapeAllSorted(vol,ShapeTypeFace)
+subEdgeList = geompy.SubShapeAllSorted(vol,ShapeTypeEdge)
+
+print("number of Shells in the volume : ",len(subShellList))
+print("number of Faces in the volume : ",len(subFaceList))
+print("number of Edges in the volume : ",len(subEdgeList))
+
+idSubEdge = []
+for k in range(len(subEdgeList)):
+    idSubEdge.append(geompy.addToStudyInFather(vol,subEdgeList[k],"SubEdge"+str(k)))
+
+edgeZ = []
+edgeZ.append(subEdgeList[0])
+edgeZ.append(subEdgeList[3])
+edgeZ.append(subEdgeList[10])
+edgeZ.append(subEdgeList[11])
+edgeZ.append(subEdgeList[20])
+edgeZ.append(subEdgeList[21])
+edgeZ.append(subEdgeList[28])
+edgeZ.append(subEdgeList[31])
+
+idEdgeZ = []
+for i in range(8):
+    idEdgeZ.append(geompy.addToStudyInFather(vol,edgeZ[i],"EdgeZ"+str(i+1)))
+
+### ---------------------------- SMESH --------------------------------------
+smesh.UpdateStudy()
+
+# ---- init a Mesh with the volume
+
+mesh = smesh.Mesh(vol, "meshVolume")
+
+# ---- set Hypothesis and Algorithm to main shape
+
+print("-------------------------- NumberOfSegments the global one")
+
+numberOfSegments = 10
+
+regular1D = mesh.Segment()
+regular1D.SetName("Wire Discretisation")
+hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetId())
+print(hypNbSeg.GetNumberOfSegments())
+smesh.SetName(hypNbSeg, "NumberOfSegments")
+
+
+print("-------------------------- Quadrangle_2D")
+
+quad2D=mesh.Quadrangle()
+quad2D.SetName("Quadrangle_2D")
+
+print("-------------------------- Hexa_3D")
+
+hexa3D=mesh.Hexahedron()
+hexa3D.SetName("Hexa_3D")
+
+
+print("-------------------------- NumberOfSegments in the Z direction")
+
+numberOfSegmentsZ = 40
+
+for i in range(8):
+    print("-------------------------- add hypothesis to edge in the Z directions", (i+1))
+
+    algo = mesh.Segment(edgeZ[i])
+    hyp = algo.NumberOfSegments(numberOfSegmentsZ)
+    smesh.SetName(hyp, "NumberOfSegmentsZ")
+    smesh.SetName(algo.GetSubMesh(), "SubMeshEdgeZ_"+str(i+1))
+  
+
+salome.sg.updateObjBrowser()
+
+print("-------------------------- compute the mesh of the volume")
+
+ret = mesh.Compute()
+print(ret)
+if not ret:
+    raise Exception("Error when computing Mesh")
+
+##log=mesh.GetLog(0) # no erase trace
+##for linelog in log:
+##    print linelog
+print("Information about the MeshBox :")
+print("Number of nodes       : ", mesh.NbNodes())
+print("Number of edges       : ", mesh.NbEdges())
+print("Number of faces       : ", mesh.NbFaces())
+print("Number of triangles   : ", mesh.NbTriangles())
+print("Number of volumes     : ", mesh.NbVolumes())
+print("Number of tetrahedrons: ", mesh.NbTetras())
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_fixation.py b/test/SMESH_fixation.py
new file mode 100644 (file)
index 0000000..99b9874
--- /dev/null
@@ -0,0 +1,300 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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_fix_volute.py
+#  Author : Paul RASCLE, EDF
+#  Module : SMESH
+#  $Header$
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import math
+
+# -----------------------------------------------------------------------------
+
+def MakeFace(lstEdges) :
+    """
+    Create a planar face from 4 edges
+    """
+    wire = geompy.MakeWire(lstEdges)
+    face = geompy.MakeFace(wire, 1)
+    return face
+
+# -----------------------------------------------------------------------------
+
+# ---- dimensions
+
+##longueurPlq  = 0.686
+##largeurPlq   = 0.573
+##epaisseurPlq = 0.150
+
+##hauteurFlanc   = 0.380
+##epaisseurFlanc = 0.112
+##rayonConge   = 0.150 - epaisseurFlanc
+
+##epaisseurFond = 0.162
+##rayonTrou = 0.075
+##posAxeTrou = hauteurFlanc -(0.180 + rayonTrou)
+##marge = 0.01
+##tol3d = 1.e-5
+
+longueurPlq  = 686
+largeurPlq   = 573
+epaisseurPlq = 150
+
+hauteurFlanc   = 380
+epaisseurFlanc = 112
+rayonConge   = 150 - epaisseurFlanc
+
+epaisseurFond = 162
+rayonTrou = 75
+posAxeTrou = hauteurFlanc - (180 + rayonTrou)
+marge = 10
+tol3d = 1.e-3
+
+# ---- points, directions de base
+
+p0 = geompy.MakeVertex(0., 0., 0.)
+
+vx = geompy.MakeVectorDXDYDZ(100., 0., 0.)
+vy = geompy.MakeVectorDXDYDZ(0., 100., 0.)
+vz = geompy.MakeVectorDXDYDZ(0., 0., 100.)
+
+# ---- ellipse du flanc
+
+he = hauteurFlanc - 2*rayonConge
+re = 0.5*(largeurPlq - epaisseurFond) - rayonConge
+sine = re/he
+cose = math.sqrt(1. - sine*sine)
+
+ve = geompy.MakeVectorDXDYDZ(sine, 0., cose)
+cyl0 = geompy.MakeCylinder(p0, ve, re, 2*he)
+cyl1 = geompy.MakeRotation(cyl0, ve, 0.5)
+cyle = geompy.MakeTranslation(cyl1, -marge*sine, 0., -marge*cose)
+
+pbe = geompy.MakeVertex(3*he, -2*re, 3*he)
+boxe = geompy.MakeBoxTwoPnt(p0, pbe)
+
+cylcoup = geompy.MakeBoolean(cyle, boxe, 2)
+
+aretes = []
+aretes = geompy.SubShapeAllSorted(cylcoup, geompy.ShapeType["EDGE"])
+
+shape = geompy.MakeCopy(aretes[0])
+aShape = geompy.MakeTranslation(shape, 0., rayonConge + re, epaisseurPlq + 2*rayonConge)
+
+
+# -----------------------------------------------------------------------------
+# ---- decoupage de la piece en volumes a 6 faces de 4 cotes
+# -----------------------------------------------------------------------------
+
+# ---- cotes x
+
+x0  = 0.
+x0h = rayonConge
+x1  = rayonConge + epaisseurFlanc
+xc  = longueurPlq/2
+x2  = longueurPlq - rayonConge - epaisseurFlanc
+x3h = longueurPlq - rayonConge
+x3  = longueurPlq
+
+# ---- cotes y
+
+y0  = 0.
+y0h = rayonConge
+y1  = largeurPlq - epaisseurFond
+y1m = y1 - marge
+y2  = largeurPlq
+y2p = largeurPlq + marge
+
+# ---- cotes z
+
+z0  = 0.
+z1m = epaisseurPlq - marge
+z1  = epaisseurPlq
+z2  = epaisseurPlq + rayonConge
+z3  = epaisseurPlq + 2*rayonConge
+z4  = epaisseurPlq + hauteurFlanc
+z4p = epaisseurPlq + hauteurFlanc + marge
+
+zc  = epaisseurPlq + posAxeTrou
+zc2 = epaisseurPlq + (posAxeTrou - rayonTrou)/3
+zc3 = epaisseurPlq + 2*(posAxeTrou - rayonTrou)/3
+
+# ---- decoupe du fond
+
+p11 = geompy.MakeVertex(x1, y1m, z1)
+p12 = geompy.MakeVertex(x1, y1m, z2)
+p13 = geompy.MakeVertex(x1, y1m, z3)
+p14 = geompy.MakeVertex(x1, y1m, z4)
+pc1 = geompy.MakeVertex(xc, y1m, z1)
+pc2 = geompy.MakeVertex(xc, y1m, zc2)
+pc3 = geompy.MakeVertex(xc, y1m, zc3)
+pcc = geompy.MakeVertex(xc, y1m, zc)
+pc4 = geompy.MakeVertex(xc, y1m, z4)
+p21 = geompy.MakeVertex(x2, y1m, z1)
+p22 = geompy.MakeVertex(x2, y1m, z2)
+p23 = geompy.MakeVertex(x2, y1m, z3)
+p24 = geompy.MakeVertex(x2, y1m, z4)
+pcf = geompy.MakeVertex(xc, y2p, zc)
+
+arc2 = geompy.MakeArc(p12,pc2,p22)
+arc3 = geompy.MakeArc(p13,pc3,p23)
+
+segz1  = geompy.MakeVector(p11,p21)
+segz41 = geompy.MakeVector(p14,pc4)
+segz42 = geompy.MakeVector(pc4,p24)
+segx11 = geompy.MakeVector(p11,p12)
+segx12 = geompy.MakeVector(p12,p13)
+segx13 = geompy.MakeVector(p13,p14)
+segxc2 = geompy.MakeVector(pc1,pc2)
+segxc3 = geompy.MakeVector(pc2,pc3)
+segxc4 = geompy.MakeVector(pcc,pc4)
+segx21 = geompy.MakeVector(p21,p22)
+segx22 = geompy.MakeVector(p22,p23)
+segx23 = geompy.MakeVector(p23,p24)
+segx1c1 = geompy.MakeVector(p13,pcc)
+segx1c2 = geompy.MakeVector(p14,pcc)
+segx2c1 = geompy.MakeVector(p23,pcc)
+segx2c2 = geompy.MakeVector(p24,pcc)
+
+facef = []
+facef.append(MakeFace([segx13,segx1c2,segx1c1]))
+facef.append(MakeFace([segx23,segx2c2,segx2c1]))
+facef.append(MakeFace([segx2c2,segxc4,segz42]))
+facef.append(MakeFace([segx1c2,segz41,segxc4]))
+facef.append(MakeFace([segx1c1,arc3,segx2c1]))
+facef.append(MakeFace([segx12,arc2,segx22,arc3]))
+facef.append(MakeFace([segx11,segz1,segx21,arc2]))
+
+vcccf = geompy.MakeVector(pcc, pcf)
+hcccf = y2p - y1m
+decf = []
+for face in facef:
+    decf.append(geompy.MakePrismVecH(face,vcccf,hcccf))
+
+pc  = geompy.MakeVertex(xc, 0., zc)
+py2 = geompy.MakeVertex(xc, y2, zc)
+axeCyl = geompy.MakeVector(pc, py2)
+
+cylFond = geompy.MakeCylinder(pc, vy, rayonTrou, 1.1*largeurPlq)
+cylFond2 = geompy.MakeRotation(cylFond, axeCyl, math.pi)
+
+fondec = []
+for id in (0,1,2,3):
+    fondec.append(geompy.MakeBoolean(decf[id], cylFond2, 2))
+fondec.append(geompy.MakeBoolean(decf[4], cylFond, 2))
+for id in (5,6):
+    fondec.append(decf[id])
+
+p_xcy2pz4p = geompy.MakeVertex(xc,y2p,z4p)
+p_x3y2pz4p = geompy.MakeVertex(x3,y2p,z4p)
+pxc = geompy.MakeVertex(xc,y0,z0)
+bcut1 = geompy.MakeBoxTwoPnt(p0, p_xcy2pz4p)
+bcut2 = geompy.MakeBoxTwoPnt(pxc, p_x3y2pz4p)
+
+fondec2 = []
+for id in (0,1,2,3):
+    fondec2.append(fondec[id])
+for id in (4,5,6):
+    fondec2.append(geompy.MakeBoolean(fondec[id], bcut1, 1))
+    fondec2.append(geompy.MakeBoolean(fondec[id], bcut2, 1))
+
+# ----- autres blocs de decoupe
+
+bcong1 = geompy.MakeBox(x0,y0,z1, x1,y1,z2)
+bcong2 = geompy.MakeBox(x0,y1,z1, x1,y2,z2)
+bcong3 = geompy.MakeBox(x2,y0,z1, x3,y1,z2)
+bcong4 = geompy.MakeBox(x2,y1,z1, x3,y2,z2)
+
+pcylx0 = geompy.MakeVertex(0., -marge, z2)
+pcylx3 = geompy.MakeVertex(longueurPlq, -marge, z2)
+pcyly0 = geompy.MakeVertex(-marge, 0., z2)
+
+cylcongx0 = geompy.MakeCylinder(pcylx0, vy, rayonConge, largeurPlq + 2*marge)
+cylcongx3 = geompy.MakeCylinder(pcylx3, vy, rayonConge, largeurPlq + 2*marge)
+cylcongy0 = geompy.MakeCylinder(pcyly0, vx, rayonConge, longueurPlq + 2*marge)
+
+bcong1 = geompy.MakeBoolean(bcong1,cylcongx0,2)
+bcong2 = geompy.MakeBoolean(bcong2,cylcongx0,2)
+bcong1 = geompy.MakeBoolean(bcong1,cylcongy0,2)
+#NRI : inverse order of BOP
+bcong3 = geompy.MakeBoolean(bcong3,cylcongy0,2)
+bcong3 = geompy.MakeBoolean(bcong3,cylcongx3,2)
+bcong4 = geompy.MakeBoolean(bcong4,cylcongx3,2)
+
+pf1 = geompy.MakeVertex(0., y0h, z3)
+pf2 = geompy.MakeVertex(0., y1, z3)
+pf3 = geompy.MakeVertex(0., y1, z4)
+pf4 = geompy.MakeVertex(0., 0.5*(largeurPlq - epaisseurFond) , z4)
+
+vf1 = geompy.MakeEdge(pf1, pf2)
+vf2 = geompy.MakeEdge(pf2, pf3)
+vf3 = geompy.MakeEdge(pf3, pf4)
+
+faceFlanc = MakeFace([vf1,vf2,vf3,aShape])
+
+flanc1 = geompy.MakePrismVecH(faceFlanc, vx, epaisseurFlanc)
+flanc2 = geompy.MakeCopy(flanc1)
+flanc1 = geompy.MakeTranslation(flanc1, rayonConge, 0., 0.)
+flanc2 = geompy.MakeTranslation(flanc2, longueurPlq - rayonConge - epaisseurFlanc, 0., 0.)
+
+# ---- constitution et decoupe des blocs
+boxfond2 = geompy.MakeBox(x0, y1, z0, x3, y2, z4p)
+
+blocs = []
+for dec in fondec2:
+    blocs.append(geompy.MakeBoolean(boxfond2, dec, 1))
+
+blocs.append(geompy.MakeBox(x0,y1,z0, x1,y2,z1))
+blocs.append(geompy.MakeBox(x1,y1,z0, xc,y2,z1))
+blocs.append(geompy.MakeBox(xc,y1,z0, x2,y2,z1))
+blocs.append(geompy.MakeBox(x2,y1,z0, x3,y2,z1))
+blocs.append(geompy.MakeBox(x0,y0,z0, x1,y1,z1))
+blocs.append(geompy.MakeBox(x1,y0,z0, xc,y1,z1))
+blocs.append(geompy.MakeBox(xc,y0,z0, x2,y1,z1))
+blocs.append(geompy.MakeBox(x2,y0,z0, x3,y1,z1))
+blocs.append(bcong2)
+blocs.append(bcong4)
+blocs.append(bcong1)
+blocs.append(bcong3)
+blocs.append(geompy.MakeBox(x0h,y1, z2, x1, y2, z3))
+blocs.append(geompy.MakeBox(x2, y1, z2, x3h,y2, z3))
+blocs.append(geompy.MakeBox(x0h,y0h,z2, x1, y1, z3))
+blocs.append(geompy.MakeBox(x2, y0h,z2, x3h,y1, z3))
+blocs.append(geompy.MakeBox(x0h,y1, z3, x1, y2, z4))
+blocs.append(geompy.MakeBox(x2, y1, z3, x3h,y2, z4))
+blocs.append(flanc1)
+blocs.append(flanc2)
+
+compbloc = geompy.MakeCompound(blocs)
+idcomp = geompy.addToStudy(compbloc, "compbloc")
+
+# ---- eliminer les faces en double, solid-->shell
+
+compshell = geompy.MakeGlueFaces(compbloc,tol3d)
+idcomp = geompy.addToStudy(compshell, "compshell")
diff --git a/test/SMESH_fixation_hexa.py b/test/SMESH_fixation_hexa.py
new file mode 100644 (file)
index 0000000..eb15cd9
--- /dev/null
@@ -0,0 +1,102 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# Hexahedrization of the geometry generated by the Python script
+# SMESH_fixation.py
+# Hypothesis and algorithms for the mesh generation are global
+#
+import salome
+import SMESH_fixation
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+compshell = SMESH_fixation.compshell
+idcomp = SMESH_fixation.idcomp
+geompy = SMESH_fixation.geompy
+salome = SMESH_fixation.salome
+
+print("Analysis of the geometry to be meshed :")
+subShellList = geompy.SubShapeAll(compshell, geompy.ShapeType["SHELL"])
+subFaceList  = geompy.SubShapeAll(compshell, geompy.ShapeType["FACE"])
+subEdgeList  = geompy.SubShapeAll(compshell, geompy.ShapeType["EDGE"])
+
+print("number of Shells in compshell : ", len(subShellList))
+print("number of Faces  in compshell : ", len(subFaceList))
+print("number of Edges  in compshell : ", len(subEdgeList))
+
+status = geompy.CheckShape(compshell)
+print(" check status ", status)
+
+### ---------------------------- SMESH --------------------------------------
+smesh.UpdateStudy()
+
+# ---- init a Mesh with the compshell
+shape_mesh = salome.IDToObject( idcomp  )
+
+mesh = smesh.Mesh(shape_mesh, "MeshCompShell")
+
+
+# ---- set Hypothesis and Algorithm
+
+print("-------------------------- NumberOfSegments")
+
+numberOfSegments = 5
+
+regular1D = mesh.Segment()
+regular1D.SetName("Wire Discretisation")
+hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetId())
+print(hypNbSeg.GetNumberOfSegments())
+smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
+
+print("-------------------------- Quadrangle_2D")
+
+quad2D = mesh.Quadrangle()
+quad2D.SetName("Quadrangle_2D")
+
+print("-------------------------- Hexa_3D")
+
+hexa3D = mesh.Hexahedron()
+hexa3D.SetName("Hexa_3D")
+
+print("-------------------------- compute compshell")
+ret = mesh.Compute()
+print(ret)
+if not ret:
+    raise Exception("Error when computing Mesh")
+
+log = mesh.GetLog(0) # no erase trace
+# for linelog in log:
+#     print(linelog)
+print("Information about the MeshcompShel:")
+print("Number of nodes       : ", mesh.NbNodes())
+print("Number of edges       : ", mesh.NbEdges())
+print("Number of faces       : ", mesh.NbFaces())
+print("Number of quadrangles : ", mesh.NbQuadrangles())
+print("Number of volumes     : ", mesh.NbVolumes())
+print("Number of hexahedrons : ", mesh.NbHexas())
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_fixation_netgen.py b/test/SMESH_fixation_netgen.py
new file mode 100644 (file)
index 0000000..4b628ef
--- /dev/null
@@ -0,0 +1,78 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# Tetrahedrization of the geometry generated by the Python script
+# SMESH_fixation.py
+# The new Netgen algorithm is used that discretizes baoundaries itself
+#
+import salome
+import SMESH_fixation
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+compshell = SMESH_fixation.compshell
+idcomp = SMESH_fixation.idcomp
+geompy = SMESH_fixation.geompy
+salome = SMESH_fixation.salome
+
+print("Analysis of the geometry to be meshed :")
+subShellList = geompy.SubShapeAll(compshell, geompy.ShapeType["SHELL"])
+subFaceList  = geompy.SubShapeAll(compshell, geompy.ShapeType["FACE"])
+subEdgeList  = geompy.SubShapeAll(compshell, geompy.ShapeType["EDGE"])
+
+print("number of Shells in compshell : ", len(subShellList))
+print("number of Faces  in compshell : ", len(subFaceList))
+print("number of Edges  in compshell : ", len(subEdgeList))
+
+status = geompy.CheckShape(compshell)
+print(" check status ", status)
+
+### ---------------------------- SMESH --------------------------------------
+smesh.UpdateStudy()
+
+print("-------------------------- create Mesh, algorithm, hypothesis")
+
+mesh = smesh.Mesh(compshell, "MeshcompShel");
+netgen = mesh.Tetrahedron(smeshBuilder.FULL_NETGEN)
+netgen.SetMaxSize( 50 )
+#netgen.SetSecondOrder( 0 )
+netgen.SetFineness( smeshBuilder.Fine )
+#netgen.SetOptimize( 1 )
+
+print("-------------------------- compute mesh")
+ret = mesh.Compute()
+print(ret)
+if not ret:
+    raise Exception("Error when computing Mesh")
+
+print("Information about the MeshcompShel:")
+print("Number of nodes        : ", mesh.GetMesh().NbNodes())
+print("Number of edges        : ", mesh.GetMesh().NbEdges())
+print("Number of faces        : ", mesh.GetMesh().NbFaces())
+print("Number of triangles    : ", mesh.GetMesh().NbTriangles())
+print("Number of volumes      : ", mesh.GetMesh().NbVolumes())
+print("Number of tetrahedrons : ", mesh.GetMesh().NbTetras())
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_fixation_tetra.py b/test/SMESH_fixation_tetra.py
new file mode 100644 (file)
index 0000000..859d046
--- /dev/null
@@ -0,0 +1,113 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# Tetrahedrization of the geometry generated by the Python script
+# SMESH_fixation.py
+# Hypothesis and algorithms for the mesh generation are global
+#
+import salome
+import SMESH_fixation
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+compshell = SMESH_fixation.compshell
+idcomp = SMESH_fixation.idcomp
+geompy = SMESH_fixation.geompy
+salome = SMESH_fixation.salome
+
+print("Analysis of the geometry to be meshed :")
+subShellList = geompy.SubShapeAll(compshell, geompy.ShapeType["SHELL"])
+subFaceList  = geompy.SubShapeAll(compshell, geompy.ShapeType["FACE"])
+subEdgeList  = geompy.SubShapeAll(compshell, geompy.ShapeType["EDGE"])
+
+print("number of Shells in compshell : ", len(subShellList))
+print("number of Faces  in compshell : ", len(subFaceList))
+print("number of Edges  in compshell : ", len(subEdgeList))
+
+status = geompy.CheckShape(compshell)
+print(" check status ", status)
+
+### ---------------------------- SMESH --------------------------------------
+smesh.UpdateStudy()
+
+# ---- init a Mesh with the compshell
+
+mesh = smesh.Mesh(compshell, "MeshcompShell")
+
+
+# ---- set Hypothesis and Algorithm
+
+print("-------------------------- NumberOfSegments")
+
+numberOfSegments = 5
+
+regular1D = mesh.Segment()
+regular1D.SetName("Wire Discretisation")
+hypNbSeg = regular1D.NumberOfSegments(numberOfSegments)
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetId())
+print(hypNbSeg.GetNumberOfSegments())
+smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegments))
+
+print("-------------------------- LengthFromEdges")
+
+triangle = mesh.Triangle()
+triangle.SetName("Triangle")
+hypLengthFromEdges = triangle.LengthFromEdges()
+print(hypLengthFromEdges.GetName())
+print(hypLengthFromEdges.GetId())
+smesh.SetName(hypLengthFromEdges, "LengthFromEdges")
+
+
+print("-------------------------- MaxElementVolume")
+
+maxElementVolume = 1000
+
+netgen3D = mesh.Tetrahedron(smeshBuilder.NETGEN)
+netgen3D.SetName("NETGEN_3D")
+hypVolume = netgen3D.MaxElementVolume(maxElementVolume)
+print(hypVolume.GetName())
+print(hypVolume.GetId())
+print(hypVolume.GetMaxElementVolume())
+smesh.SetName(hypVolume, "MaxElementVolume_" + str(maxElementVolume))
+
+print("-------------------------- compute compshell")
+ret = mesh.Compute(mesh)
+print(ret)
+if not ret:
+    raise Exception("Error when computing Mesh")
+
+log = mesh.GetLog(0) # no erase trace
+# for linelog in log:
+#     print(linelog)
+print("Information about the MeshcompShel:")
+print("Number of nodes        : ", mesh.NbNodes())
+print("Number of edges        : ", mesh.NbEdges())
+print("Number of faces        : ", mesh.NbFaces())
+print("Number of triangles    : ", mesh.NbTriangles())
+print("Number of volumes      : ", mesh.NbVolumes())
+print("Number of tetrahedrons : ", mesh.NbTetras())
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_flight_skin.py b/test/SMESH_flight_skin.py
new file mode 100644 (file)
index 0000000..f7de480
--- /dev/null
@@ -0,0 +1,110 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# Triangulation of the skin of the geometry from a Brep representing a plane
+# Hypothesis and algorithms for the mesh generation are global
+#
+import os
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+
+# ---------------------------- GEOM --------------------------------------
+
+# import a BRep
+#before running this script, please be sure about
+#the path the file fileName
+
+filePath = os.environ["DATA_DIR"]
+filePath = filePath + "/Shapes/Brep/"
+
+filename = "flight_solid.brep"
+filename = filePath + filename
+
+shape = geompy.ImportBREP(filename)
+idShape = geompy.addToStudy(shape, "flight")
+
+print("Analysis of the geometry flight :")
+subShellList = geompy.SubShapeAll(shape, geompy.ShapeType["SHELL"])
+subFaceList  = geompy.SubShapeAll(shape, geompy.ShapeType["FACE"])
+subEdgeList  = geompy.SubShapeAll(shape, geompy.ShapeType["EDGE"])
+
+print("number of Shells in flight : ", len(subShellList))
+print("number of Faces  in flight : ", len(subFaceList))
+print("number of Edges  in flight : ", len(subEdgeList))
+
+
+### ---------------------------- SMESH --------------------------------------
+smesh.UpdateStudy()
+
+# ---- init a Mesh with the shell
+shape_mesh = salome.IDToObject( idShape )
+
+mesh = smesh.Mesh(shape_mesh, "MeshFlight")
+
+
+# ---- set Hypothesis and Algorithm
+
+print("-------------------------- LocalLength")
+
+lengthOfSegments = 0.3
+
+regular1D = mesh.Segment()
+hypLength = regular1D.LocalLength(lengthOfSegments)
+print(hypLength.GetName())
+print(hypLength.GetId())
+print(hypLength.GetLength())
+smesh.SetName(hypLength, "LocalLength_" + str(lengthOfSegments))
+
+print("-------------------------- LengthFromEdges")
+
+triangle = mesh.Triangle()
+hypLengthFromEdge = triangle.LengthFromEdges()
+print(hypLengthFromEdge.GetName())
+print(hypLengthFromEdge.GetId())
+smesh.SetName(hypLengthFromEdge,"LengthFromEdge")
+
+print("-------------------------- compute the skin flight")
+ret = mesh.Compute()
+print(ret)
+if not ret:
+    raise Exception("Error when computing Mesh")
+
+log = mesh.GetLog(0) # no erase trace
+# for linelog in log:
+#     print(linelog)
+print("Information about the Mesh_mechanic_tetra:")
+print("Number of nodes      : ", mesh.NbNodes())
+print("Number of edges      : ", mesh.NbEdges())
+print("Number of faces      : ", mesh.NbFaces())
+print("Number of triangles  : ", mesh.NbTriangles())
+print("Number of volumes    : ", mesh.NbVolumes())
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_freebord.py b/test/SMESH_freebord.py
new file mode 100644 (file)
index 0000000..835a50d
--- /dev/null
@@ -0,0 +1,79 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+
+# Create box without one plane
+
+box = geompy.MakeBox(0., 0., 0., 10., 20., 30.)
+subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
+
+FaceList  = []
+for i in range( 5 ):
+  FaceList.append( subShapeList[ i ] )
+
+aComp = geompy.MakeCompound( FaceList )
+aBox = geompy.Sew( aComp, 1. )
+idbox = geompy.addToStudy( aBox, "box" )
+
+aBox  = salome.IDToObject( idbox )
+
+# Create mesh
+smesh.UpdateStudy()
+
+mesh = smesh.Mesh(aBox, "Mesh_freebord")
+
+algoReg = mesh.Segment()
+hypNbSeg = algoReg.NumberOfSegments(5)
+
+algoMef = mesh.Triangle()
+hypArea = algoMef.MaxElementArea(20)
+
+
+isDone = mesh.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Criterion : Free edges. Create group.
+
+aCriterion = smesh.GetCriterion(SMESH.EDGE, SMESH.FT_FreeEdges)
+
+aGroup = mesh.MakeGroupByCriterion("Free edges", aCriterion)
+
+anIds = aGroup.GetIDs()
+
+# print result
+print("Criterion: Free edges Nb = ", len( anIds ))
+for i in range( len( anIds ) ):
+  print(anIds[ i ])
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_hexaedre.py b/test/SMESH_hexaedre.py
new file mode 100644 (file)
index 0000000..af1361a
--- /dev/null
@@ -0,0 +1,101 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# -----------------------------------------------------------------------------
+
+p0 = geompy.MakeVertex(0., 0., 0.)
+px = geompy.MakeVertex(100., 0., 0.)
+py = geompy.MakeVertex(0., 100., 0.)
+pz = geompy.MakeVertex(0., 0., 100.)
+vx = geompy.MakeVector(p0, px)
+vy = geompy.MakeVector(p0, py)
+vz = geompy.MakeVector(p0, pz)
+
+sphereExt = geompy.MakeSphere(    0.,  0.,  0., 400.)
+sphereInt = geompy.MakeSphere(    0.,-50.,  0., 350.)
+sphereA   = geompy.MakeSphere( -400., 50., 50., 400.)
+sphereB   = geompy.MakeSphere(  350.,-50.,-50., 350.)
+ptcyle    = geompy.MakeVertex(0., -300., -450.)
+cylindre  = geompy.MakeCylinder(ptcyle,vz,500.,900.)
+
+vol1=geompy.MakeCut(sphereExt,sphereA)
+vol2=geompy.MakeCut(vol1,sphereB)
+vol3=geompy.MakeCut(vol2,cylindre)
+blob=geompy.MakeCut(vol3,sphereInt)
+blob=geompy.RemoveExtraEdges(blob)
+
+idblob = geompy.addToStudy(blob,"blob")
+
+edgeGroups = geompy.Propagate( blob )
+assert len( edgeGroups ) == 3
+
+salome.sg.updateObjBrowser()
+
+# -----------------------------------------------------------------------------
+
+print("-------------------------- mesh")
+smesh.UpdateStudy()
+
+# ---- define a mesh on the geom shape 'blob'
+mesh=smesh.Mesh(blob, "MeshBlob")
+
+# ---- assign global hypothesis and algorithms to mesh
+print("-------------------------- add hypothesis to mesh")
+algo1 = mesh.Segment()
+algo2 = mesh.Quadrangle()
+algo3 = mesh.Hexahedron()
+
+# ---- assign local hypothesis and algorithms to mesh
+for edges in edgeGroups: # loop on groups of logically parallel edges
+    length = geompy.BasicProperties( edges )[0]
+    if   length < 500:  nbSeg = 4
+    elif length < 2000: nbSeg = 10
+    else:               nbSeg = 15
+    algo = mesh.Segment( edges )
+    algo.NumberOfSegments( nbSeg )
+    pass
+
+# ---- compute mesh
+print("-------------------------- compute mesh")
+ok = mesh.Compute()
+if not ok:
+    raise Exception("Error when computing Mesh")
+
+print("Information about the Mesh:")
+print("Number of nodes       : ", mesh.NbNodes())
+print("Number of edges       : ", mesh.NbEdges())
+print("Number of faces       : ", mesh.NbFaces())
+print("Number of quadrangles : ", mesh.NbQuadrangles())
+print("Number of volumes     : ", mesh.NbVolumes())
+print("Number of hexahedrons : ", mesh.NbHexas())
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_mechanic.py b/test/SMESH_mechanic.py
new file mode 100644 (file)
index 0000000..7cebfc0
--- /dev/null
@@ -0,0 +1,193 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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_withHole.py
+#  Author : Lucien PIGNOLONI
+#  Module : SMESH
+#  $Header$
+#-------------------------------------------------------------------------
+#
+import salome
+salome.salome_init_without_session()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+from salome.StdMeshers import StdMeshersBuilder
+
+# ---------------------------- GEOM --------------------------------------
+
+# ---- define contiguous arcs and segment to define a closed wire
+p1   = geompy.MakeVertex( 100.0,   0.0,  0.0 )
+p2   = geompy.MakeVertex(  50.0,  50.0,  0.0 )
+p3   = geompy.MakeVertex( 100.0, 100.0,  0.0 )
+arc1 = geompy.MakeArc( p1, p2, p3 )
+
+p4   = geompy.MakeVertex( 170.0, 100.0, 0.0 )
+seg1 = geompy.MakeVector( p3, p4 )
+
+p5   = geompy.MakeVertex( 200.0, 70.0, 0.0 )
+p6   = geompy.MakeVertex( 170.0, 40.0, 0.0 )
+arc2 = geompy.MakeArc( p4, p5, p6 )
+
+p7   = geompy.MakeVertex( 120.0, 30.0, 0.0 )
+arc3 = geompy.MakeArc( p6, p7, p1 )
+
+# ---- define a closed wire with arcs and segment
+List1 = []
+List1.append( arc1 )
+List1.append( seg1 )
+List1.append( arc2 )
+List1.append( arc3 )
+
+wire1 = geompy.MakeWire( List1 )
+Id_wire1 = geompy.addToStudy( wire1, "wire1" )
+
+# ---- define a planar face with wire
+WantPlanarFace = 1 #True
+face1 = geompy.MakeFace( wire1, WantPlanarFace )
+Id_face1 = geompy.addToStudy( face1, "face1" )
+
+# ---- create a shape by extrusion
+pO = geompy.MakeVertex( 0.0, 0.0,   0.0 )
+pz = geompy.MakeVertex( 0.0, 0.0, 100.0 )
+vz = geompy.MakeVector( pO, pz )
+
+prism1 = geompy.MakePrismVecH( face1, vz, 100.0 )
+Id_prism1 = geompy.addToStudy( prism1, "prism1" )
+
+# ---- create two cylinders
+pc1 = geompy.MakeVertex(  90.0, 50.0, -40.0 )
+pc2 = geompy.MakeVertex( 170.0, 70.0, -40.0 )
+
+radius = 20.0
+height = 180.0
+cyl1 = geompy.MakeCylinder( pc1, vz, radius, height )
+cyl2 = geompy.MakeCylinder( pc2, vz, radius, height )
+
+Id_Cyl1 = geompy.addToStudy( cyl1, "cyl1" )
+Id_Cyl2 = geompy.addToStudy( cyl2, "cyl2" )
+
+# ---- cut with cyl1
+shape = geompy.MakeBoolean( prism1, cyl1, 2 )
+
+# ---- fuse with cyl2 to obtain the final mechanic piece :)
+mechanic = geompy.MakeBoolean( shape, cyl2, 3 )
+Id_mechanic = geompy.addToStudy( mechanic, "mechanic" )
+
+# ---- explode on faces
+SubFaceL = geompy.SubShapeAllSorted(mechanic, geompy.ShapeType["FACE"])
+
+# ---- add a face sub-shape in study to be meshed different
+sub_face1 = SubFaceL[0]
+name      = geompy.SubShapeName( sub_face1, mechanic )
+
+Id_SubFace1 = geompy.addToStudyInFather( mechanic, sub_face1, name )
+
+# ---- add a face sub-shape in study to be meshed different
+sub_face2 = SubFaceL[4]
+name      = geompy.SubShapeName( sub_face2, mechanic )
+
+Id_SubFace2 = geompy.addToStudyInFather( mechanic, sub_face2, name )
+
+# ---- add a face sub-shape in study to be meshed different
+sub_face3 = SubFaceL[5]
+name      = geompy.SubShapeName( sub_face3, mechanic )
+
+Id_SubFace3 = geompy.addToStudyInFather( mechanic, sub_face3, name )
+
+# ---- add a face sub-shape in study to be meshed different
+sub_face4 = SubFaceL[10]
+name      = geompy.SubShapeName( sub_face4, mechanic )
+
+Id_SubFace4 = geompy.addToStudyInFather( mechanic, sub_face4, name )
+
+# ---------------------------- SMESH --------------------------------------
+smesh.UpdateStudy()
+
+# -- Init --
+shape_mesh = salome.IDToObject( Id_mechanic )
+
+mesh = smesh.Mesh(shape_mesh, "Mesh_mechanic")
+
+print("-------------------------- NumberOfSegments")
+
+numberOfSegment = 10
+
+algo = mesh.Segment()
+hypNbSeg = algo.NumberOfSegments(numberOfSegment)
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetId())
+print(hypNbSeg.GetNumberOfSegments())
+smesh.SetName(hypNbSeg, "NumberOfSegments_10")
+
+print("-------------------------- MaxElementArea")
+
+maxElementArea = 25
+
+algo = mesh.Triangle()
+hypArea25 = algo.MaxElementArea(maxElementArea)
+print(hypArea25.GetName())
+print(hypArea25.GetId())
+print(hypArea25.GetMaxElementArea())
+smesh.SetName(hypArea25, "MaxElementArea_25")
+
+# Create submesh on sub_face1 - sub_face4
+# ---------------------------------------
+
+# Set 2D algorithm to submesh on sub_face1
+algo = mesh.Quadrangle(sub_face1)
+smesh.SetName(algo.GetSubMesh(), "SubMeshFace1")
+
+# Set 2D algorithm to submesh on sub_face2
+algo = mesh.Quadrangle(sub_face2)
+smesh.SetName(algo.GetSubMesh(), "SubMeshFace2")
+
+# Set 2D algorithm to submesh on sub_face3
+algo = mesh.Quadrangle(sub_face3)
+smesh.SetName(algo.GetSubMesh(), "SubMeshFace3")
+
+# Set 2D algorithm to submesh on sub_face4
+algo = mesh.Quadrangle(sub_face4)
+smesh.SetName(algo.GetSubMesh(), "SubMeshFace4")
+
+print("-------------------------- compute the mesh of the mechanic piece")
+
+isDone = mesh.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+print("Information about the Mesh_mechanic:")
+print("Number of nodes       : ", mesh.NbNodes())
+print("Number of edges       : ", mesh.NbEdges())
+print("Number of faces       : ", mesh.NbFaces())
+print("Number of triangles   : ", mesh.NbTriangles())
+print("Number of quadrangles : ", mesh.NbQuadrangles())
+print("Number of volumes     : ", mesh.NbVolumes())
+print("Number of tetrahedrons: ", mesh.NbTetras())
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_mechanic_editor.py b/test/SMESH_mechanic_editor.py
new file mode 100644 (file)
index 0000000..f4f1521
--- /dev/null
@@ -0,0 +1,239 @@
+# -*- coding: utf-8 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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_withHole.py
+#  Author : Lucien PIGNOLONI
+#  Module : SMESH
+#  $Header$
+#-------------------------------------------------------------------------
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# ---------------------------- GEOM --------------------------------------
+
+# ---- define contiguous arcs and segment to define a closed wire
+p1   = geompy.MakeVertex( 100.0,   0.0,  0.0 )
+p2   = geompy.MakeVertex(  50.0,  50.0,  0.0 )
+p3   = geompy.MakeVertex( 100.0, 100.0,  0.0 )
+arc1 = geompy.MakeArc( p1, p2, p3 )
+
+p4   = geompy.MakeVertex( 170.0, 100.0, 0.0 )
+seg1 = geompy.MakeVector( p3, p4 )
+
+p5   = geompy.MakeVertex( 200.0, 70.0, 0.0 )
+p6   = geompy.MakeVertex( 170.0, 40.0, 0.0 )
+arc2 = geompy.MakeArc( p4, p5, p6 )
+
+p7   = geompy.MakeVertex( 120.0, 30.0, 0.0 )
+arc3 = geompy.MakeArc( p6, p7, p1 )
+
+# ---- define a closed wire with arcs and segment
+List1 = []
+List1.append( arc1 )
+List1.append( seg1 )
+List1.append( arc2 )
+List1.append( arc3 )
+
+wire1 = geompy.MakeWire( List1 )
+Id_wire1 = geompy.addToStudy( wire1, "wire1" )
+
+# ---- define a planar face with wire
+WantPlanarFace = 1 #True
+face1 = geompy.MakeFace( wire1, WantPlanarFace )
+Id_face1 = geompy.addToStudy( face1, "face1" )
+
+# ---- create a shape by extrusion
+pO = geompy.MakeVertex( 0.0, 0.0,   0.0 )
+pz = geompy.MakeVertex( 0.0, 0.0, 100.0 )
+vz = geompy.MakeVector( pO, pz )
+
+prism1 = geompy.MakePrismVecH( face1, vz, 100.0 )
+Id_prism1 = geompy.addToStudy( prism1, "prism1" )
+
+# ---- create two cylinders
+pc1 = geompy.MakeVertex(  90.0, 50.0, -40.0 )
+pc2 = geompy.MakeVertex( 170.0, 70.0, -40.0 )
+
+radius = 20.0
+height = 180.0
+cyl1 = geompy.MakeCylinder( pc1, vz, radius, height )
+cyl2 = geompy.MakeCylinder( pc2, vz, radius, height )
+
+Id_Cyl1 = geompy.addToStudy( cyl1, "cyl1" )
+Id_Cyl2 = geompy.addToStudy( cyl2, "cyl2" )
+
+# ---- cut with cyl1
+shape = geompy.MakeBoolean( prism1, cyl1, 2 )
+
+# ---- fuse with cyl2 to obtain the final mechanic piece :)
+mechanic = geompy.MakeBoolean( shape, cyl2, 3 )
+Id_mechanic = geompy.addToStudy( mechanic, "mechanic" )
+
+# ---- explode on faces
+SubFaceL = geompy.SubShapeAllSorted(mechanic, geompy.ShapeType["FACE"])
+
+# ---- add a face sub-shape in study to be meshed different
+sub_face1 = SubFaceL[0]
+name      = geompy.SubShapeName( sub_face1, mechanic )
+
+Id_SubFace1 = geompy.addToStudyInFather( mechanic, sub_face1, name )
+
+# ---- add a face sub-shape in study to be meshed different
+sub_face2 = SubFaceL[4]
+name      = geompy.SubShapeName( sub_face2, mechanic )
+
+Id_SubFace2 = geompy.addToStudyInFather( mechanic, sub_face2, name )
+
+# ---- add a face sub-shape in study to be meshed different
+sub_face3 = SubFaceL[5]
+name      = geompy.SubShapeName( sub_face3, mechanic )
+
+Id_SubFace3 = geompy.addToStudyInFather( mechanic, sub_face3, name )
+
+# ---- add a face sub-shape in study to be meshed different
+sub_face4 = SubFaceL[10]
+name      = geompy.SubShapeName( sub_face4, mechanic )
+
+Id_SubFace4 = geompy.addToStudyInFather( mechanic, sub_face4, name )
+
+# ---------------------------- SMESH --------------------------------------
+
+# -- Init --
+shape_mesh = salome.IDToObject( Id_mechanic )
+
+mesh = smesh.Mesh(shape_mesh, "Mesh_mechanic")
+
+print("-------------------------- NumberOfSegments")
+
+numberOfSegment = 10
+
+algo = mesh.Segment()
+hypNbSeg = algo.NumberOfSegments(numberOfSegment)
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetId())
+print(hypNbSeg.GetNumberOfSegments())
+smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegment))
+
+
+print("-------------------------- MaxElementArea")
+
+maxElementArea = 25
+
+algo = mesh.Triangle()
+hypArea25 = algo.MaxElementArea(maxElementArea)
+print(hypArea25.GetName())
+print(hypArea25.GetId())
+print(hypArea25.GetMaxElementArea())
+smesh.SetName(hypArea25, "MaxElementArea_" + str(maxElementArea))
+
+
+# Create submesh on sub_face1 - sub_face4
+# ---------------------------------------
+
+# Set 2D algorithm to submesh on sub_face1
+algo = mesh.Quadrangle(sub_face1)
+smesh.SetName(algo.GetSubMesh(), "SubMeshFace1")
+submesh1 = algo.GetSubMesh()
+
+# Set 2D algorithm to submesh on sub_face2
+algo = mesh.Quadrangle(sub_face2)
+smesh.SetName(algo.GetSubMesh(), "SubMeshFace2")
+submesh2 = algo.GetSubMesh()
+
+# Set 2D algorithm to submesh on sub_face3
+algo = mesh.Quadrangle(sub_face3)
+smesh.SetName(algo.GetSubMesh(), "SubMeshFace3")
+submesh3 = algo.GetSubMesh()
+
+# Set 2D algorithm to submesh on sub_face4
+algo = mesh.Quadrangle(sub_face4)
+smesh.SetName(algo.GetSubMesh(), "SubMeshFace4")
+submesh4 = algo.GetSubMesh()
+
+
+print("-------------------------- compute the mesh of the mechanic piece")
+
+isDone = mesh.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+print("Information about the Mesh_mechanic:")
+print("Number of nodes       : ", mesh.NbNodes())
+print("Number of edges       : ", mesh.NbEdges())
+print("Number of faces       : ", mesh.NbFaces())
+print("Number of triangles   : ", mesh.NbTriangles())
+print("Number of quadrangles : ", mesh.NbQuadrangles())
+print("Number of volumes     : ", mesh.NbVolumes())
+print("Number of tetrahedrons: ", mesh.NbTetras())
+
+
+#1 cutting of quadrangles of the 'SubMeshFace2' submesh
+mesh.SplitQuadObject(submesh2, 1)
+
+#2 cutting of triangles of the group
+FacesTriToQuad = [ 2391, 2824, 2825, 2826, 2827, 2828, 2832, 2833, 2834, 2835, 2836, 2837, 2838, 2839, 2841, 2844, 2845, 2847, 2854, 2861, 2863, 2922, 2923, 2924, 2925, 2926, 2927, 2928, 2929, 2930, 2931, 2932, 2933, 2934, 2935, 2936, 2937, 2938, 2940, 2941, 2946, 2951, 2970, 2971, 2972, 2973, 2974, 2975, 2976, 2977, 2978, 2979, 2980, 2981, 2982, 2983, 2984, 2985 ]
+GroupTriToQuad = mesh.MakeGroupByIds("Group of faces (quad)", SMESH.FACE, FacesTriToQuad)
+mesh.TriToQuadObject(GroupTriToQuad, SMESH.FT_AspectRatio , 1.57)
+
+#3 extrusion of the group
+point = SMESH.PointStruct(0, 0, 5)
+vector = SMESH.DirStruct(point)
+mesh.ExtrusionSweepObject(GroupTriToQuad, vector, 5)
+
+#4 mirror object
+mesh.Mirror([], SMESH.AxisStruct(0, 0, 0, 0, 0, 0), smesh.POINT, 0)
+
+#5 mesh translation
+point = SMESH.PointStruct(10, 10, 10)
+vector = SMESH.DirStruct(point)
+mesh.Translate([], vector, 0)
+
+#6 mesh rotation
+axisXYZ = SMESH.AxisStruct(0, 0, 0, 10, 10, 10)
+angle180 =  180*3.141/180
+mesh.Rotate([], axisXYZ, angle180, 0)
+
+#7 group smoothing
+FacesSmooth = [864, 933, 941, 950, 1005, 1013]
+GroupSmooth = mesh.MakeGroupByIds("Group of faces (smooth)", SMESH.FACE, FacesSmooth)
+mesh.SmoothObject(GroupSmooth, [], 20, 2, smesh.CENTROIDAL_SMOOTH)
+
+#8 rotation sweep object
+FacesRotate = [492, 493, 502, 503]
+GroupRotate = mesh.MakeGroupByIds("Group of faces (rotate)", SMESH.FACE, FacesRotate)
+angle45 =  45*3.141/180
+axisXYZ = SMESH.AxisStruct(-38.3128, -73.3658, -133.321, -13.3402, -13.3265, 6.66632)
+mesh.RotationSweepObject(GroupRotate, axisXYZ, angle45, 4, 1e-5)
+
+#9 reorientation of the submesh1
+mesh.ReorientObject(submesh1)
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_mechanic_netgen.py b/test/SMESH_mechanic_netgen.py
new file mode 100644 (file)
index 0000000..58b32d8
--- /dev/null
@@ -0,0 +1,137 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# Quadrangulation of the geometry generated by the Python script
+# SMESH_mechanic.py
+# The new Netgen algorithm is used that discretizes baoundaries itself
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# ---------------------------- GEOM --------------------------------------
+
+# ---- define contiguous arcs and segment to define a closed wire
+p1   = geompy.MakeVertex( 100.0,   0.0,  0.0 )
+p2   = geompy.MakeVertex(  50.0,  50.0,  0.0 )
+p3   = geompy.MakeVertex( 100.0, 100.0,  0.0 )
+arc1 = geompy.MakeArc( p1, p2, p3 )
+
+p4   = geompy.MakeVertex( 170.0, 100.0, 0.0 )
+seg1 = geompy.MakeVector( p3, p4 )
+
+p5   = geompy.MakeVertex( 200.0, 70.0, 0.0 )
+p6   = geompy.MakeVertex( 170.0, 40.0, 0.0 )
+arc2 = geompy.MakeArc( p4, p5, p6 )
+
+p7   = geompy.MakeVertex( 120.0, 30.0, 0.0 )
+arc3 = geompy.MakeArc( p6, p7, p1 )
+
+# ---- define a closed wire with arcs and segment
+List1 = []
+List1.append( arc1 )
+List1.append( seg1 )
+List1.append( arc2 )
+List1.append( arc3 )
+
+wire1 = geompy.MakeWire( List1 )
+Id_wire1 = geompy.addToStudy( wire1, "wire1" )
+
+# ---- define a planar face with wire
+WantPlanarFace = 1 #True
+face1 = geompy.MakeFace( wire1, WantPlanarFace )
+Id_face1 = geompy.addToStudy( face1, "face1" )
+
+# ---- create a shape by extrusion
+pO = geompy.MakeVertex( 0.0, 0.0,   0.0 )
+pz = geompy.MakeVertex( 0.0, 0.0, 100.0 )
+vz = geompy.MakeVector( pO, pz )
+
+prism1 = geompy.MakePrismVecH( face1, vz, 100.0 )
+Id_prism1 = geompy.addToStudy( prism1, "prism1")
+
+# ---- create two cylinders
+
+pc1 = geompy.MakeVertex(  90.0, 50.0, -40.0 )
+pc2 = geompy.MakeVertex( 170.0, 70.0, -40.0 )
+radius = 20.0
+height = 180.0
+cyl1  = geompy.MakeCylinder( pc1, vz, radius, height )
+cyl2  = geompy.MakeCylinder( pc2, vz, radius, height )
+
+Id_Cyl1 = geompy.addToStudy( cyl1, "cyl1" )
+Id_Cyl2 = geompy.addToStudy( cyl2, "cyl2" )
+
+# ---- cut with cyl1
+shape  = geompy.MakeBoolean( prism1, cyl1, 2 )
+
+# ---- fuse with cyl2 to obtain the final mechanic piece :)
+mechanic =  geompy.MakeBoolean( shape, cyl2, 3 )
+Id_mechanic = geompy.addToStudy( mechanic, "mechanic" )
+
+# ---- Analysis of the geometry
+
+print("Analysis of the geometry mechanic :")
+
+subShellList = geompy.SubShapeAll(mechanic,geompy.ShapeType["SHELL"])
+subFaceList  = geompy.SubShapeAll(mechanic,geompy.ShapeType["FACE"])
+subEdgeList  = geompy.SubShapeAll(mechanic,geompy.ShapeType["EDGE"])
+
+print("number of Shells in mechanic : ",len(subShellList))
+print("number of Faces in mechanic : ",len(subFaceList))
+print("number of Edges in mechanic : ",len(subEdgeList))
+
+### ---------------------------- SMESH --------------------------------------
+
+print("-------------------------- create Mesh, algorithm, hypothesis")
+
+mesh = smesh.Mesh(mechanic, "Mesh_mechanic");
+netgen = mesh.Triangle(smeshBuilder.NETGEN)
+netgen.SetMaxSize( 50 )
+#netgen.SetSecondOrder( 0 )
+netgen.SetFineness( smeshBuilder.Fine )
+netgen.SetQuadAllowed( 1 )
+#netgen.SetOptimize( 1 )
+
+print("-------------------------- compute mesh")
+ret = mesh.Compute()
+print(ret)
+if not ret:
+    raise Exception("Error when computing Mesh")
+
+print("Information about the MeshcompShel:")
+print("Number of nodes        : ", mesh.NbNodes())
+print("Number of edges        : ", mesh.NbEdges())
+print("Number of faces        : ", mesh.NbFaces())
+print("Number of triangles    : ", mesh.NbTriangles())
+print("Number of quadrangles  : ", mesh.NbQuadrangles())
+print("Number of volumes      : ", mesh.NbVolumes())
+print("Number of tetrahedrons : ", mesh.NbTetras())
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_mechanic_tetra.py b/test/SMESH_mechanic_tetra.py
new file mode 100644 (file)
index 0000000..4086b60
--- /dev/null
@@ -0,0 +1,163 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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_withHole.py
+#  Author : Lucien PIGNOLONI
+#  Module : SMESH
+#  $Header$
+#
+import salome
+salome.salome_init_without_session()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# ---------------------------- GEOM --------------------------------------
+
+# ---- define contiguous arcs and segment to define a closed wire
+p1   = geompy.MakeVertex( 100.0,   0.0,  0.0 )
+p2   = geompy.MakeVertex(  50.0,  50.0,  0.0 )
+p3   = geompy.MakeVertex( 100.0, 100.0,  0.0 )
+arc1 = geompy.MakeArc( p1, p2, p3 )
+
+p4   = geompy.MakeVertex( 170.0, 100.0, 0.0 )
+seg1 = geompy.MakeVector( p3, p4 )
+
+p5   = geompy.MakeVertex( 200.0, 70.0, 0.0 )
+p6   = geompy.MakeVertex( 170.0, 40.0, 0.0 )
+arc2 = geompy.MakeArc( p4, p5, p6 )
+
+p7   = geompy.MakeVertex( 120.0, 30.0, 0.0 )
+arc3 = geompy.MakeArc( p6, p7, p1 )
+
+# ---- define a closed wire with arcs and segment
+List1 = []
+List1.append( arc1 )
+List1.append( seg1 )
+List1.append( arc2 )
+List1.append( arc3 )
+
+wire1 = geompy.MakeWire( List1 )
+Id_wire1 = geompy.addToStudy( wire1, "wire1" )
+
+# ---- define a planar face with wire
+WantPlanarFace = 1 #True
+face1 = geompy.MakeFace( wire1, WantPlanarFace )
+Id_face1 = geompy.addToStudy( face1, "face1" )
+
+# ---- create a shape by extrusion
+pO = geompy.MakeVertex( 0.0, 0.0,   0.0 )
+pz = geompy.MakeVertex( 0.0, 0.0, 100.0 )
+vz = geompy.MakeVector( pO, pz )
+
+prism1 = geompy.MakePrismVecH( face1, vz, 100.0 )
+Id_prism1 = geompy.addToStudy( prism1, "prism1")
+
+# ---- create two cylinders
+
+pc1 = geompy.MakeVertex(  90.0, 50.0, -40.0 )
+pc2 = geompy.MakeVertex( 170.0, 70.0, -40.0 )
+radius = 20.0
+height = 180.0
+cyl1  = geompy.MakeCylinder( pc1, vz, radius, height )
+cyl2  = geompy.MakeCylinder( pc2, vz, radius, height )
+
+Id_Cyl1 = geompy.addToStudy( cyl1, "cyl1" )
+Id_Cyl2 = geompy.addToStudy( cyl2, "cyl2" )
+
+# ---- cut with cyl1
+shape  = geompy.MakeBoolean( prism1, cyl1, 2 )
+
+# ---- fuse with cyl2 to obtain the final mechanic piece :)
+mechanic =  geompy.MakeBoolean( shape, cyl2, 3 )
+Id_mechanic = geompy.addToStudy( mechanic, "mechanic" )
+
+# ---- Analysis of the geometry
+
+print("Analysis of the geometry mechanic :")
+
+subShellList = geompy.SubShapeAll(mechanic,geompy.ShapeType["SHELL"])
+subFaceList  = geompy.SubShapeAll(mechanic,geompy.ShapeType["FACE"])
+subEdgeList  = geompy.SubShapeAll(mechanic,geompy.ShapeType["EDGE"])
+
+print("number of Shells in mechanic : ",len(subShellList))
+print("number of Faces in mechanic : ",len(subFaceList))
+print("number of Edges in mechanic : ",len(subEdgeList))
+
+### ---------------------------- SMESH --------------------------------------
+
+shape_mesh = salome.IDToObject( Id_mechanic  )
+
+mesh = smesh.Mesh(shape_mesh, "Mesh_mechanic_tetra")
+
+print("-------------------------- add hypothesis to main mechanic")
+
+numberOfSegment = 10
+
+algo1 = mesh.Segment()
+hypNbSeg = algo1.NumberOfSegments(numberOfSegment)
+print(hypNbSeg.GetName())
+print(hypNbSeg.GetId())
+print(hypNbSeg.GetNumberOfSegments())
+smesh.SetName(hypNbSeg, "NumberOfSegments_" + str(numberOfSegment))
+
+
+maxElementArea = 20
+
+algo2 = mesh.Triangle()
+hypArea = algo2.MaxElementArea(maxElementArea)
+print(hypArea.GetName())
+print(hypArea.GetId())
+print(hypArea.GetMaxElementArea())
+smesh.SetName(hypArea, "MaxElementArea_" + str(maxElementArea))
+
+
+maxElementVolume = 20
+
+algo3 = mesh.Tetrahedron(smeshBuilder.NETGEN)
+hypVolume = algo3.MaxElementVolume(maxElementVolume)
+print(hypVolume.GetName())
+print(hypVolume.GetId())
+print(hypVolume.GetMaxElementVolume())
+smesh.SetName(hypVolume, "maxElementVolume_" + str(maxElementVolume))
+
+
+print("-------------------------- compute the mesh of the mechanic piece")
+isDone = mesh.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+print("Information about the Mesh_mechanic_tetra:")
+print("Number of nodes       : ", mesh.NbNodes())
+print("Number of edges       : ", mesh.NbEdges())
+print("Number of faces       : ", mesh.NbFaces())
+print("Number of triangles   : ", mesh.NbTriangles())
+print("Number of quadrangles: ", mesh.NbQuadrangles())
+print("Number of volumes     : ", mesh.NbVolumes())
+print("Number of tetrahedrons: ", mesh.NbTetras())
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_reg.py b/test/SMESH_reg.py
new file mode 100644 (file)
index 0000000..df568d8
--- /dev/null
@@ -0,0 +1,119 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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_reg.py
+#  Module : SMESH
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+from salome.StdMeshers import StdMeshersBuilder
+
+
+# ---- define a box
+print("Define box")
+box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
+idbox = geompy.addToStudy(box, "box")
+
+# ---- add faces of box to study
+print("Add faces to study")
+idface = []
+subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
+for f in subShapeList:
+  name = geompy.SubShapeName(f, box)
+  print(name)
+  idface.append( geompy.addToStudyInFather(box, f, name) )
+
+# ---- add edges of box to study
+print("Add edges to study")
+idedge = []
+subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["EDGE"])
+for f in subShapeList:
+  name = geompy.SubShapeName(f, box)
+  print(name)
+  idedge.append( geompy.addToStudyInFather(box, f, name) )
+
+salome.sg.updateObjBrowser()
+
+# ---- launch SMESH
+smeshgui = salome.ImportComponentGUI("SMESH")
+smeshgui.Init()
+smesh.UpdateStudy()
+
+# ---- Creating meshes
+
+box = salome.IDToObject(idbox)
+names = [ "MeshBoxReg", "MeshBoxScale", "MeshBoxTable", "MeshBoxExpr" ]
+
+
+print("-------------------------- Create ", names[0], " mesh")
+mesh = smesh.Mesh(box, names[0])
+algo = mesh.Segment()
+hyp = algo.NumberOfSegments(7)
+hyp.SetDistrType(0)
+smesh.SetName(hyp, "NumberOfSegmentsReg")
+algo = mesh.Triangle()
+algo.MaxElementArea(2500)
+
+print("-------------------------- Create ", names[1], " mesh")
+mesh = smesh.Mesh(box, names[1])
+algo = mesh.Segment()
+hyp = algo.NumberOfSegments(7)
+hyp.SetDistrType(1)
+hyp.SetScaleFactor(2)
+smesh.SetName(hyp, "NumberOfSegmentsScale")
+algo = mesh.Triangle()
+algo.MaxElementArea(2500)
+
+print("-------------------------- Create ", names[2], " mesh")
+mesh = smesh.Mesh(box,names[2])
+algo = mesh.Segment()
+hyp = algo.NumberOfSegments(7)
+hyp.SetDistrType(2)
+hyp.SetTableFunction( [0, 0.1, 0.5, 1.0, 1.0, 0.1] )
+hyp.SetConversionMode(0)
+smesh.SetName(hyp, "NumberOfSegmentsTable")
+algo = mesh.Triangle()
+algo.MaxElementArea(2500)
+
+print("-------------------------- Create ", names[3], " mesh")
+mesh = smesh.Mesh(box, names[3])
+algo = mesh.Segment()
+hyp = algo.NumberOfSegments(10)
+hyp.SetDistrType(3)
+hyp.SetExpressionFunction("sin(3*t)")
+hyp.SetConversionMode(1)
+smesh.SetName(hyp, "NumberOfSegmentsExpr")
+algo = mesh.Triangle()
+algo.MaxElementArea(2500)
+
+
+salome.sg.updateObjBrowser()
+
diff --git a/test/SMESH_test.py b/test/SMESH_test.py
new file mode 100644 (file)
index 0000000..fbb842c
--- /dev/null
@@ -0,0 +1,144 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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 SMESH_I : idl implementation based on 'SMESH' unit's classes
+#  File   : SMESH_test.py
+#  Module : SMESH
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# ---- define a box
+
+box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
+idb = geompy.addToStudy(box, "box")
+
+# ---- add first face of box in study
+
+subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
+face = subShapeList[0]
+name = geompy.SubShapeName(face, box)
+idf = geompy.addToStudyInFather(box, face, name)
+
+# ---- add shell from box  in study
+
+subShellList = geompy.SubShapeAll(box, geompy.ShapeType["SHELL"])
+shell = subShellList[0]
+name = geompy.SubShapeName(shell, box)
+ids = geompy.addToStudyInFather(box, shell, name)
+
+# ---- add first edge of face in study
+
+edgeList = geompy.SubShapeAll(face, geompy.ShapeType["EDGE"])
+edge = edgeList[0];
+name = geompy.SubShapeName(edge, face)
+ide = geompy.addToStudyInFather(face, edge, name)
+
+# ---- SMESH
+
+smesh.UpdateStudy()
+box = salome.IDToObject(idb)
+mesh = smesh.Mesh(box, "Meshbox")
+
+print("-------------------------- add hypothesis to box")
+
+hyp = mesh.Segment(box).LocalLength(100)
+print(hyp.GetName())
+print(hyp.GetId())
+print(hyp.GetLength())
+
+hyp = mesh.Triangle().MaxElementArea(5000)
+print(hyp.GetName())
+print(hyp.GetId())
+print(hyp.GetMaxElementArea())
+
+print("-------------------------- add hypothesis to edge")
+
+edge = salome.IDToObject(ide)
+
+hyp = mesh.Segment(edge).LocalLength(100)
+print(hyp.GetName())
+print(hyp.GetId())
+print(hyp.GetLength())
+
+print("-------------------------- compute face")
+
+face = salome.IDToObject(idf)
+
+ret = mesh.Compute(face)
+print(ret)
+if not ret:
+    raise Exception("Error when computing Mesh")
+
+log = [] #mesh.GetLog(0) # 0 - GetLog without ClearLog after, else if 1 - ClearLog after
+for a in log:
+    print("-------")
+    ii = 0
+    ir = 0
+    comType = a.commandType
+    if comType == 0:
+        for i in range(a.number):
+            ind = a.indexes[ii]
+            ii = ii+1
+            r1 = a.coords[ir]
+            ir = ir+1
+            r2 = a.coords[ir]
+            ir = ir+1
+            r3 = a.coords[ir]
+            ir = ir+1
+            print("AddNode %i - %g %g %g" % (ind, r1, r2, r3))
+    elif comType == 1:
+        for i in range(a.number):
+            ind = a.indexes[ii]
+            ii = ii+1
+            i1 = a.indexes[ii]
+            ii = ii+1
+            i2 = a.indexes[ii]
+            ii = ii+1
+            print("AddEdge %i - %i %i" % (ind, i1, i2))
+    elif comType == 2:
+        for i in range(a.number):
+            ind = a.indexes[ii]
+            print(ind)
+            ii = ii+1
+            print(ii)
+            i1 = a.indexes[ii]
+            ii = ii+1
+            i2 = a.indexes[ii]
+            print(i2)
+            ii = ii+1
+            print("ii", ii)
+            i3 = a.indexes[ii]
+            print(i3)
+            #ii = ii+1
+            ii = ii+1
+            print("AddTriangle %i - %i %i %i" % (ind, i1, i2, i3))
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_test0.py b/test/SMESH_test0.py
new file mode 100644 (file)
index 0000000..34557b4
--- /dev/null
@@ -0,0 +1,66 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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_test0.py
+#  Module : SMESH
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# ---- define a box
+
+box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
+idbox = geompy.addToStudy(box, "box")
+
+# ---- add first face of box in study
+
+subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
+face = subShapeList[0]
+name = geompy.SubShapeName(face, box)
+print(name)
+idface = geompy.addToStudyInFather(box, face, name)
+
+# ---- add shell from box  in study
+
+subShellList = geompy.SubShapeAll(box, geompy.ShapeType["SHELL"])
+shell = subShellList[0]
+name = geompy.SubShapeName(shell, box)
+print(name)
+idshell = geompy.addToStudyInFather(box, shell, name)
+
+# ---- add first edge of face in study
+
+edgeList = geompy.SubShapeAll(face, geompy.ShapeType["EDGE"])
+edge = edgeList[0]
+name = geompy.SubShapeName(edge, face)
+print(name)
+idedge = geompy.addToStudyInFather(face, edge, name)
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_test1.py b/test/SMESH_test1.py
new file mode 100644 (file)
index 0000000..ba1fa3c
--- /dev/null
@@ -0,0 +1,113 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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_test1.py
+#  Module : SMESH
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# ---- define a box
+
+box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
+idbox = geompy.addToStudy(box, "box")
+
+# ---- add first face of box in study
+
+subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
+face = subShapeList[0]
+name = geompy.SubShapeName(face, box)
+print(name)
+idface = geompy.addToStudyInFather(box, face, name)
+
+# ---- add shell from box  in study
+
+subShellList = geompy.SubShapeAll(box, geompy.ShapeType["SHELL"])
+shell = subShellList[0]
+name = geompy.SubShapeName(shell, box)
+print(name)
+idshell = geompy.addToStudyInFather(box, shell, name)
+
+# ---- add first edge of face in study
+
+edgeList = geompy.SubShapeAll(face, geompy.ShapeType["EDGE"])
+edge = edgeList[0]
+name = geompy.SubShapeName(edge, face)
+print(name)
+idedge = geompy.addToStudyInFather(face, edge, name)
+
+
+# ---- SMESH
+
+# ---- Init a Mesh with the box
+
+mesh = smesh.Mesh(box, "Meshbox")
+
+print("-------------------------- add hypothesis to box")
+algoReg1 = mesh.Segment()
+hypNbSeg1 = algoReg1.NumberOfSegments(7)
+print(hypNbSeg1.GetName())
+print(hypNbSeg1.GetId())
+print(hypNbSeg1.GetNumberOfSegments())
+smesh.SetName(hypNbSeg1, "NumberOfSegments_7")
+
+algoMef1 = mesh.Triangle()
+hypArea1 = algoMef1.MaxElementArea(2500)
+print(hypArea1.GetName())
+print(hypArea1.GetId())
+print(hypArea1.GetMaxElementArea())
+smesh.SetName(hypArea1, "MaxElementArea_2500")
+
+# ---- add hypothesis to edge
+print("-------------------------- add hypothesis to edge")
+edge = salome.IDToObject(idedge)
+
+algoReg2 = mesh.Segment(edge)
+hypLen1 = algoReg2.LocalLength(100)
+smesh.SetName(algoReg2.GetSubMesh(), "SubMeshEdge")
+print(hypLen1.GetName())
+print(hypLen1.GetId())
+print(hypLen1.GetLength())
+smesh.SetName(hypLen1, "Local_Length_100")
+
+# ---- add hypothesis to face
+print("-------------------------- add hypothesis to face")
+face = salome.IDToObject(idface)
+
+algoMef2 = mesh.Triangle(face)
+hypArea2 = algoMef2.MaxElementArea(500)
+smesh.SetName(algoMef2.GetSubMesh(), "SubMeshFace")
+print(hypArea2.GetName())
+print(hypArea2.GetId())
+print(hypArea2.GetMaxElementArea())
+smesh.SetName(hypArea2, "MaxElementArea_500")
+
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_test1_AndDisplay.py b/test/SMESH_test1_AndDisplay.py
new file mode 100644 (file)
index 0000000..7e766af
--- /dev/null
@@ -0,0 +1,120 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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_test1.py
+#  Module : SMESH
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# ---- define a box
+
+box = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
+idbox = geompy.addToStudy(box, "box")
+
+# ---- add first face of box in study
+
+subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
+face = subShapeList[0]
+name = geompy.SubShapeName(face, box)
+print(name)
+idface = geompy.addToStudyInFather(box, face, name)
+
+# ---- add shell from box  in study
+
+subShellList = geompy.SubShapeAll(box, geompy.ShapeType["SHELL"])
+shell = subShellList[0]
+name = geompy.SubShapeName(shell, box)
+print(name)
+idshell = geompy.addToStudyInFather(box, shell, name)
+
+# ---- add first edge of face in study
+
+edgeList = geompy.SubShapeAll(face, geompy.ShapeType["EDGE"])
+edge = edgeList[0]
+name = geompy.SubShapeName(edge, face)
+print(name)
+idedge = geompy.addToStudyInFather(face, edge, name)
+
+
+# ---- SMESH
+
+# ---- Init a Mesh with the box
+
+mesh = smesh.Mesh(box, "Meshbox")
+
+print("-------------------------- add hypothesis to box")
+algoReg1 = mesh.Segment()
+hypNbSeg1 = algoReg1.NumberOfSegments(7)
+print(hypNbSeg1.GetName())
+print(hypNbSeg1.GetId())
+print(hypNbSeg1.GetNumberOfSegments())
+smesh.SetName(hypNbSeg1, "NumberOfSegments_7")
+
+algoMef1 = mesh.Triangle()
+hypArea1 = algoMef1.MaxElementArea(2500)
+print(hypArea1.GetName())
+print(hypArea1.GetId())
+print(hypArea1.GetMaxElementArea())
+smesh.SetName(hypArea1, "MaxElementArea_2500")
+
+# ---- add hypothesis to edge
+print("-------------------------- add hypothesis to edge")
+edge = salome.IDToObject(idedge)
+
+algoReg2 = mesh.Segment(edge)
+hypLen1 = algoReg2.LocalLength(100)
+smesh.SetName(algoReg2.GetSubMesh(), "SubMeshEdge")
+print(hypLen1.GetName())
+print(hypLen1.GetId())
+print(hypLen1.GetLength())
+smesh.SetName(hypLen1, "Local_Length_100")
+
+# ---- add hypothesis to face
+print("-------------------------- add hypothesis to face")
+face = salome.IDToObject(idface)
+
+algoMef2 = mesh.Triangle(face)
+hypArea2 = algoMef2.MaxElementArea(500)
+smesh.SetName(algoMef2.GetSubMesh(), "SubMeshFace")
+print(hypArea2.GetName())
+print(hypArea2.GetId())
+print(hypArea2.GetMaxElementArea())
+smesh.SetName(hypArea2, "MaxElementArea_500")
+
+isDone = mesh.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+salome.sg.updateObjBrowser()
+
+sg = salome.ImportComponentGUI('SMESH')
+if not isinstance(sg, type(salome.salome_ComponentGUI)):
+    sg.CreateAndDisplayActor('0:1:2:3')
diff --git a/test/SMESH_test2.py b/test/SMESH_test2.py
new file mode 100644 (file)
index 0000000..9b24bd9
--- /dev/null
@@ -0,0 +1,41 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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_test2.py
+#  Module : SMESH
+#
+from SMESH_test1 import *
+
+# ---- compute box
+
+print("-------------------------- compute box")
+ret = mesh.Compute()
+print(ret)
+if not ret:
+    raise Exception("Error when computing Mesh")
+
+log = mesh.GetLog(0); # no erase trace
+# for linelog in log:
+#     print(linelog)
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_test3.py b/test/SMESH_test3.py
new file mode 100644 (file)
index 0000000..b575701
--- /dev/null
@@ -0,0 +1,104 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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_test3.py
+#  Module : SMESH
+#import salome
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+import math
+
+pi = math.pi
+
+# ---------------------------------------------
+xa = math.sin(pi/12)
+ya = 0
+za = math.cos(pi/12)
+
+xb = 0
+yb = math.sin(pi/18)
+zb = math.cos(pi/18)
+
+xc = math.cos(-pi/18)
+yc = 0
+zc = math.sin(-pi/18)
+
+rc1 = 150
+rc2 = 150
+rc3 = 150
+rc4 = 300
+
+hc1 = 300
+hc2 = 2*hc1
+hc3 = 2*hc1
+hc4 = 2*hc1
+
+# ---------------------------------------------
+point_0 = geompy.MakeVertex(0, 0, 0)
+point_z = geompy.MakeVertex(0, 0, 1)
+
+point_a = geompy.MakeVertex(xa, ya, za)
+point_b = geompy.MakeVertex(xb, yb, zb)
+point_c = geompy.MakeVertex(xc, yc, zc)
+
+dir_z = geompy.MakeVector(point_0, point_z)
+dir_a = geompy.MakeVector(point_0, point_a)
+dir_b = geompy.MakeVector(point_0, point_b)
+dir_c = geompy.MakeVector(point_0, point_c)
+
+axe_z = dir_z
+axe_a = dir_a
+axe_b = dir_b
+axe_c = dir_c
+
+cyl_1 = geompy.MakeCylinder(point_0, dir_z, rc1, hc1)
+
+cyl_t = geompy.MakeCylinder(point_0, dir_a, rc2, hc2)
+cyl_a = geompy.MakeTranslation(cyl_t, 1.2*rc1, 0.1*rc1, -0.5*hc1)
+
+cyl_t = geompy.MakeCylinder(point_0, dir_b, rc3, hc3)
+cyl_b = geompy.MakeTranslation(cyl_t, -1.2*rc1, -0.1*rc1, -0.5*hc1)
+
+cyl_t = geompy.MakeCylinder(point_0, dir_c, rc4, hc4)
+cyl_t = geompy.MakeRotation(cyl_t, axe_c, pi/2)
+cyl_c = geompy.MakeTranslation(cyl_t, -hc1, 0, 0)
+cyl_d = geompy.MakeTranslation(cyl_t, -hc1, 0, 1.3*rc4)
+
+inter_t = geompy.MakeBoolean(cyl_c,cyl_d, 1) # common
+
+blob_t = geompy.MakeBoolean(cyl_1, cyl_a, 2) # cut
+blob_t = geompy.MakeBoolean(blob_t, cyl_b, 2)
+
+blob = geompy.MakeBoolean(blob_t, inter_t, 1) # common
+
+idblob = geompy.addToStudy(blob,"blob")
+#idc = geompy.addToStudy(cyl_c,"cyl_c")
+#idd = geompy.addToStudy(cyl_d,"cyl_d")
diff --git a/test/SMESH_test4.py b/test/SMESH_test4.py
new file mode 100644 (file)
index 0000000..7b9f1dc
--- /dev/null
@@ -0,0 +1,81 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+
+# ---- GEOM
+
+box   = geompy.MakeBox(0., 0., 0., 100., 200., 300.)
+idbox = geompy.addToStudy(box, "box")
+
+subShapeList = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
+face   = subShapeList[0]
+name   = geompy.SubShapeName(face, box)
+idface = geompy.addToStudyInFather(box, face, name)
+
+box  = salome.IDToObject(idbox)
+face = salome.IDToObject(idface)
+
+# ---- SMESH
+
+smesh.UpdateStudy()
+mesh = smesh.Mesh(box, "Meshbox")
+
+# Set 1D algorithm/hypotheses to mesh
+algo1 = mesh.Segment()
+algo1.NumberOfSegments(10)
+
+# Set 2D algorithm/hypotheses to mesh
+algo2 = mesh.Triangle()
+algo2.MaxElementArea(10)
+
+# Create submesh on face
+algo3 = mesh.Segment(face)
+algo3.NumberOfSegments(10)
+algo4 = mesh.Triangle(face)
+algo4.MaxElementArea(100)
+submesh = algo4.GetSubMesh()
+smesh.SetName(submesh, "SubMeshFace")
+
+isDone = mesh.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+faces = submesh.GetElementsByType(SMESH.FACE)
+if len(faces) > 1:
+    print(len(faces), len(faces)/2)
+    group1 = mesh.CreateEmptyGroup(SMESH.FACE,"Group of faces")
+    group2 = mesh.CreateEmptyGroup(SMESH.FACE,"Another group of faces")
+    group1.Add(faces[:int(len(faces)/2)])
+    group2.Add(faces[int(len(faces)/2):])
+
+salome.sg.updateObjBrowser()
diff --git a/test/SMESH_test5.py b/test/SMESH_test5.py
new file mode 100644 (file)
index 0000000..38f390a
--- /dev/null
@@ -0,0 +1,79 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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_test5.py
+#  Module : SMESH
+#
+
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+import CORBA
+import os
+import shutil
+import tempfile
+
+aOutPath = tempfile.mkdtemp()
+
+def SetSObjName(theSObj,theName) :
+    ok, anAttr = theSObj.FindAttribute("AttributeName")
+    if ok:
+        aName = anAttr._narrow(SALOMEDS.AttributeName)
+        #print aName.__dict__
+        aName.SetValue(theName)
+
+def ConvertMED2UNV(theFile):
+    print(theFile)
+    aMeshes, aResult = smesh.CreateMeshesFromMED(theFile)
+    print(aMeshes, aResult)
+
+    for aMesh in aMeshes:
+        print(aMesh.GetName(), end=' ')
+        aMesh.SetName(os.path.basename(theFile))
+        print(aMesh.GetName())
+
+        aFileName = os.path.join(aOutPath, theFile + ".unv")
+        aMesh.ExportUNV(aFileName)
+
+        aMesh = smesh.CreateMeshesFromUNV(aFileName)
+        print(aMesh.GetName(), end=' ')
+        aMesh.SetName(os.path.basename(aFileName))
+        print(aMesh.GetName())
+
+aPath = os.path.join(os.getenv('DATA_DIR'), 'MedFiles')
+      
+for aFileName in sorted(os.listdir(aPath)):
+    if os.path.splitext(aFileName)[-1] == ".med":
+        ConvertMED2UNV(os.path.join(aPath, aFileName))
+
+if os.getenv('SMESH_KEEP_TMP_DIR') != '1':
+    shutil.rmtree(aOutPath)
+
+salome.sg.updateObjBrowser()
diff --git a/test/basic_geom_smesh_without_session.py b/test/basic_geom_smesh_without_session.py
new file mode 100644 (file)
index 0000000..c9084f8
--- /dev/null
@@ -0,0 +1,63 @@
+
+"""
+Most basic test of GEOM/SMESH usecase, but it can be tested without any session launched.
+"""
+
+import sys
+import salome
+
+import os
+salome.standalone() # <- key point of test is here
+salome.salome_init()
+import salome_notebook
+notebook = salome_notebook.NoteBook()
+
+###
+### GEOM component
+###
+
+import GEOM
+from salome.geom import geomBuilder
+import math
+import SALOMEDS
+
+geompy = geomBuilder.New()
+O = geompy.MakeVertex(0, 0, 0)
+OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
+OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
+OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
+Box_1 = geompy.MakeBoxDXDYDZ(200, 200, 200)
+geompy.addToStudy( O, 'O' )
+geompy.addToStudy( OX, 'OX' )
+geompy.addToStudy( OY, 'OY' )
+geompy.addToStudy( OZ, 'OZ' )
+geompy.addToStudy( Box_1, 'Box_1' )
+###
+### SMESH component
+###
+import  SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+
+smesh = smeshBuilder.New()
+smesh.SetEnablePublish( True ) # Set to False to avoid publish in study if not needed or in some particular situations:
+                                 # multiples meshes built in parallel, complex and numerous mesh edition (performance)
+Mesh_1 = smesh.Mesh(Box_1)
+NETGEN_1D_2D_3D = Mesh_1.Tetrahedron(algo=smeshBuilder.NETGEN_1D2D3D)
+isDone = Mesh_1.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+## Set names of Mesh objects
+smesh.SetName(NETGEN_1D_2D_3D.GetAlgorithm(), 'NETGEN 1D-2D-3D')
+smesh.SetName(Mesh_1.GetMesh(), 'Mesh_1')
+
+nbOfTetraExp = 5
+
+assert(Mesh_1.GetMesh().NbTetras()>=nbOfTetraExp)
+
+#Mesh_1.ExportMED("toto.med")
+
+import medcoupling as mc
+
+mv_mm = Mesh_1.ExportMEDCoupling()
+assert(mc.MEDCoupling1SGTUMesh(mv_mm[0]).getNumberOfCells()>=nbOfTetraExp)
diff --git a/test/basic_shaper_smesh_without_session.py b/test/basic_shaper_smesh_without_session.py
new file mode 100644 (file)
index 0000000..16a7a67
--- /dev/null
@@ -0,0 +1,75 @@
+
+"""
+Most basic test of SHAPE/SMESH usecase, but it can be tested without any session launched.
+"""
+
+import sys
+import salome
+salome.standalone() # <- key point of test is here
+salome.salome_init()
+
+#from salome.shaper import initConfig
+
+import os
+print(os.getpid())
+#input("AAA")
+###
+### SHAPER component
+###
+
+from salome.shaper import model
+model.begin()
+partSet = model.moduleDocument()
+
+### Create Part
+Part_1 = model.addPart(partSet)
+Part_1_doc = Part_1.document()
+
+### Create Box
+Box_1 = model.addBox(Part_1_doc, 10, 10, 10)
+
+model.end()
+
+###
+### SHAPERSTUDY component
+###
+#import pdb; pdb.set_trace()
+model.publishToShaperStudy()
+import SHAPERSTUDY
+#import pdb; pdb.set_trace()
+Box_1_1, = SHAPERSTUDY.shape(model.featureStringId(Box_1))
+###
+### SMESH component
+###
+
+import  SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+
+smesh = smeshBuilder.New()
+#smesh.SetEnablePublish( False ) # Set to False to avoid publish in study if not needed or in some particular situations:
+                                 # multiples meshes built in parallel, complex and numerous mesh edition (performance)
+
+Mesh_1 = smesh.Mesh(Box_1_1)
+NETGEN_1D_2D_3D = Mesh_1.Tetrahedron(algo=smeshBuilder.NETGEN_1D2D3D)
+NETGEN_3D_Parameters_1 = NETGEN_1D_2D_3D.Parameters()
+NETGEN_3D_Parameters_1.SetMaxSize( 5 )
+NETGEN_3D_Parameters_1.SetMinSize( 1 )
+NETGEN_3D_Parameters_1.SetSecondOrder( 0 )
+NETGEN_3D_Parameters_1.SetOptimize( 1 )
+NETGEN_3D_Parameters_1.SetFineness( 2 )
+NETGEN_3D_Parameters_1.SetChordalError( -1 )
+NETGEN_3D_Parameters_1.SetChordalErrorEnabled( 0 )
+NETGEN_3D_Parameters_1.SetUseSurfaceCurvature( 1 )
+NETGEN_3D_Parameters_1.SetFuseEdges( 1 )
+NETGEN_3D_Parameters_1.SetQuadAllowed( 0 )
+NETGEN_3D_Parameters_1.SetCheckChartBoundary( 152 )
+isDone = Mesh_1.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+## Set names of Mesh objects
+smesh.SetName(NETGEN_1D_2D_3D.GetAlgorithm(), 'NETGEN 1D-2D-3D')
+smesh.SetName(Mesh_1.GetMesh(), 'Mesh_1')
+smesh.SetName(NETGEN_3D_Parameters_1, 'NETGEN 3D Parameters_1')
+
+assert(Mesh_1.GetMesh().NbTetras()>=5)
diff --git a/test/basic_smesh_output_with_mc_field.py b/test/basic_smesh_output_with_mc_field.py
new file mode 100644 (file)
index 0000000..8b2727d
--- /dev/null
@@ -0,0 +1,179 @@
+#!/usr/bin/env python
+
+import sys
+import salome
+
+import unittest
+
+class SMESHExportOfFieldsInMemory(unittest.TestCase):
+
+  def testMEDCouplingFieldOnCells(self):
+    """
+    Test focuses on ExportMEDCoupling method in the context of MED_CELL field output.
+    """
+    salome.standalone()
+    salome.salome_init()
+    ###
+    ### SHAPER component
+    ###
+
+    from salome.shaper import model
+
+    model.begin()
+    partSet = model.moduleDocument()
+
+    ### Create Part
+    Part_1 = model.addPart(partSet)
+    Part_1_doc = Part_1.document()
+
+    ### Create Box
+    Box_1 = model.addBox(Part_1_doc, 10, 10, 10)
+
+    ### Create Plane
+    Plane_4 = model.addPlane(Part_1_doc, model.selection("FACE", "PartSet/XOY"), 5, False)
+
+    ### Create Plane
+    Plane_5 = model.addPlane(Part_1_doc, model.selection("FACE", "PartSet/YOZ"), 5, False)
+
+    ### Create Partition
+    Partition_1_objects = [model.selection("FACE", "Plane_1"),
+                          model.selection("FACE", "Plane_2"),
+                          model.selection("SOLID", "Box_1_1")]
+    Partition_1 = model.addPartition(Part_1_doc, Partition_1_objects, keepSubResults = True)
+
+    ### Create Field
+    Field_1_objects = [model.selection("SOLID", "Partition_1_1_2"),
+                      model.selection("SOLID", "Partition_1_1_4"),
+                      model.selection("SOLID", "Partition_1_1_1"),
+                      model.selection("SOLID", "Partition_1_1_3")]
+    Field_1 = model.addField(Part_1_doc, 1, "DOUBLE", 1, ["Comp 1"], Field_1_objects)
+    Field_1.addStep(0, 0, [[0], [1], [2], [3], [4]])
+
+
+    model.end()
+
+    ###
+    ### SHAPERSTUDY component
+    ###
+
+    model.publishToShaperStudy()
+    import SHAPERSTUDY
+    Partition_1_1, Field_1_1 = SHAPERSTUDY.shape(model.featureStringId(Partition_1))
+    ###
+    ### SMESH component
+    ###
+
+    import  SMESH, SALOMEDS
+    from salome.smesh import smeshBuilder
+
+    smesh = smeshBuilder.New()
+    #smesh.SetEnablePublish( False ) # Set to False to avoid publish in study if not needed or in some particular situations:
+                                    # multiples meshes built in parallel, complex and numerous mesh edition (performance)
+
+    Mesh_1 = smesh.Mesh(Partition_1_1)
+    Regular_1D = Mesh_1.Segment()
+    Local_Length_1 = Regular_1D.LocalLength(5,None,1e-07)
+    Quadrangle_2D = Mesh_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
+    Hexa_3D = Mesh_1.Hexahedron(algo=smeshBuilder.Hexa)
+    isDone = Mesh_1.Compute()
+    if not isDone:
+      raise Exception("Error when computing Mesh")
+    smesh.SetName(Mesh_1, 'Mesh_1')
+
+    #### Mesh_1.ExportMED( r'Mesh_with_one_field_on_cells.med', 0, 41, 1, Mesh_1.GetMesh(), 1, [ Field_1_1 ], '',-1 )
+    mfd = Mesh_1.ExportMEDCoupling(0, Mesh_1.GetMesh(), 1, [ Field_1_1 ], '',-1 )#### <- important line of test is here !
+
+    self.assertEqual(len(mfd.getMeshes()),1)
+    self.assertEqual(len(mfd.getFields()),1)
+    f = mfd.getFields()[0][0].field(mfd.getMeshes()[0])
+    f.checkConsistencyLight()
+    import medcoupling
+    self.assertEqual(f.getDiscretization().getEnum(),medcoupling.ON_CELLS)
+    self.assertTrue(f.getMesh().getNumberOfCells()>1)
+    pass
+
+
+  def testMEDCouplingFieldOnNodes(self):
+    """
+    Test focuses on ExportMEDCoupling method in the context of MED_NODES field output.
+    """
+    salome.standalone()
+    salome.salome_init()
+
+    ###
+    ### SHAPER component
+    ###
+
+    from salome.shaper import model
+
+    model.begin()
+    partSet = model.moduleDocument()
+
+    ### Create Part
+    Part_1 = model.addPart(partSet)
+    Part_1_doc = Part_1.document()
+
+    ### Create Box
+    Box_1 = model.addBox(Part_1_doc, 10, 10, 10)
+
+    ### Create Plane
+    Plane_4 = model.addPlane(Part_1_doc, model.selection("FACE", "PartSet/XOY"), 5, False)
+
+    ### Create Plane
+    Plane_5 = model.addPlane(Part_1_doc, model.selection("FACE", "PartSet/YOZ"), 5, False)
+
+    ### Create Partition
+    Partition_1_objects = [model.selection("FACE", "Plane_1"),
+                          model.selection("FACE", "Plane_2"),
+                          model.selection("SOLID", "Box_1_1")]
+    Partition_1 = model.addPartition(Part_1_doc, Partition_1_objects, keepSubResults = True)
+
+    ### Create Field
+    Field_2_objects = [model.selection("VERTEX", "[Partition_1_1_2/Modified_Face&Box_1_1/Back][Partition_1_1_2/Modified_Face&Box_1_1/Left][Partition_1_1_2/Modified_Face&Box_1_1/Top]"),
+                      model.selection("VERTEX", "Partition_1_1_2/Generated_Vertex&Plane_2/Plane_2&new_weak_name_1"),
+                      model.selection("VERTEX", "[Partition_1_1_4/Modified_Face&Box_1_1/Front][Partition_1_1_4/Modified_Face&Box_1_1/Left][Partition_1_1_4/Modified_Face&Box_1_1/Top]"),
+                      model.selection("VERTEX", "Partition_1_1_1/Generated_Vertex&Plane_1/Plane_1&new_weak_name_1"),
+                      model.selection("VERTEX", "[Partition_1_1_1/Modified_Face&Box_1_1/Left][Partition_1_1_1/Modified_Face&Plane_1/Plane_1][Partition_1_1_1/Modified_Face&Plane_2/Plane_2]"),
+                      model.selection("VERTEX", "Partition_1_1_3/Generated_Vertex&Plane_1/Plane_1&new_weak_name_1"),
+                      model.selection("VERTEX", "[Partition_1_1_1/Modified_Face&Box_1_1/Back][Partition_1_1_1/Modified_Face&Box_1_1/Left][Partition_1_1_1/Modified_Face&Box_1_1/Bottom]"),
+                      model.selection("VERTEX", "Partition_1_1_1/Generated_Vertex&Plane_2/Plane_2&new_weak_name_1"),
+                      model.selection("VERTEX", "[Partition_1_1_3/Modified_Face&Box_1_1/Left][Partition_1_1_3/Modified_Face&Box_1_1/Bottom][Partition_1_1_3/Modified_Face&Box_1_1/Front]")]
+    Field_2 = model.addField(Part_1_doc, 1, "DOUBLE", 1, ["Comp 1"], Field_2_objects)
+    Field_2.addStep(0, 0, [[0], [1], [2], [3], [4], [5], [6], [7], [8], [9]])
+
+    model.end()
+
+    ###
+    ### SHAPERSTUDY component
+    ###
+
+    model.publishToShaperStudy()
+    import SHAPERSTUDY
+    Partition_1_1, Field_2_1 = SHAPERSTUDY.shape(model.featureStringId(Partition_1))
+    ###
+    ### SMESH component
+    ###
+
+    import  SMESH, SALOMEDS
+    from salome.smesh import smeshBuilder
+
+    smesh = smeshBuilder.New()
+    #smesh.SetEnablePublish( False ) # Set to False to avoid publish in study if not needed or in some particular situations:
+                                    # multiples meshes built in parallel, complex and numerous mesh edition (performance)
+
+    Mesh_1 = smesh.Mesh(Partition_1_1)
+    Regular_1D = Mesh_1.Segment()
+    Local_Length_1 = Regular_1D.LocalLength(5,None,1e-07)
+    Quadrangle_2D = Mesh_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
+    Hexa_3D = Mesh_1.Hexahedron(algo=smeshBuilder.Hexa)
+    isDone = Mesh_1.Compute()
+    if not isDone:
+      raise Exception("Error when computing Mesh")
+    smesh.SetName(Mesh_1, 'Mesh_1')
+
+    # 23th of june 2021 : Bug both in ExportMED and in ExportMEDCoupling
+    #Mesh_1.ExportMED( r'/tmp/Mesh_with_one_field_on_nodes.med', 0, 41, 1, Mesh_1.GetMesh(), 1, [ Field_2_1 ], '',-1 )
+    #mfd = Mesh_1.ExportMEDCoupling(0,Mesh_1.GetMesh(), 1, [ Field_2_1 ], '',-1)
+
+if __name__ == '__main__':
+    unittest.main()
diff --git a/test/blocFissure_01_without_session.py b/test/blocFissure_01_without_session.py
new file mode 100644 (file)
index 0000000..14c186f
--- /dev/null
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""Tests de blocFissure ; en standalone
+
+Cas tests basés sur les matériels :
+. cubeAngle
+. cubeFin
+
+Copyright 2021 EDF
+Gérald NICOLAS
++33.1.78.19.43.52
+"""
+
+__revision__ = "V02.04"
+
+import os
+import sys
+
+# Lancement des cas-tests
+import salome
+salome.standalone()
+salome.salome_init_without_session()
+
+from blocFissure.CasTests.blocFissureTest import blocFissureTest
+BLOCFISSURE_TEST = blocFissureTest(["cubeAngle", "cubeAngle_2","cubeCoin", "cubeMilieu", "cubeTransverse"])
+MESSAGE_ERREUR = BLOCFISSURE_TEST.lancement()
+#sys.stdout.write(MESSAGE_ERREUR)
+del BLOCFISSURE_TEST
+
+# Diagnostic
+if MESSAGE_ERREUR:
+  if ( "NOOK" in MESSAGE_ERREUR ):
+    LAUX = MESSAGE_ERREUR.split()
+    ERREUR = int(LAUX[LAUX.index("NOOK")+2])
+  else:
+    ERREUR = 0
+else:
+  MESSAGE_ERREUR = "Impossible de trouver le diagnostic de la procédure de tests."
+  ERREUR = -1
+
+if ERREUR:
+  sys.stderr.write(MESSAGE_ERREUR)
+  #raise Exception(MESSAGE_ERREUR)
+  assert(False)
+
diff --git a/test/blocFissure_02_without_session.py b/test/blocFissure_02_without_session.py
new file mode 100644 (file)
index 0000000..49e0e83
--- /dev/null
@@ -0,0 +1,49 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""Tests de blocFissure ; en standalone
+
+Cas tests basés sur les matériels :
+. decoupeCylindre
+. disque_perce
+. fissureGauche
+. fissureGauche_2
++ ellipse, ellipse_disque, ellipse_probleme
+
+Copyright 2021 EDF
+Gérald NICOLAS
++33.1.78.19.43.52
+"""
+
+__revision__ = "V02.04"
+
+import os
+import sys
+
+# Lancement des cas-tests
+import salome
+salome.standalone()
+salome.salome_init_without_session()
+
+from blocFissure.CasTests.blocFissureTest import blocFissureTest
+BLOCFISSURE_TEST = blocFissureTest(["cylindre", "cylindre_2", "disquePerce", "faceGauche","ellipse_1", "ellipse_2"])
+#BLOCFISSURE_TEST = blocFissureTest(["cylindre", "cylindre_2", "disquePerce", "faceGauche","ellipse_1", "ellipse_2", "faceGauche_2"])
+MESSAGE_ERREUR = BLOCFISSURE_TEST.lancement()
+#sys.stdout.write(MESSAGE_ERREUR)
+del BLOCFISSURE_TEST
+
+# Diagnostic
+if MESSAGE_ERREUR:
+  if ( "NOOK" in MESSAGE_ERREUR ):
+    LAUX = MESSAGE_ERREUR.split()
+    ERREUR = int(LAUX[LAUX.index("NOOK")+2])
+  else:
+    ERREUR = 0
+else:
+  MESSAGE_ERREUR = "Impossible de trouver le diagnostic de la procédure de tests."
+  ERREUR = -1
+
+if ERREUR:
+  sys.stderr.write(MESSAGE_ERREUR)
+  #raise Exception(MESSAGE_ERREUR)
+  assert(False)
+
diff --git a/test/blocFissure_03_without_session.py b/test/blocFissure_03_without_session.py
new file mode 100644 (file)
index 0000000..2b2f8ad
--- /dev/null
@@ -0,0 +1,45 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""Tests de blocFissure ; en standalone
+
+Cas tests basés sur les matériels :
+. eprouvetteCourbe
+. eprouvetteDroite
+
+Copyright 2021 EDF
+Gérald NICOLAS
++33.1.78.19.43.52
+"""
+
+__revision__ = "V02.03"
+
+import os
+import sys
+
+# Lancement des cas-tests
+import salome
+salome.standalone()
+salome.salome_init_without_session()
+
+from blocFissure.CasTests.blocFissureTest import blocFissureTest
+BLOCFISSURE_TEST = blocFissureTest(["eprouvetteCourbe", "eprouvetteDroite", "eprouvetteDroite_2"])
+MESSAGE_ERREUR = BLOCFISSURE_TEST.lancement()
+#sys.stdout.write(MESSAGE_ERREUR)
+del BLOCFISSURE_TEST
+
+# Diagnostic
+if MESSAGE_ERREUR:
+  if ( "NOOK" in MESSAGE_ERREUR ):
+    LAUX = MESSAGE_ERREUR.split()
+    ERREUR = int(LAUX[LAUX.index("NOOK")+2])
+  else:
+    ERREUR = 0
+else:
+  MESSAGE_ERREUR = "Impossible de trouver le diagnostic de la procédure de tests."
+  ERREUR = -1
+
+if ERREUR:
+  sys.stderr.write(MESSAGE_ERREUR)
+  #raise Exception(MESSAGE_ERREUR)
+  assert(False)
+
diff --git a/test/blocFissure_04_without_session.py b/test/blocFissure_04_without_session.py
new file mode 100644 (file)
index 0000000..0474743
--- /dev/null
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""Tests de blocFissure ; en standalone
+
+Cas tests basés sans matériels (1/3)
+
+Copyright 2021 EDF
+Gérald NICOLAS
++33.1.78.19.43.52
+"""
+
+__revision__ = "V02.03"
+
+import os
+import sys
+
+# Lancement des cas-tests
+import salome
+salome.standalone()
+salome.salome_init_without_session()
+
+from blocFissure.CasTests.blocFissureTest import blocFissureTest
+BLOCFISSURE_TEST = blocFissureTest(["fissureCoude_1", "fissureCoude_2", "fissureCoude_3", "fissureCoude_4", "fissureCoude_5"])
+MESSAGE_ERREUR = BLOCFISSURE_TEST.lancement()
+#sys.stdout.write(MESSAGE_ERREUR)
+del BLOCFISSURE_TEST
+
+# Diagnostic
+if MESSAGE_ERREUR:
+  if ( "NOOK" in MESSAGE_ERREUR ):
+    LAUX = MESSAGE_ERREUR.split()
+    ERREUR = int(LAUX[LAUX.index("NOOK")+2])
+  else:
+    ERREUR = 0
+else:
+  MESSAGE_ERREUR = "Impossible de trouver le diagnostic de la procédure de tests."
+  ERREUR = -1
+
+if ERREUR:
+  sys.stderr.write(MESSAGE_ERREUR)
+  #raise Exception(MESSAGE_ERREUR)
+  assert(False)
+
diff --git a/test/blocFissure_05_without_session.py b/test/blocFissure_05_without_session.py
new file mode 100644 (file)
index 0000000..b86a2ee
--- /dev/null
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""Tests de blocFissure ; en standalone
+
+Cas tests basés sans matériels (1/3)
+
+Copyright 2021 EDF
+Gérald NICOLAS
++33.1.78.19.43.52
+"""
+
+__revision__ = "V02.03"
+
+import os
+import sys
+
+# Lancement des cas-tests
+import salome
+salome.standalone()
+salome.salome_init_without_session()
+
+from blocFissure.CasTests.blocFissureTest import blocFissureTest
+BLOCFISSURE_TEST = blocFissureTest(["fissureCoude_6", "fissureCoude_7", "fissureCoude_8", "fissureCoude_9", "fissureCoude_10"])
+MESSAGE_ERREUR = BLOCFISSURE_TEST.lancement()
+#sys.stdout.write(MESSAGE_ERREUR)
+del BLOCFISSURE_TEST
+
+# Diagnostic
+if MESSAGE_ERREUR:
+  if ( "NOOK" in MESSAGE_ERREUR ):
+    LAUX = MESSAGE_ERREUR.split()
+    ERREUR = int(LAUX[LAUX.index("NOOK")+2])
+  else:
+    ERREUR = 0
+else:
+  MESSAGE_ERREUR = "Impossible de trouver le diagnostic de la procédure de tests."
+  ERREUR = -1
+
+if ERREUR:
+  sys.stderr.write(MESSAGE_ERREUR)
+  #raise Exception(MESSAGE_ERREUR)
+  assert(False)
+
diff --git a/test/blocFissure_06_without_session.py b/test/blocFissure_06_without_session.py
new file mode 100644 (file)
index 0000000..fd2ef82
--- /dev/null
@@ -0,0 +1,43 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""Tests de blocFissure ; en standalone
+
+Cas tests basés sans matériels (1/3)
+
+Copyright 2021 EDF
+Gérald NICOLAS
++33.1.78.19.43.52
+"""
+
+__revision__ = "V02.03"
+
+import os
+import sys
+
+# Lancement des cas-tests
+import salome
+salome.standalone()
+salome.salome_init_without_session()
+
+from blocFissure.CasTests.blocFissureTest import blocFissureTest
+BLOCFISSURE_TEST = blocFissureTest(["fissure_Coude", "fissure_Coude_4"])
+MESSAGE_ERREUR = BLOCFISSURE_TEST.lancement()
+#sys.stdout.write(MESSAGE_ERREUR)
+del BLOCFISSURE_TEST
+
+# Diagnostic
+if MESSAGE_ERREUR:
+  if ( "NOOK" in MESSAGE_ERREUR ):
+    LAUX = MESSAGE_ERREUR.split()
+    ERREUR = int(LAUX[LAUX.index("NOOK")+2])
+  else:
+    ERREUR = 0
+else:
+  MESSAGE_ERREUR = "Impossible de trouver le diagnostic de la procédure de tests."
+  ERREUR = -1
+
+if ERREUR:
+  sys.stderr.write(MESSAGE_ERREUR)
+  #raise Exception(MESSAGE_ERREUR)
+  assert(False)
+
diff --git a/test/blocFissure_07_without_session.py b/test/blocFissure_07_without_session.py
new file mode 100644 (file)
index 0000000..d4d3836
--- /dev/null
@@ -0,0 +1,46 @@
+#!/usr/bin/env python
+# -*- coding: utf-8 -*-
+"""Tests de blocFissure ; en standalone
+
+Cas tests basés sur les matériels :
+. vis
+. tube
+
+Copyright 2021 EDF
+Gérald NICOLAS
++33.1.78.19.43.52
+"""
+
+__revision__ = "V02.04"
+
+import os
+import sys
+
+# Lancement des cas-tests
+import salome
+salome.standalone()
+salome.salome_init_without_session()
+
+from blocFissure.CasTests.blocFissureTest import blocFissureTest
+BLOCFISSURE_TEST = blocFissureTest(["vis_1"])
+#BLOCFISSURE_TEST = blocFissureTest(["vis_1", "tube"])
+MESSAGE_ERREUR = BLOCFISSURE_TEST.lancement()
+#sys.stdout.write(MESSAGE_ERREUR)
+del BLOCFISSURE_TEST
+
+# Diagnostic
+if MESSAGE_ERREUR:
+  if ( "NOOK" in MESSAGE_ERREUR ):
+    LAUX = MESSAGE_ERREUR.split()
+    ERREUR = int(LAUX[LAUX.index("NOOK")+2])
+  else:
+    ERREUR = 0
+else:
+  MESSAGE_ERREUR = "Impossible de trouver le diagnostic de la procédure de tests."
+  ERREUR = -1
+
+if ERREUR:
+  sys.stderr.write(MESSAGE_ERREUR)
+  #raise Exception(MESSAGE_ERREUR)
+  assert(False)
+
diff --git a/test/body_fitting_quanta_sphere.py b/test/body_fitting_quanta_sphere.py
new file mode 100644 (file)
index 0000000..553d6f7
--- /dev/null
@@ -0,0 +1,50 @@
+#!/usr/bin/env python
+
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+O = geompy.MakeVertex(0, 0, 0)
+OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
+OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
+OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
+Sphere_1 = geompy.MakeSphereR(100)
+geompy.addToStudy( O, 'O' )
+geompy.addToStudy( OX, 'OX' )
+geompy.addToStudy( OY, 'OY' )
+geompy.addToStudy( OZ, 'OZ' )
+geompy.addToStudy( Sphere_1, 'Sphere_1' )
+
+Mesh_1 = smesh.Mesh(Sphere_1,'Mesh_1')
+Cartesian_3D = Mesh_1.BodyFitted()
+Body_Fitting_Parameters_1 = Cartesian_3D.SetGrid([ [ '34.641' ], [ 0, 1 ]],[ [ '34.641' ], [ 0, 1 ]],[ [ '34.641' ], [ 0, 1 ]],4,0)
+Body_Fitting_Parameters_1.SetToUseQuanta( 1 )
+Body_Fitting_Parameters_1.SetQuanta( 0.8 )
+isDone = Mesh_1.Compute()
+
+Polys   = Mesh_1.NbPolyhedrons()
+Hexas1  = Mesh_1.NbHexas()
+
+#No polyhedrons in the mesh
+assert(Polys==0)
+
+Body_Fitting_Parameters_1.SetQuanta( 0.2 )
+isDone = Mesh_1.Compute()
+
+Polys   = Mesh_1.NbPolyhedrons()
+Hexas2  = Mesh_1.NbHexas()
+
+#Still no polyhedrons in the mesh
+assert(Polys==0)
+
+#Numher of hexahedrons is bigger for hexas2 becuase quanta value is smaller
+assert( Hexas1 < Hexas2 )
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser()
diff --git a/test/body_fitting_viscous_layer_cylinder.py b/test/body_fitting_viscous_layer_cylinder.py
new file mode 100644 (file)
index 0000000..e50568a
--- /dev/null
@@ -0,0 +1,90 @@
+#!/usr/bin/env python
+
+import math
+import sys
+import salome
+
+# Parameters
+
+r = 6
+h = 20
+
+###
+### SHAPER component
+###
+
+from salome.shaper import model
+
+model.begin()
+partSet = model.moduleDocument()
+
+### Create Part
+Part_1 = model.addPart(partSet)
+Part_1_doc = Part_1.document()
+
+### Create Cylinder
+Cylinder_1 = model.addCylinder(Part_1_doc, model.selection("VERTEX", "PartSet/Origin"), model.selection("EDGE", "PartSet/OZ"), r, h)
+
+### Create Group
+Group_1 = model.addGroup(Part_1_doc, "Faces", [model.selection("FACE", "Cylinder_1_1/Face_3")])
+Group_1.setName("Inlet")
+Group_1.result().setName("Inlet")
+
+### Create Group
+Group_2 = model.addGroup(Part_1_doc, "Faces", [model.selection("FACE", "Cylinder_1_1/Face_2")])
+Group_2.setName("Outlet")
+Group_2.result().setName("Outlet")
+
+### Create Group
+Group_3 = model.addGroup(Part_1_doc, "Faces", [model.selection("FACE", "Cylinder_1_1/Face_1")])
+Group_3.setName("Wall")
+Group_3.result().setName("Wall")
+
+model.end()
+
+###
+### SHAPERSTUDY component
+###
+
+model.publishToShaperStudy()
+import SHAPERSTUDY
+Cylinder_1_1, Inlet, Outlet, Wall, = SHAPERSTUDY.shape(model.featureStringId(Cylinder_1))
+###
+### SMESH component
+###
+
+import  SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+
+smesh = smeshBuilder.New()
+
+Mesh_1 = smesh.Mesh(Cylinder_1_1,'Mesh_1')
+Cartesian_3D = Mesh_1.BodyFitted()
+Body_Fitting_Parameters_1 = Cartesian_3D.SetGrid([ [ '1' ], [ 0, 1 ]],[ [ '1' ], [ 0, 1 ]],[ [ '1' ], [ 0, 1 ]],10000,1)
+Body_Fitting_Parameters_1.SetToCreateFaces( 1 )
+
+width_layer = 1
+Viscous_Layers_1 = Cartesian_3D.ViscousLayers(width_layer,3,1.2,[ Inlet, Outlet ],1,smeshBuilder.SURF_OFFSET_SMOOTH,'Viscous_Layers')
+
+isDone = Mesh_1.Compute()
+
+if not isDone:
+  raise Exception("Mesh_1 not computed")
+
+# Check volume of mesh
+volume_mesh = Mesh_1.GetVolume()
+volume_geom = math.pi*r**2*h
+
+assert abs(volume_mesh-volume_geom)/volume_geom < 1e-2
+
+# Check volume of Viscous layer
+gr_Viscous_Layers = Mesh_1.GetGroupByName("Viscous_Layers")[0]
+
+volume_mesh_VL = smesh.GetVolume(gr_Viscous_Layers)
+volume_geom_VL = volume_geom - math.pi*(r-width_layer)**2*h
+
+assert abs(volume_mesh_VL-volume_geom_VL)/volume_geom_VL < 1e-2
+
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser()
diff --git a/test/body_fitting_viscous_layer_tpipe.py b/test/body_fitting_viscous_layer_tpipe.py
new file mode 100644 (file)
index 0000000..ec2f52a
--- /dev/null
@@ -0,0 +1,110 @@
+#!/usr/bin/env python
+
+import sys
+import salome
+
+salome.salome_init()
+
+###
+### SHAPER component
+###
+
+from salome.shaper import model
+
+model.begin()
+partSet = model.moduleDocument()
+
+### Create Part
+Part_1 = model.addPart(partSet)
+Part_1_doc = Part_1.document()
+
+### Create Cylinder
+Cylinder_1 = model.addCylinder(Part_1_doc, model.selection("VERTEX", "PartSet/Origin"), model.selection("EDGE", "PartSet/OZ"), 0.5, 5)
+
+### Create Point
+Point_2 = model.addPoint(Part_1_doc, -3, 0, 1.5)
+
+### Create Cylinder
+Cylinder_2 = model.addCylinder(Part_1_doc, model.selection("VERTEX", "Point_1"), model.selection("EDGE", "PartSet/OX"), 0.3, 3)
+
+### Create Fuse
+Fuse_1 = model.addFuse(Part_1_doc, [model.selection("SOLID", "Cylinder_1_1"), model.selection("SOLID", "Cylinder_2_1")], keepSubResults = True)
+
+### Create Group
+Group_1 = model.addGroup(Part_1_doc, "Faces", [model.selection("FACE", "Cylinder_2_1/Face_3")])
+Group_1.setName("Inlet_x")
+Group_1.result().setName("Inlet_x")
+Group_1.result().setColor(0, 85, 255)
+
+### Create Group
+Group_2 = model.addGroup(Part_1_doc, "Faces", [model.selection("FACE", "Cylinder_1_1/Face_3")])
+Group_2.setName("Inlet_z")
+Group_2.result().setName("Inlet_z")
+Group_2.result().setColor(170, 0, 0)
+
+### Create Group
+Group_3 = model.addGroup(Part_1_doc, "Faces", [model.selection("FACE", "Cylinder_1_1/Face_2")])
+Group_3.setName("Outlet")
+Group_3.result().setName("Outlet")
+Group_3.result().setColor(255, 170, 0)
+
+### Create Group
+Group_4 = model.addGroup(Part_1_doc, "Faces", [model.selection("FACE", "Fuse_1_1/Modified_Face&Cylinder_1_1/Face_1"), model.selection("FACE", "Fuse_1_1/Modified_Face&Cylinder_2_1/Face_1")])
+Group_4.setName("Wall")
+Group_4.result().setName("Wall")
+Group_4.result().setColor(85, 255, 0)
+
+### Create Group
+Group_5 = model.addGroup(Part_1_doc, "Vertices", [model.selection("VERTEX", "Fuse_1_1/Generated_Vertex&Cylinder_1_1/Face_1")])
+Group_5.setName("corner")
+Group_5.result().setName("corner")
+
+model.end()
+
+###
+### SHAPERSTUDY component
+###
+
+model.publishToShaperStudy()
+import SHAPERSTUDY
+Fuse_1_1, Inlet_x, Inlet_z, Outlet, Wall, corner, = SHAPERSTUDY.shape(model.featureStringId(Fuse_1))
+
+###
+### SMESH component
+###
+
+import  SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+
+smesh = smeshBuilder.New()
+
+Mesh_1 = smesh.Mesh(Fuse_1_1,'Mesh_1')
+Cartesian_3D_1 = Mesh_1.BodyFitted()
+CartesianParameters3D = Cartesian_3D_1.SetGrid([ [ '0.05' ], [ 0, 1 ]],[ [ '0.05' ], [ 0, 1 ]],[ [ '0.05' ], [ 0, 1 ]],5e+07,1)
+CartesianParameters3D.SetToCreateFaces( 1 )
+ViscousLayers_0_05_3 = Cartesian_3D_1.ViscousLayers(0.05,3,1.1,[ Inlet_x, Inlet_z, Outlet ],1,smeshBuilder.SURF_OFFSET_SMOOTH,'Viscous_Layers')
+
+isDone = Mesh_1.Compute()
+
+if not isDone:
+  raise Exception("Mesh_1 not computed")
+
+# Check volume of mesh
+volume_mesh = Mesh_1.GetVolume()
+volume_geom = 4.640535669879
+
+assert abs(volume_mesh-volume_geom)/volume_geom < 0.005
+
+# Check volume of Viscous layer
+gr_Viscous_Layers = Mesh_1.GetGroupByName("Viscous_Layers")[0]
+
+volume_mesh_VL = smesh.GetVolume(gr_Viscous_Layers)
+volume_geom_reduced = 3.685108989376
+volume_geom_VL = volume_geom - volume_geom_reduced
+
+assert abs(volume_mesh_VL-volume_geom_VL)/volume_geom_VL < 0.005
+
+
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser()
diff --git a/test/create_penta_biquad.py b/test/create_penta_biquad.py
new file mode 100644 (file)
index 0000000..c13f25c
--- /dev/null
@@ -0,0 +1,42 @@
+# -*- coding: utf-8 -*-
+
+import sys
+import salome
+
+salome.salome_init_without_session()
+
+import  SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+
+smesh = smeshBuilder.New()
+unPentaBiQuad = smesh.Mesh()
+nodeID = unPentaBiQuad.AddNode( 0, 0, 0 )
+nodeID = unPentaBiQuad.AddNode( 10, 0, 0 )
+nodeID = unPentaBiQuad.AddNode( 0, 10, 0 )
+nodeID = unPentaBiQuad.AddNode( 0, 0, 10 )
+nodeID = unPentaBiQuad.AddNode( 10, 0, 10 )
+nodeID = unPentaBiQuad.AddNode( 0, 10, 10 )
+nodeID = unPentaBiQuad.AddNode( 5, 0, 0 )
+nodeID = unPentaBiQuad.AddNode( 7, 7, 0 )
+nodeID = unPentaBiQuad.AddNode( 0, 5, 0 )
+nodeID = unPentaBiQuad.AddNode( 5, 0, 10 )
+nodeID = unPentaBiQuad.AddNode( 7, 7, 10 )
+nodeID = unPentaBiQuad.AddNode( 0, 5, 10 )
+nodeID = unPentaBiQuad.AddNode( 0, 0, 5 )
+nodeID = unPentaBiQuad.AddNode( 10, 0, 5 )
+nodeID = unPentaBiQuad.AddNode( 0, 10, 5 )
+nodeID = unPentaBiQuad.AddNode( 5, -1, 5 )
+nodeID = unPentaBiQuad.AddNode( 8, 8, 5 )
+nodeID = unPentaBiQuad.AddNode( -1, 5, 5 )
+volID = unPentaBiQuad.AddVolume( [ 4, 5, 6, 1, 2, 3, 10, 11, 12, 7, 8, 9, 13, 14, 15, 16, 17, 18 ] )
+
+infos = unPentaBiQuad.GetMeshInfo()
+print("Number of biquadratic pentahedrons:", infos[SMESH.Entity_BiQuad_Penta])
+if (infos[SMESH.Entity_BiQuad_Penta] != 1):
+  raise RuntimeError("Bad number of biquadratic pentahedrons: should be 1")
+
+## Set names of Mesh objects
+smesh.SetName(unPentaBiQuad.GetMesh(), 'unPentaBiQuad')
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser()
diff --git a/test/data/Mesh_tri.med b/test/data/Mesh_tri.med
new file mode 100644 (file)
index 0000000..e5a1984
Binary files /dev/null and b/test/data/Mesh_tri.med differ
diff --git a/test/doublenodes_polyhedra.py b/test/doublenodes_polyhedra.py
new file mode 100644 (file)
index 0000000..ae85b61
--- /dev/null
@@ -0,0 +1,233 @@
+#!/usr/bin/env python
+
+import sys
+import salome
+
+salome.standalone()
+salome.salome_init()
+
+###
+### SHAPER component
+###
+
+from salome.shaper import model
+
+model.begin()
+partSet = model.moduleDocument()
+
+### Create Part
+Part_1 = model.addPart(partSet)
+Part_1_doc = Part_1.document()
+
+### Create Sketch
+Sketch_1 = model.addSketch(Part_1_doc, model.defaultPlane("XOZ"))
+
+### Create SketchLine
+SketchLine_1 = Sketch_1.addLine(100, 0, 0, 0)
+
+### Create SketchProjection
+SketchProjection_1 = Sketch_1.addProjection(model.selection("VERTEX", "PartSet/Origin"), False)
+SketchPoint_1 = SketchProjection_1.createdFeature()
+Sketch_1.setCoincident(SketchLine_1.endPoint(), SketchPoint_1.result())
+
+### Create SketchLine
+SketchLine_2 = Sketch_1.addLine(0, 0, 0, 100)
+
+### Create SketchLine
+SketchLine_3 = Sketch_1.addLine(0, 100, 100, 100)
+
+### Create SketchLine
+SketchLine_4 = Sketch_1.addLine(100, 100, 100, 0)
+Sketch_1.setCoincident(SketchLine_4.endPoint(), SketchLine_1.startPoint())
+Sketch_1.setCoincident(SketchLine_1.endPoint(), SketchLine_2.startPoint())
+Sketch_1.setCoincident(SketchLine_2.endPoint(), SketchLine_3.startPoint())
+Sketch_1.setCoincident(SketchLine_3.endPoint(), SketchLine_4.startPoint())
+Sketch_1.setHorizontal(SketchLine_1.result())
+Sketch_1.setVertical(SketchLine_2.result())
+Sketch_1.setHorizontal(SketchLine_3.result())
+Sketch_1.setVertical(SketchLine_4.result())
+Sketch_1.setEqual(SketchLine_3.result(), SketchLine_4.result())
+Sketch_1.setLength(SketchLine_1.result(), 100)
+
+### Create SketchLine
+SketchLine_5 = Sketch_1.addLine(0, 50, 100, 50)
+Sketch_1.setCoincident(SketchLine_5.startPoint(), SketchLine_2.result())
+Sketch_1.setCoincident(SketchLine_5.endPoint(), SketchLine_4.result())
+Sketch_1.setHorizontal(SketchLine_5.result())
+
+### Create SketchLine
+SketchLine_6 = Sketch_1.addLine(50, 50.00000000000001, 50, 0)
+Sketch_1.setCoincident(SketchLine_6.endPoint(), SketchLine_1.result())
+Sketch_1.setVertical(SketchLine_6.result())
+Sketch_1.setCoincident(SketchLine_6.startPoint(), SketchLine_5.result())
+Sketch_1.setMiddlePoint(SketchLine_6.startPoint(), SketchLine_5.result())
+Sketch_1.setMiddlePoint(SketchLine_5.startPoint(), SketchLine_2.result())
+model.do()
+
+### Create Extrusion
+Extrusion_1 = model.addExtrusion(Part_1_doc, [model.selection("COMPOUND", "Sketch_1")], model.selection(), 100, 0, "Faces|Wires")
+
+### Create Group
+Group_1 = model.addGroup(Part_1_doc, "Faces", [model.selection("FACE", "Extrusion_1_1_1/Generated_Face&Sketch_1/SketchLine_5"), model.selection("FACE", "(Extrusion_1_1_3/Generated_Face&Sketch_1/SketchLine_4)(Extrusion_1_1_3/From_Face)(Extrusion_1_1_3/To_Face)(Extrusion_1_1_3/Generated_Face&Sketch_1/SketchLine_3)2(Extrusion_1_1_3/Generated_Face&Sketch_1/SketchLine_2)2")])
+Group_1.setName("crack_1")
+Group_1.result().setName("crack_1")
+
+### Create Group
+Group_2 = model.addGroup(Part_1_doc, "Faces", [model.selection("FACE", "Extrusion_1_1_1/Generated_Face&Sketch_1/SketchLine_6")])
+Group_2.setName("crack_2")
+Group_2.result().setName("crack_2")
+
+### Create Group
+Group_3 = model.addGroup(Part_1_doc, "Faces", [model.selection("COMPSOLID", "Extrusion_1_1")])
+Group_3.setName("all_faces")
+Group_3.result().setName("all_faces")
+
+### Create GroupSubstraction
+GroupSubstraction_1 = model.addGroupSubstraction(Part_1_doc, [model.selection("COMPOUND", "all_faces")], [model.selection("COMPOUND", "crack_1"), model.selection("COMPOUND", "crack_2")])
+GroupSubstraction_1.result().setName("sides")
+
+### Create Group
+Group_4 = model.addGroup(Part_1_doc, "Edges", [model.selection("EDGE", "[Extrusion_1_1_3/Generated_Face&Sketch_1/SketchLine_3][Extrusion_1_1_3/To_Face]")])
+Group_4.setName("top_edge")
+Group_4.result().setName("top_edge")
+
+### Create Group
+Group_5 = model.addGroup(Part_1_doc, "Solids", [model.selection("SOLID", "Extrusion_1_1_3")])
+Group_5.setName("Solid_1")
+Group_5.result().setName("Solid_1")
+
+### Create Group
+Group_6 = model.addGroup(Part_1_doc, "Solids", [model.selection("SOLID", "Extrusion_1_1_1")])
+Group_6.setName("Solid_2")
+Group_6.result().setName("Solid_2")
+
+### Create Group
+Group_7 = model.addGroup(Part_1_doc, "Solids", [model.selection("SOLID", "Extrusion_1_1_2")])
+Group_7.setName("Solid_3")
+Group_7.result().setName("Solid_3")
+
+model.end()
+
+###
+### SHAPERSTUDY component
+###
+
+model.publishToShaperStudy()
+import SHAPERSTUDY
+shapes = SHAPERSTUDY.shape(model.featureStringId(Extrusion_1))
+
+Extrusion_1_1 = shapes[0]
+groups = shapes[1:]
+
+# dict of groups by their name
+d_groups = {}
+for gr in groups:
+  name = gr.GetName()
+  d_groups[name] = gr
+
+###
+### SMESH component
+###
+
+import  SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+
+smesh = smeshBuilder.New()
+
+# Create an hexahedral mesh or polyhedral mesh
+# @param algo: "hexahedra", "polyhedra" or "polygons"
+def createMesh(algo):
+  
+  nb_segs = 5
+  Mesh_1 = smesh.Mesh(Extrusion_1_1)
+  mesh_name = "Mesh_%s"%algo
+  Mesh_1.SetName(mesh_name)
+
+  algo_1d = Mesh_1.Segment()
+  algo_1d.NumberOfSegments(nb_segs)
+
+  if algo == "hexahedra":
+    Mesh_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
+    Mesh_1.Hexahedron(algo=smeshBuilder.Hexa)
+  elif algo == "polyhedra":
+    Mesh_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
+    Mesh_1.Polyhedron()
+  elif algo == "polygons":
+    Mesh_1.Polygon()
+    Mesh_1.Polyhedron()
+  else:
+    raise Exception("not expected algo: ", algo)
+
+  d_mesh_groups = {}
+  # Create group of faces
+  for name, gr in d_groups.items():
+    if name.startswith("crack") or name.startswith("Solid_"):
+      gr_mesh = Mesh_1.Group(gr)
+      d_mesh_groups[name] = gr_mesh
+
+  # Group on nodes
+  gr_sides_1 = Mesh_1.GroupOnGeom(d_groups["sides"],'sides',SMESH.NODE)
+
+  # sub-mesh on top edge
+  algo_1d_sub = Mesh_1.Segment(geom=d_groups["top_edge"])
+  algo_1d_sub.NumberOfSegments(2*nb_segs)
+  algo_1d_sub.Propagation()
+
+  isDone = Mesh_1.Compute()
+  if not isDone:
+    raise Exception("Error when computing Mesh")
+
+  nb_nodes = Mesh_1.NbNodes()
+  # Create 2 cracks by two calls of DoubleNodeElemGroups
+
+  # FIRST CRACK
+  # get affected elements on crack_1
+  [ affectedVolumes_1, affectedFaces_1, affectedEdges_1 ] = Mesh_1.AffectedElemGroupsInRegion( [ d_mesh_groups["crack_1" ] ], [ gr_sides_1 ], None )
+  # affectedVolumes_1 is d_mesh_groups["Solid_1"] => use one or the other
+  # double nodes on crack_1
+  [ crack_1_double_faces, crack_1_double_nodes ] = Mesh_1.DoubleNodeElemGroups( [ d_mesh_groups["crack_1" ] ], [ gr_sides_1 ], [ affectedVolumes_1, affectedFaces_1, affectedEdges_1 ], 1, 1 )
+
+  # check new nodes were added
+  new_nb_nodes_1 = Mesh_1.NbNodes()
+  assert new_nb_nodes_1 > nb_nodes
+  
+  # check number of new nodes
+  if algo != "polygons":
+    assert new_nb_nodes_1-nb_nodes == (nb_segs*2-1)*(nb_segs-1)
+  else:
+    assert new_nb_nodes_1-nb_nodes == nb_segs-1
+
+  # check new nodes where affected to volume elements
+  affectedVolumes_1_nodes = affectedVolumes_1.GetNodeIDs()
+  for n in range(nb_nodes +1, new_nb_nodes_1):
+    assert n in affectedVolumes_1_nodes, "New node not affected to affectedVolumes_1 in %s"%mesh_name
+
+  # SECOND CRACK
+  # get affected elements on crack_2
+  [ affectedVolumes_2, affectedFaces_2, affectedEdges_2 ] = Mesh_1.AffectedElemGroupsInRegion( [ d_mesh_groups["crack_2" ] ], [ gr_sides_1 ], None )
+  # double nodes on crack_2
+  # affectedVolumes_2 is d_mesh_groups["Solid_3"] => use one or the other
+  [ crack_2_double_faces, crack_2_double_nodes ] = Mesh_1.DoubleNodeElemGroups( [ d_mesh_groups["crack_2" ] ], [ gr_sides_1 ], [ affectedVolumes_2, affectedFaces_2, affectedEdges_2 ], 1, 1 )
+
+  # check new nodes were added
+  new_nb_nodes_2 = Mesh_1.NbNodes()
+  assert new_nb_nodes_2 > new_nb_nodes_1
+  
+  # check number of new nodes
+  if algo != "polygons":
+    assert new_nb_nodes_2-new_nb_nodes_1 == (nb_segs-1)*nb_segs
+  else:
+    assert new_nb_nodes_2-new_nb_nodes_1 == nb_segs-1
+
+  # check new nodes where affected to volume elements
+  affectedVolumes_2_nodes = affectedVolumes_2.GetNodeIDs()
+  for n in range(new_nb_nodes_1 +1, new_nb_nodes_2):
+    assert n in affectedVolumes_2_nodes, "New node not affected to affectedVolumes_2 in %s"%mesh_name
+
+createMesh("hexahedra")
+createMesh("polyhedra")
+createMesh("polygons")
+
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser()
diff --git a/test/ex00_all.py b/test/ex00_all.py
new file mode 100644 (file)
index 0000000..89bc9fb
--- /dev/null
@@ -0,0 +1,46 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# ==================================
+# Load all examples
+# -----------------
+#
+import ex01_cube2build
+import ex02_cube2primitive
+import ex03_cube2partition
+import ex04_cube5tetraHexa
+import ex05_hole1build
+import ex06_hole1boolean
+import ex07_hole1partition
+import ex08_hole2build
+import ex09_grid4build
+import ex10_grid4geometry
+import ex11_grid3partition
+import ex12_grid17partition
+import ex13_hole1partial
+import ex14_cyl1holed
+import ex15_cyl2geometry
+import ex16_cyl2complementary
+import ex17_dome1
+import ex18_dome2
+import ex19_sphereINcube
diff --git a/test/ex01_cube2build.py b/test/ex01_cube2build.py
new file mode 100644 (file)
index 0000000..8ecafd1
--- /dev/null
@@ -0,0 +1,328 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# =======================================
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# Geometry
+# ========
+
+# A small cube centered and put on a great cube build by points, edges, faces and solids
+
+# Points
+# ------
+
+greatPoint111 = geompy.MakeVertex( 0,  0,  0)
+greatPoint211 = geompy.MakeVertex(10,  0,  0)
+greatPoint311 = geompy.MakeVertex(20,  0,  0)
+greatPoint411 = geompy.MakeVertex(30,  0,  0)
+
+greatPoint121 = geompy.MakeVertex( 0, 10,  0)
+greatPoint221 = geompy.MakeVertex(10, 10,  0)
+greatPoint321 = geompy.MakeVertex(20, 10,  0)
+greatPoint421 = geompy.MakeVertex(30, 10,  0)
+
+greatPoint112 = geompy.MakeVertex( 0,  0, 10)
+greatPoint212 = geompy.MakeVertex(10,  0, 10)
+greatPoint312 = geompy.MakeVertex(20,  0, 10)
+greatPoint412 = geompy.MakeVertex(30,  0, 10)
+
+greatPoint122 = geompy.MakeVertex( 0, 10, 10)
+greatPoint222 = geompy.MakeVertex(10, 10, 10)
+greatPoint322 = geompy.MakeVertex(20, 10, 10)
+greatPoint422 = geompy.MakeVertex(30, 10, 10)
+
+greatPoint113 = geompy.MakeVertex( 0,  0, 20)
+greatPoint213 = geompy.MakeVertex(10,  0, 20)
+greatPoint313 = geompy.MakeVertex(20,  0, 20)
+greatPoint413 = geompy.MakeVertex(30,  0, 20)
+
+greatPoint123 = geompy.MakeVertex( 0, 10, 20)
+greatPoint223 = geompy.MakeVertex(10, 10, 20)
+greatPoint323 = geompy.MakeVertex(20, 10, 20)
+greatPoint423 = geompy.MakeVertex(30, 10, 20)
+
+greatPoint114 = geompy.MakeVertex( 0,  0, 30)
+greatPoint214 = geompy.MakeVertex(10,  0, 30)
+greatPoint314 = geompy.MakeVertex(20,  0, 30)
+greatPoint414 = geompy.MakeVertex(30,  0, 30)
+
+greatPoint124 = geompy.MakeVertex( 0, 10, 30)
+greatPoint224 = geompy.MakeVertex(10, 10, 30)
+greatPoint324 = geompy.MakeVertex(20, 10, 30)
+greatPoint424 = geompy.MakeVertex(30, 10, 30)
+
+
+smallPoint111 = greatPoint222
+smallPoint211 = greatPoint322
+smallPoint121 = geompy.MakeVertex(10, 20, 10)
+smallPoint221 = geompy.MakeVertex(20, 20, 10)
+
+smallPoint112 = greatPoint223
+smallPoint212 = greatPoint323
+smallPoint122 = geompy.MakeVertex(10, 20, 20)
+smallPoint222 = geompy.MakeVertex(20, 20, 20)
+
+# Edges
+# -----
+
+smallEdgeX11 = geompy.MakeEdge(smallPoint111, smallPoint211)
+smallEdgeX21 = geompy.MakeEdge(smallPoint121, smallPoint221)
+smallEdgeX12 = geompy.MakeEdge(smallPoint112, smallPoint212)
+smallEdgeX22 = geompy.MakeEdge(smallPoint122, smallPoint222)
+
+smallEdgeY11 = geompy.MakeEdge(smallPoint111, smallPoint121)
+smallEdgeY21 = geompy.MakeEdge(smallPoint211, smallPoint221)
+smallEdgeY12 = geompy.MakeEdge(smallPoint112, smallPoint122)
+smallEdgeY22 = geompy.MakeEdge(smallPoint212, smallPoint222)
+
+smallEdgeZ11 = geompy.MakeEdge(smallPoint111, smallPoint112)
+smallEdgeZ21 = geompy.MakeEdge(smallPoint211, smallPoint212)
+smallEdgeZ12 = geompy.MakeEdge(smallPoint121, smallPoint122)
+smallEdgeZ22 = geompy.MakeEdge(smallPoint221, smallPoint222)
+
+
+greatEdgeX111 = geompy.MakeEdge(greatPoint111, greatPoint211)
+greatEdgeX211 = geompy.MakeEdge(greatPoint211, greatPoint311)
+greatEdgeX311 = geompy.MakeEdge(greatPoint311, greatPoint411)
+greatEdgeX121 = geompy.MakeEdge(greatPoint121, greatPoint221)
+greatEdgeX221 = geompy.MakeEdge(greatPoint221, greatPoint321)
+greatEdgeX321 = geompy.MakeEdge(greatPoint321, greatPoint421)
+
+greatEdgeX112 = geompy.MakeEdge(greatPoint112, greatPoint212)
+greatEdgeX212 = geompy.MakeEdge(greatPoint212, greatPoint312)
+greatEdgeX312 = geompy.MakeEdge(greatPoint312, greatPoint412)
+greatEdgeX122 = geompy.MakeEdge(greatPoint122, greatPoint222)
+greatEdgeX222 = smallEdgeX11
+greatEdgeX322 = geompy.MakeEdge(greatPoint322, greatPoint422)
+
+greatEdgeX113 = geompy.MakeEdge(greatPoint113, greatPoint213)
+greatEdgeX213 = geompy.MakeEdge(greatPoint213, greatPoint313)
+greatEdgeX313 = geompy.MakeEdge(greatPoint313, greatPoint413)
+greatEdgeX123 = geompy.MakeEdge(greatPoint123, greatPoint223)
+greatEdgeX223 = smallEdgeX12
+greatEdgeX323 = geompy.MakeEdge(greatPoint323, greatPoint423)
+
+greatEdgeX114 = geompy.MakeEdge(greatPoint114, greatPoint214)
+greatEdgeX214 = geompy.MakeEdge(greatPoint214, greatPoint314)
+greatEdgeX314 = geompy.MakeEdge(greatPoint314, greatPoint414)
+greatEdgeX124 = geompy.MakeEdge(greatPoint124, greatPoint224)
+greatEdgeX224 = geompy.MakeEdge(greatPoint224, greatPoint324)
+greatEdgeX324 = geompy.MakeEdge(greatPoint324, greatPoint424)
+
+greatEdgeY11 = geompy.MakeEdge(greatPoint111, greatPoint121)
+greatEdgeY21 = geompy.MakeEdge(greatPoint211, greatPoint221)
+greatEdgeY31 = geompy.MakeEdge(greatPoint311, greatPoint321)
+greatEdgeY41 = geompy.MakeEdge(greatPoint411, greatPoint421)
+
+greatEdgeY12 = geompy.MakeEdge(greatPoint112, greatPoint122)
+greatEdgeY22 = geompy.MakeEdge(greatPoint212, greatPoint222)
+greatEdgeY32 = geompy.MakeEdge(greatPoint312, greatPoint322)
+greatEdgeY42 = geompy.MakeEdge(greatPoint412, greatPoint422)
+
+greatEdgeY13 = geompy.MakeEdge(greatPoint113, greatPoint123)
+greatEdgeY23 = geompy.MakeEdge(greatPoint213, greatPoint223)
+greatEdgeY33 = geompy.MakeEdge(greatPoint313, greatPoint323)
+greatEdgeY43 = geompy.MakeEdge(greatPoint413, greatPoint423)
+
+greatEdgeY14 = geompy.MakeEdge(greatPoint114, greatPoint124)
+greatEdgeY24 = geompy.MakeEdge(greatPoint214, greatPoint224)
+greatEdgeY34 = geompy.MakeEdge(greatPoint314, greatPoint324)
+greatEdgeY44 = geompy.MakeEdge(greatPoint414, greatPoint424)
+
+greatEdgeZ111 = geompy.MakeEdge(greatPoint111, greatPoint112)
+greatEdgeZ211 = geompy.MakeEdge(greatPoint211, greatPoint212)
+greatEdgeZ311 = geompy.MakeEdge(greatPoint311, greatPoint312)
+greatEdgeZ411 = geompy.MakeEdge(greatPoint411, greatPoint412)
+
+greatEdgeZ121 = geompy.MakeEdge(greatPoint121, greatPoint122)
+greatEdgeZ221 = geompy.MakeEdge(greatPoint221, greatPoint222)
+greatEdgeZ321 = geompy.MakeEdge(greatPoint321, greatPoint322)
+greatEdgeZ421 = geompy.MakeEdge(greatPoint421, greatPoint422)
+
+greatEdgeZ112 = geompy.MakeEdge(greatPoint112, greatPoint113)
+greatEdgeZ212 = geompy.MakeEdge(greatPoint212, greatPoint213)
+greatEdgeZ312 = geompy.MakeEdge(greatPoint312, greatPoint313)
+greatEdgeZ412 = geompy.MakeEdge(greatPoint412, greatPoint413)
+
+greatEdgeZ122 = geompy.MakeEdge(greatPoint122, greatPoint123)
+greatEdgeZ222 = smallEdgeZ11
+greatEdgeZ322 = smallEdgeZ21
+greatEdgeZ422 = geompy.MakeEdge(greatPoint422, greatPoint423)
+
+greatEdgeZ113 = geompy.MakeEdge(greatPoint113, greatPoint114)
+greatEdgeZ213 = geompy.MakeEdge(greatPoint213, greatPoint214)
+greatEdgeZ313 = geompy.MakeEdge(greatPoint313, greatPoint314)
+greatEdgeZ413 = geompy.MakeEdge(greatPoint413, greatPoint414)
+
+greatEdgeZ123 = geompy.MakeEdge(greatPoint123, greatPoint124)
+greatEdgeZ223 = geompy.MakeEdge(greatPoint223, greatPoint224)
+greatEdgeZ323 = geompy.MakeEdge(greatPoint323, greatPoint324)
+greatEdgeZ423 = geompy.MakeEdge(greatPoint423, greatPoint424)
+
+# Faces
+# -----
+
+smallFaceX1 = geompy.MakeQuad(smallEdgeY11, smallEdgeZ11, smallEdgeY12, smallEdgeZ12)
+smallFaceX2 = geompy.MakeQuad(smallEdgeY21, smallEdgeZ21, smallEdgeY22, smallEdgeZ22)
+smallFaceY1 = geompy.MakeQuad(smallEdgeX11, smallEdgeZ11, smallEdgeX12, smallEdgeZ21)
+smallFaceY2 = geompy.MakeQuad(smallEdgeX21, smallEdgeZ12, smallEdgeX22, smallEdgeZ22)
+smallFaceZ1 = geompy.MakeQuad(smallEdgeX11, smallEdgeY11, smallEdgeX21, smallEdgeY21)
+smallFaceZ2 = geompy.MakeQuad(smallEdgeX12, smallEdgeY12, smallEdgeX22, smallEdgeY22)
+
+
+greatFaceX11 = geompy.MakeQuad(greatEdgeY11, greatEdgeZ111, greatEdgeY12, greatEdgeZ121)
+greatFaceX21 = geompy.MakeQuad(greatEdgeY21, greatEdgeZ211, greatEdgeY22, greatEdgeZ221)
+greatFaceX31 = geompy.MakeQuad(greatEdgeY31, greatEdgeZ311, greatEdgeY32, greatEdgeZ321)
+greatFaceX41 = geompy.MakeQuad(greatEdgeY41, greatEdgeZ411, greatEdgeY42, greatEdgeZ421)
+
+greatFaceX12 = geompy.MakeQuad(greatEdgeY12, greatEdgeZ112, greatEdgeY13, greatEdgeZ122)
+greatFaceX22 = geompy.MakeQuad(greatEdgeY22, greatEdgeZ212, greatEdgeY23, greatEdgeZ222)
+greatFaceX32 = geompy.MakeQuad(greatEdgeY32, greatEdgeZ312, greatEdgeY33, greatEdgeZ322)
+greatFaceX42 = geompy.MakeQuad(greatEdgeY42, greatEdgeZ412, greatEdgeY43, greatEdgeZ422)
+
+greatFaceX13 = geompy.MakeQuad(greatEdgeY13, greatEdgeZ113, greatEdgeY14, greatEdgeZ123)
+greatFaceX23 = geompy.MakeQuad(greatEdgeY23, greatEdgeZ213, greatEdgeY24, greatEdgeZ223)
+greatFaceX33 = geompy.MakeQuad(greatEdgeY33, greatEdgeZ313, greatEdgeY34, greatEdgeZ323)
+greatFaceX43 = geompy.MakeQuad(greatEdgeY43, greatEdgeZ413, greatEdgeY44, greatEdgeZ423)
+
+greatFaceY111 = geompy.MakeQuad(greatEdgeX111, greatEdgeZ111, greatEdgeX112, greatEdgeZ211)
+greatFaceY211 = geompy.MakeQuad(greatEdgeX211, greatEdgeZ211, greatEdgeX212, greatEdgeZ311)
+greatFaceY311 = geompy.MakeQuad(greatEdgeX311, greatEdgeZ311, greatEdgeX312, greatEdgeZ411)
+greatFaceY121 = geompy.MakeQuad(greatEdgeX121, greatEdgeZ121, greatEdgeX122, greatEdgeZ221)
+greatFaceY221 = geompy.MakeQuad(greatEdgeX221, greatEdgeZ221, greatEdgeX222, greatEdgeZ321)
+greatFaceY321 = geompy.MakeQuad(greatEdgeX321, greatEdgeZ321, greatEdgeX322, greatEdgeZ421)
+
+greatFaceY112 = geompy.MakeQuad(greatEdgeX112, greatEdgeZ112, greatEdgeX113, greatEdgeZ212)
+greatFaceY212 = geompy.MakeQuad(greatEdgeX212, greatEdgeZ212, greatEdgeX213, greatEdgeZ312)
+greatFaceY312 = geompy.MakeQuad(greatEdgeX312, greatEdgeZ312, greatEdgeX313, greatEdgeZ412)
+greatFaceY122 = geompy.MakeQuad(greatEdgeX122, greatEdgeZ122, greatEdgeX123, greatEdgeZ222)
+greatFaceY222 = smallFaceY1
+greatFaceY322 = geompy.MakeQuad(greatEdgeX322, greatEdgeZ322, greatEdgeX323, greatEdgeZ422)
+
+greatFaceY113 = geompy.MakeQuad(greatEdgeX113, greatEdgeZ113, greatEdgeX114, greatEdgeZ213)
+greatFaceY213 = geompy.MakeQuad(greatEdgeX213, greatEdgeZ213, greatEdgeX214, greatEdgeZ313)
+greatFaceY313 = geompy.MakeQuad(greatEdgeX313, greatEdgeZ313, greatEdgeX314, greatEdgeZ413)
+greatFaceY123 = geompy.MakeQuad(greatEdgeX123, greatEdgeZ123, greatEdgeX124, greatEdgeZ223)
+greatFaceY223 = geompy.MakeQuad(greatEdgeX223, greatEdgeZ223, greatEdgeX224, greatEdgeZ323)
+greatFaceY323 = geompy.MakeQuad(greatEdgeX323, greatEdgeZ323, greatEdgeX324, greatEdgeZ423)
+
+greatFaceZ11 = geompy.MakeQuad(greatEdgeX111, greatEdgeY11, greatEdgeX121, greatEdgeY21)
+greatFaceZ21 = geompy.MakeQuad(greatEdgeX211, greatEdgeY21, greatEdgeX221, greatEdgeY31)
+greatFaceZ31 = geompy.MakeQuad(greatEdgeX311, greatEdgeY31, greatEdgeX321, greatEdgeY41)
+
+greatFaceZ12 = geompy.MakeQuad(greatEdgeX112, greatEdgeY12, greatEdgeX122, greatEdgeY22)
+greatFaceZ22 = geompy.MakeQuad(greatEdgeX212, greatEdgeY22, greatEdgeX222, greatEdgeY32)
+greatFaceZ32 = geompy.MakeQuad(greatEdgeX312, greatEdgeY32, greatEdgeX322, greatEdgeY42)
+
+greatFaceZ13 = geompy.MakeQuad(greatEdgeX113, greatEdgeY13, greatEdgeX123, greatEdgeY23)
+greatFaceZ23 = geompy.MakeQuad(greatEdgeX213, greatEdgeY23, greatEdgeX223, greatEdgeY33)
+greatFaceZ33 = geompy.MakeQuad(greatEdgeX313, greatEdgeY33, greatEdgeX323, greatEdgeY43)
+
+greatFaceZ14 = geompy.MakeQuad(greatEdgeX114, greatEdgeY14, greatEdgeX124, greatEdgeY24)
+greatFaceZ24 = geompy.MakeQuad(greatEdgeX214, greatEdgeY24, greatEdgeX224, greatEdgeY34)
+greatFaceZ34 = geompy.MakeQuad(greatEdgeX314, greatEdgeY34, greatEdgeX324, greatEdgeY44)
+
+# Solids
+# ------
+
+smallBlock   = geompy.MakeHexa(smallFaceX1, smallFaceX2, smallFaceY1, smallFaceY2, smallFaceZ1, smallFaceZ2)
+
+greatBlock11 = geompy.MakeHexa(greatFaceX11, greatFaceX21, greatFaceY111, greatFaceY121, greatFaceZ11, greatFaceZ12)
+greatBlock21 = geompy.MakeHexa(greatFaceX21, greatFaceX31, greatFaceY211, greatFaceY221, greatFaceZ21, greatFaceZ22)
+greatBlock31 = geompy.MakeHexa(greatFaceX31, greatFaceX41, greatFaceY311, greatFaceY321, greatFaceZ31, greatFaceZ32)
+
+greatBlock12 = geompy.MakeHexa(greatFaceX12, greatFaceX22, greatFaceY112, greatFaceY122, greatFaceZ12, greatFaceZ13)
+greatBlock22 = geompy.MakeHexa(greatFaceX22, greatFaceX32, greatFaceY212, greatFaceY222, greatFaceZ22, greatFaceZ23)
+greatBlock32 = geompy.MakeHexa(greatFaceX32, greatFaceX42, greatFaceY312, greatFaceY322, greatFaceZ32, greatFaceZ33)
+
+greatBlock13 = geompy.MakeHexa(greatFaceX13, greatFaceX23, greatFaceY113, greatFaceY123, greatFaceZ13, greatFaceZ14)
+greatBlock23 = geompy.MakeHexa(greatFaceX23, greatFaceX33, greatFaceY213, greatFaceY223, greatFaceZ23, greatFaceZ24)
+greatBlock33 = geompy.MakeHexa(greatFaceX33, greatFaceX43, greatFaceY313, greatFaceY323, greatFaceZ33, greatFaceZ34)
+
+# Compound
+# --------
+
+c_l = []
+c_l.append(smallBlock)
+c_l.append(greatBlock11)
+c_l.append(greatBlock21)
+c_l.append(greatBlock31)
+c_l.append(greatBlock12)
+c_l.append(greatBlock22)
+c_l.append(greatBlock32)
+c_l.append(greatBlock13)
+c_l.append(greatBlock23)
+c_l.append(greatBlock33)
+
+piece = geompy.MakeCompound(c_l)
+
+# Add in study
+# ------------
+
+piece_id = geompy.addToStudy(piece, "ex01_cube2build")
+
+# Meshing
+# =======
+
+# Create hexahedrical mesh on piece
+# ---------------------------------
+
+hexa = smesh.Mesh(piece, "ex01_cube2build:hexa")
+
+algo = hexa.Segment()
+algo.NumberOfSegments(4)
+
+hexa.Quadrangle()
+
+hexa.Hexahedron()
+
+# Create local hypothesis
+# -----------------------
+
+algo = hexa.Segment(greatEdgeX111)
+
+algo.Arithmetic1D(1, 4)
+
+algo.Propagation()
+
+# Compute the mesh
+# ----------------
+
+isDone = hexa.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex02_cube2primitive.py b/test/ex02_cube2primitive.py
new file mode 100644 (file)
index 0000000..1c65617
--- /dev/null
@@ -0,0 +1,130 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# =======================================
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# Geometry
+# ========
+
+# A small cube centered and put on a great cube build by primitive geometric functionalities
+
+# Values
+# ------
+
+ox = 0
+oy = 0
+oz = 0
+
+arete = 10
+
+# Points
+# ------
+
+blockPoint111 = geompy.MakeVertex(ox      , oy, oz)
+blockPoint211 = geompy.MakeVertex(ox+arete, oy, oz)
+blockPoint112 = geompy.MakeVertex(ox      , oy, oz+arete)
+blockPoint212 = geompy.MakeVertex(ox+arete, oy, oz+arete)
+
+# Face and solid
+# --------------
+
+blockFace1 = geompy.MakeQuad4Vertices(blockPoint111, blockPoint211, blockPoint212, blockPoint112)
+
+blockSolid11  = geompy.MakePrismVecH(blockFace1, geompy.MakeVectorDXDYDZ(0, 1, 0), arete)
+
+# Translations
+# ------------
+
+blockSolid21  = geompy.MakeTranslation(blockSolid11, arete, 0, 0)
+blockSolid31  = geompy.MakeTranslation(blockSolid21, arete, 0, 0)
+
+blockSolid12  = geompy.MakeTranslation(blockSolid11, 0, 0, arete)
+blockSolid22  = geompy.MakeTranslation(blockSolid12, arete, 0, 0)
+blockSolid32  = geompy.MakeTranslation(blockSolid22, arete, 0, 0)
+
+blockSolid13  = geompy.MakeTranslation(blockSolid12, 0, 0, arete)
+blockSolid23  = geompy.MakeTranslation(blockSolid13, arete, 0, 0)
+blockSolid33  = geompy.MakeTranslation(blockSolid23, arete, 0, 0)
+
+blockSolid111 = geompy.MakeTranslation(blockSolid22, 0, arete, 0)
+
+# Compound and glue
+# -----------------
+
+c_l = []
+c_l.append(blockSolid11)
+c_l.append(blockSolid21)
+c_l.append(blockSolid31)
+c_l.append(blockSolid12)
+c_l.append(blockSolid22)
+c_l.append(blockSolid32)
+c_l.append(blockSolid13)
+c_l.append(blockSolid23)
+c_l.append(blockSolid33)
+c_l.append(blockSolid111)
+
+c_cpd = geompy.MakeCompound(c_l)
+
+piece = geompy.MakeGlueFaces(c_cpd, 1.e-5)
+
+# Add in study
+# ------------
+
+piece_id = geompy.addToStudy(piece, "ex02_cube2primitive")
+
+# Meshing
+# =======
+
+# Create hexahedrical mesh on piece
+# ---------------------------------
+
+hexa = smesh.Mesh(piece, "ex02_cube2primitive:hexa")
+
+algo = hexa.Segment()
+algo.LocalLength(1)
+
+hexa.Quadrangle()
+
+hexa.Hexahedron()
+
+# Compute the mesh
+# ----------------
+
+isDone = hexa.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex03_cube2partition.py b/test/ex03_cube2partition.py
new file mode 100644 (file)
index 0000000..1327afc
--- /dev/null
@@ -0,0 +1,117 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# =======================================
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# Geometry
+# ========
+
+# A small cube centered and put on a great cube build with partition
+
+# Values
+# ------
+
+g_ox = 0
+g_oy = 0
+g_oz = 0
+
+g_arete = 10
+
+g_trim = 1000
+
+# Points
+# ------
+
+v_arete2 = g_arete*2
+v_arete3 = g_arete*3
+
+v_1 = geompy.MakeVertex(g_ox         , g_oy         , g_oz         )
+v_2 = geompy.MakeVertex(g_ox+v_arete3, g_oy+g_arete , g_oz+v_arete3)
+
+v_3 = geompy.MakeVertex(g_ox+g_arete , g_oy+g_arete , g_oz+g_arete )
+v_4 = geompy.MakeVertex(g_ox+v_arete2, g_oy+v_arete2, g_oz+v_arete2)
+
+# Solids
+# ------
+
+s_base = geompy.MakeBoxTwoPnt(v_1, v_2)
+s_haut = geompy.MakeBoxTwoPnt(v_3, v_4)
+
+# Partition
+# ---------
+
+p_dir1 = geompy.MakeVectorDXDYDZ(1, 0, 0)
+p_dir2 = geompy.MakeVectorDXDYDZ(0, 0, 1)
+p_dir3 = geompy.MakeVectorDXDYDZ(0, 1, 0)
+
+p_tools = []
+
+p_tools.append(geompy.MakePlane(v_3, p_dir1, g_trim))
+p_tools.append(geompy.MakePlane(v_4, p_dir1, g_trim))
+p_tools.append(geompy.MakePlane(v_3, p_dir2, g_trim))
+p_tools.append(geompy.MakePlane(v_4, p_dir2, g_trim))
+p_tools.append(geompy.MakePlane(v_3, p_dir3, g_trim))
+
+piece = geompy.MakePartition([s_base, s_haut], p_tools, [], [], geompy.ShapeType["SOLID"])
+
+# Study
+# -----
+
+piece_id = geompy.addToStudy(piece, "ex03_cube2partition")
+
+# Meshing
+# =======
+
+# Create hexahedrical mesh on piece
+# ---------------------------------
+
+hexa = smesh.Mesh(piece, "ex03_cube2partition:hexa")
+
+algo = hexa.Segment()
+algo.NumberOfSegments(5)
+
+hexa.Quadrangle()
+
+hexa.Hexahedron()
+
+# Compute the mesh
+# ----------------
+
+isDone = hexa.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex04_cube5tetraHexa.py b/test/ex04_cube5tetraHexa.py
new file mode 100644 (file)
index 0000000..337b381
--- /dev/null
@@ -0,0 +1,122 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# =======================================
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# Geometry
+# ========
+
+# 5 box with a hexahedral mesh and with 2 box in tetrahedral mesh
+
+# Values
+# ------
+
+arete = 100
+
+arete0 = 0
+arete1 = arete
+arete2 = arete*2
+arete3 = arete*3
+
+# Solids
+# ------
+
+box_tetra1 = geompy.MakeBox(arete0, arete0, 0,  arete1, arete1, arete)
+
+box_ijk1   = geompy.MakeBox(arete1, arete0, 0,  arete2, arete1, arete)
+
+box_hexa   = geompy.MakeBox(arete1, arete1, 0,  arete2, arete2, arete)
+
+box_ijk2   = geompy.MakeBox(arete2, arete1, 0,  arete3, arete2, arete)
+
+box_tetra2 = geompy.MakeBox(arete2, arete2, 0,  arete3 ,arete3, arete)
+
+# Piece
+# -----
+
+piece_cpd = geompy.MakeCompound([box_tetra1, box_ijk1, box_hexa, box_ijk2, box_tetra2])
+
+piece = geompy.MakeGlueFaces(piece_cpd, 1e-4)
+
+piece_id = geompy.addToStudy(piece, "ex04_cube5tetraHexa")
+
+# Meshing
+# =======
+
+# Create a hexahedral mesh
+# ------------------------
+
+mixed = smesh.Mesh(piece, "ex04_cube5tetraHexa:mixed")
+
+algo = mixed.Segment()
+
+algo.StartEndLength(3, 25)
+
+mixed.Quadrangle()
+
+mixed.Hexahedron()
+
+# Tetrahedral local mesh
+# ----------------------
+
+def localMesh(b, hyp):
+    box   = geompy.GetInPlace(piece, b)
+    faces = geompy.SubShapeAll(box, geompy.ShapeType["FACE"])
+
+    i = 0
+    n = len(faces)
+    while i<n:
+        algo = mixed.Triangle(faces[i])
+        if hyp:
+            algo.MaxElementArea(80)
+        else:
+            algo.LengthFromEdges()
+        i = i + 1
+
+    algo = mixed.Tetrahedron(smeshBuilder.NETGEN, box)
+    algo.MaxElementVolume(400)
+
+localMesh(box_tetra1, 1)
+localMesh(box_tetra2, 0)
+
+# Mesh calculus
+# -------------
+
+isDone = mixed.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex05_hole1build.py b/test/ex05_hole1build.py
new file mode 100644 (file)
index 0000000..148e5b4
--- /dev/null
@@ -0,0 +1,157 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# =======================================
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+import math
+
+# Geometry
+# ========
+
+# A centered holed cube build by  build by points, edges, faces and solids
+
+# Values
+# ------
+
+ox = 0
+oy = 0
+oz = 0
+
+longueur = 100
+largeur  =  80
+hauteur  =  50
+
+rayon = 10
+
+# Points
+# ------
+
+basePoint111 = geompy.MakeVertex(ox         ,  oy, oz)
+basePoint211 = geompy.MakeVertex(ox+longueur,  oy, oz)
+basePoint112 = geompy.MakeVertex(ox         ,  oy, oz+largeur)
+basePoint212 = geompy.MakeVertex(ox+longueur,  oy, oz+largeur)
+
+cx = ox+longueur/2
+cy = oy
+cz = oz+largeur/2
+
+ll = longueur/largeur
+ll = ll*ll
+dx = rayon/math.sqrt(1+ll)
+dz = rayon/math.sqrt(1+1/ll)
+
+circlePoint1 = geompy.MakeVertex(cx-dx, cy, cz-dz)
+circlePoint2 = geompy.MakeVertex(cx+dx, cy, cz-dz)
+circlePoint3 = geompy.MakeVertex(cx+dx, cy, cz+dz)
+circlePoint4 = geompy.MakeVertex(cx-dx, cy, cz+dz)
+
+# Edges
+# -----
+
+squareEdge1 = geompy.MakeEdge(basePoint111, basePoint211)
+squareEdge2 = geompy.MakeEdge(basePoint211, basePoint212)
+squareEdge3 = geompy.MakeEdge(basePoint212, basePoint112)
+squareEdge4 = geompy.MakeEdge(basePoint112, basePoint111)
+
+diagEdge1   = geompy.MakeEdge(basePoint111, circlePoint1)
+diagEdge2   = geompy.MakeEdge(basePoint211, circlePoint2)
+diagEdge3   = geompy.MakeEdge(basePoint212, circlePoint3)
+diagEdge4   = geompy.MakeEdge(basePoint112, circlePoint4)
+
+arcEdge1    = geompy.MakeArc(circlePoint1, geompy.MakeVertex(cx      , cy, cz-rayon), circlePoint2)
+arcEdge2    = geompy.MakeArc(circlePoint2, geompy.MakeVertex(cx+rayon, cy, cz      ), circlePoint3)
+arcEdge3    = geompy.MakeArc(circlePoint3, geompy.MakeVertex(cx      , cy, cz+rayon), circlePoint4)
+arcEdge4    = geompy.MakeArc(circlePoint4, geompy.MakeVertex(cx-rayon, cy, cz      ), circlePoint1)
+
+# Faces
+# -----
+
+baseFace1 = geompy.MakeQuad(squareEdge1, diagEdge2, arcEdge1, diagEdge1)
+baseFace2 = geompy.MakeQuad(squareEdge2, diagEdge3, arcEdge2, diagEdge2)
+baseFace3 = geompy.MakeQuad(squareEdge3, diagEdge4, arcEdge3, diagEdge3)
+baseFace4 = geompy.MakeQuad(squareEdge4, diagEdge1, arcEdge4, diagEdge4)
+
+# Solids
+# ------
+
+baseVector = geompy.MakeVectorDXDYDZ(0, 1, 0)
+
+baseSolid1 = geompy.MakePrismVecH(baseFace1, baseVector, hauteur)
+baseSolid2 = geompy.MakePrismVecH(baseFace2, baseVector, hauteur)
+baseSolid3 = geompy.MakePrismVecH(baseFace3, baseVector, hauteur)
+baseSolid4 = geompy.MakePrismVecH(baseFace4, baseVector, hauteur)
+
+# Compound
+# --------
+
+c_l = []
+c_l.append(baseSolid1)
+c_l.append(baseSolid2)
+c_l.append(baseSolid3)
+c_l.append(baseSolid4)
+
+c_cpd = geompy.MakeCompound(c_l)
+piece = geompy.MakeGlueFaces(c_cpd, 1.e-5)
+
+# Add in study
+# ------------
+
+piece_id = geompy.addToStudy(piece, "ex05_hole1build")
+
+# Meshing
+# =======
+
+# Create a hexahedral mesh
+# ------------------------
+
+hexa = smesh.Mesh(piece, "ex05_hole1build:hexa")
+
+algo = hexa.Segment()
+
+algo.NumberOfSegments(6, 3)
+
+hexa.Quadrangle()
+
+hexa.Hexahedron()
+
+# Mesh calculus
+# -------------
+
+isDone = hexa.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex06_hole1boolean.py b/test/ex06_hole1boolean.py
new file mode 100644 (file)
index 0000000..a3e2d28
--- /dev/null
@@ -0,0 +1,174 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# =======================================
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# Geometry
+# ========
+
+# A not centered holed cube build by boolean geometric operations
+
+# Values
+# ------
+
+ox = 0
+oy = 0
+oz = 0
+
+longueur1 = 30
+longueur2 = 70
+
+largeur1  = 30
+largeur2  = 50
+
+hauteur   = 50
+
+rayon = 10
+
+# Triangular face
+# ---------------
+
+def triangle(p1, p2, p3):
+    l = []
+    l.append(geompy.MakeEdge(p1, p2))
+    l.append(geompy.MakeEdge(p2, p3))
+    l.append(geompy.MakeEdge(p3, p1))
+    w = geompy.MakeWire(l)
+    return geompy.MakeFace(w, 1)
+
+# Points
+# ------
+
+basePoint111 = geompy.MakeVertex(ox-longueur1,  oy, oz-largeur1)
+basePoint211 = geompy.MakeVertex(ox+longueur2,  oy, oz-largeur1)
+basePoint112 = geompy.MakeVertex(ox-longueur1,  oy, oz+largeur2)
+basePoint212 = geompy.MakeVertex(ox+longueur2,  oy, oz+largeur2)
+
+holePoint    = geompy.MakeVertex(ox, oy, oz)
+
+# Faces
+# -----
+
+baseFace1 = triangle(basePoint111, basePoint211, holePoint)
+baseFace2 = triangle(basePoint211, basePoint212, holePoint)
+baseFace3 = triangle(basePoint212, basePoint112, holePoint)
+baseFace4 = triangle(basePoint112, basePoint111, holePoint)
+
+# Solids
+# ------
+
+baseVector = geompy.MakeVectorDXDYDZ(0, 1, 0)
+
+baseSolid1 = geompy.MakePrismVecH(baseFace1, baseVector, hauteur)
+baseSolid2 = geompy.MakePrismVecH(baseFace2, baseVector, hauteur)
+baseSolid3 = geompy.MakePrismVecH(baseFace3, baseVector, hauteur)
+baseSolid4 = geompy.MakePrismVecH(baseFace4, baseVector, hauteur)
+
+holeSolid = geompy.MakeCylinder(holePoint, baseVector, rayon, hauteur)
+
+# Boolean operations
+# ------------------
+
+baseHexa1 = geompy.MakeCut(baseSolid1, holeSolid)
+baseHexa2 = geompy.MakeCut(baseSolid2, holeSolid)
+baseHexa3 = geompy.MakeCut(baseSolid3, holeSolid)
+baseHexa4 = geompy.MakeCut(baseSolid4, holeSolid)
+
+# Compound, glue and repair
+# -------------------------
+
+c_l = []
+c_l.append(baseHexa1)
+c_l.append(baseHexa2)
+c_l.append(baseHexa3)
+c_l.append(baseHexa4)
+
+c_cpd = geompy.MakeCompound(c_l)
+c_glu = geompy.MakeGlueFaces(c_cpd, 1.e-5)
+piece = geompy.RemoveExtraEdges(c_glu, doUnionFaces=True)
+
+# Add in study
+# ------------
+
+piece_id = geompy.addToStudy(piece, "ex06_hole1boolean")
+
+# Meshing
+# =======
+
+# Create a hexahedral mesh
+# ------------------------
+
+hexa = smesh.Mesh(piece, "ex06_hole1boolean:hexa")
+
+algo = hexa.Segment()
+
+algo.NumberOfSegments(11)
+
+hexa.Quadrangle()
+
+hexa.Hexahedron()
+
+# Create local hypothesis
+# -----------------------
+
+edge1 = geompy.GetEdgeNearPoint(piece, geompy.MakeVertex(ox, oy, oz-largeur1))
+algo1 = hexa.Segment(edge1)
+algo1.NumberOfSegments(3)
+algo1.Propagation()
+
+edge2 = geompy.GetEdgeNearPoint(piece, geompy.MakeVertex(ox-longueur1, oy, oz))
+algo2 = hexa.Segment(edge2)
+algo2.NumberOfSegments(5)
+algo2.Propagation()
+
+edge3 = geompy.GetEdgeNearPoint(piece, geompy.MakeVertex(ox, oy, oz+largeur2))
+algo3 = hexa.Segment(edge3)
+algo3.NumberOfSegments(7)
+algo3.Propagation()
+
+edge4 = geompy.GetEdgeNearPoint(piece, geompy.MakeVertex(ox+longueur2, oy, oz))
+algo4 = hexa.Segment(edge4)
+algo4.NumberOfSegments(9)
+algo4.Propagation()
+
+# Mesh calculus
+# -------------
+
+isDone = hexa.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex07_hole1partition.py b/test/ex07_hole1partition.py
new file mode 100644 (file)
index 0000000..336dfa4
--- /dev/null
@@ -0,0 +1,114 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# =======================================
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# Geometry
+# ========
+
+# A holed cube build by partitioning geometric operations
+
+# Values
+# ------
+
+g_x = 0
+g_y = 0
+g_z = 0
+
+g_longueur = 50.0
+g_largeur  = 40.0
+g_hauteur  = 25.0
+
+g_rayon = 10
+
+g_trim = 1000
+
+# Box
+# ---
+
+b_boite = geompy.MakeBox(g_x-g_longueur, g_y-g_hauteur, g_z-g_largeur,  g_x+g_longueur, g_y+g_hauteur, g_z+g_largeur)
+
+# Cylinder
+# --------
+
+c_axe = geompy.MakeVectorDXDYDZ(0, 1, 0)
+
+c_cyl = geompy.MakeCylinder(geompy.MakeVertex(g_x, g_y-g_hauteur, g_z), c_axe, g_rayon, g_hauteur*2)
+
+c_piece = geompy.MakeCut(b_boite, c_cyl)
+
+# Partition and reperation
+# ------------------------
+
+p_centre = geompy.MakeVertex(g_x, g_y, g_z)
+
+p_tools = []
+p_tools.append(geompy.MakePlane(p_centre, geompy.MakeVectorDXDYDZ( g_largeur, 0, g_longueur), g_trim))
+p_tools.append(geompy.MakePlane(p_centre, geompy.MakeVectorDXDYDZ(-g_largeur, 0, g_longueur), g_trim))
+
+p_part = geompy.MakePartition([c_piece], p_tools, [], [], geompy.ShapeType["SOLID"])
+
+p_blocs = geompy.RemoveExtraEdges(p_part, doUnionFaces=True)
+piece   = geompy.MakeGlueFaces(p_blocs, 1.e-5)
+
+# Add in study
+# ------------
+
+piece_id = geompy.addToStudy(piece, "ex07_hole1partition")
+
+# Meshing
+# =======
+
+# Create a hexahedral mesh
+# ------------------------
+
+hexa = smesh.Mesh(piece, "ex07_hole1partition:hexa")
+
+algo = hexa.Segment()
+algo.NumberOfSegments(20)
+
+hexa.Quadrangle()
+
+hexa.Hexahedron()
+
+# Mesh calculus
+# -------------
+
+isDone = hexa.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex08_hole2build.py b/test/ex08_hole2build.py
new file mode 100644 (file)
index 0000000..326337c
--- /dev/null
@@ -0,0 +1,147 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# =======================================
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# Geometry
+# ========
+
+# A twice holed cube build by points, edges, faces and solids
+
+# Values
+# ------
+
+ox = 0
+oy = 0
+oz = 0
+
+longueur = 200
+largeur  = 100
+hauteur  =  80
+
+cylindre = 50
+
+rayon = 20
+
+# Points
+# ------
+
+piecePoint1 = geompy.MakeVertex(ox         , oy, oz)
+piecePoint2 = geompy.MakeVertex(ox+longueur, oy, oz)
+piecePoint3 = geompy.MakeVertex(ox+longueur, oy, oz+largeur)
+piecePoint4 = geompy.MakeVertex(ox         , oy, oz+largeur)
+
+cz = oz+largeur/2
+
+cylPoint1    = geompy.MakeVertex(ox+cylindre         , oy, cz-rayon)
+cylPoint2    = geompy.MakeVertex(ox+longueur-cylindre, oy, cz-rayon)
+cylPoint3    = geompy.MakeVertex(ox+longueur-cylindre, oy, cz+rayon)
+cylPoint4    = geompy.MakeVertex(ox+cylindre         , oy, cz+rayon)
+
+# Edges
+# -----
+
+pieceEdge1 = geompy.MakeEdge(piecePoint1, piecePoint4)
+pieceEdge2 = geompy.MakeEdge(piecePoint1, cylPoint1)
+pieceEdge3 = geompy.MakeEdge(piecePoint4, cylPoint4)
+
+pieceEdge4 = geompy.MakeEdge(piecePoint2, piecePoint3)
+pieceEdge5 = geompy.MakeEdge(piecePoint2, cylPoint2)
+pieceEdge6 = geompy.MakeEdge(piecePoint3, cylPoint3)
+
+pieceEdge7 = geompy.MakeEdge(cylPoint1, cylPoint2)
+pieceEdge8 = geompy.MakeEdge(cylPoint3, cylPoint4)
+
+cylEdge1 = geompy.MakeArc(cylPoint1, geompy.MakeVertex(ox+cylindre-rayon         , oy, cz), cylPoint4)
+cylEdge2 = geompy.MakeArc(cylPoint1, geompy.MakeVertex(ox+cylindre+rayon         , oy, cz), cylPoint4)
+cylEdge3 = geompy.MakeArc(cylPoint2, geompy.MakeVertex(ox+longueur-cylindre-rayon, oy, cz), cylPoint3)
+cylEdge4 = geompy.MakeArc(cylPoint2, geompy.MakeVertex(ox+longueur-cylindre+rayon, oy, cz), cylPoint3)
+
+# Faces
+# -----
+
+pieceFace1 = geompy.MakeQuad4Vertices(piecePoint1, piecePoint2, cylPoint2 , cylPoint1 )
+pieceFace2 = geompy.MakeQuad         (pieceEdge1 , pieceEdge2 , cylEdge1  , pieceEdge3)
+pieceFace3 = geompy.MakeQuad4Vertices(piecePoint3, piecePoint4, cylPoint4 , cylPoint3 )
+pieceFace4 = geompy.MakeQuad         (pieceEdge4 , pieceEdge5 , cylEdge4  , pieceEdge6)
+pieceFace5 = geompy.MakeQuad         (pieceEdge7 , cylEdge3   , pieceEdge8, cylEdge2  )
+
+# Solids
+# ------
+
+pieceVector = geompy.MakeVectorDXDYDZ(0, 1, 0)
+
+pieceSolid1 = geompy.MakePrismVecH(pieceFace1, pieceVector, hauteur)
+pieceSolid2 = geompy.MakePrismVecH(pieceFace2, pieceVector, hauteur)
+pieceSolid3 = geompy.MakePrismVecH(pieceFace3, pieceVector, hauteur)
+pieceSolid4 = geompy.MakePrismVecH(pieceFace4, pieceVector, hauteur)
+pieceSolid5 = geompy.MakePrismVecH(pieceFace5, pieceVector, hauteur)
+
+# Compound and glue
+# -----------------
+
+c_cpd = geompy.MakeCompound([pieceSolid1, pieceSolid2, pieceSolid3, pieceSolid4, pieceSolid5])
+
+piece = geompy.MakeGlueFaces(c_cpd, 1.e-5)
+
+# Add in study
+# ------------
+
+piece_id = geompy.addToStudy(piece, "ex08_hole2build")
+
+# Meshing
+# =======
+
+# Create a hexahedral mesh
+# ------------------------
+
+hexa = smesh.Mesh(piece, "ex08_hole2build:hexa")
+
+algo = hexa.Segment()
+algo.NumberOfSegments(7)
+
+hexa.Quadrangle()
+
+hexa.Hexahedron()
+
+# Mesh calculus
+# -------------
+
+isDone = hexa.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex09_grid4build.py b/test/ex09_grid4build.py
new file mode 100644 (file)
index 0000000..38a0b1f
--- /dev/null
@@ -0,0 +1,150 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# =======================================
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+import math
+
+# Geometry
+# ========
+
+# Element of a grid compound by a square with a cylinder on each vertex build by points, edges, faces and solids
+
+# Values
+# ------
+
+ox = 0
+oy = 0
+oz = 0
+
+arete   =  50
+hauteur = 100
+
+rayon = 10
+
+demi = rayon/2
+r3   = demi*math.sqrt(3)
+
+# Points
+# ------
+
+piecePoint111 = geompy.MakeVertex(ox+rayon      , oy, oz)
+piecePoint211 = geompy.MakeVertex(ox+arete-rayon, oy, oz)
+piecePoint112 = geompy.MakeVertex(ox            , oy, oz+rayon)
+piecePoint212 = geompy.MakeVertex(ox+arete      , oy, oz+rayon)
+piecePoint113 = geompy.MakeVertex(ox            , oy, oz+arete-rayon)
+piecePoint213 = geompy.MakeVertex(ox+arete      , oy, oz+arete-rayon)
+piecePoint114 = geompy.MakeVertex(ox+rayon      , oy, oz+arete)
+piecePoint214 = geompy.MakeVertex(ox+arete-rayon, oy, oz+arete)
+
+pieceCenter1  = geompy.MakeVertex(ox            , oy, oz)
+pieceCenter2  = geompy.MakeVertex(ox+arete      , oy, oz)
+pieceCenter3  = geompy.MakeVertex(ox            , oy, oz+arete)
+pieceCenter4  = geompy.MakeVertex(ox+arete      , oy, oz+arete)
+
+piecePass1    = geompy.MakeVertex(ox+demi       , oy, oz+r3)
+piecePass2    = geompy.MakeVertex(ox+arete-demi , oy, oz+r3)
+piecePass3    = geompy.MakeVertex(ox+arete-demi , oy, oz+arete-r3)
+piecePass4    = geompy.MakeVertex(ox+demi       , oy, oz+arete-r3)
+
+# Edges
+# -----
+
+pieceEdgeSquare1   = geompy.MakeEdge(piecePoint111, piecePoint211)
+pieceEdgeSquare2   = geompy.MakeEdge(piecePoint114, piecePoint214)
+pieceEdgeSquare3   = geompy.MakeEdge(piecePoint112, piecePoint113)
+pieceEdgeSquare4   = geompy.MakeEdge(piecePoint212, piecePoint213)
+
+pieceEdgeDiagonal1 = geompy.MakeEdge(piecePoint111, piecePoint213)
+pieceEdgeDiagonal2 = geompy.MakeEdge(piecePoint112, piecePoint214)
+
+pieceEdgeArc1 = geompy.MakeArc(piecePoint111, piecePass1, piecePoint112)
+pieceEdgeArc2 = geompy.MakeArc(piecePoint211, piecePass2, piecePoint212)
+pieceEdgeArc3 = geompy.MakeArc(piecePoint213, piecePass3, piecePoint214)
+pieceEdgeArc4 = geompy.MakeArc(piecePoint113, piecePass4, piecePoint114)
+
+# Faces
+# -----
+
+pieceFace1 = geompy.MakeQuad(pieceEdgeSquare1, pieceEdgeArc2, pieceEdgeSquare4, pieceEdgeDiagonal1)
+pieceFace2 = geompy.MakeQuad(pieceEdgeSquare2, pieceEdgeArc4, pieceEdgeSquare3, pieceEdgeDiagonal2)
+
+pieceFace3 = geompy.MakeQuad(pieceEdgeArc1, pieceEdgeDiagonal1, pieceEdgeArc3, pieceEdgeDiagonal2)
+
+# Solids
+# ------
+
+pieceVector = geompy.MakeVectorDXDYDZ(0, 1, 0)
+
+pieceSolid1 = geompy.MakePrismVecH(pieceFace1, pieceVector, hauteur)
+pieceSolid2 = geompy.MakePrismVecH(pieceFace2, pieceVector, hauteur)
+pieceSolid3 = geompy.MakePrismVecH(pieceFace3, pieceVector, hauteur)
+
+# Compound and glue
+# -----------------
+
+c_cpd = geompy.MakeCompound([pieceSolid1, pieceSolid2, pieceSolid3])
+
+piece = geompy.MakeGlueFaces(c_cpd, 1.e-5)
+
+# Add in study
+# ------------
+
+piece_id = geompy.addToStudy(piece, "ex09_grid4build")
+
+# Meshing
+# =======
+
+# Create a hexahedral mesh
+# ------------------------
+
+hexa = smesh.Mesh(piece, "ex09_grid4build:hexa")
+
+algo = hexa.Segment()
+algo.NumberOfSegments(6)
+
+hexa.Quadrangle()
+
+hexa.Hexahedron()
+
+# Mesh calculus
+# -------------
+
+isDone = hexa.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex10_grid4geometry.py b/test/ex10_grid4geometry.py
new file mode 100644 (file)
index 0000000..4a08195
--- /dev/null
@@ -0,0 +1,112 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# =======================================
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# Geometry
+# ========
+
+# Element of a grid compound by a square with a cylinder on each vertex build by using partition
+
+# Values
+# ------
+
+ox = 0
+oy = 0
+oz = 0
+
+arete   =  50
+hauteur = 100
+rayon   =  10
+
+g_trim = 1000
+
+# Box
+# ---
+
+piecePoint = geompy.MakeVertex(ox, oy, oz)
+
+pieceBox = geompy.MakeBoxTwoPnt(piecePoint, geompy.MakeVertex(ox+arete, oy+hauteur, oz+arete))
+
+# Cut by cylinders
+# ----------------
+
+dirUp = geompy.MakeVectorDXDYDZ(0, 1, 0)
+
+pieceCut1 = geompy.MakeCut(pieceBox , geompy.MakeCylinder(piecePoint                        , dirUp, rayon, hauteur))
+pieceCut2 = geompy.MakeCut(pieceCut1, geompy.MakeCylinder(geompy.MakeVertex(ox+arete, oy, oz      ), dirUp, rayon, hauteur))
+pieceCut3 = geompy.MakeCut(pieceCut2, geompy.MakeCylinder(geompy.MakeVertex(ox      , oy, oz+arete), dirUp, rayon, hauteur))
+pieceCut4 = geompy.MakeCut(pieceCut3, geompy.MakeCylinder(geompy.MakeVertex(ox+arete, oy, oz+arete), dirUp, rayon, hauteur))
+
+# Compound by make a partition of a solid
+# ---------------------------------------
+
+dir = geompy.MakeVectorDXDYDZ(-1, 0, 1)
+
+tools = []
+tools.append(geompy.MakePlane(geompy.MakeVertex(ox+rayon, oy, oz      ), dir, g_trim))
+tools.append(geompy.MakePlane(geompy.MakeVertex(ox      , oy, oz+rayon), dir, g_trim))
+
+piece = geompy.MakePartition([pieceCut4], tools, [], [], geompy.ShapeType["SOLID"])
+
+# Add in study
+# ------------
+
+piece_id = geompy.addToStudy(piece, "ex10_grid4geometry")
+
+# Meshing
+# =======
+
+# Create a hexahedral mesh
+# ------------------------
+
+hexa = smesh.Mesh(piece, "ex10_grid4geometry:hexa")
+
+algo = hexa.Segment()
+algo.NumberOfSegments(10)
+
+hexa.Quadrangle()
+
+hexa.Hexahedron()
+
+# Mesh calculus
+# -------------
+
+isDone = hexa.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex11_grid3partition.py b/test/ex11_grid3partition.py
new file mode 100644 (file)
index 0000000..e0f9008
--- /dev/null
@@ -0,0 +1,133 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# =======================================
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# Geometry
+# ========
+
+# grid compound of 3 x 3 elements
+# an element is compound of 3 cylinders concentriques
+# an element is centered in a square of the grid
+# the smaller cylinder is a hole
+
+# prism the grid, and mesh it in hexahedral way
+
+# Values
+# ------
+
+g_x = 0
+g_y = 0
+g_z = 0
+
+g_arete   = 50
+g_hauteur = 30
+
+g_rayon1 = 20
+g_rayon2 = 30
+g_rayon3 = 40
+
+g_grid = 3
+
+g_trim = 1000
+
+# Element
+# -------
+
+e_boite = geompy.MakeBox(g_x-g_arete, g_y-g_hauteur, g_z-g_arete,  g_x+g_arete, g_y+g_hauteur, g_z+g_arete)
+
+e_hauteur = 2*g_hauteur
+e_centre  = geompy.MakeVertex(g_x, g_y-g_hauteur, g_z)
+e_dir     = geompy.MakeVectorDXDYDZ(0, 1, 0)
+
+e_cyl1 = geompy.MakeCylinder(e_centre, e_dir, g_rayon3, e_hauteur)
+
+e_blo1 = geompy.MakeCut(e_boite, e_cyl1)
+
+e_cyl2 = geompy.MakeCylinder(e_centre, e_dir, g_rayon2, e_hauteur)
+
+e_blo2 = geompy.MakeCut(e_cyl1, e_cyl2)
+
+e_cyl3 = geompy.MakeCylinder(e_centre, e_dir, g_rayon1, e_hauteur)
+
+e_blo3 = geompy.MakeCut(e_cyl2, e_cyl3)
+
+# Partition and repair
+# --------------------
+
+p_tools = []
+p_tools.append(geompy.MakePlane(e_centre, geompy.MakeVectorDXDYDZ( 1, 0, 1), g_trim))
+p_tools.append(geompy.MakePlane(e_centre, geompy.MakeVectorDXDYDZ(-1, 0, 1), g_trim))
+
+p_part = geompy.MakePartition([e_blo1, e_blo2, e_blo3], p_tools, [], [], geompy.ShapeType["SOLID"])
+
+p_element = geompy.RemoveExtraEdges(p_part, doUnionFaces=True)
+
+# Grid and glue
+# -------------
+
+grid = geompy.MakeMultiTranslation2D(p_element, geompy.MakeVectorDXDYDZ(1, 0, 0), 2*g_arete, g_grid, geompy.MakeVectorDXDYDZ(0, 0, 1), 2*g_arete, g_grid)
+
+piece = geompy.MakeGlueFaces(grid, 1e-5)
+
+# Add in study
+# ------------
+
+piece_id = geompy.addToStudy(piece, "ex11_grid3partition")
+
+# Meshing
+# =======
+
+# Create a hexahedral mesh
+# ------------------------
+
+hexa = smesh.Mesh(piece, "ex11_grid3partition:hexa")
+
+algo = hexa.Segment()
+algo.NumberOfSegments(3)
+
+hexa.Quadrangle()
+
+hexa.Hexahedron()
+
+# Mesh calculus
+# -------------
+
+isDone = hexa.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex12_grid17partition.py b/test/ex12_grid17partition.py
new file mode 100644 (file)
index 0000000..14bdf0c
--- /dev/null
@@ -0,0 +1,158 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# =======================================
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+import time
+t1= time.time()
+
+# Geometry
+# ========
+
+# grid compound of 3 x 3 elements
+# an element is compound of 3 concentric cylinders
+# an element is centered in a square of the grid
+
+# prism the grid, and mesh it in hexahedral way
+
+# Values
+# ------
+
+g_x = 0
+g_y = 0
+g_z = 0
+
+g_arete   = 50
+g_hauteur = 30
+
+g_rayon1 = 20
+g_rayon2 = 30
+g_rayon3 = 40
+
+g_grid = 3
+
+g_trim = 1000
+
+# Solids and rotation to prevent repair
+# -------------------------------------
+
+s_boite = geompy.MakeBox(g_x-g_arete, g_y-g_hauteur, g_z-g_arete,  g_x+g_arete, g_y+g_hauteur, g_z+g_arete)
+
+s_pi4     = 3.141592653/4
+s_hauteur = 2*g_hauteur
+s_centre  = geompy.MakeVertex(g_x, g_y-g_hauteur, g_z)
+s_dir     = geompy.MakeVectorDXDYDZ(0, 1, 0)
+
+s_cyl0 = geompy.MakeCylinder(s_centre, s_dir, g_rayon3, s_hauteur)
+s_cyl1 = geompy.MakeRotation(s_cyl0, s_dir, s_pi4)
+
+s_blo1 = geompy.MakeCut(s_boite, s_cyl1)
+
+s_cyl0 = geompy.MakeCylinder(s_centre, s_dir, g_rayon2, s_hauteur)
+s_cyl2 = geompy.MakeRotation(s_cyl0, s_dir, s_pi4)
+
+s_blo2 = geompy.MakeCut(s_cyl1, s_cyl2)
+
+s_cyl0 = geompy.MakeCylinder(s_centre, s_dir, g_rayon1, s_hauteur)
+s_cyl3 = geompy.MakeRotation(s_cyl0, s_dir, s_pi4)
+
+s_blo3 = geompy.MakeCut(s_cyl2, s_cyl3)
+
+s_arete = g_rayon1/2
+
+s_blo4 = geompy.MakeBox(g_x-s_arete, g_y-g_hauteur, g_z-s_arete,  g_x+s_arete, g_y+g_hauteur, g_z+s_arete)
+
+s_blo5 = geompy.MakeCut(s_cyl3, s_blo4)
+
+# Partition
+# ---------
+
+p_tools = []
+p_tools.append(geompy.MakePlane(s_centre, geompy.MakeVectorDXDYDZ( 1, 0, 1), g_trim))
+p_tools.append(geompy.MakePlane(s_centre, geompy.MakeVectorDXDYDZ(-1, 0, 1), g_trim))
+
+p_partie = geompy.MakePartition([s_blo1, s_blo2, s_blo3, s_blo5], p_tools, [], [], geompy.ShapeType["SOLID"])
+
+# Compound and glue
+# -----------------
+
+c_blocs = geompy.SubShapeAll(p_partie, geompy.ShapeType["SOLID"])
+c_blocs.append(s_blo4)
+
+c_cpd = geompy.MakeCompound(c_blocs)
+
+c_element = geompy.MakeGlueFaces(c_cpd, 1e-4)
+
+# Grid
+# ----
+
+piece = geompy.MakeMultiTranslation2D(c_element, geompy.MakeVectorDXDYDZ(1, 0, 0), 2*g_arete, g_grid, geompy.MakeVectorDXDYDZ(0, 0, 1), 2*g_arete, g_grid)
+
+# Add in study
+# ------------
+
+piece_id = geompy.addToStudy(piece, "ex12_grid17partition")
+
+t2= time.time()
+
+# Meshing
+# =======
+
+# Create a hexahedral mesh
+# ------------------------
+
+hexa = smesh.Mesh(piece, "ex12_grid17partition:hexa")
+
+algo = hexa.Segment()
+algo.NumberOfSegments(2)
+
+hexa.Quadrangle()
+
+hexa.Hexahedron()
+
+# Mesh calculus
+# -------------
+
+isDone = hexa.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+t3= time.time()
+
+print ("time geom",t2-t1)
+print ("time mesh",t3-t2 )
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex13_hole1partial.py b/test/ex13_hole1partial.py
new file mode 100644 (file)
index 0000000..a69492a
--- /dev/null
@@ -0,0 +1,266 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# ==================================
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# Geometry
+# ========
+
+# With hexahedral, build a box partially holed by a not centered cylinder with a thickness
+
+# Values
+# ------
+
+box_dx = 1000
+box_dy =  900
+box_dz =  800
+
+cyl_x      = 500
+cyl_y      = 300
+cyl_dz     = 600
+cyl_radius = 150
+cyl_thick  =  30
+
+# Triangular face
+# ---------------
+
+def triangle(p1, p2, p3):
+    l = []
+    l.append(geompy.MakeEdge(p1, p2))
+    l.append(geompy.MakeEdge(p2, p3))
+    l.append(geompy.MakeEdge(p3, p1))
+    w = geompy.MakeWire(l)
+    return geompy.MakeFace(w, 1)
+
+# The holed part
+# ==============
+
+# Vertex of the holed part
+# ------------------------
+
+hole_point_11 = geompy.MakeVertex(0     , 0     , 0)
+hole_point_21 = geompy.MakeVertex(box_dx, 0     , 0)
+hole_point_12 = geompy.MakeVertex(0     , box_dy, 0)
+hole_point_22 = geompy.MakeVertex(box_dx, box_dy, 0)
+
+hole_center   = geompy.MakeVertex(cyl_x, cyl_y, 0)
+
+# Faces of the holed part
+# -----------------------
+
+hole_face_1 = triangle(hole_point_11, hole_point_21, hole_center)
+hole_face_2 = triangle(hole_point_21, hole_point_22, hole_center)
+hole_face_3 = triangle(hole_point_12, hole_point_22, hole_center)
+hole_face_4 = triangle(hole_point_11, hole_point_12, hole_center)
+
+# Solids of the holed part
+# ------------------------
+
+cyl_dir = geompy.MakeVectorDXDYDZ(0, 0, 1)
+
+hole_solid_1 = geompy.MakePrismVecH(hole_face_1, cyl_dir, cyl_dz)
+hole_solid_2 = geompy.MakePrismVecH(hole_face_2, cyl_dir, cyl_dz)
+hole_solid_3 = geompy.MakePrismVecH(hole_face_3, cyl_dir, cyl_dz)
+hole_solid_4 = geompy.MakePrismVecH(hole_face_4, cyl_dir, cyl_dz)
+
+hole_internal = geompy.MakeCylinder(hole_center, cyl_dir, cyl_radius          , cyl_dz)
+hole_external = geompy.MakeCylinder(hole_center, cyl_dir, cyl_radius+cyl_thick, cyl_dz)
+hole_median   = geompy.MakeCut(hole_external, hole_internal)
+
+# Boolean operations
+# ------------------
+
+blocks = []
+
+blocks.append(   geompy.MakeCut(hole_solid_1, hole_external))
+blocks.append(geompy.MakeCommon(hole_solid_1, hole_median  ))
+
+blocks.append(   geompy.MakeCut(hole_solid_2, hole_external))
+blocks.append(geompy.MakeCommon(hole_solid_2, hole_median  ))
+
+blocks.append(   geompy.MakeCut(hole_solid_3, hole_external))
+blocks.append(geompy.MakeCommon(hole_solid_3, hole_median  ))
+
+blocks.append(   geompy.MakeCut(hole_solid_4, hole_external))
+blocks.append(geompy.MakeCommon(hole_solid_4, hole_median  ))
+
+# The full part
+# =============
+
+# Vertex of the full part
+# -----------------------
+
+full_point_11 = geompy.MakeVertex(0     , 0     , cyl_dz)
+full_point_21 = geompy.MakeVertex(box_dx, 0     , cyl_dz)
+full_point_12 = geompy.MakeVertex(0     , box_dy, cyl_dz)
+full_point_22 = geompy.MakeVertex(box_dx, box_dy, cyl_dz)
+
+full_center = geompy.MakeVertex(cyl_x, cyl_y, cyl_dz)
+
+# Faces of the full part
+# ----------------------
+
+full_face_1 = triangle(full_point_11, full_point_21, full_center)
+full_face_2 = triangle(full_point_21, full_point_22, full_center)
+full_face_3 = triangle(full_point_12, full_point_22, full_center)
+full_face_4 = triangle(full_point_11, full_point_12, full_center)
+
+# Solids of the full part
+# ------------------------
+
+full_dz = box_dz - cyl_dz
+
+full_solid_1 = geompy.MakePrismVecH(full_face_1, cyl_dir, full_dz)
+full_solid_2 = geompy.MakePrismVecH(full_face_2, cyl_dir, full_dz)
+full_solid_3 = geompy.MakePrismVecH(full_face_3, cyl_dir, full_dz)
+full_solid_4 = geompy.MakePrismVecH(full_face_4, cyl_dir, full_dz)
+
+full_internal = geompy.MakeCylinder(full_center, cyl_dir, cyl_radius          , full_dz)
+full_external = geompy.MakeCylinder(full_center, cyl_dir, cyl_radius+cyl_thick, full_dz)
+full_median   = geompy.MakeCut(full_external, full_internal)
+
+# Boolean operations
+# ------------------
+
+full = []
+
+full.append(   geompy.MakeCut(full_solid_1, full_external))
+full.append(geompy.MakeCommon(full_solid_1, full_median))
+
+full.append(   geompy.MakeCut(full_solid_2, full_external))
+full.append(geompy.MakeCommon(full_solid_2, full_median ))
+
+full.append(   geompy.MakeCut(full_solid_3, full_external))
+full.append(geompy.MakeCommon(full_solid_3, full_median))
+
+full.append(   geompy.MakeCut(full_solid_4, full_external))
+full.append(geompy.MakeCommon(full_solid_4, full_median))
+
+# Filling the hole
+# ----------------
+
+box_d = cyl_radius/3
+
+x = cyl_x-box_d
+y = x * cyl_y / cyl_x
+box_point_11 = geompy.MakeVertex(x, y, cyl_dz)
+
+x = cyl_x+box_d
+y = (box_dx - x) * cyl_y / (box_dx - cyl_x)
+box_point_12 = geompy.MakeVertex(x, y, cyl_dz)
+
+x = cyl_x-box_d
+y = box_dy - x * (box_dy - cyl_y) / cyl_x
+box_point_21 = geompy.MakeVertex(x, y, cyl_dz)
+
+x = cyl_x+box_d
+y = box_dy - (box_dx - x) * (box_dy - cyl_y) / (box_dx - cyl_x)
+box_point_22 = geompy.MakeVertex(x, y, cyl_dz)
+
+box_face = geompy.MakeQuad4Vertices(box_point_11, box_point_12, box_point_21, box_point_22)
+
+box = geompy.MakePrismVecH(box_face, cyl_dir, full_dz)
+
+full.append(box)
+
+full.append(geompy.MakeCut(geompy.MakeCommon(full_solid_1, full_internal), box))
+full.append(geompy.MakeCut(geompy.MakeCommon(full_solid_2, full_internal), box))
+full.append(geompy.MakeCut(geompy.MakeCommon(full_solid_3, full_internal), box))
+full.append(geompy.MakeCut(geompy.MakeCommon(full_solid_4, full_internal), box))
+
+# Cut the cylinder thickness
+# -------------------------
+
+full_plan = geompy.MakePlane(geompy.MakeVertex(0, 0, cyl_dz+cyl_thick), cyl_dir, 5000)
+
+full_parts = geompy.MakePartition(full, [full_plan], [], [], geompy.ShapeType["SOLID"])
+
+# Geometry result
+# ---------------
+
+blocks.append(full_parts)
+
+piece_cpd = geompy.MakeCompound(blocks)
+
+piece_ok = geompy.RemoveExtraEdges(piece_cpd, doUnionFaces=True)
+
+piece = geompy.MakeGlueFaces(piece_ok, 1.e-3)
+
+piece_id = geompy.addToStudy(piece, "ex13_hole1partial")
+
+# Meshing
+# =======
+
+# Create a mesh
+# -------------
+
+hexa = smesh.Mesh(piece, "ex13_hole1partial:hexa")
+
+algo = hexa.Segment()
+algo.NumberOfSegments(2)
+
+hexa.Quadrangle()
+
+hexa.Hexahedron()
+
+# Local hypothesis
+# ----------------
+
+def local(x, y, z, d):
+    edge = geompy.GetEdgeNearPoint(piece, geompy.MakeVertex(x, y, z))
+    algo = hexa.Segment(edge)
+    algo.NumberOfSegments(d)
+    algo.Propagation()
+
+local(0, 0, 100, 40)
+local(0, 0, 700, 15)
+
+local(100, 0, 0, 20)
+local(0, 100, 0, 20)
+
+local(100, 100, 0, 25)
+
+d = cyl_radius-3*cyl_thick
+local(cyl_x+d, cyl_y+d, box_dz, 10)
+
+# Compute the mesh
+# ----------------
+
+isDone = hexa.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex14_cyl1holed.py b/test/ex14_cyl1holed.py
new file mode 100644 (file)
index 0000000..1a2a2ba
--- /dev/null
@@ -0,0 +1,151 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# =======================================
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# Geometrie
+# =========
+
+# Creer un cylindre avec un trou cylindrique excentre, decoupage en hexahedre et mailler.
+
+# Donnees
+# -------
+
+# unite: millimetre
+
+g_ox = 0
+g_oy = 0
+g_oz = 0
+
+g_cyl_rayon       = 1000
+g_cyl_demiHauteur = 3000
+
+g_trou_rayon       =   5
+g_trou_centre      = 300
+
+g_trim = 15000
+
+# Construire le cylindre
+# ----------------------
+
+c_point    = geompy.MakeVertex(g_ox, g_oy, g_oz-g_cyl_demiHauteur)
+c_dir      = geompy.MakeVectorDXDYDZ(0, 0, 1)
+c_hauteur  = 2*g_cyl_demiHauteur
+c_cylindre = geompy.MakeCylinder(c_point, c_dir, g_cyl_rayon, c_hauteur)
+
+# Trouer le cylindre par un minuscule cylindre excentre
+# -----------------------------------------------------
+
+t_hauteur = g_cyl_demiHauteur
+t_point   = geompy.MakeVertex(g_ox-g_trou_centre, g_oy, g_oz-t_hauteur)
+t_trou    = geompy.MakeCylinder(t_point, c_dir, g_trou_rayon, 2*t_hauteur)
+
+t_piece   = geompy.MakeCut(c_cylindre, t_trou)
+
+# Geometrie hexahedrique
+# ======================
+
+# Decouper
+# --------
+
+h_outils = []
+h_outils.append(geompy.MakePlane(t_point, geompy.MakeVectorDXDYDZ(1, 0, 0), g_trim))
+h_outils.append(geompy.MakePlane(t_point, geompy.MakeVectorDXDYDZ(0, 1, 0), g_trim))
+
+h_piece = geompy.MakePartition([t_piece], h_outils, [], [], geompy.ShapeType["SOLID"])
+
+# Decouper pour les conditions locales
+# ------------------------------------
+
+l_outils = []
+l_i = 1
+l_n = 12
+l_hauteur = c_hauteur/l_n
+
+while l_i<l_n:
+    l_outils.append(geompy.MakePlane(geompy.MakeVertex(g_ox, g_oy, g_oz-g_cyl_demiHauteur+l_i*l_hauteur), c_dir, g_trim))
+    l_i = l_i+1
+
+piece = geompy.MakePartition([h_piece], l_outils, [], [], geompy.ShapeType["SOLID"])
+
+# Ajouter la piece dans l'etude
+# -----------------------------
+
+piece_id = geompy.addToStudy(piece, "ex14_cyl1holed")
+
+# Maillage
+# ========
+
+# Creer un maillage hexahedrique
+# ------------------------------
+
+hexa = smesh.Mesh(piece, "ex14_cyl1holed:hexa")
+
+algo = hexa.Segment()
+algo.NumberOfSegments(4)
+
+hexa.Quadrangle()
+
+hexa.Hexahedron()
+
+# Poser les hypotheses locales
+# ----------------------------
+
+m_i = 0
+m_n = 12
+m_h = c_hauteur/m_n
+m_d = [4, 6, 8, 10, 10, 9, 8, 7, 6, 5, 4, 3]
+
+m_x = g_ox+g_cyl_rayon
+m_y = g_oy
+m_z = g_oz-g_cyl_demiHauteur+m_h/2
+
+while m_i<m_n:
+    m_p = geompy.MakeVertex(m_x, m_y, m_z + m_i*m_h)
+    m_e = geompy.GetEdgeNearPoint(piece, m_p)
+    m_a = hexa.Segment(m_e)
+    m_a.NumberOfSegments(m_d[m_i])
+    m_a.Propagation()
+    m_i = m_i + 1
+
+# Calculer le maillage
+# --------------------
+
+isDone = hexa.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex15_cyl2geometry.py b/test/ex15_cyl2geometry.py
new file mode 100644 (file)
index 0000000..89dcf76
--- /dev/null
@@ -0,0 +1,210 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# =======================================
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# Geometrie
+# =========
+
+# Construire avec des hexahedres une piece faite de 2 cylindres de diametre different
+# et dont les axes se coupent orthogonalement, puis mailler.
+
+# Valeurs
+# -------
+
+cx = 0
+cy = 0
+cz = 0
+
+g_rayon   = 100.0
+g_hauteur = 500
+
+p_rayon   =  50.0
+p_hauteur = 500
+
+g_trim = 1000
+
+# Gros cylindre
+# -------------
+
+cpd = []
+
+g_base = geompy.MakeVertex(cx, cy, cz)
+g_dir  = geompy.MakeVectorDXDYDZ(0, 0, 1)
+t_hauteur = p_rayon+10.0
+
+g_cyl = geompy.MakeCylinder(g_base, g_dir, g_rayon, g_hauteur)
+
+g_coupe   = geompy.MakeVectorDXDYDZ(1, 0, 0)
+
+g_tools = []
+g_tools.append(geompy.MakePlane(geompy.MakeVertex(cx+t_hauteur, cy, cz), g_coupe, g_trim))
+g_tools.append(geompy.MakePlane(geompy.MakeVertex(cx-t_hauteur, cy, cz), g_coupe, g_trim))
+
+g_partie = geompy.MakePartition([g_cyl], g_tools, [], [], geompy.ShapeType["SOLID"])
+g_bas, g_centre, g_haut = geompy.SubShapeAllSorted(g_partie, geompy.ShapeType["SOLID"])
+
+# Partie basse du gros cylindre
+# -----------------------------
+
+b_hauteur = 10
+b_base    = 20
+
+b_boite = geompy.MakeBox(cx-t_hauteur, cy-b_base, cz,  cx-t_hauteur-b_hauteur, cy+b_base, cz+g_hauteur)
+cpd.append(b_boite)
+
+b_cyl = geompy.MakeCut(g_bas, b_boite)
+
+b_tools = []
+b_tools.append(geompy.MakePlane(geompy.MakeVertex(cx-t_hauteur-b_hauteur, cy+b_base, cz), geompy.MakeVectorDXDYDZ( 1, 1, 0), g_trim))
+b_tools.append(geompy.MakePlane(geompy.MakeVertex(cx-t_hauteur-b_hauteur, cy-b_base, cz), geompy.MakeVectorDXDYDZ(-1, 1, 0), g_trim))
+
+b_partie = geompy.MakePartition([b_cyl], b_tools, [], [], geompy.ShapeType["SOLID"])
+b_element = geompy.SubShapeAll(b_partie, geompy.ShapeType["SOLID"])
+cpd = cpd + b_element
+
+# Partie haute du gros cylindre
+# -----------------------------
+
+h_plan = geompy.MakePlane(g_base, g_coupe, g_trim)
+
+cpd.append(geompy.MakeMirrorByPlane(b_boite, h_plan))
+
+for h in b_element:
+    h_symetrie = geompy.MakeMirrorByPlane(h, h_plan)
+    cpd.append(h_symetrie)
+
+# Petit cylindre
+# --------------
+
+z_arete = p_rayon/2
+x_arete = z_arete*t_hauteur*2/g_hauteur
+
+px = cx-x_arete
+py = cy-1.5*g_rayon
+pz = cz+g_hauteur/2
+
+p_base = geompy.MakeVertex(cx, py, pz)
+p_dir  = geompy.MakeVectorDXDYDZ(0, 1, 0)
+p_cyl  = geompy.MakeCylinder(p_base, p_dir, p_rayon, p_hauteur)
+
+p_boite = geompy.MakeBox(px, py, pz-z_arete,  cx+x_arete, py+p_hauteur, pz+z_arete)
+
+# Partie interieure du petit cylindre
+# -----------------------------------
+
+i_cyl   = geompy.MakeCommon(p_cyl, g_cyl)
+i_tuyau = geompy.MakeCut(i_cyl, p_boite)
+i_boite = geompy.MakeCommon(p_boite, g_cyl)
+
+# Partie exterieure du petit cylindre
+# -----------------------------------
+
+e_cyl0 = geompy.MakeCut(p_cyl, g_cyl)
+e_cyl  = geompy.SubShapeAllSorted(e_cyl0, geompy.ShapeType["SOLID"])
+
+e_tuyau = geompy.MakeCut(e_cyl[1], p_boite)
+
+e_boite0 = geompy.MakeCut(p_boite, g_cyl)
+e_boite  = geompy.SubShapeAllSorted(e_boite0, geompy.ShapeType["SOLID"])
+
+cpd.append(e_boite[1])
+
+# Partie centrale du gros cylindre
+# --------------------------------
+
+c_cyl = geompy.MakeCut(g_centre, p_cyl)
+
+# Partitionner
+# ------------
+
+p_tools = []
+p_tools.append(geompy.MakePlane(geompy.MakeVertex(px, py, pz-z_arete), geompy.MakeVectorDXDYDZ(-z_arete, 0, x_arete), g_trim))
+p_tools.append(geompy.MakePlane(geompy.MakeVertex(px, py, pz+z_arete), geompy.MakeVectorDXDYDZ( z_arete, 0, x_arete), g_trim))
+
+p_partie = geompy.MakePartition([e_tuyau], p_tools, [], [], geompy.ShapeType["SOLID"])
+p_element = geompy.SubShapeAll(p_partie, geompy.ShapeType["SOLID"])
+cpd = cpd + p_element
+
+q_partie = geompy.MakePartition([i_tuyau, c_cyl], p_tools, [], [], geompy.ShapeType["SOLID"])
+q_element = geompy.SubShapeAll(q_partie, geompy.ShapeType["SOLID"])
+
+q_element = q_element + [i_boite]
+
+q_tools = []
+q_tools.append(geompy.MakePlane(geompy.MakeVertex(cx, cy-b_base, cz), geompy.MakeVectorDXDYDZ(0, 1, 0), g_trim))
+q_tools.append(geompy.MakePlane(geompy.MakeVertex(cx, cy+b_base, cz), geompy.MakeVectorDXDYDZ(0, 1, 0), g_trim))
+
+r_element = []
+for e in q_element:
+    r_partie = geompy.MakePartition([e], q_tools, [], [], geompy.ShapeType["SOLID"])
+    r_element = r_element + geompy.SubShapeAll(r_partie, geompy.ShapeType["SOLID"])
+
+cpd = cpd + r_element
+
+# Compound
+# --------
+
+piece = geompy.RemoveExtraEdges(geompy.MakeCompound(cpd), True)
+
+# Ajouter la piece dans l'etude
+# -----------------------------
+
+piece_id = geompy.addToStudy(piece, "ex15_cyl2geometry")
+
+# Meshing
+# =======
+
+# Create a hexahedral mesh
+# ------------------------
+
+hexa = smesh.Mesh(piece, "ex15_cyl2geometry:hexa")
+
+algo = hexa.Segment()
+algo.NumberOfSegments(12)
+
+hexa.Quadrangle()
+
+hexa.Hexahedron()
+
+# Mesh calculus
+# -------------
+
+isDone = hexa.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex16_cyl2complementary.py b/test/ex16_cyl2complementary.py
new file mode 100644 (file)
index 0000000..6004a0a
--- /dev/null
@@ -0,0 +1,154 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# =======================================
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# Geometry
+# ========
+
+# Create the hexahedrical block geometry of a holed parallelepipede.
+# The hole has a T form composed by 2 cylinders with different radius, and their axis are normal.
+# This piece is meshed in hexahedrical.
+
+# Values
+# ------
+
+gx = 0
+gy = 0
+gz = 0
+
+g_dx = 250
+g_dy = 200
+g_dz = 150
+
+g_rayonGrand = 70
+g_rayonPetit = 50
+
+g_trim = 1000
+
+# The parallelepipede
+# -------------------
+
+p_boite = geompy.MakeBox(gx-g_dx, gy-g_dy, gz-g_dz,  gx+g_dx, gy+g_dy, gz+g_dz)
+
+# The great cylinder
+# ------------------
+
+g_base = geompy.MakeVertex(gx-g_dx, gy, gz)
+g_dir  = geompy.MakeVectorDXDYDZ(1, 0, 0)
+g_cyl  = geompy.MakeCylinder(g_base, g_dir, g_rayonGrand, g_dx*2)
+
+# The first hole
+# --------------
+
+b_boite = geompy.MakeCut(p_boite , g_cyl)
+
+# Partitioning
+# ------------
+
+p_base = geompy.MakeVertex(gx, gy, gz)
+
+p_tools = []
+
+p_tools.append(geompy.MakePlane(p_base, geompy.MakeVectorDXDYDZ(0,  1   , 0   ), g_trim))
+p_tools.append(geompy.MakePlane(p_base, geompy.MakeVectorDXDYDZ(0,  g_dz, g_dy), g_trim))
+p_tools.append(geompy.MakePlane(p_base, geompy.MakeVectorDXDYDZ(0, -g_dz, g_dy), g_trim))
+
+p_tools.append(geompy.MakePlane(geompy.MakeVertex(gx-g_rayonPetit, gy, gz), g_dir, g_trim))
+p_tools.append(geompy.MakePlane(geompy.MakeVertex(gx+g_rayonPetit, gy, gz), g_dir, g_trim))
+
+p_piece = geompy.MakePartition([b_boite], p_tools, [], [], geompy.ShapeType["SOLID"])
+
+# The small cylinder
+# ------------------
+
+c_cyl = geompy.MakeCylinder(p_base, geompy.MakeVectorDXDYDZ(0, 0, 1), g_rayonPetit, g_dz)
+
+# The second hole
+# ---------------
+
+d_element = geompy.SubShapeAllSorted(p_piece, geompy.ShapeType["SOLID"])
+
+d_element[ 8] = geompy.MakeCut(d_element[ 8], c_cyl)
+d_element[10] = geompy.MakeCut(d_element[10], c_cyl)
+
+# Compound
+# --------
+
+piece = geompy.RemoveExtraEdges(geompy.MakeCompound(d_element))
+piece = geompy.MakeGlueFaces(piece, 1e-07)
+
+# Add piece in study
+# ------------------
+
+piece_id = geompy.addToStudy(piece, "ex16_cyl2complementary")
+
+# Meshing
+# =======
+
+# Create a hexahedral mesh
+# ------------------------
+
+hexa = smesh.Mesh(piece, "ex16_cyl2complementary:hexa")
+
+algo = hexa.Segment()
+algo.NumberOfSegments(12)
+
+hexa.Quadrangle()
+
+hexa.Hexahedron()
+
+# Define local hypothesis
+# -----------------------
+
+def local(x, y, z, d):
+    edge = geompy.GetEdgeNearPoint(piece, geompy.MakeVertex(x, y, z))
+    algo = hexa.Segment(edge)
+    algo.NumberOfSegments(d)
+    algo.Propagation()
+
+local(gx     , gy+g_dy, gz+g_dz, 7)
+local(gx+g_dx, gy+g_dy, gz     , 21)
+local(gx+g_dx, gy-g_dy, gz     , 21)
+
+# Mesh calculus
+# -------------
+
+isDone = hexa.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex17_dome1.py b/test/ex17_dome1.py
new file mode 100644 (file)
index 0000000..403ef89
--- /dev/null
@@ -0,0 +1,113 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# =======================================
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# Geometrie
+# =========
+
+# Creer un cylindre surplombe d'une demi-sphere le tout troue par un petit cylindre.
+# Decouper en hexahedre et mailler.
+
+# Donnees
+# -------
+
+cylindre_rayon   = 100
+cylindre_hauteur = 400
+
+trou_rayon = 20
+trou_z     = cylindre_rayon/2
+
+plan_trim = 2000
+
+# Cylindre
+# --------
+
+cylindre_base = geompy.MakeVertex(0, 0, 0)
+cylindre_dir  = geompy.MakeVectorDXDYDZ(1, 0, 0)
+cylindre      = geompy.MakeCylinder(cylindre_base, cylindre_dir, cylindre_rayon, cylindre_hauteur)
+
+# Dome
+# ----
+
+dome_sphere = geompy.MakeSpherePntR(cylindre_base, cylindre_rayon)
+dome        = geompy.MakeFuse(dome_sphere, cylindre)
+
+# Cheminee
+# --------
+
+cheminee_base = geompy.MakeVertex(-cylindre_hauteur/2, 0, trou_z)
+cheminee_trou = geompy.MakeCylinder(cheminee_base, cylindre_dir, trou_rayon, 2*cylindre_hauteur)
+cheminee      = geompy.MakeCut(dome, cheminee_trou)
+
+# Decoupage et reparation
+# -----------------------
+
+blocs_plan1 = geompy.MakePlane(cheminee_base, geompy.MakeVectorDXDYDZ(0, 1, 0), plan_trim)
+blocs_plan2 = geompy.MakePlane(cheminee_base, geompy.MakeVectorDXDYDZ(0, 0, 1), plan_trim)
+
+blocs_part = geompy.MakePartition([cheminee], [blocs_plan1, blocs_plan2], [], [], geompy.ShapeType["SOLID"])
+
+piece = geompy.RemoveExtraEdges(blocs_part)
+
+# Etude
+# -----
+
+piece_id = geompy.addToStudy(piece, "ex17_dome1")
+
+# Maillage
+# ========
+
+# Maillage hexahedrique
+# ---------------------
+
+hexa = smesh.Mesh(piece, "ex17_dome1:hexa")
+
+algo = hexa.Segment()
+algo.NumberOfSegments(20)
+
+hexa.Quadrangle()
+
+hexa.Hexahedron()
+
+# Calcul du maillage
+# ------------------
+
+isDone = hexa.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex18_dome2.py b/test/ex18_dome2.py
new file mode 100644 (file)
index 0000000..fdd76b8
--- /dev/null
@@ -0,0 +1,150 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# =======================================
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+import math
+
+# Geometrie
+# =========
+
+# Creer un cylindre ayant a chaque bout un morceau de sphere et le tout troue par un petit cylindrique excentre.
+# Decouper en hexahedre et mailler.
+
+# Donnees
+# -------
+
+# unite: millimetre
+
+g_ox = 0
+g_oy = 0
+g_oz = 0
+
+g_cyl_rayon       = 1000
+g_cyl_demiHauteur = 3000
+
+g_trou_rayon       =   5
+g_trou_centre      = 300
+
+g_sphere_rayon = 3500
+
+g_trim = 15000
+
+# Cylindre
+# --------
+
+c_point    = geompy.MakeVertex(g_ox, g_oy, g_oz-g_cyl_demiHauteur)
+c_dir      = geompy.MakeVectorDXDYDZ(0, 0, 1)
+c_hauteur  = 2*g_cyl_demiHauteur
+
+c_cylindre = geompy.MakeCylinder(c_point, c_dir, g_cyl_rayon, c_hauteur)
+
+# Sphere
+# ------
+
+s_hauteur = math.sqrt(g_sphere_rayon*g_sphere_rayon - g_cyl_rayon*g_cyl_rayon) - g_cyl_demiHauteur
+
+s_sphere  = geompy.MakeSphere(g_ox, g_oy, g_oz-s_hauteur, g_sphere_rayon)
+
+# Calottes
+# --------
+
+c_outils = []
+c_outils.append(geompy.MakePlane(geompy.MakeVertex(g_ox, g_oy, g_oz+g_cyl_demiHauteur), geompy.MakeVectorDXDYDZ(0, 0, 1), g_trim))
+
+c_cpd = geompy.MakePartition([s_sphere], c_outils, [], [], geompy.ShapeType["SOLID"])
+c_calotte_haut, c_reste = geompy.SubShapeAllSorted(c_cpd, geompy.ShapeType["SOLID"])
+
+c_plan = geompy.MakePlane(geompy.MakeVertex(g_ox, g_oy, g_oz), geompy.MakeVectorDXDYDZ(0, 0, 1), g_trim)
+c_calotte_bas = geompy.MakeMirrorByPlane(c_calotte_haut, c_plan)
+
+# Fusionner
+# ---------
+
+f_piece1 = geompy.MakeFuse(c_cylindre, c_calotte_haut)
+f_piece  = geompy.MakeFuse(f_piece1, c_calotte_bas)
+
+# Trouer
+# ------
+
+t_hauteur = g_sphere_rayon
+t_point   = geompy.MakeVertex(g_ox-g_trou_centre, g_oy, g_oz-t_hauteur)
+t_trou    = geompy.MakeCylinder(t_point, c_dir, g_trou_rayon, 2*t_hauteur)
+
+t_piece   = geompy.MakeCut(f_piece, t_trou)
+
+# Decouper
+# --------
+
+h_outils = []
+h_outils.append(geompy.MakePlane(t_point, geompy.MakeVectorDXDYDZ(1, 0, 0), g_trim))
+h_outils.append(geompy.MakePlane(t_point, geompy.MakeVectorDXDYDZ(0, 1, 0), g_trim))
+
+h_piece = geompy.MakePartition([t_piece], h_outils, [], [], geompy.ShapeType["SOLID"])
+
+# Reparer
+# -------
+
+piece = geompy.RemoveExtraEdges(h_piece)
+
+# Ajouter la piece dans l'etude
+# -----------------------------
+
+piece_id = geompy.addToStudy(piece, "ex18_dome2")
+
+# Maillage
+# ========
+
+# Maillage hexahedrique
+# ---------------------
+
+hexa = smesh.Mesh(piece, "ex18_dome2:hexa")
+
+algo = hexa.Segment()
+algo.NumberOfSegments(2)
+
+hexa.Quadrangle()
+
+hexa.Hexahedron()
+
+# Calcul du maillage
+# ------------------
+
+isDone = hexa.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex19_sphereINcube.py b/test/ex19_sphereINcube.py
new file mode 100644 (file)
index 0000000..ec63f3b
--- /dev/null
@@ -0,0 +1,195 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# ==================================
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# Geometrie
+# =========
+
+# Mailler en hexahedre une sphere dans un cube.
+
+# Donnees
+# -------
+
+sphere_rayon = 100
+
+cube_cote = 200
+
+plan_trim = 1000
+
+# Sphere
+# ------
+
+sphere_centre = geompy.MakeVertex(0, 0, 0)
+
+sphere_pleine = geompy.MakeSpherePntR(sphere_centre, sphere_rayon)
+
+# Cube interieur
+# --------------
+
+boite_cote = sphere_rayon / 2
+
+boite = geompy.MakeBox(-boite_cote, -boite_cote, -boite_cote,  +boite_cote, +boite_cote, +boite_cote)
+
+blocs = [boite]
+
+# Decoupage sphere
+# ----------------
+
+sphere_troue = geompy.MakeCut(sphere_pleine, boite)
+
+#sphere_outils = []
+#sphere_outils.append(MakePlane(sphere_centre, MakeVectorDXDYDZ( 1, 0,  1), plan_trim))
+#sphere_outils.append(MakePlane(sphere_centre, MakeVectorDXDYDZ( 1, 0, -1), plan_trim))
+#sphere_outils.append(MakePlane(sphere_centre, MakeVectorDXDYDZ( 1, 1,  0), plan_trim))
+#sphere_outils.append(MakePlane(sphere_centre, MakeVectorDXDYDZ(-1, 1,  0), plan_trim))
+
+f1 = geompy.MakePlane(sphere_centre, geompy.MakeVectorDXDYDZ( 1, 0,  1), plan_trim)
+f2 = geompy.MakePlane(sphere_centre, geompy.MakeVectorDXDYDZ(-1, 1,  0), plan_trim)
+f3 = geompy.MakePlane(sphere_centre, geompy.MakeVectorDXDYDZ( 1, 1,  0), plan_trim)
+f4 = geompy.MakePlane(sphere_centre, geompy.MakeVectorDXDYDZ( 1, 0, -1), plan_trim)
+
+
+#sphere_decoupee = MakePartition(solids, sphere_outils, [], [], ShapeType["SOLID"])
+
+sphere_decoupee = geompy.MakePartition([sphere_troue],    [f1], [], [], geompy.ShapeType["SOLID"])
+sphere_decoupee = geompy.MakePartition([sphere_decoupee], [f2], [], [], geompy.ShapeType["SOLID"])
+sphere_decoupee = geompy.MakePartition([sphere_decoupee], [f3], [], [], geompy.ShapeType["SOLID"])
+sphere_decoupee = geompy.MakePartition([sphere_decoupee], [f4], [], [], geompy.ShapeType["SOLID"])
+
+sphere_partie = geompy.MakeCompound([sphere_decoupee])
+
+sphere_partie   = geompy.GetBlockNearPoint(sphere_decoupee, geompy.MakeVertex(-sphere_rayon, 0, 0))
+sphere_bloc     = geompy.RemoveExtraEdges(sphere_partie)
+
+blocs.append(sphere_bloc)
+
+pi2 = 3.141592653/2
+
+sphere_dir1 = geompy.MakeVectorDXDYDZ(0, 1,  0)
+sphere_dir2 = geompy.MakeVectorDXDYDZ(0, 0,  1)
+
+blocs.append(geompy.MakeRotation(sphere_bloc, sphere_dir1, +pi2))
+blocs.append(geompy.MakeRotation(sphere_bloc, sphere_dir1, -pi2))
+
+blocs.append(geompy.MakeRotation(sphere_bloc, sphere_dir2, +pi2))
+blocs.append(geompy.MakeRotation(sphere_bloc, sphere_dir2, -pi2))
+
+blocs.append(geompy.MakeMirrorByPoint(sphere_bloc, sphere_centre))
+
+# Cube exterieur
+# --------------
+
+cube_plein   = geompy.MakeBox(-cube_cote, -cube_cote, -cube_cote,  +cube_cote, +cube_cote, +cube_cote)
+cube_trou    = geompy.MakeCut(cube_plein, sphere_pleine)
+#cube_decoupe = MakePartition([cube_trou], sphere_outils, [], [], ShapeType["SOLID"])
+
+cube_decoupe = geompy.MakePartition([cube_trou],    [f1], [], [], geompy.ShapeType["SOLID"])
+cube_decoupe = geompy.MakePartition([cube_decoupe], [f2], [], [], geompy.ShapeType["SOLID"])
+cube_decoupe = geompy.MakePartition([cube_decoupe], [f3], [], [], geompy.ShapeType["SOLID"])
+cube_decoupe = geompy.MakePartition([cube_decoupe], [f4], [], [], geompy.ShapeType["SOLID"])
+
+cube_decoupe = geompy.MakeCompound([cube_decoupe])
+
+
+cube_partie  = geompy.GetBlockNearPoint(cube_decoupe, geompy.MakeVertex(-cube_cote, 0, 0))
+cube_bloc    = geompy.RemoveExtraEdges(cube_partie)
+
+blocs.append(cube_bloc)
+
+blocs.append(geompy.MakeRotation(cube_bloc, sphere_dir1, +pi2))
+blocs.append(geompy.MakeRotation(cube_bloc, sphere_dir1, -pi2))
+
+blocs.append(geompy.MakeRotation(cube_bloc, sphere_dir2, +pi2))
+blocs.append(geompy.MakeRotation(cube_bloc, sphere_dir2, -pi2))
+
+blocs.append(geompy.MakeMirrorByPoint(cube_bloc, sphere_centre))
+
+# Piece
+# -----
+
+piece_cpd = geompy.MakeCompound(blocs)
+piece = geompy.MakeGlueFaces(piece_cpd, 1.e-3)
+
+piece_id = geompy.addToStudy(piece, "ex19_sphereINcube")
+
+# Groupe geometrique
+# ==================
+
+# Definition du groupe
+# --------------------
+
+groupe = geompy.CreateGroup(piece, geompy.ShapeType["SOLID"])
+
+groupe_nom = "ex19_sphereINcube_interieur"
+geompy.addToStudy(groupe, groupe_nom)
+groupe.SetName(groupe_nom)
+
+# Contenu du groupe
+# -----------------
+
+groupe_sphere = geompy.GetShapesOnSphere(piece, geompy.ShapeType["SOLID"], sphere_centre, sphere_rayon, GEOM.ST_ONIN)
+
+geompy.UnionList(groupe, groupe_sphere)
+
+# Meshing
+# =======
+
+# Create a hexahedral mesh
+# ------------------------
+
+hexa = smesh.Mesh(piece, "ex19_sphereINcube:hexa")
+
+algo = hexa.Segment()
+algo.NumberOfSegments(10)
+
+hexa.Quadrangle()
+
+hexa.Hexahedron()
+
+# Mesh calculus
+# -------------
+
+isDone = hexa.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Le groupe de mailles
+# --------------------
+
+hexa_groupe = hexa.Group(groupe)
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex21_lamp.py b/test/ex21_lamp.py
new file mode 100644 (file)
index 0000000..f06aa2c
--- /dev/null
@@ -0,0 +1,141 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# ==================================
+#
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# Geometry
+# ========
+
+# an assembly of a box, a cylinder and a truncated cone meshed with tetrahedral.
+
+# Define values
+# -------------
+
+name = "ex21_lamp"
+
+cote = 60
+
+section = 20
+size    = 200
+
+radius_1 = 80
+radius_2 = 40
+height   = 100
+
+# Build a box
+# -----------
+
+box  = geompy.MakeBox(-cote, -cote, -cote,  +cote, +cote, +cote)
+
+# Build a cylinder
+# ----------------
+
+pt1 = geompy.MakeVertex(0, 0, cote/3)
+di1 = geompy.MakeVectorDXDYDZ(0, 0, 1)
+cyl = geompy.MakeCylinder(pt1, di1, section, size)
+
+# Build a truncated cone
+# ----------------------
+
+pt2 = geompy.MakeVertex(0, 0, size)
+cone = geompy.MakeCone(pt2, di1, radius_1, radius_2, height)
+
+# Fuse
+# ----
+
+box_cyl = geompy.MakeFuse(box, cyl)
+piece = geompy.MakeFuse(box_cyl, cone)
+
+# Add in study
+# ------------
+
+geompy.addToStudy(piece, name)
+
+# Create a group of faces
+# -----------------------
+
+group = geompy.CreateGroup(piece, geompy.ShapeType["FACE"])
+
+group_name = name + "_grp"
+geompy.addToStudy(group, group_name)
+group.SetName(group_name)
+
+# Add faces in the group
+# ----------------------
+
+faces = geompy.SubShapeAllIDs(piece, geompy.ShapeType["FACE"])
+
+geompy.UnionIDs(group, faces)
+
+# Create a mesh
+# =============
+
+# Define a mesh on a geometry
+# ---------------------------
+
+tetra = smesh.Mesh(piece, name)
+
+# Define 1D hypothesis
+# --------------------
+
+algo1d = tetra.Segment()
+algo1d.LocalLength(10)
+
+# Define 2D hypothesis
+# --------------------
+
+algo2d = tetra.Triangle()
+algo2d.LengthFromEdges()
+
+# Define 3D hypothesis
+# --------------------
+
+algo3d = tetra.Tetrahedron(smeshBuilder.NETGEN)
+algo3d.MaxElementVolume(100)
+
+# Compute the mesh
+# ----------------
+
+isDone = tetra.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# Create a groupe of faces
+# ------------------------
+
+tetra.Group(group)
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
\ No newline at end of file
diff --git a/test/ex24_cylinder.py b/test/ex24_cylinder.py
new file mode 100644 (file)
index 0000000..51ef152
--- /dev/null
@@ -0,0 +1,139 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# ==================================
+#
+import math
+
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+geo = geompy
+
+# Parameters
+# ----------
+
+radius =  50
+height = 200
+
+# Build a cylinder
+# ----------------
+
+base = geompy.MakeVertex(0, 0, 0)
+direction = geompy.MakeVectorDXDYDZ(0, 0, 1)
+
+cylinder = geompy.MakeCylinder(base, direction, radius, height)
+
+geompy.addToStudy(cylinder, "cylinder")
+
+# Build blocks
+# ------------
+
+size = radius/2.0
+
+box_rot = geompy.MakeBox(-size, -size, 0,  +size, +size, height)
+box_axis = geompy.MakeLine(base, direction)
+box = geompy.MakeRotation(box_rot, box_axis, math.pi/4)
+
+hole = geompy.MakeCut(cylinder, box)
+
+plane_trim = 2000
+
+plane_a = geompy.MakePlane(base, geompy.MakeVectorDXDYDZ(1, 0, 0), plane_trim)
+plane_b = geompy.MakePlane(base, geompy.MakeVectorDXDYDZ(0, 1, 0), plane_trim)
+
+blocks_part = geompy.MakePartition([hole], [plane_a, plane_b], [], [], geompy.ShapeType["SOLID"])
+blocks_list = [box] + geompy.SubShapeAll(blocks_part, geompy.ShapeType["SOLID"])
+blocks_all = geompy.MakeCompound(blocks_list)
+blocks = geompy.MakeGlueFaces(blocks_all, 0.0001)
+
+geompy.addToStudy(blocks, "cylinder:blocks")
+
+# Build geometric groups
+# ----------------------
+
+def group(name, shape, type, base=None, direction=None):
+    t = geompy.ShapeType[type]
+    g = geompy.CreateGroup(shape, t)
+
+    geompy.addToStudy(g, name)
+    g.SetName(name)
+
+    if base!=None:
+        l = geompy.GetShapesOnPlaneWithLocationIDs(shape, t, direction, base, GEOM.ST_ON)
+        geompy.UnionIDs(g, l)
+
+    return g
+
+group_a = group("baseA", blocks, "FACE", base, direction)
+
+base_b  = geompy.MakeVertex(0, 0, height)
+group_b = group("baseB", blocks, "FACE", base_b, direction)
+
+group_1 = group("limit", blocks, "SOLID")
+group_1_all = geompy.SubShapeAllIDs(blocks, geompy.ShapeType["SOLID"])
+geompy.UnionIDs(group_1, group_1_all)
+group_1_box = geompy.GetBlockNearPoint(blocks, base)
+geompy.DifferenceList(group_1, [group_1_box])
+
+# Mesh the blocks with hexahedral
+# -------------------------------
+
+smesh.UpdateStudy()
+
+def discretize(x, y, z,  n, s=blocks):
+    p = geompy.MakeVertex(x, y, z)
+    e = geompy.GetEdgeNearPoint(s, p)
+    a = hexa.Segment(e)
+    a.NumberOfSegments(n)
+    a.Propagation()
+
+hexa = smesh.Mesh(blocks)
+
+hexa_1d = hexa.Segment()
+hexa_1d.NumberOfSegments(1)
+
+discretize(+radius        , +radius,        0,   5)
+discretize(-radius        , +radius,        0,   8)
+discretize((radius+size)/2,       0,        0,  10)
+discretize(        +radius,       0, height/2,  20)
+
+hexa.Quadrangle()
+hexa.Hexahedron()
+
+isDone = hexa.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+hexa.Group(group_a)
+hexa.Group(group_b)
+hexa.Group(group_1)
+
+# Update object browser
+# ---------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex29_refine.py b/test/ex29_refine.py
new file mode 100644 (file)
index 0000000..031f8be
--- /dev/null
@@ -0,0 +1,246 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+# =======================================
+# Procedure that take a triangulation and split all triangles in 4 others triangles
+#
+
+import os
+import shutil
+import tempfile
+
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+
+# Values
+# ------
+
+tmpDir = tempfile.mkdtemp()
+print("Output directory:", tmpDir)
+
+# Path for ".med" files
+path = os.path.join(tmpDir, "ex29_")
+
+# Name of the shape and the mesh
+name = "Carre"
+
+# Add a node and needed edges
+# ---------------------------
+
+def node(m, f, n1, n2, lnv):
+    x1, y1, z1 = m.GetNodeXYZ(n1)
+    x2, y2, z2 = m.GetNodeXYZ(n2)
+
+    x = (x1 + x2) / 2.0
+    y = (y1 + y2) / 2.0
+    z = (z1 + z2) / 2.0
+
+    i = m.AddNode(x, y, z)
+
+    in1 = m.GetShapeID(n1)
+    in2 = m.GetShapeID(n2)
+
+    if (in1==f) or (in2==f):
+        m.SetNodeOnFace(i, f, 0, 0)
+
+    else:
+        e1 = m.AddEdge([ n1, i  ])
+        e2 = m.AddEdge([ i , n2 ])
+
+        if n1 in lnv:
+            e = in2
+        else:
+            e = in1
+
+        m.SetMeshElementOnShape(e1, e)
+        m.SetMeshElementOnShape(e2, e)
+        m.SetNodeOnEdge(i, e, 0)
+
+    return i
+
+# Add a triangle and associate to the CAD face
+# --------------------------------------------
+
+def triangle(m, f, n1, n2, n3):
+    i = m.AddFace([ n1, n2, n3 ])
+    m.SetMeshElementOnShape(i, f)
+
+# Split all triangles in 4 triangles
+# ----------------------------------
+
+def SplitTrianglesIn4(m):
+    # Get all triangles
+    triangles = m.GetElementsByType(SMESH.FACE)
+
+    # Remove all edges
+    m.RemoveElements(m.GetElementsByType(SMESH.EDGE))
+
+    # Get the list of nodes (ids) associated with the CAD vertices
+    shape = m.GetShape()
+    lnv = []
+    for v in geompy.SubShapeAll(shape, geompy.ShapeType["VERTEX"]):
+        lnv = lnv + m.GetSubMeshNodesId(v, True)
+
+    # Split every triangle
+    for t in triangles:
+        noeud_1, noeud_2, noeud_3 = m.GetElemNodes(t)
+
+        face = m.GetShapeIDForElem(t)
+
+        noeud_12 = node(m, face, noeud_1, noeud_2, lnv)
+        noeud_23 = node(m, face, noeud_2, noeud_3, lnv)
+        noeud_13 = node(m, face, noeud_1, noeud_3, lnv)
+
+        triangle(m, face, noeud_1 , noeud_12, noeud_13)
+        triangle(m, face, noeud_2 , noeud_23, noeud_12)
+        triangle(m, face, noeud_3 , noeud_13, noeud_23)
+        triangle(m, face, noeud_12, noeud_23, noeud_13)
+
+    # Remove all initial triangles
+    m.RemoveElements(triangles)
+
+    # Merge all identical nodes
+    m.MergeNodes(m.FindCoincidentNodes(0.0001))
+
+# Build a CAD square
+# ------------------
+
+x0 = 0.0 ; y0 = 0.0 ; z0 = 0.0
+x1 = 1.0 ; y1 = 0.0 ; z1 = 0.0
+x2 = 1.0 ; y2 = 1.0 ; z2 = 0.0
+x3 = 0.0 ; y3 = 1.0 ; z3 = 0.0
+
+P0 = geompy.MakeVertex(x0, y0, z0)
+P1 = geompy.MakeVertex(x1, y1, z1)
+P2 = geompy.MakeVertex(x2, y2, z2)
+P3 = geompy.MakeVertex(x3, y3, z3)
+
+square = geompy.MakeQuad4Vertices(P0, P1, P2, P3)
+geompy.addToStudy(square, name)
+
+# Refine edges and create group of mesh
+# -------------------------------------
+
+def refine(m, p1, p2, n, k, name):
+    s = m.GetShape()
+
+    g = geompy.CreateGroup(s, geompy.ShapeType["EDGE"])
+    e = geompy.GetEdge(s, p1, p2)
+    i = geompy.GetSubShapeID(s, e)
+    geompy.AddObject(g, i)
+    m.Group(g, name)
+
+    a = m.Segment(e)
+    a.NumberOfSegments(n, k)
+
+# Mesh the square
+# ---------------
+
+MyMesh = smesh.Mesh(square)
+
+refine(MyMesh, P1, P2,  8,  7, "Droite")
+refine(MyMesh, P3, P0,  9, 10, "Gauche")
+refine(MyMesh, P0, P1,  7,  9, "Bas"   )
+refine(MyMesh, P2, P3, 12, 14, "Haut"  )
+
+algo2D = MyMesh.Triangle()
+algo2D.MaxElementArea(0.07)
+
+isDone = MyMesh.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+MyMesh.ExportMED(path+"110_triangles.med", 0)
+
+# Disturb the mesh
+# ----------------
+
+MyMesh.MoveNode( 37, 0.05    , 0.368967 , 0 )
+MyMesh.MoveNode( 38, 0.34    , 0.0762294, 0 )
+MyMesh.MoveNode( 40, 0.8     , 0.42     , 0 )
+MyMesh.MoveNode( 42, 0.702662, 0.74     , 0 )
+MyMesh.MoveNode( 46, 0.4     , 0.374656 , 0 )
+MyMesh.MoveNode( 47, 0.13    , 0.63     , 0 )
+MyMesh.MoveNode( 49, 0.222187, 0.3      , 0 )
+MyMesh.MoveNode( 54, 0.557791, 0.05     , 0 )
+MyMesh.MoveNode( 55, 0.7     , 0.2      , 0 )
+MyMesh.MoveNode( 56, 0.73    , 0.52     , 0 )
+MyMesh.MoveNode( 58, 0.313071, 0.31     , 0 )
+MyMesh.MoveNode( 59, 0.8     , 0.56     , 0 )
+MyMesh.MoveNode( 62, 0.592703, 0.95     , 0 )
+MyMesh.MoveNode( 63, 0.28    , 0.5      , 0 )
+MyMesh.MoveNode( 65, 0.49    , 0.93     , 0 )
+MyMesh.MoveNode( 68, 0.501038, 0.65     , 0 )
+MyMesh.MoveNode( 69, 0.37    , 0.63     , 0 )
+MyMesh.MoveNode( 70, 0.597025, 0.52     , 0 )
+MyMesh.MoveNode( 72, 0.899   , 0.878589 , 0 )
+MyMesh.MoveNode( 73, 0.92    , 0.85     , 0 )
+MyMesh.MoveNode( 74, 0.820851, 0.75     , 0 )
+
+NbCells1 = 110
+MyMesh.ExportMED(path+"110_triangles_2.med", 0)
+
+# First mesh refining
+# -------------------
+
+SplitTrianglesIn4(MyMesh)
+
+NbCells2 = NbCells1*4
+print(("Mesh with "+str(NbCells2)+" cells computed."))
+
+MyMesh.ExportMED(path+str(NbCells2)+"_triangles.med", 0)
+
+# Second mesh refining
+# --------------------
+
+SplitTrianglesIn4(MyMesh)
+
+NbCells3 = NbCells2*4
+print(("Mesh with "+str(NbCells3)+" cells computed."))
+
+MyMesh.ExportMED(path+str(NbCells3)+"_triangles.med",0)
+
+# Third mesh refining
+# -------------------
+
+SplitTrianglesIn4(MyMesh)
+
+NbCells4 = NbCells3*4
+print(("Mesh with "+str(NbCells4)+" cells computed."))
+
+MyMesh.ExportMED(path+str(NbCells4)+"_triangles.med", 0)
+
+# Remove temporary directory
+# --------------------------
+
+if os.getenv('SMESH_KEEP_TMP_DIR') != '1':
+    shutil.rmtree(tmpDir)
+
+# Update the object browser
+# -------------------------
+
+salome.sg.updateObjBrowser()
diff --git a/test/ex30_groupsOp.py b/test/ex30_groupsOp.py
new file mode 100644 (file)
index 0000000..569aae7
--- /dev/null
@@ -0,0 +1,93 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+import math
+
+global Face_1
+Face_1 = geompy.MakeFaceHW(100, 100, 1)
+geompy.addToStudy( Face_1, "Face_1" )
+
+smesh.UpdateStudy()
+from salome.StdMeshers import StdMeshersBuilder
+pattern = smesh.GetPattern()
+Mesh_1 = smesh.Mesh(Face_1)
+Regular_1D = Mesh_1.Segment()
+Nb_Segments_1 = Regular_1D.NumberOfSegments(10)
+Nb_Segments_1.SetDistrType( 0 )
+Quadrangle_2D = Mesh_1.Quadrangle()
+isDone = Mesh_1.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# groups creation
+
+aListOfElems = [ 52, 53, 54, 55, 56, 57,
+                 62, 63, 64, 65, 66, 67,
+                 72, 73, 74, 75, 76, 77,
+                 82, 83, 84, 85, 86, 87 ]
+                 
+aRedGroup = Mesh_1.GetMesh().CreateGroup( SMESH.FACE, "Red" )
+aRedGroup.Add( aListOfElems );
+aRedGroup.SetColor( SALOMEDS.Color( 1, 0, 0 ) )
+
+aListOfElems = [ 55, 56, 57, 58, 59,
+                 65, 66, 67, 68, 69,
+                 75, 76, 77, 78, 79,
+                 85, 86, 87, 88, 89,
+                 95, 96, 97, 98, 99,
+                 105, 106, 107, 108, 109,
+                 115, 116, 117, 118, 119,
+                 125, 126, 127, 128, 129 ]
+                 
+aGreenGroup = Mesh_1.GetMesh().CreateGroup( SMESH.FACE, "Green" )
+aGreenGroup.Add( aListOfElems );
+aGreenGroup.SetColor( SALOMEDS.Color( 0, 1, 0 ) )
+
+aListOfElems = [ 63, 64, 65, 66, 67, 68, 
+                 73, 74, 75, 76, 77, 78,
+                 83, 84, 85, 86, 87, 88, 
+                 93, 94, 95, 96, 97, 98, 
+                 103, 104, 105, 106, 107, 108, 
+                 113, 114, 115, 116, 117, 118 ]
+                 
+aBlueGroup = Mesh_1.GetMesh().CreateGroup( SMESH.FACE, "Blue" )
+aBlueGroup.Add( aListOfElems );
+aBlueGroup.SetColor( SALOMEDS.Color( 0, 0, 1 ) )
+
+# UnionListOfGroups()
+aUnGrp = Mesh_1.UnionListOfGroups([aRedGroup, aGreenGroup, aBlueGroup], "UnionGrp" )
+
+# IntersectListOfGroups()
+aIntGrp=Mesh_1.IntersectListOfGroups([aRedGroup, aGreenGroup, aBlueGroup], "IntGrp" )
+
+# CutListOfGroups()
+aCutGrp=Mesh_1.CutListOfGroups([aRedGroup],[aGreenGroup,aBlueGroup],"CutGrp")
+
+salome.sg.updateObjBrowser()
+
diff --git a/test/ex31_dimGroup.py b/test/ex31_dimGroup.py
new file mode 100644 (file)
index 0000000..ae0fd09
--- /dev/null
@@ -0,0 +1,66 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+import salome
+salome.salome_init()
+import GEOM
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+import SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+smesh =  smeshBuilder.New()
+import math
+
+global Box_1
+Box_1 = geompy.MakeBoxDXDYDZ(200, 200, 200)
+geompy.addToStudy( Box_1, "Box_1" )
+
+smesh.UpdateStudy()
+from salome.StdMeshers import StdMeshersBuilder
+Mesh_1 = smesh.Mesh(Box_1)
+Regular_1D = Mesh_1.Segment()
+Nb_Segments_1 = Regular_1D.NumberOfSegments(10)
+Nb_Segments_1.SetDistrType( 0 )
+Quadrangle_2D = Mesh_1.Quadrangle()
+Hexa_3D = Mesh_1.Hexahedron()
+isDone = Mesh_1.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+### CreateDimGroup()
+
+aListOf3d_1=list(range(721,821))
+
+aGrp3D_1=Mesh_1.GetMesh().CreateGroup( SMESH.VOLUME, "Src 3D 1" )
+aGrp3D_1.Add( aListOf3d_1 )
+
+aListOf3d_2=list(range(821, 921))
+aGrp3D_2=Mesh_1.GetMesh().CreateGroup( SMESH.VOLUME, "Src 3D 2" )
+aGrp3D_2.Add( aListOf3d_2 )
+
+aGrp2D = Mesh_1.CreateDimGroup( [aGrp3D_1, aGrp3D_2], SMESH.FACE, "Faces" )
+
+aGrp1D = Mesh_1.CreateDimGroup( [aGrp3D_1, aGrp3D_2], SMESH.EDGE, "Edges" )
+
+aGrp0D = Mesh_1.CreateDimGroup( [aGrp3D_1, aGrp3D_2], SMESH.NODE, "Nodes" )
+
+salome.sg.updateObjBrowser()
+
diff --git a/test/ex_MakePolyLine.py b/test/ex_MakePolyLine.py
new file mode 100644 (file)
index 0000000..a7fb6a7
--- /dev/null
@@ -0,0 +1,39 @@
+import salome
+salome.salome_init()
+
+### create geometry
+
+from salome.geom import geomBuilder
+geompy = geomBuilder.New()
+
+Box_1 = geompy.MakeBoxDXDYDZ(200, 200, 200)
+geompy.addToStudy( Box_1, 'Box_1' )
+
+### create a mesh
+
+import SMESH
+from salome.smesh import smeshBuilder
+smesh = smeshBuilder.New()
+
+Mesh_1 = smesh.Mesh( Box_1 )
+Mesh_1.Segment().NumberOfSegments(15)
+Mesh_1.Triangle()
+isDone = Mesh_1.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+# define arguments for MakePolyLine
+
+segments = []
+# between nodes 20 and 1, default plane
+segments.append( SMESH.PolySegment( 20, 0, SMESH.PointStruct(-1, -1, -1), 1, 0, SMESH.PointStruct(-1, -1, -1), smesh.MakeDirStruct(0,0,0) ))
+# between nodes 1 and 100, default plane
+segments.append( SMESH.PolySegment( 1, 0, SMESH.PointStruct(-1, -1, -1), 200, 0, SMESH.PointStruct(-1, -1, -1), smesh.MakeDirStruct(0,0,0) ))
+# between nodes 200 and edge (578, 577), plane includes vector (1,1,1)
+segments.append( SMESH.PolySegment( 200, 0, SMESH.PointStruct(-1, -1, -1), 578, 577, SMESH.PointStruct(-1, -1, -1), smesh.MakeDirStruct(1,1,1) ))
+
+Mesh_1.MakePolyLine( segments, "1D group")
+
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser()
diff --git a/test/extrusion_penta_biquad.py b/test/extrusion_penta_biquad.py
new file mode 100644 (file)
index 0000000..51d043a
--- /dev/null
@@ -0,0 +1,57 @@
+# -*- coding: utf-8 -*-
+
+import sys
+import salome
+
+salome.salome_init_without_session()
+
+import GEOM
+from salome.geom import geomBuilder
+import math
+import SALOMEDS
+
+geompy = geomBuilder.New()
+
+O = geompy.MakeVertex(0, 0, 0)
+OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
+OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
+OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
+Divided_Disk_1 = geompy.MakeDividedDisk(100, 1, GEOM.SQUARE)
+geompy.addToStudy( O, 'O' )
+geompy.addToStudy( OX, 'OX' )
+geompy.addToStudy( OY, 'OY' )
+geompy.addToStudy( OZ, 'OZ' )
+geompy.addToStudy( Divided_Disk_1, 'Divided Disk_1' )
+
+import  SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+
+smesh = smeshBuilder.New()
+aFilterManager = smesh.CreateFilterManager()
+Mesh_1 = smesh.Mesh(Divided_Disk_1)
+Regular_1D = Mesh_1.Segment()
+Number_of_Segments_1 = Regular_1D.NumberOfSegments(6)
+Quadrangle_2D = Mesh_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
+isDone = Mesh_1.Compute()
+if not isDone:
+    raise Exception("Error when computing Mesh")
+
+aMaxElementLength2D0x5d7fdf0 = aFilterManager.CreateMaxElementLength2D()
+isDone = Mesh_1.QuadToTriObject( Mesh_1,  )
+Mesh_1.ExtrusionSweepObjects( [ Mesh_1 ], [ Mesh_1 ], [ Mesh_1 ], [ 0, 0, 50 ], 3, 1 )
+Mesh_1.ConvertToQuadratic(0, Mesh_1,True)
+
+infos = Mesh_1.GetMeshInfo()
+print("Number of biquadratic pentahedrons:", infos[SMESH.Entity_BiQuad_Penta])
+if (infos[SMESH.Entity_BiQuad_Penta] != 1080):
+  raise RuntimeError("Bad number of biquadratic pentahedrons: should be 1080")
+  
+## Set names of Mesh objects
+smesh.SetName(Regular_1D.GetAlgorithm(), 'Regular_1D')
+smesh.SetName(Quadrangle_2D.GetAlgorithm(), 'Quadrangle_2D')
+smesh.SetName(Number_of_Segments_1, 'Number of Segments_1')
+smesh.SetName(Mesh_1.GetMesh(), 'Mesh_1')
+
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser()
diff --git a/test/gmsh_runner.py b/test/gmsh_runner.py
new file mode 100644 (file)
index 0000000..abbe92c
--- /dev/null
@@ -0,0 +1,238 @@
+#!/usr/bin/env python
+import sys
+import salome
+
+salome.salome_init()
+
+import time
+from os import path
+import tempfile
+import subprocess
+
+import GEOM, SMESH, SALOMEDS
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+import math
+
+smesh = smeshBuilder.New()
+geompy = geomBuilder.New()
+
+import medcoupling as mc
+
+def create_gmsh_empty_param_file(param_file):
+    """ Create a parameter file for runner """
+    param = """0"""
+    with open(param_file, "w") as ffile:
+        ffile.write(param)
+
+def create_gmsh_param_file(param_file):
+    """ Create a parameter file for runner """
+    param = """1
+0
+0
+0
+0
+0
+0
+2
+1.0
+0.0
+1e22
+0.0
+0
+0
+0"""
+    with open(param_file, "w") as ffile:
+        ffile.write(param)
+
+
+def runTheMesher( mesh_2d, geo, emptyParam=False ):
+    nb_tetras = 0
+    nb_points = 0
+    nb_triangles = 0
+    nb_segments = 0
+    with tempfile.TemporaryDirectory() as tmp_dir:
+        mesh_file = path.join(tmp_dir, "mesh.med")
+        shape_file = path.join(tmp_dir, "shape.brep")
+        param_file = path.join(tmp_dir, "gmsh_param.txt")
+        new_elementsbinary = path.join(tmp_dir, "nodesAndElements.bin")
+        output_mesh = path.join(tmp_dir, "mesh3D.med")
+
+        print("Running in folder: ", tmp_dir)
+        if not ( emptyParam ):
+            create_gmsh_param_file(param_file)
+        else:
+            create_gmsh_empty_param_file(param_file)
+        mesh_2d.ExportMED(mesh_file, 0, 41, 1, mesh_2d, 1, [], '', -1, 1)
+        geompy.ExportBREP( geo, shape_file )
+        
+        runner = path.join("${GMSHPLUGIN_ROOT_DIR}",
+                           "bin",
+                           "salome",
+                           "GMSHPlugin_Runner")
+
+        if sys.platform == 'win32':
+            runner += ".exe"
+
+        cmd = "{runner} GMSH3D {mesh_file} {shape_file} "\
+              "{param_file} NONE {new_elementsbinary} {output_mesh}"\
+              .format(runner=runner,
+                      mesh_file=mesh_file,
+                      shape_file=shape_file,
+                      param_file=param_file,
+                      new_elementsbinary=new_elementsbinary,
+                      output_mesh=output_mesh)
+        print(cmd)
+        subprocess.check_call(cmd, shell=True)
+
+        mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", 0)
+
+        nb_tetras = mesh_read.getNumberOfCellsWithType(mc.NORM_TETRA4)
+        nb_points = mesh_read.getNumberOfNodes()
+
+        mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", -1)
+        nb_triangles = mesh_read.getNumberOfCellsWithType(mc.NORM_TRI3)
+
+        mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", -2)
+        nb_segments = mesh_read.getNumberOfCellsWithType(mc.NORM_SEG2)
+
+    return [nb_points, nb_segments, nb_triangles, nb_tetras]
+
+def test_gmsh3dDefault():
+    """ Test gmsh3d """
+    # Building geometry
+    box = geompy.MakeBoxDXDYDZ(200, 200, 200)
+
+    geompy.ExtractShapes(box, geompy.ShapeType["FACE"], True)
+    groupe_1 = geompy.CreateGroup(box, geompy.ShapeType["FACE"] )
+    geompy.UnionIDs(groupe_1, [3, 13, 23, 27, 31, 33])
+
+    [_, _, _, _, _, _, groupe_1] = geompy.GetExistingSubObjects(box, False)
+    
+    shape_faces = geompy.SubShapeAllSorted(box, geompy.ShapeType["FACE"])
+      
+    mesh_2d = smesh.Mesh(box, 'Maillage_1')
+
+    mesh_2d.Triangle(algo=smeshBuilder.NETGEN_1D2D)
+    isDone = mesh_2d.Compute()
+    premeshedTriangles  = mesh_2d.NbFaces()
+    premeshedTetras     = mesh_2d.NbVolumes() 
+
+    if not isDone:
+        raise Exception("Error when computing Mesh")
+
+    smesh.SetName(mesh_2d, 'Maillage_1')
+
+    [nb_points, nb_segments, nb_triangles, nb_tetras] = runTheMesher( mesh_2d, box )
+    
+
+    print("Nb Tetras:", nb_tetras)
+    print("Nb Triangles:", nb_triangles)
+    print("Nb Segments:", nb_segments)
+    print("Nb Points:", nb_points)
+    
+    assert premeshedTetras == 0      
+    assert nb_triangles == premeshedTriangles
+    assert nb_tetras == 6 # number of tetras for normalized 2D premesh (update if default 2D netgen change!)
+    assert nb_points == 8 # one node in each vertex of the cube
+    assert nb_segments > 0
+
+def test_gmsh3d():
+    """ Test gmsh3d """
+    # Building geometry
+    box = geompy.MakeBoxDXDYDZ(200, 200, 200)
+
+    geompy.ExtractShapes(box, geompy.ShapeType["FACE"], True)
+    groupe_1 = geompy.CreateGroup(box, geompy.ShapeType["FACE"] )
+    geompy.UnionIDs(groupe_1, [3, 13, 23, 27, 31, 33])
+
+    [_, _, _, _, _, _, groupe_1] = geompy.GetExistingSubObjects(box, False)
+    
+    shape_faces = geompy.SubShapeAllSorted(box, geompy.ShapeType["FACE"])
+
+    # Creating 2D mesh
+    netgen_2d_parameters_1 = smesh.CreateHypothesisByAverageLength(
+        'NETGEN_Parameters_2D', 'NETGENEngine', 34.641,  0 )
+    
+    mesh_2d = smesh.Mesh(box, 'Maillage_1')
+    mesh_2d.AddHypothesis(box, netgen_2d_parameters_1)
+
+    mesh_2d.Triangle(algo=smeshBuilder.NETGEN_1D2D)
+    isDone = mesh_2d.Compute()
+    premeshedTriangles  = mesh_2d.NbFaces()
+    premeshedTetras     = mesh_2d.NbVolumes() 
+
+    if not isDone:
+        raise Exception("Error when computing Mesh")
+
+    smesh.SetName(mesh_2d, 'Maillage_1')
+
+    [nb_points, nb_segments, nb_triangles, nb_tetras] = runTheMesher( mesh_2d, box )
+    
+
+    print("Nb Tetras:", nb_tetras)
+    print("Nb Triangles:", nb_triangles)
+    print("Nb Segments:", nb_segments)
+    print("Nb Points:", nb_points)
+    
+    assert premeshedTetras == 0      
+    assert nb_triangles == premeshedTriangles
+    assert nb_tetras > 6
+    assert nb_points > 8
+    assert nb_segments > 0
+    
+def test_gmsh3d_empty_parameters():
+    """ Test gmsh3d """
+    # Building geometry
+    box = geompy.MakeBoxDXDYDZ(200, 200, 200)
+
+    geompy.ExtractShapes(box, geompy.ShapeType["FACE"], True)
+    groupe_1 = geompy.CreateGroup(box, geompy.ShapeType["FACE"] )
+    geompy.UnionIDs(groupe_1, [3, 13, 23, 27, 31, 33])
+
+    [_, _, _, _, _, _, groupe_1] = geompy.GetExistingSubObjects(box, False)
+    
+    shape_faces = geompy.SubShapeAllSorted(box, geompy.ShapeType["FACE"])
+
+    # Creating 2D mesh
+    netgen_2d_parameters_1 = smesh.CreateHypothesisByAverageLength(
+        'NETGEN_Parameters_2D', 'NETGENEngine', 34.641,  0 )
+    
+    mesh_2d = smesh.Mesh(box, 'Maillage_1')
+    mesh_2d.AddHypothesis(box, netgen_2d_parameters_1)
+
+    mesh_2d.Triangle(algo=smeshBuilder.NETGEN_1D2D)
+    isDone = mesh_2d.Compute()
+    premeshedTriangles  = mesh_2d.NbFaces()
+    premeshedTetras     = mesh_2d.NbVolumes() 
+
+    if not isDone:
+        raise Exception("Error when computing Mesh")
+
+    smesh.SetName(mesh_2d, 'Maillage_1')
+
+    [nb_points, nb_segments, nb_triangles, nb_tetras] = runTheMesher( mesh_2d, box, True )
+    
+
+    print("Nb Tetras:", nb_tetras)
+    print("Nb Triangles:", nb_triangles)
+    print("Nb Segments:", nb_segments)
+    print("Nb Points:", nb_points)
+    
+    assert premeshedTetras == 0      
+    assert nb_triangles == premeshedTriangles
+    assert nb_tetras > 6
+    assert nb_points > 8
+    assert nb_segments > 0
+
+if __name__ == "__main__":
+    if sys.platform == "win32":
+        print("Disabled on windows")
+        sys.exit(0)
+
+    test_gmsh3dDefault()
+    test_gmsh3d()
+    test_gmsh3d_empty_parameters()
+    
diff --git a/test/netgen_runner.py b/test/netgen_runner.py
new file mode 100644 (file)
index 0000000..9e61dc7
--- /dev/null
@@ -0,0 +1,140 @@
+#!/usr/bin/env python
+import sys
+import salome
+
+salome.salome_init()
+
+from os import path
+import tempfile
+import subprocess
+
+import GEOM, SMESH, SALOMEDS
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+import math
+
+smesh = smeshBuilder.New()
+geompy = geomBuilder.New()
+
+import medcoupling as mc
+
+def create_param_file(param_file):
+    """ Create a parameter file for runner """
+    param = """1
+34.64
+0.14
+16
+0.15
+1.5
+0
+0
+1
+5
+1
+1
+-1
+3
+3
+0.2
+2
+1
+0
+0
+2
+2
+0
+
+0
+0
+0"""
+    with open(param_file, "w") as ffile:
+        ffile.write(param)
+
+
+def test_netgen3d():
+    """ Test netgen3d mesher """
+    # Building geometry
+    box = geompy.MakeBoxDXDYDZ(200, 200, 200)
+
+    geompy.ExtractShapes(box, geompy.ShapeType["FACE"], True)
+    groupe_1 = geompy.CreateGroup(box, geompy.ShapeType["FACE"] )
+    geompy.UnionIDs(groupe_1, [3, 13, 23, 27, 31, 33])
+
+    [_, _, _, _, _, _, groupe_1] = geompy.GetExistingSubObjects(box, False)
+    
+    shape_faces = geompy.SubShapeAllSorted(box, geompy.ShapeType["FACE"])
+    oneFace = shape_faces[0]
+
+    # Creating 2D mesh
+    netgen_2d_parameters_1 = smesh.CreateHypothesisByAverageLength(
+        'NETGEN_Parameters_2D', 'NETGENEngine', 34.641, 0)
+    
+    mesh_2d = smesh.Mesh(box, 'Maillage_1')
+    mesh_2d.AddHypothesis(box, netgen_2d_parameters_1)
+
+    mesh_2d.Triangle(algo=smeshBuilder.NETGEN_1D2D)
+    isDone = mesh_2d.Compute()
+
+    if not isDone:
+        raise Exception("Error when computing Mesh")
+
+    smesh.SetName(mesh_2d, 'Maillage_1')
+
+    with tempfile.TemporaryDirectory() as tmp_dir:
+        mesh_file = path.join(tmp_dir, "mesh.med")
+        shape_file = path.join(tmp_dir, "shape.step")
+        param_file = path.join(tmp_dir, "param.txt")
+        output_mesh = path.join(tmp_dir, "mesh3D.med")
+
+        print("Running in folder: ", tmp_dir)
+        create_param_file(param_file)
+
+        mesh_2d.ExportMED(mesh_file, 0, 41, 1, mesh_2d, 1, [], '', -1, 1)
+        geompy.ExportSTEP(box, shape_file, GEOM.LU_METER)
+
+        runner = path.join("${NETGENPLUGIN_ROOT_DIR}",
+                           "bin",
+                           "salome",
+                           "NETGENPlugin_Runner")
+
+        if sys.platform == 'win32':
+            runner += ".exe"
+
+        cmd = "{runner} NETGEN3D {mesh_file} {shape_file} "\
+              "{param_file} NONE NONE {output_mesh}"\
+              .format(runner=runner,
+                      mesh_file=mesh_file,
+                      shape_file=shape_file,
+                      param_file=param_file,
+                      output_mesh=output_mesh)
+        print(cmd)
+        subprocess.check_call(cmd, shell=True)
+
+        mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", 0)
+
+        nb_tetras = mesh_read.getNumberOfCellsWithType(mc.NORM_TETRA4)
+        nb_points = mesh_read.getNumberOfNodes()
+
+        mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", -1)
+        nb_triangles = mesh_read.getNumberOfCellsWithType(mc.NORM_TRI3)
+
+        mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", -2)
+        nb_segments = mesh_read.getNumberOfCellsWithType(mc.NORM_SEG2)
+
+        print("Nb Tetras:", nb_tetras)
+        print("Nb Triangles:", nb_triangles)
+        print("Nb Segments:", nb_segments)
+        print("Nb Points:", nb_points)
+
+        assert nb_points > 0
+        assert nb_segments > 0
+        assert nb_triangles > 0
+        assert nb_tetras > 0
+
+if __name__ == "__main__":
+    if sys.platform == "win32":
+        print("Disabled on windows")
+        sys.exit(0)
+    test_netgen3d()
\ No newline at end of file
diff --git a/test/netgen_runner_1D2D3D.py b/test/netgen_runner_1D2D3D.py
new file mode 100644 (file)
index 0000000..4db4912
--- /dev/null
@@ -0,0 +1,187 @@
+#!/usr/bin/env python
+import sys
+import salome
+
+salome.salome_init()
+
+from os import path
+import tempfile
+import subprocess
+
+import GEOM, SMESH, SALOMEDS
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+import math
+
+smesh = smeshBuilder.New()
+geompy = geomBuilder.New()
+
+import medcoupling as mc
+
+def create_simple2d_param_file_1D(param_file,segments,segLenght,maxArea):
+    """ Create a parameter file for runner """
+    param = """1
+{}
+{}
+{}
+0""".format(segments,segLenght,maxArea)
+    with open(param_file, "w") as ffile:
+        ffile.write(param)
+
+def create_simple2d3d_param_file_1D(param_file,segments,segLenght,maxArea,maxVolume):
+    """ Create a parameter file for runner """
+    param = """1
+{}
+{}
+{}
+{}
+0""".format(segments,segLenght,maxArea,maxVolume)
+
+    with open(param_file, "w") as ffile:
+        ffile.write(param)
+
+def CommonFunction(netgen,case,segments,segLenght,maxArea,maxVolume):
+    # Building geometry
+    box = geompy.MakeBoxDXDYDZ(200, 200, 200)
+
+    # Create 1D regular elements
+    mesh_1d = smesh.Mesh(box, 'Maillage_1')
+    mesh_1d.Segment().NumberOfSegments(1)
+    isDone = mesh_1d.Compute()
+
+    if not isDone:
+        raise Exception("Error when computing Mesh")
+
+    smesh.SetName(mesh_1d, 'Maillage_1')
+    nb_points = 0
+    nb_segments = 0
+    nb_triangles = 0
+    nb_tetras = 0
+    with tempfile.TemporaryDirectory() as tmp_dir:
+        mesh_file = path.join(tmp_dir, "mesh.med")
+        shape_file = path.join(tmp_dir, "shape.brep")
+        if ( case <= 2 ):
+            param_file = path.join(tmp_dir, "param_simple2D.txt")
+        else: 
+            param_file = path.join(tmp_dir, "param_simple3D.txt")
+
+        output_mesh = path.join(tmp_dir, "meshout.med")
+
+        print("Running in folder: ", tmp_dir)
+        
+        if ( case <= 2 ):
+            create_simple2d_param_file_1D(param_file, segments, segLenght, maxArea )
+        else:
+            create_simple2d3d_param_file_1D(param_file, segments, segLenght, maxArea, maxVolume )
+        
+        mesh_1d.ExportMED(mesh_file, 0, 41, 1, mesh_1d, 1, [], '', -1, 1)
+        geompy.ExportBREP( box, shape_file )
+
+        runner = path.join("${NETGENPLUGIN_ROOT_DIR}",
+                            "bin",
+                            "salome",
+                            "NETGENPlugin_Runner")
+
+        if sys.platform == 'win32':
+            runner += ".exe"
+
+        cmd = "{runner} {NETGEN} {mesh_file} {shape_file} "\
+                "{param_file} NONE NONE {output_mesh}"\
+                .format(runner=runner,
+                        NETGEN=netgen,
+                        mesh_file=mesh_file,
+                        shape_file=shape_file,
+                        param_file=param_file,
+                        output_mesh=output_mesh)
+        print(cmd)
+        subprocess.check_call(cmd, shell=True)   
+        mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", 0)
+        nb_points = mesh_read.getNumberOfNodes()
+        if (case == 1):
+            nb_segments = mesh_read.getNumberOfCellsWithType(mc.NORM_SEG2)
+        if (case == 2):
+            nb_triangles = mesh_read.getNumberOfCellsWithType(mc.NORM_TRI3)
+            mesh_read    = mc.ReadUMeshFromFile(output_mesh, "MESH", -1)
+            nb_segments  = mesh_read.getNumberOfCellsWithType(mc.NORM_SEG2)
+        if (case == 3):
+            nb_tetras = mesh_read.getNumberOfCellsWithType(mc.NORM_TETRA4)
+            mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", -1)
+            nb_triangles = mesh_read.getNumberOfCellsWithType(mc.NORM_TRI3)
+            mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", -2)
+            nb_segments = mesh_read.getNumberOfCellsWithType(mc.NORM_SEG2)
+            
+    return [nb_points,nb_segments,nb_triangles,nb_tetras] 
+
+def test_netgen1d():
+    [nb_points,nb_segments,nb_triangles,nb_tetras] = CommonFunction( "NETGEN1D", 1, 1, 200, 0.0, 0.0 )
+
+    print("Nb Points:", nb_points)
+    print("Nb Segments:", nb_segments)
+    assert nb_points > 0
+    assert nb_segments > 0
+    
+
+def test_netgen1d2d():
+    """ Test netgen1d2d mesher """
+    [nb_points,nb_segments,nb_triangles,nb_tetras] = CommonFunction( "NETGEN1D2D", 2, 1, 200, 0.0, 0.0 )
+    
+    print("Nb Triangles:", nb_triangles)
+    print("Nb Segments:", nb_segments)
+    print("Nb Points:", nb_points)
+
+    assert nb_triangles == 12
+    assert nb_points > 0
+    assert nb_segments > 0
+
+def test_netgen1d2dMaxArea():
+    """ Test netgen1d2d mesher """
+    [nb_points,nb_segments,nb_triangles, nb_tetras] = CommonFunction( "NETGEN1D2D", 2, 5, 200, 50.0, 0.0 )
+    
+    print("Nb Triangles:", nb_triangles)
+    print("Nb Segments:", nb_segments)
+    print("Nb Points:", nb_points)
+
+    assert nb_triangles > 12
+    assert nb_points > 0
+    assert nb_segments > 0
+
+                
+def test_netgen1d2d3d():
+    """ Test netgen1d2d mesher """
+    [nb_points,nb_segments,nb_triangles,nb_tetras] = CommonFunction( "NETGEN1D2D3D", 3, 1, 200, 0.0, 0.0 )
+
+    print("Nb Tetras:", nb_tetras)
+    print("Nb Triangles:", nb_triangles)
+    print("Nb Segments:", nb_segments)
+    print("Nb Points:", nb_points)
+    
+    assert nb_triangles == 12
+    assert nb_tetras == 5
+    assert nb_points > 0
+    assert nb_segments > 0
+
+def test_netgen1d2dMaxVolume():
+    """ Test netgen1d2d mesher """
+    [nb_points,nb_segments,nb_triangles,nb_tetras] = CommonFunction( "NETGEN1D2D3D", 3, 1, 200, 500.0, 500.0 )
+
+    print("Nb Tetras:", nb_tetras)
+    print("Nb Triangles:", nb_triangles)
+    print("Nb Segments:", nb_segments)
+    print("Nb Points:", nb_points)
+    
+    assert nb_triangles > 12
+    assert nb_tetras > 5
+    assert nb_points > 0
+    assert nb_segments > 0
+
+if __name__ == "__main__":
+    if sys.platform == "win32":
+        print("Disabled on windows")
+        sys.exit(0)
+    test_netgen1d()
+    test_netgen1d2d()
+    test_netgen1d2d3d()
+    test_netgen1d2dMaxArea()
+    test_netgen1d2dMaxVolume() 
diff --git a/test/netgen_runner_2D.py b/test/netgen_runner_2D.py
new file mode 100644 (file)
index 0000000..36be1b7
--- /dev/null
@@ -0,0 +1,182 @@
+#!/usr/bin/env python
+import sys
+import salome
+
+salome.salome_init()
+
+from os import path
+import tempfile
+import subprocess
+
+import GEOM, SMESH, SALOMEDS
+
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+
+import math
+
+smesh = smeshBuilder.New()
+geompy = geomBuilder.New()
+
+import medcoupling as mc
+
+def create_param_file(param_file):
+    """ Create a parameter file for runner """
+    param = """1
+34.641
+0.14
+16
+0.15
+1.5
+0
+0
+1
+5
+1
+1
+-1
+3
+3
+0.2
+2
+1
+0
+0
+2
+2
+0
+
+0
+0
+0"""
+    with open(param_file, "w") as ffile:
+        ffile.write(param)
+
+def create_maxarea_param_file_2D(param_file,maxArea):
+    """ Create a parameter file for runner """
+    param = """1
+{}
+""".format(maxArea)
+    with open(param_file, "w") as ffile:
+        ffile.write(param)
+
+def create_lenghtFromEdges_param_file_2D(param_file):
+    """ Create a parameter file for runner """
+    param = """1
+"""
+
+    with open(param_file, "w") as ffile:
+        ffile.write(param)
+
+def CommonFunction(netgen,case,numberOfEdges1D,hypo,maxArea):
+    # Building geometry
+    geometry = geompy.MakeBoxDXDYDZ(200, 200, 200)
+    # Create 1D regular elements
+    mesh_1d = smesh.Mesh(geometry, 'Maillage_1')
+    mesh_1d.Segment().NumberOfSegments(numberOfEdges1D)
+    isDone = mesh_1d.Compute()
+
+    if not isDone:
+        raise Exception("Error when computing Mesh")
+
+    smesh.SetName(mesh_1d, 'Maillage_1')
+    nb_points = 0
+    nb_segments = 0
+    nb_triangles = 0
+    nb_tetras = 0
+    with tempfile.TemporaryDirectory() as tmp_dir:
+        mesh_file = path.join(tmp_dir, "mesh.med")
+        shape_file = path.join(tmp_dir, "shape.brep")
+
+        if ( hypo == 0 ): 
+            param_file = path.join(tmp_dir, "param.txt")
+            create_param_file(param_file )
+
+        if ( hypo == 1 ):
+            param_file = path.join(tmp_dir, "param_lenghtfromedge.txt")
+            create_lenghtFromEdges_param_file_2D(param_file ) 
+
+        if ( hypo == 2 ):
+            param_file = path.join(tmp_dir, "param_maxarea.txt")
+            create_maxarea_param_file_2D(param_file,maxArea)            
+        
+        bin_file    =  path.join(tmp_dir, "mesh.bin")
+        output_mesh = path.join(tmp_dir, "meshout.med")
+
+        print("Running in folder: ", tmp_dir)
+                
+        mesh_1d.ExportMED(mesh_file, 0, 41, 1, mesh_1d, 1, [], '', -1, 1)
+        geompy.ExportBREP( geometry, shape_file )
+
+        runner = path.join("${NETGENPLUGIN_ROOT_DIR}",
+                            "bin",
+                            "salome",
+                            "NETGENPlugin_Runner")
+
+        if sys.platform == 'win32':
+            runner += ".exe"
+
+        cmd = "{runner} {NETGEN} {mesh_file} {shape_file} "\
+                "{param_file} NONE {bin_file} {output_mesh}"\
+                .format(runner=runner,
+                        NETGEN=netgen,
+                        mesh_file=mesh_file,
+                        shape_file=shape_file,
+                        param_file=param_file,
+                        bin_file=bin_file,
+                        output_mesh=output_mesh)
+        print(cmd)
+        subprocess.check_call(cmd, shell=True)   
+        mesh_read = mc.ReadUMeshFromFile(output_mesh, "MESH", 0)
+        nb_points = mesh_read.getNumberOfNodes()
+        if (case == 2):
+            nb_triangles = mesh_read.getNumberOfCellsWithType(mc.NORM_TRI3)
+            mesh_read    = mc.ReadUMeshFromFile(output_mesh, "MESH", -1)
+            nb_segments  = mesh_read.getNumberOfCellsWithType(mc.NORM_SEG2)
+            
+    return [nb_points,nb_segments,nb_triangles,nb_tetras] 
+    
+
+def test_netgen2d():
+    """ Test netgen2d mesher """
+    [nb_points,nb_segments,nb_triangles,nb_tetras] = CommonFunction( "NETGEN2D", 2, 3, 0, 0.0 )
+    
+    print("Nb Triangles:", nb_triangles)
+    print("Nb Segments:", nb_segments)
+    print("Nb Points:", nb_points)
+
+    assert nb_triangles > 12
+    assert nb_points > 8
+    assert nb_segments > 12
+
+def test_netgen2dMaxArea():
+    """ Test netgen2d mesher """
+    [nb_points,nb_segments,nb_triangles,nb_tetras] = CommonFunction( "NETGEN2D", 2, 3, 2, 75.0 )
+    
+    print("Nb Triangles:", nb_triangles)
+    print("Nb Segments:", nb_segments)
+    print("Nb Points:", nb_points)
+
+    assert nb_triangles > 12
+    assert nb_points > 8
+    assert nb_segments > 12
+
+def test_netgen2dLenghtFromEdge():
+    """ Test netgen2d mesher """
+    [nb_points,nb_segments,nb_triangles,nb_tetras] = CommonFunction( "NETGEN2D", 2, 1, 1, 0.0 )
+    
+    print("Nb Triangles:", nb_triangles)
+    print("Nb Segments:", nb_segments)
+    print("Nb Points:", nb_points)
+
+    assert nb_triangles == 12
+    assert nb_points == 8
+    assert nb_segments == 12
+
+if __name__ == "__main__":
+    if sys.platform == "win32":
+        print("Disabled on windows")
+        sys.exit(0)
+    test_netgen2d()
+    test_netgen2dMaxArea()
+    test_netgen2dLenghtFromEdge()
diff --git a/test/shaper_smesh_groups_without_session.py b/test/shaper_smesh_groups_without_session.py
new file mode 100644 (file)
index 0000000..f85828e
--- /dev/null
@@ -0,0 +1,83 @@
+
+"""
+Check that creating a mesh on a shaperstudy object does not raise orb not found in GetExistingSubObjects.
+It is called in SMESH GUI on Create mesh's Apply, in SMESHGUI_MeshOp::createSubMeshOnInternalEdges.
+We explicitly call GetExistingSubObjects here to be able to test it in python.
+"""
+
+import sys
+import salome
+
+salome.standalone()
+salome.salome_init()
+
+###
+### SHAPER component
+###
+
+from salome.shaper import model
+
+model.begin()
+partSet = model.moduleDocument()
+
+### Create Part
+Part_1 = model.addPart(partSet)
+Part_1_doc = Part_1.document()
+
+### Create Box
+Box_1 = model.addBox(Part_1_doc, 10, 10, 10)
+
+### Create Group
+Group_1 = model.addGroup(Part_1_doc, "Edges", [model.selection("EDGE", "[Box_1_1/Left][Box_1_1/Bottom]")])
+Group_1.setName("edge_ox")
+Group_1.result().setName("edge_ox")
+
+### Create Group
+Group_2 = model.addGroup(Part_1_doc, "Edges", [model.selection("EDGE", "[Box_1_1/Back][Box_1_1/Left]")])
+Group_2.setName("edge_oz")
+Group_2.result().setName("edge_oz")
+
+model.end()
+
+###
+### SHAPERSTUDY component
+###
+
+model.publishToShaperStudy()
+import SHAPERSTUDY
+Box_1_1, edge_ox, edge_oz = SHAPERSTUDY.shape(model.featureStringId(Box_1))
+
+###
+### SMESH component
+###
+
+import  SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+
+smesh = smeshBuilder.New()
+#smesh.SetEnablePublish( False ) # Set to False to avoid publish in study if not needed or in some particular situations:
+                                 # multiples meshes built in parallel, complex and numerous mesh edition (performance)
+
+Mesh_1 = smesh.Mesh(Box_1_1)
+Mesh_1.Segment().LocalLength(5)
+Mesh_1.Triangle()
+
+if not Mesh_1.Compute():
+  raise Exception("Error when computing Mesh_1")
+
+edge_ox_1 = Mesh_1.GroupOnGeom(edge_ox,'edge_ox',SMESH.EDGE)
+edge_oz_1 = Mesh_1.GroupOnGeom(edge_oz,'edge_oz',SMESH.EDGE)
+
+# check that ObjectToSObject works (called in GetExistingSubObjects)
+Box_1_1_sobj = salome.ObjectToSObject(Box_1_1)
+if not Box_1_1_sobj:
+  raise Exception("No SObject for Box_1_1")
+
+# check that GetExistingSubObjects works (called in SMESHGUI_MeshOp::createSubMeshOnInternalEdges)
+shaperBuilder = salome.lcc.FindOrLoadComponent("FactoryServer","SHAPERSTUDY")
+sOp = shaperBuilder.GetIShapesOperations()
+geomGroups = sOp.GetExistingSubObjects(Box_1_1, True)
+
+assert(len(geomGroups)==2)
+
+assert(Mesh_1.GetMesh().NbTriangles()>16)
diff --git a/test/ssl_hdf5_symbols_conflicts.py b/test/ssl_hdf5_symbols_conflicts.py
new file mode 100644 (file)
index 0000000..eb6d461
--- /dev/null
@@ -0,0 +1,24 @@
+#!/usr/bin/env python
+
+"""
+tuleap26358 : Non regression test pointing to an incompatibiliy between hdf5 symbols in CGNS and hdf5 symbols
+in hdf5 library.
+"""
+
+import inspect
+import os
+
+import salome
+salome.standalone()
+salome.salome_init()
+import  SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+
+smesh = smeshBuilder.New()
+
+inputMED = os.path.abspath(os.path.join(os.path.dirname(inspect.getfile(lambda: None)), 'data', 'Mesh_tri.med'))
+
+([Mesh_tri_1], status) = smesh.CreateMeshesFromMED(inputMED)
+import SMESH
+if status != SMESH.DRS_OK:
+    raise RuntimeError("Test failed")
diff --git a/test/test_helper.py b/test/test_helper.py
new file mode 100755 (executable)
index 0000000..2b94d0b
--- /dev/null
@@ -0,0 +1,56 @@
+#!/usr/bin/env python3
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+
+import unittest, sys, os
+
+class SalomeSession(object):
+    def __init__(self, script):
+        import runSalomeOld as runSalome
+        run_script = "runSalomeOld.py"
+        if sys.platform == 'win32':
+            module_dir = os.getenv("KERNEL_ROOT_DIR")
+            if module_dir: run_script = os.path.join(module_dir, "bin", "salome", run_script)
+            pass
+        sys.argv  = [run_script]
+        sys.argv += ["--terminal"]
+        sys.argv += ["--modules=GEOM,SHAPER,SHAPERSTUDY,SMESH"]
+        sys.argv += ["%s" % script]
+        if sys.platform == 'win32':
+            main_module_path = sys.modules['__main__'].__file__
+            sys.modules['__main__'].__file__ = ''
+        clt, d = runSalome.main()
+        if sys.platform == 'win32':
+            sys.modules['__main__'].__file__ = main_module_path
+        return
+
+    def __del__(self):
+        port = os.getenv('NSPORT')
+        import killSalomeWithPort
+        killSalomeWithPort.killMyPort(port)
+        return
+    pass
+
+class MyTest(unittest.TestCase):
+    def testFunction(self):
+        SalomeSession(sys.argv[1])
+    pass
+
+unittest.main(argv=sys.argv[:1])
diff --git a/test/test_import_1D2D_with_tetras_and_pyras.py b/test/test_import_1D2D_with_tetras_and_pyras.py
new file mode 100644 (file)
index 0000000..94298e3
--- /dev/null
@@ -0,0 +1,182 @@
+#!/usr/bin/env python
+
+# test fix bos #33557 Bad pyramids generated
+
+import sys
+import salome
+
+
+#nb_segs_right = 30
+#nb_segs_right = 100
+nb_segs_right = 150
+#nb_segs_right = 200
+
+algo = "MG-Tetra"
+#algo = "Netgen"
+#algo = "GMSH"
+
+algo_gmsh = "Delaunay"
+#algo_gmsh = "HXT"
+
+salome.salome_init()
+
+
+
+###
+### GEOM component
+###
+
+import GEOM
+from salome.geom import geomBuilder
+import math
+import SALOMEDS
+
+
+geompy = geomBuilder.New()
+
+O = geompy.MakeVertex(0, 0, 0)
+OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
+OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
+OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
+Vertex_1 = geompy.MakeVertex(-0.62375, 0.0575, 0.02)
+Vertex_2 = geompy.MakeVertex(-0.62375, -0.0575, 0.02)
+Vertex_3 = geompy.MakeVertex(-0.365, -0.0575, 0.02)
+Vertex_4 = geompy.MakeVertex(-0.365, 0.0575, 0.02)
+geomObj_1 = geompy.MakeMarker(0, 0, 0, 1, 0, 0, 0, 1, 0)
+Curve_1 = geompy.MakePolyline([Vertex_1, Vertex_4, Vertex_3, Vertex_2], True)
+Face_1 = geompy.MakeFaceWires([Curve_1], 1)
+[right_side] = geompy.SubShapes(Face_1, [6])
+[right_side] = geompy.GetExistingSubObjects(Face_1, False)
+path = geompy.MakePrismDXDYDZ(Vertex_3, 0, 0, 0.1)
+Translation_1 = geompy.MakeTranslation(Vertex_3, 0, -0.02, 0)
+Translation_2 = geompy.MakeTranslation(Vertex_4, 0, 0.02, 0)
+Translation_3 = geompy.MakeTranslation(Vertex_4, 0, 0.02, 0)
+Line_1 = geompy.MakeLineTwoPnt(Translation_3, Translation_1)
+Extrusion_1 = geompy.MakePrismDXDYDZ(Line_1, 0.2, 0, 0)
+Partition_1 = geompy.MakePartition([Extrusion_1], [Face_1], [], [], geompy.ShapeType["FACE"], 0, [], 0)
+Extrusion_2 = geompy.MakePrismDXDYDZ(Partition_1, 0, 0, 0.1)
+[Face_to_enforce] = geompy.SubShapes(Extrusion_2, [30])
+geompy.addToStudy( O, 'O' )
+geompy.addToStudy( OX, 'OX' )
+geompy.addToStudy( OY, 'OY' )
+geompy.addToStudy( OZ, 'OZ' )
+geompy.addToStudy( Vertex_1, 'Vertex_1' )
+geompy.addToStudy( Vertex_2, 'Vertex_2' )
+geompy.addToStudy( Vertex_3, 'Vertex_3' )
+geompy.addToStudy( Vertex_4, 'Vertex_4' )
+geompy.addToStudy( Curve_1, 'Curve_1' )
+geompy.addToStudy( Face_1, 'Face_1' )
+geompy.addToStudyInFather( Face_1, right_side, 'right_side' )
+geompy.addToStudy( path, 'path' )
+geompy.addToStudy( Translation_2, 'Translation_2' )
+geompy.addToStudy( Translation_1, 'Translation_1' )
+geompy.addToStudy( Translation_3, 'Translation_3' )
+geompy.addToStudy( Line_1, 'Line_1' )
+geompy.addToStudy( Extrusion_1, 'Extrusion_1' )
+geompy.addToStudy( Partition_1, 'Partition_1' )
+geompy.addToStudy( Extrusion_2, 'Extrusion_2' )
+geompy.addToStudyInFather( Extrusion_2, Face_to_enforce, 'Face_to_enforce' )
+
+
+# Create a group with other faces than Face_to_enforce
+all_faces = geompy.SubShapeAll(Extrusion_2, geompy.ShapeType["FACE"])
+gr_other_faces = geompy.CreateGroup(Extrusion_2, geompy.ShapeType["FACE"])
+geompy.UnionList(gr_other_faces, all_faces)
+geompy.DifferenceList(gr_other_faces, [Face_to_enforce])
+geompy.addToStudyInFather( Extrusion_2, gr_other_faces, 'other_faces' )
+
+geom_volume = geompy.BasicProperties(Extrusion_2)[2]
+
+###
+### SMESH component
+###
+
+import  SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+
+smesh = smeshBuilder.New()
+
+Mesh_1 = smesh.Mesh(Face_1,'Mesh_1')
+
+Regular_1D = Mesh_1.Segment()
+Number_of_Segments_1 = Regular_1D.NumberOfSegments(10)
+
+Quadrangle_2D = Mesh_1.Quadrangle(algo=smeshBuilder.QUADRANGLE)
+
+right_side_1 = Mesh_1.GroupOnGeom(right_side,'right_side',SMESH.EDGE)
+Regular_1D_1 = Mesh_1.Segment(geom=right_side)
+
+
+Number_of_Segments_2 = Regular_1D_1.NumberOfSegments(nb_segs_right)
+Propagation_of_1D_Hyp = Regular_1D_1.Propagation()
+
+isDone = Mesh_1.Compute()
+
+Mesh_path = smesh.Mesh(path,'Mesh_path')
+
+Regular_1D_2 = Mesh_path.Segment()
+Local_Length_1 = Regular_1D_2.LocalLength(0.01,None,1e-07)
+
+isDone = Mesh_path.Compute()
+
+([ right_side_extruded, right_side_top ], error) = Mesh_1.ExtrusionAlongPathObjects( [], [ Mesh_1 ], [ Mesh_1 ], Mesh_path, None, 1, 0, [  ], 0, 0, [ 0, 0, 0 ], 1, [  ], 0 )
+
+Mesh_2 = smesh.Mesh(Extrusion_2,'Mesh_2')
+
+# Enforce elements from Mesh_1
+Import_1D2D = Mesh_2.UseExisting2DElements(geom=Face_to_enforce)
+Source_Faces_1 = Import_1D2D.SourceFaces([ right_side_extruded ],0,0)
+
+if algo != "GMSH":
+  # CADSurf is global mesh
+  MG_CADSurf = Mesh_2.Triangle(algo=smeshBuilder.MG_CADSurf)
+else:
+  # CADSurf is a submesh on other faces
+  MG_CADSurf = Mesh_2.Triangle(algo=smeshBuilder.MG_CADSurf, geom=gr_other_faces)
+MG_CADSurf_Parameters_1 = MG_CADSurf.Parameters()
+MG_CADSurf_Parameters_1.SetGeometricMesh( 0 )
+MG_CADSurf_Parameters_1.SetPhySize( 0.005 )
+MG_CADSurf_Parameters_1.SetMinSize( 0.005 )
+MG_CADSurf_Parameters_1.SetMaxSize( 0.005 )
+MG_CADSurf_Parameters_1.SetCorrectSurfaceIntersection( False )
+MG_CADSurf_Parameters_1.SetElementType( 1 ) # Quadrangle preference
+if algo == "MG-Tetra":
+  Mesh_2.Tetrahedron(algo=smeshBuilder.MG_Tetra)
+elif algo == "Netgen":
+  Mesh_2.Tetrahedron()
+elif algo == "GMSH":
+  GMSH = Mesh_2.Tetrahedron(algo=smeshBuilder.GMSH)
+  Gmsh_Parameters = GMSH.Parameters()
+  Gmsh_Parameters.Set2DAlgo( 0 )
+  Gmsh_Parameters.SetMinSize( 0 )
+  Gmsh_Parameters.SetMaxSize(  0.005 )
+  if algo_gmsh == "HXT":
+    Gmsh_Parameters.Set3DAlgo( 4 ) 
+  else:
+    Gmsh_Parameters.Set3DAlgo( 0 ) 
+  Gmsh_Parameters.SetIs2d( 0 )
+
+Face_to_enforce_1 = Mesh_2.GroupOnGeom(Face_to_enforce,'Face_to_enforce',SMESH.FACE)
+
+
+isDone = Mesh_2.Compute()
+
+gr_pyramids = Mesh_2.MakeGroup("pyramids", SMESH.VOLUME, CritType=SMESH.FT_ElemGeomType, Threshold=SMESH.Geom_PYRAMID)
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser()
+
+if not isDone:
+  raise Exception("Error on mesh compute")
+
+mesh_volume = Mesh_2.GetVolume()
+assert abs(mesh_volume-geom_volume)/geom_volume < 1e-7, "Wrong mesh volume"
+
+min_aspect_ratio, max_aspect_ratio = Mesh_2.GetMinMax(SMESH.FT_AspectRatio3D)
+assert max_aspect_ratio < 200, "Bad aspect ratio 3D: %.1f"%max_aspect_ratio
+
+# Check min and max volume of pyramids
+min_volume, max_volume = Mesh_2.GetMinMax(SMESH.FT_Volume3D, gr_pyramids)
+assert min_volume > 1e-10, "Bad min volume: %s"%min_volume
+expected_max_volume = 6.829e-8
+assert max_volume < 1.5*expected_max_volume, "Bad max volume: %s"%max_volume
diff --git a/test/test_polyhedron_per_solid.py b/test/test_polyhedron_per_solid.py
new file mode 100644 (file)
index 0000000..e48141e
--- /dev/null
@@ -0,0 +1,129 @@
+#!/usr/bin/env python
+
+import sys
+import salome
+
+salome.salome_init_without_session()
+
+###
+### GEOM component
+###
+
+import GEOM
+from salome.geom import geomBuilder
+import math
+import SALOMEDS
+
+
+geompy = geomBuilder.New()
+
+## Creates a polygon given its centre, external radius and number of sides
+def makePolygon(p_centre, radius, nb_sides, theName=""):
+  global geompy, math
+  points = []
+  x, y, z = geompy.PointCoordinates(p_centre)
+  for i in range(nb_sides):
+    angle = i*2*math.pi/nb_sides
+    p = geompy.MakeVertex(x+radius*math.cos(angle), y+radius*math.sin(angle), 0)
+    points.append(p)
+  wire = geompy.MakePolyline(points, True)
+  face = geompy.MakeFace(wire, 1)
+  if theName:
+    geompy.addToStudy(face, theName)
+  return face
+
+## Creates a solid by adding a vertex on its top
+def makeSummitSolid(face, height, theName=""):
+  global geompy
+  p_cdg = geompy.MakeCDG(face)
+  p_top = geompy.MakeTranslation(p_cdg, 0, 0, height)
+  edges = geompy.SubShapeAll(face, geompy.ShapeType["EDGE"])
+  faces = [face]
+  for edge in edges:
+    p1, p2 = geompy.SubShapeAll(edge, geompy.ShapeType["VERTEX"])
+    wire = geompy.MakePolyline([p1, p2, p_top], True)
+    face = geompy.MakeFace(wire, 1)
+    faces.append(face)
+  shell = geompy.MakeShell(faces)
+  solid = geompy.MakeSolid(shell)
+  if theName:
+    geompy.addToStudy(solid, theName)
+  return solid
+
+O = geompy.MakeVertex(0, 0, 0)
+OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
+OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
+OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
+geompy.addToStudy( O, 'O' )
+geompy.addToStudy( OX, 'OX' )
+geompy.addToStudy( OY, 'OY' )
+geompy.addToStudy( OZ, 'OZ' )
+
+height = 0.5
+
+triangle = makePolygon(O, 1, 3, "triangle")
+
+P1 = geompy.MakeVertex(2, 0, 0)
+quadrangle = makePolygon(P1, 1, 4, "quadrangle")
+
+P2 = geompy.MakeVertex(4, 0, 0)
+pentagon = makePolygon(P2, 1, 5, "pentagon")
+
+P3 = geompy.MakeVertex(6, 0, 0)
+hexagon = makePolygon(P3, 1, 6, "hexagon")
+
+P4 = geompy.MakeVertex(8, 0, 0)
+heptagon = makePolygon(P4, 1, 7, "heptagon")
+
+P5 = geompy.MakeVertex(10, 0, 0)
+octagon = makePolygon(P5, 1, 7, "octagon")
+
+polygons = [triangle, quadrangle, pentagon, hexagon, heptagon, octagon]
+polyhedrons = []
+for polygon in polygons:
+  name = polygon.GetName()
+  polygon_extruded = geompy.MakePrismVecH(polygon, OZ, height, theName="%s_prism"%name)
+  polygon_summit = makeSummitSolid(polygon, -height, theName="%s_summit"%name)
+  polyhedrons += [polygon_extruded, polygon_summit]
+
+solids = geompy.MakeCompound(polyhedrons, theName="solids")
+
+
+###
+### SMESH component
+###
+
+import  SMESH, SALOMEDS
+from salome.smesh import smeshBuilder
+
+smesh = smeshBuilder.New()
+
+Mesh_1 = smesh.Mesh(solids)
+Regular_1D = Mesh_1.Segment()
+Number_of_Segments_1 = Regular_1D.NumberOfSegments(1)
+PolygonPerFace_2D = Mesh_1.Polygon()
+PolyhedronPerSolid_3D = Mesh_1.Polyhedron()
+
+ok = Mesh_1.Compute()
+if not ok:
+  raise Exception("Error when computing Mesh")
+
+# check volumes
+vol_geom = geompy.BasicProperties(solids)[2]
+vol_mesh = Mesh_1.GetVolume()
+
+assert abs(vol_geom - vol_mesh) < 1e-12
+
+assert Mesh_1.NbVolumes() == 12
+
+# check type of elements
+assert Mesh_1.NbTetras() == 1
+assert Mesh_1.NbHexas() == 1
+assert Mesh_1.NbPyramids() == 1
+assert Mesh_1.NbPrisms() == 1
+assert Mesh_1.NbHexagonalPrisms() == 1
+assert Mesh_1.NbPolyhedrons() == 7
+
+
+if salome.sg.hasDesktop():
+  salome.sg.updateObjBrowser()
diff --git a/test/test_smeshplugins.py b/test/test_smeshplugins.py
new file mode 100644 (file)
index 0000000..a6efe76
--- /dev/null
@@ -0,0 +1,190 @@
+#!/usr/bin/env python3
+# -*- coding: utf-8 -*-
+"""
+Test000
+Checks the availability of the external plugins :
+ 1 NETGENPLUGIN
+ 2 GMSHPLUGIN
+ 3 MG-CADSURF           (BLSURFPLUGIN)
+ 4 MG-TETRA             (GHS3DPLUGIN)
+ 5 MG-HEXA              (HEXOTICPLUGIN)
+ 6 MG-HYBRID            (HYBRIDPLUGIN)
+Copyright EDF R&D 2017
+"""
+__revision__ = "V1.0"
+#
+# Computation of the meshes: T/F
+ComputeMeshes = True
+
+import salome
+import platform
+
+salome.salome_init_without_session()
+theStudy = salome.myStudy
+#
+import iparameters
+IPAR = iparameters.IParameters(salome.myStudy.GetCommonParameters("Interface Applicative", 1))
+
+# fill list AP_MODULES_LIST
+IPAR.append("AP_MODULES_LIST", "Geometry")
+IPAR.append("AP_MODULES_LIST", "Mesh")
+
+ERROR = 0
+MESSAGE = ""
+#
+while not ERROR :
+
+###
+### A. GEOM component
+###
+  import GEOM
+  from salome.geom import geomBuilder
+  geompy = geomBuilder.New()
+  O = geompy.MakeVertex(0, 0, 0, "0")
+  OX = geompy.MakeVectorDXDYDZ(1, 0, 0, "OX")
+  OY = geompy.MakeVectorDXDYDZ(0, 1, 0, "OY")
+  OZ = geompy.MakeVectorDXDYDZ(0, 0, 1, "OZ")
+  BOX = geompy.MakeBoxDXDYDZ(200, 200, 200, "BOX")
+
+###
+### B. SMESH component
+###
+
+  import  SMESH
+  from salome.smesh import smeshBuilder
+
+  smesh = smeshBuilder.New()
+
+# B.1. NETGEN
+  TEXTE = "NETGEN_1D2D3D"
+  MESH_1 = smesh.Mesh(BOX)
+  smesh.SetName(MESH_1.GetMesh(), "M_"+TEXTE)
+  try :
+    NETGEN_2D3D = MESH_1.Tetrahedron(algo=smeshBuilder.NETGEN_1D2D3D)
+  except :
+    MESSAGE += "\nImpossible d'utiliser "+TEXTE
+    ERROR += 1
+  else :
+    if ComputeMeshes :
+      smesh.SetName(NETGEN_2D3D.GetAlgorithm(), TEXTE)
+      OK_COMPUTE = MESH_1.Compute()
+      if not OK_COMPUTE :
+        MESSAGE += "\nErreur avec "+TEXTE
+        ERROR += 1
+      else :
+        print(TEXTE+": OK")
+
+# B.2. Gmsh
+  # GMSH for windows not yet implemented BOS #18709
+  if platform.system() != "Windows" :
+    TEXTE = "Gmsh"
+    MESH_2 = smesh.Mesh(BOX)
+    smesh.SetName(MESH_2.GetMesh(), "M_"+TEXTE)
+    try :
+      GMSH = MESH_2.Tetrahedron(algo=smeshBuilder.GMSH)
+    except :
+      MESSAGE += "\nImpossible d'utiliser "+TEXTE
+      ERROR += 1
+    else :
+      if ComputeMeshes :
+        smesh.SetName(GMSH.GetAlgorithm(), TEXTE)
+        OK_COMPUTE = MESH_2.Compute()
+        if not OK_COMPUTE :
+          MESSAGE += "\nErreur avec "+TEXTE
+          ERROR += 1
+        else :
+          print(TEXTE+": OK")
+  else :
+    print("Skipping B.2 on windows")
+
+# B.3. MG_CADSurf
+  TEXTE = "MG_CADSurf"
+  MESH_3 = smesh.Mesh(BOX)
+  smesh.SetName(MESH_3.GetMesh(), "M_"+TEXTE)
+  try :
+    MG_CADSurf = MESH_3.Triangle(algo=smeshBuilder.MG_CADSurf)
+  except :
+    MESSAGE += "\nImpossible d'utiliser "+TEXTE
+    ERROR += 1
+#   On arrete tout en cas de problème car les suivants en dépendent
+    break
+  else :
+    if ComputeMeshes :
+      smesh.SetName(MG_CADSurf.GetAlgorithm(), TEXTE)
+      OK_COMPUTE = MESH_3.Compute()
+      if not OK_COMPUTE :
+        MESSAGE += "\nErreur avec "+TEXTE
+        ERROR += 1
+      else :
+        print(TEXTE+": OK")
+
+# B.4. MG_Tetra
+  TEXTE = "MG_Tetra"
+  MESH_4 = smesh.Mesh(BOX)
+  smesh.SetName(MESH_4.GetMesh(), "M_"+TEXTE)
+  MG_CADSurf_Te = MESH_4.Triangle(algo=smeshBuilder.MG_CADSurf)
+  try :
+    MG_Tetra = MESH_4.Tetrahedron(algo=smeshBuilder.MG_Tetra)
+  except :
+    MESSAGE += "\nImpossible d'utiliser "+TEXTE
+    ERROR += 1
+  else :
+    if ComputeMeshes :
+      smesh.SetName(MG_Tetra.GetAlgorithm(), TEXTE)
+      OK_COMPUTE = MESH_4.Compute()
+      if not OK_COMPUTE :
+        MESSAGE += "\nErreur avec "+TEXTE
+        ERROR += 1
+      else :
+        print(TEXTE+": OK")
+
+# B.5. MG_Hexa
+  TEXTE = "MG_Hexa"
+  MESH_5 = smesh.Mesh(BOX)
+  smesh.SetName(MESH_5.GetMesh(), "M_"+TEXTE)
+  MG_CADSurf_He = MESH_5.Triangle(algo=smeshBuilder.MG_CADSurf)
+  try :
+    MG_Hexa = MESH_5.Hexahedron(algo=smeshBuilder.MG_Hexa)
+  except :
+    MESSAGE += "\nImpossible d'utiliser "+TEXTE
+    ERROR += 1
+  else :
+    if ComputeMeshes :
+      smesh.SetName(MG_Hexa.GetAlgorithm(), TEXTE)
+      OK_COMPUTE = MESH_5.Compute()
+      if not OK_COMPUTE :
+        MESSAGE += "\nErreur avec "+TEXTE
+        ERROR += 1
+      else :
+        print(TEXTE+": OK")
+
+# B.6. MG_Hybrid
+  TEXTE = "MG_Hybrid"
+  MESH_6 = smesh.Mesh(BOX)
+  smesh.SetName(MESH_6.GetMesh(), "M_"+TEXTE)
+  MG_CADSurf_Hy = MESH_6.Triangle(algo=smeshBuilder.MG_CADSurf)
+  try :
+    MG_Hybrid = MESH_6.Tetrahedron(algo=smeshBuilder.HYBRID)
+  except :
+    MESSAGE += "\nImpossible d'utiliser "+TEXTE
+    ERROR += 1
+  else :
+    if ComputeMeshes :
+      smesh.SetName(MG_Hybrid.GetAlgorithm(), TEXTE)
+      OK_COMPUTE = MESH_6.Compute()
+      if not OK_COMPUTE :
+        MESSAGE += "\nErreur avec "+TEXTE
+        ERROR += 1
+      else :
+        print(TEXTE+": OK")
+
+  break
+
+###
+### C. End
+###
+if ERROR :
+  raise Exception("\n\nNombre d'erreurs : %d" % ERROR + MESSAGE + "\n")
+else :
+  print("\nAucun problème\n")
+
diff --git a/test/test_vlapi_growthlayer.py b/test/test_vlapi_growthlayer.py
new file mode 100644 (file)
index 0000000..4f8aa55
--- /dev/null
@@ -0,0 +1,144 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+import math
+import salome
+salome.salome_init_without_session()
+
+import GEOM
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+from salome.shaper import model
+
+def assertAlmostEqual(a,b,tol):
+   if ( abs(a-b) < tol ):
+      return True
+   else:
+      print( "not close vals", a, b )
+      return False
+
+
+geompy = geomBuilder.New()
+
+O = geompy.MakeVertex(0, 0, 0)
+OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
+OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
+OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
+
+# create a disk
+geompy.addToStudy( O, 'O' )
+geompy.addToStudy( OX, 'OX' )
+geompy.addToStudy( OY, 'OY' )
+geompy.addToStudy( OZ, 'OZ' )
+Box = geompy.MakeBox(0,0,0,10,10,10)
+
+smesh_builder = smeshBuilder.New()
+
+MesherBox = smesh_builder.Mesh(Box, "Box")
+viscousBuilder = MesherBox.ViscousLayerBuilder()
+
+#############BOX AND TETRA ELEMENTS
+#Set prismatic layer parameters
+offset = 0.7
+numLayers = 4
+viscousBuilder.setBuilderParameters( offset, numLayers, 1.2, [13], False )
+ShrinkBox = viscousBuilder.GetShrinkGeometry()
+
+#Mesh the shrink box
+MesherShinkBox = smesh_builder.Mesh(ShrinkBox, "ShrinkMesh")
+ShrinkBoxMesh = MesherShinkBox.Tetrahedron(smeshBuilder.NETGEN_1D2D3D)
+
+#Compute
+success = MesherShinkBox.Compute()
+assert( success )
+assert( MesherShinkBox.NbVolumes() == 5 ) # if Fails! change the default value of volumes when meshing with Netgen!
+
+FinalMesh = viscousBuilder.AddLayers( MesherShinkBox )
+assert( FinalMesh.NbVolumes() == 5 + numLayers * 2 )    # here 2 stands for the number of face elements per face in the box
+assert( FinalMesh.NbFaces() == 6 *  2 + 4 * numLayers ) # here is the number of face elements for the box + the new faces in the VL. (6 is the number of sides in the box)
+
+#Testing the configuration where face 13 is ignored and so the offset is applied to all other faces
+viscousBuilder.setBuilderParameters( offset, numLayers, 1.2, [13], True )
+ShrinkBox2 = viscousBuilder.GetShrinkGeometry()
+#Mesh the shrink box
+MesherShinkBox2 = smesh_builder.Mesh(ShrinkBox2, "ShrinkMesh2")
+ShrinkBoxMesh2 = MesherShinkBox2.Tetrahedron(smeshBuilder.NETGEN_1D2D3D)
+
+#Compute
+success = MesherShinkBox2.Compute()
+assert( success )
+
+#Test the number of elements on the shrink mesh
+assert( MesherShinkBox2.NbVolumes() == 5 ) # if Fails! change the default (default hypo) number of volumes when meshing with Netgen!
+
+FinalMesh2 = viscousBuilder.AddLayers( MesherShinkBox2 )
+
+assert( FinalMesh2.NbVolumes() == 5 + numLayers * 2 * 5  )   # here 2 stands for the number of face elements per face in the box
+assert( FinalMesh2.NbFaces() == 6 *  2 + 4 * numLayers ) # here is the number of face elements for the box + the new faces in the VL. (6 is the number of sides in the box)
+#############END BOX AND TETRA ELEMENTS
+
+#############MESH SQUARE FACE
+Face = geompy.MakeFaceHW(5, 5, 1)
+Disk = geompy.MakeDiskR(5, 1)
+
+MesherSqr = smesh_builder.Mesh(Face, "Face")
+viscousBuilder = MesherSqr.ViscousLayerBuilder()
+#Set prismatic layer parameters
+offset = 0.5
+numberOfLayers = 6
+viscousBuilder.setBuilderParameters( offset, numberOfLayers, 1.2 )
+ShrinkFace = viscousBuilder.GetShrinkGeometry()
+#Mesh the shrink face
+MesherShinkFace = smesh_builder.Mesh(ShrinkFace, "ShrinkFaceMesh")
+algo = MesherShinkFace.Segment()
+numOfSegments = 4
+algo.NumberOfSegments(numOfSegments)
+ShrinkFaceMesh = MesherShinkFace.Triangle()
+#Compute
+success = MesherShinkFace.Compute()
+assert( success )
+numFaceElementShrinkGeom = MesherShinkFace.NbFaces()
+FinalFaceMesh = viscousBuilder.AddLayers( MesherShinkFace )
+# Check the number of additional elements
+# numOfSegments * 4 * numberOfLayers
+finalNumOfElements = FinalFaceMesh.NbFaces()
+assert( numFaceElementShrinkGeom + 4 * numOfSegments * numberOfLayers == finalNumOfElements )
+
+#############END MESH SQUARE FACE
+
+#############MESH CIRCULAR FACE
+MesherCircle = smesh_builder.Mesh(Disk, "Disk")
+viscousBuilder = MesherCircle.ViscousLayerBuilder()
+viscousBuilder.setBuilderParameters( offset, numberOfLayers, 1.2 )
+ShrinkCircle = viscousBuilder.GetShrinkGeometry()
+MesherShinkCircle = smesh_builder.Mesh(ShrinkCircle, "ShrinkCircleMesh")
+algo = MesherShinkCircle.Segment()
+numOfSegments = 12
+algo.NumberOfSegments(numOfSegments)
+ShrinkCircleMesh = MesherShinkCircle.Triangle()
+
+#Compute
+success = MesherShinkCircle.Compute()
+numFaceElementShrinkGeom = MesherShinkCircle.NbFaces()
+assert( success )
+FinalCircleMesh = viscousBuilder.AddLayers( MesherShinkCircle )
+finalNumOfElements = FinalCircleMesh.NbFaces()
+assert( numFaceElementShrinkGeom + numOfSegments * numberOfLayers == finalNumOfElements )
+#############END MESH CIRCULAR FACE
diff --git a/test/test_vlapi_shrinkgeometry.py b/test/test_vlapi_shrinkgeometry.py
new file mode 100644 (file)
index 0000000..7929d81
--- /dev/null
@@ -0,0 +1,208 @@
+#  -*- coding: iso-8859-1 -*-
+# Copyright (C) 2007-2024  CEA, EDF, 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
+#
+
+import math
+import salome
+salome.salome_init_without_session()
+
+import GEOM
+from salome.geom import geomBuilder
+from salome.smesh import smeshBuilder
+from salome.shaper import model
+
+def assertAlmostEqual(a,b,tol):
+   if ( abs(a-b) < tol ):
+      return True
+   else:
+      print( "not close vals", a, b )
+      return False
+
+
+geompy = geomBuilder.New()
+
+O = geompy.MakeVertex(0, 0, 0)
+OX = geompy.MakeVectorDXDYDZ(1, 0, 0)
+OY = geompy.MakeVectorDXDYDZ(0, 1, 0)
+OZ = geompy.MakeVectorDXDYDZ(0, 0, 1)
+
+# create a disk
+geompy.addToStudy( O, 'O' )
+geompy.addToStudy( OX, 'OX' )
+geompy.addToStudy( OY, 'OY' )
+geompy.addToStudy( OZ, 'OZ' )
+Box = geompy.MakeBox(0,0,0,10,10,10)
+
+smesh_builder = smeshBuilder.New()
+
+MesherBox = smesh_builder.Mesh(Box, "Box")
+viscousBuilder = MesherBox.ViscousLayerBuilder()
+
+#Set prismatic layer parameters
+offset = 0.1
+
+####SHRINK THE BOX IN ALL DIRECTIONS
+#No list of faces is passed and the isToIgnore flag true by default so the offset if applied to the entire geometry
+viscousBuilder.setBuilderParameters( offset, 4, 1.2 )
+ShrinkBox = viscousBuilder.GetShrinkGeometry()
+
+BoxProperties = geompy.BasicProperties(Box)
+ShrinkBoxProperties = geompy.BasicProperties(ShrinkBox)
+assert( BoxProperties[2] > ShrinkBoxProperties[2] )
+
+assert( assertAlmostEqual( BoxProperties[2], (10.0)**(3.0), 1e-12 ) )
+#The geometry is shrank in all directions
+assert( assertAlmostEqual( ShrinkBoxProperties[2], (10.0-offset*2)**(3), 1e-12 ) )
+####END SHRINK THE BOX IN ALL DIRECTIONS
+
+####SHRINK THE BOX EXCEPT FOR ONE FACE
+viscousBuilder = MesherBox.ViscousLayerBuilder()
+selectableFaces = geompy.SubShapeAllSortedCentresIDs(Box, geompy.ShapeType["FACE"])
+# Set face 1 TO BE ignored
+viscousBuilder.setBuilderParameters( offset, 4, 1.2, [ selectableFaces[ 0 ] ], True  ) # Shrink in all faces except face id
+ShrinkBox = viscousBuilder.GetShrinkGeometry()
+ShrinkBoxProperties = geompy.BasicProperties(ShrinkBox)
+selectableShrinkFaces = geompy.SubShapeAllSortedCentresIDs(ShrinkBox, geompy.ShapeType["FACE"])
+assert( assertAlmostEqual( ShrinkBoxProperties[2], (10.0-offset*2)**(2)*(10.0-offset), 1e-12 ) )
+####END SHRINK THE BOX EXCEPT FOR ONE FACE
+
+####SHRINK THE BOX IN DIRECTION OF ONLY ONE FACE
+# Set face 1 TO NOT be ignored
+viscousBuilder.setBuilderParameters( offset, 4, 1.2, [ selectableFaces[ 0 ] ], False ) # Shrink only the faceid
+ShrinkBox = viscousBuilder.GetShrinkGeometry()
+ShrinkBoxProperties = geompy.BasicProperties(ShrinkBox)
+assert( assertAlmostEqual( ShrinkBoxProperties[2], (10.0)**(2)*(10.0-offset), 1e-12 ) )
+selectableShrinkFaces = geompy.SubShapeAllSortedCentresIDs(ShrinkBox, geompy.ShapeType["FACE"])
+####END SHRINK THE BOX IN DIRECTION OF ONLY ONE FACE
+
+####DO NOT SHRINK THE BOX
+viscousBuilder.setBuilderParameters( offset, 4, 1.2, isElementToIgnore = False )
+ShrinkBox = viscousBuilder.GetShrinkGeometry()
+BoxProperties = geompy.BasicProperties(Box)
+ShrinkBoxProperties = geompy.BasicProperties(ShrinkBox)
+assert( assertAlmostEqual( BoxProperties[2], ShrinkBoxProperties[2], 1e-12) )
+####END DO NOT SHRINK THE BOX
+
+####SHRINK THE ENTIRE SPHERE
+#Test shrinking sphere
+Radius = 10.0
+Sphere = geompy.MakeSphere(0,0,0,Radius)
+MesherSphere = smesh_builder.Mesh(Sphere, "Sphere")
+viscousBuilder = MesherSphere.ViscousLayerBuilder()
+viscousBuilder.setBuilderParameters( offset, 4, 1.2 )
+ShrinkSphere = viscousBuilder.GetShrinkGeometry()
+ShrinkSphereProperties = geompy.BasicProperties(ShrinkSphere)
+assert( ShrinkSphereProperties[2] < 4.0/3.0*math.pi * Radius**3 )
+assert( assertAlmostEqual( ShrinkSphereProperties[2], 4.0/3.0*math.pi*(10.0-offset)**(3), 1e-12 ) )
+####END SHRINK THE ENTIRE SPHERE
+
+####SHRINK THE ENTIRE CYLINDER
+#Test shrinking cylinder
+Cylinder = geompy.MakeCylinderRH(10,30)
+MesherCylinder = smesh_builder.Mesh(Cylinder, "Cylinder")
+viscousBuilder = MesherCylinder.ViscousLayerBuilder()
+viscousBuilder.setBuilderParameters( offset, 4, 1.2 )
+ShrinkCylinder = viscousBuilder.GetShrinkGeometry()
+CylinderProp = geompy.BasicProperties(Cylinder)
+ShirnkCylinderProp = geompy.BasicProperties(ShrinkCylinder)
+
+assert( CylinderProp[2] > ShirnkCylinderProp[2] )
+####END SHRINK THE ENTIRE CYLINDER
+
+####SHRINK THE ENTIRE TUBE
+#Test shrinking tube
+Circle_1 = geompy.MakeCircle(None, None, 20)
+Circle_2 = geompy.MakeCircle(None, None, 10)
+Face_1 = geompy.MakeFaceWires([Circle_1, Circle_2], 1)
+Tube = geompy.MakePrismDXDYDZ(Face_1, 0, 0, 100)
+
+MesherTube = smesh_builder.Mesh(Tube, "Tube")
+viscousBuilder = MesherTube.ViscousLayerBuilder()
+viscousBuilder.setBuilderParameters( offset, 4, 1.2 )
+ShrinkTube = viscousBuilder.GetShrinkGeometry()
+TubeProp = geompy.BasicProperties(Tube)
+ShirnkTubeProp = geompy.BasicProperties(ShrinkTube)
+assert( TubeProp[2] > ShirnkTubeProp[2] )
+####END SHRINK THE ENTIRE TUBE
+
+####SHRINK COMPOUND OBJECT TO GENERATE COMPOUND WITH COMMON FACE
+X     = geompy.MakeVectorDXDYDZ( 1,0,0 )
+O     = geompy.MakeVertex( 100,50,50 )
+plane = geompy.MakePlane( O, X, 200 ) # plane YZ
+lX    = 200
+lYlZ  = 100
+box   = geompy.MakeBoxDXDYDZ(lX,lYlZ,lYlZ)
+sBox  = geompy.MakeHalfPartition( box, plane )
+
+# Generate a uniquebody whit coincident faces
+# 4 left, 34 middle, 50 right
+ignoreFaces = [4,34,50]
+geompy.addToStudy( sBox, "SisterBox" )
+MesherSBox = smesh_builder.Mesh( sBox, "SisterBoxMesh")
+ViscousBuilder = MesherSBox.ViscousLayerBuilder()
+thickness = 20
+numberOfLayers = 10
+stretchFactor = 1.5
+ViscousBuilder.setBuilderParameters( thickness, numberOfLayers, stretchFactor, ignoreFaces )
+ShrinkSBox = ViscousBuilder.GetShrinkGeometry()
+SBoxProp = geompy.BasicProperties(sBox)
+ShirnksBoxProp = geompy.BasicProperties(ShrinkSBox)
+assert( assertAlmostEqual(ShirnksBoxProp[2], lX * (lYlZ - 2.0*thickness)**(2.0), 1e-12 ) )
+####END SHRINK COMPOUND OBJECT TO GENERATE COMPUND WITH COMMON FACE
+
+
+####SHRINK COMPOUND OBJECT TO GENERATE TWO DISJOINT SOLIDS
+ignoreFaces = [4,50]
+ViscousBuilder.setBuilderParameters( thickness, numberOfLayers, stretchFactor, ignoreFaces )
+ShrinkSBox2 = ViscousBuilder.GetShrinkGeometry()
+SBoxProp = geompy.BasicProperties(sBox)
+ShirnksBoxProp2 = geompy.BasicProperties(ShrinkSBox2)
+assert( assertAlmostEqual(ShirnksBoxProp2[2], (lX -2.0*thickness) * (lYlZ - 2.0*thickness)**(2.0), 1e-12 ) )
+####END SHRINK COMPOUND OBJECT TO GENERATE TWO DISJOINT SOLIDS
+
+
+######SHRINK SQUARE
+offset = 0.5
+numberOfLayers = 6
+Face = geompy.MakeFaceHW(5, 5, 1)
+MesherSqr = smesh_builder.Mesh(Face, "Face")
+viscousBuilder = MesherSqr.ViscousLayerBuilder()
+viscousBuilder.setBuilderParameters( offset, numberOfLayers, 1.2 )
+ShrinkFace = viscousBuilder.GetShrinkGeometry()
+
+FaceProperties = geompy.BasicProperties(Face)
+ShrinkFaceProperties = geompy.BasicProperties(ShrinkFace)
+#Test smaller face
+assert( ShrinkFaceProperties[1] < FaceProperties[1] )
+assertAlmostEqual( ShrinkFaceProperties[1], (5.0-offset*2.0)**(2.0), 1e-12 )
+######END SHRINK SQUARE
+
+######SHRINK CIRCLE
+Disk = geompy.MakeDiskR(5, 1)
+
+#Test with circle
+MesherCircle = smesh_builder.Mesh(Disk, "Disk")
+viscousBuilder = MesherCircle.ViscousLayerBuilder()
+viscousBuilder.setBuilderParameters( offset, numberOfLayers, 1.2 )
+ShrinkCircle = viscousBuilder.GetShrinkGeometry()
+FaceProperties = geompy.BasicProperties(Disk)
+ShrinkFaceProperties = geompy.BasicProperties(ShrinkCircle)
+
+assert( ShrinkFaceProperties[1] < FaceProperties[1] )
+######END SHRINK CIRCLE
diff --git a/test/tests.set b/test/tests.set
new file mode 100644 (file)
index 0000000..fb8380f
--- /dev/null
@@ -0,0 +1,141 @@
+# Copyright (C) 2015-2024  CEA, EDF, 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
+#
+
+# The following tests cannot be executed with 'make test' because they use
+# external meshing plug-ins.
+# On the other hand these tests can be executed with 'salome test'.
+# ---------------------------------------------------------------------------
+
+SET(BAD_TESTS
+  blocFissure_01_without_session.py
+  blocFissure_02_without_session.py
+  blocFissure_03_without_session.py
+  blocFissure_04_without_session.py
+  blocFissure_05_without_session.py
+  blocFissure_06_without_session.py
+  blocFissure_07_without_session.py
+  body_fitting_viscous_layer_cylinder.py
+  body_fitting_viscous_layer_tpipe.py
+  body_fitting_quanta_sphere.py
+  ex04_cube5tetraHexa.py
+  ex21_lamp.py
+  ex29_refine.py
+  ex_MakePolyLine.py
+  test_smeshplugins.py
+  test_vlapi_growthlayer.py
+  PAL_MESH_041_mesh.py
+  PAL_MESH_043_3D.py
+  SMESH_BelongToGeom.py
+  SMESH_box2_tetra.py
+  SMESH_box3_tetra.py
+  SMESH_box_tetra.py
+  SMESH_controls.py
+  SMESH_controls_scaled_jacobian.py
+  SMESH_controls_3D_warping.py
+  SMESH_fixation_netgen.py
+  SMESH_fixation_tetra.py
+  SMESH_flight_skin.py
+  SMESH_freebord.py
+  SMESH_GroupFromGeom.py
+  SMESH_GroupFromGeom2.py
+  SMESH_GroupLyingOnGeom.py
+  SMESH_mechanic_editor.py
+  SMESH_mechanic_netgen.py
+  SMESH_mechanic.py
+  SMESH_mechanic_tetra.py
+  SMESH_Nut.py
+  SMESH_Partition1_tetra.py
+  SMESH_reg.py
+  SMESH_test.py
+  SMESH_test1_AndDisplay.py
+  SMESH_test1.py
+  SMESH_test2.py
+  SMESH_test4.py
+  SMESH_create_dual_mesh_adapt.py
+  SMESH_create_dual_mesh_tpipe.py
+  netgen_runner.py
+  netgen_runner_2D.py
+  netgen_runner_1D2D3D.py
+  gmsh_runner.py
+  test_import_1D2D_with_tetras_and_pyras.py
+  )
+
+# The following tests can be executed with both 'make test' and 'salome test'.
+# ----------------------------------------------------------------------------
+
+SET(GOOD_TESTS
+  create_penta_biquad.py
+  extrusion_penta_biquad.py
+  test_polyhedron_per_solid.py
+  test_vlapi_shrinkgeometry.py
+
+  ex01_cube2build.py
+  ex02_cube2primitive.py
+  ex03_cube2partition.py
+  ex05_hole1build.py
+  ex06_hole1boolean.py
+  ex07_hole1partition.py
+  ex08_hole2build.py
+  ex09_grid4build.py
+  ex10_grid4geometry.py
+  ex11_grid3partition.py
+  ex12_grid17partition.py
+  ex13_hole1partial.py
+  ex14_cyl1holed.py
+  ex15_cyl2geometry.py
+  ex16_cyl2complementary.py
+  ex17_dome1.py
+  ex18_dome2.py
+  ex19_sphereINcube.py
+  ex24_cylinder.py
+  ex30_groupsOp.py
+  ex31_dimGroup.py
+  PAL_MESH_043_2D.py
+  SMESH_AdvancedEditor.py
+  SMESH_blocks.py
+  SMESH_box.py
+  SMESH_BuildCompound.py
+  SMESH_demo_hexa2_upd.py
+  SMESH_fixation_hexa.py
+  SMESH_fixation.py
+  SMESH_hexaedre.py
+  SMESH_Sphere.py
+  SMESH_test0.py
+  SMESH_test3.py
+  SMESH_test5.py
+  )
+
+# The following tests can be executed without driver, just by python.
+# ----------------------------------------------------------------------------
+
+SET(SESSION_FREE_TESTS
+  basic_geom_smesh_without_session.py
+  basic_shaper_smesh_without_session.py
+  basic_smesh_output_with_mc_field.py
+  doublenodes_polyhedra.py
+  shaper_smesh_groups_without_session.py
+  ssl_hdf5_symbols_conflicts.py
+  )
+
+# Additional files to install (not tests)
+# ---------------------------------------
+
+SET(OTHER_FILES
+  ex00_all.py
+  )